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
28 static constexpr ::llvm::StringLiteral getArgumentName() {
29 return ::llvm::StringLiteral("llzk-drop-empty-params");
30 }
31 ::llvm::StringRef getArgument() const override { return "llzk-drop-empty-params"; }
32
33 ::llvm::StringRef getDescription() const override { return "Remove empty struct parameter lists"; }
34
36 static constexpr ::llvm::StringLiteral getPassName() {
37 return ::llvm::StringLiteral("EmptyParamListRemovalPass");
38 }
39 ::llvm::StringRef getName() const override { return "EmptyParamListRemovalPass"; }
40
42 static bool classof(const ::mlir::Pass *pass) {
43 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
44 }
45
47 std::unique_ptr<::mlir::Pass> clonePass() const override {
48 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
49 }
50
52 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
53 registry.insert<llzk::LLZKDialect>();
54 registry.insert<llzk::boolean::BoolDialect>();
55 registry.insert<llzk::array::ArrayDialect>();
56 registry.insert<llzk::component::StructDialect>();
57 registry.insert<llzk::constrain::ConstrainDialect>();
58 registry.insert<llzk::felt::FeltDialect>();
59 registry.insert<llzk::global::GlobalDialect>();
60 registry.insert<llzk::include::IncludeDialect>();
61 registry.insert<llzk::function::FunctionDialect>();
62 registry.insert<llzk::string::StringDialect>();
63 registry.insert<llzk::polymorphic::PolymorphicDialect>();
64 registry.insert<llzk::undef::UndefDialect>();
65 registry.insert<mlir::arith::ArithDialect>();
66 registry.insert<mlir::scf::SCFDialect>();
67 }
68
72 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyParamListRemovalPassBase<DerivedT>)
73
74protected:
75private:
76};
77} // namespace impl
78#undef GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
79#endif // GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
80
81//===----------------------------------------------------------------------===//
82// FlatteningPass
83//===----------------------------------------------------------------------===//
84#ifdef GEN_PASS_DECL_FLATTENINGPASS
85struct FlatteningPassOptions {
86 unsigned iterationLimit = 1000;
88};
89#undef GEN_PASS_DECL_FLATTENINGPASS
90#endif // GEN_PASS_DECL_FLATTENINGPASS
91#ifdef GEN_PASS_DEF_FLATTENINGPASS
92namespace impl {
93
94template <typename DerivedT>
95class FlatteningPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
96public:
97 using Base = FlatteningPassBase;
98
99 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
100 FlatteningPassBase(const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
101
103 static constexpr ::llvm::StringLiteral getArgumentName() {
104 return ::llvm::StringLiteral("llzk-flatten");
105 }
106 ::llvm::StringRef getArgument() const override { return "llzk-flatten"; }
107
108 ::llvm::StringRef getDescription() const override { return "Flatten structs and unroll loops"; }
109
111 static constexpr ::llvm::StringLiteral getPassName() {
112 return ::llvm::StringLiteral("FlatteningPass");
113 }
114 ::llvm::StringRef getName() const override { return "FlatteningPass"; }
115
117 static bool classof(const ::mlir::Pass *pass) {
118 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
119 }
120
122 std::unique_ptr<::mlir::Pass> clonePass() const override {
123 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
124 }
125
127 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
128 registry.insert<llzk::LLZKDialect>();
129 registry.insert<llzk::boolean::BoolDialect>();
130 registry.insert<llzk::array::ArrayDialect>();
131 registry.insert<llzk::component::StructDialect>();
132 registry.insert<llzk::constrain::ConstrainDialect>();
133 registry.insert<llzk::felt::FeltDialect>();
134 registry.insert<llzk::global::GlobalDialect>();
135 registry.insert<llzk::include::IncludeDialect>();
136 registry.insert<llzk::function::FunctionDialect>();
137 registry.insert<llzk::string::StringDialect>();
138 registry.insert<llzk::polymorphic::PolymorphicDialect>();
139 registry.insert<llzk::undef::UndefDialect>();
140 registry.insert<mlir::arith::ArithDialect>();
141 registry.insert<mlir::scf::SCFDialect>();
142 }
143
147 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
148
149 FlatteningPassBase(const FlatteningPassOptions &options) : FlatteningPassBase() {
150 iterationLimit = options.iterationLimit;
151 cleanupMode = options.cleanupMode;
152 }
153protected:
154 ::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)};
155 ::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(
160 "Only structs that were replaced with concrete instantiations are deleted."),
163 "All structs that cannot be reached by a use-def chain from some concrete struct are deleted."),
166 "All structs that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
167 )};
168private:
169};
170} // namespace impl
171#undef GEN_PASS_DEF_FLATTENINGPASS
172#endif // GEN_PASS_DEF_FLATTENINGPASS
173#ifdef GEN_PASS_REGISTRATION
174
175//===----------------------------------------------------------------------===//
176// EmptyParamListRemovalPass Registration
177//===----------------------------------------------------------------------===//
178
180 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
182 });
183}
184
185// Old registration code, kept for temporary backwards compatibility.
187 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
189 });
190}
191
192//===----------------------------------------------------------------------===//
193// FlatteningPass Registration
194//===----------------------------------------------------------------------===//
195
196inline void registerFlatteningPass() {
197 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
199 });
200}
201
202// Old registration code, kept for temporary backwards compatibility.
203inline void registerFlatteningPassPass() {
204 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
206 });
207}
208
209//===----------------------------------------------------------------------===//
210// Transformation Registration
211//===----------------------------------------------------------------------===//
212
213inline void registerTransformationPasses() {
216}
217#undef GEN_PASS_REGISTRATION
218#endif // GEN_PASS_REGISTRATION
219// Deprecated. Please use the new per-pass macros.
220#ifdef GEN_PASS_CLASSES
221
222template <typename DerivedT>
223class EmptyParamListRemovalPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
224public:
225 using Base = EmptyParamListRemovalPassBase;
226
227 EmptyParamListRemovalPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
228 EmptyParamListRemovalPassBase(const EmptyParamListRemovalPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
229
231 static constexpr ::llvm::StringLiteral getArgumentName() {
232 return ::llvm::StringLiteral("llzk-drop-empty-params");
233 }
234 ::llvm::StringRef getArgument() const override { return "llzk-drop-empty-params"; }
235
236 ::llvm::StringRef getDescription() const override { return "Remove empty struct parameter lists"; }
237
239 static constexpr ::llvm::StringLiteral getPassName() {
240 return ::llvm::StringLiteral("EmptyParamListRemovalPass");
241 }
242 ::llvm::StringRef getName() const override { return "EmptyParamListRemovalPass"; }
243
245 static bool classof(const ::mlir::Pass *pass) {
246 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
247 }
248
250 std::unique_ptr<::mlir::Pass> clonePass() const override {
251 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
252 }
253
255 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
256 registry.insert<llzk::LLZKDialect>();
257 registry.insert<llzk::boolean::BoolDialect>();
258 registry.insert<llzk::array::ArrayDialect>();
259 registry.insert<llzk::component::StructDialect>();
260 registry.insert<llzk::constrain::ConstrainDialect>();
261 registry.insert<llzk::felt::FeltDialect>();
262 registry.insert<llzk::global::GlobalDialect>();
263 registry.insert<llzk::include::IncludeDialect>();
264 registry.insert<llzk::function::FunctionDialect>();
265 registry.insert<llzk::string::StringDialect>();
266 registry.insert<llzk::polymorphic::PolymorphicDialect>();
267 registry.insert<llzk::undef::UndefDialect>();
268 registry.insert<mlir::arith::ArithDialect>();
269 registry.insert<mlir::scf::SCFDialect>();
270 }
271
275 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyParamListRemovalPassBase<DerivedT>)
276
277protected:
278};
279
280template <typename DerivedT>
281class FlatteningPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
282public:
283 using Base = FlatteningPassBase;
284
285 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
286 FlatteningPassBase(const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
287
289 static constexpr ::llvm::StringLiteral getArgumentName() {
290 return ::llvm::StringLiteral("llzk-flatten");
291 }
292 ::llvm::StringRef getArgument() const override { return "llzk-flatten"; }
293
294 ::llvm::StringRef getDescription() const override { return "Flatten structs and unroll loops"; }
295
297 static constexpr ::llvm::StringLiteral getPassName() {
298 return ::llvm::StringLiteral("FlatteningPass");
299 }
300 ::llvm::StringRef getName() const override { return "FlatteningPass"; }
301
303 static bool classof(const ::mlir::Pass *pass) {
304 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
305 }
306
308 std::unique_ptr<::mlir::Pass> clonePass() const override {
309 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
310 }
311
313 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
314 registry.insert<llzk::LLZKDialect>();
315 registry.insert<llzk::boolean::BoolDialect>();
316 registry.insert<llzk::array::ArrayDialect>();
317 registry.insert<llzk::component::StructDialect>();
318 registry.insert<llzk::constrain::ConstrainDialect>();
319 registry.insert<llzk::felt::FeltDialect>();
320 registry.insert<llzk::global::GlobalDialect>();
321 registry.insert<llzk::include::IncludeDialect>();
322 registry.insert<llzk::function::FunctionDialect>();
323 registry.insert<llzk::string::StringDialect>();
324 registry.insert<llzk::polymorphic::PolymorphicDialect>();
325 registry.insert<llzk::undef::UndefDialect>();
326 registry.insert<mlir::arith::ArithDialect>();
327 registry.insert<mlir::scf::SCFDialect>();
328 }
329
333 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
334
335protected:
336 ::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)};
337 ::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(
342 "Only structs that were replaced with concrete instantiations are deleted."),
345 "All structs that cannot be reached by a use-def chain from some concrete struct are deleted."),
348 "All structs that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
349 )};
350};
351#undef GEN_PASS_CLASSES
352#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)