5#define GEN_PASS_DECL_CALLGRAPHPRINTERPASS
6#define GEN_PASS_DECL_CALLGRAPHSCCSPRINTERPASS
7#define GEN_PASS_DECL_CONSTRAINTDEPENDENCYGRAPHPRINTERPASS
8#define GEN_PASS_DECL_INTERVALANALYSISPRINTERPASS
9#define GEN_PASS_DECL_SYMBOLDEFTREEPRINTERPASS
10#define GEN_PASS_DECL_SYMBOLUSEGRAPHPRINTERPASS
17#ifdef GEN_PASS_DECL_CALLGRAPHPRINTERPASS
18#undef GEN_PASS_DECL_CALLGRAPHPRINTERPASS
20#ifdef GEN_PASS_DEF_CALLGRAPHPRINTERPASS
23template <
typename DerivedT>
24class CallGraphPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
26 using Base = CallGraphPrinterPassBase;
28 CallGraphPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
29 CallGraphPrinterPassBase(
const CallGraphPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
32 static constexpr ::llvm::StringLiteral getArgumentName() {
33 return ::llvm::StringLiteral(
"llzk-print-call-graph");
35 ::llvm::StringRef getArgument()
const override {
return "llzk-print-call-graph"; }
37 ::llvm::StringRef getDescription()
const override {
return "Print the LLZK module's call graph."; }
40 static constexpr ::llvm::StringLiteral getPassName() {
41 return ::llvm::StringLiteral(
"CallGraphPrinterPass");
43 ::llvm::StringRef getName()
const override {
return "CallGraphPrinterPass"; }
46 static bool classof(const ::mlir::Pass *pass) {
47 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
51 std::unique_ptr<::mlir::Pass> clonePass()
const override {
52 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
56 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
57 registry.insert<llzk::LLZKDialect>();
58 registry.insert<llzk::boolean::BoolDialect>();
59 registry.insert<llzk::array::ArrayDialect>();
60 registry.insert<llzk::component::StructDialect>();
61 registry.insert<llzk::constrain::ConstrainDialect>();
62 registry.insert<llzk::felt::FeltDialect>();
63 registry.insert<llzk::global::GlobalDialect>();
64 registry.insert<llzk::include::IncludeDialect>();
65 registry.insert<llzk::function::FunctionDialect>();
66 registry.insert<llzk::string::StringDialect>();
67 registry.insert<llzk::polymorphic::PolymorphicDialect>();
68 registry.insert<llzk::undef::UndefDialect>();
69 registry.insert<mlir::arith::ArithDialect>();
70 registry.insert<mlir::scf::SCFDialect>();
76 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CallGraphPrinterPassBase<DerivedT>)
82#undef GEN_PASS_DEF_CALLGRAPHPRINTERPASS
88#ifdef GEN_PASS_DECL_CALLGRAPHSCCSPRINTERPASS
89#undef GEN_PASS_DECL_CALLGRAPHSCCSPRINTERPASS
91#ifdef GEN_PASS_DEF_CALLGRAPHSCCSPRINTERPASS
94template <
typename DerivedT>
95class CallGraphSCCsPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
97 using Base = CallGraphSCCsPrinterPassBase;
99 CallGraphSCCsPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
100 CallGraphSCCsPrinterPassBase(
const CallGraphSCCsPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
103 static constexpr ::llvm::StringLiteral getArgumentName() {
104 return ::llvm::StringLiteral(
"llzk-print-call-graph-sccs");
106 ::llvm::StringRef getArgument()
const override {
return "llzk-print-call-graph-sccs"; }
108 ::llvm::StringRef getDescription()
const override {
return "Print the SCCs from the LLZK module's call graph."; }
111 static constexpr ::llvm::StringLiteral getPassName() {
112 return ::llvm::StringLiteral(
"CallGraphSCCsPrinterPass");
114 ::llvm::StringRef getName()
const override {
return "CallGraphSCCsPrinterPass"; }
117 static bool classof(const ::mlir::Pass *pass) {
118 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
122 std::unique_ptr<::mlir::Pass> clonePass()
const override {
123 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
127 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
128 registry.insert<llzk::LLZKDialect>();
129 registry.insert<llzk::boolean::BoolDialect>();
130 registry.insert<llzk::array::ArrayDialect>();
131 registry.insert<llzk::component::StructDialect>();
132 registry.insert<llzk::constrain::ConstrainDialect>();
133 registry.insert<llzk::felt::FeltDialect>();
134 registry.insert<llzk::global::GlobalDialect>();
135 registry.insert<llzk::include::IncludeDialect>();
136 registry.insert<llzk::function::FunctionDialect>();
137 registry.insert<llzk::string::StringDialect>();
138 registry.insert<llzk::polymorphic::PolymorphicDialect>();
139 registry.insert<llzk::undef::UndefDialect>();
140 registry.insert<mlir::arith::ArithDialect>();
141 registry.insert<mlir::scf::SCFDialect>();
147 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CallGraphSCCsPrinterPassBase<DerivedT>)
153#undef GEN_PASS_DEF_CALLGRAPHSCCSPRINTERPASS
159#ifdef GEN_PASS_DECL_CONSTRAINTDEPENDENCYGRAPHPRINTERPASS
160#undef GEN_PASS_DECL_CONSTRAINTDEPENDENCYGRAPHPRINTERPASS
162#ifdef GEN_PASS_DEF_CONSTRAINTDEPENDENCYGRAPHPRINTERPASS
165template <
typename DerivedT>
166class ConstraintDependencyGraphPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
168 using Base = ConstraintDependencyGraphPrinterPassBase;
170 ConstraintDependencyGraphPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
171 ConstraintDependencyGraphPrinterPassBase(
const ConstraintDependencyGraphPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
174 static constexpr ::llvm::StringLiteral getArgumentName() {
175 return ::llvm::StringLiteral(
"llzk-print-constraint-dependency-graphs");
177 ::llvm::StringRef getArgument()
const override {
return "llzk-print-constraint-dependency-graphs"; }
179 ::llvm::StringRef getDescription()
const override {
return "Print constraint dependency graph for all LLZK structs."; }
182 static constexpr ::llvm::StringLiteral getPassName() {
183 return ::llvm::StringLiteral(
"ConstraintDependencyGraphPrinterPass");
185 ::llvm::StringRef getName()
const override {
return "ConstraintDependencyGraphPrinterPass"; }
188 static bool classof(const ::mlir::Pass *pass) {
189 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
193 std::unique_ptr<::mlir::Pass> clonePass()
const override {
194 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
198 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
199 registry.insert<llzk::LLZKDialect>();
200 registry.insert<llzk::boolean::BoolDialect>();
201 registry.insert<llzk::array::ArrayDialect>();
202 registry.insert<llzk::component::StructDialect>();
203 registry.insert<llzk::constrain::ConstrainDialect>();
204 registry.insert<llzk::felt::FeltDialect>();
205 registry.insert<llzk::global::GlobalDialect>();
206 registry.insert<llzk::include::IncludeDialect>();
207 registry.insert<llzk::function::FunctionDialect>();
208 registry.insert<llzk::string::StringDialect>();
209 registry.insert<llzk::polymorphic::PolymorphicDialect>();
210 registry.insert<llzk::undef::UndefDialect>();
211 registry.insert<mlir::arith::ArithDialect>();
212 registry.insert<mlir::scf::SCFDialect>();
218 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ConstraintDependencyGraphPrinterPassBase<DerivedT>)
224#undef GEN_PASS_DEF_CONSTRAINTDEPENDENCYGRAPHPRINTERPASS
230#ifdef GEN_PASS_DECL_INTERVALANALYSISPRINTERPASS
231struct IntervalAnalysisPrinterPassOptions {
232 std::string fieldName =
"bn128";
233 bool printSolverConstraints =
false;
235#undef GEN_PASS_DECL_INTERVALANALYSISPRINTERPASS
237#ifdef GEN_PASS_DEF_INTERVALANALYSISPRINTERPASS
240template <
typename DerivedT>
241class IntervalAnalysisPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
243 using Base = IntervalAnalysisPrinterPassBase;
245 IntervalAnalysisPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
246 IntervalAnalysisPrinterPassBase(
const IntervalAnalysisPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
249 static constexpr ::llvm::StringLiteral getArgumentName() {
250 return ::llvm::StringLiteral(
"llzk-print-interval-analysis");
252 ::llvm::StringRef getArgument()
const override {
return "llzk-print-interval-analysis"; }
254 ::llvm::StringRef getDescription()
const override {
return "Print interval analysis results for all LLZK structs."; }
257 static constexpr ::llvm::StringLiteral getPassName() {
258 return ::llvm::StringLiteral(
"IntervalAnalysisPrinterPass");
260 ::llvm::StringRef getName()
const override {
return "IntervalAnalysisPrinterPass"; }
263 static bool classof(const ::mlir::Pass *pass) {
264 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
268 std::unique_ptr<::mlir::Pass> clonePass()
const override {
269 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
273 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
274 registry.insert<llzk::LLZKDialect>();
275 registry.insert<llzk::boolean::BoolDialect>();
276 registry.insert<llzk::array::ArrayDialect>();
277 registry.insert<llzk::component::StructDialect>();
278 registry.insert<llzk::constrain::ConstrainDialect>();
279 registry.insert<llzk::felt::FeltDialect>();
280 registry.insert<llzk::global::GlobalDialect>();
281 registry.insert<llzk::include::IncludeDialect>();
282 registry.insert<llzk::function::FunctionDialect>();
283 registry.insert<llzk::string::StringDialect>();
284 registry.insert<llzk::polymorphic::PolymorphicDialect>();
285 registry.insert<llzk::undef::UndefDialect>();
286 registry.insert<mlir::arith::ArithDialect>();
287 registry.insert<mlir::scf::SCFDialect>();
293 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(IntervalAnalysisPrinterPassBase<DerivedT>)
295 IntervalAnalysisPrinterPassBase(
const IntervalAnalysisPrinterPassOptions &options) : IntervalAnalysisPrinterPassBase() {
296 fieldName = options.fieldName;
297 printSolverConstraints = options.printSolverConstraints;
300 ::mlir::Pass::Option<std::string> fieldName{*
this,
"field", ::llvm::cl::desc(
"The field to use for interval analysis. Supported fields: bn128/bn254, babybear, goldilocks, mersenne31"), ::llvm::cl::init(
"bn128")};
301 ::mlir::Pass::Option<bool> printSolverConstraints{*
this,
"print-solver-constraints", ::llvm::cl::desc(
"Whether to output SMT solver constraints along with intervals."), ::llvm::cl::init(
false)};
305#undef GEN_PASS_DEF_INTERVALANALYSISPRINTERPASS
311#ifdef GEN_PASS_DECL_SYMBOLDEFTREEPRINTERPASS
312struct SymbolDefTreePrinterPassOptions {
314 bool saveDotGraph =
false;
316#undef GEN_PASS_DECL_SYMBOLDEFTREEPRINTERPASS
318#ifdef GEN_PASS_DEF_SYMBOLDEFTREEPRINTERPASS
321template <
typename DerivedT>
322class SymbolDefTreePrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
324 using Base = SymbolDefTreePrinterPassBase;
326 SymbolDefTreePrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
327 SymbolDefTreePrinterPassBase(
const SymbolDefTreePrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
330 static constexpr ::llvm::StringLiteral getArgumentName() {
331 return ::llvm::StringLiteral(
"llzk-print-symbol-def-tree");
333 ::llvm::StringRef getArgument()
const override {
return "llzk-print-symbol-def-tree"; }
335 ::llvm::StringRef getDescription()
const override {
return "Print symbol definition tree."; }
338 static constexpr ::llvm::StringLiteral getPassName() {
339 return ::llvm::StringLiteral(
"SymbolDefTreePrinterPass");
341 ::llvm::StringRef getName()
const override {
return "SymbolDefTreePrinterPass"; }
344 static bool classof(const ::mlir::Pass *pass) {
345 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
349 std::unique_ptr<::mlir::Pass> clonePass()
const override {
350 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
354 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
355 registry.insert<llzk::LLZKDialect>();
356 registry.insert<llzk::boolean::BoolDialect>();
357 registry.insert<llzk::array::ArrayDialect>();
358 registry.insert<llzk::component::StructDialect>();
359 registry.insert<llzk::constrain::ConstrainDialect>();
360 registry.insert<llzk::felt::FeltDialect>();
361 registry.insert<llzk::global::GlobalDialect>();
362 registry.insert<llzk::include::IncludeDialect>();
363 registry.insert<llzk::function::FunctionDialect>();
364 registry.insert<llzk::string::StringDialect>();
365 registry.insert<llzk::polymorphic::PolymorphicDialect>();
366 registry.insert<llzk::undef::UndefDialect>();
367 registry.insert<mlir::arith::ArithDialect>();
368 registry.insert<mlir::scf::SCFDialect>();
374 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(SymbolDefTreePrinterPassBase<DerivedT>)
376 SymbolDefTreePrinterPassBase(
const SymbolDefTreePrinterPassOptions &options) : SymbolDefTreePrinterPassBase() {
377 outputStream = options.outputStream;
378 saveDotGraph = options.saveDotGraph;
381 ::mlir::Pass::Option<::llzk::OutputStream> outputStream{*
this,
"stream", ::llvm::cl::desc(
"Specifies the stream to which the pass prints."), ::llvm::cl::init(
::llzk::OutputStream::Errs), ::llvm::cl::values(
383 "Print pass output to 'llvm::outs()'"),
385 "Print pass output to 'llvm::errs()'"),
387 "Print pass output to 'llvm::dbgs()'")
389 ::mlir::Pass::Option<bool> saveDotGraph{*
this,
"saveDot", ::llvm::cl::desc(
"Whether to dump the graph to DOT format."), ::llvm::cl::init(
false)};
393#undef GEN_PASS_DEF_SYMBOLDEFTREEPRINTERPASS
399#ifdef GEN_PASS_DECL_SYMBOLUSEGRAPHPRINTERPASS
400struct SymbolUseGraphPrinterPassOptions {
402 bool saveDotGraph =
false;
404#undef GEN_PASS_DECL_SYMBOLUSEGRAPHPRINTERPASS
406#ifdef GEN_PASS_DEF_SYMBOLUSEGRAPHPRINTERPASS
409template <
typename DerivedT>
410class SymbolUseGraphPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
412 using Base = SymbolUseGraphPrinterPassBase;
414 SymbolUseGraphPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
415 SymbolUseGraphPrinterPassBase(
const SymbolUseGraphPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
418 static constexpr ::llvm::StringLiteral getArgumentName() {
419 return ::llvm::StringLiteral(
"llzk-print-symbol-use-graph");
421 ::llvm::StringRef getArgument()
const override {
return "llzk-print-symbol-use-graph"; }
423 ::llvm::StringRef getDescription()
const override {
return "Print symbol use graph."; }
426 static constexpr ::llvm::StringLiteral getPassName() {
427 return ::llvm::StringLiteral(
"SymbolUseGraphPrinterPass");
429 ::llvm::StringRef getName()
const override {
return "SymbolUseGraphPrinterPass"; }
432 static bool classof(const ::mlir::Pass *pass) {
433 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
437 std::unique_ptr<::mlir::Pass> clonePass()
const override {
438 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
442 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
443 registry.insert<llzk::LLZKDialect>();
444 registry.insert<llzk::boolean::BoolDialect>();
445 registry.insert<llzk::array::ArrayDialect>();
446 registry.insert<llzk::component::StructDialect>();
447 registry.insert<llzk::constrain::ConstrainDialect>();
448 registry.insert<llzk::felt::FeltDialect>();
449 registry.insert<llzk::global::GlobalDialect>();
450 registry.insert<llzk::include::IncludeDialect>();
451 registry.insert<llzk::function::FunctionDialect>();
452 registry.insert<llzk::string::StringDialect>();
453 registry.insert<llzk::polymorphic::PolymorphicDialect>();
454 registry.insert<llzk::undef::UndefDialect>();
455 registry.insert<mlir::arith::ArithDialect>();
456 registry.insert<mlir::scf::SCFDialect>();
462 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(SymbolUseGraphPrinterPassBase<DerivedT>)
464 SymbolUseGraphPrinterPassBase(
const SymbolUseGraphPrinterPassOptions &options) : SymbolUseGraphPrinterPassBase() {
465 outputStream = options.outputStream;
466 saveDotGraph = options.saveDotGraph;
469 ::mlir::Pass::Option<::llzk::OutputStream> outputStream{*
this,
"stream", ::llvm::cl::desc(
"Specifies the stream to which the pass prints."), ::llvm::cl::init(
::llzk::OutputStream::Errs), ::llvm::cl::values(
471 "Print pass output to 'llvm::outs()'"),
473 "Print pass output to 'llvm::errs()'"),
475 "Print pass output to 'llvm::dbgs()'")
477 ::mlir::Pass::Option<bool> saveDotGraph{*
this,
"saveDot", ::llvm::cl::desc(
"Whether to dump the graph to DOT format."), ::llvm::cl::init(
false)};
481#undef GEN_PASS_DEF_SYMBOLUSEGRAPHPRINTERPASS
483#ifdef GEN_PASS_REGISTRATION
490 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
497 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
507 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
514 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
524 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
531 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
541 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
548 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
558 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
565 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
575 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
582 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
599#undef GEN_PASS_REGISTRATION
602#ifdef GEN_PASS_CLASSES
604template <
typename DerivedT>
605class CallGraphPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
607 using Base = CallGraphPrinterPassBase;
609 CallGraphPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
610 CallGraphPrinterPassBase(
const CallGraphPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
613 static constexpr ::llvm::StringLiteral getArgumentName() {
614 return ::llvm::StringLiteral(
"llzk-print-call-graph");
616 ::llvm::StringRef getArgument()
const override {
return "llzk-print-call-graph"; }
618 ::llvm::StringRef getDescription()
const override {
return "Print the LLZK module's call graph."; }
621 static constexpr ::llvm::StringLiteral getPassName() {
622 return ::llvm::StringLiteral(
"CallGraphPrinterPass");
624 ::llvm::StringRef getName()
const override {
return "CallGraphPrinterPass"; }
627 static bool classof(const ::mlir::Pass *pass) {
628 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
632 std::unique_ptr<::mlir::Pass> clonePass()
const override {
633 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
637 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
638 registry.insert<llzk::LLZKDialect>();
639 registry.insert<llzk::boolean::BoolDialect>();
640 registry.insert<llzk::array::ArrayDialect>();
641 registry.insert<llzk::component::StructDialect>();
642 registry.insert<llzk::constrain::ConstrainDialect>();
643 registry.insert<llzk::felt::FeltDialect>();
644 registry.insert<llzk::global::GlobalDialect>();
645 registry.insert<llzk::include::IncludeDialect>();
646 registry.insert<llzk::function::FunctionDialect>();
647 registry.insert<llzk::string::StringDialect>();
648 registry.insert<llzk::polymorphic::PolymorphicDialect>();
649 registry.insert<llzk::undef::UndefDialect>();
650 registry.insert<mlir::arith::ArithDialect>();
651 registry.insert<mlir::scf::SCFDialect>();
657 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CallGraphPrinterPassBase<DerivedT>)
662template <
typename DerivedT>
663class CallGraphSCCsPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
665 using Base = CallGraphSCCsPrinterPassBase;
667 CallGraphSCCsPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
668 CallGraphSCCsPrinterPassBase(
const CallGraphSCCsPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
671 static constexpr ::llvm::StringLiteral getArgumentName() {
672 return ::llvm::StringLiteral(
"llzk-print-call-graph-sccs");
674 ::llvm::StringRef getArgument()
const override {
return "llzk-print-call-graph-sccs"; }
676 ::llvm::StringRef getDescription()
const override {
return "Print the SCCs from the LLZK module's call graph."; }
679 static constexpr ::llvm::StringLiteral getPassName() {
680 return ::llvm::StringLiteral(
"CallGraphSCCsPrinterPass");
682 ::llvm::StringRef getName()
const override {
return "CallGraphSCCsPrinterPass"; }
685 static bool classof(const ::mlir::Pass *pass) {
686 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
690 std::unique_ptr<::mlir::Pass> clonePass()
const override {
691 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
695 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
696 registry.insert<llzk::LLZKDialect>();
697 registry.insert<llzk::boolean::BoolDialect>();
698 registry.insert<llzk::array::ArrayDialect>();
699 registry.insert<llzk::component::StructDialect>();
700 registry.insert<llzk::constrain::ConstrainDialect>();
701 registry.insert<llzk::felt::FeltDialect>();
702 registry.insert<llzk::global::GlobalDialect>();
703 registry.insert<llzk::include::IncludeDialect>();
704 registry.insert<llzk::function::FunctionDialect>();
705 registry.insert<llzk::string::StringDialect>();
706 registry.insert<llzk::polymorphic::PolymorphicDialect>();
707 registry.insert<llzk::undef::UndefDialect>();
708 registry.insert<mlir::arith::ArithDialect>();
709 registry.insert<mlir::scf::SCFDialect>();
715 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CallGraphSCCsPrinterPassBase<DerivedT>)
720template <
typename DerivedT>
721class ConstraintDependencyGraphPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
723 using Base = ConstraintDependencyGraphPrinterPassBase;
725 ConstraintDependencyGraphPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
726 ConstraintDependencyGraphPrinterPassBase(
const ConstraintDependencyGraphPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
729 static constexpr ::llvm::StringLiteral getArgumentName() {
730 return ::llvm::StringLiteral(
"llzk-print-constraint-dependency-graphs");
732 ::llvm::StringRef getArgument()
const override {
return "llzk-print-constraint-dependency-graphs"; }
734 ::llvm::StringRef getDescription()
const override {
return "Print constraint dependency graph for all LLZK structs."; }
737 static constexpr ::llvm::StringLiteral getPassName() {
738 return ::llvm::StringLiteral(
"ConstraintDependencyGraphPrinterPass");
740 ::llvm::StringRef getName()
const override {
return "ConstraintDependencyGraphPrinterPass"; }
743 static bool classof(const ::mlir::Pass *pass) {
744 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
748 std::unique_ptr<::mlir::Pass> clonePass()
const override {
749 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
753 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
754 registry.insert<llzk::LLZKDialect>();
755 registry.insert<llzk::boolean::BoolDialect>();
756 registry.insert<llzk::array::ArrayDialect>();
757 registry.insert<llzk::component::StructDialect>();
758 registry.insert<llzk::constrain::ConstrainDialect>();
759 registry.insert<llzk::felt::FeltDialect>();
760 registry.insert<llzk::global::GlobalDialect>();
761 registry.insert<llzk::include::IncludeDialect>();
762 registry.insert<llzk::function::FunctionDialect>();
763 registry.insert<llzk::string::StringDialect>();
764 registry.insert<llzk::polymorphic::PolymorphicDialect>();
765 registry.insert<llzk::undef::UndefDialect>();
766 registry.insert<mlir::arith::ArithDialect>();
767 registry.insert<mlir::scf::SCFDialect>();
773 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ConstraintDependencyGraphPrinterPassBase<DerivedT>)
778template <
typename DerivedT>
779class IntervalAnalysisPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
781 using Base = IntervalAnalysisPrinterPassBase;
783 IntervalAnalysisPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
784 IntervalAnalysisPrinterPassBase(
const IntervalAnalysisPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
787 static constexpr ::llvm::StringLiteral getArgumentName() {
788 return ::llvm::StringLiteral(
"llzk-print-interval-analysis");
790 ::llvm::StringRef getArgument()
const override {
return "llzk-print-interval-analysis"; }
792 ::llvm::StringRef getDescription()
const override {
return "Print interval analysis results for all LLZK structs."; }
795 static constexpr ::llvm::StringLiteral getPassName() {
796 return ::llvm::StringLiteral(
"IntervalAnalysisPrinterPass");
798 ::llvm::StringRef getName()
const override {
return "IntervalAnalysisPrinterPass"; }
801 static bool classof(const ::mlir::Pass *pass) {
802 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
806 std::unique_ptr<::mlir::Pass> clonePass()
const override {
807 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
811 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
812 registry.insert<llzk::LLZKDialect>();
813 registry.insert<llzk::boolean::BoolDialect>();
814 registry.insert<llzk::array::ArrayDialect>();
815 registry.insert<llzk::component::StructDialect>();
816 registry.insert<llzk::constrain::ConstrainDialect>();
817 registry.insert<llzk::felt::FeltDialect>();
818 registry.insert<llzk::global::GlobalDialect>();
819 registry.insert<llzk::include::IncludeDialect>();
820 registry.insert<llzk::function::FunctionDialect>();
821 registry.insert<llzk::string::StringDialect>();
822 registry.insert<llzk::polymorphic::PolymorphicDialect>();
823 registry.insert<llzk::undef::UndefDialect>();
824 registry.insert<mlir::arith::ArithDialect>();
825 registry.insert<mlir::scf::SCFDialect>();
831 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(IntervalAnalysisPrinterPassBase<DerivedT>)
834 ::mlir::Pass::Option<std::string> fieldName{*
this,
"field", ::llvm::cl::desc(
"The field to use for interval analysis. Supported fields: bn128/bn254, babybear, goldilocks, mersenne31"), ::llvm::cl::init(
"bn128")};
835 ::mlir::Pass::Option<bool> printSolverConstraints{*
this,
"print-solver-constraints", ::llvm::cl::desc(
"Whether to output SMT solver constraints along with intervals."), ::llvm::cl::init(
false)};
838template <
typename DerivedT>
839class SymbolDefTreePrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
841 using Base = SymbolDefTreePrinterPassBase;
843 SymbolDefTreePrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
844 SymbolDefTreePrinterPassBase(
const SymbolDefTreePrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
847 static constexpr ::llvm::StringLiteral getArgumentName() {
848 return ::llvm::StringLiteral(
"llzk-print-symbol-def-tree");
850 ::llvm::StringRef getArgument()
const override {
return "llzk-print-symbol-def-tree"; }
852 ::llvm::StringRef getDescription()
const override {
return "Print symbol definition tree."; }
855 static constexpr ::llvm::StringLiteral getPassName() {
856 return ::llvm::StringLiteral(
"SymbolDefTreePrinterPass");
858 ::llvm::StringRef getName()
const override {
return "SymbolDefTreePrinterPass"; }
861 static bool classof(const ::mlir::Pass *pass) {
862 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
866 std::unique_ptr<::mlir::Pass> clonePass()
const override {
867 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
871 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
872 registry.insert<llzk::LLZKDialect>();
873 registry.insert<llzk::boolean::BoolDialect>();
874 registry.insert<llzk::array::ArrayDialect>();
875 registry.insert<llzk::component::StructDialect>();
876 registry.insert<llzk::constrain::ConstrainDialect>();
877 registry.insert<llzk::felt::FeltDialect>();
878 registry.insert<llzk::global::GlobalDialect>();
879 registry.insert<llzk::include::IncludeDialect>();
880 registry.insert<llzk::function::FunctionDialect>();
881 registry.insert<llzk::string::StringDialect>();
882 registry.insert<llzk::polymorphic::PolymorphicDialect>();
883 registry.insert<llzk::undef::UndefDialect>();
884 registry.insert<mlir::arith::ArithDialect>();
885 registry.insert<mlir::scf::SCFDialect>();
891 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(SymbolDefTreePrinterPassBase<DerivedT>)
894 ::mlir::Pass::Option<::llzk::OutputStream> outputStream{*
this,
"stream", ::llvm::cl::desc(
"Specifies the stream to which the pass prints."), ::llvm::cl::init(
::llzk::OutputStream::Errs), ::llvm::cl::values(
896 "Print pass output to 'llvm::outs()'"),
898 "Print pass output to 'llvm::errs()'"),
900 "Print pass output to 'llvm::dbgs()'")
902 ::mlir::Pass::Option<bool> saveDotGraph{*
this,
"saveDot", ::llvm::cl::desc(
"Whether to dump the graph to DOT format."), ::llvm::cl::init(
false)};
905template <
typename DerivedT>
906class SymbolUseGraphPrinterPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
908 using Base = SymbolUseGraphPrinterPassBase;
910 SymbolUseGraphPrinterPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
911 SymbolUseGraphPrinterPassBase(
const SymbolUseGraphPrinterPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
914 static constexpr ::llvm::StringLiteral getArgumentName() {
915 return ::llvm::StringLiteral(
"llzk-print-symbol-use-graph");
917 ::llvm::StringRef getArgument()
const override {
return "llzk-print-symbol-use-graph"; }
919 ::llvm::StringRef getDescription()
const override {
return "Print symbol use graph."; }
922 static constexpr ::llvm::StringLiteral getPassName() {
923 return ::llvm::StringLiteral(
"SymbolUseGraphPrinterPass");
925 ::llvm::StringRef getName()
const override {
return "SymbolUseGraphPrinterPass"; }
928 static bool classof(const ::mlir::Pass *pass) {
929 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
933 std::unique_ptr<::mlir::Pass> clonePass()
const override {
934 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
938 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
939 registry.insert<llzk::LLZKDialect>();
940 registry.insert<llzk::boolean::BoolDialect>();
941 registry.insert<llzk::array::ArrayDialect>();
942 registry.insert<llzk::component::StructDialect>();
943 registry.insert<llzk::constrain::ConstrainDialect>();
944 registry.insert<llzk::felt::FeltDialect>();
945 registry.insert<llzk::global::GlobalDialect>();
946 registry.insert<llzk::include::IncludeDialect>();
947 registry.insert<llzk::function::FunctionDialect>();
948 registry.insert<llzk::string::StringDialect>();
949 registry.insert<llzk::polymorphic::PolymorphicDialect>();
950 registry.insert<llzk::undef::UndefDialect>();
951 registry.insert<mlir::arith::ArithDialect>();
952 registry.insert<mlir::scf::SCFDialect>();
958 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(SymbolUseGraphPrinterPassBase<DerivedT>)
961 ::mlir::Pass::Option<::llzk::OutputStream> outputStream{*
this,
"stream", ::llvm::cl::desc(
"Specifies the stream to which the pass prints."), ::llvm::cl::init(
::llzk::OutputStream::Errs), ::llvm::cl::values(
963 "Print pass output to 'llvm::outs()'"),
965 "Print pass output to 'llvm::errs()'"),
967 "Print pass output to 'llvm::dbgs()'")
969 ::mlir::Pass::Option<bool> saveDotGraph{*
this,
"saveDot", ::llvm::cl::desc(
"Whether to dump the graph to DOT format."), ::llvm::cl::init(
false)};
971#undef GEN_PASS_CLASSES
void registerIntervalAnalysisPrinterPassPass()
void registerSymbolDefTreePrinterPassPass()
void registerIntervalAnalysisPrinterPass()
std::unique_ptr< mlir::Pass > createSymbolUseGraphPrinterPass()
void registerSymbolUseGraphPrinterPassPass()
std::unique_ptr< mlir::Pass > createConstraintDependencyGraphPrinterPass(llvm::raw_ostream &os=llvm::errs())
std::unique_ptr< mlir::Pass > createIntervalAnalysisPrinterPass(llvm::raw_ostream &os=llvm::errs())
void registerCallGraphPrinterPass()
void registerConstraintDependencyGraphPrinterPass()
void registerSymbolUseGraphPrinterPass()
std::unique_ptr< mlir::Pass > createSymbolDefTreePrinterPass()
std::unique_ptr< mlir::Pass > createCallGraphSCCsPrinterPass(llvm::raw_ostream &os=llvm::errs())
std::unique_ptr< mlir::Pass > createCallGraphPrinterPass(llvm::raw_ostream &os=llvm::errs())
void registerCallGraphPrinterPassPass()
::llvm::StringRef stringifyOutputStream(OutputStream val)
void registerCallGraphSCCsPrinterPass()
void registerConstraintDependencyGraphPrinterPassPass()
void registerCallGraphSCCsPrinterPassPass()
void registerAnalysisPasses()
void registerSymbolDefTreePrinterPass()