Index: src/lithium-allocator.cc |
diff --git a/src/lithium-allocator.cc b/src/lithium-allocator.cc |
index e3b9a8872956c2de6f4bcf62be5f8c0b1a3c5dbc..6ee9ef2e7a17474794a231ca8845102408c80d77 100644 |
--- a/src/lithium-allocator.cc |
+++ b/src/lithium-allocator.cc |
@@ -839,8 +839,9 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first, |
ASSERT(!cur_input->IsUsedAtStart()); |
LUnallocated* input_copy = cur_input->CopyUnconstrained(zone()); |
- cur_input->set_virtual_register(GetVirtualRegister()); |
+ int vreg = GetVirtualRegister(); |
if (!AllocationOk()) return; |
+ cur_input->set_virtual_register(vreg); |
if (RequiredRegisterKind(input_copy->virtual_register()) == |
DOUBLE_REGISTERS) { |
@@ -1924,6 +1925,7 @@ void LAllocator::AllocateBlockedReg(LiveRange* current) { |
LiveRange* tail = SplitBetween(current, |
current->Start(), |
block_pos[reg].InstructionStart()); |
+ if (!AllocationOk()) return; |
AddToUnhandledSorted(tail); |
} |
@@ -1954,6 +1956,7 @@ void LAllocator::SplitAndSpillIntersecting(LiveRange* current) { |
} else { |
SpillBetween(range, split_pos, next_pos->pos()); |
} |
+ if (!AllocationOk()) return; |
ActiveToHandled(range); |
--i; |
} |
@@ -1972,6 +1975,7 @@ void LAllocator::SplitAndSpillIntersecting(LiveRange* current) { |
next_intersection = Min(next_intersection, next_pos->pos()); |
SpillBetween(range, split_pos, next_intersection); |
} |
+ if (!AllocationOk()) return; |
InactiveToHandled(range); |
--i; |
} |
@@ -1997,8 +2001,9 @@ LiveRange* LAllocator::SplitRangeAt(LiveRange* range, LifetimePosition pos) { |
ASSERT(pos.IsInstructionStart() || |
!chunk_->instructions()->at(pos.InstructionIndex())->IsControl()); |
- LiveRange* result = LiveRangeFor(GetVirtualRegister()); |
+ int vreg = GetVirtualRegister(); |
if (!AllocationOk()) return NULL; |
+ LiveRange* result = LiveRangeFor(vreg); |
range->SplitAt(pos, result, zone_); |
return result; |
} |
@@ -2075,6 +2080,7 @@ void LAllocator::SpillBetween(LiveRange* range, |
second_part, |
second_part->Start().InstructionEnd(), |
end.PrevInstruction().InstructionEnd()); |
+ if (!AllocationOk()) return; |
ASSERT(third_part != second_part); |