Jlm
RvsdgTreePrinter.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2024 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #ifndef JLM_LLVM_OPT_RVSDGTREEPRINTER_HPP
7 #define JLM_LLVM_OPT_RVSDGTREEPRINTER_HPP
8 
11 #include <jlm/util/HashSet.hpp>
12 
13 namespace jlm::rvsdg
14 {
15 class Graph;
16 class Node;
17 class Input;
18 class Output;
19 }
20 
21 namespace jlm::util
22 {
23 class StatisticsCollector;
24 }
25 
26 namespace jlm::llvm
27 {
28 
34 {
35  class Statistics;
36 
37 public:
41  class Configuration final
42  {
43  public:
44  enum class Annotation
45  {
50 
55  DebugIds,
56 
61 
67 
72 
77 
82 
88 
93  };
94 
95  explicit Configuration(util::HashSet<Annotation> requiredAnnotations)
96  : RequiredAnnotations_(std::move(requiredAnnotations))
97  {}
98 
102  [[nodiscard]] const util::HashSet<Annotation> &
103  RequiredAnnotations() const noexcept
104  {
105  return RequiredAnnotations_;
106  }
107 
108  private:
110  };
111 
112  ~RvsdgTreePrinter() noexcept override;
113 
114  explicit RvsdgTreePrinter(Configuration configuration)
116  Configuration_(std::move(configuration))
117  {}
118 
120 
122 
124  operator=(const RvsdgTreePrinter &) = delete;
125 
128 
129  void
131 
132 private:
140  [[nodiscard]] util::AnnotationMap
141  ComputeAnnotationMap(const rvsdg::Graph & rvsdg) const;
142 
154  static void
156  const rvsdg::Graph & rvsdg,
157  const std::function<bool(const rvsdg::Node &)> & match,
158  const std::string_view & label,
159  util::AnnotationMap & annotationMap);
160 
170  static void
172  const rvsdg::Graph & rvsdg,
173  util::AnnotationMap & annotationMap);
174 
183  static void
184  AnnotateDebugIds(const rvsdg::Graph & rvsdg, util::AnnotationMap & annotationMap);
185 
186  [[nodiscard]] static bool
187  IsMemoryStateInput(const rvsdg::Input * input) noexcept;
188 
189  [[nodiscard]] static bool
190  IsMemoryStateOutput(const rvsdg::Output * output) noexcept;
191 
193 };
194 
195 }
196 
197 #endif
static jlm::util::StatisticsCollector statisticsCollector
const util::HashSet< Annotation > & RequiredAnnotations() const noexcept
Configuration(util::HashSet< Annotation > requiredAnnotations)
util::HashSet< Annotation > RequiredAnnotations_
RVSDG tree printer debug pass.
util::AnnotationMap ComputeAnnotationMap(const rvsdg::Graph &rvsdg) const
static bool IsMemoryStateOutput(const rvsdg::Output *output) noexcept
RvsdgTreePrinter(RvsdgTreePrinter &&)=delete
RvsdgTreePrinter & operator=(RvsdgTreePrinter &&)=delete
~RvsdgTreePrinter() noexcept override
static void AnnotateDebugIds(const rvsdg::Graph &rvsdg, util::AnnotationMap &annotationMap)
RvsdgTreePrinter & operator=(const RvsdgTreePrinter &)=delete
static void AnnotateNumMemoryStateInputsOutputs(const rvsdg::Graph &rvsdg, util::AnnotationMap &annotationMap)
RvsdgTreePrinter(const RvsdgTreePrinter &)=delete
static bool IsMemoryStateInput(const rvsdg::Input *input) noexcept
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static void AnnotateNumNodes(const rvsdg::Graph &rvsdg, const std::function< bool(const rvsdg::Node &)> &match, const std::string_view &label, util::AnnotationMap &annotationMap)
Represents an RVSDG transformation.
Transformation(std::string_view Name)
Global memory state passed between functions.