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_POLYLOWERINGPASS
6#define GEN_PASS_DECL_R1CSLOWERINGPASS
7#define GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
8#define GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
9#define GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
10#undef GEN_PASS_DECL
11#endif // GEN_PASS_DECL
12
13//===----------------------------------------------------------------------===//
14// PolyLoweringPass
15//===----------------------------------------------------------------------===//
16#ifdef GEN_PASS_DECL_POLYLOWERINGPASS
17struct PolyLoweringPassOptions {
18 unsigned maxDegree = 2;
19};
20#undef GEN_PASS_DECL_POLYLOWERINGPASS
21#endif // GEN_PASS_DECL_POLYLOWERINGPASS
22#ifdef GEN_PASS_DEF_POLYLOWERINGPASS
23namespace impl {
24
25template <typename DerivedT>
26class PolyLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
27public:
28 using Base = PolyLoweringPassBase;
29
30 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
31 PolyLoweringPassBase(const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
32
34 static constexpr ::llvm::StringLiteral getArgumentName() {
35 return ::llvm::StringLiteral("llzk-poly-lowering-pass");
36 }
37 ::llvm::StringRef getArgument() const override { return "llzk-poly-lowering-pass"; }
38
39 ::llvm::StringRef getDescription() const override { return "Lowers the degree of all polynomial equations to a specified maximum"; }
40
42 static constexpr ::llvm::StringLiteral getPassName() {
43 return ::llvm::StringLiteral("PolyLoweringPass");
44 }
45 ::llvm::StringRef getName() const override { return "PolyLoweringPass"; }
46
48 static bool classof(const ::mlir::Pass *pass) {
49 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
50 }
51
53 std::unique_ptr<::mlir::Pass> clonePass() const override {
54 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
55 }
56
58 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
59 registry.insert<llzk::LLZKDialect>();
60 registry.insert<llzk::boolean::BoolDialect>();
61 registry.insert<llzk::array::ArrayDialect>();
62 registry.insert<llzk::component::StructDialect>();
63 registry.insert<llzk::constrain::ConstrainDialect>();
64 registry.insert<llzk::felt::FeltDialect>();
65 registry.insert<llzk::global::GlobalDialect>();
66 registry.insert<llzk::include::IncludeDialect>();
67 registry.insert<llzk::function::FunctionDialect>();
68 registry.insert<llzk::string::StringDialect>();
69 registry.insert<llzk::polymorphic::PolymorphicDialect>();
70 registry.insert<llzk::undef::UndefDialect>();
71 registry.insert<mlir::arith::ArithDialect>();
72 registry.insert<mlir::scf::SCFDialect>();
73 }
74
78 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
79
80 PolyLoweringPassBase(const PolyLoweringPassOptions &options) : PolyLoweringPassBase() {
81 maxDegree = options.maxDegree;
82 }
83protected:
84 ::mlir::Pass::Option<unsigned> maxDegree{*this, "max-degree", ::llvm::cl::desc("Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
85private:
86};
87} // namespace impl
88#undef GEN_PASS_DEF_POLYLOWERINGPASS
89#endif // GEN_PASS_DEF_POLYLOWERINGPASS
90
91//===----------------------------------------------------------------------===//
92// R1CSLoweringPass
93//===----------------------------------------------------------------------===//
94#ifdef GEN_PASS_DECL_R1CSLOWERINGPASS
95#undef GEN_PASS_DECL_R1CSLOWERINGPASS
96#endif // GEN_PASS_DECL_R1CSLOWERINGPASS
97#ifdef GEN_PASS_DEF_R1CSLOWERINGPASS
98namespace impl {
99
100template <typename DerivedT>
101class R1CSLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
102public:
103 using Base = R1CSLoweringPassBase;
104
105 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
106 R1CSLoweringPassBase(const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
107
109 static constexpr ::llvm::StringLiteral getArgumentName() {
110 return ::llvm::StringLiteral("llzk-r1cs-lowering");
111 }
112 ::llvm::StringRef getArgument() const override { return "llzk-r1cs-lowering"; }
113
114 ::llvm::StringRef getDescription() const override { return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
115
117 static constexpr ::llvm::StringLiteral getPassName() {
118 return ::llvm::StringLiteral("R1CSLoweringPass");
119 }
120 ::llvm::StringRef getName() const override { return "R1CSLoweringPass"; }
121
123 static bool classof(const ::mlir::Pass *pass) {
124 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
125 }
126
128 std::unique_ptr<::mlir::Pass> clonePass() const override {
129 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
130 }
131
133 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
134 registry.insert<llzk::LLZKDialect>();
135 registry.insert<llzk::boolean::BoolDialect>();
136 registry.insert<llzk::array::ArrayDialect>();
137 registry.insert<llzk::component::StructDialect>();
138 registry.insert<llzk::constrain::ConstrainDialect>();
139 registry.insert<llzk::felt::FeltDialect>();
140 registry.insert<llzk::global::GlobalDialect>();
141 registry.insert<llzk::include::IncludeDialect>();
142 registry.insert<llzk::function::FunctionDialect>();
143 registry.insert<llzk::string::StringDialect>();
144 registry.insert<llzk::polymorphic::PolymorphicDialect>();
145 registry.insert<llzk::undef::UndefDialect>();
146 registry.insert<mlir::arith::ArithDialect>();
147 registry.insert<mlir::scf::SCFDialect>();
148 }
149
153 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
154
155protected:
156private:
157};
158} // namespace impl
159#undef GEN_PASS_DEF_R1CSLOWERINGPASS
160#endif // GEN_PASS_DEF_R1CSLOWERINGPASS
161
162//===----------------------------------------------------------------------===//
163// RedundantOperationEliminationPass
164//===----------------------------------------------------------------------===//
165#ifdef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
166#undef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
167#endif // GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
168#ifdef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
169namespace impl {
170
171template <typename DerivedT>
172class RedundantOperationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
173public:
174 using Base = RedundantOperationEliminationPassBase;
175
176 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
177 RedundantOperationEliminationPassBase(const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
178
180 static constexpr ::llvm::StringLiteral getArgumentName() {
181 return ::llvm::StringLiteral("llzk-duplicate-op-elim");
182 }
183 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-op-elim"; }
184
185 ::llvm::StringRef getDescription() const override { return "Remove redundant operations"; }
186
188 static constexpr ::llvm::StringLiteral getPassName() {
189 return ::llvm::StringLiteral("RedundantOperationEliminationPass");
190 }
191 ::llvm::StringRef getName() const override { return "RedundantOperationEliminationPass"; }
192
194 static bool classof(const ::mlir::Pass *pass) {
195 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
196 }
197
199 std::unique_ptr<::mlir::Pass> clonePass() const override {
200 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
201 }
202
204 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
205 registry.insert<llzk::LLZKDialect>();
206 registry.insert<llzk::boolean::BoolDialect>();
207 registry.insert<llzk::array::ArrayDialect>();
208 registry.insert<llzk::component::StructDialect>();
209 registry.insert<llzk::constrain::ConstrainDialect>();
210 registry.insert<llzk::felt::FeltDialect>();
211 registry.insert<llzk::global::GlobalDialect>();
212 registry.insert<llzk::include::IncludeDialect>();
213 registry.insert<llzk::function::FunctionDialect>();
214 registry.insert<llzk::string::StringDialect>();
215 registry.insert<llzk::polymorphic::PolymorphicDialect>();
216 registry.insert<llzk::undef::UndefDialect>();
217 registry.insert<mlir::arith::ArithDialect>();
218 registry.insert<mlir::scf::SCFDialect>();
219 }
220
224 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
225
226protected:
227private:
228};
229} // namespace impl
230#undef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
231#endif // GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
232
233//===----------------------------------------------------------------------===//
234// RedundantReadAndWriteEliminationPass
235//===----------------------------------------------------------------------===//
236#ifdef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
237#undef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
238#endif // GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
239#ifdef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
240namespace impl {
241
242template <typename DerivedT>
243class RedundantReadAndWriteEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
244public:
245 using Base = RedundantReadAndWriteEliminationPassBase;
246
247 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
248 RedundantReadAndWriteEliminationPassBase(const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
249
251 static constexpr ::llvm::StringLiteral getArgumentName() {
252 return ::llvm::StringLiteral("llzk-duplicate-read-write-elim");
253 }
254 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-read-write-elim"; }
255
256 ::llvm::StringRef getDescription() const override { return "Remove redundant reads and writes"; }
257
259 static constexpr ::llvm::StringLiteral getPassName() {
260 return ::llvm::StringLiteral("RedundantReadAndWriteEliminationPass");
261 }
262 ::llvm::StringRef getName() const override { return "RedundantReadAndWriteEliminationPass"; }
263
265 static bool classof(const ::mlir::Pass *pass) {
266 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
267 }
268
270 std::unique_ptr<::mlir::Pass> clonePass() const override {
271 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
272 }
273
275 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
276 registry.insert<llzk::LLZKDialect>();
277 registry.insert<llzk::boolean::BoolDialect>();
278 registry.insert<llzk::array::ArrayDialect>();
279 registry.insert<llzk::component::StructDialect>();
280 registry.insert<llzk::constrain::ConstrainDialect>();
281 registry.insert<llzk::felt::FeltDialect>();
282 registry.insert<llzk::global::GlobalDialect>();
283 registry.insert<llzk::include::IncludeDialect>();
284 registry.insert<llzk::function::FunctionDialect>();
285 registry.insert<llzk::string::StringDialect>();
286 registry.insert<llzk::polymorphic::PolymorphicDialect>();
287 registry.insert<llzk::undef::UndefDialect>();
288 registry.insert<mlir::arith::ArithDialect>();
289 registry.insert<mlir::scf::SCFDialect>();
290 }
291
295 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
296
297protected:
298private:
299};
300} // namespace impl
301#undef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
302#endif // GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
303
304//===----------------------------------------------------------------------===//
305// UnusedDeclarationEliminationPass
306//===----------------------------------------------------------------------===//
307#ifdef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
308struct UnusedDeclarationEliminationPassOptions {
309 bool removeStructs = false;
310};
311#undef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
312#endif // GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
313#ifdef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
314namespace impl {
315
316template <typename DerivedT>
317class UnusedDeclarationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
318public:
319 using Base = UnusedDeclarationEliminationPassBase;
320
321 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
322 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
323
325 static constexpr ::llvm::StringLiteral getArgumentName() {
326 return ::llvm::StringLiteral("llzk-unused-declaration-elim");
327 }
328 ::llvm::StringRef getArgument() const override { return "llzk-unused-declaration-elim"; }
329
330 ::llvm::StringRef getDescription() const override { return "Remove unused field and struct declarations"; }
331
333 static constexpr ::llvm::StringLiteral getPassName() {
334 return ::llvm::StringLiteral("UnusedDeclarationEliminationPass");
335 }
336 ::llvm::StringRef getName() const override { return "UnusedDeclarationEliminationPass"; }
337
339 static bool classof(const ::mlir::Pass *pass) {
340 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
341 }
342
344 std::unique_ptr<::mlir::Pass> clonePass() const override {
345 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
346 }
347
349 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
350 registry.insert<llzk::LLZKDialect>();
351 registry.insert<llzk::boolean::BoolDialect>();
352 registry.insert<llzk::array::ArrayDialect>();
353 registry.insert<llzk::component::StructDialect>();
354 registry.insert<llzk::constrain::ConstrainDialect>();
355 registry.insert<llzk::felt::FeltDialect>();
356 registry.insert<llzk::global::GlobalDialect>();
357 registry.insert<llzk::include::IncludeDialect>();
358 registry.insert<llzk::function::FunctionDialect>();
359 registry.insert<llzk::string::StringDialect>();
360 registry.insert<llzk::polymorphic::PolymorphicDialect>();
361 registry.insert<llzk::undef::UndefDialect>();
362 registry.insert<mlir::arith::ArithDialect>();
363 registry.insert<mlir::scf::SCFDialect>();
364 }
365
369 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
370
371 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassOptions &options) : UnusedDeclarationEliminationPassBase() {
372 removeStructs = options.removeStructs;
373 }
374protected:
375 ::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)};
376private:
377};
378} // namespace impl
379#undef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
380#endif // GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
381#ifdef GEN_PASS_REGISTRATION
382
383//===----------------------------------------------------------------------===//
384// PolyLoweringPass Registration
385//===----------------------------------------------------------------------===//
386
387inline void registerPolyLoweringPass() {
388 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
390 });
391}
392
393// Old registration code, kept for temporary backwards compatibility.
394inline void registerPolyLoweringPassPass() {
395 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
397 });
398}
399
400//===----------------------------------------------------------------------===//
401// R1CSLoweringPass Registration
402//===----------------------------------------------------------------------===//
403
404inline void registerR1CSLoweringPass() {
405 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
407 });
408}
409
410// Old registration code, kept for temporary backwards compatibility.
411inline void registerR1CSLoweringPassPass() {
412 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
414 });
415}
416
417//===----------------------------------------------------------------------===//
418// RedundantOperationEliminationPass Registration
419//===----------------------------------------------------------------------===//
420
422 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
424 });
425}
426
427// Old registration code, kept for temporary backwards compatibility.
429 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
431 });
432}
433
434//===----------------------------------------------------------------------===//
435// RedundantReadAndWriteEliminationPass Registration
436//===----------------------------------------------------------------------===//
437
439 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
441 });
442}
443
444// Old registration code, kept for temporary backwards compatibility.
446 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
448 });
449}
450
451//===----------------------------------------------------------------------===//
452// UnusedDeclarationEliminationPass Registration
453//===----------------------------------------------------------------------===//
454
456 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
458 });
459}
460
461// Old registration code, kept for temporary backwards compatibility.
463 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
465 });
466}
467
468//===----------------------------------------------------------------------===//
469// Transformation Registration
470//===----------------------------------------------------------------------===//
471
472inline void registerTransformationPasses() {
478}
479#undef GEN_PASS_REGISTRATION
480#endif // GEN_PASS_REGISTRATION
481// Deprecated. Please use the new per-pass macros.
482#ifdef GEN_PASS_CLASSES
483
484template <typename DerivedT>
485class PolyLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
486public:
487 using Base = PolyLoweringPassBase;
488
489 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
490 PolyLoweringPassBase(const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
491
493 static constexpr ::llvm::StringLiteral getArgumentName() {
494 return ::llvm::StringLiteral("llzk-poly-lowering-pass");
495 }
496 ::llvm::StringRef getArgument() const override { return "llzk-poly-lowering-pass"; }
497
498 ::llvm::StringRef getDescription() const override { return "Lowers the degree of all polynomial equations to a specified maximum"; }
499
501 static constexpr ::llvm::StringLiteral getPassName() {
502 return ::llvm::StringLiteral("PolyLoweringPass");
503 }
504 ::llvm::StringRef getName() const override { return "PolyLoweringPass"; }
505
507 static bool classof(const ::mlir::Pass *pass) {
508 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
509 }
510
512 std::unique_ptr<::mlir::Pass> clonePass() const override {
513 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
514 }
515
517 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
518 registry.insert<llzk::LLZKDialect>();
519 registry.insert<llzk::boolean::BoolDialect>();
520 registry.insert<llzk::array::ArrayDialect>();
521 registry.insert<llzk::component::StructDialect>();
522 registry.insert<llzk::constrain::ConstrainDialect>();
523 registry.insert<llzk::felt::FeltDialect>();
524 registry.insert<llzk::global::GlobalDialect>();
525 registry.insert<llzk::include::IncludeDialect>();
526 registry.insert<llzk::function::FunctionDialect>();
527 registry.insert<llzk::string::StringDialect>();
528 registry.insert<llzk::polymorphic::PolymorphicDialect>();
529 registry.insert<llzk::undef::UndefDialect>();
530 registry.insert<mlir::arith::ArithDialect>();
531 registry.insert<mlir::scf::SCFDialect>();
532 }
533
537 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
538
539protected:
540 ::mlir::Pass::Option<unsigned> maxDegree{*this, "max-degree", ::llvm::cl::desc("Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
541};
542
543template <typename DerivedT>
544class R1CSLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
545public:
546 using Base = R1CSLoweringPassBase;
547
548 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
549 R1CSLoweringPassBase(const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
550
552 static constexpr ::llvm::StringLiteral getArgumentName() {
553 return ::llvm::StringLiteral("llzk-r1cs-lowering");
554 }
555 ::llvm::StringRef getArgument() const override { return "llzk-r1cs-lowering"; }
556
557 ::llvm::StringRef getDescription() const override { return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
558
560 static constexpr ::llvm::StringLiteral getPassName() {
561 return ::llvm::StringLiteral("R1CSLoweringPass");
562 }
563 ::llvm::StringRef getName() const override { return "R1CSLoweringPass"; }
564
566 static bool classof(const ::mlir::Pass *pass) {
567 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
568 }
569
571 std::unique_ptr<::mlir::Pass> clonePass() const override {
572 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
573 }
574
576 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
577 registry.insert<llzk::LLZKDialect>();
578 registry.insert<llzk::boolean::BoolDialect>();
579 registry.insert<llzk::array::ArrayDialect>();
580 registry.insert<llzk::component::StructDialect>();
581 registry.insert<llzk::constrain::ConstrainDialect>();
582 registry.insert<llzk::felt::FeltDialect>();
583 registry.insert<llzk::global::GlobalDialect>();
584 registry.insert<llzk::include::IncludeDialect>();
585 registry.insert<llzk::function::FunctionDialect>();
586 registry.insert<llzk::string::StringDialect>();
587 registry.insert<llzk::polymorphic::PolymorphicDialect>();
588 registry.insert<llzk::undef::UndefDialect>();
589 registry.insert<mlir::arith::ArithDialect>();
590 registry.insert<mlir::scf::SCFDialect>();
591 }
592
596 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
597
598protected:
599};
600
601template <typename DerivedT>
602class RedundantOperationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
603public:
604 using Base = RedundantOperationEliminationPassBase;
605
606 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
607 RedundantOperationEliminationPassBase(const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
608
610 static constexpr ::llvm::StringLiteral getArgumentName() {
611 return ::llvm::StringLiteral("llzk-duplicate-op-elim");
612 }
613 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-op-elim"; }
614
615 ::llvm::StringRef getDescription() const override { return "Remove redundant operations"; }
616
618 static constexpr ::llvm::StringLiteral getPassName() {
619 return ::llvm::StringLiteral("RedundantOperationEliminationPass");
620 }
621 ::llvm::StringRef getName() const override { return "RedundantOperationEliminationPass"; }
622
624 static bool classof(const ::mlir::Pass *pass) {
625 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
626 }
627
629 std::unique_ptr<::mlir::Pass> clonePass() const override {
630 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
631 }
632
634 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
635 registry.insert<llzk::LLZKDialect>();
636 registry.insert<llzk::boolean::BoolDialect>();
637 registry.insert<llzk::array::ArrayDialect>();
638 registry.insert<llzk::component::StructDialect>();
639 registry.insert<llzk::constrain::ConstrainDialect>();
640 registry.insert<llzk::felt::FeltDialect>();
641 registry.insert<llzk::global::GlobalDialect>();
642 registry.insert<llzk::include::IncludeDialect>();
643 registry.insert<llzk::function::FunctionDialect>();
644 registry.insert<llzk::string::StringDialect>();
645 registry.insert<llzk::polymorphic::PolymorphicDialect>();
646 registry.insert<llzk::undef::UndefDialect>();
647 registry.insert<mlir::arith::ArithDialect>();
648 registry.insert<mlir::scf::SCFDialect>();
649 }
650
654 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
655
656protected:
657};
658
659template <typename DerivedT>
660class RedundantReadAndWriteEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
661public:
662 using Base = RedundantReadAndWriteEliminationPassBase;
663
664 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
665 RedundantReadAndWriteEliminationPassBase(const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
666
668 static constexpr ::llvm::StringLiteral getArgumentName() {
669 return ::llvm::StringLiteral("llzk-duplicate-read-write-elim");
670 }
671 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-read-write-elim"; }
672
673 ::llvm::StringRef getDescription() const override { return "Remove redundant reads and writes"; }
674
676 static constexpr ::llvm::StringLiteral getPassName() {
677 return ::llvm::StringLiteral("RedundantReadAndWriteEliminationPass");
678 }
679 ::llvm::StringRef getName() const override { return "RedundantReadAndWriteEliminationPass"; }
680
682 static bool classof(const ::mlir::Pass *pass) {
683 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
684 }
685
687 std::unique_ptr<::mlir::Pass> clonePass() const override {
688 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
689 }
690
692 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
693 registry.insert<llzk::LLZKDialect>();
694 registry.insert<llzk::boolean::BoolDialect>();
695 registry.insert<llzk::array::ArrayDialect>();
696 registry.insert<llzk::component::StructDialect>();
697 registry.insert<llzk::constrain::ConstrainDialect>();
698 registry.insert<llzk::felt::FeltDialect>();
699 registry.insert<llzk::global::GlobalDialect>();
700 registry.insert<llzk::include::IncludeDialect>();
701 registry.insert<llzk::function::FunctionDialect>();
702 registry.insert<llzk::string::StringDialect>();
703 registry.insert<llzk::polymorphic::PolymorphicDialect>();
704 registry.insert<llzk::undef::UndefDialect>();
705 registry.insert<mlir::arith::ArithDialect>();
706 registry.insert<mlir::scf::SCFDialect>();
707 }
708
712 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
713
714protected:
715};
716
717template <typename DerivedT>
718class UnusedDeclarationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
719public:
720 using Base = UnusedDeclarationEliminationPassBase;
721
722 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
723 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
724
726 static constexpr ::llvm::StringLiteral getArgumentName() {
727 return ::llvm::StringLiteral("llzk-unused-declaration-elim");
728 }
729 ::llvm::StringRef getArgument() const override { return "llzk-unused-declaration-elim"; }
730
731 ::llvm::StringRef getDescription() const override { return "Remove unused field and struct declarations"; }
732
734 static constexpr ::llvm::StringLiteral getPassName() {
735 return ::llvm::StringLiteral("UnusedDeclarationEliminationPass");
736 }
737 ::llvm::StringRef getName() const override { return "UnusedDeclarationEliminationPass"; }
738
740 static bool classof(const ::mlir::Pass *pass) {
741 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
742 }
743
745 std::unique_ptr<::mlir::Pass> clonePass() const override {
746 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
747 }
748
750 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
751 registry.insert<llzk::LLZKDialect>();
752 registry.insert<llzk::boolean::BoolDialect>();
753 registry.insert<llzk::array::ArrayDialect>();
754 registry.insert<llzk::component::StructDialect>();
755 registry.insert<llzk::constrain::ConstrainDialect>();
756 registry.insert<llzk::felt::FeltDialect>();
757 registry.insert<llzk::global::GlobalDialect>();
758 registry.insert<llzk::include::IncludeDialect>();
759 registry.insert<llzk::function::FunctionDialect>();
760 registry.insert<llzk::string::StringDialect>();
761 registry.insert<llzk::polymorphic::PolymorphicDialect>();
762 registry.insert<llzk::undef::UndefDialect>();
763 registry.insert<mlir::arith::ArithDialect>();
764 registry.insert<mlir::scf::SCFDialect>();
765 }
766
770 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
771
772protected:
773 ::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)};
774};
775#undef GEN_PASS_CLASSES
776#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()
std::unique_ptr< mlir::Pass > createUnusedDeclarationEliminationPass()
std::unique_ptr< mlir::Pass > createPolyLoweringPass()
void registerRedundantReadAndWriteEliminationPass()
void registerPolyLoweringPass()
void registerRedundantReadAndWriteEliminationPassPass()
std::unique_ptr< mlir::Pass > createR1CSLoweringPass()