Skip to content

Commit 31df032

Browse files
mi-acV8 LUCI CQ
authored andcommitted
Revert "[heap] Refine ephemeron key processing"
This reverts commit bfbbaaa. Reason for revert: https://ci.chromium.org/ui/p/v8/builders/ci/V8%20Blink%20Linux%20Debug/30190/overview Also blocks roll. Original change's description: > [heap] Refine ephemeron key processing > > Clean up the logic around ephemeron key processing, to remove duplicate > checks for forwarding address, and avoid no-op resetting of the key slot > with a non-forwarded live value. > > Change-Id: Ia54002696b0c0743e8276ebee71d3b9972019ada > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6909217 > Auto-Submit: Leszek Swirski <[email protected]> > Reviewed-by: Michael Lippautz <[email protected]> > Commit-Queue: Leszek Swirski <[email protected]> > Commit-Queue: Michael Lippautz <[email protected]> > Cr-Commit-Position: refs/heads/main@{#102378} No-Presubmit: true No-Tree-Checks: true No-Try: true Change-Id: I9d37fc005d4b464a1f3ea37638ca77bc61d7f02c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6939006 Auto-Submit: Michael Achenbach <[email protected]> Owners-Override: Michael Achenbach <[email protected]> Commit-Queue: Rubber Stamper <[email protected]> Bot-Commit: Rubber Stamper <[email protected]> Cr-Commit-Position: refs/heads/main@{#102397}
1 parent 357d268 commit 31df032

File tree

1 file changed

+15
-30
lines changed

1 file changed

+15
-30
lines changed

src/heap/scavenger.cc

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,21 @@ class IterateAndScavengePromotedObjectsVisitor final
187187

188188
namespace {
189189

190-
V8_INLINE bool IsUnscavengedHeapObject(Tagged<Object> object) {
190+
V8_INLINE bool IsUnscavengedHeapObject(Heap* heap, Tagged<Object> object) {
191191
return Heap::InFromPage(object) && !Cast<HeapObject>(object)
192192
->map_word(kRelaxedLoad)
193193
.IsForwardingAddress();
194194
}
195195

196+
// Same as IsUnscavengedHeapObject() above but specialized for HeapObjects.
197+
V8_INLINE bool IsUnscavengedHeapObject(Heap* heap,
198+
Tagged<HeapObject> heap_object) {
199+
return Heap::InFromPage(heap_object) &&
200+
!heap_object->map_word(kRelaxedLoad).IsForwardingAddress();
201+
}
202+
196203
bool IsUnscavengedHeapObjectSlot(Heap* heap, FullObjectSlot p) {
197-
return IsUnscavengedHeapObject(*p);
204+
return IsUnscavengedHeapObject(heap, *p);
198205
}
199206

200207
} // namespace
@@ -1308,24 +1315,17 @@ void ScavengerCollector::ProcessWeakReferences(
13081315
// entry has a dead new-space key.
13091316
void ScavengerCollector::ClearYoungEphemerons(
13101317
EphemeronRememberedSet::TableList* ephemeron_table_list) {
1311-
ephemeron_table_list->Iterate([](Tagged<EphemeronHashTable> table) {
1318+
ephemeron_table_list->Iterate([this](Tagged<EphemeronHashTable> table) {
13121319
for (InternalIndex i : table->IterateEntries()) {
13131320
// Keys in EphemeronHashTables must be heap objects.
13141321
HeapObjectSlot key_slot(
13151322
table->RawFieldOfElementAt(EphemeronHashTable::EntryToIndex(i)));
13161323
Tagged<HeapObject> key = key_slot.ToHeapObject();
1317-
// If the key is not in the from page, it's not being scavenged.
1318-
if (!Heap::InFromPage(key)) continue;
1319-
DCHECK(!IsAnyHole(key));
1320-
MapWord map_word = key->map_word(kRelaxedLoad);
1321-
if (!map_word.IsForwardingAddress()) {
1322-
// If the key is not forwarded, then it's dead.
1323-
DCHECK(IsUnscavengedHeapObject(key));
1324+
if (IsUnscavengedHeapObject(heap_, key)) {
13241325
table->RemoveEntry(i);
13251326
} else {
1326-
// Otherwise, we need to update the key slot to the forwarded address.
1327-
DCHECK(!IsUnscavengedHeapObject(key));
1328-
key_slot.StoreHeapObject(map_word.ToForwardingAddress(key));
1327+
Tagged<HeapObject> forwarded = ForwardingAddress(key);
1328+
key_slot.StoreHeapObject(forwarded);
13291329
}
13301330
}
13311331
});
@@ -1344,28 +1344,13 @@ void ScavengerCollector::ClearOldEphemerons() {
13441344
HeapObjectSlot key_slot(table->RawFieldOfElementAt(
13451345
EphemeronHashTable::EntryToIndex(InternalIndex(*iti))));
13461346
Tagged<HeapObject> key = key_slot.ToHeapObject();
1347-
// If the key is not young, we don't need it in the remembered set.
1348-
if (!HeapLayout::InYoungGeneration(key)) {
1349-
iti = indices.erase(iti);
1350-
}
1351-
DCHECK(!IsAnyHole(key));
1352-
// If the key is not in the from page, it's not being scavenged.
1353-
if (!Heap::InFromPage(key)) continue;
1354-
MapWord map_word = key->map_word(kRelaxedLoad);
1355-
DCHECK_IMPLIES(Heap::InToPage(key), !map_word.IsForwardingAddress());
1356-
if (!map_word.IsForwardingAddress()) {
1357-
// If the key is not forwarded, then it's dead.
1358-
DCHECK(IsUnscavengedHeapObject(key));
1347+
if (IsUnscavengedHeapObject(heap_, key)) {
13591348
table->RemoveEntry(InternalIndex(*iti));
13601349
iti = indices.erase(iti);
13611350
} else {
1362-
// Otherwise, we need to update the key slot to the forwarded address.
1363-
DCHECK(!IsUnscavengedHeapObject(key));
1364-
Tagged<HeapObject> forwarded = map_word.ToForwardingAddress(key);
1351+
Tagged<HeapObject> forwarded = ForwardingAddress(key);
13651352
key_slot.StoreHeapObject(forwarded);
13661353
if (!HeapLayout::InYoungGeneration(forwarded)) {
1367-
// If the key was promoted out of new space, we don't need to keep it
1368-
// in the remembered set.
13691354
iti = indices.erase(iti);
13701355
} else {
13711356
++iti;

0 commit comments

Comments
 (0)