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 2c97379cbb0cd8eb1a85c6ae311feb6c8e9e8e22..a8ff7da55dff48820020900b84a2689044d36ed0 100644 |
--- a/test/cctest/compiler/test-simplified-lowering.cc |
+++ b/test/cctest/compiler/test-simplified-lowering.cc |
@@ -207,8 +207,10 @@ TEST(RunLoadStoreMap) { |
TEST(RunLoadStoreFixedArrayIndex) { |
SimplifiedLoweringTester<Object*> t(kMachAnyTagged); |
ElementAccess access = AccessBuilder::ForFixedArrayElement(); |
- Node* load = t.LoadElement(access, t.Parameter(0), t.Int32Constant(0)); |
- t.StoreElement(access, t.Parameter(0), t.Int32Constant(1), load); |
+ Node* load = t.LoadElement(access, t.Parameter(0), t.Int32Constant(0), |
+ t.Int32Constant(2)); |
+ t.StoreElement(access, t.Parameter(0), t.Int32Constant(1), t.Int32Constant(2), |
+ load); |
t.Return(load); |
t.LowerAllNodes(); |
@@ -231,14 +233,16 @@ TEST(RunLoadStoreFixedArrayIndex) { |
TEST(RunLoadStoreArrayBuffer) { |
SimplifiedLoweringTester<Object*> t(kMachAnyTagged); |
const int index = 12; |
+ const int array_length = 2 * index; |
ElementAccess buffer_access = |
AccessBuilder::ForBackingStoreElement(kMachInt8); |
Node* backing_store = t.LoadField( |
AccessBuilder::ForJSArrayBufferBackingStore(), t.Parameter(0)); |
Node* load = |
- t.LoadElement(buffer_access, backing_store, t.Int32Constant(index)); |
+ t.LoadElement(buffer_access, backing_store, t.Int32Constant(index), |
+ t.Int32Constant(array_length)); |
t.StoreElement(buffer_access, backing_store, t.Int32Constant(index + 1), |
- load); |
+ t.Int32Constant(array_length), load); |
t.Return(t.jsgraph.TrueConstant()); |
t.LowerAllNodes(); |
@@ -246,7 +250,6 @@ TEST(RunLoadStoreArrayBuffer) { |
if (Pipeline::SupportedTarget()) { |
Handle<JSArrayBuffer> array = t.factory()->NewJSArrayBuffer(); |
- const int array_length = 2 * index; |
Runtime::SetupArrayBufferAllocatingData(t.isolate(), array, array_length); |
uint8_t* data = reinterpret_cast<uint8_t*>(array->backing_store()); |
for (int i = 0; i < array_length; i++) { |
@@ -326,8 +329,9 @@ TEST(RunLoadElementFromUntaggedBase) { |
kMachAnyTagged}; |
SimplifiedLoweringTester<Object*> t; |
- Node* load = t.LoadElement(access, t.PointerConstant(smis), |
- t.Int32Constant(static_cast<int>(j))); |
+ Node* load = t.LoadElement( |
+ access, t.PointerConstant(smis), t.Int32Constant(static_cast<int>(j)), |
+ t.Int32Constant(static_cast<int>(arraysize(smis)))); |
t.Return(load); |
t.LowerAllNodes(); |
@@ -356,7 +360,8 @@ TEST(RunStoreElementFromUntaggedBase) { |
SimplifiedLoweringTester<Object*> t(kMachAnyTagged); |
Node* p0 = t.Parameter(0); |
t.StoreElement(access, t.PointerConstant(smis), |
- t.Int32Constant(static_cast<int>(j)), p0); |
+ t.Int32Constant(static_cast<int>(j)), |
+ t.Int32Constant(static_cast<int>(arraysize(smis))), p0); |
t.Return(p0); |
t.LowerAllNodes(); |
@@ -422,8 +427,10 @@ class AccessTester : public HandleAndZoneScope { |
SimplifiedLoweringTester<Object*> t; |
Node* ptr = GetBaseNode(&t); |
- Node* load = t.LoadElement(access, ptr, t.Int32Constant(from_index)); |
- t.StoreElement(access, ptr, t.Int32Constant(to_index), load); |
+ Node* load = t.LoadElement(access, ptr, t.Int32Constant(from_index), |
+ t.Int32Constant(num_elements)); |
+ t.StoreElement(access, ptr, t.Int32Constant(to_index), |
+ t.Int32Constant(num_elements), load); |
t.Return(t.jsgraph.TrueConstant()); |
t.LowerAllNodes(); |
t.GenerateCode(); |
@@ -633,11 +640,13 @@ class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders { |
JSGraph jsgraph; |
Node* p0; |
Node* p1; |
+ Node* p2; |
Node* start; |
Node* end; |
Node* ret; |
- explicit TestingGraph(Type* p0_type, Type* p1_type = Type::None()) |
+ explicit TestingGraph(Type* p0_type, Type* p1_type = Type::None(), |
+ Type* p2_type = Type::None()) |
: GraphAndBuilders(main_zone()), |
typer(main_zone()), |
javascript(main_zone()), |
@@ -650,8 +659,10 @@ class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders { |
graph()->SetEnd(end); |
p0 = graph()->NewNode(common()->Parameter(0), start); |
p1 = graph()->NewNode(common()->Parameter(1), start); |
+ p2 = graph()->NewNode(common()->Parameter(2), start); |
NodeProperties::SetBounds(p0, Bounds(p0_type)); |
NodeProperties::SetBounds(p1, Bounds(p1_type)); |
+ NodeProperties::SetBounds(p2, Bounds(p2_type)); |
} |
void CheckLoweringBinop(IrOpcode::Value expected, const Operator* op) { |
@@ -1341,8 +1352,9 @@ TEST(LowerLoadElement_to_load) { |
ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, |
Type::Any(), machine_reps[i]}; |
- Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, |
- t.p1, t.start); |
+ Node* load = |
+ t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, t.p1, |
+ t.jsgraph.Int32Constant(1024), t.start); |
Node* use = t.Use(load, machine_reps[i]); |
t.Return(use); |
t.Lower(); |
@@ -1365,7 +1377,8 @@ TEST(LowerStoreElement_to_store) { |
Node* val = t.ExampleWithOutput(machine_reps[i]); |
Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, |
- t.p1, val, t.start, t.start); |
+ t.p1, t.jsgraph.Int32Constant(1024), val, |
+ t.start, t.start); |
t.Effect(store); |
t.Lower(); |
CHECK_EQ(IrOpcode::kStore, store->opcode()); |
@@ -1382,14 +1395,14 @@ TEST(LowerStoreElement_to_store) { |
TEST(InsertChangeForLoadElementIndex) { |
- // LoadElement(obj: Tagged, index: kTypeInt32 | kRepTagged) => |
+ // LoadElement(obj: Tagged, index: kTypeInt32 | kRepTagged, length) => |
// Load(obj, Int32Add(Int32Mul(ChangeTaggedToInt32(index), #k), #k)) |
- TestingGraph t(Type::Any(), Type::Signed32()); |
+ TestingGraph t(Type::Any(), Type::Signed32(), Type::Any()); |
ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(), |
kMachAnyTagged}; |
Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, |
- t.p1, t.start); |
+ t.p1, t.p2, t.start); |
t.Return(load); |
t.Lower(); |
CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
@@ -1401,14 +1414,14 @@ TEST(InsertChangeForLoadElementIndex) { |
TEST(InsertChangeForStoreElementIndex) { |
- // StoreElement(obj: Tagged, index: kTypeInt32 | kRepTagged, val) => |
+ // StoreElement(obj: Tagged, index: kTypeInt32 | kRepTagged, length, val) => |
// Store(obj, Int32Add(Int32Mul(ChangeTaggedToInt32(index), #k), #k), val) |
- TestingGraph t(Type::Any(), Type::Signed32()); |
+ TestingGraph t(Type::Any(), Type::Signed32(), Type::Any()); |
ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(), |
kMachAnyTagged}; |
Node* store = |
- t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, t.p1, |
+ t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, t.p1, t.p2, |
t.jsgraph.TrueConstant(), t.start, t.start); |
t.Effect(store); |
t.Lower(); |
@@ -1422,12 +1435,12 @@ TEST(InsertChangeForStoreElementIndex) { |
TEST(InsertChangeForLoadElement) { |
// TODO(titzer): test all load/store representation change insertions. |
- TestingGraph t(Type::Any(), Type::Signed32()); |
+ TestingGraph t(Type::Any(), Type::Signed32(), Type::Any()); |
ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(), |
kMachFloat64}; |
Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, |
- t.p1, t.start); |
+ t.p1, t.p1, t.start); |
t.Return(load); |
t.Lower(); |
CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
@@ -1454,13 +1467,13 @@ TEST(InsertChangeForLoadField) { |
TEST(InsertChangeForStoreElement) { |
// TODO(titzer): test all load/store representation change insertions. |
- TestingGraph t(Type::Any(), Type::Signed32()); |
+ TestingGraph t(Type::Any(), Type::Signed32(), Type::Any()); |
ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(), |
kMachFloat64}; |
- Node* store = |
- t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, |
- t.jsgraph.Int32Constant(0), t.p1, t.start, t.start); |
+ Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, |
+ t.jsgraph.Int32Constant(0), t.p2, t.p1, |
+ t.start, t.start); |
t.Effect(store); |
t.Lower(); |