From: mstarzinger@chromium.org Date: Fri, 14 Feb 2014 14:58:05 +0000 (+0000) Subject: Add flags for write barrier elimination and local allocation folding. X-Git-Tag: upstream/4.7.83~10706 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=984af9c721a1999e529dafc53e361429ad83d8f7;p=platform%2Fupstream%2Fv8.git Add flags for write barrier elimination and local allocation folding. R=hpayer@chromium.org Review URL: https://codereview.chromium.org/166163003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19382 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/flag-definitions.h b/src/flag-definitions.h index 1819be0..476e534 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -254,6 +254,9 @@ DEFINE_bool(use_canonicalizing, true, "use hydrogen instruction canonicalizing") DEFINE_bool(use_inlining, true, "use function inlining") DEFINE_bool(use_escape_analysis, true, "use hydrogen escape analysis") DEFINE_bool(use_allocation_folding, true, "use allocation folding") +DEFINE_bool(use_local_allocation_folding, false, "only fold in basic blocks") +DEFINE_bool(use_write_barrier_elimination, true, + "eliminate write barriers targeting allocations in optimized code") DEFINE_int(max_inlining_levels, 5, "maximum number of inlining levels") DEFINE_int(max_inlined_source_size, 600, "maximum source size in bytes considered for a single inlining") diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc index fdd43cc..3cfce32 100644 --- a/src/hydrogen-instructions.cc +++ b/src/hydrogen-instructions.cc @@ -3438,6 +3438,15 @@ bool HAllocate::HandleSideEffectDominator(GVNFlag side_effect, return false; } + // Check whether we are folding within the same block for local folding. + if (FLAG_use_local_allocation_folding && dominator->block() != block()) { + if (FLAG_trace_allocation_folding) { + PrintF("#%d (%s) cannot fold into #%d (%s), crosses basic blocks\n", + id(), Mnemonic(), dominator->id(), dominator->Mnemonic()); + } + return false; + } + HAllocate* dominator_allocate = HAllocate::cast(dominator); HValue* dominator_size = dominator_allocate->size(); HValue* current_size = size(); diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index 86624d0..4976f7b 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -6528,6 +6528,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { virtual bool HandleSideEffectDominator(GVNFlag side_effect, HValue* dominator) V8_OVERRIDE { ASSERT(side_effect == kNewSpacePromotion); + if (!FLAG_use_write_barrier_elimination) return false; new_space_dominator_ = dominator; return false; }