Jlm
GammaTests.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2022 Nico Reißmann <nico.reissmann@gmail.com>
3  * Magnus Sjalander <work@sjalander.com>
4  * See COPYING for terms of redistribution.
5  */
6 
7 #include <gtest/gtest.h>
8 
10 #include <jlm/hls/ir/hls.hpp>
13 #include <jlm/rvsdg/gamma.hpp>
14 #include <jlm/rvsdg/lambda.hpp>
15 #include <jlm/rvsdg/TestType.hpp>
16 #include <jlm/rvsdg/view.hpp>
17 
18 TEST(GammaConversionTests, TestWithMatch)
19 {
20  using namespace jlm::llvm;
21 
22  // Arrange
25 
26  LlvmRvsdgModule rm(jlm::util::FilePath(""), "", "");
27 
28  auto lambda = jlm::rvsdg::LambdaNode::Create(
29  rm.Rvsdg().GetRootRegion(),
31 
32  auto & matchNode = jlm::rvsdg::MatchOperation::CreateNode(
33  *lambda->GetFunctionArguments()[0],
34  { { 0, 0 } },
35  1,
36  2);
37  auto gamma = jlm::rvsdg::GammaNode::create(matchNode.output(0), 2);
38  auto ev1 = gamma->AddEntryVar(lambda->GetFunctionArguments()[1]);
39  auto ev2 = gamma->AddEntryVar(lambda->GetFunctionArguments()[2]);
40  auto ex = gamma->AddExitVar({ ev1.branchArgument[0], ev2.branchArgument[1] });
41 
42  auto f = lambda->finalize({ ex.output });
44 
45  jlm::rvsdg::view(rm.Rvsdg(), stdout);
46 
47  // Act
50 
51  jlm::rvsdg::view(rm.Rvsdg(), stdout);
52 
53  // Assert
54  EXPECT_TRUE(
55  jlm::rvsdg::Region::ContainsOperation<jlm::hls::MuxOperation>(*lambda->subregion(), true));
56 }
57 
58 TEST(GammaConversionTests, TestWithoutMatch)
59 {
60  using namespace jlm::llvm;
61 
62  // Arrange
64  auto ft =
66 
67  LlvmRvsdgModule rm(jlm::util::FilePath(""), "", "");
68 
69  /* Setup graph */
70 
71  auto lambda = jlm::rvsdg::LambdaNode::Create(
72  rm.Rvsdg().GetRootRegion(),
74 
75  auto gamma = jlm::rvsdg::GammaNode::create(lambda->GetFunctionArguments()[0], 2);
76  auto ev1 = gamma->AddEntryVar(lambda->GetFunctionArguments()[1]);
77  auto ev2 = gamma->AddEntryVar(lambda->GetFunctionArguments()[2]);
78  auto ex = gamma->AddExitVar({ ev1.branchArgument[0], ev2.branchArgument[1] });
79 
80  auto f = lambda->finalize({ ex.output });
82 
83  jlm::rvsdg::view(rm.Rvsdg(), stdout);
84 
85  // Act
88 
89  jlm::rvsdg::view(rm.Rvsdg(), stdout);
90 
91  // Assert
92  EXPECT_TRUE(
93  jlm::rvsdg::Region::ContainsOperation<jlm::hls::MuxOperation>(*lambda->subregion(), true));
94 }
static jlm::util::StatisticsCollector statisticsCollector
static const auto vt
Definition: PullTests.cpp:16
static void CreateAndRun(rvsdg::RvsdgModule &rvsdgModule, 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)
Definition: lambda.hpp:84
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
Definition: type.cpp:45
static std::shared_ptr< const ControlType > Create(std::size_t nalternatives)
Instantiates control type.
Definition: control.cpp:50
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)
Definition: gamma.hpp:161
static GraphExport & Create(Output &origin, std::string name)
Definition: graph.cpp:62
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
Definition: lambda.cpp:140
static Node & CreateNode(Output &predicate, const std::unordered_map< uint64_t, uint64_t > &mapping, const uint64_t defaultAlternative, const size_t numAlternatives)
Definition: control.hpp:226
static std::shared_ptr< const TestType > createValueType()
Definition: TestType.cpp:67
TEST(GammaConversionTests, TestWithMatch)
Definition: GammaTests.cpp:18
Global memory state passed between functions.
std::string view(const rvsdg::Region *region)
Definition: view.cpp:142