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 InlineStructsPassBase& operator=(const InlineStructsPassBase &) = delete;
34 InlineStructsPassBase(InlineStructsPassBase &&) = delete;
35 InlineStructsPassBase& operator=(InlineStructsPassBase &&) = delete;
36 ~InlineStructsPassBase() = default;
37
39 static constexpr ::llvm::StringLiteral getArgumentName() {
40 return ::llvm::StringLiteral("llzk-inline-structs");
41 }
42 ::llvm::StringRef getArgument() const override { return "llzk-inline-structs"; }
43
44 ::llvm::StringRef getDescription() const override { return "Inlines nested structs (i.e., subcomponents)."; }
45
47 static constexpr ::llvm::StringLiteral getPassName() {
48 return ::llvm::StringLiteral("InlineStructsPass");
49 }
50 ::llvm::StringRef getName() const override { return "InlineStructsPass"; }
51
53 static bool classof(const ::mlir::Pass *pass) {
54 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
55 }
56
58 std::unique_ptr<::mlir::Pass> clonePass() const override {
59 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
60 }
61
63 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
64 registry.insert<llzk::LLZKDialect>();
65 registry.insert<llzk::boolean::BoolDialect>();
66 registry.insert<llzk::array::ArrayDialect>();
67 registry.insert<llzk::component::StructDialect>();
68 registry.insert<llzk::constrain::ConstrainDialect>();
69 registry.insert<llzk::felt::FeltDialect>();
70 registry.insert<llzk::global::GlobalDialect>();
71 registry.insert<llzk::include::IncludeDialect>();
72 registry.insert<llzk::function::FunctionDialect>();
73 registry.insert<llzk::string::StringDialect>();
74 registry.insert<llzk::polymorphic::PolymorphicDialect>();
75 registry.insert<llzk::undef::UndefDialect>();
76 registry.insert<mlir::arith::ArithDialect>();
77 registry.insert<mlir::scf::SCFDialect>();
78 }
79
83 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
84
85 InlineStructsPassBase(InlineStructsPassOptions options) : InlineStructsPassBase() {
86 maxComplexity = std::move(options.maxComplexity);
87 }
88protected:
89 ::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)};
90private:
91};
92} // namespace impl
93#undef GEN_PASS_DEF_INLINESTRUCTSPASS
94#endif // GEN_PASS_DEF_INLINESTRUCTSPASS
95
96//===----------------------------------------------------------------------===//
97// PolyLoweringPass
98//===----------------------------------------------------------------------===//
99#ifdef GEN_PASS_DECL_POLYLOWERINGPASS
100struct PolyLoweringPassOptions {
101 unsigned maxDegree = 2;
102};
103#undef GEN_PASS_DECL_POLYLOWERINGPASS
104#endif // GEN_PASS_DECL_POLYLOWERINGPASS
105#ifdef GEN_PASS_DEF_POLYLOWERINGPASS
106namespace impl {
107
108template <typename DerivedT>
109class PolyLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
110public:
111 using Base = PolyLoweringPassBase;
112
113 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
114 PolyLoweringPassBase(const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
115 PolyLoweringPassBase& operator=(const PolyLoweringPassBase &) = delete;
116 PolyLoweringPassBase(PolyLoweringPassBase &&) = delete;
117 PolyLoweringPassBase& operator=(PolyLoweringPassBase &&) = delete;
118 ~PolyLoweringPassBase() = default;
119
121 static constexpr ::llvm::StringLiteral getArgumentName() {
122 return ::llvm::StringLiteral("llzk-poly-lowering-pass");
123 }
124 ::llvm::StringRef getArgument() const override { return "llzk-poly-lowering-pass"; }
125
126 ::llvm::StringRef getDescription() const override { return "Lowers the degree of all polynomial equations to a specified maximum"; }
127
129 static constexpr ::llvm::StringLiteral getPassName() {
130 return ::llvm::StringLiteral("PolyLoweringPass");
131 }
132 ::llvm::StringRef getName() const override { return "PolyLoweringPass"; }
133
135 static bool classof(const ::mlir::Pass *pass) {
136 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
137 }
138
140 std::unique_ptr<::mlir::Pass> clonePass() const override {
141 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
142 }
143
145 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
146 registry.insert<llzk::LLZKDialect>();
147 registry.insert<llzk::boolean::BoolDialect>();
148 registry.insert<llzk::array::ArrayDialect>();
149 registry.insert<llzk::component::StructDialect>();
150 registry.insert<llzk::constrain::ConstrainDialect>();
151 registry.insert<llzk::felt::FeltDialect>();
152 registry.insert<llzk::global::GlobalDialect>();
153 registry.insert<llzk::include::IncludeDialect>();
154 registry.insert<llzk::function::FunctionDialect>();
155 registry.insert<llzk::string::StringDialect>();
156 registry.insert<llzk::polymorphic::PolymorphicDialect>();
157 registry.insert<llzk::undef::UndefDialect>();
158 registry.insert<mlir::arith::ArithDialect>();
159 registry.insert<mlir::scf::SCFDialect>();
160 }
161
165 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
166
167 PolyLoweringPassBase(PolyLoweringPassOptions options) : PolyLoweringPassBase() {
168 maxDegree = std::move(options.maxDegree);
169 }
170protected:
171 ::mlir::Pass::Option<unsigned> maxDegree{*this, "max-degree", ::llvm::cl::desc("Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
172private:
173};
174} // namespace impl
175#undef GEN_PASS_DEF_POLYLOWERINGPASS
176#endif // GEN_PASS_DEF_POLYLOWERINGPASS
177
178//===----------------------------------------------------------------------===//
179// R1CSLoweringPass
180//===----------------------------------------------------------------------===//
181#ifdef GEN_PASS_DECL_R1CSLOWERINGPASS
182#undef GEN_PASS_DECL_R1CSLOWERINGPASS
183#endif // GEN_PASS_DECL_R1CSLOWERINGPASS
184#ifdef GEN_PASS_DEF_R1CSLOWERINGPASS
185namespace impl {
186
187template <typename DerivedT>
188class R1CSLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
189public:
190 using Base = R1CSLoweringPassBase;
191
192 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
193 R1CSLoweringPassBase(const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
194 R1CSLoweringPassBase& operator=(const R1CSLoweringPassBase &) = delete;
195 R1CSLoweringPassBase(R1CSLoweringPassBase &&) = delete;
196 R1CSLoweringPassBase& operator=(R1CSLoweringPassBase &&) = delete;
197 ~R1CSLoweringPassBase() = default;
198
200 static constexpr ::llvm::StringLiteral getArgumentName() {
201 return ::llvm::StringLiteral("llzk-r1cs-lowering");
202 }
203 ::llvm::StringRef getArgument() const override { return "llzk-r1cs-lowering"; }
204
205 ::llvm::StringRef getDescription() const override { return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
206
208 static constexpr ::llvm::StringLiteral getPassName() {
209 return ::llvm::StringLiteral("R1CSLoweringPass");
210 }
211 ::llvm::StringRef getName() const override { return "R1CSLoweringPass"; }
212
214 static bool classof(const ::mlir::Pass *pass) {
215 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
216 }
217
219 std::unique_ptr<::mlir::Pass> clonePass() const override {
220 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
221 }
222
224 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
225 registry.insert<llzk::LLZKDialect>();
226 registry.insert<llzk::boolean::BoolDialect>();
227 registry.insert<llzk::array::ArrayDialect>();
228 registry.insert<llzk::component::StructDialect>();
229 registry.insert<llzk::constrain::ConstrainDialect>();
230 registry.insert<llzk::felt::FeltDialect>();
231 registry.insert<llzk::global::GlobalDialect>();
232 registry.insert<llzk::include::IncludeDialect>();
233 registry.insert<llzk::function::FunctionDialect>();
234 registry.insert<llzk::string::StringDialect>();
235 registry.insert<llzk::polymorphic::PolymorphicDialect>();
236 registry.insert<llzk::undef::UndefDialect>();
237 registry.insert<mlir::arith::ArithDialect>();
238 registry.insert<mlir::scf::SCFDialect>();
239 }
240
244 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
245
246protected:
247private:
248};
249} // namespace impl
250#undef GEN_PASS_DEF_R1CSLOWERINGPASS
251#endif // GEN_PASS_DEF_R1CSLOWERINGPASS
252
253//===----------------------------------------------------------------------===//
254// RedundantOperationEliminationPass
255//===----------------------------------------------------------------------===//
256#ifdef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
257#undef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
258#endif // GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
259#ifdef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
260namespace impl {
261
262template <typename DerivedT>
263class RedundantOperationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
264public:
265 using Base = RedundantOperationEliminationPassBase;
266
267 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
268 RedundantOperationEliminationPassBase(const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
269 RedundantOperationEliminationPassBase& operator=(const RedundantOperationEliminationPassBase &) = delete;
270 RedundantOperationEliminationPassBase(RedundantOperationEliminationPassBase &&) = delete;
271 RedundantOperationEliminationPassBase& operator=(RedundantOperationEliminationPassBase &&) = delete;
272 ~RedundantOperationEliminationPassBase() = default;
273
275 static constexpr ::llvm::StringLiteral getArgumentName() {
276 return ::llvm::StringLiteral("llzk-duplicate-op-elim");
277 }
278 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-op-elim"; }
279
280 ::llvm::StringRef getDescription() const override { return "Remove redundant operations"; }
281
283 static constexpr ::llvm::StringLiteral getPassName() {
284 return ::llvm::StringLiteral("RedundantOperationEliminationPass");
285 }
286 ::llvm::StringRef getName() const override { return "RedundantOperationEliminationPass"; }
287
289 static bool classof(const ::mlir::Pass *pass) {
290 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
291 }
292
294 std::unique_ptr<::mlir::Pass> clonePass() const override {
295 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
296 }
297
299 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
300 registry.insert<llzk::LLZKDialect>();
301 registry.insert<llzk::boolean::BoolDialect>();
302 registry.insert<llzk::array::ArrayDialect>();
303 registry.insert<llzk::component::StructDialect>();
304 registry.insert<llzk::constrain::ConstrainDialect>();
305 registry.insert<llzk::felt::FeltDialect>();
306 registry.insert<llzk::global::GlobalDialect>();
307 registry.insert<llzk::include::IncludeDialect>();
308 registry.insert<llzk::function::FunctionDialect>();
309 registry.insert<llzk::string::StringDialect>();
310 registry.insert<llzk::polymorphic::PolymorphicDialect>();
311 registry.insert<llzk::undef::UndefDialect>();
312 registry.insert<mlir::arith::ArithDialect>();
313 registry.insert<mlir::scf::SCFDialect>();
314 }
315
319 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
320
321protected:
322private:
323};
324} // namespace impl
325#undef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
326#endif // GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
327
328//===----------------------------------------------------------------------===//
329// RedundantReadAndWriteEliminationPass
330//===----------------------------------------------------------------------===//
331#ifdef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
332#undef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
333#endif // GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
334#ifdef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
335namespace impl {
336
337template <typename DerivedT>
338class RedundantReadAndWriteEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
339public:
340 using Base = RedundantReadAndWriteEliminationPassBase;
341
342 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
343 RedundantReadAndWriteEliminationPassBase(const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
344 RedundantReadAndWriteEliminationPassBase& operator=(const RedundantReadAndWriteEliminationPassBase &) = delete;
345 RedundantReadAndWriteEliminationPassBase(RedundantReadAndWriteEliminationPassBase &&) = delete;
346 RedundantReadAndWriteEliminationPassBase& operator=(RedundantReadAndWriteEliminationPassBase &&) = delete;
347 ~RedundantReadAndWriteEliminationPassBase() = default;
348
350 static constexpr ::llvm::StringLiteral getArgumentName() {
351 return ::llvm::StringLiteral("llzk-duplicate-read-write-elim");
352 }
353 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-read-write-elim"; }
354
355 ::llvm::StringRef getDescription() const override { return "Remove redundant reads and writes"; }
356
358 static constexpr ::llvm::StringLiteral getPassName() {
359 return ::llvm::StringLiteral("RedundantReadAndWriteEliminationPass");
360 }
361 ::llvm::StringRef getName() const override { return "RedundantReadAndWriteEliminationPass"; }
362
364 static bool classof(const ::mlir::Pass *pass) {
365 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
366 }
367
369 std::unique_ptr<::mlir::Pass> clonePass() const override {
370 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
371 }
372
374 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
375 registry.insert<llzk::LLZKDialect>();
376 registry.insert<llzk::boolean::BoolDialect>();
377 registry.insert<llzk::array::ArrayDialect>();
378 registry.insert<llzk::component::StructDialect>();
379 registry.insert<llzk::constrain::ConstrainDialect>();
380 registry.insert<llzk::felt::FeltDialect>();
381 registry.insert<llzk::global::GlobalDialect>();
382 registry.insert<llzk::include::IncludeDialect>();
383 registry.insert<llzk::function::FunctionDialect>();
384 registry.insert<llzk::string::StringDialect>();
385 registry.insert<llzk::polymorphic::PolymorphicDialect>();
386 registry.insert<llzk::undef::UndefDialect>();
387 registry.insert<mlir::arith::ArithDialect>();
388 registry.insert<mlir::scf::SCFDialect>();
389 }
390
394 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
395
396protected:
397private:
398};
399} // namespace impl
400#undef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
401#endif // GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
402
403//===----------------------------------------------------------------------===//
404// UnusedDeclarationEliminationPass
405//===----------------------------------------------------------------------===//
406#ifdef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
407struct UnusedDeclarationEliminationPassOptions {
408 bool removeStructs = false;
409};
410#undef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
411#endif // GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
412#ifdef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
413namespace impl {
414
415template <typename DerivedT>
416class UnusedDeclarationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
417public:
418 using Base = UnusedDeclarationEliminationPassBase;
419
420 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
421 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
422 UnusedDeclarationEliminationPassBase& operator=(const UnusedDeclarationEliminationPassBase &) = delete;
423 UnusedDeclarationEliminationPassBase(UnusedDeclarationEliminationPassBase &&) = delete;
424 UnusedDeclarationEliminationPassBase& operator=(UnusedDeclarationEliminationPassBase &&) = delete;
425 ~UnusedDeclarationEliminationPassBase() = default;
426
428 static constexpr ::llvm::StringLiteral getArgumentName() {
429 return ::llvm::StringLiteral("llzk-unused-declaration-elim");
430 }
431 ::llvm::StringRef getArgument() const override { return "llzk-unused-declaration-elim"; }
432
433 ::llvm::StringRef getDescription() const override { return "Remove unused field and struct declarations"; }
434
436 static constexpr ::llvm::StringLiteral getPassName() {
437 return ::llvm::StringLiteral("UnusedDeclarationEliminationPass");
438 }
439 ::llvm::StringRef getName() const override { return "UnusedDeclarationEliminationPass"; }
440
442 static bool classof(const ::mlir::Pass *pass) {
443 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
444 }
445
447 std::unique_ptr<::mlir::Pass> clonePass() const override {
448 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
449 }
450
452 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
453 registry.insert<llzk::LLZKDialect>();
454 registry.insert<llzk::boolean::BoolDialect>();
455 registry.insert<llzk::array::ArrayDialect>();
456 registry.insert<llzk::component::StructDialect>();
457 registry.insert<llzk::constrain::ConstrainDialect>();
458 registry.insert<llzk::felt::FeltDialect>();
459 registry.insert<llzk::global::GlobalDialect>();
460 registry.insert<llzk::include::IncludeDialect>();
461 registry.insert<llzk::function::FunctionDialect>();
462 registry.insert<llzk::string::StringDialect>();
463 registry.insert<llzk::polymorphic::PolymorphicDialect>();
464 registry.insert<llzk::undef::UndefDialect>();
465 registry.insert<mlir::arith::ArithDialect>();
466 registry.insert<mlir::scf::SCFDialect>();
467 }
468
472 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
473
474 UnusedDeclarationEliminationPassBase(UnusedDeclarationEliminationPassOptions options) : UnusedDeclarationEliminationPassBase() {
475 removeStructs = std::move(options.removeStructs);
476 }
477protected:
478 ::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)};
479private:
480};
481} // namespace impl
482#undef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
483#endif // GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
484#ifdef GEN_PASS_REGISTRATION
485
486//===----------------------------------------------------------------------===//
487// InlineStructsPass Registration
488//===----------------------------------------------------------------------===//
489
490inline void registerInlineStructsPass() {
491 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
493 });
494}
495
496// Old registration code, kept for temporary backwards compatibility.
497inline void registerInlineStructsPassPass() {
498 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
500 });
501}
502
503//===----------------------------------------------------------------------===//
504// PolyLoweringPass Registration
505//===----------------------------------------------------------------------===//
506
507inline void registerPolyLoweringPass() {
508 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
510 });
511}
512
513// Old registration code, kept for temporary backwards compatibility.
514inline void registerPolyLoweringPassPass() {
515 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
517 });
518}
519
520//===----------------------------------------------------------------------===//
521// R1CSLoweringPass Registration
522//===----------------------------------------------------------------------===//
523
524inline void registerR1CSLoweringPass() {
525 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
527 });
528}
529
530// Old registration code, kept for temporary backwards compatibility.
531inline void registerR1CSLoweringPassPass() {
532 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
534 });
535}
536
537//===----------------------------------------------------------------------===//
538// RedundantOperationEliminationPass Registration
539//===----------------------------------------------------------------------===//
540
542 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
544 });
545}
546
547// Old registration code, kept for temporary backwards compatibility.
549 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
551 });
552}
553
554//===----------------------------------------------------------------------===//
555// RedundantReadAndWriteEliminationPass Registration
556//===----------------------------------------------------------------------===//
557
559 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
561 });
562}
563
564// Old registration code, kept for temporary backwards compatibility.
566 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
568 });
569}
570
571//===----------------------------------------------------------------------===//
572// UnusedDeclarationEliminationPass Registration
573//===----------------------------------------------------------------------===//
574
576 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
578 });
579}
580
581// Old registration code, kept for temporary backwards compatibility.
583 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
585 });
586}
587
588//===----------------------------------------------------------------------===//
589// Transformation Registration
590//===----------------------------------------------------------------------===//
591
592inline void registerTransformationPasses() {
599}
600#undef GEN_PASS_REGISTRATION
601#endif // GEN_PASS_REGISTRATION
602// Deprecated. Please use the new per-pass macros.
603#ifdef GEN_PASS_CLASSES
604
605template <typename DerivedT>
606class InlineStructsPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
607public:
608 using Base = InlineStructsPassBase;
609
610 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
611 InlineStructsPassBase(const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
612 InlineStructsPassBase& operator=(const InlineStructsPassBase &) = delete;
613 InlineStructsPassBase(InlineStructsPassBase &&) = delete;
614 InlineStructsPassBase& operator=(InlineStructsPassBase &&) = delete;
615 ~InlineStructsPassBase() = default;
616
618 static constexpr ::llvm::StringLiteral getArgumentName() {
619 return ::llvm::StringLiteral("llzk-inline-structs");
620 }
621 ::llvm::StringRef getArgument() const override { return "llzk-inline-structs"; }
622
623 ::llvm::StringRef getDescription() const override { return "Inlines nested structs (i.e., subcomponents)."; }
624
626 static constexpr ::llvm::StringLiteral getPassName() {
627 return ::llvm::StringLiteral("InlineStructsPass");
628 }
629 ::llvm::StringRef getName() const override { return "InlineStructsPass"; }
630
632 static bool classof(const ::mlir::Pass *pass) {
633 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
634 }
635
637 std::unique_ptr<::mlir::Pass> clonePass() const override {
638 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
639 }
640
642 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
643 registry.insert<llzk::LLZKDialect>();
644 registry.insert<llzk::boolean::BoolDialect>();
645 registry.insert<llzk::array::ArrayDialect>();
646 registry.insert<llzk::component::StructDialect>();
647 registry.insert<llzk::constrain::ConstrainDialect>();
648 registry.insert<llzk::felt::FeltDialect>();
649 registry.insert<llzk::global::GlobalDialect>();
650 registry.insert<llzk::include::IncludeDialect>();
651 registry.insert<llzk::function::FunctionDialect>();
652 registry.insert<llzk::string::StringDialect>();
653 registry.insert<llzk::polymorphic::PolymorphicDialect>();
654 registry.insert<llzk::undef::UndefDialect>();
655 registry.insert<mlir::arith::ArithDialect>();
656 registry.insert<mlir::scf::SCFDialect>();
657 }
658
662 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
663
664protected:
665 ::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)};
666};
667
668template <typename DerivedT>
669class PolyLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
670public:
671 using Base = PolyLoweringPassBase;
672
673 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
674 PolyLoweringPassBase(const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
675 PolyLoweringPassBase& operator=(const PolyLoweringPassBase &) = delete;
676 PolyLoweringPassBase(PolyLoweringPassBase &&) = delete;
677 PolyLoweringPassBase& operator=(PolyLoweringPassBase &&) = delete;
678 ~PolyLoweringPassBase() = default;
679
681 static constexpr ::llvm::StringLiteral getArgumentName() {
682 return ::llvm::StringLiteral("llzk-poly-lowering-pass");
683 }
684 ::llvm::StringRef getArgument() const override { return "llzk-poly-lowering-pass"; }
685
686 ::llvm::StringRef getDescription() const override { return "Lowers the degree of all polynomial equations to a specified maximum"; }
687
689 static constexpr ::llvm::StringLiteral getPassName() {
690 return ::llvm::StringLiteral("PolyLoweringPass");
691 }
692 ::llvm::StringRef getName() const override { return "PolyLoweringPass"; }
693
695 static bool classof(const ::mlir::Pass *pass) {
696 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
697 }
698
700 std::unique_ptr<::mlir::Pass> clonePass() const override {
701 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
702 }
703
705 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
706 registry.insert<llzk::LLZKDialect>();
707 registry.insert<llzk::boolean::BoolDialect>();
708 registry.insert<llzk::array::ArrayDialect>();
709 registry.insert<llzk::component::StructDialect>();
710 registry.insert<llzk::constrain::ConstrainDialect>();
711 registry.insert<llzk::felt::FeltDialect>();
712 registry.insert<llzk::global::GlobalDialect>();
713 registry.insert<llzk::include::IncludeDialect>();
714 registry.insert<llzk::function::FunctionDialect>();
715 registry.insert<llzk::string::StringDialect>();
716 registry.insert<llzk::polymorphic::PolymorphicDialect>();
717 registry.insert<llzk::undef::UndefDialect>();
718 registry.insert<mlir::arith::ArithDialect>();
719 registry.insert<mlir::scf::SCFDialect>();
720 }
721
725 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
726
727protected:
728 ::mlir::Pass::Option<unsigned> maxDegree{*this, "max-degree", ::llvm::cl::desc("Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
729};
730
731template <typename DerivedT>
732class R1CSLoweringPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
733public:
734 using Base = R1CSLoweringPassBase;
735
736 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
737 R1CSLoweringPassBase(const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
738 R1CSLoweringPassBase& operator=(const R1CSLoweringPassBase &) = delete;
739 R1CSLoweringPassBase(R1CSLoweringPassBase &&) = delete;
740 R1CSLoweringPassBase& operator=(R1CSLoweringPassBase &&) = delete;
741 ~R1CSLoweringPassBase() = default;
742
744 static constexpr ::llvm::StringLiteral getArgumentName() {
745 return ::llvm::StringLiteral("llzk-r1cs-lowering");
746 }
747 ::llvm::StringRef getArgument() const override { return "llzk-r1cs-lowering"; }
748
749 ::llvm::StringRef getDescription() const override { return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
750
752 static constexpr ::llvm::StringLiteral getPassName() {
753 return ::llvm::StringLiteral("R1CSLoweringPass");
754 }
755 ::llvm::StringRef getName() const override { return "R1CSLoweringPass"; }
756
758 static bool classof(const ::mlir::Pass *pass) {
759 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
760 }
761
763 std::unique_ptr<::mlir::Pass> clonePass() const override {
764 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
765 }
766
768 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
769 registry.insert<llzk::LLZKDialect>();
770 registry.insert<llzk::boolean::BoolDialect>();
771 registry.insert<llzk::array::ArrayDialect>();
772 registry.insert<llzk::component::StructDialect>();
773 registry.insert<llzk::constrain::ConstrainDialect>();
774 registry.insert<llzk::felt::FeltDialect>();
775 registry.insert<llzk::global::GlobalDialect>();
776 registry.insert<llzk::include::IncludeDialect>();
777 registry.insert<llzk::function::FunctionDialect>();
778 registry.insert<llzk::string::StringDialect>();
779 registry.insert<llzk::polymorphic::PolymorphicDialect>();
780 registry.insert<llzk::undef::UndefDialect>();
781 registry.insert<mlir::arith::ArithDialect>();
782 registry.insert<mlir::scf::SCFDialect>();
783 }
784
788 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
789
790protected:
791};
792
793template <typename DerivedT>
794class RedundantOperationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
795public:
796 using Base = RedundantOperationEliminationPassBase;
797
798 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
799 RedundantOperationEliminationPassBase(const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
800 RedundantOperationEliminationPassBase& operator=(const RedundantOperationEliminationPassBase &) = delete;
801 RedundantOperationEliminationPassBase(RedundantOperationEliminationPassBase &&) = delete;
802 RedundantOperationEliminationPassBase& operator=(RedundantOperationEliminationPassBase &&) = delete;
803 ~RedundantOperationEliminationPassBase() = default;
804
806 static constexpr ::llvm::StringLiteral getArgumentName() {
807 return ::llvm::StringLiteral("llzk-duplicate-op-elim");
808 }
809 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-op-elim"; }
810
811 ::llvm::StringRef getDescription() const override { return "Remove redundant operations"; }
812
814 static constexpr ::llvm::StringLiteral getPassName() {
815 return ::llvm::StringLiteral("RedundantOperationEliminationPass");
816 }
817 ::llvm::StringRef getName() const override { return "RedundantOperationEliminationPass"; }
818
820 static bool classof(const ::mlir::Pass *pass) {
821 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
822 }
823
825 std::unique_ptr<::mlir::Pass> clonePass() const override {
826 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
827 }
828
830 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
831 registry.insert<llzk::LLZKDialect>();
832 registry.insert<llzk::boolean::BoolDialect>();
833 registry.insert<llzk::array::ArrayDialect>();
834 registry.insert<llzk::component::StructDialect>();
835 registry.insert<llzk::constrain::ConstrainDialect>();
836 registry.insert<llzk::felt::FeltDialect>();
837 registry.insert<llzk::global::GlobalDialect>();
838 registry.insert<llzk::include::IncludeDialect>();
839 registry.insert<llzk::function::FunctionDialect>();
840 registry.insert<llzk::string::StringDialect>();
841 registry.insert<llzk::polymorphic::PolymorphicDialect>();
842 registry.insert<llzk::undef::UndefDialect>();
843 registry.insert<mlir::arith::ArithDialect>();
844 registry.insert<mlir::scf::SCFDialect>();
845 }
846
850 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
851
852protected:
853};
854
855template <typename DerivedT>
856class RedundantReadAndWriteEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
857public:
858 using Base = RedundantReadAndWriteEliminationPassBase;
859
860 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
861 RedundantReadAndWriteEliminationPassBase(const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
862 RedundantReadAndWriteEliminationPassBase& operator=(const RedundantReadAndWriteEliminationPassBase &) = delete;
863 RedundantReadAndWriteEliminationPassBase(RedundantReadAndWriteEliminationPassBase &&) = delete;
864 RedundantReadAndWriteEliminationPassBase& operator=(RedundantReadAndWriteEliminationPassBase &&) = delete;
865 ~RedundantReadAndWriteEliminationPassBase() = default;
866
868 static constexpr ::llvm::StringLiteral getArgumentName() {
869 return ::llvm::StringLiteral("llzk-duplicate-read-write-elim");
870 }
871 ::llvm::StringRef getArgument() const override { return "llzk-duplicate-read-write-elim"; }
872
873 ::llvm::StringRef getDescription() const override { return "Remove redundant reads and writes"; }
874
876 static constexpr ::llvm::StringLiteral getPassName() {
877 return ::llvm::StringLiteral("RedundantReadAndWriteEliminationPass");
878 }
879 ::llvm::StringRef getName() const override { return "RedundantReadAndWriteEliminationPass"; }
880
882 static bool classof(const ::mlir::Pass *pass) {
883 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
884 }
885
887 std::unique_ptr<::mlir::Pass> clonePass() const override {
888 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
889 }
890
892 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
893 registry.insert<llzk::LLZKDialect>();
894 registry.insert<llzk::boolean::BoolDialect>();
895 registry.insert<llzk::array::ArrayDialect>();
896 registry.insert<llzk::component::StructDialect>();
897 registry.insert<llzk::constrain::ConstrainDialect>();
898 registry.insert<llzk::felt::FeltDialect>();
899 registry.insert<llzk::global::GlobalDialect>();
900 registry.insert<llzk::include::IncludeDialect>();
901 registry.insert<llzk::function::FunctionDialect>();
902 registry.insert<llzk::string::StringDialect>();
903 registry.insert<llzk::polymorphic::PolymorphicDialect>();
904 registry.insert<llzk::undef::UndefDialect>();
905 registry.insert<mlir::arith::ArithDialect>();
906 registry.insert<mlir::scf::SCFDialect>();
907 }
908
912 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
913
914protected:
915};
916
917template <typename DerivedT>
918class UnusedDeclarationEliminationPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
919public:
920 using Base = UnusedDeclarationEliminationPassBase;
921
922 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
923 UnusedDeclarationEliminationPassBase(const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
924 UnusedDeclarationEliminationPassBase& operator=(const UnusedDeclarationEliminationPassBase &) = delete;
925 UnusedDeclarationEliminationPassBase(UnusedDeclarationEliminationPassBase &&) = delete;
926 UnusedDeclarationEliminationPassBase& operator=(UnusedDeclarationEliminationPassBase &&) = delete;
927 ~UnusedDeclarationEliminationPassBase() = default;
928
930 static constexpr ::llvm::StringLiteral getArgumentName() {
931 return ::llvm::StringLiteral("llzk-unused-declaration-elim");
932 }
933 ::llvm::StringRef getArgument() const override { return "llzk-unused-declaration-elim"; }
934
935 ::llvm::StringRef getDescription() const override { return "Remove unused field and struct declarations"; }
936
938 static constexpr ::llvm::StringLiteral getPassName() {
939 return ::llvm::StringLiteral("UnusedDeclarationEliminationPass");
940 }
941 ::llvm::StringRef getName() const override { return "UnusedDeclarationEliminationPass"; }
942
944 static bool classof(const ::mlir::Pass *pass) {
945 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
946 }
947
949 std::unique_ptr<::mlir::Pass> clonePass() const override {
950 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
951 }
952
954 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
955 registry.insert<llzk::LLZKDialect>();
956 registry.insert<llzk::boolean::BoolDialect>();
957 registry.insert<llzk::array::ArrayDialect>();
958 registry.insert<llzk::component::StructDialect>();
959 registry.insert<llzk::constrain::ConstrainDialect>();
960 registry.insert<llzk::felt::FeltDialect>();
961 registry.insert<llzk::global::GlobalDialect>();
962 registry.insert<llzk::include::IncludeDialect>();
963 registry.insert<llzk::function::FunctionDialect>();
964 registry.insert<llzk::string::StringDialect>();
965 registry.insert<llzk::polymorphic::PolymorphicDialect>();
966 registry.insert<llzk::undef::UndefDialect>();
967 registry.insert<mlir::arith::ArithDialect>();
968 registry.insert<mlir::scf::SCFDialect>();
969 }
970
974 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
975
976protected:
977 ::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)};
978};
979#undef GEN_PASS_CLASSES
980#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()