6 #include <gtest/gtest.h>
18 TEST(ThetaConversionTests, TestUnknownBoundaries)
30 rm.Rvsdg().GetRootRegion(),
34 auto idv = theta->AddLoopVar(lambda->GetFunctionArguments()[0]);
35 auto lvs = theta->AddLoopVar(lambda->GetFunctionArguments()[1]);
36 auto lve = theta->AddLoopVar(lambda->GetFunctionArguments()[2]);
38 auto arm = jlm::rvsdg::CreateOpNode<jlm::rvsdg::bitadd_op>({ idv.pre, lvs.pre }, 32).output(0);
39 auto cmp = jlm::rvsdg::CreateOpNode<jlm::rvsdg::bitult_op>({ arm, lve.pre }, 32).output(0);
42 idv.post->divert_to(arm);
43 theta->set_predicate(matchNode.output(0));
45 auto f = lambda->finalize({ theta->output(0), theta->output(1), theta->output(2) });
56 auto lambdaRegion = lambda->subregion();
57 EXPECT_TRUE(jlm::rvsdg::Region::ContainsNodeType<LoopNode>(*lambdaRegion,
true));
58 EXPECT_TRUE(jlm::rvsdg::Region::ContainsOperation<PredicateBufferOperation>(*lambdaRegion,
true));
60 jlm::rvsdg::Region::ContainsOperation<jlm::hls::BranchOperation>(*lambdaRegion,
true));
61 EXPECT_TRUE(jlm::rvsdg::Region::ContainsOperation<MuxOperation>(*lambdaRegion,
true));
64 jlm::rvsdg::Region::ContainsOperation<LoopConstantBufferOperation>(*lambdaRegion,
true));
65 EXPECT_EQ(lambdaRegion->argument(0)->nusers(), 1);
67 jlm::rvsdg::AssertGetOwnerNode<LoopNode>(lambdaRegion->argument(0)->SingleUser());
69 EXPECT_TRUE(jlm::rvsdg::IsOwnerNodeOperation<LoopConstantBufferOperation>(
70 loopNode.subregion()->argument(3)->SingleUser()));
73 EXPECT_TRUE(jlm::rvsdg::IsOwnerNodeOperation<LoopConstantBufferOperation>(
74 loopNode.subregion()->argument(4)->SingleUser()));
static jlm::util::StatisticsCollector statisticsCollector
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 BitType > Create(std::size_t nbits)
Creates bit type of specified width.
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 LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
static Node & CreateNode(Output &predicate, const std::unordered_map< uint64_t, uint64_t > &mapping, const uint64_t defaultAlternative, const size_t numAlternatives)
static ThetaNode * create(rvsdg::Region *parent)
TEST(ThetaConversionTests, TestUnknownBoundaries)
Global memory state passed between functions.
std::string view(const rvsdg::Region *region)