6 #include <gtest/gtest.h>
14 TEST(SimpleOperationTests, NormalizeSimpleOperationCne_NodesWithoutOperands)
23 auto & nullaryValueNode1 = CreateOpNode<TestNullaryOperation>(graph.
GetRootRegion(), valueType);
24 auto & nullaryValueNode2 = CreateOpNode<TestNullaryOperation>(graph.
GetRootRegion(), valueType);
25 auto & nullaryStateNode1 = CreateOpNode<TestNullaryOperation>(graph.
GetRootRegion(), stateType);
26 auto & nullaryStateNode2 = CreateOpNode<TestNullaryOperation>(graph.
GetRootRegion(), stateType);
45 ReduceNode<SimpleOperation>(
47 *TryGetOwnerNode<SimpleNode>(*exNullaryValueNode1.origin()));
48 ReduceNode<SimpleOperation>(
50 *TryGetOwnerNode<SimpleNode>(*exNullaryValueNode2.origin()));
51 ReduceNode<SimpleOperation>(
53 *TryGetOwnerNode<SimpleNode>(*exNullaryStateNode1.origin()));
54 ReduceNode<SimpleOperation>(
56 *TryGetOwnerNode<SimpleNode>(*exNullaryStateNode2.origin()));
62 EXPECT_EQ(exNullaryValueNode1.origin(), exNullaryValueNode2.origin());
63 EXPECT_EQ(exNullaryStateNode1.origin(), exNullaryStateNode2.origin());
64 EXPECT_NE(exNullaryValueNode1.origin(), exNullaryStateNode2.origin());
67 TEST(SimpleOperationTests, NormalizeSimpleOperationCne_NodesWithOperands)
79 auto & valueNode1 = CreateOpNode<TestUnaryOperation>({ v1 }, valueType, valueType);
80 auto & valueNode2 = CreateOpNode<TestUnaryOperation>({ v1 }, valueType, valueType);
81 auto & stateNode1 = CreateOpNode<TestUnaryOperation>({ s1 }, stateType, stateType);
82 auto & stateNode2 = CreateOpNode<TestUnaryOperation>({ s1 }, stateType, stateType);
101 ReduceNode<SimpleOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*exValueNode1.origin()));
102 ReduceNode<SimpleOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*exValueNode2.origin()));
103 ReduceNode<SimpleOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*exStateNode1.origin()));
104 ReduceNode<SimpleOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*exStateNode2.origin()));
110 EXPECT_EQ(exValueNode1.origin(), exValueNode2.origin());
111 EXPECT_EQ(exStateNode1.origin(), exStateNode2.origin());
112 EXPECT_NE(exValueNode1.origin(), exStateNode2.origin());
115 TEST(SimpleOperationTests, NormalizeSimpleOperationCne_Mixed)
146 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e1.origin()));
147 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e2.origin()));
148 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e3.origin()));
149 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e4.origin()));
151 EXPECT_EQ(e1.origin(), e3.origin());
152 EXPECT_EQ(e2.origin(), e4.origin());
156 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e5.origin()));
157 EXPECT_EQ(e5.origin(), e1.origin());
161 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e6.origin()));
162 EXPECT_EQ(e6.origin(), e2.origin());
166 EXPECT_NE(e7.origin(), e1.origin());
168 ReduceNode<TestOperation>(NormalizeCne, *TryGetOwnerNode<SimpleNode>(*e7.origin()));
169 EXPECT_EQ(e7.origin(), e1.origin());
172 TEST(SimpleOperationTests, NormalizeSimpleOperationCne_Failure)
184 auto & nullaryValueNode = CreateOpNode<TestNullaryOperation>(graph.
GetRootRegion(), valueType);
185 auto & nullaryStateNode = CreateOpNode<TestNullaryOperation>(graph.
GetRootRegion(), stateType);
186 auto & unaryValueNode = CreateOpNode<TestUnaryOperation>({ v1 }, valueType, valueType);
187 auto & unaryStateNode = CreateOpNode<TestUnaryOperation>({ s1 }, stateType, stateType);
206 ReduceNode<SimpleOperation>(
208 *TryGetOwnerNode<SimpleNode>(*exNullaryValueNode.origin()));
209 ReduceNode<SimpleOperation>(
211 *TryGetOwnerNode<SimpleNode>(*exNullaryStateNode.origin()));
212 ReduceNode<SimpleOperation>(
214 *TryGetOwnerNode<SimpleNode>(*exUnaryValueNode.origin()));
215 ReduceNode<SimpleOperation>(
217 *TryGetOwnerNode<SimpleNode>(*exUnaryStateNode.origin()));
223 EXPECT_EQ(TryGetOwnerNode<Node>(*exNullaryValueNode.origin()), &nullaryValueNode);
224 EXPECT_EQ(TryGetOwnerNode<Node>(*exNullaryStateNode.origin()), &nullaryStateNode);
225 EXPECT_EQ(TryGetOwnerNode<Node>(*exUnaryValueNode.origin()), &unaryValueNode);
226 EXPECT_EQ(TryGetOwnerNode<Node>(*exUnaryStateNode.origin()), &unaryStateNode);
TEST(SimpleOperationTests, NormalizeSimpleOperationCne_NodesWithoutOperands)
static GraphExport & Create(Output &origin, std::string name)
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Region & GetRootRegion() const noexcept
NodeOutput * output(size_t index) const noexcept
static SimpleNode * createNode(Region *region, const std::vector< Output * > &operands, std::vector< std::shared_ptr< const Type >> resultTypes)
static std::shared_ptr< const TestType > createStateType()
static std::shared_ptr< const TestType > createValueType()
std::optional< std::vector< rvsdg::Output * > > NormalizeSimpleOperationCommonNodeElimination(Region ®ion, const SimpleOperation &operation, const std::vector< rvsdg::Output * > &operands)
Performs common node elimination for a given operation and operands in a region.
std::string view(const rvsdg::Region *region)
static std::vector< jlm::rvsdg::Output * > operands(const Node *node)