docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
pass.h
Go to the documentation of this file.
1#pragma once
2
6#include "sdfg/options.h"
7
8namespace sdfg {
9namespace passes {
10
11class Pass {
12public:
13 Pass() = default;
14 // A pass is constructed for a specific set of options (non-owning; caller keeps them alive).
15 explicit Pass(const Options& options) : options_(&options) {
16 }
17
18 virtual ~Pass() = default;
19
20 virtual std::string name() = 0;
21
22 // Registrable option specs for this pass; default: none.
23 virtual std::vector<OptionSpec> options() {
24 return {};
25 }
26
27 bool run(builder::SDFGBuilder& builder, bool create_report = false);
28
29 bool run(
30 builder::StructuredSDFGBuilder& builder, analysis::AnalysisManager& analysis_manager, bool create_report = false
31 );
32
34
36
37 virtual void invalidates(analysis::AnalysisManager& analysis_manager, bool applied);
38
39protected:
40 template<class T>
41 T option(const OptionKey<T>& key, T fallback = T{}) const {
42 return options_->get(key, fallback);
43 }
44
45private:
46 // VisitorPass forwards these options into T's constructor when supported.
47 template<typename T>
48 friend class VisitorPass;
49
50 // Options this pass was constructed for (non-owning).
51 const Options* options_ = &Options::empty();
52};
53
54template<typename T>
55class VisitorPass : public Pass {
56public:
59
60 std::string name() override {
61 return T::name();
62 };
63
65 // Forward the pass options as a third constructor argument when T supports it,
66 // otherwise fall back to the two-argument form.
67 if constexpr (requires { T(builder, analysis_manager, *this->options_); }) {
68 T visitor(builder, analysis_manager, *this->options_);
69 return visitor.visit();
70 } else {
71 T visitor(builder, analysis_manager);
72 return visitor.visit();
73 }
74 };
75};
76
77} // namespace passes
78} // namespace sdfg
Definition options.h:56
T get(const OptionKey< T > &key, T fallback=T{}) const
Definition options.h:72
static const Options & empty()
Definition options.h:84
Definition analysis.h:53
Definition sdfg_builder.h:13
Note: Even though the class references unique_ptr, it will never delete an SDFG it has a reference to...
Definition structured_sdfg_builder.h:44
virtual void invalidates(analysis::AnalysisManager &analysis_manager, bool applied)
bool run(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, bool create_report=false)
Pass(const Options &options)
Definition pass.h:15
virtual ~Pass()=default
virtual std::vector< OptionSpec > options()
Definition pass.h:23
T option(const OptionKey< T > &key, T fallback=T{}) const
Definition pass.h:41
virtual bool run_pass(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager)
friend class VisitorPass
Definition pass.h:48
virtual bool run_pass(builder::SDFGBuilder &builder)
virtual std::string name()=0
bool run(builder::SDFGBuilder &builder, bool create_report=false)
std::string name() override
Definition pass.h:60
VisitorPass(const Options &options=Options::empty())
Definition pass.h:57
bool run_pass(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Definition pass.h:64
Definition function_builder.h:10
Definition approximate_math.h:12
Definition control_flow_node.h:16
Definition analysis.h:7
Definition options.h:40