Jlm
Loading...
Searching...
No Matches
base-hls.hpp
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#ifndef JLM_HLS_BACKEND_RHLS2FIRRTL_BASE_HLS_HPP
7#define JLM_HLS_BACKEND_RHLS2FIRRTL_BASE_HLS_HPP
8
9#include <jlm/hls/ir/hls.hpp>
13
14#include <fstream>
15
16namespace jlm::hls
17{
18
19bool
20isForbiddenChar(char c);
21
23{
24public:
25 virtual ~BaseHLS();
26
27 std::string
29 {
30 JLM_ASSERT(node_map.empty());
31 // ensure consistent naming across runs
32 create_node_names(get_hls_lambda(rm)->subregion());
33 return GetText(rm);
34 }
35
36 static int
37 JlmSize(const jlm::rvsdg::Type * type);
38
39private:
40 virtual std::string
41 extension() = 0;
42
43protected:
44 std::unordered_map<const rvsdg::Node *, std::string> node_map;
45 std::unordered_map<jlm::rvsdg::Output *, std::string> output_map;
46
47 std::string
48 get_node_name(const rvsdg::Node * node);
49
50 static std::string
52
53 static std::string
55
56 const rvsdg::LambdaNode *
58
59 void
61
62 virtual std::string
64
65 static std::string
67
74 std::vector<rvsdg::RegionArgument *>
76 {
77 std::vector<rvsdg::RegionArgument *> mem_resps;
78 for (auto arg : lambda.subregion()->Arguments())
79 {
80 if (rvsdg::is<BundleType>(arg->Type()))
81 mem_resps.push_back(arg);
82 }
83 return mem_resps;
84 }
85
92 std::vector<rvsdg::RegionResult *>
94 {
95 std::vector<rvsdg::RegionResult *> mem_resps;
96 for (auto result : lambda.subregion()->Results())
97 {
98 if (rvsdg::is<BundleType>(result->Type()))
99 mem_resps.push_back(result);
100 }
101 return mem_resps;
102 }
103
111 std::vector<rvsdg::RegionArgument *>
113 {
114 std::vector<rvsdg::RegionArgument *> args;
115 for (auto argument : lambda.subregion()->Arguments())
116 {
117 if (!rvsdg::is<BundleType>(argument->Type()))
118 args.push_back(argument);
119 }
120 return args;
121 }
122
129 std::vector<rvsdg::RegionResult *>
131 {
132 std::vector<rvsdg::RegionResult *> results;
133 for (auto result : lambda.subregion()->Results())
134 {
135 if (!rvsdg::is<BundleType>(result->Type()))
136 results.push_back(result);
137 }
138 return results;
139 }
140};
141
142}
143
144#endif // JLM_HLS_BACKEND_RHLS2FIRRTL_BASE_HLS_HPP
std::string run(llvm::LlvmRvsdgModule &rm)
Definition base-hls.hpp:28
std::unordered_map< const rvsdg::Node *, std::string > node_map
Definition base-hls.hpp:44
virtual std::string GetText(llvm::LlvmRvsdgModule &rm)=0
virtual std::string extension()=0
std::vector< rvsdg::RegionResult * > get_mem_reqs(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:93
std::vector< rvsdg::RegionArgument * > get_reg_args(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:112
static std::string get_port_name(jlm::rvsdg::Input *port)
Definition base-hls.cpp:62
void create_node_names(rvsdg::Region *r)
Definition base-hls.cpp:116
virtual ~BaseHLS()
static int JlmSize(const jlm::rvsdg::Type *type)
Definition base-hls.cpp:110
std::unordered_map< jlm::rvsdg::Output *, std::string > output_map
Definition base-hls.hpp:45
const rvsdg::LambdaNode * get_hls_lambda(llvm::LlvmRvsdgModule &rm)
Definition base-hls.cpp:136
std::string get_node_name(const rvsdg::Node *node)
Definition base-hls.cpp:28
std::vector< rvsdg::RegionResult * > get_reg_results(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:130
std::vector< rvsdg::RegionArgument * > get_mem_resps(const rvsdg::LambdaNode &lambda)
Definition base-hls.hpp:75
static std::string get_base_file_name(const llvm::LlvmRvsdgModule &rm)
Definition base-hls.cpp:151
rvsdg::Region * subregion() const noexcept
Definition lambda.hpp:138
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
RegionArgumentRange Arguments() noexcept
Definition region.hpp:319
RegionResultRange Results() noexcept
Definition region.hpp:337
#define JLM_ASSERT(x)
Definition common.hpp:16
bool isForbiddenChar(char c)
Definition base-hls.cpp:16
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872