LLZK 0.1.0
Veridise's ZK Language IR
Loading...
Searching...
No Matches
TransformationPasses.h.inc
Go to the documentation of this file.
1/* Autogenerated by mlir-tblgen; don't manually edit */
2
3#ifdef GEN_PASS_DECL
4// Generate declarations for all passes.
5#define GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
6#define GEN_PASS_DECL_FLATTENINGPASS
7#undef GEN_PASS_DECL
8#endif // GEN_PASS_DECL
9
10//===----------------------------------------------------------------------===//
11// EmptyParamListRemovalPass
12//===----------------------------------------------------------------------===//
13#ifdef GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
14#undef GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
15#endif // GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
16#ifdef GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
17namespace impl {
18
19template <typename DerivedT>
20class EmptyParamListRemovalPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
21public:
22 using Base = EmptyParamListRemovalPassBase;
23
24 EmptyParamListRemovalPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
25 EmptyParamListRemovalPassBase(const EmptyParamListRemovalPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
26 EmptyParamListRemovalPassBase& operator=(const EmptyParamListRemovalPassBase &) = delete;
27 EmptyParamListRemovalPassBase(EmptyParamListRemovalPassBase &&) = delete;
28 EmptyParamListRemovalPassBase& operator=(EmptyParamListRemovalPassBase &&) = delete;
29 ~EmptyParamListRemovalPassBase() = default;
30
32 static constexpr ::llvm::StringLiteral getArgumentName() {
33 return ::llvm::StringLiteral("llzk-drop-empty-params");
34 }
35 ::llvm::StringRef getArgument() const override { return "llzk-drop-empty-params"; }
36
37 ::llvm::StringRef getDescription() const override { return "Remove empty struct parameter lists"; }
38
40 static constexpr ::llvm::StringLiteral getPassName() {
41 return ::llvm::StringLiteral("EmptyParamListRemovalPass");
42 }
43 ::llvm::StringRef getName() const override { return "EmptyParamListRemovalPass"; }
44
46 static bool classof(const ::mlir::Pass *pass) {
47 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
48 }
49
51 std::unique_ptr<::mlir::Pass> clonePass() const override {
52 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
53 }
54
56 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
57 registry.insert<llzk::LLZKDialect>();
58 registry.insert<llzk::boolean::BoolDialect>();
59 registry.insert<llzk::array::ArrayDialect>();
60 registry.insert<llzk::component::StructDialect>();
61 registry.insert<llzk::constrain::ConstrainDialect>();
62 registry.insert<llzk::felt::FeltDialect>();
63 registry.insert<llzk::global::GlobalDialect>();
64 registry.insert<llzk::include::IncludeDialect>();
65 registry.insert<llzk::function::FunctionDialect>();
66 registry.insert<llzk::string::StringDialect>();
67 registry.insert<llzk::polymorphic::PolymorphicDialect>();
68 registry.insert<llzk::undef::UndefDialect>();
69 registry.insert<mlir::arith::ArithDialect>();
70 registry.insert<mlir::scf::SCFDialect>();
71 }
72
76 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyParamListRemovalPassBase<DerivedT>)
77
78protected:
79private:
80};
81} // namespace impl
82#undef GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
83#endif // GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
84
85//===----------------------------------------------------------------------===//
86// FlatteningPass
87//===----------------------------------------------------------------------===//
88#ifdef GEN_PASS_DECL_FLATTENINGPASS
89struct FlatteningPassOptions {
90 unsigned iterationLimit = 1000;
92};
93#undef GEN_PASS_DECL_FLATTENINGPASS
94#endif // GEN_PASS_DECL_FLATTENINGPASS
95#ifdef GEN_PASS_DEF_FLATTENINGPASS
96namespace impl {
97
98template <typename DerivedT>
99class FlatteningPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
100public:
101 using Base = FlatteningPassBase;
102
103 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
104 FlatteningPassBase(const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
105 FlatteningPassBase& operator=(const FlatteningPassBase &) = delete;
106 FlatteningPassBase(FlatteningPassBase &&) = delete;
107 FlatteningPassBase& operator=(FlatteningPassBase &&) = delete;
108 ~FlatteningPassBase() = default;
109
111 static constexpr ::llvm::StringLiteral getArgumentName() {
112 return ::llvm::StringLiteral("llzk-flatten");
113 }
114 ::llvm::StringRef getArgument() const override { return "llzk-flatten"; }
115
116 ::llvm::StringRef getDescription() const override { return "Flatten structs and unroll loops"; }
117
119 static constexpr ::llvm::StringLiteral getPassName() {
120 return ::llvm::StringLiteral("FlatteningPass");
121 }
122 ::llvm::StringRef getName() const override { return "FlatteningPass"; }
123
125 static bool classof(const ::mlir::Pass *pass) {
126 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
127 }
128
130 std::unique_ptr<::mlir::Pass> clonePass() const override {
131 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
132 }
133
135 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
136 registry.insert<llzk::LLZKDialect>();
137 registry.insert<llzk::boolean::BoolDialect>();
138 registry.insert<llzk::array::ArrayDialect>();
139 registry.insert<llzk::component::StructDialect>();
140 registry.insert<llzk::constrain::ConstrainDialect>();
141 registry.insert<llzk::felt::FeltDialect>();
142 registry.insert<llzk::global::GlobalDialect>();
143 registry.insert<llzk::include::IncludeDialect>();
144 registry.insert<llzk::function::FunctionDialect>();
145 registry.insert<llzk::string::StringDialect>();
146 registry.insert<llzk::polymorphic::PolymorphicDialect>();
147 registry.insert<llzk::undef::UndefDialect>();
148 registry.insert<mlir::arith::ArithDialect>();
149 registry.insert<mlir::scf::SCFDialect>();
150 }
151
155 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
156
157 FlatteningPassBase(FlatteningPassOptions options) : FlatteningPassBase() {
158 iterationLimit = std::move(options.iterationLimit);
159 cleanupMode = std::move(options.cleanupMode);
160 }
161protected:
162 ::mlir::Pass::Option<unsigned> iterationLimit{*this, "max-iter", ::llvm::cl::desc("Maximum number of times the pass will run if a fixpoint is not reached earlier. Unrolling loops can provide more opportunities for instantiating structs but the converse is true as well. Thus, the pass will run multiple times until no further changes can be made or the upper limit provided in this option is reached."), ::llvm::cl::init(1000)};
163 ::mlir::Pass::Option<::llzk::polymorphic::StructCleanupMode> cleanupMode{*this, "cleanup", ::llvm::cl::desc("Specifies the extent to which unused parameterized structs are removed during the flattening pass."), ::llvm::cl::init(::llzk::polymorphic::StructCleanupMode::Preimage), ::llvm::cl::values(
168 "Only structs that were replaced with concrete instantiations are deleted."),
171 "All structs that cannot be reached by a use-def chain from some concrete struct are deleted."),
174 "All structs that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
175 )};
176private:
177};
178} // namespace impl
179#undef GEN_PASS_DEF_FLATTENINGPASS
180#endif // GEN_PASS_DEF_FLATTENINGPASS
181#ifdef GEN_PASS_REGISTRATION
182
183//===----------------------------------------------------------------------===//
184// EmptyParamListRemovalPass Registration
185//===----------------------------------------------------------------------===//
186
188 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
190 });
191}
192
193// Old registration code, kept for temporary backwards compatibility.
195 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
197 });
198}
199
200//===----------------------------------------------------------------------===//
201// FlatteningPass Registration
202//===----------------------------------------------------------------------===//
203
204inline void registerFlatteningPass() {
205 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
207 });
208}
209
210// Old registration code, kept for temporary backwards compatibility.
211inline void registerFlatteningPassPass() {
212 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
214 });
215}
216
217//===----------------------------------------------------------------------===//
218// Transformation Registration
219//===----------------------------------------------------------------------===//
220
221inline void registerTransformationPasses() {
224}
225#undef GEN_PASS_REGISTRATION
226#endif // GEN_PASS_REGISTRATION
227// Deprecated. Please use the new per-pass macros.
228#ifdef GEN_PASS_CLASSES
229
230template <typename DerivedT>
231class EmptyParamListRemovalPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
232public:
233 using Base = EmptyParamListRemovalPassBase;
234
235 EmptyParamListRemovalPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
236 EmptyParamListRemovalPassBase(const EmptyParamListRemovalPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
237 EmptyParamListRemovalPassBase& operator=(const EmptyParamListRemovalPassBase &) = delete;
238 EmptyParamListRemovalPassBase(EmptyParamListRemovalPassBase &&) = delete;
239 EmptyParamListRemovalPassBase& operator=(EmptyParamListRemovalPassBase &&) = delete;
240 ~EmptyParamListRemovalPassBase() = default;
241
243 static constexpr ::llvm::StringLiteral getArgumentName() {
244 return ::llvm::StringLiteral("llzk-drop-empty-params");
245 }
246 ::llvm::StringRef getArgument() const override { return "llzk-drop-empty-params"; }
247
248 ::llvm::StringRef getDescription() const override { return "Remove empty struct parameter lists"; }
249
251 static constexpr ::llvm::StringLiteral getPassName() {
252 return ::llvm::StringLiteral("EmptyParamListRemovalPass");
253 }
254 ::llvm::StringRef getName() const override { return "EmptyParamListRemovalPass"; }
255
257 static bool classof(const ::mlir::Pass *pass) {
258 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
259 }
260
262 std::unique_ptr<::mlir::Pass> clonePass() const override {
263 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
264 }
265
267 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
268 registry.insert<llzk::LLZKDialect>();
269 registry.insert<llzk::boolean::BoolDialect>();
270 registry.insert<llzk::array::ArrayDialect>();
271 registry.insert<llzk::component::StructDialect>();
272 registry.insert<llzk::constrain::ConstrainDialect>();
273 registry.insert<llzk::felt::FeltDialect>();
274 registry.insert<llzk::global::GlobalDialect>();
275 registry.insert<llzk::include::IncludeDialect>();
276 registry.insert<llzk::function::FunctionDialect>();
277 registry.insert<llzk::string::StringDialect>();
278 registry.insert<llzk::polymorphic::PolymorphicDialect>();
279 registry.insert<llzk::undef::UndefDialect>();
280 registry.insert<mlir::arith::ArithDialect>();
281 registry.insert<mlir::scf::SCFDialect>();
282 }
283
287 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyParamListRemovalPassBase<DerivedT>)
288
289protected:
290};
291
292template <typename DerivedT>
293class FlatteningPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
294public:
295 using Base = FlatteningPassBase;
296
297 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
298 FlatteningPassBase(const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
299 FlatteningPassBase& operator=(const FlatteningPassBase &) = delete;
300 FlatteningPassBase(FlatteningPassBase &&) = delete;
301 FlatteningPassBase& operator=(FlatteningPassBase &&) = delete;
302 ~FlatteningPassBase() = default;
303
305 static constexpr ::llvm::StringLiteral getArgumentName() {
306 return ::llvm::StringLiteral("llzk-flatten");
307 }
308 ::llvm::StringRef getArgument() const override { return "llzk-flatten"; }
309
310 ::llvm::StringRef getDescription() const override { return "Flatten structs and unroll loops"; }
311
313 static constexpr ::llvm::StringLiteral getPassName() {
314 return ::llvm::StringLiteral("FlatteningPass");
315 }
316 ::llvm::StringRef getName() const override { return "FlatteningPass"; }
317
319 static bool classof(const ::mlir::Pass *pass) {
320 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
321 }
322
324 std::unique_ptr<::mlir::Pass> clonePass() const override {
325 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
326 }
327
329 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
330 registry.insert<llzk::LLZKDialect>();
331 registry.insert<llzk::boolean::BoolDialect>();
332 registry.insert<llzk::array::ArrayDialect>();
333 registry.insert<llzk::component::StructDialect>();
334 registry.insert<llzk::constrain::ConstrainDialect>();
335 registry.insert<llzk::felt::FeltDialect>();
336 registry.insert<llzk::global::GlobalDialect>();
337 registry.insert<llzk::include::IncludeDialect>();
338 registry.insert<llzk::function::FunctionDialect>();
339 registry.insert<llzk::string::StringDialect>();
340 registry.insert<llzk::polymorphic::PolymorphicDialect>();
341 registry.insert<llzk::undef::UndefDialect>();
342 registry.insert<mlir::arith::ArithDialect>();
343 registry.insert<mlir::scf::SCFDialect>();
344 }
345
349 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
350
351protected:
352 ::mlir::Pass::Option<unsigned> iterationLimit{*this, "max-iter", ::llvm::cl::desc("Maximum number of times the pass will run if a fixpoint is not reached earlier. Unrolling loops can provide more opportunities for instantiating structs but the converse is true as well. Thus, the pass will run multiple times until no further changes can be made or the upper limit provided in this option is reached."), ::llvm::cl::init(1000)};
353 ::mlir::Pass::Option<::llzk::polymorphic::StructCleanupMode> cleanupMode{*this, "cleanup", ::llvm::cl::desc("Specifies the extent to which unused parameterized structs are removed during the flattening pass."), ::llvm::cl::init(::llzk::polymorphic::StructCleanupMode::Preimage), ::llvm::cl::values(
358 "Only structs that were replaced with concrete instantiations are deleted."),
361 "All structs that cannot be reached by a use-def chain from some concrete struct are deleted."),
364 "All structs that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
365 )};
366};
367#undef GEN_PASS_CLASSES
368#endif // GEN_PASS_CLASSES
void registerTransformationPasses()
void registerEmptyParamListRemovalPassPass()
std::unique_ptr< mlir::Pass > createFlatteningPass()
std::unique_ptr< mlir::Pass > createEmptyParamListRemoval()
::llvm::StringRef stringifyStructCleanupMode(StructCleanupMode val)