Chromium Code Reviews| Index: src/hydrogen-instructions.cc |
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
| index 16476a9c5a95c2b9a1bcca90e388255d7d25438b..2b12ba517f9ffe5754c2e2713ef6cbd6e22ad902 100644 |
| --- a/src/hydrogen-instructions.cc |
| +++ b/src/hydrogen-instructions.cc |
| @@ -3210,7 +3210,6 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect, |
| HValue* dominator_size = dominator_allocate_instr->size(); |
| HValue* current_size = size(); |
| // We can just fold allocations that are guaranteed in new space. |
| - // TODO(hpayer): Support double aligned allocations. |
| // TODO(hpayer): Add support for non-constant allocation in dominator. |
| if (!GuaranteedInNewSpace() || MustAllocateDoubleAligned() || |
|
Michael Starzinger
2013/07/23 11:24:14
The predicates need to be removed from this early
Hannes Payer (out of office)
2013/07/23 19:26:37
Done.
|
| !current_size->IsInteger32Constant() || |
| @@ -3230,6 +3229,17 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect, |
| int32_t current_size_constant = |
| HConstant::cast(current_size)->GetInteger32Constant(); |
| int32_t new_dominator_size = dominator_size_constant + current_size_constant; |
| + |
| + if (MustAllocateDoubleAligned()) { |
| + if (!dominator_allocate_instr->MustAllocateDoubleAligned()) { |
| + dominator_allocate_instr->SetFlags(HAllocate::ALLOCATE_DOUBLE_ALIGNED); |
| + } |
| + if ((dominator_size_constant & kDoubleAlignmentMask) != 0) { |
| + dominator_size_constant += kDoubleSize / 2; |
| + new_dominator_size += kDoubleSize / 2; |
| + } |
| + } |
| + |
| if (new_dominator_size > Page::kMaxNonCodeHeapObjectSize) { |
| if (FLAG_trace_allocation_folding) { |
| PrintF("#%d (%s) cannot fold into #%d (%s) due to size: %d\n", |