Jlm
mem-conv.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_BACKEND_HLS_RVSDG2RHLS_MEM_CONV_HPP
7 #define JLM_BACKEND_HLS_RVSDG2RHLS_MEM_CONV_HPP
8 
12 
13 namespace jlm::hls
14 {
15 
17 {
18  [[nodiscard]] bool
19  isEmpty() const noexcept
20  {
21  return loadNodes.empty() && storeNodes.empty() && decoupleNodes.empty();
22  }
23 
24  std::vector<rvsdg::Node *> loadNodes{};
25  std::vector<rvsdg::Node *> storeNodes{};
26  std::vector<rvsdg::Node *> decoupleNodes{};
27 };
28 
35 std::vector<TracedPointerNodes>
37 
40  const jlm::rvsdg::LambdaNode * lambda,
41  const jlm::llvm::IntegerConstantOperation * request_constant);
42 
44 {
45 public:
46  ~MemoryConverter() noexcept override;
47 
49 
50  MemoryConverter(const MemoryConverter &) = delete;
51 
53  operator=(const MemoryConverter &) = delete;
54 
55  void
56  Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override;
57 
58  static void
59  CreateAndRun(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector)
60  {
61  MemoryConverter memoryConverter;
62  memoryConverter.Run(rvsdgModule, statisticsCollector);
63  }
64 };
65 
66 } // namespace jlm::hls
67 
68 #endif // JLM_BACKEND_HLS_RVSDG2RHLS_MEM_CONV_HPP
static jlm::util::StatisticsCollector statisticsCollector
~MemoryConverter() noexcept override
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
Definition: mem-conv.cpp:813
static void CreateAndRun(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector)
Definition: mem-conv.hpp:59
Lambda node.
Definition: lambda.hpp:83
Represents an RVSDG transformation.
rvsdg::SimpleNode * find_decouple_response(const rvsdg::LambdaNode *lambda, const llvm::IntegerConstantOperation *request_constant)
Definition: mem-conv.cpp:27
std::vector< TracedPointerNodes > TracePointerArguments(const rvsdg::LambdaNode *lambda)
Definition: mem-conv.cpp:339
std::vector< rvsdg::Node * > loadNodes
Definition: mem-conv.hpp:24
std::vector< rvsdg::Node * > decoupleNodes
Definition: mem-conv.hpp:26
bool isEmpty() const noexcept
Definition: mem-conv.hpp:19
std::vector< rvsdg::Node * > storeNodes
Definition: mem-conv.hpp:25