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/Transforms/BufferDeallocationOpInterfaceImpl.h"
41#include "mlir/Dialect/IRDL/IR/IRDL.h"
42#include "mlir/Dialect/Index/IR/IndexDialect.h"
43#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
44#include "mlir/Dialect/LLVMIR/NVVMDialect.h"
45#include "mlir/Dialect/LLVMIR/ROCDLDialect.h"
46#include "mlir/Dialect/Linalg/IR/Linalg.h"
47#include "mlir/Dialect/Linalg/Transforms/AllInterfaces.h"
48#include "mlir/Dialect/MLProgram/IR/MLProgram.h"
49#include "mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h"
50#include "mlir/Dialect/MPI/IR/MPI.h"
51#include "mlir/Dialect/Math/IR/Math.h"
52#include "mlir/Dialect/MemRef/IR/MemRef.h"
53#include "mlir/Dialect/MemRef/IR/MemRefMemorySlot.h"
54#include "mlir/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.h"
55#include "mlir/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.h"
56#include "mlir/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.h"
57#include "mlir/Dialect/MemRef/Transforms/RuntimeOpVerification.h"
58#include "mlir/Dialect/Mesh/IR/MeshDialect.h"
59#include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h"
60#include "mlir/Dialect/OpenACC/OpenACC.h"
61#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
62#include "mlir/Dialect/PDL/IR/PDL.h"
63#include "mlir/Dialect/PDLInterp/IR/PDLInterp.h"
64#include "mlir/Dialect/Polynomial/IR/PolynomialDialect.h"
65#include "mlir/Dialect/Quant/QuantOps.h"
66#include "mlir/Dialect/SCF/IR/SCF.h"
67#include "mlir/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.h"
68#include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.h"
69#include "mlir/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.h"
70#include "mlir/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.h"
71#include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
72#include "mlir/Dialect/Shape/IR/Shape.h"
73#include "mlir/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.h"
74#include "mlir/Dialect/SparseTensor/IR/SparseTensor.h"
75#include "mlir/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.h"
76#include "mlir/Dialect/Tensor/IR/Tensor.h"
77#include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h"
78#include "mlir/Dialect/Tensor/IR/TensorTilingInterfaceImpl.h"
79#include "mlir/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.h"
80#include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h"
81#include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h"
82#include "mlir/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.h"
83#include "mlir/Dialect/Tosa/IR/ShardingInterfaceImpl.h"
84#include "mlir/Dialect/Tosa/IR/TosaOps.h"
85#include "mlir/Dialect/Transform/IR/TransformDialect.h"
86#include "mlir/Dialect/Transform/PDLExtension/PDLExtension.h"
87#include "mlir/Dialect/UB/IR/UBOps.h"
88#include "mlir/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.h"
89#include "mlir/Dialect/Vector/IR/VectorOps.h"
90#include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h"
91#include "mlir/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.h"
92#include "mlir/Dialect/X86Vector/X86VectorDialect.h"
93#include "mlir/Dialect/XeGPU/IR/XeGPU.h"
94#include "mlir/IR/Dialect.h"
95#include "mlir/Interfaces/CastInterfaces.h"
96#include "mlir/Target/LLVM/NVVM/Target.h"
97#include "mlir/Target/LLVM/ROCDL/Target.h"
98#include "mlir/Target/SPIRV/Target.h"
99
100namespace mlir {
101
102/// Add all the MLIR dialects to the provided registry.
103inline void registerAllDialects(DialectRegistry &registry) {
104 // clang-format off
105 registry.insert<acc::OpenACCDialect,
106 affine::AffineDialect,
107 amdgpu::AMDGPUDialect,
108 amx::AMXDialect,
109 arith::ArithDialect,
110 arm_neon::ArmNeonDialect,
111 arm_sme::ArmSMEDialect,
112 arm_sve::ArmSVEDialect,
113 async::AsyncDialect,
114 bufferization::BufferizationDialect,
115 cf::ControlFlowDialect,
116 complex::ComplexDialect,
117 DLTIDialect,
118 emitc::EmitCDialect,
119 func::FuncDialect,
120 gpu::GPUDialect,
121 index::IndexDialect,
122 irdl::IRDLDialect,
123 linalg::LinalgDialect,
124 LLVM::LLVMDialect,
125 math::MathDialect,
126 memref::MemRefDialect,
127 mesh::MeshDialect,
128 ml_program::MLProgramDialect,
129 mpi::MPIDialect,
130 nvgpu::NVGPUDialect,
131 NVVM::NVVMDialect,
132 omp::OpenMPDialect,
133 pdl::PDLDialect,
134 pdl_interp::PDLInterpDialect,
135 polynomial::PolynomialDialect,
136 quant::QuantizationDialect,
137 ROCDL::ROCDLDialect,
138 scf::SCFDialect,
139 shape::ShapeDialect,
140 sparse_tensor::SparseTensorDialect,
141 spirv::SPIRVDialect,
142 tensor::TensorDialect,
143 tosa::TosaDialect,
144 transform::TransformDialect,
145 ub::UBDialect,
146 vector::VectorDialect,
147 x86vector::X86VectorDialect,
148 xegpu::XeGPUDialect>();
149 // clang-format on
150
151 // Register all external models.
152 affine::registerValueBoundsOpInterfaceExternalModels(registry);
153 arith::registerBufferDeallocationOpInterfaceExternalModels(registry);
154 arith::registerBufferizableOpInterfaceExternalModels(registry);
155 arith::registerBufferViewFlowOpInterfaceExternalModels(registry);
156 arith::registerValueBoundsOpInterfaceExternalModels(registry);
157 bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(
158 registry);
159 builtin::registerCastOpInterfaceExternalModels(registry);
160 cf::registerBufferizableOpInterfaceExternalModels(registry);
161 cf::registerBufferDeallocationOpInterfaceExternalModels(registry);
162 gpu::registerBufferDeallocationOpInterfaceExternalModels(registry);
163 linalg::registerAllDialectInterfaceImplementations(registry);
164 memref::registerAllocationOpInterfaceExternalModels(registry);
165 memref::registerBufferViewFlowOpInterfaceExternalModels(registry);
166 memref::registerRuntimeVerifiableOpInterfaceExternalModels(registry);
167 memref::registerValueBoundsOpInterfaceExternalModels(registry);
168 memref::registerMemorySlotExternalModels(registry);
169 ml_program::registerBufferizableOpInterfaceExternalModels(registry);
170 scf::registerBufferDeallocationOpInterfaceExternalModels(registry);
171 scf::registerBufferizableOpInterfaceExternalModels(registry);
172 scf::registerValueBoundsOpInterfaceExternalModels(registry);
173 shape::registerBufferizableOpInterfaceExternalModels(registry);
174 sparse_tensor::registerBufferizableOpInterfaceExternalModels(registry);
175 tensor::registerBufferizableOpInterfaceExternalModels(registry);
176 tensor::registerFindPayloadReplacementOpInterfaceExternalModels(registry);
177 tensor::registerInferTypeOpInterfaceExternalModels(registry);
178 tensor::registerSubsetOpInterfaceExternalModels(registry);
179 tensor::registerTilingInterfaceExternalModels(registry);
180 tensor::registerValueBoundsOpInterfaceExternalModels(registry);
181 tosa::registerShardingInterfaceExternalModels(registry);
182 vector::registerBufferizableOpInterfaceExternalModels(registry);
183 vector::registerSubsetOpInterfaceExternalModels(registry);
184 vector::registerValueBoundsOpInterfaceExternalModels(registry);
185 NVVM::registerNVVMTargetInterfaceExternalModels(registry);
186 ROCDL::registerROCDLTargetInterfaceExternalModels(registry);
187 spirv::registerSPIRVTargetInterfaceExternalModels(registry);
188}
189
190/// Append all the MLIR dialects to the registry contained in the given context.
191inline void registerAllDialects(MLIRContext &context) {
192 DialectRegistry registry;
193 registerAllDialects(registry);
194 context.appendDialectRegistry(registry);
195}
196
197} // namespace mlir
198
199#endif // MLIR_INITALLDIALECTS_H_
200

source code of mlir/include/mlir/InitAllDialects.h