5#define GEN_PASS_DECL_INLINESTRUCTSPASS
12#ifdef GEN_PASS_DECL_INLINESTRUCTSPASS
13struct InlineStructsPassOptions {
14 uint64_t maxComplexity = 0;
18#undef GEN_PASS_DECL_INLINESTRUCTSPASS
20#ifdef GEN_PASS_DEF_INLINESTRUCTSPASS
31template <
typename DerivedT>
32class InlineStructsPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
34 using Base = InlineStructsPassBase;
36 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
37 InlineStructsPassBase(
const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
38 InlineStructsPassBase& operator=(
const InlineStructsPassBase &) =
delete;
39 InlineStructsPassBase(InlineStructsPassBase &&) =
delete;
40 InlineStructsPassBase& operator=(InlineStructsPassBase &&) =
delete;
41 ~InlineStructsPassBase() =
default;
44 static constexpr ::llvm::StringLiteral getArgumentName() {
45 return ::llvm::StringLiteral(
"llzk-inline-structs");
47 ::llvm::StringRef getArgument()
const override {
return "llzk-inline-structs"; }
49 ::llvm::StringRef getDescription()
const override {
return "Inlines nested structs (i.e., subcomponents)."; }
52 static constexpr ::llvm::StringLiteral getPassName() {
53 return ::llvm::StringLiteral(
"InlineStructsPass");
55 ::llvm::StringRef getName()
const override {
return "InlineStructsPass"; }
58 static bool classof(const ::mlir::Pass *pass) {
59 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
63 std::unique_ptr<::mlir::Pass> clonePass()
const override {
64 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
68 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
69 registry.insert<llzk::LLZKDialect>();
70 registry.insert<llzk::boolean::BoolDialect>();
71 registry.insert<llzk::array::ArrayDialect>();
72 registry.insert<llzk::component::StructDialect>();
73 registry.insert<llzk::constrain::ConstrainDialect>();
74 registry.insert<llzk::felt::FeltDialect>();
75 registry.insert<llzk::global::GlobalDialect>();
76 registry.insert<llzk::include::IncludeDialect>();
77 registry.insert<llzk::function::FunctionDialect>();
78 registry.insert<llzk::string::StringDialect>();
79 registry.insert<llzk::polymorphic::PolymorphicDialect>();
80 registry.insert<mlir::arith::ArithDialect>();
81 registry.insert<mlir::scf::SCFDialect>();
87 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
89 InlineStructsPassBase(InlineStructsPassOptions options) : InlineStructsPassBase() {
90 maxComplexity = std::move(options.maxComplexity);
93 ::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)};
97 return std::make_unique<DerivedT>();
101 return std::make_unique<DerivedT>(std::move(options));
107 return impl::createInlineStructsPass();
111 return impl::createInlineStructsPass(std::move(options));
113#undef GEN_PASS_DEF_INLINESTRUCTSPASS
115#ifdef GEN_PASS_REGISTRATION
122 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
129 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
141#undef GEN_PASS_REGISTRATION
144#ifdef GEN_PASS_CLASSES
146template <
typename DerivedT>
147class InlineStructsPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
149 using Base = InlineStructsPassBase;
151 InlineStructsPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
152 InlineStructsPassBase(
const InlineStructsPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
153 InlineStructsPassBase& operator=(
const InlineStructsPassBase &) =
delete;
154 InlineStructsPassBase(InlineStructsPassBase &&) =
delete;
155 InlineStructsPassBase& operator=(InlineStructsPassBase &&) =
delete;
156 ~InlineStructsPassBase() =
default;
159 static constexpr ::llvm::StringLiteral getArgumentName() {
160 return ::llvm::StringLiteral(
"llzk-inline-structs");
162 ::llvm::StringRef getArgument()
const override {
return "llzk-inline-structs"; }
164 ::llvm::StringRef getDescription()
const override {
return "Inlines nested structs (i.e., subcomponents)."; }
167 static constexpr ::llvm::StringLiteral getPassName() {
168 return ::llvm::StringLiteral(
"InlineStructsPass");
170 ::llvm::StringRef getName()
const override {
return "InlineStructsPass"; }
173 static bool classof(const ::mlir::Pass *pass) {
174 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
178 std::unique_ptr<::mlir::Pass> clonePass()
const override {
179 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
183 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
184 registry.insert<llzk::LLZKDialect>();
185 registry.insert<llzk::boolean::BoolDialect>();
186 registry.insert<llzk::array::ArrayDialect>();
187 registry.insert<llzk::component::StructDialect>();
188 registry.insert<llzk::constrain::ConstrainDialect>();
189 registry.insert<llzk::felt::FeltDialect>();
190 registry.insert<llzk::global::GlobalDialect>();
191 registry.insert<llzk::include::IncludeDialect>();
192 registry.insert<llzk::function::FunctionDialect>();
193 registry.insert<llzk::string::StringDialect>();
194 registry.insert<llzk::polymorphic::PolymorphicDialect>();
195 registry.insert<mlir::arith::ArithDialect>();
196 registry.insert<mlir::scf::SCFDialect>();
202 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(InlineStructsPassBase<DerivedT>)
205 ::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)};
207#undef GEN_PASS_CLASSES
void registerTransformationPasses()
std::unique_ptr<::mlir::Pass > createInlineStructsPass()
void registerInlineStructsPassPass()
void registerInlineStructsPass()