1 //===- InitAllDialects.h - MLIR Dialects Registration -----------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines a helper to trigger the registration of all dialects and 10 // passes to the system. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef MLIR_INITALLDIALECTS_H_ 15 #define MLIR_INITALLDIALECTS_H_ 16 17 #include "mlir/Dialect/AMDGPU/IR/AMDGPUDialect.h" 18 #include "mlir/Dialect/AMX/AMXDialect.h" 19 #include "mlir/Dialect/Affine/IR/AffineOps.h" 20 #include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h" 21 #include "mlir/Dialect/Arith/IR/Arith.h" 22 #include "mlir/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.h" 23 #include "mlir/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.h" 24 #include "mlir/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.h" 25 #include "mlir/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.h" 26 #include "mlir/Dialect/ArmNeon/ArmNeonDialect.h" 27 #include "mlir/Dialect/ArmSME/IR/ArmSME.h" 28 #include "mlir/Dialect/ArmSVE/IR/ArmSVEDialect.h" 29 #include "mlir/Dialect/Async/IR/Async.h" 30 #include "mlir/Dialect/Bufferization/IR/Bufferization.h" 31 #include "mlir/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.h" 32 #include "mlir/Dialect/Complex/IR/Complex.h" 33 #include "mlir/Dialect/ControlFlow/IR/ControlFlow.h" 34 #include "mlir/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.h" 35 #include "mlir/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.h" 36 #include "mlir/Dialect/DLTI/DLTI.h" 37 #include "mlir/Dialect/EmitC/IR/EmitC.h" 38 #include "mlir/Dialect/Func/IR/FuncOps.h" 39 #include "mlir/Dialect/GPU/IR/GPUDialect.h" 40 #include "mlir/Dialect/GPU/IR/ValueBoundsOpInterfaceImpl.h" 41 #include "mlir/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.h" 42 #include "mlir/Dialect/IRDL/IR/IRDL.h" 43 #include "mlir/Dialect/Index/IR/IndexDialect.h" 44 #include "mlir/Dialect/LLVMIR/LLVMDialect.h" 45 #include "mlir/Dialect/LLVMIR/NVVMDialect.h" 46 #include "mlir/Dialect/LLVMIR/ROCDLDialect.h" 47 #include "mlir/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.h" 48 #include "mlir/Dialect/Linalg/IR/Linalg.h" 49 #include "mlir/Dialect/Linalg/Transforms/AllInterfaces.h" 50 #include "mlir/Dialect/Linalg/Transforms/RuntimeOpVerification.h" 51 #include "mlir/Dialect/MLProgram/IR/MLProgram.h" 52 #include "mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h" 53 #include "mlir/Dialect/MPI/IR/MPI.h" 54 #include "mlir/Dialect/Math/IR/Math.h" 55 #include "mlir/Dialect/MemRef/IR/MemRef.h" 56 #include "mlir/Dialect/MemRef/IR/MemRefMemorySlot.h" 57 #include "mlir/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.h" 58 #include "mlir/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.h" 59 #include "mlir/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.h" 60 #include "mlir/Dialect/MemRef/Transforms/RuntimeOpVerification.h" 61 #include "mlir/Dialect/Mesh/IR/MeshDialect.h" 62 #include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h" 63 #include "mlir/Dialect/OpenACC/OpenACC.h" 64 #include "mlir/Dialect/OpenMP/OpenMPDialect.h" 65 #include "mlir/Dialect/PDL/IR/PDL.h" 66 #include "mlir/Dialect/PDLInterp/IR/PDLInterp.h" 67 #include "mlir/Dialect/Polynomial/IR/PolynomialDialect.h" 68 #include "mlir/Dialect/Ptr/IR/PtrDialect.h" 69 #include "mlir/Dialect/Quant/IR/Quant.h" 70 #include "mlir/Dialect/SCF/IR/SCF.h" 71 #include "mlir/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.h" 72 #include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.h" 73 #include "mlir/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.h" 74 #include "mlir/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.h" 75 #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h" 76 #include "mlir/Dialect/Shape/IR/Shape.h" 77 #include "mlir/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.h" 78 #include "mlir/Dialect/SparseTensor/IR/SparseTensor.h" 79 #include "mlir/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.h" 80 #include "mlir/Dialect/Tensor/IR/Tensor.h" 81 #include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h" 82 #include "mlir/Dialect/Tensor/IR/TensorTilingInterfaceImpl.h" 83 #include "mlir/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.h" 84 #include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h" 85 #include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h" 86 #include "mlir/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.h" 87 #include "mlir/Dialect/Tosa/IR/ShardingInterfaceImpl.h" 88 #include "mlir/Dialect/Tosa/IR/TosaOps.h" 89 #include "mlir/Dialect/Transform/IR/TransformDialect.h" 90 #include "mlir/Dialect/Transform/PDLExtension/PDLExtension.h" 91 #include "mlir/Dialect/UB/IR/UBOps.h" 92 #include "mlir/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.h" 93 #include "mlir/Dialect/Vector/IR/VectorOps.h" 94 #include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h" 95 #include "mlir/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.h" 96 #include "mlir/Dialect/X86Vector/X86VectorDialect.h" 97 #include "mlir/Dialect/XeGPU/IR/XeGPU.h" 98 #include "mlir/IR/Dialect.h" 99 #include "mlir/Interfaces/CastInterfaces.h" 100 #include "mlir/Target/LLVM/NVVM/Target.h" 101 #include "mlir/Target/LLVM/ROCDL/Target.h" 102 #include "mlir/Target/SPIRV/Target.h" 103 104 namespace mlir { 105 106 /// Add all the MLIR dialects to the provided registry. 107 inline void registerAllDialects(DialectRegistry ®istry) { 108 // clang-format off 109 registry.insert<acc::OpenACCDialect, 110 affine::AffineDialect, 111 amdgpu::AMDGPUDialect, 112 amx::AMXDialect, 113 arith::ArithDialect, 114 arm_neon::ArmNeonDialect, 115 arm_sme::ArmSMEDialect, 116 arm_sve::ArmSVEDialect, 117 async::AsyncDialect, 118 bufferization::BufferizationDialect, 119 cf::ControlFlowDialect, 120 complex::ComplexDialect, 121 DLTIDialect, 122 emitc::EmitCDialect, 123 func::FuncDialect, 124 gpu::GPUDialect, 125 index::IndexDialect, 126 irdl::IRDLDialect, 127 linalg::LinalgDialect, 128 LLVM::LLVMDialect, 129 math::MathDialect, 130 memref::MemRefDialect, 131 mesh::MeshDialect, 132 ml_program::MLProgramDialect, 133 mpi::MPIDialect, 134 nvgpu::NVGPUDialect, 135 NVVM::NVVMDialect, 136 omp::OpenMPDialect, 137 pdl::PDLDialect, 138 pdl_interp::PDLInterpDialect, 139 polynomial::PolynomialDialect, 140 ptr::PtrDialect, 141 quant::QuantDialect, 142 ROCDL::ROCDLDialect, 143 scf::SCFDialect, 144 shape::ShapeDialect, 145 sparse_tensor::SparseTensorDialect, 146 spirv::SPIRVDialect, 147 tensor::TensorDialect, 148 tosa::TosaDialect, 149 transform::TransformDialect, 150 ub::UBDialect, 151 vector::VectorDialect, 152 x86vector::X86VectorDialect, 153 xegpu::XeGPUDialect>(); 154 // clang-format on 155 156 // Register all external models. 157 affine::registerValueBoundsOpInterfaceExternalModels(registry); 158 arith::registerBufferDeallocationOpInterfaceExternalModels(registry); 159 arith::registerBufferizableOpInterfaceExternalModels(registry); 160 arith::registerBufferViewFlowOpInterfaceExternalModels(registry); 161 arith::registerValueBoundsOpInterfaceExternalModels(registry); 162 bufferization::func_ext::registerBufferizableOpInterfaceExternalModels( 163 registry); 164 builtin::registerCastOpInterfaceExternalModels(registry); 165 cf::registerBufferizableOpInterfaceExternalModels(registry); 166 cf::registerBufferDeallocationOpInterfaceExternalModels(registry); 167 gpu::registerBufferDeallocationOpInterfaceExternalModels(registry); 168 gpu::registerValueBoundsOpInterfaceExternalModels(registry); 169 LLVM::registerInlinerInterface(registry); 170 NVVM::registerInlinerInterface(registry); 171 linalg::registerAllDialectInterfaceImplementations(registry); 172 linalg::registerRuntimeVerifiableOpInterfaceExternalModels(registry); 173 memref::registerAllocationOpInterfaceExternalModels(registry); 174 memref::registerBufferViewFlowOpInterfaceExternalModels(registry); 175 memref::registerRuntimeVerifiableOpInterfaceExternalModels(registry); 176 memref::registerValueBoundsOpInterfaceExternalModels(registry); 177 memref::registerMemorySlotExternalModels(registry); 178 ml_program::registerBufferizableOpInterfaceExternalModels(registry); 179 scf::registerBufferDeallocationOpInterfaceExternalModels(registry); 180 scf::registerBufferizableOpInterfaceExternalModels(registry); 181 scf::registerValueBoundsOpInterfaceExternalModels(registry); 182 shape::registerBufferizableOpInterfaceExternalModels(registry); 183 sparse_tensor::registerBufferizableOpInterfaceExternalModels(registry); 184 tensor::registerBufferizableOpInterfaceExternalModels(registry); 185 tensor::registerFindPayloadReplacementOpInterfaceExternalModels(registry); 186 tensor::registerInferTypeOpInterfaceExternalModels(registry); 187 tensor::registerSubsetOpInterfaceExternalModels(registry); 188 tensor::registerTilingInterfaceExternalModels(registry); 189 tensor::registerValueBoundsOpInterfaceExternalModels(registry); 190 tosa::registerShardingInterfaceExternalModels(registry); 191 vector::registerBufferizableOpInterfaceExternalModels(registry); 192 vector::registerSubsetOpInterfaceExternalModels(registry); 193 vector::registerValueBoundsOpInterfaceExternalModels(registry); 194 NVVM::registerNVVMTargetInterfaceExternalModels(registry); 195 ROCDL::registerROCDLTargetInterfaceExternalModels(registry); 196 spirv::registerSPIRVTargetInterfaceExternalModels(registry); 197 } 198 199 /// Append all the MLIR dialects to the registry contained in the given context. 200 inline void registerAllDialects(MLIRContext &context) { 201 DialectRegistry registry; 202 registerAllDialects(registry); 203 context.appendDialectRegistry(registry); 204 } 205 206 } // namespace mlir 207 208 #endif // MLIR_INITALLDIALECTS_H_ 209