Jlm
LoopPassthroughTests.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2021 David Metz <david.c.metz@ntnu.no>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #include <gtest/gtest.h>
7 
10 #include <jlm/hls/ir/hls.hpp>
12 #include <jlm/llvm/ir/print.hpp>
14 #include <jlm/rvsdg/gamma.hpp>
15 #include <jlm/rvsdg/view.hpp>
16 #include <jlm/util/Statistics.hpp>
17 
18 static void
19 stringToFile(std::string output, std::string fileName)
20 {
21  std::ofstream outputFile;
22  outputFile.open(fileName);
23  outputFile << output;
24  outputFile.close();
25 }
26 
27 TEST(LoopPassThroughTests, test)
28 {
29  using namespace jlm;
30 
33  { rvsdg::BitType::Create(8) });
34 
36 
37  /* setup graph */
38 
39  auto lambda = jlm::rvsdg::LambdaNode::Create(
40  rm.Rvsdg().GetRootRegion(),
42 
43  auto loop = hls::LoopNode::create(lambda->subregion());
44 
45  auto loop_out = loop->AddLoopVar(lambda->GetFunctionArguments()[1]);
46 
47  auto f = lambda->finalize({ loop_out });
49 
50  rvsdg::view(rm.Rvsdg(), stdout);
51  hls::DotHLS dhls;
52  stringToFile(dhls.run(rm), "/tmp/jlm_hls_test_before.dot");
53 
56 
57  hls::DotHLS dhls2;
58  stringToFile(dhls2.run(rm), "/tmp/jlm_hls_test_after.dot");
59 
60  // The whole loop gets eliminated, leading to a direct connection
61  EXPECT_EQ(lambda->GetFunctionResults()[0]->origin(), lambda->GetFunctionArguments()[1]);
62 }
static jlm::util::StatisticsCollector statisticsCollector
static void stringToFile(std::string output, std::string fileName)
TEST(LoopPassThroughTests, test)
std::string run(llvm::LlvmRvsdgModule &rm)
Definition: base-hls.hpp:28
static LoopNode * create(rvsdg::Region *parent, bool init=true)
Definition: hls.cpp:294
static void CreateAndRun(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector)
Definition: rhls-dne.hpp:33
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 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)
Definition: graph.cpp:62
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
Definition: lambda.cpp:140
std::string view(const rvsdg::Region *region)
Definition: view.cpp:142