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<mlir::ub::UBDialect>();
77 registry.insert<DLTIDialect>();
79 registry.insert<mlir::enzyme::EnzymeDialect>();
80 registry.insert<mlir::impulse::ImpulseDialect>();
81 registry.insert<mlir::enzyme::llvm_ext::LLVMExtDialect>();
83 mlir::enzyme::registerenzymePasses();
85 mlir::func::registerInlinerExtension(registry);
86 mlir::LLVM::registerInlinerInterface(registry);
89 mlir::registerCSEPass();
90 mlir::registerMem2RegPass();
91 mlir::registerLowerAffinePass();
92 mlir::registerSCCPPass();
93 mlir::registerInlinerPass();
94 mlir::registerCanonicalizerPass();
95 mlir::registerSymbolDCEPass();
96 mlir::registerLoopInvariantCodeMotionPass();
97 mlir::registerConvertSCFToOpenMPPass();
98 mlir::registerSCFToControlFlowPass();
99 mlir::affine::registerAffinePasses();
100 mlir::registerReconcileUnrealizedCastsPass();
101 mlir::registerLinalgPasses();
103 registry.addExtension(+[](MLIRContext *ctx, LLVM::LLVMDialect *dialect) {
104 LLVM::LLVMFunctionType::attachInterface<MemRefInsider>(*ctx);
105 LLVM::LLVMArrayType::attachInterface<MemRefInsider>(*ctx);
106 LLVM::LLVMPointerType::attachInterface<MemRefInsider>(*ctx);
107 LLVM::LLVMStructType::attachInterface<MemRefInsider>(*ctx);
108 MemRefType::attachInterface<PtrElementModel<MemRefType>>(*ctx);
109 LLVM::LLVMStructType::attachInterface<
111 LLVM::LLVMPointerType::attachInterface<
113 LLVM::LLVMArrayType::attachInterface<PtrElementModel<LLVM::LLVMArrayType>>(
120 return mlir::asMainReturnCode(mlir::MlirOptMain(
121 argc, argv,
"Enzyme modular optimizer driver", registry));