xref: /llvm-project/mlir/include/mlir/InitAllDialects.h (revision 8d306ccdef6b70881f5d79b09c03df720351e5f8)
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 &registry) {
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