From 067d921cc0d50d6781e1544f90b427feb1f1a30e Mon Sep 17 00:00:00 2001 From: "hpayer@chromium.org" Date: Mon, 22 Jul 2013 12:34:23 +0000 Subject: [PATCH] Limit the amount of memory that can be folded together. BUG= R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/19804002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15804 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen-instructions.cc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc index 932b9b2..16476a9 100644 --- a/src/hydrogen-instructions.cc +++ b/src/hydrogen-instructions.cc @@ -3229,12 +3229,21 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect, HConstant::cast(dominator_size)->GetInteger32Constant(); int32_t current_size_constant = HConstant::cast(current_size)->GetInteger32Constant(); + int32_t new_dominator_size = dominator_size_constant + current_size_constant; + if (new_dominator_size > Page::kMaxNonCodeHeapObjectSize) { + if (FLAG_trace_allocation_folding) { + PrintF("#%d (%s) cannot fold into #%d (%s) due to size: %d\n", + id(), Mnemonic(), dominator->id(), dominator->Mnemonic(), + new_dominator_size); + } + return; + } HBasicBlock* block = dominator->block(); Zone* zone = block->zone(); - HInstruction* new_dominator_size = new(zone) HConstant( - dominator_size_constant + current_size_constant); - new_dominator_size->InsertBefore(dominator_allocate_instr); - dominator_allocate_instr->UpdateSize(new_dominator_size); + HInstruction* new_dominator_size_constant = new(zone) HConstant( + new_dominator_size); + new_dominator_size_constant->InsertBefore(dominator_allocate_instr); + dominator_allocate_instr->UpdateSize(new_dominator_size_constant); #ifdef VERIFY_HEAP if (FLAG_verify_heap) { -- 2.7.4