5#define GEN_PASS_DECL_EXPOSECHILDMEMBERSPASS
6#define GEN_PASS_DECL_INLINESTRUCTSPASS
13#ifdef GEN_PASS_DECL_EXPOSECHILDMEMBERSPASS
14struct ExposeChildMembersPassOptions {
15 std::string rootStruct =
"";
19#undef GEN_PASS_DECL_EXPOSECHILDMEMBERSPASS
21#ifdef GEN_PASS_DEF_EXPOSECHILDMEMBERSPASS
32template <
typename DerivedT>
33class ExposeChildMembersPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
35 using Base = ExposeChildMembersPassBase;
37 ExposeChildMembersPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
38 ExposeChildMembersPassBase(
const ExposeChildMembersPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
39 ExposeChildMembersPassBase& operator=(
const ExposeChildMembersPassBase &) =
delete;
40 ExposeChildMembersPassBase(ExposeChildMembersPassBase &&) =
delete;
41 ExposeChildMembersPassBase& operator=(ExposeChildMembersPassBase &&) =
delete;
42 ~ExposeChildMembersPassBase() =
default;
45 static constexpr ::llvm::StringLiteral getArgumentName() {
46 return ::llvm::StringLiteral(
"llzk-expose-child-members");
48 ::llvm::StringRef getArgument()
const override {
return "llzk-expose-child-members"; }
50 ::llvm::StringRef getDescription()
const override {
return R
"PD(Expose members of concrete child storage reachable from a selected root.)PD"; }
53 static constexpr ::llvm::StringLiteral getPassName() {
54 return ::llvm::StringLiteral(
"ExposeChildMembersPass");
56 ::llvm::StringRef getName()
const override {
return "ExposeChildMembersPass"; }
59 static bool classof(const ::mlir::Pass *pass) {
60 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
64 std::unique_ptr<::mlir::Pass> clonePass()
const override {
65 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
69 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
70 registry.insert<llzk::LLZKDialect>();
71 registry.insert<llzk::boolean::BoolDialect>();
72 registry.insert<llzk::array::ArrayDialect>();
73 registry.insert<llzk::component::StructDialect>();
74 registry.insert<llzk::constrain::ConstrainDialect>();
75 registry.insert<llzk::felt::FeltDialect>();
76 registry.insert<llzk::global::GlobalDialect>();
77 registry.insert<llzk::include::IncludeDialect>();
78 registry.insert<llzk::function::FunctionDialect>();
79 registry.insert<llzk::string::StringDialect>();
80 registry.insert<llzk::polymorphic::PolymorphicDialect>();
81 registry.insert<mlir::arith::ArithDialect>();
82 registry.insert<mlir::scf::SCFDialect>();
88 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ExposeChildMembersPassBase<DerivedT>)
90 ExposeChildMembersPassBase(ExposeChildMembersPassOptions options) : ExposeChildMembersPassBase() {
91 rootStruct = std::move(options.rootStruct);
94 ::mlir::Pass::Option<std::string> rootStruct{*
this,
"root-struct", ::llvm::cl::desc(R
"PO(Root struct symbol path (defaults to llzk.main))PO"), ::llvm::cl::init("")};
98 return std::make_unique<DerivedT>();
102 return std::make_unique<DerivedT>(std::move(options));
108 return impl::createExposeChildMembersPass();
112 return impl::createExposeChildMembersPass(std::move(options));
114#undef GEN_PASS_DEF_EXPOSECHILDMEMBERSPASS
120#ifdef GEN_PASS_DECL_INLINESTRUCTSPASS
121struct InlineStructsPassOptions {
122 uint64_t maxComplexity = 0;
126#undef GEN_PASS_DECL_INLINESTRUCTSPASS
128#ifdef GEN_PASS_DEF_INLINESTRUCTSPASS
139template <
typename DerivedT>
140class InlineStructsPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
142 using Base = InlineStructsPassBase;
144 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
145 InlineStructsPassBase(
const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
146 InlineStructsPassBase& operator=(
const InlineStructsPassBase &) =
delete;
147 InlineStructsPassBase(InlineStructsPassBase &&) =
delete;
148 InlineStructsPassBase& operator=(InlineStructsPassBase &&) =
delete;
149 ~InlineStructsPassBase() =
default;
152 static constexpr ::llvm::StringLiteral getArgumentName() {
153 return ::llvm::StringLiteral(
"llzk-inline-structs");
155 ::llvm::StringRef getArgument()
const override {
return "llzk-inline-structs"; }
157 ::llvm::StringRef getDescription()
const override {
return R
"PD(Inlines nested structs (i.e., subcomponents).)PD"; }
160 static constexpr ::llvm::StringLiteral getPassName() {
161 return ::llvm::StringLiteral(
"InlineStructsPass");
163 ::llvm::StringRef getName()
const override {
return "InlineStructsPass"; }
166 static bool classof(const ::mlir::Pass *pass) {
167 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
171 std::unique_ptr<::mlir::Pass> clonePass()
const override {
172 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
176 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
177 registry.insert<llzk::LLZKDialect>();
178 registry.insert<llzk::boolean::BoolDialect>();
179 registry.insert<llzk::array::ArrayDialect>();
180 registry.insert<llzk::component::StructDialect>();
181 registry.insert<llzk::constrain::ConstrainDialect>();
182 registry.insert<llzk::felt::FeltDialect>();
183 registry.insert<llzk::global::GlobalDialect>();
184 registry.insert<llzk::include::IncludeDialect>();
185 registry.insert<llzk::function::FunctionDialect>();
186 registry.insert<llzk::string::StringDialect>();
187 registry.insert<llzk::polymorphic::PolymorphicDialect>();
188 registry.insert<mlir::arith::ArithDialect>();
189 registry.insert<mlir::scf::SCFDialect>();
195 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
197 InlineStructsPassBase(InlineStructsPassOptions options) : InlineStructsPassBase() {
198 maxComplexity = std::move(options.maxComplexity);
201 ::mlir::Pass::Option<uint64_t> maxComplexity{*
this,
"max-merge-complexity", ::llvm::cl::desc(R
"PO(Maximum allowed constraint+multiplications in merged @constrain functions)PO"), ::llvm::cl::init(0)};
205 return std::make_unique<DerivedT>();
209 return std::make_unique<DerivedT>(std::move(options));
215 return impl::createInlineStructsPass();
219 return impl::createInlineStructsPass(std::move(options));
221#undef GEN_PASS_DEF_INLINESTRUCTSPASS
223#ifdef GEN_PASS_REGISTRATION
225#define GEN_PASS_REGISTRATION_EXPOSECHILDMEMBERSPASS
226#define GEN_PASS_REGISTRATION_INLINESTRUCTSPASS
232#ifdef GEN_PASS_REGISTRATION_EXPOSECHILDMEMBERSPASS
235 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
242 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
247#undef GEN_PASS_REGISTRATION_EXPOSECHILDMEMBERSPASS
253#ifdef GEN_PASS_REGISTRATION_INLINESTRUCTSPASS
256 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
263 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
268#undef GEN_PASS_REGISTRATION_INLINESTRUCTSPASS
270#ifdef GEN_PASS_REGISTRATION
280#undef GEN_PASS_REGISTRATION
282#ifdef GEN_PASS_CLASSES
283#error "GEN_PASS_CLASSES is deprecated; use per-pass macros"
284#undef GEN_PASS_CLASSES
void registerTransformationPasses()
std::unique_ptr<::mlir::Pass > createExposeChildMembersPass()
std::unique_ptr<::mlir::Pass > createInlineStructsPass()
void registerInlineStructsPassPass()
void registerExposeChildMembersPass()
void registerInlineStructsPass()
void registerExposeChildMembersPassPass()