53TEST(RvsdgTreePrinterTests, PrintRvsdgTree)
59 auto rvsdgModule = LlvmRvsdgModule::Create(
FilePath(
""),
"",
"");
62 { MemoryStateType::Create() },
63 { MemoryStateType::Create() });
65 rvsdgModule->Rvsdg().GetRootRegion(),
66 LlvmLambdaOperation::Create(functionType,
"f", Linkage::externalLinkage));
67 auto lambdaOutput = lambda->finalize({ lambda->GetFunctionArguments()[0] });
79 "{\"StructuralNodes\":[{\"DebugString\":\"LAMBDA[f]\",\"Subregions\":[{}]}]}\n";
81 EXPECT_EQ(tree, expectedTree);
84TEST(RvsdgTreePrinterTests, PrintNumRvsdgNodesAnnotation)
92 auto rootRegion = &rvsdgModule->Rvsdg().GetRootRegion();
94 auto structuralNode = TestStructuralNode::create(rootRegion, 2);
95 TestOperation::createNode(structuralNode->subregion(0), {}, {});
96 TestOperation::createNode(structuralNode->subregion(1), {}, {});
98 TestOperation::createNode(rootRegion, {}, {});
101 { RvsdgTreePrinter::Configuration::Annotation::NumRvsdgNodes });
110 "{\"NumRvsdgNodes\":2,\"StructuralNodes\":[{\"DebugString\":\"TestStructuralOperation\","
111 "\"NumRvsdgNodes\":2,\"Subregions\":[{\"NumRvsdgNodes\":1},{\"NumRvsdgNodes\":1}]}]}\n";
113 EXPECT_EQ(tree, expectedTree);
116TEST(RvsdgTreePrinterTests, PrintNumLoadNodesAnnotation)
123 const auto pointerType = PointerType::Create();
124 const auto memoryStateType = MemoryStateType::Create();
128 auto & rvsdg = rvsdgModule->Rvsdg();
129 auto rootRegion = &rvsdg.GetRootRegion();
134 auto structuralNode = TestStructuralNode::create(rootRegion, 3);
135 const auto addressInput = structuralNode->addInputWithArguments(address);
136 const auto memoryStateInput = structuralNode->addInputWithArguments(memoryState);
137 LoadNonVolatileOperation::Create(
138 addressInput.argument[0],
139 { memoryStateInput.argument[0] },
142 TestOperation::createNode(structuralNode->subregion(1), {}, {});
143 LoadNonVolatileOperation::Create(
144 addressInput.argument[2],
145 { memoryStateInput.argument[2] },
149 TestOperation::createNode(rootRegion, {}, {});
152 { RvsdgTreePrinter::Configuration::Annotation::NumLoadNodes });
160 auto expectedTree =
"{\"NumLoadNodes\":0,\"StructuralNodes\":[{\"DebugString\":"
161 "\"TestStructuralOperation\",\"NumLoadNodes\":2,\"Subregions\":"
162 "[{\"NumLoadNodes\":1},{\"NumLoadNodes\":0},{\"NumLoadNodes\":1}]}]}\n";
164 EXPECT_EQ(tree, expectedTree);
167TEST(RvsdgTreePrinterTests, PrintNumMemoryStateInputsOutputsAnnotation)
174 auto memoryStateType = MemoryStateType::Create();
178 auto & rvsdg = rvsdgModule->Rvsdg();
183 auto structuralNode = TestStructuralNode::create(&rvsdg.GetRootRegion(), 2);
184 const auto inputVarX = structuralNode->addInputWithArguments(x);
185 const auto inputVarY = structuralNode->addInputWithArguments(y);
188 structuralNode->addOutputWithResults({ inputVarX.argument[0], inputVarX.argument[1] });
190 structuralNode->addOutputWithResults({ inputVarY.argument[0], inputVarY.argument[1] });
196 { RvsdgTreePrinter::Configuration::Annotation::NumMemoryStateInputsOutputs });
205 "{\"NumMemoryStateTypeArguments\":1,\"NumMemoryStateTypeResults\":1,\"StructuralNodes\":"
206 "[{\"DebugString\":\"TestStructuralOperation\",\"NumMemoryStateTypeInputs\":1,"
207 "\"NumMemoryStateTypeOutputs\":1,\"Subregions\":[{\"NumMemoryStateTypeArguments\":"
208 "1,\"NumMemoryStateTypeResults\":1},{\"NumMemoryStateTypeArguments\":"
209 "1,\"NumMemoryStateTypeResults\":1}]}]}\n";
211 EXPECT_EQ(tree, expectedTree);
214TEST(RvsdgTreePrinterTests, printDebugIds)
221 auto valueType = TestType::createValueType();
223 auto rvsdgModule = LlvmRvsdgModule::Create(
FilePath(
""),
"",
"");
224 auto & rvsdg = rvsdgModule->Rvsdg();
226 TestStructuralNode::create(&rvsdg.GetRootRegion(), 2);
229 { RvsdgTreePrinter::Configuration::Annotation::DebugIds });
237 const auto expectedTree =
238 "{\"RegionId\":0,\"StructuralNodes\":[{\"DebugString\":\"TestStructuralOperation\","
239 "\"NodeId\":0,\"Subregions\":[{\"RegionId\":1},{\"RegionId\":2}]}]}\n";
241 EXPECT_EQ(tree, expectedTree);
244TEST(RvsdgTreePrinterTests, printAllocaNodes)
251 auto valueType = TestType::createValueType();
252 auto structType = StructType::CreateIdentified({ valueType, valueType },
false);
254 auto rvsdgModule = LlvmRvsdgModule::Create(
FilePath(
""),
"",
"");
255 auto & rvsdg = rvsdgModule->Rvsdg();
257 auto & one = IntegerConstantOperation::Create(rvsdg.GetRootRegion(), 32, 1);
259 auto allocaResults = AllocaOperation::create(valueType, one.output(0), 4);
260 auto aggregatedAllocaResults = AllocaOperation::create(structType, one.output(0), 4);
263 { RvsdgTreePrinter::Configuration::Annotation::NumAggregateAllocaNodes,
264 RvsdgTreePrinter::Configuration::Annotation::NumAllocaNodes });
272 const auto expectedTree =
"{\"NumAggregateAllocaNodes\":1,\"NumAllocaNodes\":2}\n";
274 EXPECT_EQ(tree, expectedTree);