Index: src/compiler/register-allocator.cc |
diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc |
index bfda1940bd70410d14b5931b590c3db0c0a76ab8..9c8d999a7ccbc8b5f3f75348837b1c916df5a8e2 100644 |
--- a/src/compiler/register-allocator.cc |
+++ b/src/compiler/register-allocator.cc |
@@ -2070,14 +2070,17 @@ void LiveRangeBuilder::ProcessInstructions(const InstructionBlock* block, |
allocation_zone()); |
} |
} |
- for (int i = 0; i < config()->num_allocatable_float_registers(); ++i) { |
- int code = config()->GetAllocatableFloatCode(i); |
- if (!IsOutputFPRegisterOf(instr, MachineRepresentation::kFloat32, |
- code)) { |
- TopLevelLiveRange* range = |
- FixedFPLiveRangeFor(code, MachineRepresentation::kFloat32); |
- range->AddUseInterval(curr_position, curr_position.End(), |
- allocation_zone()); |
+ // Preserve fixed float registers on archs with non-simple aliasing. |
+ if (!kSimpleFPAliasing) { |
+ for (int i = 0; i < config()->num_allocatable_float_registers(); ++i) { |
+ int code = config()->GetAllocatableFloatCode(i); |
+ if (!IsOutputFPRegisterOf(instr, MachineRepresentation::kFloat32, |
+ code)) { |
+ TopLevelLiveRange* range = |
+ FixedFPLiveRangeFor(code, MachineRepresentation::kFloat32); |
+ range->AddUseInterval(curr_position, curr_position.End(), |
+ allocation_zone()); |
+ } |
} |
} |
} |