LLZK 0.1.0
Veridise's ZK Language IR
Loading...
Searching...
No Matches
LLZKTransformationPasses.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_INLINESTRUCTSPASS
6#define GEN_PASS_DECL_POLYLOWERINGPASS
7#define GEN_PASS_DECL_R1CSLOWERINGPASS
8#define GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
9#define GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
10#define GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
11#undef GEN_PASS_DECL
12#endif // GEN_PASS_DECL
13
14//===----------------------------------------------------------------------===//
15// InlineStructsPass
16//===----------------------------------------------------------------------===//
17#ifdef GEN_PASS_DECL_INLINESTRUCTSPASS
18struct InlineStructsPassOptions {
19 uint64_t maxComplexity = 0;
20};
21#undef GEN_PASS_DECL_INLINESTRUCTSPASS
22#endif // GEN_PASS_DECL_INLINESTRUCTSPASS
23#ifdef GEN_PASS_DEF_INLINESTRUCTSPASS
24namespace impl {
25
26template <typename DerivedT>
27class InlineStructsPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
28public:
29 using Base = InlineStructsPassBase;
30
31 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
32 InlineStructsPassBase(const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
33
35 static constexpr ::llvm::StringLiteral getArgumentName() {
36 return ::llvm::StringLiteral("llzk-inline-structs");
37 }
38 ::llvm::StringRef getArgument() const override { return "llzk-inline-structs"; }
39
40 ::llvm::StringRef getDescription() const override { return "Inlines nested structs (i.e., subcomponents)."; }
41
43 static constexpr ::llvm::StringLiteral getPassName() {
44 return ::llvm::StringLiteral("InlineStructsPass");
45 }
46 ::llvm::StringRef getName() const override { return "InlineStructsPass"; }
47
49 static bool classof(const ::mlir::Pass *pass) {
50 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
51 }
52
54 std::unique_ptr<::mlir::Pass> clonePass() const override {
55 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
56 }
57
59 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
60 registry.insert<llzk::LLZKDialect>();
61 registry.insert<llzk::boolean::BoolDialect>();
62 registry.insert<llzk::array::ArrayDialect>();
63 registry.insert<llzk::component::StructDialect>();
64 registry.insert<llzk::constrain::ConstrainDialect>();
65 registry.insert<llzk::felt::FeltDialect>();
66 registry.insert<llzk::global::GlobalDialect>();
67 registry.insert<llzk::include::IncludeDialect>();
68 registry.insert<llzk::function::FunctionDialect>();
69 registry.insert<llzk::string::StringDialect>();
70 registry.insert<llzk::polymorphic::PolymorphicDialect>();
71 registry.insert<llzk::undef::UndefDialect>();
72 registry.insert<mlir::arith::ArithDialect>();
73 registry.insert<mlir::scf::SCFDialect>();
74 }
75
79 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
80
81 InlineStructsPassBase(const InlineStructsPassOptions &options) : InlineStructsPassBase() {
82 maxComplexity = options.maxComplexity;
83 }
84protected:
85 ::mlir::Pass::Option<uint64_t> maxComplexity{*this, "max-merge-complexity", ::llvm::cl::desc("Maximum allowed constraint+multiplications in merged @constrain functions"), ::llvm::cl::init(0)};
86private:
87};
88} // namespace impl
89#undef GEN_PASS_DEF_INLINESTRUCTSPASS
90#endif // GEN_PASS_DEF_INLINESTRUCTSPASS
91
92//===----------------------------------------------------------------------===//
93// PolyLoweringPass
94//===----------------------------------------------------------------------===//
95#ifdef GEN_PASS_DECL_POLYLOWERINGPASS
96struct PolyLoweringPassOptions {
97 unsigned maxDegree = 2;
98};
99#undef GEN_PASS_DECL_POLYLOWERINGPASS
100#endif // GEN_PASS_DECL_POLYLOWERINGPASS
101#ifdef GEN_PASS_DEF_POLYLOWERINGPASS
102namespace impl {
103
104template <typename DerivedT>
105class PolyLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
106public:
107 using Base = PolyLoweringPassBase;
108
109 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
110 PolyLoweringPassBase(const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
111
113 static constexpr ::llvm::StringLiteral getArgumentName() {
114 return ::llvm::StringLiteral("llzk-poly-lowering-pass");
115 }
116 ::llvm::StringRef getArgument() const override { return "llzk-poly-lowering-pass"; }
117
118 ::llvm::StringRef getDescription() const override { return "Lowers the degree of all polynomial equations to a specified maximum"; }
119
121 static constexpr ::llvm::StringLiteral getPassName() {
122 return ::llvm::StringLiteral("PolyLoweringPass");
123 }
124 ::llvm::StringRef getName() const override { return "PolyLoweringPass"; }
125
127 static bool classof(const ::mlir::Pass *pass) {
128 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
129 }
130
132 std::unique_ptr<::mlir::Pass> clonePass() const override {
133 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
134 }
135
137 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
138 registry.insert<llzk::LLZKDialect>();
139 registry.insert<llzk::boolean::BoolDialect>();
140 registry.insert<llzk::array::ArrayDialect>();
141 registry.insert<llzk::component::StructDialect>();
142 registry.insert<llzk::constrain::ConstrainDialect>();
143 registry.insert<llzk::felt::FeltDialect>();
144 registry.insert<llzk::global::GlobalDialect>();
145 registry.insert<llzk::include::IncludeDialect>();
146 registry.insert<llzk::function::FunctionDialect>();
147 registry.insert<llzk::string::StringDialect>();
148 registry.insert<llzk::polymorphic::PolymorphicDialect>();
149 registry.insert<llzk::undef::UndefDialect>();
150 registry.insert<mlir::arith::ArithDialect>();
151 registry.insert<mlir::scf::SCFDialect>();
152 }
153
157 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
158
159 PolyLoweringPassBase(const PolyLoweringPassOptions &options) : PolyLoweringPassBase() {
160 maxDegree = options.maxDegree;
161 }
162protected:
163 ::mlir::Pass::Option<unsigned> maxDegree{*this, "max-degree", ::llvm::cl::desc("Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
164private:
165};
166} // namespace impl
167#undef GEN_PASS_DEF_POLYLOWERINGPASS
168#endif // GEN_PASS_DEF_POLYLOWERINGPASS
169
170//===----------------------------------------------------------------------===//
171// R1CSLoweringPass
172//===----------------------------------------------------------------------===//
173#ifdef GEN_PASS_DECL_R1CSLOWERINGPASS
174#undef GEN_PASS_DECL_R1CSLOWERINGPASS
175#endif // GEN_PASS_DECL_R1CSLOWERINGPASS
176#ifdef GEN_PASS_DEF_R1CSLOWERINGPASS
177namespace impl {
178
179template <typename DerivedT>
180class R1CSLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
181public:
182 using Base = R1CSLoweringPassBase;
183
184 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
185 R1CSLoweringPassBase(const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
186
188 static constexpr ::llvm::StringLiteral getArgumentName() {
189 return ::llvm::StringLiteral("llzk-r1cs-lowering");
190 }
191 ::llvm::StringRef getArgument() const override { return "llzk-r1cs-lowering"; }
192
193 ::llvm::StringRef getDescription() const override { return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
194
196 static constexpr ::llvm::StringLiteral getPassName() {
197 return ::llvm::StringLiteral("R1CSLoweringPass");
198 }
199 ::llvm::StringRef getName() const override { return "R1CSLoweringPass"; }
200
202 static bool classof(const ::mlir::Pass *pass) {
203 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
204 }
205
207 std::unique_ptr<::mlir::Pass> clonePass() const override {
208 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
209 }
210
212 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
213 registry.insert<llzk::LLZKDialect>();
214 registry.insert<llzk::boolean::BoolDialect>();
215 registry.insert<llzk::array::ArrayDialect>();
216 registry.insert<llzk::component::StructDialect>();
217 registry.insert<llzk::constrain::ConstrainDialect>();
218 registry.insert<llzk::felt::FeltDialect>();
219 registry.insert<llzk::global::GlobalDialect>();
220 registry.insert<llzk::include::IncludeDialect>();
221 registry.insert<llzk::function::FunctionDialect>();
222 registry.insert<llzk::string::StringDialect>();
223 registry.insert<llzk::polymorphic::PolymorphicDialect>();
224 registry.insert<llzk::undef::UndefDialect>();
225 registry.insert<mlir::arith::ArithDialect>();
226 registry.insert<mlir::scf::SCFDialect>();
227 }
228
232 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
233
234protected:
235private:
236};
237} // namespace impl
238#undef GEN_PASS_DEF_R1CSLOWERINGPASS
239#endif // GEN_PASS_DEF_R1CSLOWERINGPASS
240
241//===----------------------------------------------------------------------===//
242// RedundantOperationEliminationPass
243//===----------------------------------------------------------------------===//
244#ifdef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
245#undef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
246#endif // GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
247#ifdef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
248namespace impl {
249
250template <typename DerivedT>
251class RedundantOperationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
252public:
253 using Base = RedundantOperationEliminationPassBase;
254
255 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
256 RedundantOperationEliminationPassBase(const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
257
259 static constexpr ::llvm::StringLiteral getArgumentName() {
260 return ::llvm::StringLiteral("llzk-duplicate-op-elim");
261 }
262 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-op-elim"; }
263
264 ::llvm::StringRef getDescription() const override { return "Remove redundant operations"; }
265
267 static constexpr ::llvm::StringLiteral getPassName() {
268 return ::llvm::StringLiteral("RedundantOperationEliminationPass");
269 }
270 ::llvm::StringRef getName() const override { return "RedundantOperationEliminationPass"; }
271
273 static bool classof(const ::mlir::Pass *pass) {
274 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
275 }
276
278 std::unique_ptr<::mlir::Pass> clonePass() const override {
279 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
280 }
281
283 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
284 registry.insert<llzk::LLZKDialect>();
285 registry.insert<llzk::boolean::BoolDialect>();
286 registry.insert<llzk::array::ArrayDialect>();
287 registry.insert<llzk::component::StructDialect>();
288 registry.insert<llzk::constrain::ConstrainDialect>();
289 registry.insert<llzk::felt::FeltDialect>();
290 registry.insert<llzk::global::GlobalDialect>();
291 registry.insert<llzk::include::IncludeDialect>();
292 registry.insert<llzk::function::FunctionDialect>();
293 registry.insert<llzk::string::StringDialect>();
294 registry.insert<llzk::polymorphic::PolymorphicDialect>();
295 registry.insert<llzk::undef::UndefDialect>();
296 registry.insert<mlir::arith::ArithDialect>();
297 registry.insert<mlir::scf::SCFDialect>();
298 }
299
303 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
304
305protected:
306private:
307};
308} // namespace impl
309#undef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
310#endif // GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
311
312//===----------------------------------------------------------------------===//
313// RedundantReadAndWriteEliminationPass
314//===----------------------------------------------------------------------===//
315#ifdef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
316#undef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
317#endif // GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
318#ifdef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
319namespace impl {
320
321template <typename DerivedT>
322class RedundantReadAndWriteEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
323public:
324 using Base = RedundantReadAndWriteEliminationPassBase;
325
326 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
327 RedundantReadAndWriteEliminationPassBase(const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
328
330 static constexpr ::llvm::StringLiteral getArgumentName() {
331 return ::llvm::StringLiteral("llzk-duplicate-read-write-elim");
332 }
333 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-read-write-elim"; }
334
335 ::llvm::StringRef getDescription() const override { return "Remove redundant reads and writes"; }
336
338 static constexpr ::llvm::StringLiteral getPassName() {
339 return ::llvm::StringLiteral("RedundantReadAndWriteEliminationPass");
340 }
341 ::llvm::StringRef getName() const override { return "RedundantReadAndWriteEliminationPass"; }
342
344 static bool classof(const ::mlir::Pass *pass) {
345 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
346 }
347
349 std::unique_ptr<::mlir::Pass> clonePass() const override {
350 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
351 }
352
354 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
355 registry.insert<llzk::LLZKDialect>();
356 registry.insert<llzk::boolean::BoolDialect>();
357 registry.insert<llzk::array::ArrayDialect>();
358 registry.insert<llzk::component::StructDialect>();
359 registry.insert<llzk::constrain::ConstrainDialect>();
360 registry.insert<llzk::felt::FeltDialect>();
361 registry.insert<llzk::global::GlobalDialect>();
362 registry.insert<llzk::include::IncludeDialect>();
363 registry.insert<llzk::function::FunctionDialect>();
364 registry.insert<llzk::string::StringDialect>();
365 registry.insert<llzk::polymorphic::PolymorphicDialect>();
366 registry.insert<llzk::undef::UndefDialect>();
367 registry.insert<mlir::arith::ArithDialect>();
368 registry.insert<mlir::scf::SCFDialect>();
369 }
370
374 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
375
376protected:
377private:
378};
379} // namespace impl
380#undef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
381#endif // GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
382
383//===----------------------------------------------------------------------===//
384// UnusedDeclarationEliminationPass
385//===----------------------------------------------------------------------===//
386#ifdef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
387struct UnusedDeclarationEliminationPassOptions {
388 bool removeStructs = false;
389};
390#undef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
391#endif // GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
392#ifdef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
393namespace impl {
394
395template <typename DerivedT>
396class UnusedDeclarationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
397public:
398 using Base = UnusedDeclarationEliminationPassBase;
399
400 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
401 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
402
404 static constexpr ::llvm::StringLiteral getArgumentName() {
405 return ::llvm::StringLiteral("llzk-unused-declaration-elim");
406 }
407 ::llvm::StringRef getArgument() const override { return "llzk-unused-declaration-elim"; }
408
409 ::llvm::StringRef getDescription() const override { return "Remove unused field and struct declarations"; }
410
412 static constexpr ::llvm::StringLiteral getPassName() {
413 return ::llvm::StringLiteral("UnusedDeclarationEliminationPass");
414 }
415 ::llvm::StringRef getName() const override { return "UnusedDeclarationEliminationPass"; }
416
418 static bool classof(const ::mlir::Pass *pass) {
419 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
420 }
421
423 std::unique_ptr<::mlir::Pass> clonePass() const override {
424 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
425 }
426
428 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
429 registry.insert<llzk::LLZKDialect>();
430 registry.insert<llzk::boolean::BoolDialect>();
431 registry.insert<llzk::array::ArrayDialect>();
432 registry.insert<llzk::component::StructDialect>();
433 registry.insert<llzk::constrain::ConstrainDialect>();
434 registry.insert<llzk::felt::FeltDialect>();
435 registry.insert<llzk::global::GlobalDialect>();
436 registry.insert<llzk::include::IncludeDialect>();
437 registry.insert<llzk::function::FunctionDialect>();
438 registry.insert<llzk::string::StringDialect>();
439 registry.insert<llzk::polymorphic::PolymorphicDialect>();
440 registry.insert<llzk::undef::UndefDialect>();
441 registry.insert<mlir::arith::ArithDialect>();
442 registry.insert<mlir::scf::SCFDialect>();
443 }
444
448 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
449
450 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassOptions &options) : UnusedDeclarationEliminationPassBase() {
451 removeStructs = options.removeStructs;
452 }
453protected:
454 ::mlir::Pass::Option<bool> removeStructs{*this, "remove-structs", ::llvm::cl::desc("Whether to remove unused struct definitions as well. Requires module to declare a Main component, otherwise all components will appear unused."), ::llvm::cl::init(false)};
455private:
456};
457} // namespace impl
458#undef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
459#endif // GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
460#ifdef GEN_PASS_REGISTRATION
461
462//===----------------------------------------------------------------------===//
463// InlineStructsPass Registration
464//===----------------------------------------------------------------------===//
465
466inline void registerInlineStructsPass() {
467 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
469 });
470}
471
472// Old registration code, kept for temporary backwards compatibility.
473inline void registerInlineStructsPassPass() {
474 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
476 });
477}
478
479//===----------------------------------------------------------------------===//
480// PolyLoweringPass Registration
481//===----------------------------------------------------------------------===//
482
483inline void registerPolyLoweringPass() {
484 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
486 });
487}
488
489// Old registration code, kept for temporary backwards compatibility.
490inline void registerPolyLoweringPassPass() {
491 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
493 });
494}
495
496//===----------------------------------------------------------------------===//
497// R1CSLoweringPass Registration
498//===----------------------------------------------------------------------===//
499
500inline void registerR1CSLoweringPass() {
501 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
503 });
504}
505
506// Old registration code, kept for temporary backwards compatibility.
507inline void registerR1CSLoweringPassPass() {
508 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
510 });
511}
512
513//===----------------------------------------------------------------------===//
514// RedundantOperationEliminationPass Registration
515//===----------------------------------------------------------------------===//
516
518 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
520 });
521}
522
523// Old registration code, kept for temporary backwards compatibility.
525 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
527 });
528}
529
530//===----------------------------------------------------------------------===//
531// RedundantReadAndWriteEliminationPass Registration
532//===----------------------------------------------------------------------===//
533
535 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
537 });
538}
539
540// Old registration code, kept for temporary backwards compatibility.
542 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
544 });
545}
546
547//===----------------------------------------------------------------------===//
548// UnusedDeclarationEliminationPass Registration
549//===----------------------------------------------------------------------===//
550
552 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
554 });
555}
556
557// Old registration code, kept for temporary backwards compatibility.
559 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
561 });
562}
563
564//===----------------------------------------------------------------------===//
565// Transformation Registration
566//===----------------------------------------------------------------------===//
567
568inline void registerTransformationPasses() {
575}
576#undef GEN_PASS_REGISTRATION
577#endif // GEN_PASS_REGISTRATION
578// Deprecated. Please use the new per-pass macros.
579#ifdef GEN_PASS_CLASSES
580
581template <typename DerivedT>
582class InlineStructsPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
583public:
584 using Base = InlineStructsPassBase;
585
586 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
587 InlineStructsPassBase(const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
588
590 static constexpr ::llvm::StringLiteral getArgumentName() {
591 return ::llvm::StringLiteral("llzk-inline-structs");
592 }
593 ::llvm::StringRef getArgument() const override { return "llzk-inline-structs"; }
594
595 ::llvm::StringRef getDescription() const override { return "Inlines nested structs (i.e., subcomponents)."; }
596
598 static constexpr ::llvm::StringLiteral getPassName() {
599 return ::llvm::StringLiteral("InlineStructsPass");
600 }
601 ::llvm::StringRef getName() const override { return "InlineStructsPass"; }
602
604 static bool classof(const ::mlir::Pass *pass) {
605 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
606 }
607
609 std::unique_ptr<::mlir::Pass> clonePass() const override {
610 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
611 }
612
614 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
615 registry.insert<llzk::LLZKDialect>();
616 registry.insert<llzk::boolean::BoolDialect>();
617 registry.insert<llzk::array::ArrayDialect>();
618 registry.insert<llzk::component::StructDialect>();
619 registry.insert<llzk::constrain::ConstrainDialect>();
620 registry.insert<llzk::felt::FeltDialect>();
621 registry.insert<llzk::global::GlobalDialect>();
622 registry.insert<llzk::include::IncludeDialect>();
623 registry.insert<llzk::function::FunctionDialect>();
624 registry.insert<llzk::string::StringDialect>();
625 registry.insert<llzk::polymorphic::PolymorphicDialect>();
626 registry.insert<llzk::undef::UndefDialect>();
627 registry.insert<mlir::arith::ArithDialect>();
628 registry.insert<mlir::scf::SCFDialect>();
629 }
630
634 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
635
636protected:
637 ::mlir::Pass::Option<uint64_t> maxComplexity{*this, "max-merge-complexity", ::llvm::cl::desc("Maximum allowed constraint+multiplications in merged @constrain functions"), ::llvm::cl::init(0)};
638};
639
640template <typename DerivedT>
641class PolyLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
642public:
643 using Base = PolyLoweringPassBase;
644
645 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
646 PolyLoweringPassBase(const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
647
649 static constexpr ::llvm::StringLiteral getArgumentName() {
650 return ::llvm::StringLiteral("llzk-poly-lowering-pass");
651 }
652 ::llvm::StringRef getArgument() const override { return "llzk-poly-lowering-pass"; }
653
654 ::llvm::StringRef getDescription() const override { return "Lowers the degree of all polynomial equations to a specified maximum"; }
655
657 static constexpr ::llvm::StringLiteral getPassName() {
658 return ::llvm::StringLiteral("PolyLoweringPass");
659 }
660 ::llvm::StringRef getName() const override { return "PolyLoweringPass"; }
661
663 static bool classof(const ::mlir::Pass *pass) {
664 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
665 }
666
668 std::unique_ptr<::mlir::Pass> clonePass() const override {
669 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
670 }
671
673 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
674 registry.insert<llzk::LLZKDialect>();
675 registry.insert<llzk::boolean::BoolDialect>();
676 registry.insert<llzk::array::ArrayDialect>();
677 registry.insert<llzk::component::StructDialect>();
678 registry.insert<llzk::constrain::ConstrainDialect>();
679 registry.insert<llzk::felt::FeltDialect>();
680 registry.insert<llzk::global::GlobalDialect>();
681 registry.insert<llzk::include::IncludeDialect>();
682 registry.insert<llzk::function::FunctionDialect>();
683 registry.insert<llzk::string::StringDialect>();
684 registry.insert<llzk::polymorphic::PolymorphicDialect>();
685 registry.insert<llzk::undef::UndefDialect>();
686 registry.insert<mlir::arith::ArithDialect>();
687 registry.insert<mlir::scf::SCFDialect>();
688 }
689
693 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
694
695protected:
696 ::mlir::Pass::Option<unsigned> maxDegree{*this, "max-degree", ::llvm::cl::desc("Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
697};
698
699template <typename DerivedT>
700class R1CSLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
701public:
702 using Base = R1CSLoweringPassBase;
703
704 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
705 R1CSLoweringPassBase(const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
706
708 static constexpr ::llvm::StringLiteral getArgumentName() {
709 return ::llvm::StringLiteral("llzk-r1cs-lowering");
710 }
711 ::llvm::StringRef getArgument() const override { return "llzk-r1cs-lowering"; }
712
713 ::llvm::StringRef getDescription() const override { return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
714
716 static constexpr ::llvm::StringLiteral getPassName() {
717 return ::llvm::StringLiteral("R1CSLoweringPass");
718 }
719 ::llvm::StringRef getName() const override { return "R1CSLoweringPass"; }
720
722 static bool classof(const ::mlir::Pass *pass) {
723 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
724 }
725
727 std::unique_ptr<::mlir::Pass> clonePass() const override {
728 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
729 }
730
732 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
733 registry.insert<llzk::LLZKDialect>();
734 registry.insert<llzk::boolean::BoolDialect>();
735 registry.insert<llzk::array::ArrayDialect>();
736 registry.insert<llzk::component::StructDialect>();
737 registry.insert<llzk::constrain::ConstrainDialect>();
738 registry.insert<llzk::felt::FeltDialect>();
739 registry.insert<llzk::global::GlobalDialect>();
740 registry.insert<llzk::include::IncludeDialect>();
741 registry.insert<llzk::function::FunctionDialect>();
742 registry.insert<llzk::string::StringDialect>();
743 registry.insert<llzk::polymorphic::PolymorphicDialect>();
744 registry.insert<llzk::undef::UndefDialect>();
745 registry.insert<mlir::arith::ArithDialect>();
746 registry.insert<mlir::scf::SCFDialect>();
747 }
748
752 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
753
754protected:
755};
756
757template <typename DerivedT>
758class RedundantOperationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
759public:
760 using Base = RedundantOperationEliminationPassBase;
761
762 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
763 RedundantOperationEliminationPassBase(const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
764
766 static constexpr ::llvm::StringLiteral getArgumentName() {
767 return ::llvm::StringLiteral("llzk-duplicate-op-elim");
768 }
769 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-op-elim"; }
770
771 ::llvm::StringRef getDescription() const override { return "Remove redundant operations"; }
772
774 static constexpr ::llvm::StringLiteral getPassName() {
775 return ::llvm::StringLiteral("RedundantOperationEliminationPass");
776 }
777 ::llvm::StringRef getName() const override { return "RedundantOperationEliminationPass"; }
778
780 static bool classof(const ::mlir::Pass *pass) {
781 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
782 }
783
785 std::unique_ptr<::mlir::Pass> clonePass() const override {
786 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
787 }
788
790 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
791 registry.insert<llzk::LLZKDialect>();
792 registry.insert<llzk::boolean::BoolDialect>();
793 registry.insert<llzk::array::ArrayDialect>();
794 registry.insert<llzk::component::StructDialect>();
795 registry.insert<llzk::constrain::ConstrainDialect>();
796 registry.insert<llzk::felt::FeltDialect>();
797 registry.insert<llzk::global::GlobalDialect>();
798 registry.insert<llzk::include::IncludeDialect>();
799 registry.insert<llzk::function::FunctionDialect>();
800 registry.insert<llzk::string::StringDialect>();
801 registry.insert<llzk::polymorphic::PolymorphicDialect>();
802 registry.insert<llzk::undef::UndefDialect>();
803 registry.insert<mlir::arith::ArithDialect>();
804 registry.insert<mlir::scf::SCFDialect>();
805 }
806
810 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
811
812protected:
813};
814
815template <typename DerivedT>
816class RedundantReadAndWriteEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
817public:
818 using Base = RedundantReadAndWriteEliminationPassBase;
819
820 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
821 RedundantReadAndWriteEliminationPassBase(const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
822
824 static constexpr ::llvm::StringLiteral getArgumentName() {
825 return ::llvm::StringLiteral("llzk-duplicate-read-write-elim");
826 }
827 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-read-write-elim"; }
828
829 ::llvm::StringRef getDescription() const override { return "Remove redundant reads and writes"; }
830
832 static constexpr ::llvm::StringLiteral getPassName() {
833 return ::llvm::StringLiteral("RedundantReadAndWriteEliminationPass");
834 }
835 ::llvm::StringRef getName() const override { return "RedundantReadAndWriteEliminationPass"; }
836
838 static bool classof(const ::mlir::Pass *pass) {
839 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
840 }
841
843 std::unique_ptr<::mlir::Pass> clonePass() const override {
844 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
845 }
846
848 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
849 registry.insert<llzk::LLZKDialect>();
850 registry.insert<llzk::boolean::BoolDialect>();
851 registry.insert<llzk::array::ArrayDialect>();
852 registry.insert<llzk::component::StructDialect>();
853 registry.insert<llzk::constrain::ConstrainDialect>();
854 registry.insert<llzk::felt::FeltDialect>();
855 registry.insert<llzk::global::GlobalDialect>();
856 registry.insert<llzk::include::IncludeDialect>();
857 registry.insert<llzk::function::FunctionDialect>();
858 registry.insert<llzk::string::StringDialect>();
859 registry.insert<llzk::polymorphic::PolymorphicDialect>();
860 registry.insert<llzk::undef::UndefDialect>();
861 registry.insert<mlir::arith::ArithDialect>();
862 registry.insert<mlir::scf::SCFDialect>();
863 }
864
868 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
869
870protected:
871};
872
873template <typename DerivedT>
874class UnusedDeclarationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
875public:
876 using Base = UnusedDeclarationEliminationPassBase;
877
878 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
879 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
880
882 static constexpr ::llvm::StringLiteral getArgumentName() {
883 return ::llvm::StringLiteral("llzk-unused-declaration-elim");
884 }
885 ::llvm::StringRef getArgument() const override { return "llzk-unused-declaration-elim"; }
886
887 ::llvm::StringRef getDescription() const override { return "Remove unused field and struct declarations"; }
888
890 static constexpr ::llvm::StringLiteral getPassName() {
891 return ::llvm::StringLiteral("UnusedDeclarationEliminationPass");
892 }
893 ::llvm::StringRef getName() const override { return "UnusedDeclarationEliminationPass"; }
894
896 static bool classof(const ::mlir::Pass *pass) {
897 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
898 }
899
901 std::unique_ptr<::mlir::Pass> clonePass() const override {
902 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
903 }
904
906 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
907 registry.insert<llzk::LLZKDialect>();
908 registry.insert<llzk::boolean::BoolDialect>();
909 registry.insert<llzk::array::ArrayDialect>();
910 registry.insert<llzk::component::StructDialect>();
911 registry.insert<llzk::constrain::ConstrainDialect>();
912 registry.insert<llzk::felt::FeltDialect>();
913 registry.insert<llzk::global::GlobalDialect>();
914 registry.insert<llzk::include::IncludeDialect>();
915 registry.insert<llzk::function::FunctionDialect>();
916 registry.insert<llzk::string::StringDialect>();
917 registry.insert<llzk::polymorphic::PolymorphicDialect>();
918 registry.insert<llzk::undef::UndefDialect>();
919 registry.insert<mlir::arith::ArithDialect>();
920 registry.insert<mlir::scf::SCFDialect>();
921 }
922
926 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
927
928protected:
929 ::mlir::Pass::Option<bool> removeStructs{*this, "remove-structs", ::llvm::cl::desc("Whether to remove unused struct definitions as well. Requires module to declare a Main component, otherwise all components will appear unused."), ::llvm::cl::init(false)};
930};
931#undef GEN_PASS_CLASSES
932#endif // GEN_PASS_CLASSES
void registerTransformationPasses()
void registerUnusedDeclarationEliminationPassPass()
std::unique_ptr< mlir::Pass > createRedundantOperationEliminationPass()
void registerR1CSLoweringPass()
void registerRedundantOperationEliminationPass()
void registerPolyLoweringPassPass()
void registerUnusedDeclarationEliminationPass()
void registerRedundantOperationEliminationPassPass()
std::unique_ptr< mlir::Pass > createRedundantReadAndWriteEliminationPass()
void registerR1CSLoweringPassPass()
void registerInlineStructsPassPass()
std::unique_ptr< mlir::Pass > createUnusedDeclarationEliminationPass()
std::unique_ptr< mlir::Pass > createPolyLoweringPass()
void registerRedundantReadAndWriteEliminationPass()
void registerPolyLoweringPass()
void registerRedundantReadAndWriteEliminationPassPass()
std::unique_ptr< mlir::Pass > createInlineStructsPass()
std::unique_ptr< mlir::Pass > createR1CSLoweringPass()
void registerInlineStructsPass()