Jlm
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 
16 namespace jlm::hls
17 {
18 
19 bool
20 isForbiddenChar(char c);
21 
22 class BaseHLS
23 {
24 public:
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 
39 private:
40  virtual std::string
41  extension() = 0;
42 
43 protected:
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::vector< rvsdg::RegionArgument * > get_reg_args(const rvsdg::LambdaNode &lambda)
Definition: base-hls.hpp:112
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_reg_results(const rvsdg::LambdaNode &lambda)
Definition: base-hls.hpp:130
std::vector< rvsdg::RegionResult * > get_mem_reqs(const rvsdg::LambdaNode &lambda)
Definition: base-hls.hpp:93
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::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
Lambda node.
Definition: lambda.hpp:83
rvsdg::Region * subregion() const noexcept
Definition: lambda.hpp:138
Represent acyclic RVSDG subgraphs.
Definition: region.hpp:213
RegionArgumentRange Arguments() noexcept
Definition: region.hpp:272
RegionResultRange Results() noexcept
Definition: region.hpp:290
#define JLM_ASSERT(x)
Definition: common.hpp:16
bool isForbiddenChar(char c)
Definition: base-hls.cpp:16
static std::string type(const Node *n)
Definition: view.cpp:255