| Index: test/unittests/compiler/change-lowering-unittest.cc
|
| diff --git a/test/unittests/compiler/change-lowering-unittest.cc b/test/unittests/compiler/change-lowering-unittest.cc
|
| index aec568c9db9bfedc8be23f64f03dcbc63141f8ed..a3e07b6c36cde1211e464439ab01b14d1629f05e 100644
|
| --- a/test/unittests/compiler/change-lowering-unittest.cc
|
| +++ b/test/unittests/compiler/change-lowering-unittest.cc
|
| @@ -177,6 +177,161 @@ TARGET_TEST_P(ChangeLoweringCommonTest, ChangeTaggedToUint32WithTaggedPointer) {
|
| }
|
|
|
|
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, StoreFieldSmi) {
|
| + FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| + Handle<Name>::null(), Type::Any(), kMachAnyTagged};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* p1 = Parameter(Type::TaggedSigned());
|
| + Node* store = graph()->NewNode(simplified()->StoreField(access), p0, p1,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(store);
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(r.replacement(),
|
| + IsStore(StoreRepresentation(kMachAnyTagged, kNoWriteBarrier), p0,
|
| + IsIntPtrConstant(access.offset - access.tag()), p1,
|
| + graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, StoreFieldTagged) {
|
| + FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| + Handle<Name>::null(), Type::Any(), kMachAnyTagged};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* p1 = Parameter(Type::Tagged());
|
| + Node* store = graph()->NewNode(simplified()->StoreField(access), p0, p1,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(store);
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + EXPECT_THAT(r.replacement(),
|
| + IsStore(StoreRepresentation(kMachAnyTagged, kFullWriteBarrier),
|
| + p0, IsIntPtrConstant(access.offset - access.tag()), p1,
|
| + graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, LoadField) {
|
| + FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| + Handle<Name>::null(), Type::Any(), kMachAnyTagged};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* load = graph()->NewNode(simplified()->LoadField(access), p0,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(load);
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + Matcher<Node*> index_match = IsIntPtrConstant(access.offset - access.tag());
|
| + EXPECT_THAT(
|
| + r.replacement(),
|
| + IsLoad(kMachAnyTagged, p0, IsIntPtrConstant(access.offset - access.tag()),
|
| + graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, StoreElementTagged) {
|
| + ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(),
|
| + kMachAnyTagged};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* p1 = Parameter(Type::Signed32());
|
| + Node* p2 = Parameter(Type::Tagged());
|
| + Node* store = graph()->NewNode(simplified()->StoreElement(access), p0, p1, p2,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(store);
|
| +
|
| + const int element_size_shift = ElementSizeLog2Of(access.machine_type);
|
| + ASSERT_TRUE(r.Changed());
|
| + Matcher<Node*> index_match =
|
| + IsInt32Add(IsWord32Shl(p1, IsInt32Constant(element_size_shift)),
|
| + IsInt32Constant(access.header_size - access.tag()));
|
| + if (!Is32()) {
|
| + index_match = IsChangeUint32ToUint64(index_match);
|
| + }
|
| +
|
| + EXPECT_THAT(r.replacement(),
|
| + IsStore(StoreRepresentation(kMachAnyTagged, kFullWriteBarrier),
|
| + p0, index_match, p2, graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, StoreElementUint8) {
|
| + ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| + Type::Signed32(), kMachUint8};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* p1 = Parameter(Type::Signed32());
|
| + Node* p2 = Parameter(Type::Signed32());
|
| + Node* store = graph()->NewNode(simplified()->StoreElement(access), p0, p1, p2,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(store);
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + Matcher<Node*> index_match =
|
| + IsInt32Add(p1, IsInt32Constant(access.header_size - access.tag()));
|
| + if (!Is32()) {
|
| + index_match = IsChangeUint32ToUint64(index_match);
|
| + }
|
| +
|
| + EXPECT_THAT(r.replacement(),
|
| + IsStore(StoreRepresentation(kMachUint8, kNoWriteBarrier), p0,
|
| + index_match, p2, graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, LoadElementTagged) {
|
| + ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(),
|
| + kMachAnyTagged};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* p1 = Parameter(Type::Signed32());
|
| + Node* load = graph()->NewNode(simplified()->LoadElement(access), p0, p1,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(load);
|
| +
|
| + const int element_size_shift = ElementSizeLog2Of(access.machine_type);
|
| + ASSERT_TRUE(r.Changed());
|
| + Matcher<Node*> index_match =
|
| + IsInt32Add(IsWord32Shl(p1, IsInt32Constant(element_size_shift)),
|
| + IsInt32Constant(access.header_size - access.tag()));
|
| + if (!Is32()) {
|
| + index_match = IsChangeUint32ToUint64(index_match);
|
| + }
|
| +
|
| + EXPECT_THAT(r.replacement(), IsLoad(kMachAnyTagged, p0, index_match,
|
| + graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, LoadElementInt8) {
|
| + ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
|
| + Type::Signed32(), kMachInt8};
|
| + Node* p0 = Parameter(Type::TaggedPointer());
|
| + Node* p1 = Parameter(Type::Signed32());
|
| + Node* load = graph()->NewNode(simplified()->LoadElement(access), p0, p1,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(load);
|
| +
|
| + ASSERT_TRUE(r.Changed());
|
| + Matcher<Node*> index_match =
|
| + IsInt32Add(p1, IsInt32Constant(access.header_size - access.tag()));
|
| + if (!Is32()) {
|
| + index_match = IsChangeUint32ToUint64(index_match);
|
| + }
|
| +
|
| + EXPECT_THAT(r.replacement(), IsLoad(kMachInt8, p0, index_match,
|
| + graph()->start(), graph()->start()));
|
| +}
|
| +
|
| +
|
| +TARGET_TEST_P(ChangeLoweringCommonTest, Allocate) {
|
| + Node* p0 = Parameter(Type::Signed32());
|
| + Node* alloc = graph()->NewNode(simplified()->Allocate(TENURED), p0,
|
| + graph()->start(), graph()->start());
|
| + Reduction r = Reduce(alloc);
|
| +
|
| + // Only check that we lowered, but do not specify the exact form since
|
| + // this is subject to change.
|
| + ASSERT_TRUE(r.Changed());
|
| +}
|
| +
|
| +
|
| INSTANTIATE_TEST_CASE_P(ChangeLoweringTest, ChangeLoweringCommonTest,
|
| ::testing::Values(kRepWord32, kRepWord64));
|
|
|
|
|