From e5d9803c17808b8d6f9d3d856846fee879211609 Mon Sep 17 00:00:00 2001 From: "hpayer@chromium.org" Date: Wed, 29 Jan 2014 17:03:57 +0000 Subject: [PATCH] Make eager allocation site pretenuring decisions. BUG= R=mvstanton@chromium.org Review URL: https://codereview.chromium.org/149393005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18927 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/heap-inl.h | 1 - src/heap.cc | 7 ++----- src/heap.h | 8 +------- src/objects.cc | 3 +-- 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/heap-inl.h b/src/heap-inl.h index d878daa..f55073c 100644 --- a/src/heap-inl.h +++ b/src/heap-inl.h @@ -491,7 +491,6 @@ void Heap::UpdateAllocationSiteFeedback(HeapObject* object) { ASSERT(heap->InNewSpace(object)); if (!FLAG_allocation_site_pretenuring || - !heap->new_space_high_promotion_mode_active_ || !AllocationSite::CanTrack(object->map()->instance_type())) return; // Either object is the last object in the from space, or there is another diff --git a/src/heap.cc b/src/heap.cc index 862e2ea..a8d16ae 100644 --- a/src/heap.cc +++ b/src/heap.cc @@ -506,8 +506,7 @@ void Heap::RepairFreeListsAfterBoot() { void Heap::ProcessPretenuringFeedback() { - if (FLAG_allocation_site_pretenuring && - new_space_high_promotion_mode_active_) { + if (FLAG_allocation_site_pretenuring) { int tenure_decisions = 0; int dont_tenure_decisions = 0; int allocation_mementos_found = 0; @@ -1113,9 +1112,7 @@ bool Heap::PerformGarbageCollection( // to deoptimize all optimized code in global pretenuring mode and all // code which should be tenured in local pretenuring mode. if (FLAG_pretenuring) { - if (FLAG_allocation_site_pretenuring) { - ResetAllAllocationSitesDependentCode(NOT_TENURED); - } else { + if (!FLAG_allocation_site_pretenuring) { isolate_->stack_guard()->FullDeopt(); } } diff --git a/src/heap.h b/src/heap.h index c9101be..9655d38 100644 --- a/src/heap.h +++ b/src/heap.h @@ -1512,17 +1512,11 @@ class Heap { 8 * (Page::kPageSize > MB ? Page::kPageSize : MB); intptr_t OldGenerationAllocationLimit(intptr_t old_gen_size) { - const int divisor = FLAG_stress_compaction ? 10 : - new_space_high_promotion_mode_active_ ? 1 : 3; + const int divisor = FLAG_stress_compaction ? 10 : 1; intptr_t limit = Max(old_gen_size + old_gen_size / divisor, kMinimumOldGenerationAllocationLimit); limit += new_space_.Capacity(); - // TODO(hpayer): Can be removed when when pretenuring is supported for all - // allocation sites. - if (IsHighSurvivalRate() && IsStableOrIncreasingSurvivalTrend()) { - limit *= 2; - } intptr_t halfway_to_the_max = (old_gen_size + max_old_generation_size_) / 2; return Min(limit, halfway_to_the_max); } diff --git a/src/objects.cc b/src/objects.cc index a30489e..132c72c 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -12733,8 +12733,7 @@ void AllocationSite::ResetPretenureDecision() { PretenureFlag AllocationSite::GetPretenureMode() { PretenureDecision mode = pretenure_decision(); // Zombie objects "decide" to be untenured. - return (mode == kTenure && GetHeap()->GetPretenureMode() == TENURED) - ? TENURED : NOT_TENURED; + return mode == kTenure ? TENURED : NOT_TENURED; } -- 2.7.4