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 
60 
65 
70 
76 
81  };
82 
84  : RequiredAnnotations_(std::move(requiredAnnotations))
85  {}
86 
90  [[nodiscard]] const util::HashSet<Annotation> &
91  RequiredAnnotations() const noexcept
92  {
93  return RequiredAnnotations_;
94  }
95 
96  private:
98  };
99 
100  ~RvsdgTreePrinter() noexcept override;
101 
102  explicit RvsdgTreePrinter(Configuration configuration)
104  Configuration_(std::move(configuration))
105  {}
106 
108 
110 
112  operator=(const RvsdgTreePrinter &) = delete;
113 
116 
117  void
118  Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override;
119 
120 private:
128  [[nodiscard]] util::AnnotationMap
129  ComputeAnnotationMap(const rvsdg::Graph & rvsdg) const;
130 
142  static void
144  const rvsdg::Graph & rvsdg,
145  const std::function<bool(const rvsdg::Node &)> & match,
146  const std::string_view & label,
147  util::AnnotationMap & annotationMap);
148 
158  static void
160  const rvsdg::Graph & rvsdg,
161  util::AnnotationMap & annotationMap);
162 
163  [[nodiscard]] static bool
164  IsMemoryStateInput(const rvsdg::Input * input) noexcept;
165 
166  [[nodiscard]] static bool
167  IsMemoryStateOutput(const rvsdg::Output * output) noexcept;
168 
170 };
171 
172 }
173 
174 #endif
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
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.
jlm::rvsdg::Output * match(size_t nbits, const std::unordered_map< uint64_t, uint64_t > &mapping, uint64_t default_alternative, size_t nalternatives, jlm::rvsdg::Output *operand)
Definition: control.cpp:179