Index: src/compiler/register-allocator.cc |
diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc |
index e01fe1ff35f8d12fdb1cad9499b6377d00659acc..0775de969e6b67fcd7c4a3c7f571372e9ba8f179 100644 |
--- a/src/compiler/register-allocator.cc |
+++ b/src/compiler/register-allocator.cc |
@@ -135,9 +135,11 @@ LiveRange::LiveRange(int id, Zone* zone) |
spills_at_definition_(nullptr) {} |
-void LiveRange::set_assigned_register(int reg) { |
+void LiveRange::set_assigned_register(int reg, Zone* zone) { |
DCHECK(!HasRegisterAssigned() && !IsSpilled()); |
assigned_register_ = reg; |
+ // TODO(dcarney): stop aliasing hint operands. |
+ ConvertUsesToOperand(CreateAssignedOperand(zone)); |
Benedikt Meurer
2014/12/11 11:45:32
Urghs...
|
} |
@@ -941,6 +943,8 @@ void RegisterAllocator::ReuseSpillSlots() { |
void RegisterAllocator::CommitAssignment() { |
for (auto range : live_ranges()) { |
if (range == nullptr || range->IsEmpty()) continue; |
+ // Register assignments were committed in set_assigned_register. |
+ if (range->HasRegisterAssigned()) continue; |
auto assigned = range->CreateAssignedOperand(code_zone()); |
range->ConvertUsesToOperand(assigned); |
if (range->IsSpilled()) { |
@@ -2547,7 +2551,7 @@ void RegisterAllocator::SetLiveRangeAssignedRegister(LiveRange* range, |
DCHECK(range->Kind() == GENERAL_REGISTERS); |
assigned_registers_->Add(reg); |
} |
- range->set_assigned_register(reg); |
+ range->set_assigned_register(reg, code_zone()); |
} |
} // namespace compiler |