Jlm
Transformation.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2025 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #ifndef JLM_RVSDG_TRANSFORMATION_HPP
7 #define JLM_RVSDG_TRANSFORMATION_HPP
8 
10 #include <jlm/util/Statistics.hpp>
11 
12 namespace jlm::rvsdg
13 {
14 
15 class RvsdgModule;
16 
21 {
22 public:
23  virtual ~Transformation() noexcept;
24 
25  explicit Transformation(std::string_view Name)
26  : Name_(Name)
27  {}
28 
29  [[nodiscard]] const std::string_view &
30  GetName() const noexcept
31  {
32  return Name_;
33  }
34 
45  virtual void
46  Run(RvsdgModule & module, util::StatisticsCollector & statisticsCollector) = 0;
47 
57  void
58  Run(RvsdgModule & module)
59  {
60  util::StatisticsCollector statisticsCollector;
61  Run(module, statisticsCollector);
62  }
63 
64 private:
65  std::string_view Name_;
66 };
67 
72 {
73  class Statistics;
74 
75 public:
76  ~TransformationSequence() noexcept override;
77 
79  std::vector<std::shared_ptr<Transformation>> transformations,
80  DotWriter & dotWriter,
81  const bool dumpRvsdgDotGraphs)
83  DotWriter_(dotWriter),
84  DumpRvsdgDotGraphs_(dumpRvsdgDotGraphs),
85  Transformations_(std::move(transformations))
86  {}
87 
94  void
95  Run(RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override;
96 
106  static void
108  RvsdgModule & rvsdgModule,
109  util::StatisticsCollector & statisticsCollector,
110  std::vector<std::shared_ptr<Transformation>> transformations,
111  DotWriter & dotWriter,
112  const bool dumpRvsdgDotGraphs)
113  {
114  TransformationSequence sequentialApplication(
115  std::move(transformations),
116  dotWriter,
117  dumpRvsdgDotGraphs);
118  sequentialApplication.Run(rvsdgModule, statisticsCollector);
119  }
120 
121 private:
122  void
124  RvsdgModule & rvsdgModule,
125  const util::FilePath & filePath,
126  const std::string & passName,
127  size_t numPass) const;
128 
131  std::vector<std::shared_ptr<Transformation>> Transformations_;
132 };
133 
134 }
135 
136 #endif // JLM_RVSDG_TRANSFORMATION_HPP
std::vector< std::shared_ptr< Transformation > > Transformations_
void DumpDotGraphs(RvsdgModule &rvsdgModule, const util::FilePath &filePath, const std::string &passName, size_t numPass) const
static void CreateAndRun(RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector, std::vector< std::shared_ptr< Transformation >> transformations, DotWriter &dotWriter, const bool dumpRvsdgDotGraphs)
Creates a transformation sequence and invokes its Run() method.
~TransformationSequence() noexcept override
void Run(RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformations.
Represents an RVSDG transformation.
virtual void Run(RvsdgModule &module, util::StatisticsCollector &statisticsCollector)=0
Perform RVSDG transformation.
virtual ~Transformation() noexcept
const std::string_view & GetName() const noexcept
void Run(RvsdgModule &module)
Perform RVSDG transformation.