Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index b85eac034aec42ced38ed3473eb332580b532a6a..fa127db6129c0f1598eb2140f3d1fdb294ff4e90 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -385,7 +385,7 @@ void MarkCompactCollector::VerifyWeakEmbeddedObjectsInCode() { |
for (HeapObject* obj = code_iterator.Next(); obj != NULL; |
obj = code_iterator.Next()) { |
Code* code = Code::cast(obj); |
- if (!code->is_optimized_code() && !code->is_weak_stub()) continue; |
+ if (!code->is_optimized_code()) continue; |
if (WillBeDeoptimized(code)) continue; |
code->VerifyEmbeddedObjectsDependency(); |
} |
@@ -2545,34 +2545,12 @@ void MarkCompactCollector::TrimEnumCache(Map* map, |
} |
-void MarkCompactCollector::ClearDependentICList(Object* head) { |
- Object* current = head; |
- Object* undefined = heap()->undefined_value(); |
- while (current != undefined) { |
- Code* code = Code::cast(current); |
- if (IsMarked(code)) { |
- DCHECK(code->is_weak_stub()); |
- IC::InvalidateMaps(code); |
- } |
- current = code->next_code_link(); |
- code->set_next_code_link(undefined); |
- } |
-} |
- |
- |
void MarkCompactCollector::ClearDependentCode(DependentCode* entries) { |
DisallowHeapAllocation no_allocation; |
DependentCode::GroupStartIndexes starts(entries); |
int number_of_entries = starts.number_of_entries(); |
if (number_of_entries == 0) return; |
- int g = DependentCode::kWeakICGroup; |
- if (starts.at(g) != starts.at(g + 1)) { |
- int i = starts.at(g); |
- DCHECK(i + 1 == starts.at(g + 1)); |
- Object* head = entries->object_at(i); |
- ClearDependentICList(head); |
- } |
- g = DependentCode::kWeakCodeGroup; |
+ int g = DependentCode::kWeakCodeGroup; |
for (int i = starts.at(g); i < starts.at(g + 1); i++) { |
// If the entry is compilation info then the map must be alive, |
// and ClearDependentCode shouldn't be called. |
@@ -2594,34 +2572,17 @@ void MarkCompactCollector::ClearDependentCode(DependentCode* entries) { |
int MarkCompactCollector::ClearNonLiveDependentCodeInGroup( |
DependentCode* entries, int group, int start, int end, int new_start) { |
int survived = 0; |
- if (group == DependentCode::kWeakICGroup) { |
- // Dependent weak IC stubs form a linked list and only the head is stored |
- // in the dependent code array. |
- if (start != end) { |
- DCHECK(start + 1 == end); |
- Object* old_head = entries->object_at(start); |
- MarkCompactWeakObjectRetainer retainer; |
- Object* head = VisitWeakList<Code>(heap(), old_head, &retainer); |
- entries->set_object_at(new_start, head); |
- Object** slot = entries->slot_at(new_start); |
- RecordSlot(slot, slot, head); |
- // We do not compact this group even if the head is undefined, |
- // more dependent ICs are likely to be added later. |
- survived = 1; |
- } |
- } else { |
- for (int i = start; i < end; i++) { |
- Object* obj = entries->object_at(i); |
- DCHECK(obj->IsCode() || IsMarked(obj)); |
- if (IsMarked(obj) && |
- (!obj->IsCode() || !WillBeDeoptimized(Code::cast(obj)))) { |
- if (new_start + survived != i) { |
- entries->set_object_at(new_start + survived, obj); |
- } |
- Object** slot = entries->slot_at(new_start + survived); |
- RecordSlot(slot, slot, obj); |
- survived++; |
+ for (int i = start; i < end; i++) { |
+ Object* obj = entries->object_at(i); |
+ DCHECK(obj->IsCode() || IsMarked(obj)); |
+ if (IsMarked(obj) && |
+ (!obj->IsCode() || !WillBeDeoptimized(Code::cast(obj)))) { |
+ if (new_start + survived != i) { |
+ entries->set_object_at(new_start + survived, obj); |
} |
+ Object** slot = entries->slot_at(new_start + survived); |
+ RecordSlot(slot, slot, obj); |
+ survived++; |
} |
} |
entries->set_number_of_entries( |