| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index fc42fc7ecc43c263aef2dd187b5ef21dae588f73..6512c607799dd34fd71e69aa8e656681ff3f5e42 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -11091,24 +11091,6 @@ void Map::ZapPrototypeTransitions() {
|
| }
|
|
|
|
|
| -void Map::AddDependentCompilationInfo(DependentCode::DependencyGroup group,
|
| - CompilationInfo* info) {
|
| - Handle<DependentCode> dep(dependent_code());
|
| - Handle<DependentCode> codes =
|
| - DependentCode::Insert(dep, group, info->object_wrapper());
|
| - if (*codes != dependent_code()) set_dependent_code(*codes);
|
| - info->dependent_maps(group)->Add(Handle<Map>(this), info->zone());
|
| -}
|
| -
|
| -
|
| -void Map::AddDependentCode(DependentCode::DependencyGroup group,
|
| - Handle<Code> code) {
|
| - Handle<DependentCode> codes = DependentCode::Insert(
|
| - Handle<DependentCode>(dependent_code()), group, code);
|
| - if (*codes != dependent_code()) set_dependent_code(*codes);
|
| -}
|
| -
|
| -
|
| DependentCode::GroupStartIndexes::GroupStartIndexes(DependentCode* entries) {
|
| Recompute(entries);
|
| }
|
| @@ -11125,13 +11107,13 @@ void DependentCode::GroupStartIndexes::Recompute(DependentCode* entries) {
|
|
|
| Handle<DependentCode> DependentCode::Insert(Handle<DependentCode> entries,
|
| DependencyGroup group,
|
| - Handle<Object> object) {
|
| + Handle<Code> value) {
|
| GroupStartIndexes starts(*entries);
|
| int start = starts.at(group);
|
| int end = starts.at(group + 1);
|
| int number_of_entries = starts.number_of_entries();
|
| - if (start < end && entries->object_at(end - 1) == *object) {
|
| - // Do not append the compilation info if it is already in the array.
|
| + if (start < end && entries->code_at(end - 1) == *value) {
|
| + // Do not append the code if it is already in the array.
|
| // It is sufficient to just check only the last element because
|
| // we process embedded maps of an optimized code in one batch.
|
| return entries;
|
| @@ -11148,7 +11130,7 @@ Handle<DependentCode> DependentCode::Insert(Handle<DependentCode> entries,
|
| end = starts.at(group + 1);
|
| number_of_entries = starts.number_of_entries();
|
| for (int i = 0; i < number_of_entries; i++) {
|
| - entries->clear_at(i);
|
| + entries->clear_code_at(i);
|
| }
|
| // If the old fixed array was empty, we need to reset counters of the
|
| // new array.
|
| @@ -11160,78 +11142,17 @@ Handle<DependentCode> DependentCode::Insert(Handle<DependentCode> entries,
|
| entries = new_entries;
|
| }
|
| entries->ExtendGroup(group);
|
| - entries->set_object_at(end, *object);
|
| + entries->set_code_at(end, *value);
|
| entries->set_number_of_entries(group, end + 1 - start);
|
| return entries;
|
| }
|
|
|
|
|
| -void DependentCode::UpdateToFinishedCode(DependencyGroup group,
|
| - CompilationInfo* info,
|
| - Code* code) {
|
| - DisallowHeapAllocation no_gc;
|
| - AllowDeferredHandleDereference get_object_wrapper;
|
| - Foreign* info_wrapper = *info->object_wrapper();
|
| - GroupStartIndexes starts(this);
|
| - int start = starts.at(group);
|
| - int end = starts.at(group + 1);
|
| - for (int i = start; i < end; i++) {
|
| - if (object_at(i) == info_wrapper) {
|
| - set_object_at(i, code);
|
| - break;
|
| - }
|
| - }
|
| -
|
| -#ifdef DEBUG
|
| - for (int i = start; i < end; i++) {
|
| - ASSERT(is_code_at(i) || compilation_info_at(i) != info);
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -
|
| -void DependentCode::RemoveCompilationInfo(DependentCode::DependencyGroup group,
|
| - CompilationInfo* info) {
|
| - DisallowHeapAllocation no_allocation;
|
| - AllowDeferredHandleDereference get_object_wrapper;
|
| - Foreign* info_wrapper = *info->object_wrapper();
|
| - GroupStartIndexes starts(this);
|
| - int start = starts.at(group);
|
| - int end = starts.at(group + 1);
|
| - // Find compilation info wrapper.
|
| - int info_pos = -1;
|
| - for (int i = start; i < end; i++) {
|
| - if (object_at(i) == info_wrapper) {
|
| - info_pos = i;
|
| - break;
|
| - }
|
| - }
|
| - if (info_pos == -1) return; // Not found.
|
| - int gap = info_pos;
|
| - // Use the last of each group to fill the gap in the previous group.
|
| - for (int i = group; i < kGroupCount; i++) {
|
| - int last_of_group = starts.at(group + 1) - 1;
|
| - ASSERT(last_of_group >= gap);
|
| - if (last_of_group == gap) continue;
|
| - copy(last_of_group, gap);
|
| - gap = last_of_group;
|
| - }
|
| - clear_at(gap); // Clear last gap.
|
| - set_number_of_entries(group, end - start - 1);
|
| -
|
| -#ifdef DEBUG
|
| - for (int i = start; i < end - 1; i++) {
|
| - ASSERT(is_code_at(i) || compilation_info_at(i) != info);
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -
|
| bool DependentCode::Contains(DependencyGroup group, Code* code) {
|
| GroupStartIndexes starts(this);
|
| - int number_of_entries = starts.number_of_code_entries();
|
| + int number_of_entries = starts.at(kGroupCount);
|
| for (int i = 0; i < number_of_entries; i++) {
|
| - if (object_at(i) == code) return true;
|
| + if (code_at(i) == code) return true;
|
| }
|
| return false;
|
| }
|
| @@ -11252,25 +11173,20 @@ void DependentCode::DeoptimizeDependentCodeGroup(
|
| DependentCode::GroupStartIndexes starts(this);
|
| int start = starts.at(group);
|
| int end = starts.at(group + 1);
|
| - int code_entries = starts.number_of_code_entries();
|
| + int number_of_entries = starts.at(DependentCode::kGroupCount);
|
| if (start == end) return;
|
| for (int i = start; i < end; i++) {
|
| - if (is_code_at(i)) {
|
| - Code* code = code_at(i);
|
| - code->set_marked_for_deoptimization(true);
|
| - } else {
|
| - CompilationInfo* info = compilation_info_at(i);
|
| - info->AbortDueToDependentMap();
|
| - }
|
| + Code* code = code_at(i);
|
| + code->set_marked_for_deoptimization(true);
|
| }
|
| // Compact the array by moving all subsequent groups to fill in the new holes.
|
| - for (int src = end, dst = start; src < code_entries; src++, dst++) {
|
| - copy(src, dst);
|
| + for (int src = end, dst = start; src < number_of_entries; src++, dst++) {
|
| + set_code_at(dst, code_at(src));
|
| }
|
| // Now the holes are at the end of the array, zap them for heap-verifier.
|
| int removed = end - start;
|
| - for (int i = code_entries - removed; i < code_entries; i++) {
|
| - clear_at(i);
|
| + for (int i = number_of_entries - removed; i < number_of_entries; i++) {
|
| + clear_code_at(i);
|
| }
|
| set_number_of_entries(group, 0);
|
| DeoptimizeDependentCodeFilter filter;
|
|
|