| 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 e77f57a318cb54735ca08c2f2c7b3bbae661889d..6e18478eb72f00693f157e427796ec4907280e0a 100644
|
| --- a/test/cctest/compiler/test-simplified-lowering.cc
|
| +++ b/test/cctest/compiler/test-simplified-lowering.cc
|
| @@ -1324,45 +1324,54 @@ TEST(InsertChangesAroundFloat64Cmp) {
|
| }
|
|
|
|
|
| +namespace {
|
| +
|
| void CheckFieldAccessArithmetic(FieldAccess access, Node* load_or_store) {
|
| - Int32Matcher index = Int32Matcher(load_or_store->InputAt(1));
|
| - CHECK(index.Is(access.offset - access.tag()));
|
| + IntPtrMatcher mindex(load_or_store->InputAt(1));
|
| + CHECK(mindex.Is(access.offset - access.tag()));
|
| }
|
|
|
|
|
| Node* CheckElementAccessArithmetic(ElementAccess access, Node* load_or_store) {
|
| - Int32BinopMatcher index(load_or_store->InputAt(1));
|
| - CHECK_EQ(IrOpcode::kInt32Add, index.node()->opcode());
|
| - CHECK(index.right().Is(access.header_size - access.tag()));
|
| -
|
| - int element_size = ElementSizeOf(access.machine_type);
|
| -
|
| - if (element_size != 1) {
|
| - Int32BinopMatcher mul(index.left().node());
|
| - CHECK_EQ(IrOpcode::kInt32Mul, mul.node()->opcode());
|
| - CHECK(mul.right().Is(element_size));
|
| - return mul.left().node();
|
| + Node* index = load_or_store->InputAt(1);
|
| + if (kPointerSize == 8) {
|
| + CHECK_EQ(IrOpcode::kChangeUint32ToUint64, index->opcode());
|
| + index = index->InputAt(0);
|
| + }
|
| +
|
| + Int32BinopMatcher mindex(index);
|
| + CHECK_EQ(IrOpcode::kInt32Add, mindex.node()->opcode());
|
| + CHECK(mindex.right().Is(access.header_size - access.tag()));
|
| +
|
| + const int element_size_shift = ElementSizeLog2Of(access.machine_type);
|
| + if (element_size_shift) {
|
| + Int32BinopMatcher shl(mindex.left().node());
|
| + CHECK_EQ(IrOpcode::kWord32Shl, shl.node()->opcode());
|
| + CHECK(shl.right().Is(element_size_shift));
|
| + return shl.left().node();
|
| } else {
|
| - return index.left().node();
|
| + return mindex.left().node();
|
| }
|
| }
|
|
|
|
|
| -static const MachineType machine_reps[] = {
|
| - kRepBit, kMachInt8, kMachInt16, kMachInt32,
|
| - kMachInt64, kMachFloat64, kMachAnyTagged};
|
| +const MachineType kMachineReps[] = {kRepBit, kMachInt8, kMachInt16,
|
| + kMachInt32, kMachInt64, kMachFloat64,
|
| + kMachAnyTagged};
|
| +
|
| +} // namespace
|
|
|
|
|
| TEST(LowerLoadField_to_load) {
|
| TestingGraph t(Type::Any(), Type::Signed32());
|
|
|
| - for (size_t i = 0; i < arraysize(machine_reps); i++) {
|
| + for (size_t i = 0; i < arraysize(kMachineReps); i++) {
|
| FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| - Handle<Name>::null(), Type::Any(), machine_reps[i]};
|
| + Handle<Name>::null(), Type::Any(), kMachineReps[i]};
|
|
|
| Node* load =
|
| t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start);
|
| - Node* use = t.Use(load, machine_reps[i]);
|
| + Node* use = t.Use(load, kMachineReps[i]);
|
| t.Return(use);
|
| t.Lower();
|
| CHECK_EQ(IrOpcode::kLoad, load->opcode());
|
| @@ -1370,7 +1379,7 @@ TEST(LowerLoadField_to_load) {
|
| CheckFieldAccessArithmetic(access, load);
|
|
|
| MachineType rep = OpParameter<MachineType>(load);
|
| - CHECK_EQ(machine_reps[i], rep);
|
| + CHECK_EQ(kMachineReps[i], rep);
|
| }
|
| }
|
|
|
| @@ -1378,12 +1387,12 @@ TEST(LowerLoadField_to_load) {
|
| TEST(LowerStoreField_to_store) {
|
| TestingGraph t(Type::Any(), Type::Signed32());
|
|
|
| - for (size_t i = 0; i < arraysize(machine_reps); i++) {
|
| + for (size_t i = 0; i < arraysize(kMachineReps); i++) {
|
| FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| - Handle<Name>::null(), Type::Any(), machine_reps[i]};
|
| + Handle<Name>::null(), Type::Any(), kMachineReps[i]};
|
|
|
|
|
| - Node* val = t.ExampleWithOutput(machine_reps[i]);
|
| + Node* val = t.ExampleWithOutput(kMachineReps[i]);
|
| Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
|
| val, t.start, t.start);
|
| t.Effect(store);
|
| @@ -1393,10 +1402,10 @@ TEST(LowerStoreField_to_store) {
|
| CheckFieldAccessArithmetic(access, store);
|
|
|
| StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
|
| - if (machine_reps[i] & kRepTagged) {
|
| + if (kMachineReps[i] & kRepTagged) {
|
| CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind());
|
| }
|
| - CHECK_EQ(machine_reps[i], rep.machine_type());
|
| + CHECK_EQ(kMachineReps[i], rep.machine_type());
|
| }
|
| }
|
|
|
| @@ -1404,15 +1413,15 @@ TEST(LowerStoreField_to_store) {
|
| TEST(LowerLoadElement_to_load) {
|
| TestingGraph t(Type::Any(), Type::Signed32());
|
|
|
| - for (size_t i = 0; i < arraysize(machine_reps); i++) {
|
| + for (size_t i = 0; i < arraysize(kMachineReps); i++) {
|
| ElementAccess access = {kNoBoundsCheck, kTaggedBase,
|
| FixedArrayBase::kHeaderSize, Type::Any(),
|
| - machine_reps[i]};
|
| + kMachineReps[i]};
|
|
|
| Node* load =
|
| t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, t.p1,
|
| t.jsgraph.Int32Constant(1024), t.start, t.start);
|
| - Node* use = t.Use(load, machine_reps[i]);
|
| + Node* use = t.Use(load, kMachineReps[i]);
|
| t.Return(use);
|
| t.Lower();
|
| CHECK_EQ(IrOpcode::kLoad, load->opcode());
|
| @@ -1420,7 +1429,7 @@ TEST(LowerLoadElement_to_load) {
|
| CheckElementAccessArithmetic(access, load);
|
|
|
| MachineType rep = OpParameter<MachineType>(load);
|
| - CHECK_EQ(machine_reps[i], rep);
|
| + CHECK_EQ(kMachineReps[i], rep);
|
| }
|
| }
|
|
|
| @@ -1428,12 +1437,12 @@ TEST(LowerLoadElement_to_load) {
|
| TEST(LowerStoreElement_to_store) {
|
| TestingGraph t(Type::Any(), Type::Signed32());
|
|
|
| - for (size_t i = 0; i < arraysize(machine_reps); i++) {
|
| + for (size_t i = 0; i < arraysize(kMachineReps); i++) {
|
| ElementAccess access = {kNoBoundsCheck, kTaggedBase,
|
| FixedArrayBase::kHeaderSize, Type::Any(),
|
| - machine_reps[i]};
|
| + kMachineReps[i]};
|
|
|
| - Node* val = t.ExampleWithOutput(machine_reps[i]);
|
| + Node* val = t.ExampleWithOutput(kMachineReps[i]);
|
| Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0,
|
| t.p1, t.jsgraph.Int32Constant(1024), val,
|
| t.start, t.start);
|
| @@ -1444,10 +1453,10 @@ TEST(LowerStoreElement_to_store) {
|
| CheckElementAccessArithmetic(access, store);
|
|
|
| StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
|
| - if (machine_reps[i] & kRepTagged) {
|
| + if (kMachineReps[i] & kRepTagged) {
|
| CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind());
|
| }
|
| - CHECK_EQ(machine_reps[i], rep.machine_type());
|
| + CHECK_EQ(kMachineReps[i], rep.machine_type());
|
| }
|
| }
|
|
|
|
|