Jlm
Loading...
Searching...
No Matches
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>
17
18static void
19stringToFile(std::string output, std::string fileName)
20{
21 std::ofstream outputFile;
22 outputFile.open(fileName);
23 outputFile << output;
24 outputFile.close();
25}
26
27TEST(LoopPassThroughTests, test)
28{
29 using namespace jlm;
30
32 { rvsdg::BitType::Create(1), rvsdg::BitType::Create(8), rvsdg::BitType::Create(8) },
33 { rvsdg::BitType::Create(8) });
34
36
37 /* setup graph */
38
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 });
48 rvsdg::GraphExport::Create(*f, "");
49
50 rvsdg::view(rm.Rvsdg(), stdout);
51 hls::DotHLS dhls;
52 stringToFile(dhls.run(rm), "/tmp/jlm_hls_test_before.dot");
53
55 hls::RhlsDeadNodeElimination::CreateAndRun(rm, statisticsCollector);
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 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 FunctionType > Create(std::vector< std::shared_ptr< const jlm::rvsdg::Type > > argumentTypes, std::vector< std::shared_ptr< const jlm::rvsdg::Type > > resultTypes)
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
Definition lambda.cpp:141