Index: src/lithium-allocator.cc |
diff --git a/src/lithium-allocator.cc b/src/lithium-allocator.cc |
index 7cbae0cdad712d8cebf650945edf53722619f0cd..c6e52ed824f12dcbf7d20cd5b75f428dd3b411e1 100644 |
--- a/src/lithium-allocator.cc |
+++ b/src/lithium-allocator.cc |
@@ -46,7 +46,8 @@ UsePosition::UsePosition(LifetimePosition pos, |
register_beneficial_(true) { |
if (operand_ != NULL && operand_->IsUnallocated()) { |
LUnallocated* unalloc = LUnallocated::cast(operand_); |
- requires_reg_ = unalloc->HasRegisterPolicy(); |
+ requires_reg_ = unalloc->HasRegisterPolicy() || |
+ unalloc->HasDoubleRegisterPolicy(); |
register_beneficial_ = !unalloc->HasAnyPolicy(); |
} |
ASSERT(pos_.IsValid()); |
@@ -1005,6 +1006,15 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) { |
} |
Use(block_start_position, curr_position.InstructionEnd(), temp, NULL); |
Define(curr_position, temp, NULL); |
+ |
+ if (temp->IsUnallocated()) { |
+ LUnallocated* temp_unalloc = LUnallocated::cast(temp); |
+ if (temp_unalloc->HasDoubleRegisterPolicy()) { |
+ double_artificial_registers_.Add( |
+ temp_unalloc->virtual_register() - first_artificial_register_, |
+ zone()); |
+ } |
+ } |
} |
} |
} |
@@ -1095,7 +1105,6 @@ bool LAllocator::Allocate(LChunk* chunk) { |
void LAllocator::MeetRegisterConstraints() { |
LAllocatorPhase phase("L_Register constraints", this); |
- first_artificial_register_ = next_virtual_register_; |
const ZoneList<HBasicBlock*>* blocks = graph_->blocks(); |
for (int i = 0; i < blocks->length(); ++i) { |
HBasicBlock* block = blocks->at(i); |