diff options
Diffstat (limited to 'deps/v8/test/unittests/compiler/load-elimination-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/compiler/load-elimination-unittest.cc | 96 |
1 files changed, 61 insertions, 35 deletions
diff --git a/deps/v8/test/unittests/compiler/load-elimination-unittest.cc b/deps/v8/test/unittests/compiler/load-elimination-unittest.cc index 81393941bb..8d34fb9699 100644 --- a/deps/v8/test/unittests/compiler/load-elimination-unittest.cc +++ b/deps/v8/test/unittests/compiler/load-elimination-unittest.cc @@ -125,11 +125,9 @@ TEST_F(LoadEliminationTest, LoadFieldAndLoadField) { Node* object = Parameter(Type::Any(), 0); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess const access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Any(), - MachineType::AnyTagged(), + FieldAccess const access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; @@ -154,11 +152,9 @@ TEST_F(LoadEliminationTest, StoreFieldAndLoadField) { Node* value = Parameter(Type::Any(), 1); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Any(), - MachineType::AnyTagged(), + FieldAccess access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; @@ -178,17 +174,55 @@ TEST_F(LoadEliminationTest, StoreFieldAndLoadField) { EXPECT_EQ(value, r.replacement()); } +TEST_F(LoadEliminationTest, StoreFieldAndKillFields) { + Node* object = Parameter(Type::Any(), 0); + Node* value = Parameter(Type::Any(), 1); + Node* effect = graph()->start(); + Node* control = graph()->start(); + + FieldAccess access1 = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kNoWriteBarrier}; + + // Offset that out of field cache size. + FieldAccess access2 = {kTaggedBase, 2048 * kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), + kNoWriteBarrier}; + + StrictMock<MockAdvancedReducerEditor> editor; + LoadElimination load_elimination(&editor, jsgraph(), zone()); + + load_elimination.Reduce(graph()->start()); + + Node* store1 = effect = graph()->NewNode(simplified()->StoreField(access1), + object, value, effect, control); + load_elimination.Reduce(store1); + + // Invalidate caches of object. + Node* store2 = effect = graph()->NewNode(simplified()->StoreField(access2), + object, value, effect, control); + load_elimination.Reduce(store2); + + Node* store3 = graph()->NewNode(simplified()->StoreField(access1), + object, value, effect, control); + + Reduction r = load_elimination.Reduce(store3); + + // store3 shall not be replaced, since caches were invalidated. + EXPECT_EQ(store3, r.replacement()); +} + TEST_F(LoadEliminationTest, StoreFieldAndStoreElementAndLoadField) { Node* object = Parameter(Type::Any(), 0); Node* value = Parameter(Type::Any(), 1); Node* index = Parameter(Type::UnsignedSmall(), 2); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Any(), - MachineType::AnyTagged(), + FieldAccess access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; @@ -288,11 +322,9 @@ TEST_F(LoadEliminationTest, LoadFieldOnFalseBranchOfDiamond) { Node* check = Parameter(Type::Boolean(), 1); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess const access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Any(), - MachineType::AnyTagged(), + FieldAccess const access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; @@ -326,11 +358,9 @@ TEST_F(LoadEliminationTest, LoadFieldOnTrueBranchOfDiamond) { Node* check = Parameter(Type::Boolean(), 1); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess const access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Any(), - MachineType::AnyTagged(), + FieldAccess const access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Any(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; @@ -364,11 +394,9 @@ TEST_F(LoadEliminationTest, LoadFieldWithTypeMismatch) { Node* value = Parameter(Type::Signed32(), 1); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess const access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Unsigned31(), - MachineType::AnyTagged(), + FieldAccess const access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Unsigned31(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; @@ -422,11 +450,9 @@ TEST_F(LoadEliminationTest, AliasAnalysisForFinishRegion) { Node* value1 = Parameter(Type::Signed32(), 1); Node* effect = graph()->start(); Node* control = graph()->start(); - FieldAccess const access = {kTaggedBase, - kPointerSize, - MaybeHandle<Name>(), - Type::Signed32(), - MachineType::AnyTagged(), + FieldAccess const access = {kTaggedBase, kPointerSize, + MaybeHandle<Name>(), MaybeHandle<Map>(), + Type::Signed32(), MachineType::AnyTagged(), kNoWriteBarrier}; StrictMock<MockAdvancedReducerEditor> editor; |