Index: test/unittests/compiler/graph-reducer-unittest.cc |
diff --git a/test/unittests/compiler/graph-reducer-unittest.cc b/test/unittests/compiler/graph-reducer-unittest.cc |
index ca3203e5d8a87dcedbb79a277cc674d34be5d30a..ea981ccaf3051778aeae25f8475d352428932372 100644 |
--- a/test/unittests/compiler/graph-reducer-unittest.cc |
+++ b/test/unittests/compiler/graph-reducer-unittest.cc |
@@ -3,11 +3,10 @@ |
// found in the LICENSE file. |
#include "src/compiler/graph.h" |
-#include "src/compiler/graph-reducer.h" |
#include "src/compiler/node.h" |
#include "src/compiler/operator.h" |
+#include "test/unittests/compiler/graph-reducer-unittest.h" |
#include "test/unittests/test-utils.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
using testing::_; |
using testing::DefaultValue; |
@@ -55,9 +54,9 @@ struct MockReducer : public Reducer { |
// Replaces all "A" operators with "B" operators without creating new nodes. |
-class InPlaceABReducer : public Reducer { |
+class InPlaceABReducer final : public Reducer { |
public: |
- virtual Reduction Reduce(Node* node) { |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeA0: |
EXPECT_EQ(0, node->InputCount()); |
@@ -78,10 +77,11 @@ class InPlaceABReducer : public Reducer { |
// Replaces all "A" operators with "B" operators by allocating new nodes. |
-class NewABReducer : public Reducer { |
+class NewABReducer final : public Reducer { |
public: |
explicit NewABReducer(Graph* graph) : graph_(graph) {} |
- virtual Reduction Reduce(Node* node) { |
+ |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeA0: |
EXPECT_EQ(0, node->InputCount()); |
@@ -96,7 +96,9 @@ class NewABReducer : public Reducer { |
} |
return NoChange(); |
} |
- Graph* graph_; |
+ |
+ private: |
+ Graph* const graph_; |
}; |
@@ -104,7 +106,8 @@ class NewABReducer : public Reducer { |
class A0Wrapper final : public Reducer { |
public: |
explicit A0Wrapper(Graph* graph) : graph_(graph) {} |
- virtual Reduction Reduce(Node* node) override { |
+ |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeA0: |
EXPECT_EQ(0, node->InputCount()); |
@@ -112,7 +115,9 @@ class A0Wrapper final : public Reducer { |
} |
return NoChange(); |
} |
- Graph* graph_; |
+ |
+ private: |
+ Graph* const graph_; |
}; |
@@ -120,7 +125,8 @@ class A0Wrapper final : public Reducer { |
class B0Wrapper final : public Reducer { |
public: |
explicit B0Wrapper(Graph* graph) : graph_(graph) {} |
- virtual Reduction Reduce(Node* node) override { |
+ |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeB0: |
EXPECT_EQ(0, node->InputCount()); |
@@ -128,13 +134,16 @@ class B0Wrapper final : public Reducer { |
} |
return NoChange(); |
} |
- Graph* graph_; |
+ |
+ private: |
+ Graph* const graph_; |
}; |
// Replaces all "kOpA1" nodes with the first input. |
-class A1Forwarder : public Reducer { |
- virtual Reduction Reduce(Node* node) { |
+class A1Forwarder final : public Reducer { |
+ public: |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeA1: |
EXPECT_EQ(1, node->InputCount()); |
@@ -146,8 +155,9 @@ class A1Forwarder : public Reducer { |
// Replaces all "kOpB1" nodes with the first input. |
-class B1Forwarder : public Reducer { |
- virtual Reduction Reduce(Node* node) { |
+class B1Forwarder final : public Reducer { |
+ public: |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeB1: |
EXPECT_EQ(1, node->InputCount()); |
@@ -159,9 +169,9 @@ class B1Forwarder : public Reducer { |
// Replaces all "B" operators with "C" operators without creating new nodes. |
-class InPlaceBCReducer : public Reducer { |
+class InPlaceBCReducer final : public Reducer { |
public: |
- virtual Reduction Reduce(Node* node) { |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeB0: |
EXPECT_EQ(0, node->InputCount()); |
@@ -182,8 +192,9 @@ class InPlaceBCReducer : public Reducer { |
// Swaps the inputs to "kOp2A" and "kOp2B" nodes based on ids. |
-class AB2Sorter : public Reducer { |
- virtual Reduction Reduce(Node* node) { |
+class AB2Sorter final : public Reducer { |
+ public: |
+ Reduction Reduce(Node* node) final { |
switch (node->op()->opcode()) { |
case kOpcodeA2: |
case kOpcodeB2: |
@@ -200,10 +211,59 @@ class AB2Sorter : public Reducer { |
} |
}; |
- |
} // namespace |
+class AdvancedReducerTest : public TestWithZone { |
+ public: |
+ AdvancedReducerTest() : graph_(zone()) {} |
+ |
+ protected: |
+ Graph* graph() { return &graph_; } |
+ |
+ private: |
+ Graph graph_; |
+}; |
+ |
+ |
+TEST_F(AdvancedReducerTest, Replace) { |
+ struct DummyReducer final : public AdvancedReducer { |
+ explicit DummyReducer(Editor* editor) : AdvancedReducer(editor) {} |
+ Reduction Reduce(Node* node) final { |
+ Replace(node, node); |
+ return NoChange(); |
+ } |
+ }; |
+ StrictMock<MockAdvancedReducerEditor> e; |
+ DummyReducer r(&e); |
+ Node* node0 = graph()->NewNode(&kOpA0); |
+ Node* node1 = graph()->NewNode(&kOpA1, node0); |
+ EXPECT_CALL(e, Replace(node0, node0)); |
+ EXPECT_CALL(e, Replace(node1, node1)); |
+ EXPECT_FALSE(r.Reduce(node0).Changed()); |
+ EXPECT_FALSE(r.Reduce(node1).Changed()); |
+} |
+ |
+ |
+TEST_F(AdvancedReducerTest, Revisit) { |
+ struct DummyReducer final : public AdvancedReducer { |
+ explicit DummyReducer(Editor* editor) : AdvancedReducer(editor) {} |
+ Reduction Reduce(Node* node) final { |
+ Revisit(node); |
+ return NoChange(); |
+ } |
+ }; |
+ StrictMock<MockAdvancedReducerEditor> e; |
+ DummyReducer r(&e); |
+ Node* node0 = graph()->NewNode(&kOpA0); |
+ Node* node1 = graph()->NewNode(&kOpA1, node0); |
+ EXPECT_CALL(e, Revisit(node0)); |
+ EXPECT_CALL(e, Revisit(node1)); |
+ EXPECT_FALSE(r.Reduce(node0).Changed()); |
+ EXPECT_FALSE(r.Reduce(node1).Changed()); |
+} |
+ |
+ |
class GraphReducerTest : public TestWithZone { |
public: |
GraphReducerTest() : graph_(zone()) {} |
@@ -573,6 +633,8 @@ TEST_F(GraphReducerTest, Sorter1) { |
} |
+namespace { |
+ |
// Generate a node graph with the given permutations. |
void GenDAG(Graph* graph, int* p3, int* p2, int* p1) { |
Node* level4 = graph->NewNode(&kOpA0); |
@@ -591,6 +653,8 @@ void GenDAG(Graph* graph, int* p3, int* p2, int* p1) { |
graph->SetEnd(end); |
} |
+} // namespace |
+ |
TEST_F(GraphReducerTest, SortForwardReduce) { |
// Tests combined reductions on a series of DAGs. |
@@ -667,7 +731,6 @@ TEST_F(GraphReducerTest, Order) { |
} |
} |
- |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |