| Index: src/lithium-allocator.cc
|
| diff --git a/src/lithium-allocator.cc b/src/lithium-allocator.cc
|
| index cac7d65e98f0dc4c91fd387236a647e954e95f40..81877f37685a01fad0cfd4e6a2c399121a41e1eb 100644
|
| --- a/src/lithium-allocator.cc
|
| +++ b/src/lithium-allocator.cc
|
| @@ -1068,9 +1068,7 @@ void LAllocator::ResolveControlFlow(LiveRange* range,
|
| HBasicBlock* block,
|
| HBasicBlock* pred) {
|
| LifetimePosition pred_end =
|
| - LifetimePosition::FromInstructionIndex(pred->last_instruction_index()).
|
| - PrevInstruction();
|
| -
|
| + LifetimePosition::FromInstructionIndex(pred->last_instruction_index());
|
| LifetimePosition cur_start =
|
| LifetimePosition::FromInstructionIndex(block->first_instruction_index());
|
| LiveRange* pred_cover = NULL;
|
| @@ -1245,7 +1243,7 @@ void LAllocator::BuildLiveRanges() {
|
| LifetimePosition start = LifetimePosition::FromInstructionIndex(
|
| block->first_instruction_index());
|
| LifetimePosition end = LifetimePosition::FromInstructionIndex(
|
| - back_edge->last_instruction_index());
|
| + back_edge->last_instruction_index()).NextInstruction();
|
| while (!iterator.Done()) {
|
| int operand_index = iterator.Current();
|
| LiveRange* range = LiveRangeFor(operand_index);
|
| @@ -2019,6 +2017,11 @@ LiveRange* LAllocator::SplitAt(LiveRange* range, LifetimePosition pos) {
|
|
|
| if (pos.Value() <= range->Start().Value()) return range;
|
|
|
| + // We can't properly connect liveranges if split occured at the end
|
| + // of control instruction.
|
| + ASSERT(pos.IsInstructionStart() ||
|
| + !chunk_->instructions()->at(pos.InstructionIndex())->IsControl());
|
| +
|
| LiveRange* result = LiveRangeFor(next_virtual_register_++);
|
| range->SplitAt(pos, result);
|
| return result;
|
|
|