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()); |