LLZK 0.1.0
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
TransformationPasses.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_EMPTYPARAMLISTREMOVALPASS
6#define GEN_PASS_DECL_FLATTENINGPASS
7#undef GEN_PASS_DECL
8#endif // GEN_PASS_DECL
9
10//===----------------------------------------------------------------------===//
11// EmptyParamListRemovalPass
12//===----------------------------------------------------------------------===//
13#ifdef GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
14#undef GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
15#endif // GEN_PASS_DECL_EMPTYPARAMLISTREMOVALPASS
16#ifdef GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
17namespace impl {
18
19template <typename DerivedT>
20class EmptyParamListRemovalPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
21public:
22 using Base = EmptyParamListRemovalPassBase;
23
24 EmptyParamListRemovalPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
25 EmptyParamListRemovalPassBase(const EmptyParamListRemovalPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
26 EmptyParamListRemovalPassBase& operator=(const EmptyParamListRemovalPassBase &) = delete;
27 EmptyParamListRemovalPassBase(EmptyParamListRemovalPassBase &&) = delete;
28 EmptyParamListRemovalPassBase& operator=(EmptyParamListRemovalPassBase &&) = delete;
29 ~EmptyParamListRemovalPassBase() = default;
30
32 static constexpr ::llvm::StringLiteral getArgumentName() {
33 return ::llvm::StringLiteral("llzk-drop-empty-params");
34 }
35 ::llvm::StringRef getArgument() const override { return "llzk-drop-empty-params"; }
36
37 ::llvm::StringRef getDescription() const override { return "Remove empty struct parameter lists"; }
38
40 static constexpr ::llvm::StringLiteral getPassName() {
41 return ::llvm::StringLiteral("EmptyParamListRemovalPass");
42 }
43 ::llvm::StringRef getName() const override { return "EmptyParamListRemovalPass"; }
44
46 static bool classof(const ::mlir::Pass *pass) {
47 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
48 }
49
51 std::unique_ptr<::mlir::Pass> clonePass() const override {
52 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
53 }
54
56 void getDependentDialects(::mlir::DialectRegistry &registry) 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<mlir::arith::ArithDialect>();
69 registry.insert<mlir::scf::SCFDialect>();
70 }
71
75 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyParamListRemovalPassBase<DerivedT>)
76
77protected:
78private:
79};
80} // namespace impl
81#undef GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
82#endif // GEN_PASS_DEF_EMPTYPARAMLISTREMOVALPASS
83
84//===----------------------------------------------------------------------===//
85// FlatteningPass
86//===----------------------------------------------------------------------===//
87#ifdef GEN_PASS_DECL_FLATTENINGPASS
88struct FlatteningPassOptions {
89 unsigned iterationLimit = 1000;
91};
92#undef GEN_PASS_DECL_FLATTENINGPASS
93#endif // GEN_PASS_DECL_FLATTENINGPASS
94#ifdef GEN_PASS_DEF_FLATTENINGPASS
95namespace impl {
96
97template <typename DerivedT>
98class FlatteningPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
99public:
100 using Base = FlatteningPassBase;
101
102 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
103 FlatteningPassBase(const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
104 FlatteningPassBase& operator=(const FlatteningPassBase &) = delete;
105 FlatteningPassBase(FlatteningPassBase &&) = delete;
106 FlatteningPassBase& operator=(FlatteningPassBase &&) = delete;
107 ~FlatteningPassBase() = default;
108
110 static constexpr ::llvm::StringLiteral getArgumentName() {
111 return ::llvm::StringLiteral("llzk-flatten");
112 }
113 ::llvm::StringRef getArgument() const override { return "llzk-flatten"; }
114
115 ::llvm::StringRef getDescription() const override { return "Flatten structs and unroll loops"; }
116
118 static constexpr ::llvm::StringLiteral getPassName() {
119 return ::llvm::StringLiteral("FlatteningPass");
120 }
121 ::llvm::StringRef getName() const override { return "FlatteningPass"; }
122
124 static bool classof(const ::mlir::Pass *pass) {
125 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
126 }
127
129 std::unique_ptr<::mlir::Pass> clonePass() const override {
130 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
131 }
132
134 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
135 registry.insert<llzk::LLZKDialect>();
136 registry.insert<llzk::boolean::BoolDialect>();
137 registry.insert<llzk::array::ArrayDialect>();
138 registry.insert<llzk::component::StructDialect>();
139 registry.insert<llzk::constrain::ConstrainDialect>();
140 registry.insert<llzk::felt::FeltDialect>();
141 registry.insert<llzk::global::GlobalDialect>();
142 registry.insert<llzk::include::IncludeDialect>();
143 registry.insert<llzk::function::FunctionDialect>();
144 registry.insert<llzk::string::StringDialect>();
145 registry.insert<llzk::polymorphic::PolymorphicDialect>();
146 registry.insert<mlir::arith::ArithDialect>();
147 registry.insert<mlir::scf::SCFDialect>();
148 }
149
153 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
154
155 FlatteningPassBase(FlatteningPassOptions options) : FlatteningPassBase() {
156 iterationLimit = std::move(options.iterationLimit);
157 cleanupMode = std::move(options.cleanupMode);
158 }
159protected:
160 ::mlir::Pass::Option<unsigned> iterationLimit{*this, "max-iter", ::llvm::cl::desc("Maximum number of times the pass will run if a fixpoint is not reached earlier. Unrolling loops can provide more opportunities for instantiating structs but the converse is true as well. Thus, the pass will run multiple times until no further changes can be made or the upper limit provided in this option is reached."), ::llvm::cl::init(1000)};
161 ::mlir::Pass::Option<::llzk::polymorphic::StructCleanupMode> cleanupMode{*this, "cleanup", ::llvm::cl::desc("Specifies the extent to which unused parameterized structs are removed during the flattening pass."), ::llvm::cl::init(::llzk::polymorphic::StructCleanupMode::Preimage), ::llvm::cl::values(
166 "Only structs that were replaced with concrete instantiations are deleted."),
169 "All structs that cannot be reached by a use-def chain from some concrete struct are deleted."),
172 "All structs that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
173 )};
174private:
175};
176} // namespace impl
177#undef GEN_PASS_DEF_FLATTENINGPASS
178#endif // GEN_PASS_DEF_FLATTENINGPASS
179#ifdef GEN_PASS_REGISTRATION
180
181//===----------------------------------------------------------------------===//
182// EmptyParamListRemovalPass Registration
183//===----------------------------------------------------------------------===//
184
186 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
188 });
189}
190
191// Old registration code, kept for temporary backwards compatibility.
193 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
195 });
196}
197
198//===----------------------------------------------------------------------===//
199// FlatteningPass Registration
200//===----------------------------------------------------------------------===//
201
202inline void registerFlatteningPass() {
203 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
205 });
206}
207
208// Old registration code, kept for temporary backwards compatibility.
209inline void registerFlatteningPassPass() {
210 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
212 });
213}
214
215//===----------------------------------------------------------------------===//
216// Transformation Registration
217//===----------------------------------------------------------------------===//
218
219inline void registerTransformationPasses() {
222}
223#undef GEN_PASS_REGISTRATION
224#endif // GEN_PASS_REGISTRATION
225// Deprecated. Please use the new per-pass macros.
226#ifdef GEN_PASS_CLASSES
227
228template <typename DerivedT>
229class EmptyParamListRemovalPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
230public:
231 using Base = EmptyParamListRemovalPassBase;
232
233 EmptyParamListRemovalPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
234 EmptyParamListRemovalPassBase(const EmptyParamListRemovalPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
235 EmptyParamListRemovalPassBase& operator=(const EmptyParamListRemovalPassBase &) = delete;
236 EmptyParamListRemovalPassBase(EmptyParamListRemovalPassBase &&) = delete;
237 EmptyParamListRemovalPassBase& operator=(EmptyParamListRemovalPassBase &&) = delete;
238 ~EmptyParamListRemovalPassBase() = default;
239
241 static constexpr ::llvm::StringLiteral getArgumentName() {
242 return ::llvm::StringLiteral("llzk-drop-empty-params");
243 }
244 ::llvm::StringRef getArgument() const override { return "llzk-drop-empty-params"; }
245
246 ::llvm::StringRef getDescription() const override { return "Remove empty struct parameter lists"; }
247
249 static constexpr ::llvm::StringLiteral getPassName() {
250 return ::llvm::StringLiteral("EmptyParamListRemovalPass");
251 }
252 ::llvm::StringRef getName() const override { return "EmptyParamListRemovalPass"; }
253
255 static bool classof(const ::mlir::Pass *pass) {
256 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
257 }
258
260 std::unique_ptr<::mlir::Pass> clonePass() const override {
261 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
262 }
263
265 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
266 registry.insert<llzk::LLZKDialect>();
267 registry.insert<llzk::boolean::BoolDialect>();
268 registry.insert<llzk::array::ArrayDialect>();
269 registry.insert<llzk::component::StructDialect>();
270 registry.insert<llzk::constrain::ConstrainDialect>();
271 registry.insert<llzk::felt::FeltDialect>();
272 registry.insert<llzk::global::GlobalDialect>();
273 registry.insert<llzk::include::IncludeDialect>();
274 registry.insert<llzk::function::FunctionDialect>();
275 registry.insert<llzk::string::StringDialect>();
276 registry.insert<llzk::polymorphic::PolymorphicDialect>();
277 registry.insert<mlir::arith::ArithDialect>();
278 registry.insert<mlir::scf::SCFDialect>();
279 }
280
284 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyParamListRemovalPassBase<DerivedT>)
285
286protected:
287};
288
289template <typename DerivedT>
290class FlatteningPassBase : public ::mlir::OperationPass<::mlir::ModuleOp> {
291public:
292 using Base = FlatteningPassBase;
293
294 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
295 FlatteningPassBase(const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
296 FlatteningPassBase& operator=(const FlatteningPassBase &) = delete;
297 FlatteningPassBase(FlatteningPassBase &&) = delete;
298 FlatteningPassBase& operator=(FlatteningPassBase &&) = delete;
299 ~FlatteningPassBase() = default;
300
302 static constexpr ::llvm::StringLiteral getArgumentName() {
303 return ::llvm::StringLiteral("llzk-flatten");
304 }
305 ::llvm::StringRef getArgument() const override { return "llzk-flatten"; }
306
307 ::llvm::StringRef getDescription() const override { return "Flatten structs and unroll loops"; }
308
310 static constexpr ::llvm::StringLiteral getPassName() {
311 return ::llvm::StringLiteral("FlatteningPass");
312 }
313 ::llvm::StringRef getName() const override { return "FlatteningPass"; }
314
316 static bool classof(const ::mlir::Pass *pass) {
317 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
318 }
319
321 std::unique_ptr<::mlir::Pass> clonePass() const override {
322 return std::make_unique<DerivedT>(*static_cast<const DerivedT *>(this));
323 }
324
326 void getDependentDialects(::mlir::DialectRegistry &registry) const override {
327 registry.insert<llzk::LLZKDialect>();
328 registry.insert<llzk::boolean::BoolDialect>();
329 registry.insert<llzk::array::ArrayDialect>();
330 registry.insert<llzk::component::StructDialect>();
331 registry.insert<llzk::constrain::ConstrainDialect>();
332 registry.insert<llzk::felt::FeltDialect>();
333 registry.insert<llzk::global::GlobalDialect>();
334 registry.insert<llzk::include::IncludeDialect>();
335 registry.insert<llzk::function::FunctionDialect>();
336 registry.insert<llzk::string::StringDialect>();
337 registry.insert<llzk::polymorphic::PolymorphicDialect>();
338 registry.insert<mlir::arith::ArithDialect>();
339 registry.insert<mlir::scf::SCFDialect>();
340 }
341
345 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
346
347protected:
348 ::mlir::Pass::Option<unsigned> iterationLimit{*this, "max-iter", ::llvm::cl::desc("Maximum number of times the pass will run if a fixpoint is not reached earlier. Unrolling loops can provide more opportunities for instantiating structs but the converse is true as well. Thus, the pass will run multiple times until no further changes can be made or the upper limit provided in this option is reached."), ::llvm::cl::init(1000)};
349 ::mlir::Pass::Option<::llzk::polymorphic::StructCleanupMode> cleanupMode{*this, "cleanup", ::llvm::cl::desc("Specifies the extent to which unused parameterized structs are removed during the flattening pass."), ::llvm::cl::init(::llzk::polymorphic::StructCleanupMode::Preimage), ::llvm::cl::values(
354 "Only structs that were replaced with concrete instantiations are deleted."),
357 "All structs that cannot be reached by a use-def chain from some concrete struct are deleted."),
360 "All structs that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
361 )};
362};
363#undef GEN_PASS_CLASSES
364#endif // GEN_PASS_CLASSES
void registerTransformationPasses()
void registerEmptyParamListRemovalPassPass()
std::unique_ptr< mlir::Pass > createFlatteningPass()
std::unique_ptr< mlir::Pass > createEmptyParamListRemoval()
::llvm::StringRef stringifyStructCleanupMode(StructCleanupMode val)