Index: runtime/vm/intermediate_language.cc |
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
index 8a1d388ef4817d8932912e00743b11f7ad5b196e..9a0dd0aa2bbcc36cfb7016634a94bf798744159a 100644 |
--- a/runtime/vm/intermediate_language.cc |
+++ b/runtime/vm/intermediate_language.cc |
@@ -2704,42 +2704,16 @@ void MaterializeObjectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
// This function should be kept in sync with |
// FlowGraphCompiler::SlowPathEnvironmentFor(). |
-void MaterializeObjectInstr::RemapRegisters(intptr_t* fpu_reg_slots, |
- intptr_t* cpu_reg_slots) { |
+void MaterializeObjectInstr::RemapRegisters(intptr_t* cpu_reg_slots, |
+ intptr_t* fpu_reg_slots) { |
if (registers_remapped_) { |
return; |
} |
registers_remapped_ = true; |
for (intptr_t i = 0; i < InputCount(); i++) { |
- Location loc = LocationAt(i); |
- if (loc.IsRegister()) { |
- intptr_t index = cpu_reg_slots[loc.reg()]; |
- ASSERT(index >= 0); |
- locations_[i] = Location::StackSlot(index); |
- } else if (loc.IsFpuRegister()) { |
- intptr_t index = fpu_reg_slots[loc.fpu_reg()]; |
- ASSERT(index >= 0); |
- Value* value = InputAt(i); |
- switch (value->definition()->representation()) { |
- case kUnboxedDouble: |
- locations_[i] = Location::DoubleStackSlot(index); |
- break; |
- case kUnboxedFloat32x4: |
- case kUnboxedInt32x4: |
- case kUnboxedFloat64x2: |
- locations_[i] = Location::QuadStackSlot(index); |
- break; |
- default: |
- UNREACHABLE(); |
- } |
- } else if (loc.IsPairLocation()) { |
- UNREACHABLE(); |
- } else if (loc.IsInvalid() && |
- InputAt(i)->definition()->IsMaterializeObject()) { |
- InputAt(i)->definition()->AsMaterializeObject()->RemapRegisters( |
- fpu_reg_slots, cpu_reg_slots); |
- } |
+ locations_[i] = LocationAt(i).RemapForSlowPath( |
+ InputAt(i)->definition(), cpu_reg_slots, fpu_reg_slots); |
} |
} |