57int main(
int argc,
char **argv) {
58 mlir::DialectRegistry registry;
61 registry.insert<mlir::affine::AffineDialect>();
62 registry.insert<mlir::LLVM::LLVMDialect>();
63 registry.insert<mlir::memref::MemRefDialect>();
64 registry.insert<mlir::async::AsyncDialect>();
65 registry.insert<mlir::complex::ComplexDialect>();
66 registry.insert<mlir::func::FuncDialect>();
67 registry.insert<mlir::arith::ArithDialect>();
68 registry.insert<mlir::cf::ControlFlowDialect>();
69 registry.insert<mlir::scf::SCFDialect>();
70 registry.insert<mlir::gpu::GPUDialect>();
71 registry.insert<mlir::NVVM::NVVMDialect>();
72 registry.insert<mlir::omp::OpenMPDialect>();
73 registry.insert<mlir::math::MathDialect>();
74 registry.insert<mlir::linalg::LinalgDialect>();
75 registry.insert<mlir::tensor::TensorDialect>();
76 registry.insert<DLTIDialect>();
78 registry.insert<mlir::enzyme::EnzymeDialect>();
79 registry.insert<mlir::impulse::ImpulseDialect>();
80 registry.insert<mlir::enzyme::llvm_ext::LLVMExtDialect>();
82 mlir::enzyme::registerenzymePasses();
84 mlir::func::registerInlinerExtension(registry);
85 mlir::LLVM::registerInlinerInterface(registry);
88 mlir::registerCSEPass();
89 mlir::registerMem2RegPass();
90 mlir::registerLowerAffinePass();
91 mlir::registerSCCPPass();
92 mlir::registerInlinerPass();
93 mlir::registerCanonicalizerPass();
94 mlir::registerSymbolDCEPass();
95 mlir::registerLoopInvariantCodeMotionPass();
96 mlir::registerConvertSCFToOpenMPPass();
97 mlir::registerSCFToControlFlowPass();
98 mlir::affine::registerAffinePasses();
99 mlir::registerReconcileUnrealizedCastsPass();
100 mlir::registerLinalgPasses();
102 registry.addExtension(+[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) {
103 LLVM::LLVMFunctionType::attachInterface<MemRefInsider>(*ctx);
104 LLVM::LLVMArrayType::attachInterface<MemRefInsider>(*ctx);
105 LLVM::LLVMPointerType::attachInterface<MemRefInsider>(*ctx);
106 LLVM::LLVMStructType::attachInterface<MemRefInsider>(*ctx);
107 MemRefType::attachInterface<PtrElementModel<MemRefType>>(*ctx);
108 LLVM::LLVMStructType::attachInterface<
110 LLVM::LLVMPointerType::attachInterface<
112 LLVM::LLVMArrayType::attachInterface<PtrElementModel<LLVM::LLVMArrayType>>(
119 return mlir::asMainReturnCode(mlir::MlirOptMain(
120 argc, argv,
"Enzyme modular optimizer driver", registry));