Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index 878efd639e192c04147f8c583e045c90999b4fa7..f269cda6ffde716c9ef98d3526ea0af2b0a2a86b 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -293,8 +293,6 @@ void MarkCompactCollector::ClearInvalidSlotsBufferEntries(PagedSpace* space) { |
void MarkCompactCollector::ClearInvalidStoreAndSlotsBufferEntries() { |
heap_->store_buffer()->ClearInvalidStoreBufferEntries(); |
- RemoveDeoptimizedCodeSlots(); |
- |
ClearInvalidSlotsBufferEntries(heap_->old_space()); |
ClearInvalidSlotsBufferEntries(heap_->code_space()); |
ClearInvalidSlotsBufferEntries(heap_->map_space()); |
@@ -769,7 +767,6 @@ void MarkCompactCollector::AbortCompaction() { |
} |
compacting_ = false; |
evacuation_candidates_.Rewind(0); |
- invalidated_code_.Rewind(0); |
} |
DCHECK_EQ(0, evacuation_candidates_.length()); |
} |
@@ -3593,7 +3590,11 @@ void MarkCompactCollector::InvalidateCode(Code* code) { |
MarkBit mark_bit = Marking::MarkBitFrom(code); |
if (Marking::IsWhite(mark_bit)) return; |
- invalidated_code_.Add(code); |
+ // Ignore all slots that might have been recorded in the body of the |
+ // deoptimized code object. Assumption: no slots will be recorded for |
+ // this object after invalidating it. |
+ RemoveObjectSlots(code->instruction_start(), |
+ code->address() + code->Size()); |
} |
} |
@@ -3604,42 +3605,6 @@ bool MarkCompactCollector::WillBeDeoptimized(Code* code) { |
} |
-void MarkCompactCollector::RemoveDeoptimizedCodeSlots() { |
- int length = invalidated_code_.length(); |
- for (int i = 0; i < length; i++) { |
- Code* code = invalidated_code_[i]; |
- Page* p = Page::FromAddress(code->address()); |
- if (!p->IsEvacuationCandidate() && |
- !p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) { |
- // Ignore all slots that might have been recorded in the body of the |
- // deoptimized code object. |
- RemoveObjectSlots(code->instruction_start(), |
- code->address() + code->Size()); |
- } |
- } |
-} |
- |
- |
-void MarkCompactCollector::RemoveDeadInvalidatedCode() { |
- int length = invalidated_code_.length(); |
- for (int i = 0; i < length; i++) { |
- if (!IsMarked(invalidated_code_[i])) invalidated_code_[i] = NULL; |
- } |
-} |
- |
- |
-void MarkCompactCollector::ProcessInvalidatedCode(ObjectVisitor* visitor) { |
- int length = invalidated_code_.length(); |
- for (int i = 0; i < length; i++) { |
- Code* code = invalidated_code_[i]; |
- if (code != NULL) { |
- code->Iterate(visitor); |
- } |
- } |
- invalidated_code_.Rewind(0); |
-} |
- |
- |
void MarkCompactCollector::RemoveObjectSlots(Address start_slot, |
Address end_slot) { |
// Remove entries by replacing them with an old-space slot containing a smi |
@@ -3801,10 +3766,6 @@ void MarkCompactCollector::EvacuateNewSpaceAndCandidates() { |
EvacuationWeakObjectRetainer evacuation_object_retainer; |
heap()->ProcessAllWeakReferences(&evacuation_object_retainer); |
- // Visit invalidated code (we ignored all slots on it) and clear mark-bits |
- // under it. |
- ProcessInvalidatedCode(&updating_visitor); |
- |
heap_->isolate()->inner_pointer_to_code_cache()->Flush(); |
slots_buffer_allocator_.DeallocateChain(&migration_slots_buffer_); |
@@ -4434,8 +4395,6 @@ void MarkCompactCollector::SweepSpaces() { |
} |
} |
- RemoveDeadInvalidatedCode(); |
- |
EvacuateNewSpaceAndCandidates(); |
heap()->FreeDeadArrayBuffers(false); |