Index: test/cctest/compiler/test-gap-resolver.cc |
diff --git a/test/cctest/compiler/test-gap-resolver.cc b/test/cctest/compiler/test-gap-resolver.cc |
index 8d0ca8b8dd666263a016a23fa3d03aec225cadcf..3de8698141e2f8dff7a04d2a0566609bfaefa8f5 100644 |
--- a/test/cctest/compiler/test-gap-resolver.cc |
+++ b/test/cctest/compiler/test-gap-resolver.cc |
@@ -33,7 +33,7 @@ class InterpreterState { |
private: |
struct Key { |
bool is_constant; |
- bool is_float; |
+ MachineRepresentation rep; |
LocationOperand::LocationKind kind; |
int index; |
@@ -41,8 +41,8 @@ class InterpreterState { |
if (this->is_constant != other.is_constant) { |
return this->is_constant; |
} |
- if (this->is_float != other.is_float) { |
- return this->is_float; |
+ if (this->rep != other.rep) { |
+ return static_cast<int>(this->rep) < static_cast<int>(other.rep); |
} |
if (this->kind != other.kind) { |
return this->kind < other.kind; |
@@ -51,7 +51,7 @@ class InterpreterState { |
} |
bool operator==(const Key& other) const { |
- return this->is_constant == other.is_constant && |
+ return this->is_constant == other.is_constant && this->rep == other.rep && |
this->kind == other.kind && this->index == other.index; |
} |
}; |
@@ -75,24 +75,27 @@ class InterpreterState { |
static Key KeyFor(const InstructionOperand& op) { |
bool is_constant = op.IsConstant(); |
- bool is_float = false; |
+ MachineRepresentation rep = |
+ v8::internal::compiler::InstructionSequence::DefaultRepresentation(); |
LocationOperand::LocationKind kind; |
int index; |
if (!is_constant) { |
- if (op.IsRegister()) { |
- index = LocationOperand::cast(op).GetRegister().code(); |
- } else if (op.IsFPRegister()) { |
- index = LocationOperand::cast(op).GetDoubleRegister().code(); |
+ const LocationOperand& loc_op = LocationOperand::cast(op); |
+ if (loc_op.IsAnyRegister()) { |
+ if (loc_op.IsFPRegister()) { |
+ rep = kSimpleFPAliasing ? MachineRepresentation::kFloat64 |
+ : loc_op.representation(); |
+ } |
+ index = loc_op.register_code(); |
} else { |
- index = LocationOperand::cast(op).index(); |
+ index = loc_op.index(); |
} |
- is_float = IsFloatingPoint(LocationOperand::cast(op).representation()); |
- kind = LocationOperand::cast(op).location_kind(); |
+ kind = loc_op.location_kind(); |
} else { |
index = ConstantOperand::cast(op).virtual_register(); |
kind = LocationOperand::REGISTER; |
} |
- Key key = {is_constant, is_float, kind, index}; |
+ Key key = {is_constant, rep, kind, index}; |
return key; |
} |
@@ -102,10 +105,7 @@ class InterpreterState { |
if (key.is_constant) { |
return ConstantOperand(key.index); |
} |
- return AllocatedOperand( |
- key.kind, |
- v8::internal::compiler::InstructionSequence::DefaultRepresentation(), |
- key.index); |
+ return AllocatedOperand(key.kind, key.rep, key.index); |
} |
friend std::ostream& operator<<(std::ostream& os, |
@@ -113,8 +113,8 @@ class InterpreterState { |
for (OperandMap::const_iterator it = is.values_.begin(); |
it != is.values_.end(); ++it) { |
if (it != is.values_.begin()) os << " "; |
- InstructionOperand source = FromKey(it->first); |
- InstructionOperand destination = FromKey(it->second); |
+ InstructionOperand source = FromKey(it->second); |
+ InstructionOperand destination = FromKey(it->first); |
MoveOperands mo(source, destination); |
PrintableMoveOperands pmo = {RegisterConfiguration::Turbofan(), &mo}; |
os << pmo; |
@@ -165,8 +165,8 @@ class ParallelMoveCreator : public HandleAndZoneScope { |
ParallelMove* Create(int size) { |
ParallelMove* parallel_move = new (main_zone()) ParallelMove(main_zone()); |
std::set<InstructionOperand, CompareOperandModuloType> seen; |
- MachineRepresentation rep = RandomRepresentation(); |
for (int i = 0; i < size; ++i) { |
+ MachineRepresentation rep = RandomRepresentation(); |
MoveOperands mo(CreateRandomOperand(true, rep), |
CreateRandomOperand(false, rep)); |
if (!mo.IsRedundant() && seen.find(mo.destination()) == seen.end()) { |
@@ -186,7 +186,10 @@ class ParallelMoveCreator : public HandleAndZoneScope { |
case 1: |
return MachineRepresentation::kWord64; |
case 2: |
- return MachineRepresentation::kFloat32; |
+ // TODO(bbudge) Re-enable float operands when GapResolver correctly |
+ // handles FP aliasing. |
+ return kSimpleFPAliasing ? MachineRepresentation::kFloat32 |
+ : MachineRepresentation::kFloat64; |
case 3: |
return MachineRepresentation::kFloat64; |
case 4: |
@@ -252,7 +255,7 @@ TEST(FuzzResolver) { |
GapResolver resolver(&mi2); |
resolver.Resolve(pm); |
- CHECK(mi1.state() == mi2.state()); |
+ CHECK_EQ(mi1.state(), mi2.state()); |
} |
} |
} |