| 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());
|
| + }
|
| }
|
| }
|
| }
|
|
|