Index: test/cctest/compiler/test-simplified-lowering.cc |
diff --git a/test/cctest/compiler/test-simplified-lowering.cc b/test/cctest/compiler/test-simplified-lowering.cc |
index 20bfc0f7315f8e381026206fe3804b0053193281..7a06c263ba836ef5c3f9af9f2f1fe2db9ae74e02 100644 |
--- a/test/cctest/compiler/test-simplified-lowering.cc |
+++ b/test/cctest/compiler/test-simplified-lowering.cc |
@@ -111,7 +111,7 @@ TEST(RunNumberToInt32_float64) { |
kMachInt32}; |
t.StoreField(store, t.PointerConstant(&result), convert); |
t.Return(t.jsgraph.TrueConstant()); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
FOR_FLOAT64_INPUTS(i) { |
@@ -138,7 +138,7 @@ TEST(RunNumberToUint32_float64) { |
kMachUint32}; |
t.StoreField(store, t.PointerConstant(&result), convert); |
t.Return(t.jsgraph.TrueConstant()); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
FOR_FLOAT64_INPUTS(i) { |
@@ -165,7 +165,7 @@ TEST(RunLoadMap) { |
Node* load = t.LoadField(access, t.Parameter(0)); |
t.Return(load); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Handle<JSObject> src = TestObject(); |
@@ -181,7 +181,7 @@ TEST(RunStoreMap) { |
t.StoreField(access, t.Parameter(1), t.Parameter(0)); |
t.Return(t.jsgraph.TrueConstant()); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Handle<JSObject> src = TestObject(); |
@@ -199,7 +199,7 @@ TEST(RunLoadProperties) { |
Node* load = t.LoadField(access, t.Parameter(0)); |
t.Return(load); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Handle<JSObject> src = TestObject(); |
@@ -216,7 +216,7 @@ TEST(RunLoadStoreMap) { |
t.StoreField(access, t.Parameter(1), load); |
t.Return(load); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Handle<JSObject> src = TestObject(); |
@@ -237,7 +237,7 @@ TEST(RunLoadStoreFixedArrayIndex) { |
t.StoreElement(access, t.Parameter(0), t.Int32Constant(1), load); |
t.Return(load); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Handle<FixedArray> array = t.factory()->NewFixedArray(2); |
@@ -266,7 +266,7 @@ TEST(RunLoadStoreArrayBuffer) { |
load); |
t.Return(t.jsgraph.TrueConstant()); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Handle<JSArrayBuffer> array = t.factory()->NewJSArrayBuffer(); |
@@ -298,7 +298,7 @@ TEST(RunLoadFieldFromUntaggedBase) { |
SimplifiedLoweringTester<Object*> t; |
Node* load = t.LoadField(access, t.PointerConstant(smis)); |
t.Return(load); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
for (int j = -5; j <= 5; j++) { |
Smi* expected = Smi::FromInt(j); |
@@ -321,7 +321,7 @@ TEST(RunStoreFieldToUntaggedBase) { |
Node* p0 = t.Parameter(0); |
t.StoreField(access, t.PointerConstant(smis), p0); |
t.Return(p0); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
for (int j = -5; j <= 5; j++) { |
Smi* expected = Smi::FromInt(j); |
@@ -347,7 +347,7 @@ TEST(RunLoadElementFromUntaggedBase) { |
Node* load = t.LoadElement(access, t.PointerConstant(smis), |
t.Int32Constant(static_cast<int>(j))); |
t.Return(load); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
for (int k = -5; k <= 5; k++) { |
Smi* expected = Smi::FromInt(k); |
@@ -374,7 +374,7 @@ TEST(RunStoreElementFromUntaggedBase) { |
t.StoreElement(access, t.PointerConstant(smis), |
t.Int32Constant(static_cast<int>(j)), p0); |
t.Return(p0); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
for (int k = -5; k <= 5; k++) { |
Smi* expected = Smi::FromInt(k); |
@@ -439,7 +439,7 @@ class AccessTester : public HandleAndZoneScope { |
Node* load = t.LoadElement(access, ptr, t.Int32Constant(from_index)); |
t.StoreElement(access, ptr, t.Int32Constant(to_index), load); |
t.Return(t.jsgraph.TrueConstant()); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Object* result = t.Call(); |
@@ -459,7 +459,7 @@ class AccessTester : public HandleAndZoneScope { |
Node* load = t.LoadField(from_access, ptr); |
t.StoreField(to_access, ptr, load); |
t.Return(t.jsgraph.TrueConstant()); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
Object* result = t.Call(); |
@@ -651,7 +651,7 @@ TEST(RunAllocate) { |
t.StoreField(access, alloc, map); |
t.Return(alloc); |
- t.LowerAllNodes(); |
+ t.LowerAllNodesAndLowerChanges(); |
t.GenerateCode(); |
HeapObject* result = t.CallWithPotentialGC<HeapObject>(); |
@@ -682,7 +682,7 @@ class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders { |
javascript(main_zone()), |
jsgraph(main_isolate(), graph(), common(), &javascript, simplified(), |
machine()) { |
- start = graph()->NewNode(common()->Start(2)); |
+ start = graph()->NewNode(common()->Start(4)); |
graph()->SetStart(start); |
ret = |
graph()->NewNode(common()->Return(), jsgraph.Constant(0), start, start); |
@@ -723,6 +723,17 @@ class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders { |
SimplifiedLowering(&jsgraph, jsgraph.zone(), &table).LowerAllNodes(); |
} |
+ void LowerAllNodesAndLowerChanges() { |
+ SourcePositionTable table(jsgraph.graph()); |
+ SimplifiedLowering(&jsgraph, jsgraph.zone(), &table).LowerAllNodes(); |
+ |
+ ChangeLowering lowering(&jsgraph); |
+ GraphReducer reducer(this->zone(), this->graph()); |
+ reducer.AddReducer(&lowering); |
+ reducer.ReduceGraph(); |
+ Verifier::Run(this->graph()); |
+ } |
+ |
// Inserts the node as the return value of the graph. |
Node* Return(Node* node) { |
ret->ReplaceInput(0, node); |
@@ -1368,7 +1379,7 @@ TEST(LowerLoadField_to_load) { |
t.start, t.start); |
Node* use = t.Use(load, kMachineReps[i]); |
t.Return(use); |
- t.Lower(); |
+ t.LowerAllNodesAndLowerChanges(); |
CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
CHECK_EQ(t.p0, load->InputAt(0)); |
CheckFieldAccessArithmetic(access, load); |
@@ -1392,7 +1403,7 @@ TEST(LowerStoreField_to_store) { |
Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, |
val, t.start, t.start); |
t.Effect(store); |
- t.Lower(); |
+ t.LowerAllNodesAndLowerChanges(); |
CHECK_EQ(IrOpcode::kStore, store->opcode()); |
CHECK_EQ(val, store->InputAt(2)); |
CheckFieldAccessArithmetic(access, store); |
@@ -1414,7 +1425,7 @@ TEST(LowerStoreField_to_store) { |
Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, |
t.p1, t.start, t.start); |
t.Effect(store); |
- t.Lower(); |
+ t.LowerAllNodesAndLowerChanges(); |
CHECK_EQ(IrOpcode::kStore, store->opcode()); |
CHECK_EQ(t.p1, store->InputAt(2)); |
StoreRepresentation rep = OpParameter<StoreRepresentation>(store); |
@@ -1434,7 +1445,7 @@ TEST(LowerLoadElement_to_load) { |
t.p1, t.start, t.start); |
Node* use = t.Use(load, kMachineReps[i]); |
t.Return(use); |
- t.Lower(); |
+ t.LowerAllNodesAndLowerChanges(); |
CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
CHECK_EQ(t.p0, load->InputAt(0)); |
CheckElementAccessArithmetic(access, load); |
@@ -1457,7 +1468,7 @@ TEST(LowerStoreElement_to_store) { |
Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), |
t.p0, t.p1, val, t.start, t.start); |
t.Effect(store); |
- t.Lower(); |
+ t.LowerAllNodesAndLowerChanges(); |
CHECK_EQ(IrOpcode::kStore, store->opcode()); |
CHECK_EQ(val, store->InputAt(2)); |
CheckElementAccessArithmetic(access, store); |
@@ -1480,7 +1491,7 @@ TEST(LowerStoreElement_to_store) { |
Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, |
t.p1, t.p2, t.start, t.start); |
t.Effect(store); |
- t.Lower(); |
+ t.LowerAllNodesAndLowerChanges(); |
CHECK_EQ(IrOpcode::kStore, store->opcode()); |
CHECK_EQ(t.p2, store->InputAt(2)); |
StoreRepresentation rep = OpParameter<StoreRepresentation>(store); |
@@ -1500,11 +1511,9 @@ TEST(InsertChangeForLoadElementIndex) { |
t.p1, t.start, t.start); |
t.Return(load); |
t.Lower(); |
- CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
+ CHECK_EQ(IrOpcode::kLoadElement, load->opcode()); |
CHECK_EQ(t.p0, load->InputAt(0)); |
- |
- Node* index = CheckElementAccessArithmetic(access, load); |
- CheckChangeOf(IrOpcode::kChangeTaggedToInt32, t.p1, index); |
+ CheckChangeOf(IrOpcode::kChangeTaggedToInt32, t.p1, load->InputAt(1)); |
} |
@@ -1520,11 +1529,9 @@ TEST(InsertChangeForStoreElementIndex) { |
t.jsgraph.TrueConstant(), t.start, t.start); |
t.Effect(store); |
t.Lower(); |
- CHECK_EQ(IrOpcode::kStore, store->opcode()); |
+ CHECK_EQ(IrOpcode::kStoreElement, store->opcode()); |
CHECK_EQ(t.p0, store->InputAt(0)); |
- |
- Node* index = CheckElementAccessArithmetic(access, store); |
- CheckChangeOf(IrOpcode::kChangeTaggedToInt32, t.p1, index); |
+ CheckChangeOf(IrOpcode::kChangeTaggedToInt32, t.p1, store->InputAt(1)); |
} |
@@ -1538,7 +1545,7 @@ TEST(InsertChangeForLoadElement) { |
t.p1, t.start, t.start); |
t.Return(load); |
t.Lower(); |
- CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
+ CHECK_EQ(IrOpcode::kLoadElement, load->opcode()); |
CHECK_EQ(t.p0, load->InputAt(0)); |
CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); |
} |
@@ -1554,7 +1561,7 @@ TEST(InsertChangeForLoadField) { |
t.start, t.start); |
t.Return(load); |
t.Lower(); |
- CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
+ CHECK_EQ(IrOpcode::kLoadField, load->opcode()); |
CHECK_EQ(t.p0, load->InputAt(0)); |
CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); |
} |
@@ -1572,7 +1579,7 @@ TEST(InsertChangeForStoreElement) { |
t.Effect(store); |
t.Lower(); |
- CHECK_EQ(IrOpcode::kStore, store->opcode()); |
+ CHECK_EQ(IrOpcode::kStoreElement, store->opcode()); |
CHECK_EQ(t.p0, store->InputAt(0)); |
CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); |
} |
@@ -1589,9 +1596,9 @@ TEST(InsertChangeForStoreField) { |
t.Effect(store); |
t.Lower(); |
- CHECK_EQ(IrOpcode::kStore, store->opcode()); |
+ CHECK_EQ(IrOpcode::kStoreField, store->opcode()); |
CHECK_EQ(t.p0, store->InputAt(0)); |
- CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); |
+ CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(1)); |
} |
@@ -1628,13 +1635,13 @@ TEST(RunNumberDivide_minus_1_TruncatingToInt32) { |
Node* trunc = t.NumberToInt32(div); |
t.Return(trunc); |
- t.LowerAllNodesAndLowerChanges(); |
- t.GenerateCode(); |
+ t.LowerAllNodesAndLowerChanges(); |
+ t.GenerateCode(); |
- FOR_INT32_INPUTS(i) { |
- int32_t x = 0 - *i; |
- t.CheckNumberCall(static_cast<double>(x), static_cast<double>(*i)); |
- } |
+ FOR_INT32_INPUTS(i) { |
+ int32_t x = 0 - *i; |
+ t.CheckNumberCall(static_cast<double>(x), static_cast<double>(*i)); |
+ } |
} |