| Index: src/lithium-allocator.cc
|
| diff --git a/src/lithium-allocator.cc b/src/lithium-allocator.cc
|
| index a42d5223150d8a889ac6e07e24dfadc40459b418..50ed122784ebda46e9ff90ba3d204bb2eff415d0 100644
|
| --- a/src/lithium-allocator.cc
|
| +++ b/src/lithium-allocator.cc
|
| @@ -2029,12 +2029,12 @@ LifetimePosition LAllocator::FindOptimalSplitPos(LifetimePosition start,
|
| // We have no choice
|
| if (start_instr == end_instr) return end;
|
|
|
| - HBasicBlock* end_block = GetBlock(start);
|
| - HBasicBlock* start_block = GetBlock(end);
|
| + HBasicBlock* start_block = GetBlock(start);
|
| + HBasicBlock* end_block = GetBlock(end);
|
|
|
| if (end_block == start_block) {
|
| - // The interval is split in the same basic block. Split at latest possible
|
| - // position.
|
| + // The interval is split in the same basic block. Split at the latest
|
| + // possible position.
|
| return end;
|
| }
|
|
|
| @@ -2045,7 +2045,9 @@ LifetimePosition LAllocator::FindOptimalSplitPos(LifetimePosition start,
|
| block = block->parent_loop_header();
|
| }
|
|
|
| - if (block == end_block) return end;
|
| + // We did not find any suitable outer loop. Split at the latest possible
|
| + // position unless end_block is a loop header itself.
|
| + if (block == end_block && !end_block->IsLoopHeader()) return end;
|
|
|
| return LifetimePosition::FromInstructionIndex(
|
| block->first_instruction_index());
|
|
|