6 #include <gtest/gtest.h>
15 TEST(IOStateEliminationTests, testCall)
24 const auto functionType =
28 auto & rvsdg = rvsdgModule.Rvsdg();
33 rvsdg.GetRootRegion(),
36 auto ioStateArgument = lambdaNode->GetFunctionArguments()[0];
37 auto memoryStateArgument = lambdaNode->GetFunctionArguments()[1];
38 const auto functionCv = lambdaNode->AddContextVar(i0);
43 { ioStateArgument, memoryStateArgument });
45 const auto lambdaOutput = lambdaNode->finalize({ callNode.output(0), callNode.output(1) });
59 EXPECT_TRUE(callNode.output(0)->IsDead());
60 EXPECT_EQ(lambdaNode->GetFunctionResults()[0]->origin(), ioStateArgument);
63 TEST(IOStateEliminationTests, testNesting)
74 { controlType, ioStateType, memoryStateType },
75 { ioStateType, memoryStateType });
78 auto & rvsdg = rvsdgModule.Rvsdg();
81 rvsdg.GetRootRegion(),
84 auto controlArgument = lambdaNode->GetFunctionArguments()[0];
85 auto ioStateArgument = lambdaNode->GetFunctionArguments()[1];
86 auto memoryStateArgument = lambdaNode->GetFunctionArguments()[2];
90 auto entryVar = gammaNode->AddEntryVar(ioStateArgument);
93 gammaNode->subregion(0),
94 { entryVar.branchArgument[0] },
100 auto exitVar = gammaNode->AddExitVar({ node2->output(0), entryVar.branchArgument[1] });
102 const auto lambdaOutput = lambdaNode->finalize({ exitVar.output, memoryStateArgument });
116 EXPECT_TRUE(node1->output(0)->IsDead());
117 EXPECT_TRUE(node2->output(0)->IsDead());
118 EXPECT_TRUE(exitVar.output->IsDead());
119 EXPECT_EQ(lambdaNode->GetFunctionResults()[0]->origin(), ioStateArgument);
121 EXPECT_EQ(gammaNode->GetEntryVars().size(), 3);
static jlm::util::StatisticsCollector statisticsCollector
TEST(IOStateEliminationTests, testCall)
void Run(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static rvsdg::SimpleNode & CreateNode(rvsdg::Region ®ion, std::unique_ptr< CallOperation > callOperation, const std::vector< rvsdg::Output * > &operands)
static std::shared_ptr< const IOStateType > Create()
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::shared_ptr< const MemoryStateType > Create()
static std::shared_ptr< const ControlType > Create(std::size_t nalternatives)
Instantiates control type.
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 GammaNode * create(jlm::rvsdg::Output *predicate, size_t nalternatives)
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 SimpleNode * createNode(Region *region, const std::vector< Output * > &operands, std::vector< std::shared_ptr< const Type >> resultTypes)
Global memory state passed between functions.
std::string view(const rvsdg::Region *region)