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