30TEST(IOBarrierEliminationTests, testLambdaArgument)
35 auto i32Type = BitType::Create(32);
38 auto functionType = FunctionType::Create({ pointerType, ioStateType }, { i32Type, ioStateType });
41 auto & rvsdg = rvsdgModule->Rvsdg();
43 auto lambdaNode = LambdaNode::Create(
44 rvsdg.GetRootRegion(),
46 auto ptrArgument = lambdaNode->GetFunctionArguments()[0];
47 auto ioStateArgument = lambdaNode->GetFunctionArguments()[1];
53 auto lambdaOutput = lambdaNode->finalize({ loadNode.output(0), ioStateArgument });
54 GraphExport::Create(*lambdaOutput,
"test");
61 EXPECT_FALSE(Region::containsOperation<IOBarrierOperation>(rvsdg.GetRootRegion(),
true));
64TEST(IOBarrierEliminationTests, testSizeIsRespected)
69 auto i8Type = BitType::Create(8);
70 auto i32Type = BitType::Create(32);
74 FunctionType::Create({ pointerType, ioStateType }, { i8Type, i32Type, ioStateType });
77 auto & rvsdg = rvsdgModule->Rvsdg();
79 auto lambdaNode = LambdaNode::Create(
80 rvsdg.GetRootRegion(),
82 auto ptrArgument = lambdaNode->GetFunctionArguments()[0];
83 auto ioStateArgument = lambdaNode->GetFunctionArguments()[1];
88 TestOperation::createNode(lambdaNode->subregion(), { ioStateArgument }, { ioStateType });
95 lambdaNode->finalize({ loadNode1.output(0), loadNode2.output(0), testNode->output(0) });
96 GraphExport::Create(*lambdaOutput,
"test");
104 EXPECT_TRUE(Region::containsOperation<IOBarrierOperation>(rvsdg.GetRootRegion(),
true));
107TEST(IOBarrierEliminationTests, testSuccess)
112 auto i32Type = BitType::Create(32);
113 auto i64Type = BitType::Create(64);
117 FunctionType::Create({ pointerType, ioStateType }, { i64Type, i32Type, ioStateType });
120 auto & rvsdg = rvsdgModule->Rvsdg();
122 auto lambdaNode = LambdaNode::Create(
123 rvsdg.GetRootRegion(),
125 auto ptrArgument = lambdaNode->GetFunctionArguments()[0];
126 auto ioStateArgument = lambdaNode->GetFunctionArguments()[1];
131 TestOperation::createNode(lambdaNode->subregion(), { ioStateArgument }, { ioStateType });
138 lambdaNode->finalize({ loadNode1.output(0), loadNode2.output(0), testNode->output(0) });
139 GraphExport::Create(*lambdaOutput,
"test");
147 EXPECT_FALSE(Region::containsOperation<IOBarrierOperation>(rvsdg.GetRootRegion(),
true));
150TEST(IOBarrierEliminationTests, testInvidiualIOBarrierUserRerouting)
155 auto i8Type = BitType::Create(8);
156 auto i32Type = BitType::Create(32);
157 auto i64Type = BitType::Create(64);
161 FunctionType::Create({ pointerType, ioStateType }, { i32Type, i8Type, i64Type, ioStateType });
164 auto & rvsdg = rvsdgModule->Rvsdg();
166 auto lambdaNode = LambdaNode::Create(
167 rvsdg.GetRootRegion(),
169 auto ptrArgument = lambdaNode->GetFunctionArguments()[0];
170 auto ioStateArgument = lambdaNode->GetFunctionArguments()[1];
175 TestOperation::createNode(lambdaNode->subregion(), { ioStateArgument }, { ioStateType });
184 auto lambdaOutput = lambdaNode->finalize(
185 { load32Node.output(0), load8Node.output(0), load64Node.output(0), testNode->output(0) });
186 GraphExport::Create(*lambdaOutput,
"test");
192 EXPECT_TRUE(Region::containsOperation<IOBarrierOperation>(rvsdg.GetRootRegion(),
true));
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)