19TEST(NodeSinkingTests, testPullInTop)
30 auto & graph = rm.Rvsdg();
35 auto n1 = TestOperation::createNode(&graph.GetRootRegion(), { x }, { vt })->output(0);
36 auto n2 = TestOperation::createNode(&graph.GetRootRegion(), { x }, { vt })->output(0);
37 auto n3 = TestOperation::createNode(&graph.GetRootRegion(), { n2 }, { vt })->output(0);
38 auto n4 = TestOperation::createNode(&graph.GetRootRegion(), { c, n1 }, { ct })->output(0);
39 auto n5 = TestOperation::createNode(&graph.GetRootRegion(), { n1, n3 }, { vt })->output(0);
43 gamma->AddEntryVar(n4);
44 auto ev = gamma->AddEntryVar(n5);
45 gamma->AddExitVar(ev.branchArgument);
54 EXPECT_EQ(gamma->subregion(0)->numNodes(), 2u);
55 EXPECT_EQ(gamma->subregion(1)->numNodes(), 2u);
58TEST(NodeSinkingTests, testPullInBottom)
64 auto valueType = TestType::createValueType();
65 const auto controlType = ControlType::Create(2);
71 auto gammaNode = GammaNode::create(c, 2);
73 auto entryVar = gammaNode->AddEntryVar(x);
74 gammaNode->AddExitVar(entryVar.branchArgument);
77 TestOperation::createNode(&rvsdg.
GetRootRegion(), { gammaNode->output(0), x }, { valueType });
78 auto node2 = TestOperation::createNode(
80 { gammaNode->output(0), node1->output(0) },
83 auto & xp = GraphExport::Create(*node2->output(0),
"x");
88 const auto sunkNodes = NodeSinking::sinkDependentNodesIntoGamma(*gammaNode);
94 EXPECT_EQ(sunkNodes, 2u);
98 EXPECT_EQ(gammaNode->subregion(0)->numNodes(), 2u);
99 EXPECT_EQ(gammaNode->subregion(1)->numNodes(), 2u);
102TEST(NodeSinkingTests, testPull)
108 auto & graph = rm.
Rvsdg();
112 auto croot = TestOperation::createNode(&graph.GetRootRegion(), {}, { vt })->output(0);
116 auto ev1 = gamma1->AddEntryVar(p);
117 auto ev2 = gamma1->AddEntryVar(croot);
119 auto cg1 = TestOperation::createNode(gamma1->subregion(0), {}, { vt })->output(0);
123 auto ev3 = gamma2->AddEntryVar(ev2.branchArgument[1]);
124 auto cg2 = TestOperation::createNode(gamma2->subregion(0), {}, { vt })->output(0);
126 TestOperation::createNode(gamma2->subregion(1), { ev3.branchArgument[1] }, { vt })->output(0);
127 auto g2xv = gamma2->AddExitVar({ cg2, un });
129 auto g1xv = gamma1->AddExitVar({ cg1, g2xv.output });
139 EXPECT_EQ(graph.GetRootRegion().numNodes(), 1u);