5#define GEN_PASS_DECL_COMPUTECONSTRAINTOPRODUCTPASS
6#define GEN_PASS_DECL_INLINESTRUCTSPASS
7#define GEN_PASS_DECL_PCLLOWERINGPASS
8#define GEN_PASS_DECL_POLYLOWERINGPASS
9#define GEN_PASS_DECL_R1CSLOWERINGPASS
10#define GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
11#define GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
12#define GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
19#ifdef GEN_PASS_DECL_COMPUTECONSTRAINTOPRODUCTPASS
20struct ComputeConstrainToProductPassOptions {
21 std::string rootStruct =
"@Main";
23#undef GEN_PASS_DECL_COMPUTECONSTRAINTOPRODUCTPASS
25#ifdef GEN_PASS_DEF_COMPUTECONSTRAINTOPRODUCTPASS
28template <
typename DerivedT>
29class ComputeConstrainToProductPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
31 using Base = ComputeConstrainToProductPassBase;
33 ComputeConstrainToProductPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
34 ComputeConstrainToProductPassBase(
const ComputeConstrainToProductPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
35 ComputeConstrainToProductPassBase& operator=(
const ComputeConstrainToProductPassBase &) =
delete;
36 ComputeConstrainToProductPassBase(ComputeConstrainToProductPassBase &&) =
delete;
37 ComputeConstrainToProductPassBase& operator=(ComputeConstrainToProductPassBase &&) =
delete;
38 ~ComputeConstrainToProductPassBase() =
default;
41 static constexpr ::llvm::StringLiteral getArgumentName() {
42 return ::llvm::StringLiteral(
"llzk-compute-constrain-to-product");
44 ::llvm::StringRef getArgument()
const override {
return "llzk-compute-constrain-to-product"; }
46 ::llvm::StringRef getDescription()
const override {
return "Replaces separate @compute and @constrain functions in a struct with a single @product function"; }
49 static constexpr ::llvm::StringLiteral getPassName() {
50 return ::llvm::StringLiteral(
"ComputeConstrainToProductPass");
52 ::llvm::StringRef getName()
const override {
return "ComputeConstrainToProductPass"; }
55 static bool classof(const ::mlir::Pass *pass) {
56 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
60 std::unique_ptr<::mlir::Pass> clonePass()
const override {
61 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
65 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
66 registry.insert<llzk::LLZKDialect>();
67 registry.insert<llzk::boolean::BoolDialect>();
68 registry.insert<llzk::array::ArrayDialect>();
69 registry.insert<llzk::component::StructDialect>();
70 registry.insert<llzk::constrain::ConstrainDialect>();
71 registry.insert<llzk::felt::FeltDialect>();
72 registry.insert<llzk::global::GlobalDialect>();
73 registry.insert<llzk::include::IncludeDialect>();
74 registry.insert<llzk::function::FunctionDialect>();
75 registry.insert<llzk::string::StringDialect>();
76 registry.insert<llzk::polymorphic::PolymorphicDialect>();
77 registry.insert<llzk::undef::UndefDialect>();
78 registry.insert<mlir::arith::ArithDialect>();
79 registry.insert<mlir::scf::SCFDialect>();
85 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ComputeConstrainToProductPassBase<DerivedT>)
87 ComputeConstrainToProductPassBase(ComputeConstrainToProductPassOptions options) : ComputeConstrainToProductPassBase() {
88 rootStruct = std::move(options.rootStruct);
91 ::mlir::Pass::Option<std::string> rootStruct{*
this,
"root-struct", ::llvm::cl::desc(
"Root struct at which to start alignment (default to `@Main`)"), ::llvm::cl::init(
"@Main")};
95#undef GEN_PASS_DEF_COMPUTECONSTRAINTOPRODUCTPASS
101#ifdef GEN_PASS_DECL_INLINESTRUCTSPASS
102struct InlineStructsPassOptions {
103 uint64_t maxComplexity = 0;
105#undef GEN_PASS_DECL_INLINESTRUCTSPASS
107#ifdef GEN_PASS_DEF_INLINESTRUCTSPASS
110template <
typename DerivedT>
111class InlineStructsPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
113 using Base = InlineStructsPassBase;
115 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
116 InlineStructsPassBase(
const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
117 InlineStructsPassBase& operator=(
const InlineStructsPassBase &) =
delete;
118 InlineStructsPassBase(InlineStructsPassBase &&) =
delete;
119 InlineStructsPassBase& operator=(InlineStructsPassBase &&) =
delete;
120 ~InlineStructsPassBase() =
default;
123 static constexpr ::llvm::StringLiteral getArgumentName() {
124 return ::llvm::StringLiteral(
"llzk-inline-structs");
126 ::llvm::StringRef getArgument()
const override {
return "llzk-inline-structs"; }
128 ::llvm::StringRef getDescription()
const override {
return "Inlines nested structs (i.e., subcomponents)."; }
131 static constexpr ::llvm::StringLiteral getPassName() {
132 return ::llvm::StringLiteral(
"InlineStructsPass");
134 ::llvm::StringRef getName()
const override {
return "InlineStructsPass"; }
137 static bool classof(const ::mlir::Pass *pass) {
138 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
142 std::unique_ptr<::mlir::Pass> clonePass()
const override {
143 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
147 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
148 registry.insert<llzk::LLZKDialect>();
149 registry.insert<llzk::boolean::BoolDialect>();
150 registry.insert<llzk::array::ArrayDialect>();
151 registry.insert<llzk::component::StructDialect>();
152 registry.insert<llzk::constrain::ConstrainDialect>();
153 registry.insert<llzk::felt::FeltDialect>();
154 registry.insert<llzk::global::GlobalDialect>();
155 registry.insert<llzk::include::IncludeDialect>();
156 registry.insert<llzk::function::FunctionDialect>();
157 registry.insert<llzk::string::StringDialect>();
158 registry.insert<llzk::polymorphic::PolymorphicDialect>();
159 registry.insert<llzk::undef::UndefDialect>();
160 registry.insert<mlir::arith::ArithDialect>();
161 registry.insert<mlir::scf::SCFDialect>();
167 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
169 InlineStructsPassBase(InlineStructsPassOptions options) : InlineStructsPassBase() {
170 maxComplexity = std::move(options.maxComplexity);
173 ::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)};
177#undef GEN_PASS_DEF_INLINESTRUCTSPASS
183#ifdef GEN_PASS_DECL_PCLLOWERINGPASS
184struct PCLLoweringPassOptions {
185 ::llvm::APInt prime = llvm::APInt(31, 2130706433);
187#undef GEN_PASS_DECL_PCLLOWERINGPASS
189#ifdef GEN_PASS_DEF_PCLLOWERINGPASS
192template <
typename DerivedT>
193class PCLLoweringPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
195 using Base = PCLLoweringPassBase;
197 PCLLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
198 PCLLoweringPassBase(
const PCLLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
199 PCLLoweringPassBase& operator=(
const PCLLoweringPassBase &) =
delete;
200 PCLLoweringPassBase(PCLLoweringPassBase &&) =
delete;
201 PCLLoweringPassBase& operator=(PCLLoweringPassBase &&) =
delete;
202 ~PCLLoweringPassBase() =
default;
205 static constexpr ::llvm::StringLiteral getArgumentName() {
206 return ::llvm::StringLiteral(
"llzk-to-pcl");
208 ::llvm::StringRef getArgument()
const override {
return "llzk-to-pcl"; }
210 ::llvm::StringRef getDescription()
const override {
return "Rewrites constraints to be compatible with PCL constraints used by Picus"; }
213 static constexpr ::llvm::StringLiteral getPassName() {
214 return ::llvm::StringLiteral(
"PCLLoweringPass");
216 ::llvm::StringRef getName()
const override {
return "PCLLoweringPass"; }
219 static bool classof(const ::mlir::Pass *pass) {
220 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
224 std::unique_ptr<::mlir::Pass> clonePass()
const override {
225 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
229 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
230 registry.insert<llzk::LLZKDialect>();
231 registry.insert<llzk::boolean::BoolDialect>();
232 registry.insert<llzk::array::ArrayDialect>();
233 registry.insert<llzk::component::StructDialect>();
234 registry.insert<llzk::constrain::ConstrainDialect>();
235 registry.insert<llzk::felt::FeltDialect>();
236 registry.insert<llzk::global::GlobalDialect>();
237 registry.insert<llzk::include::IncludeDialect>();
238 registry.insert<llzk::function::FunctionDialect>();
239 registry.insert<llzk::string::StringDialect>();
240 registry.insert<llzk::polymorphic::PolymorphicDialect>();
241 registry.insert<llzk::undef::UndefDialect>();
242 registry.insert<mlir::arith::ArithDialect>();
243 registry.insert<mlir::scf::SCFDialect>();
249 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PCLLoweringPassBase<DerivedT>)
251 PCLLoweringPassBase(PCLLoweringPassOptions options) : PCLLoweringPassBase() {
252 prime = std::move(options.prime);
255 ::mlir::Pass::Option<::llvm::APInt> prime{*
this,
"prime", ::llvm::cl::desc(
"The prime field that the constraints operate over. This is required by PCL, and the prime must be passed in digits."), ::llvm::cl::init(llvm::APInt(31, 2130706433))};
259#undef GEN_PASS_DEF_PCLLOWERINGPASS
265#ifdef GEN_PASS_DECL_POLYLOWERINGPASS
266struct PolyLoweringPassOptions {
267 unsigned maxDegree = 2;
269#undef GEN_PASS_DECL_POLYLOWERINGPASS
271#ifdef GEN_PASS_DEF_POLYLOWERINGPASS
274template <
typename DerivedT>
275class PolyLoweringPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
277 using Base = PolyLoweringPassBase;
279 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
280 PolyLoweringPassBase(
const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
281 PolyLoweringPassBase& operator=(
const PolyLoweringPassBase &) =
delete;
282 PolyLoweringPassBase(PolyLoweringPassBase &&) =
delete;
283 PolyLoweringPassBase& operator=(PolyLoweringPassBase &&) =
delete;
284 ~PolyLoweringPassBase() =
default;
287 static constexpr ::llvm::StringLiteral getArgumentName() {
288 return ::llvm::StringLiteral(
"llzk-poly-lowering-pass");
290 ::llvm::StringRef getArgument()
const override {
return "llzk-poly-lowering-pass"; }
292 ::llvm::StringRef getDescription()
const override {
return "Lowers the degree of all polynomial equations to a specified maximum"; }
295 static constexpr ::llvm::StringLiteral getPassName() {
296 return ::llvm::StringLiteral(
"PolyLoweringPass");
298 ::llvm::StringRef getName()
const override {
return "PolyLoweringPass"; }
301 static bool classof(const ::mlir::Pass *pass) {
302 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
306 std::unique_ptr<::mlir::Pass> clonePass()
const override {
307 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
311 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
312 registry.insert<llzk::LLZKDialect>();
313 registry.insert<llzk::boolean::BoolDialect>();
314 registry.insert<llzk::array::ArrayDialect>();
315 registry.insert<llzk::component::StructDialect>();
316 registry.insert<llzk::constrain::ConstrainDialect>();
317 registry.insert<llzk::felt::FeltDialect>();
318 registry.insert<llzk::global::GlobalDialect>();
319 registry.insert<llzk::include::IncludeDialect>();
320 registry.insert<llzk::function::FunctionDialect>();
321 registry.insert<llzk::string::StringDialect>();
322 registry.insert<llzk::polymorphic::PolymorphicDialect>();
323 registry.insert<llzk::undef::UndefDialect>();
324 registry.insert<mlir::arith::ArithDialect>();
325 registry.insert<mlir::scf::SCFDialect>();
331 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
333 PolyLoweringPassBase(PolyLoweringPassOptions options) : PolyLoweringPassBase() {
334 maxDegree = std::move(options.maxDegree);
337 ::mlir::Pass::Option<unsigned> maxDegree{*
this,
"max-degree", ::llvm::cl::desc(
"Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
341#undef GEN_PASS_DEF_POLYLOWERINGPASS
347#ifdef GEN_PASS_DECL_R1CSLOWERINGPASS
348#undef GEN_PASS_DECL_R1CSLOWERINGPASS
350#ifdef GEN_PASS_DEF_R1CSLOWERINGPASS
353template <
typename DerivedT>
354class R1CSLoweringPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
356 using Base = R1CSLoweringPassBase;
358 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
359 R1CSLoweringPassBase(
const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
360 R1CSLoweringPassBase& operator=(
const R1CSLoweringPassBase &) =
delete;
361 R1CSLoweringPassBase(R1CSLoweringPassBase &&) =
delete;
362 R1CSLoweringPassBase& operator=(R1CSLoweringPassBase &&) =
delete;
363 ~R1CSLoweringPassBase() =
default;
366 static constexpr ::llvm::StringLiteral getArgumentName() {
367 return ::llvm::StringLiteral(
"llzk-r1cs-lowering");
369 ::llvm::StringRef getArgument()
const override {
return "llzk-r1cs-lowering"; }
371 ::llvm::StringRef getDescription()
const override {
return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
374 static constexpr ::llvm::StringLiteral getPassName() {
375 return ::llvm::StringLiteral(
"R1CSLoweringPass");
377 ::llvm::StringRef getName()
const override {
return "R1CSLoweringPass"; }
380 static bool classof(const ::mlir::Pass *pass) {
381 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
385 std::unique_ptr<::mlir::Pass> clonePass()
const override {
386 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
390 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
391 registry.insert<llzk::LLZKDialect>();
392 registry.insert<llzk::boolean::BoolDialect>();
393 registry.insert<llzk::array::ArrayDialect>();
394 registry.insert<llzk::component::StructDialect>();
395 registry.insert<llzk::constrain::ConstrainDialect>();
396 registry.insert<llzk::felt::FeltDialect>();
397 registry.insert<llzk::global::GlobalDialect>();
398 registry.insert<llzk::include::IncludeDialect>();
399 registry.insert<llzk::function::FunctionDialect>();
400 registry.insert<llzk::string::StringDialect>();
401 registry.insert<llzk::polymorphic::PolymorphicDialect>();
402 registry.insert<llzk::undef::UndefDialect>();
403 registry.insert<mlir::arith::ArithDialect>();
404 registry.insert<mlir::scf::SCFDialect>();
410 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
416#undef GEN_PASS_DEF_R1CSLOWERINGPASS
422#ifdef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
423#undef GEN_PASS_DECL_REDUNDANTOPERATIONELIMINATIONPASS
425#ifdef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
428template <
typename DerivedT>
429class RedundantOperationEliminationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
431 using Base = RedundantOperationEliminationPassBase;
433 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
434 RedundantOperationEliminationPassBase(
const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
435 RedundantOperationEliminationPassBase& operator=(
const RedundantOperationEliminationPassBase &) =
delete;
436 RedundantOperationEliminationPassBase(RedundantOperationEliminationPassBase &&) =
delete;
437 RedundantOperationEliminationPassBase& operator=(RedundantOperationEliminationPassBase &&) =
delete;
438 ~RedundantOperationEliminationPassBase() =
default;
441 static constexpr ::llvm::StringLiteral getArgumentName() {
442 return ::llvm::StringLiteral(
"llzk-duplicate-op-elim");
444 ::llvm::StringRef getArgument()
const override {
return "llzk-duplicate-op-elim"; }
446 ::llvm::StringRef getDescription()
const override {
return "Remove redundant operations"; }
449 static constexpr ::llvm::StringLiteral getPassName() {
450 return ::llvm::StringLiteral(
"RedundantOperationEliminationPass");
452 ::llvm::StringRef getName()
const override {
return "RedundantOperationEliminationPass"; }
455 static bool classof(const ::mlir::Pass *pass) {
456 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
460 std::unique_ptr<::mlir::Pass> clonePass()
const override {
461 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
465 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
466 registry.insert<llzk::LLZKDialect>();
467 registry.insert<llzk::boolean::BoolDialect>();
468 registry.insert<llzk::array::ArrayDialect>();
469 registry.insert<llzk::component::StructDialect>();
470 registry.insert<llzk::constrain::ConstrainDialect>();
471 registry.insert<llzk::felt::FeltDialect>();
472 registry.insert<llzk::global::GlobalDialect>();
473 registry.insert<llzk::include::IncludeDialect>();
474 registry.insert<llzk::function::FunctionDialect>();
475 registry.insert<llzk::string::StringDialect>();
476 registry.insert<llzk::polymorphic::PolymorphicDialect>();
477 registry.insert<llzk::undef::UndefDialect>();
478 registry.insert<mlir::arith::ArithDialect>();
479 registry.insert<mlir::scf::SCFDialect>();
485 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
491#undef GEN_PASS_DEF_REDUNDANTOPERATIONELIMINATIONPASS
497#ifdef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
498#undef GEN_PASS_DECL_REDUNDANTREADANDWRITEELIMINATIONPASS
500#ifdef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
503template <
typename DerivedT>
504class RedundantReadAndWriteEliminationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
506 using Base = RedundantReadAndWriteEliminationPassBase;
508 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
509 RedundantReadAndWriteEliminationPassBase(
const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
510 RedundantReadAndWriteEliminationPassBase& operator=(
const RedundantReadAndWriteEliminationPassBase &) =
delete;
511 RedundantReadAndWriteEliminationPassBase(RedundantReadAndWriteEliminationPassBase &&) =
delete;
512 RedundantReadAndWriteEliminationPassBase& operator=(RedundantReadAndWriteEliminationPassBase &&) =
delete;
513 ~RedundantReadAndWriteEliminationPassBase() =
default;
516 static constexpr ::llvm::StringLiteral getArgumentName() {
517 return ::llvm::StringLiteral(
"llzk-duplicate-read-write-elim");
519 ::llvm::StringRef getArgument()
const override {
return "llzk-duplicate-read-write-elim"; }
521 ::llvm::StringRef getDescription()
const override {
return "Remove redundant reads and writes"; }
524 static constexpr ::llvm::StringLiteral getPassName() {
525 return ::llvm::StringLiteral(
"RedundantReadAndWriteEliminationPass");
527 ::llvm::StringRef getName()
const override {
return "RedundantReadAndWriteEliminationPass"; }
530 static bool classof(const ::mlir::Pass *pass) {
531 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
535 std::unique_ptr<::mlir::Pass> clonePass()
const override {
536 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
540 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
541 registry.insert<llzk::LLZKDialect>();
542 registry.insert<llzk::boolean::BoolDialect>();
543 registry.insert<llzk::array::ArrayDialect>();
544 registry.insert<llzk::component::StructDialect>();
545 registry.insert<llzk::constrain::ConstrainDialect>();
546 registry.insert<llzk::felt::FeltDialect>();
547 registry.insert<llzk::global::GlobalDialect>();
548 registry.insert<llzk::include::IncludeDialect>();
549 registry.insert<llzk::function::FunctionDialect>();
550 registry.insert<llzk::string::StringDialect>();
551 registry.insert<llzk::polymorphic::PolymorphicDialect>();
552 registry.insert<llzk::undef::UndefDialect>();
553 registry.insert<mlir::arith::ArithDialect>();
554 registry.insert<mlir::scf::SCFDialect>();
560 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
566#undef GEN_PASS_DEF_REDUNDANTREADANDWRITEELIMINATIONPASS
572#ifdef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
573struct UnusedDeclarationEliminationPassOptions {
574 bool removeStructs =
false;
576#undef GEN_PASS_DECL_UNUSEDDECLARATIONELIMINATIONPASS
578#ifdef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
581template <
typename DerivedT>
582class UnusedDeclarationEliminationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
584 using Base = UnusedDeclarationEliminationPassBase;
586 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
587 UnusedDeclarationEliminationPassBase(
const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
588 UnusedDeclarationEliminationPassBase& operator=(
const UnusedDeclarationEliminationPassBase &) =
delete;
589 UnusedDeclarationEliminationPassBase(UnusedDeclarationEliminationPassBase &&) =
delete;
590 UnusedDeclarationEliminationPassBase& operator=(UnusedDeclarationEliminationPassBase &&) =
delete;
591 ~UnusedDeclarationEliminationPassBase() =
default;
594 static constexpr ::llvm::StringLiteral getArgumentName() {
595 return ::llvm::StringLiteral(
"llzk-unused-declaration-elim");
597 ::llvm::StringRef getArgument()
const override {
return "llzk-unused-declaration-elim"; }
599 ::llvm::StringRef getDescription()
const override {
return "Remove unused field and struct declarations"; }
602 static constexpr ::llvm::StringLiteral getPassName() {
603 return ::llvm::StringLiteral(
"UnusedDeclarationEliminationPass");
605 ::llvm::StringRef getName()
const override {
return "UnusedDeclarationEliminationPass"; }
608 static bool classof(const ::mlir::Pass *pass) {
609 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
613 std::unique_ptr<::mlir::Pass> clonePass()
const override {
614 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
618 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
619 registry.insert<llzk::LLZKDialect>();
620 registry.insert<llzk::boolean::BoolDialect>();
621 registry.insert<llzk::array::ArrayDialect>();
622 registry.insert<llzk::component::StructDialect>();
623 registry.insert<llzk::constrain::ConstrainDialect>();
624 registry.insert<llzk::felt::FeltDialect>();
625 registry.insert<llzk::global::GlobalDialect>();
626 registry.insert<llzk::include::IncludeDialect>();
627 registry.insert<llzk::function::FunctionDialect>();
628 registry.insert<llzk::string::StringDialect>();
629 registry.insert<llzk::polymorphic::PolymorphicDialect>();
630 registry.insert<llzk::undef::UndefDialect>();
631 registry.insert<mlir::arith::ArithDialect>();
632 registry.insert<mlir::scf::SCFDialect>();
638 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
640 UnusedDeclarationEliminationPassBase(UnusedDeclarationEliminationPassOptions options) : UnusedDeclarationEliminationPassBase() {
641 removeStructs = std::move(options.removeStructs);
644 ::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)};
648#undef GEN_PASS_DEF_UNUSEDDECLARATIONELIMINATIONPASS
650#ifdef GEN_PASS_REGISTRATION
657 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
664 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
674 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
681 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
691 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
692 return llzk::createPCLLoweringPass();
698 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
699 return llzk::createPCLLoweringPass();
708 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
715 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
725 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
732 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
742 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
749 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
759 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
766 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
776 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
783 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
802#undef GEN_PASS_REGISTRATION
805#ifdef GEN_PASS_CLASSES
807template <
typename DerivedT>
808class ComputeConstrainToProductPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
810 using Base = ComputeConstrainToProductPassBase;
812 ComputeConstrainToProductPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
813 ComputeConstrainToProductPassBase(
const ComputeConstrainToProductPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
814 ComputeConstrainToProductPassBase& operator=(
const ComputeConstrainToProductPassBase &) =
delete;
815 ComputeConstrainToProductPassBase(ComputeConstrainToProductPassBase &&) =
delete;
816 ComputeConstrainToProductPassBase& operator=(ComputeConstrainToProductPassBase &&) =
delete;
817 ~ComputeConstrainToProductPassBase() =
default;
820 static constexpr ::llvm::StringLiteral getArgumentName() {
821 return ::llvm::StringLiteral(
"llzk-compute-constrain-to-product");
823 ::llvm::StringRef getArgument()
const override {
return "llzk-compute-constrain-to-product"; }
825 ::llvm::StringRef getDescription()
const override {
return "Replaces separate @compute and @constrain functions in a struct with a single @product function"; }
828 static constexpr ::llvm::StringLiteral getPassName() {
829 return ::llvm::StringLiteral(
"ComputeConstrainToProductPass");
831 ::llvm::StringRef getName()
const override {
return "ComputeConstrainToProductPass"; }
834 static bool classof(const ::mlir::Pass *pass) {
835 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
839 std::unique_ptr<::mlir::Pass> clonePass()
const override {
840 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
844 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
845 registry.insert<llzk::LLZKDialect>();
846 registry.insert<llzk::boolean::BoolDialect>();
847 registry.insert<llzk::array::ArrayDialect>();
848 registry.insert<llzk::component::StructDialect>();
849 registry.insert<llzk::constrain::ConstrainDialect>();
850 registry.insert<llzk::felt::FeltDialect>();
851 registry.insert<llzk::global::GlobalDialect>();
852 registry.insert<llzk::include::IncludeDialect>();
853 registry.insert<llzk::function::FunctionDialect>();
854 registry.insert<llzk::string::StringDialect>();
855 registry.insert<llzk::polymorphic::PolymorphicDialect>();
856 registry.insert<llzk::undef::UndefDialect>();
857 registry.insert<mlir::arith::ArithDialect>();
858 registry.insert<mlir::scf::SCFDialect>();
864 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ComputeConstrainToProductPassBase<DerivedT>)
867 ::mlir::Pass::Option<std::string> rootStruct{*
this,
"root-struct", ::llvm::cl::desc(
"Root struct at which to start alignment (default to `@Main`)"), ::llvm::cl::init(
"@Main")};
870template <
typename DerivedT>
871class InlineStructsPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
873 using Base = InlineStructsPassBase;
875 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
876 InlineStructsPassBase(
const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
877 InlineStructsPassBase& operator=(
const InlineStructsPassBase &) =
delete;
878 InlineStructsPassBase(InlineStructsPassBase &&) =
delete;
879 InlineStructsPassBase& operator=(InlineStructsPassBase &&) =
delete;
880 ~InlineStructsPassBase() =
default;
883 static constexpr ::llvm::StringLiteral getArgumentName() {
884 return ::llvm::StringLiteral(
"llzk-inline-structs");
886 ::llvm::StringRef getArgument()
const override {
return "llzk-inline-structs"; }
888 ::llvm::StringRef getDescription()
const override {
return "Inlines nested structs (i.e., subcomponents)."; }
891 static constexpr ::llvm::StringLiteral getPassName() {
892 return ::llvm::StringLiteral(
"InlineStructsPass");
894 ::llvm::StringRef getName()
const override {
return "InlineStructsPass"; }
897 static bool classof(const ::mlir::Pass *pass) {
898 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
902 std::unique_ptr<::mlir::Pass> clonePass()
const override {
903 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
907 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
908 registry.insert<llzk::LLZKDialect>();
909 registry.insert<llzk::boolean::BoolDialect>();
910 registry.insert<llzk::array::ArrayDialect>();
911 registry.insert<llzk::component::StructDialect>();
912 registry.insert<llzk::constrain::ConstrainDialect>();
913 registry.insert<llzk::felt::FeltDialect>();
914 registry.insert<llzk::global::GlobalDialect>();
915 registry.insert<llzk::include::IncludeDialect>();
916 registry.insert<llzk::function::FunctionDialect>();
917 registry.insert<llzk::string::StringDialect>();
918 registry.insert<llzk::polymorphic::PolymorphicDialect>();
919 registry.insert<llzk::undef::UndefDialect>();
920 registry.insert<mlir::arith::ArithDialect>();
921 registry.insert<mlir::scf::SCFDialect>();
927 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
930 ::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)};
933template <
typename DerivedT>
934class PCLLoweringPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
936 using Base = PCLLoweringPassBase;
938 PCLLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
939 PCLLoweringPassBase(
const PCLLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
940 PCLLoweringPassBase& operator=(
const PCLLoweringPassBase &) =
delete;
941 PCLLoweringPassBase(PCLLoweringPassBase &&) =
delete;
942 PCLLoweringPassBase& operator=(PCLLoweringPassBase &&) =
delete;
943 ~PCLLoweringPassBase() =
default;
946 static constexpr ::llvm::StringLiteral getArgumentName() {
947 return ::llvm::StringLiteral(
"llzk-to-pcl");
949 ::llvm::StringRef getArgument()
const override {
return "llzk-to-pcl"; }
951 ::llvm::StringRef getDescription()
const override {
return "Rewrites constraints to be compatible with PCL constraints used by Picus"; }
954 static constexpr ::llvm::StringLiteral getPassName() {
955 return ::llvm::StringLiteral(
"PCLLoweringPass");
957 ::llvm::StringRef getName()
const override {
return "PCLLoweringPass"; }
960 static bool classof(const ::mlir::Pass *pass) {
961 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
965 std::unique_ptr<::mlir::Pass> clonePass()
const override {
966 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
970 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
971 registry.insert<llzk::LLZKDialect>();
972 registry.insert<llzk::boolean::BoolDialect>();
973 registry.insert<llzk::array::ArrayDialect>();
974 registry.insert<llzk::component::StructDialect>();
975 registry.insert<llzk::constrain::ConstrainDialect>();
976 registry.insert<llzk::felt::FeltDialect>();
977 registry.insert<llzk::global::GlobalDialect>();
978 registry.insert<llzk::include::IncludeDialect>();
979 registry.insert<llzk::function::FunctionDialect>();
980 registry.insert<llzk::string::StringDialect>();
981 registry.insert<llzk::polymorphic::PolymorphicDialect>();
982 registry.insert<llzk::undef::UndefDialect>();
983 registry.insert<mlir::arith::ArithDialect>();
984 registry.insert<mlir::scf::SCFDialect>();
990 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PCLLoweringPassBase<DerivedT>)
993 ::mlir::Pass::Option<::llvm::APInt> prime{*
this,
"prime", ::llvm::cl::desc(
"The prime field that the constraints operate over. This is required by PCL, and the prime must be passed in digits."), ::llvm::cl::init(llvm::APInt(31, 2130706433))};
996template <
typename DerivedT>
997class PolyLoweringPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
999 using Base = PolyLoweringPassBase;
1001 PolyLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
1002 PolyLoweringPassBase(
const PolyLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
1003 PolyLoweringPassBase& operator=(
const PolyLoweringPassBase &) =
delete;
1004 PolyLoweringPassBase(PolyLoweringPassBase &&) =
delete;
1005 PolyLoweringPassBase& operator=(PolyLoweringPassBase &&) =
delete;
1006 ~PolyLoweringPassBase() =
default;
1009 static constexpr ::llvm::StringLiteral getArgumentName() {
1010 return ::llvm::StringLiteral(
"llzk-poly-lowering-pass");
1012 ::llvm::StringRef getArgument()
const override {
return "llzk-poly-lowering-pass"; }
1014 ::llvm::StringRef getDescription()
const override {
return "Lowers the degree of all polynomial equations to a specified maximum"; }
1017 static constexpr ::llvm::StringLiteral getPassName() {
1018 return ::llvm::StringLiteral(
"PolyLoweringPass");
1020 ::llvm::StringRef getName()
const override {
return "PolyLoweringPass"; }
1023 static bool classof(const ::mlir::Pass *pass) {
1024 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
1028 std::unique_ptr<::mlir::Pass> clonePass()
const override {
1029 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
1033 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
1034 registry.insert<llzk::LLZKDialect>();
1035 registry.insert<llzk::boolean::BoolDialect>();
1036 registry.insert<llzk::array::ArrayDialect>();
1037 registry.insert<llzk::component::StructDialect>();
1038 registry.insert<llzk::constrain::ConstrainDialect>();
1039 registry.insert<llzk::felt::FeltDialect>();
1040 registry.insert<llzk::global::GlobalDialect>();
1041 registry.insert<llzk::include::IncludeDialect>();
1042 registry.insert<llzk::function::FunctionDialect>();
1043 registry.insert<llzk::string::StringDialect>();
1044 registry.insert<llzk::polymorphic::PolymorphicDialect>();
1045 registry.insert<llzk::undef::UndefDialect>();
1046 registry.insert<mlir::arith::ArithDialect>();
1047 registry.insert<mlir::scf::SCFDialect>();
1053 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PolyLoweringPassBase<DerivedT>)
1056 ::mlir::Pass::Option<unsigned> maxDegree{*
this,
"max-degree", ::llvm::cl::desc(
"Maximum degree of constraint polynomials (default 2, minimum 2)"), ::llvm::cl::init(2)};
1059template <
typename DerivedT>
1060class R1CSLoweringPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
1062 using Base = R1CSLoweringPassBase;
1064 R1CSLoweringPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
1065 R1CSLoweringPassBase(
const R1CSLoweringPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
1066 R1CSLoweringPassBase& operator=(
const R1CSLoweringPassBase &) =
delete;
1067 R1CSLoweringPassBase(R1CSLoweringPassBase &&) =
delete;
1068 R1CSLoweringPassBase& operator=(R1CSLoweringPassBase &&) =
delete;
1069 ~R1CSLoweringPassBase() =
default;
1072 static constexpr ::llvm::StringLiteral getArgumentName() {
1073 return ::llvm::StringLiteral(
"llzk-r1cs-lowering");
1075 ::llvm::StringRef getArgument()
const override {
return "llzk-r1cs-lowering"; }
1077 ::llvm::StringRef getDescription()
const override {
return "Rewrites constraints to be compatible with R1CS constraints i.e a*b - c = 0"; }
1080 static constexpr ::llvm::StringLiteral getPassName() {
1081 return ::llvm::StringLiteral(
"R1CSLoweringPass");
1083 ::llvm::StringRef getName()
const override {
return "R1CSLoweringPass"; }
1086 static bool classof(const ::mlir::Pass *pass) {
1087 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
1091 std::unique_ptr<::mlir::Pass> clonePass()
const override {
1092 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
1096 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
1097 registry.insert<llzk::LLZKDialect>();
1098 registry.insert<llzk::boolean::BoolDialect>();
1099 registry.insert<llzk::array::ArrayDialect>();
1100 registry.insert<llzk::component::StructDialect>();
1101 registry.insert<llzk::constrain::ConstrainDialect>();
1102 registry.insert<llzk::felt::FeltDialect>();
1103 registry.insert<llzk::global::GlobalDialect>();
1104 registry.insert<llzk::include::IncludeDialect>();
1105 registry.insert<llzk::function::FunctionDialect>();
1106 registry.insert<llzk::string::StringDialect>();
1107 registry.insert<llzk::polymorphic::PolymorphicDialect>();
1108 registry.insert<llzk::undef::UndefDialect>();
1109 registry.insert<mlir::arith::ArithDialect>();
1110 registry.insert<mlir::scf::SCFDialect>();
1116 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(R1CSLoweringPassBase<DerivedT>)
1121template <
typename DerivedT>
1122class RedundantOperationEliminationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
1124 using Base = RedundantOperationEliminationPassBase;
1126 RedundantOperationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
1127 RedundantOperationEliminationPassBase(
const RedundantOperationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
1128 RedundantOperationEliminationPassBase& operator=(
const RedundantOperationEliminationPassBase &) =
delete;
1129 RedundantOperationEliminationPassBase(RedundantOperationEliminationPassBase &&) =
delete;
1130 RedundantOperationEliminationPassBase& operator=(RedundantOperationEliminationPassBase &&) =
delete;
1131 ~RedundantOperationEliminationPassBase() =
default;
1134 static constexpr ::llvm::StringLiteral getArgumentName() {
1135 return ::llvm::StringLiteral(
"llzk-duplicate-op-elim");
1137 ::llvm::StringRef getArgument()
const override {
return "llzk-duplicate-op-elim"; }
1139 ::llvm::StringRef getDescription()
const override {
return "Remove redundant operations"; }
1142 static constexpr ::llvm::StringLiteral getPassName() {
1143 return ::llvm::StringLiteral(
"RedundantOperationEliminationPass");
1145 ::llvm::StringRef getName()
const override {
return "RedundantOperationEliminationPass"; }
1148 static bool classof(const ::mlir::Pass *pass) {
1149 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
1153 std::unique_ptr<::mlir::Pass> clonePass()
const override {
1154 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
1158 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
1159 registry.insert<llzk::LLZKDialect>();
1160 registry.insert<llzk::boolean::BoolDialect>();
1161 registry.insert<llzk::array::ArrayDialect>();
1162 registry.insert<llzk::component::StructDialect>();
1163 registry.insert<llzk::constrain::ConstrainDialect>();
1164 registry.insert<llzk::felt::FeltDialect>();
1165 registry.insert<llzk::global::GlobalDialect>();
1166 registry.insert<llzk::include::IncludeDialect>();
1167 registry.insert<llzk::function::FunctionDialect>();
1168 registry.insert<llzk::string::StringDialect>();
1169 registry.insert<llzk::polymorphic::PolymorphicDialect>();
1170 registry.insert<llzk::undef::UndefDialect>();
1171 registry.insert<mlir::arith::ArithDialect>();
1172 registry.insert<mlir::scf::SCFDialect>();
1178 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantOperationEliminationPassBase<DerivedT>)
1183template <
typename DerivedT>
1184class RedundantReadAndWriteEliminationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
1186 using Base = RedundantReadAndWriteEliminationPassBase;
1188 RedundantReadAndWriteEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
1189 RedundantReadAndWriteEliminationPassBase(
const RedundantReadAndWriteEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
1190 RedundantReadAndWriteEliminationPassBase& operator=(
const RedundantReadAndWriteEliminationPassBase &) =
delete;
1191 RedundantReadAndWriteEliminationPassBase(RedundantReadAndWriteEliminationPassBase &&) =
delete;
1192 RedundantReadAndWriteEliminationPassBase& operator=(RedundantReadAndWriteEliminationPassBase &&) =
delete;
1193 ~RedundantReadAndWriteEliminationPassBase() =
default;
1196 static constexpr ::llvm::StringLiteral getArgumentName() {
1197 return ::llvm::StringLiteral(
"llzk-duplicate-read-write-elim");
1199 ::llvm::StringRef getArgument()
const override {
return "llzk-duplicate-read-write-elim"; }
1201 ::llvm::StringRef getDescription()
const override {
return "Remove redundant reads and writes"; }
1204 static constexpr ::llvm::StringLiteral getPassName() {
1205 return ::llvm::StringLiteral(
"RedundantReadAndWriteEliminationPass");
1207 ::llvm::StringRef getName()
const override {
return "RedundantReadAndWriteEliminationPass"; }
1210 static bool classof(const ::mlir::Pass *pass) {
1211 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
1215 std::unique_ptr<::mlir::Pass> clonePass()
const override {
1216 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
1220 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
1221 registry.insert<llzk::LLZKDialect>();
1222 registry.insert<llzk::boolean::BoolDialect>();
1223 registry.insert<llzk::array::ArrayDialect>();
1224 registry.insert<llzk::component::StructDialect>();
1225 registry.insert<llzk::constrain::ConstrainDialect>();
1226 registry.insert<llzk::felt::FeltDialect>();
1227 registry.insert<llzk::global::GlobalDialect>();
1228 registry.insert<llzk::include::IncludeDialect>();
1229 registry.insert<llzk::function::FunctionDialect>();
1230 registry.insert<llzk::string::StringDialect>();
1231 registry.insert<llzk::polymorphic::PolymorphicDialect>();
1232 registry.insert<llzk::undef::UndefDialect>();
1233 registry.insert<mlir::arith::ArithDialect>();
1234 registry.insert<mlir::scf::SCFDialect>();
1240 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(RedundantReadAndWriteEliminationPassBase<DerivedT>)
1245template <
typename DerivedT>
1246class UnusedDeclarationEliminationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
1248 using Base = UnusedDeclarationEliminationPassBase;
1250 UnusedDeclarationEliminationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
1251 UnusedDeclarationEliminationPassBase(
const UnusedDeclarationEliminationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
1252 UnusedDeclarationEliminationPassBase& operator=(
const UnusedDeclarationEliminationPassBase &) =
delete;
1253 UnusedDeclarationEliminationPassBase(UnusedDeclarationEliminationPassBase &&) =
delete;
1254 UnusedDeclarationEliminationPassBase& operator=(UnusedDeclarationEliminationPassBase &&) =
delete;
1255 ~UnusedDeclarationEliminationPassBase() =
default;
1258 static constexpr ::llvm::StringLiteral getArgumentName() {
1259 return ::llvm::StringLiteral(
"llzk-unused-declaration-elim");
1261 ::llvm::StringRef getArgument()
const override {
return "llzk-unused-declaration-elim"; }
1263 ::llvm::StringRef getDescription()
const override {
return "Remove unused field and struct declarations"; }
1266 static constexpr ::llvm::StringLiteral getPassName() {
1267 return ::llvm::StringLiteral(
"UnusedDeclarationEliminationPass");
1269 ::llvm::StringRef getName()
const override {
return "UnusedDeclarationEliminationPass"; }
1272 static bool classof(const ::mlir::Pass *pass) {
1273 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
1277 std::unique_ptr<::mlir::Pass> clonePass()
const override {
1278 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
1282 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
1283 registry.insert<llzk::LLZKDialect>();
1284 registry.insert<llzk::boolean::BoolDialect>();
1285 registry.insert<llzk::array::ArrayDialect>();
1286 registry.insert<llzk::component::StructDialect>();
1287 registry.insert<llzk::constrain::ConstrainDialect>();
1288 registry.insert<llzk::felt::FeltDialect>();
1289 registry.insert<llzk::global::GlobalDialect>();
1290 registry.insert<llzk::include::IncludeDialect>();
1291 registry.insert<llzk::function::FunctionDialect>();
1292 registry.insert<llzk::string::StringDialect>();
1293 registry.insert<llzk::polymorphic::PolymorphicDialect>();
1294 registry.insert<llzk::undef::UndefDialect>();
1295 registry.insert<mlir::arith::ArithDialect>();
1296 registry.insert<mlir::scf::SCFDialect>();
1302 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(UnusedDeclarationEliminationPassBase<DerivedT>)
1305 ::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)};
1307#undef GEN_PASS_CLASSES
void registerTransformationPasses()
void registerUnusedDeclarationEliminationPassPass()
std::unique_ptr< mlir::Pass > createRedundantOperationEliminationPass()
void registerR1CSLoweringPass()
void registerRedundantOperationEliminationPass()
std::unique_ptr< mlir::Pass > createComputeConstrainToProductPass()
void registerPolyLoweringPassPass()
void registerUnusedDeclarationEliminationPass()
void registerComputeConstrainToProductPassPass()
void registerRedundantOperationEliminationPassPass()
void registerPCLLoweringPass()
std::unique_ptr< mlir::Pass > createRedundantReadAndWriteEliminationPass()
void registerR1CSLoweringPassPass()
void registerInlineStructsPassPass()
std::unique_ptr< mlir::Pass > createUnusedDeclarationEliminationPass()
void registerComputeConstrainToProductPass()
std::unique_ptr< mlir::Pass > createPolyLoweringPass()
void registerRedundantReadAndWriteEliminationPass()
void registerPolyLoweringPass()
void registerRedundantReadAndWriteEliminationPassPass()
void registerPCLLoweringPassPass()
std::unique_ptr< mlir::Pass > createInlineStructsPass()
std::unique_ptr< mlir::Pass > createR1CSLoweringPass()
void registerInlineStructsPass()