| Index: test/cctest/compiler/test-representation-change.cc
|
| diff --git a/test/cctest/compiler/test-representation-change.cc b/test/cctest/compiler/test-representation-change.cc
|
| index 6b57244015b9c3032e486195bb8d53df4b37a966..0d6b5b282708118f4fb74fc29bfbf6319fe29806 100644
|
| --- a/test/cctest/compiler/test-representation-change.cc
|
| +++ b/test/cctest/compiler/test-representation-change.cc
|
| @@ -83,12 +83,20 @@ class RepresentationChangerTester : public HandleAndZoneScope,
|
| return n;
|
| }
|
|
|
| + Node* Return(Node* input) {
|
| + Node* n = graph()->NewNode(common()->Return(), input, graph()->start(),
|
| + graph()->start());
|
| + return n;
|
| + }
|
| +
|
| void CheckTypeError(MachineRepresentation from, Type* from_type,
|
| MachineRepresentation to) {
|
| changer()->testing_type_errors_ = true;
|
| changer()->type_error_ = false;
|
| Node* n = Parameter(0);
|
| - Node* c = changer()->GetRepresentationFor(n, from, from_type, to);
|
| + Node* use = Return(n);
|
| + Node* c = changer()->GetRepresentationFor(n, from, from_type, use,
|
| + UseInfo(to, Truncation::None()));
|
| CHECK(changer()->type_error_);
|
| CHECK_EQ(n, c);
|
| }
|
| @@ -96,7 +104,9 @@ class RepresentationChangerTester : public HandleAndZoneScope,
|
| void CheckNop(MachineRepresentation from, Type* from_type,
|
| MachineRepresentation to) {
|
| Node* n = Parameter(0);
|
| - Node* c = changer()->GetRepresentationFor(n, from, from_type, to);
|
| + Node* use = Return(n);
|
| + Node* c = changer()->GetRepresentationFor(n, from, from_type, use,
|
| + UseInfo(to, Truncation::None()));
|
| CHECK_EQ(n, c);
|
| }
|
| };
|
| @@ -113,15 +123,17 @@ TEST(BoolToBit_constant) {
|
| RepresentationChangerTester r;
|
|
|
| Node* true_node = r.jsgraph()->TrueConstant();
|
| + Node* true_use = r.Return(true_node);
|
| Node* true_bit = r.changer()->GetRepresentationFor(
|
| - true_node, MachineRepresentation::kTagged, Type::None(),
|
| - MachineRepresentation::kBit);
|
| + true_node, MachineRepresentation::kTagged, Type::None(), true_use,
|
| + UseInfo(MachineRepresentation::kBit, Truncation::None()));
|
| r.CheckInt32Constant(true_bit, 1);
|
|
|
| Node* false_node = r.jsgraph()->FalseConstant();
|
| + Node* false_use = r.Return(false_node);
|
| Node* false_bit = r.changer()->GetRepresentationFor(
|
| - false_node, MachineRepresentation::kTagged, Type::None(),
|
| - MachineRepresentation::kBit);
|
| + false_node, MachineRepresentation::kTagged, Type::None(), false_use,
|
| + UseInfo(MachineRepresentation::kBit, Truncation::None()));
|
| r.CheckInt32Constant(false_bit, 0);
|
| }
|
|
|
| @@ -131,9 +143,10 @@ TEST(BitToBool_constant) {
|
|
|
| for (int i = -5; i < 5; i++) {
|
| Node* node = r.jsgraph()->Int32Constant(i);
|
| + Node* use = r.Return(node);
|
| Node* val = r.changer()->GetRepresentationFor(
|
| - node, MachineRepresentation::kBit, Type::Boolean(),
|
| - MachineRepresentation::kTagged);
|
| + node, MachineRepresentation::kBit, Type::Boolean(), use,
|
| + UseInfo(MachineRepresentation::kTagged, Truncation::None()));
|
| r.CheckHeapConstant(val, i == 0 ? r.isolate()->heap()->false_value()
|
| : r.isolate()->heap()->true_value());
|
| }
|
| @@ -146,49 +159,54 @@ TEST(ToTagged_constant) {
|
| {
|
| FOR_FLOAT64_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float64Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat64, Type::None(),
|
| - MachineRepresentation::kTagged);
|
| - r.CheckNumberConstant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat64, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kTagged, Truncation::None()));
|
| + r.CheckNumberConstant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_FLOAT64_INPUTS(i) {
|
| Node* n = r.jsgraph()->Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat64, Type::None(),
|
| - MachineRepresentation::kTagged);
|
| - r.CheckNumberConstant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat64, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kTagged, Truncation::None()));
|
| + r.CheckNumberConstant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_FLOAT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat32, Type::None(),
|
| - MachineRepresentation::kTagged);
|
| - r.CheckNumberConstant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat32, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kTagged, Truncation::None()));
|
| + r.CheckNumberConstant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_INT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Signed32(),
|
| - MachineRepresentation::kTagged);
|
| - r.CheckNumberConstant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kWord32, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kTagged, Truncation::None()));
|
| + r.CheckNumberConstant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_UINT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Unsigned32(),
|
| - MachineRepresentation::kTagged);
|
| + n, MachineRepresentation::kWord32, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kTagged, Truncation::None()));
|
| r.CheckNumberConstant(c, *i);
|
| }
|
| }
|
| @@ -201,49 +219,54 @@ TEST(ToFloat64_constant) {
|
| {
|
| FOR_FLOAT64_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float64Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat64, Type::None(),
|
| - MachineRepresentation::kFloat64);
|
| - CHECK_EQ(n, c);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat64, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kFloat64, Truncation::None()));
|
| + CHECK_EQ(n, c);
|
| }
|
| }
|
|
|
| {
|
| FOR_FLOAT64_INPUTS(i) {
|
| Node* n = r.jsgraph()->Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kTagged, Type::None(),
|
| - MachineRepresentation::kFloat64);
|
| - r.CheckFloat64Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kTagged, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kFloat64, Truncation::None()));
|
| + r.CheckFloat64Constant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_FLOAT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat32, Type::None(),
|
| - MachineRepresentation::kFloat64);
|
| - r.CheckFloat64Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat32, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kFloat64, Truncation::None()));
|
| + r.CheckFloat64Constant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_INT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Signed32(),
|
| - MachineRepresentation::kFloat64);
|
| - r.CheckFloat64Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kWord32, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kFloat64, Truncation::None()));
|
| + r.CheckFloat64Constant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_UINT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Unsigned32(),
|
| - MachineRepresentation::kFloat64);
|
| + n, MachineRepresentation::kWord32, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kFloat64, Truncation::None()));
|
| r.CheckFloat64Constant(c, *i);
|
| }
|
| }
|
| @@ -264,30 +287,33 @@ TEST(ToFloat32_constant) {
|
| {
|
| FOR_FLOAT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat32, Type::None(),
|
| - MachineRepresentation::kFloat32);
|
| - CHECK_EQ(n, c);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat32, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kFloat32, Truncation::None()));
|
| + CHECK_EQ(n, c);
|
| }
|
| }
|
|
|
| {
|
| FOR_FLOAT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kTagged, Type::None(),
|
| - MachineRepresentation::kFloat32);
|
| - r.CheckFloat32Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kTagged, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kFloat32, Truncation::None()));
|
| + r.CheckFloat32Constant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_FLOAT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float64Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat64, Type::None(),
|
| - MachineRepresentation::kFloat32);
|
| - r.CheckFloat32Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat64, Type::None(), use,
|
| + UseInfo(MachineRepresentation::kFloat32, Truncation::None()));
|
| + r.CheckFloat32Constant(c, *i);
|
| }
|
| }
|
|
|
| @@ -295,9 +321,10 @@ TEST(ToFloat32_constant) {
|
| FOR_INT32_INPUTS(i) {
|
| if (!IsFloat32Int32(*i)) continue;
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Signed32(),
|
| - MachineRepresentation::kFloat32);
|
| + n, MachineRepresentation::kWord32, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kFloat32, Truncation::None()));
|
| r.CheckFloat32Constant(c, static_cast<float>(*i));
|
| }
|
| }
|
| @@ -306,9 +333,10 @@ TEST(ToFloat32_constant) {
|
| FOR_UINT32_INPUTS(i) {
|
| if (!IsFloat32Uint32(*i)) continue;
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Unsigned32(),
|
| - MachineRepresentation::kFloat32);
|
| + n, MachineRepresentation::kWord32, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kFloat32, Truncation::None()));
|
| r.CheckFloat32Constant(c, static_cast<float>(*i));
|
| }
|
| }
|
| @@ -321,10 +349,11 @@ TEST(ToInt32_constant) {
|
| {
|
| FOR_INT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Signed32(),
|
| - MachineRepresentation::kWord32);
|
| - r.CheckInt32Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kWord32, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| + r.CheckInt32Constant(c, *i);
|
| }
|
| }
|
|
|
| @@ -332,9 +361,10 @@ TEST(ToInt32_constant) {
|
| FOR_INT32_INPUTS(i) {
|
| if (!IsFloat32Int32(*i)) continue;
|
| Node* n = r.jsgraph()->Float32Constant(static_cast<float>(*i));
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat32, Type::Signed32(),
|
| - MachineRepresentation::kWord32);
|
| + n, MachineRepresentation::kFloat32, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| r.CheckInt32Constant(c, *i);
|
| }
|
| }
|
| @@ -342,19 +372,21 @@ TEST(ToInt32_constant) {
|
| {
|
| FOR_INT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float64Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat64, Type::Signed32(),
|
| - MachineRepresentation::kWord32);
|
| - r.CheckInt32Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat64, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| + r.CheckInt32Constant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_INT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Constant(*i);
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kTagged, Type::Signed32(),
|
| - MachineRepresentation::kWord32);
|
| + n, MachineRepresentation::kTagged, Type::Signed32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| r.CheckInt32Constant(c, *i);
|
| }
|
| }
|
| @@ -367,10 +399,11 @@ TEST(ToUint32_constant) {
|
| {
|
| FOR_UINT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Int32Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kWord32, Type::Unsigned32(),
|
| - MachineRepresentation::kWord32);
|
| - r.CheckUint32Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kWord32, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| + r.CheckUint32Constant(c, *i);
|
| }
|
| }
|
|
|
| @@ -378,9 +411,10 @@ TEST(ToUint32_constant) {
|
| FOR_UINT32_INPUTS(i) {
|
| if (!IsFloat32Uint32(*i)) continue;
|
| Node* n = r.jsgraph()->Float32Constant(static_cast<float>(*i));
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat32, Type::Unsigned32(),
|
| - MachineRepresentation::kWord32);
|
| + n, MachineRepresentation::kFloat32, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| r.CheckUint32Constant(c, *i);
|
| }
|
| }
|
| @@ -388,19 +422,21 @@ TEST(ToUint32_constant) {
|
| {
|
| FOR_UINT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Float64Constant(*i);
|
| - Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kFloat64, Type::Unsigned32(),
|
| - MachineRepresentation::kWord32);
|
| - r.CheckUint32Constant(c, *i);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(
|
| + n, MachineRepresentation::kFloat64, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| + r.CheckUint32Constant(c, *i);
|
| }
|
| }
|
|
|
| {
|
| FOR_UINT32_INPUTS(i) {
|
| Node* n = r.jsgraph()->Constant(static_cast<double>(*i));
|
| + Node* use = r.Return(n);
|
| Node* c = r.changer()->GetRepresentationFor(
|
| - n, MachineRepresentation::kTagged, Type::Unsigned32(),
|
| - MachineRepresentation::kWord32);
|
| + n, MachineRepresentation::kTagged, Type::Unsigned32(), use,
|
| + UseInfo(MachineRepresentation::kWord32, Truncation::None()));
|
| r.CheckUint32Constant(c, *i);
|
| }
|
| }
|
| @@ -412,7 +448,9 @@ static void CheckChange(IrOpcode::Value expected, MachineRepresentation from,
|
| RepresentationChangerTester r;
|
|
|
| Node* n = r.Parameter();
|
| - Node* c = r.changer()->GetRepresentationFor(n, from, from_type, to);
|
| + Node* use = r.Return(n);
|
| + Node* c = r.changer()->GetRepresentationFor(n, from, from_type, use,
|
| + UseInfo(to, Truncation::None()));
|
|
|
| CHECK_NE(c, n);
|
| CHECK_EQ(expected, c->opcode());
|
| @@ -427,7 +465,9 @@ static void CheckTwoChanges(IrOpcode::Value expected2,
|
| RepresentationChangerTester r;
|
|
|
| Node* n = r.Parameter();
|
| - Node* c1 = r.changer()->GetRepresentationFor(n, from, from_type, to);
|
| + Node* use = r.Return(n);
|
| + Node* c1 = r.changer()->GetRepresentationFor(n, from, from_type, use,
|
| + UseInfo(to, Truncation::None()));
|
|
|
| CHECK_NE(c1, n);
|
| CHECK_EQ(expected1, c1->opcode());
|
|
|