Index: src/compiler/register-allocator.cc |
diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc |
index 972a9045094a22ed2ceb355f0664e35b29201d6a..46446aa5622987aab52c395c6985b2b958b95630 100644 |
--- a/src/compiler/register-allocator.cc |
+++ b/src/compiler/register-allocator.cc |
@@ -744,70 +744,6 @@ void RegisterAllocator::MeetRegisterConstraints(BasicBlock* block) { |
if (!AllocationOk()) return; |
} |
} |
- |
- // Meet register constraints for the instruction in the end. |
- if (!code()->IsGapAt(end)) { |
- MeetRegisterConstraintsForLastInstructionInBlock(block); |
- } |
-} |
- |
- |
-void RegisterAllocator::MeetRegisterConstraintsForLastInstructionInBlock( |
- BasicBlock* block) { |
- int end = block->last_instruction_index(); |
- Instruction* last_instruction = InstructionAt(end); |
- for (size_t i = 0; i < last_instruction->OutputCount(); i++) { |
- InstructionOperand* output_operand = last_instruction->OutputAt(i); |
- DCHECK(!output_operand->IsConstant()); |
- UnallocatedOperand* output = UnallocatedOperand::cast(output_operand); |
- int output_vreg = output->virtual_register(); |
- LiveRange* range = LiveRangeFor(output_vreg); |
- bool assigned = false; |
- if (output->HasFixedPolicy()) { |
- AllocateFixed(output, -1, false); |
- // This value is produced on the stack, we never need to spill it. |
- if (output->IsStackSlot()) { |
- range->SetSpillOperand(output); |
- range->SetSpillStartIndex(end); |
- assigned = true; |
- } |
- |
- BasicBlock::Successors successors = block->successors(); |
- for (BasicBlock::Successors::iterator succ = successors.begin(); |
- succ != successors.end(); ++succ) { |
- DCHECK((*succ)->PredecessorCount() == 1); |
- int gap_index = (*succ)->first_instruction_index() + 1; |
- DCHECK(code()->IsGapAt(gap_index)); |
- |
- // Create an unconstrained operand for the same virtual register |
- // and insert a gap move from the fixed output to the operand. |
- UnallocatedOperand* output_copy = |
- new (code_zone()) UnallocatedOperand(UnallocatedOperand::ANY); |
- output_copy->set_virtual_register(output_vreg); |
- |
- code()->AddGapMove(gap_index, output, output_copy); |
- } |
- } |
- |
- if (!assigned) { |
- BasicBlock::Successors successors = block->successors(); |
- for (BasicBlock::Successors::iterator succ = successors.begin(); |
- succ != successors.end(); ++succ) { |
- DCHECK((*succ)->PredecessorCount() == 1); |
- int gap_index = (*succ)->first_instruction_index() + 1; |
- range->SetSpillStartIndex(gap_index); |
- |
- // This move to spill operand is not a real use. Liveness analysis |
- // and splitting of live ranges do not account for it. |
- // Thus it should be inserted to a lifetime position corresponding to |
- // the instruction end. |
- GapInstruction* gap = code()->GapAt(gap_index); |
- ParallelMove* move = |
- gap->GetOrCreateParallelMove(GapInstruction::BEFORE, code_zone()); |
- move->AddMove(output, range->GetSpillOperand(), code_zone()); |
- } |
- } |
- } |
} |
@@ -850,8 +786,6 @@ void RegisterAllocator::MeetConstraintsBetween(Instruction* first, |
code()->AddGapMove(gap_index, first_output, output_copy); |
} |
- // Make sure we add a gap move for spilling (if we have not done |
- // so already). |
if (!assigned) { |
range->SetSpillStartIndex(gap_index); |