5#define GEN_PASS_DECL_CONSTRAINTFLATTENINGPASS
6#define GEN_PASS_DECL_EMPTYTEMPLATEREMOVALPASS
7#define GEN_PASS_DECL_FLATTENINGPASS
8#define GEN_PASS_DECL_TEMPLATEMONOMORPHIZATIONPASS
9#define GEN_PASS_DECL_TYPEVARINFERENCEPASS
10#define GEN_PASS_DECL_WILDCARDARRAYSPECIALIZATIONPASS
17#ifdef GEN_PASS_DECL_CONSTRAINTFLATTENINGPASS
19#undef GEN_PASS_DECL_CONSTRAINTFLATTENINGPASS
21#ifdef GEN_PASS_DEF_CONSTRAINTFLATTENINGPASS
28template <
typename DerivedT>
29class ConstraintFlatteningPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
31 using Base = ConstraintFlatteningPassBase;
33 ConstraintFlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
34 ConstraintFlatteningPassBase(
const ConstraintFlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
35 ConstraintFlatteningPassBase& operator=(
const ConstraintFlatteningPassBase &) =
delete;
36 ConstraintFlatteningPassBase(ConstraintFlatteningPassBase &&) =
delete;
37 ConstraintFlatteningPassBase& operator=(ConstraintFlatteningPassBase &&) =
delete;
38 ~ConstraintFlatteningPassBase() =
default;
41 static constexpr ::llvm::StringLiteral getArgumentName() {
42 return ::llvm::StringLiteral(
"llzk-flatten-constraints");
44 ::llvm::StringRef getArgument()
const override {
return "llzk-flatten-constraints"; }
46 ::llvm::StringRef getDescription()
const override {
return R
"PD(Expand main constrain into straight-line constraints)PD"; }
49 static constexpr ::llvm::StringLiteral getPassName() {
50 return ::llvm::StringLiteral(
"ConstraintFlatteningPass");
52 ::llvm::StringRef getName()
const override {
return "ConstraintFlatteningPass"; }
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<mlir::arith::ArithDialect>();
78 registry.insert<mlir::scf::SCFDialect>();
84 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ConstraintFlatteningPassBase<DerivedT>)
90 return std::make_unique<DerivedT>();
96 return impl::createConstraintFlatteningPass();
98#undef GEN_PASS_DEF_CONSTRAINTFLATTENINGPASS
104#ifdef GEN_PASS_DECL_EMPTYTEMPLATEREMOVALPASS
106#undef GEN_PASS_DECL_EMPTYTEMPLATEREMOVALPASS
108#ifdef GEN_PASS_DEF_EMPTYTEMPLATEREMOVALPASS
115template <
typename DerivedT>
116class EmptyTemplateRemovalPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
118 using Base = EmptyTemplateRemovalPassBase;
120 EmptyTemplateRemovalPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
121 EmptyTemplateRemovalPassBase(
const EmptyTemplateRemovalPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
122 EmptyTemplateRemovalPassBase& operator=(
const EmptyTemplateRemovalPassBase &) =
delete;
123 EmptyTemplateRemovalPassBase(EmptyTemplateRemovalPassBase &&) =
delete;
124 EmptyTemplateRemovalPassBase& operator=(EmptyTemplateRemovalPassBase &&) =
delete;
125 ~EmptyTemplateRemovalPassBase() =
default;
128 static constexpr ::llvm::StringLiteral getArgumentName() {
129 return ::llvm::StringLiteral(
"llzk-drop-empty-templates");
131 ::llvm::StringRef getArgument()
const override {
return "llzk-drop-empty-templates"; }
133 ::llvm::StringRef getDescription()
const override {
return R
"PD(Remove empty templates)PD"; }
136 static constexpr ::llvm::StringLiteral getPassName() {
137 return ::llvm::StringLiteral(
"EmptyTemplateRemovalPass");
139 ::llvm::StringRef getName()
const override {
return "EmptyTemplateRemovalPass"; }
142 static bool classof(const ::mlir::Pass *pass) {
143 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
147 std::unique_ptr<::mlir::Pass> clonePass()
const override {
148 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
152 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
153 registry.insert<llzk::LLZKDialect>();
154 registry.insert<llzk::boolean::BoolDialect>();
155 registry.insert<llzk::array::ArrayDialect>();
156 registry.insert<llzk::component::StructDialect>();
157 registry.insert<llzk::constrain::ConstrainDialect>();
158 registry.insert<llzk::felt::FeltDialect>();
159 registry.insert<llzk::global::GlobalDialect>();
160 registry.insert<llzk::include::IncludeDialect>();
161 registry.insert<llzk::function::FunctionDialect>();
162 registry.insert<llzk::string::StringDialect>();
163 registry.insert<llzk::polymorphic::PolymorphicDialect>();
164 registry.insert<mlir::arith::ArithDialect>();
165 registry.insert<mlir::scf::SCFDialect>();
171 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(EmptyTemplateRemovalPassBase<DerivedT>)
177 return std::make_unique<DerivedT>();
183 return impl::createEmptyTemplateRemovalPass();
185#undef GEN_PASS_DEF_EMPTYTEMPLATEREMOVALPASS
191#ifdef GEN_PASS_DECL_FLATTENINGPASS
192struct FlatteningPassOptions {
193 unsigned iterationLimit = 1000;
198#undef GEN_PASS_DECL_FLATTENINGPASS
200#ifdef GEN_PASS_DEF_FLATTENINGPASS
211template <
typename DerivedT>
212class FlatteningPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
214 using Base = FlatteningPassBase;
216 FlatteningPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
217 FlatteningPassBase(
const FlatteningPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
218 FlatteningPassBase& operator=(
const FlatteningPassBase &) =
delete;
219 FlatteningPassBase(FlatteningPassBase &&) =
delete;
220 FlatteningPassBase& operator=(FlatteningPassBase &&) =
delete;
221 ~FlatteningPassBase() =
default;
224 static constexpr ::llvm::StringLiteral getArgumentName() {
225 return ::llvm::StringLiteral(
"llzk-flatten");
227 ::llvm::StringRef getArgument()
const override {
return "llzk-flatten"; }
229 ::llvm::StringRef getDescription()
const override {
return R
"PD(Flatten structs and unroll loops)PD"; }
232 static constexpr ::llvm::StringLiteral getPassName() {
233 return ::llvm::StringLiteral(
"FlatteningPass");
235 ::llvm::StringRef getName()
const override {
return "FlatteningPass"; }
238 static bool classof(const ::mlir::Pass *pass) {
239 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
243 std::unique_ptr<::mlir::Pass> clonePass()
const override {
244 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
248 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
249 registry.insert<llzk::LLZKDialect>();
250 registry.insert<llzk::boolean::BoolDialect>();
251 registry.insert<llzk::array::ArrayDialect>();
252 registry.insert<llzk::component::StructDialect>();
253 registry.insert<llzk::constrain::ConstrainDialect>();
254 registry.insert<llzk::felt::FeltDialect>();
255 registry.insert<llzk::global::GlobalDialect>();
256 registry.insert<llzk::include::IncludeDialect>();
257 registry.insert<llzk::function::FunctionDialect>();
258 registry.insert<llzk::string::StringDialect>();
259 registry.insert<llzk::polymorphic::PolymorphicDialect>();
260 registry.insert<mlir::arith::ArithDialect>();
261 registry.insert<mlir::scf::SCFDialect>();
267 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(FlatteningPassBase<DerivedT>)
269 FlatteningPassBase(FlatteningPassOptions options) : FlatteningPassBase() {
270 iterationLimit = std::move(options.iterationLimit);
271 cleanupMode = std::move(options.cleanupMode);
274 ::mlir::Pass::Option<unsigned> iterationLimit{*
this,
"max-iter", ::llvm::cl::desc(R
"PO(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.)PO"), ::llvm::cl::init(1000)};
275 ::mlir::Pass::Option<::llzk::polymorphic::FlatteningCleanupMode> cleanupMode{*this,
"cleanup", ::llvm::cl::desc(R
"PO(Specifies the extent to which unused parameterized definitions (i.e. structs or free functions within a `poly.template`) are removed during the flattening pass.)PO"), ::llvm::cl::init(::llzk::polymorphic::FlatteningCleanupMode::Unspecified), ::llvm::cl::values(
278 "Use the cleanup mode specified by the calling pipeline (defaults to `preimage` if not specified)."),
281 "No definitions are deleted."),
284 "Only definitions that were replaced with concrete instantiations are deleted."),
287 "All definitions that cannot be reached by a use-def chain from some concrete definition are deleted."),
290 "All definitions that cannot be reached by a use-def chain from the \"Main\" struct are deleted.")
295 return std::make_unique<DerivedT>();
299 return std::make_unique<DerivedT>(std::move(options));
305 return impl::createFlatteningPass();
309 return impl::createFlatteningPass(std::move(options));
311#undef GEN_PASS_DEF_FLATTENINGPASS
317#ifdef GEN_PASS_DECL_TEMPLATEMONOMORPHIZATIONPASS
318struct TemplateMonomorphizationPassOptions {
319 unsigned specializationLimit = 1000;
323#undef GEN_PASS_DECL_TEMPLATEMONOMORPHIZATIONPASS
325#ifdef GEN_PASS_DEF_TEMPLATEMONOMORPHIZATIONPASS
336template <
typename DerivedT>
337class TemplateMonomorphizationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
339 using Base = TemplateMonomorphizationPassBase;
341 TemplateMonomorphizationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
342 TemplateMonomorphizationPassBase(
const TemplateMonomorphizationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
343 TemplateMonomorphizationPassBase& operator=(
const TemplateMonomorphizationPassBase &) =
delete;
344 TemplateMonomorphizationPassBase(TemplateMonomorphizationPassBase &&) =
delete;
345 TemplateMonomorphizationPassBase& operator=(TemplateMonomorphizationPassBase &&) =
delete;
346 ~TemplateMonomorphizationPassBase() =
default;
349 static constexpr ::llvm::StringLiteral getArgumentName() {
350 return ::llvm::StringLiteral(
"llzk-monomorphize-templates");
352 ::llvm::StringRef getArgument()
const override {
return "llzk-monomorphize-templates"; }
354 ::llvm::StringRef getDescription()
const override {
return R
"PD(Specialize structs and free functions reachable from llzk.main)PD"; }
357 static constexpr ::llvm::StringLiteral getPassName() {
358 return ::llvm::StringLiteral(
"TemplateMonomorphizationPass");
360 ::llvm::StringRef getName()
const override {
return "TemplateMonomorphizationPass"; }
363 static bool classof(const ::mlir::Pass *pass) {
364 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
368 std::unique_ptr<::mlir::Pass> clonePass()
const override {
369 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
373 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
374 registry.insert<llzk::LLZKDialect>();
375 registry.insert<llzk::boolean::BoolDialect>();
376 registry.insert<llzk::array::ArrayDialect>();
377 registry.insert<llzk::component::StructDialect>();
378 registry.insert<llzk::constrain::ConstrainDialect>();
379 registry.insert<llzk::felt::FeltDialect>();
380 registry.insert<llzk::global::GlobalDialect>();
381 registry.insert<llzk::include::IncludeDialect>();
382 registry.insert<llzk::function::FunctionDialect>();
383 registry.insert<llzk::string::StringDialect>();
384 registry.insert<llzk::polymorphic::PolymorphicDialect>();
385 registry.insert<mlir::arith::ArithDialect>();
386 registry.insert<mlir::scf::SCFDialect>();
392 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TemplateMonomorphizationPassBase<DerivedT>)
394 TemplateMonomorphizationPassBase(TemplateMonomorphizationPassOptions options) : TemplateMonomorphizationPassBase() {
395 specializationLimit = std::move(options.specializationLimit);
398 ::mlir::Pass::Option<unsigned> specializationLimit{*
this,
"max-specializations", ::llvm::cl::desc(R
"PO(Maximum number of concrete struct and free-function definitions)PO"), ::llvm::cl::init(1000)};
402 return std::make_unique<DerivedT>();
406 return std::make_unique<DerivedT>(std::move(options));
412 return impl::createTemplateMonomorphizationPass();
416 return impl::createTemplateMonomorphizationPass(std::move(options));
418#undef GEN_PASS_DEF_TEMPLATEMONOMORPHIZATIONPASS
424#ifdef GEN_PASS_DECL_TYPEVARINFERENCEPASS
426#undef GEN_PASS_DECL_TYPEVARINFERENCEPASS
428#ifdef GEN_PASS_DEF_TYPEVARINFERENCEPASS
435template <
typename DerivedT>
436class TypeVarInferencePassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
438 using Base = TypeVarInferencePassBase;
440 TypeVarInferencePassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
441 TypeVarInferencePassBase(
const TypeVarInferencePassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
442 TypeVarInferencePassBase& operator=(
const TypeVarInferencePassBase &) =
delete;
443 TypeVarInferencePassBase(TypeVarInferencePassBase &&) =
delete;
444 TypeVarInferencePassBase& operator=(TypeVarInferencePassBase &&) =
delete;
445 ~TypeVarInferencePassBase() =
default;
448 static constexpr ::llvm::StringLiteral getArgumentName() {
449 return ::llvm::StringLiteral(
"llzk-infer-tvar");
451 ::llvm::StringRef getArgument()
const override {
return "llzk-infer-tvar"; }
453 ::llvm::StringRef getDescription()
const override {
return R
"PD(Infer concrete function types for polymorphic type variables)PD"; }
456 static constexpr ::llvm::StringLiteral getPassName() {
457 return ::llvm::StringLiteral(
"TypeVarInferencePass");
459 ::llvm::StringRef getName()
const override {
return "TypeVarInferencePass"; }
462 static bool classof(const ::mlir::Pass *pass) {
463 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
467 std::unique_ptr<::mlir::Pass> clonePass()
const override {
468 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
472 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
473 registry.insert<llzk::LLZKDialect>();
474 registry.insert<llzk::boolean::BoolDialect>();
475 registry.insert<llzk::array::ArrayDialect>();
476 registry.insert<llzk::component::StructDialect>();
477 registry.insert<llzk::constrain::ConstrainDialect>();
478 registry.insert<llzk::felt::FeltDialect>();
479 registry.insert<llzk::global::GlobalDialect>();
480 registry.insert<llzk::include::IncludeDialect>();
481 registry.insert<llzk::function::FunctionDialect>();
482 registry.insert<llzk::string::StringDialect>();
483 registry.insert<llzk::polymorphic::PolymorphicDialect>();
484 registry.insert<mlir::arith::ArithDialect>();
485 registry.insert<mlir::scf::SCFDialect>();
491 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TypeVarInferencePassBase<DerivedT>)
497 return std::make_unique<DerivedT>();
503 return impl::createTypeVarInferencePass();
505#undef GEN_PASS_DEF_TYPEVARINFERENCEPASS
511#ifdef GEN_PASS_DECL_WILDCARDARRAYSPECIALIZATIONPASS
512struct WildcardArraySpecializationPassOptions {
513 unsigned iterationLimit = 1000;
517#undef GEN_PASS_DECL_WILDCARDARRAYSPECIALIZATIONPASS
519#ifdef GEN_PASS_DEF_WILDCARDARRAYSPECIALIZATIONPASS
530template <
typename DerivedT>
531class WildcardArraySpecializationPassBase :
public ::mlir::OperationPass<::mlir::ModuleOp> {
533 using Base = WildcardArraySpecializationPassBase;
535 WildcardArraySpecializationPassBase() : ::mlir::OperationPass<::mlir::ModuleOp>(::mlir::TypeID::get<DerivedT>()) {}
536 WildcardArraySpecializationPassBase(
const WildcardArraySpecializationPassBase &other) : ::mlir::OperationPass<::mlir::ModuleOp>(other) {}
537 WildcardArraySpecializationPassBase& operator=(
const WildcardArraySpecializationPassBase &) =
delete;
538 WildcardArraySpecializationPassBase(WildcardArraySpecializationPassBase &&) =
delete;
539 WildcardArraySpecializationPassBase& operator=(WildcardArraySpecializationPassBase &&) =
delete;
540 ~WildcardArraySpecializationPassBase() =
default;
543 static constexpr ::llvm::StringLiteral getArgumentName() {
544 return ::llvm::StringLiteral(
"llzk-specialize-wildcard-arrays");
546 ::llvm::StringRef getArgument()
const override {
return "llzk-specialize-wildcard-arrays"; }
548 ::llvm::StringRef getDescription()
const override {
return R
"PD(Refine wildcard array casts and specialize concrete call targets)PD"; }
551 static constexpr ::llvm::StringLiteral getPassName() {
552 return ::llvm::StringLiteral(
"WildcardArraySpecializationPass");
554 ::llvm::StringRef getName()
const override {
return "WildcardArraySpecializationPass"; }
557 static bool classof(const ::mlir::Pass *pass) {
558 return pass->getTypeID() == ::mlir::TypeID::get<DerivedT>();
562 std::unique_ptr<::mlir::Pass> clonePass()
const override {
563 return std::make_unique<DerivedT>(*
static_cast<const DerivedT *
>(
this));
567 void getDependentDialects(::mlir::DialectRegistry ®istry)
const override {
568 registry.insert<llzk::LLZKDialect>();
569 registry.insert<llzk::boolean::BoolDialect>();
570 registry.insert<llzk::array::ArrayDialect>();
571 registry.insert<llzk::component::StructDialect>();
572 registry.insert<llzk::constrain::ConstrainDialect>();
573 registry.insert<llzk::felt::FeltDialect>();
574 registry.insert<llzk::global::GlobalDialect>();
575 registry.insert<llzk::include::IncludeDialect>();
576 registry.insert<llzk::function::FunctionDialect>();
577 registry.insert<llzk::string::StringDialect>();
578 registry.insert<llzk::polymorphic::PolymorphicDialect>();
579 registry.insert<mlir::arith::ArithDialect>();
580 registry.insert<mlir::scf::SCFDialect>();
586 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(WildcardArraySpecializationPassBase<DerivedT>)
588 WildcardArraySpecializationPassBase(WildcardArraySpecializationPassOptions options) : WildcardArraySpecializationPassBase() {
589 iterationLimit = std::move(options.iterationLimit);
592 ::mlir::Pass::Option<unsigned> iterationLimit{*
this,
"max-iter", ::llvm::cl::desc(R
"PO(Maximum number of iterations before the pass gives up reaching a fixpoint.)PO"), ::llvm::cl::init(1000)};
596 return std::make_unique<DerivedT>();
600 return std::make_unique<DerivedT>(std::move(options));
606 return impl::createWildcardArraySpecializationPass();
610 return impl::createWildcardArraySpecializationPass(std::move(options));
612#undef GEN_PASS_DEF_WILDCARDARRAYSPECIALIZATIONPASS
614#ifdef GEN_PASS_REGISTRATION
616#define GEN_PASS_REGISTRATION_CONSTRAINTFLATTENINGPASS
617#define GEN_PASS_REGISTRATION_EMPTYTEMPLATEREMOVALPASS
618#define GEN_PASS_REGISTRATION_FLATTENINGPASS
619#define GEN_PASS_REGISTRATION_TEMPLATEMONOMORPHIZATIONPASS
620#define GEN_PASS_REGISTRATION_TYPEVARINFERENCEPASS
621#define GEN_PASS_REGISTRATION_WILDCARDARRAYSPECIALIZATIONPASS
627#ifdef GEN_PASS_REGISTRATION_CONSTRAINTFLATTENINGPASS
630 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
637 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
642#undef GEN_PASS_REGISTRATION_CONSTRAINTFLATTENINGPASS
648#ifdef GEN_PASS_REGISTRATION_EMPTYTEMPLATEREMOVALPASS
651 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
658 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
663#undef GEN_PASS_REGISTRATION_EMPTYTEMPLATEREMOVALPASS
669#ifdef GEN_PASS_REGISTRATION_FLATTENINGPASS
672 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
679 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
684#undef GEN_PASS_REGISTRATION_FLATTENINGPASS
690#ifdef GEN_PASS_REGISTRATION_TEMPLATEMONOMORPHIZATIONPASS
693 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
700 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
705#undef GEN_PASS_REGISTRATION_TEMPLATEMONOMORPHIZATIONPASS
711#ifdef GEN_PASS_REGISTRATION_TYPEVARINFERENCEPASS
714 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
721 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
726#undef GEN_PASS_REGISTRATION_TYPEVARINFERENCEPASS
732#ifdef GEN_PASS_REGISTRATION_WILDCARDARRAYSPECIALIZATIONPASS
735 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
742 ::mlir::registerPass([]() -> std::unique_ptr<::mlir::Pass> {
747#undef GEN_PASS_REGISTRATION_WILDCARDARRAYSPECIALIZATIONPASS
749#ifdef GEN_PASS_REGISTRATION
763#undef GEN_PASS_REGISTRATION
765#ifdef GEN_PASS_CLASSES
766#error "GEN_PASS_CLASSES is deprecated; use per-pass macros"
767#undef GEN_PASS_CLASSES
void registerTransformationPasses()
std::unique_ptr<::mlir::Pass > createConstraintFlatteningPass()
std::unique_ptr<::mlir::Pass > createEmptyTemplateRemovalPass()
std::unique_ptr<::mlir::Pass > createFlatteningPass()
std::unique_ptr<::mlir::Pass > createTemplateMonomorphizationPass()
std::unique_ptr<::mlir::Pass > createWildcardArraySpecializationPass()
std::unique_ptr<::mlir::Pass > createTypeVarInferencePass()
void registerConstraintFlatteningPassPass()
void registerFlatteningPass()
void registerConstraintFlatteningPass()
void registerTypeVarInferencePassPass()
void registerTemplateMonomorphizationPass()
::llvm::StringRef stringifyFlatteningCleanupMode(FlatteningCleanupMode val)
void registerEmptyTemplateRemovalPass()
void registerTemplateMonomorphizationPassPass()
void registerTypeVarInferencePass()
void registerFlatteningPassPass()
void registerWildcardArraySpecializationPass()
void registerEmptyTemplateRemovalPassPass()
void registerWildcardArraySpecializationPassPass()