6 #include <gtest/gtest.h>
23 std::ifstream file(outputFilePath.
to_str());
24 std::stringstream buffer;
25 buffer << file.rdbuf();
42 printer.
Run(module, collector);
44 auto fileName = tmpDir.Join(
"TestTreePrinter-" + settings.GetUniqueString() +
"-rvsdgTree-0.txt");
53 TEST(RvsdgTreePrinterTests, PrintRvsdgTree)
65 rvsdgModule->Rvsdg().GetRootRegion(),
67 auto lambdaOutput = lambda->finalize({ lambda->GetFunctionArguments()[0] });
79 "{\"StructuralNodes\":[{\"DebugString\":\"LAMBDA[f]\",\"Subregions\":[{}]}]}\n";
81 EXPECT_EQ(tree, expectedTree);
84 TEST(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, {}, {});
110 "{\"NumRvsdgNodes\":2,\"StructuralNodes\":[{\"DebugString\":\"TestStructuralOperation\","
111 "\"NumRvsdgNodes\":2,\"Subregions\":[{\"NumRvsdgNodes\":1},{\"NumRvsdgNodes\":1}]}]}\n";
113 EXPECT_EQ(tree, expectedTree);
116 TEST(RvsdgTreePrinterTests, PrintNumLoadNodesAnnotation)
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);
138 addressInput.argument[0],
139 { memoryStateInput.argument[0] },
142 TestOperation::createNode(structuralNode->subregion(1), {}, {});
144 addressInput.argument[2],
145 { memoryStateInput.argument[2] },
149 TestOperation::createNode(rootRegion, {}, {});
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);
167 TEST(RvsdgTreePrinterTests, PrintNumMemoryStateInputsOutputsAnnotation)
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] });
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);
214 TEST(RvsdgTreePrinterTests, printDebugIds)
221 auto valueType = TestType::createValueType();
224 auto & rvsdg = rvsdgModule->Rvsdg();
226 TestStructuralNode::create(&rvsdg.GetRootRegion(), 2);
237 const auto expectedTree =
238 "{\"RegionId\":0,\"StructuralNodes\":[{\"DebugString\":\"TestStructuralOperation\","
239 "\"NodeId\":0,\"Subregions\":[{\"RegionId\":1},{\"RegionId\":2}]}]}\n";
241 EXPECT_EQ(tree, expectedTree);
244 TEST(RvsdgTreePrinterTests, printAllocaNodes)
251 auto valueType = TestType::createValueType();
255 auto & rvsdg = rvsdgModule->Rvsdg();
272 const auto expectedTree =
"{\"NumAllocaNodes\":2,\"NumAggregateAllocaNodes\":1}\n";
274 EXPECT_EQ(tree, expectedTree);
static std::string ReadFile(const jlm::util::FilePath &outputFilePath)
static std::string RunAndExtractFile(jlm::llvm::LlvmRvsdgModule &module, jlm::llvm::RvsdgTreePrinter &printer)
TEST(RvsdgTreePrinterTests, PrintRvsdgTree)
static std::vector< rvsdg::Output * > create(std::shared_ptr< const rvsdg::Type > allocatedType, rvsdg::Output *count, const size_t alignment)
static rvsdg::Node & Create(rvsdg::Region ®ion, IntegerValueRepresentation representation)
static std::unique_ptr< LlvmLambdaOperation > Create(std::shared_ptr< const jlm::rvsdg::FunctionType > type, std::string name, const jlm::llvm::Linkage &linkage, jlm::llvm::CallingConvention callingConvention, jlm::llvm::AttributeSet attributes)
static std::unique_ptr< LlvmRvsdgModule > Create(const util::FilePath &sourceFileName, const std::string &targetTriple, const std::string &dataLayout)
static std::unique_ptr< llvm::ThreeAddressCode > Create(const Variable *address, const Variable *state, std::shared_ptr< const rvsdg::Type > loadedType, size_t alignment)
static std::shared_ptr< const MemoryStateType > Create()
static std::shared_ptr< const PointerType > Create()
@ NumAggregateAllocaNodes
@ NumMemoryStateInputsOutputs
RVSDG tree printer debug pass.
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static std::shared_ptr< const StructType > CreateIdentified(const std::string &name, std::vector< std::shared_ptr< const Type >> types, bool isPacked)
static std::shared_ptr< const FunctionType > Create(std::vector< std::shared_ptr< const jlm::rvsdg::Type >> argumentTypes, std::vector< std::shared_ptr< const jlm::rvsdg::Type >> resultTypes)
static GraphExport & Create(Output &origin, std::string name)
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
static std::shared_ptr< const TestType > createValueType()
static FilePath TempDirectoryPath()
const std::string & to_str() const noexcept
Global memory state passed between functions.
static void remove(Node *node)