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/AMDGPUDialect.h"
18 #include "mlir/Dialect/AMX/AMXDialect.h"
19 #include "mlir/Dialect/Affine/IR/AffineOps.h"
20 #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h"
21 #include "mlir/Dialect/Arithmetic/Transforms/BufferizableOpInterfaceImpl.h"
22 #include "mlir/Dialect/ArmNeon/ArmNeonDialect.h"
23 #include "mlir/Dialect/ArmSVE/ArmSVEDialect.h"
24 #include "mlir/Dialect/Async/IR/Async.h"
25 #include "mlir/Dialect/Bufferization/IR/Bufferization.h"
26 #include "mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.h"
27 #include "mlir/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.h"
28 #include "mlir/Dialect/Complex/IR/Complex.h"
29 #include "mlir/Dialect/ControlFlow/IR/ControlFlow.h"
30 #include "mlir/Dialect/DLTI/DLTI.h"
31 #include "mlir/Dialect/EmitC/IR/EmitC.h"
32 #include "mlir/Dialect/Func/IR/FuncOps.h"
33 #include "mlir/Dialect/GPU/IR/GPUDialect.h"
34 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
35 #include "mlir/Dialect/LLVMIR/NVVMDialect.h"
36 #include "mlir/Dialect/LLVMIR/ROCDLDialect.h"
37 #include "mlir/Dialect/Linalg/IR/Linalg.h"
38 #include "mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.h"
39 #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h"
40 #include "mlir/Dialect/Linalg/Transforms/TilingInterfaceImpl.h"
41 #include "mlir/Dialect/MLProgram/IR/MLProgram.h"
42 #include "mlir/Dialect/Math/IR/Math.h"
43 #include "mlir/Dialect/MemRef/IR/MemRef.h"
44 #include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h"
45 #include "mlir/Dialect/OpenACC/OpenACC.h"
46 #include "mlir/Dialect/OpenMP/OpenMPDialect.h"
47 #include "mlir/Dialect/PDL/IR/PDL.h"
48 #include "mlir/Dialect/PDLInterp/IR/PDLInterp.h"
49 #include "mlir/Dialect/Quant/QuantOps.h"
50 #include "mlir/Dialect/SCF/IR/SCF.h"
51 #include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.h"
52 #include "mlir/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.h"
53 #include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
54 #include "mlir/Dialect/Shape/IR/Shape.h"
55 #include "mlir/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.h"
56 #include "mlir/Dialect/SparseTensor/IR/SparseTensor.h"
57 #include "mlir/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.h"
58 #include "mlir/Dialect/Tensor/IR/Tensor.h"
59 #include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h"
60 #include "mlir/Dialect/Tensor/IR/TensorTilingInterfaceImpl.h"
61 #include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h"
62 #include "mlir/Dialect/Tosa/IR/TosaOps.h"
63 #include "mlir/Dialect/Transform/IR/TransformDialect.h"
64 #include "mlir/Dialect/Vector/IR/VectorOps.h"
65 #include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h"
66 #include "mlir/Dialect/X86Vector/X86VectorDialect.h"
67 #include "mlir/IR/Dialect.h"
68
69 namespace mlir {
70
71 /// Add all the MLIR dialects to the provided registry.
registerAllDialects(DialectRegistry & registry)72 inline void registerAllDialects(DialectRegistry ®istry) {
73 // clang-format off
74 registry.insert<acc::OpenACCDialect,
75 AffineDialect,
76 arith::ArithmeticDialect,
77 amdgpu::AMDGPUDialect,
78 amx::AMXDialect,
79 arm_neon::ArmNeonDialect,
80 async::AsyncDialect,
81 bufferization::BufferizationDialect,
82 cf::ControlFlowDialect,
83 complex::ComplexDialect,
84 DLTIDialect,
85 emitc::EmitCDialect,
86 func::FuncDialect,
87 gpu::GPUDialect,
88 LLVM::LLVMDialect,
89 linalg::LinalgDialect,
90 math::MathDialect,
91 memref::MemRefDialect,
92 ml_program::MLProgramDialect,
93 nvgpu::NVGPUDialect,
94 scf::SCFDialect,
95 omp::OpenMPDialect,
96 pdl::PDLDialect,
97 pdl_interp::PDLInterpDialect,
98 quant::QuantizationDialect,
99 spirv::SPIRVDialect,
100 arm_sve::ArmSVEDialect,
101 vector::VectorDialect,
102 NVVM::NVVMDialect,
103 ROCDL::ROCDLDialect,
104 shape::ShapeDialect,
105 sparse_tensor::SparseTensorDialect,
106 tensor::TensorDialect,
107 transform::TransformDialect,
108 tosa::TosaDialect,
109 x86vector::X86VectorDialect>();
110 // clang-format on
111
112 // Register all dialect extensions.
113 bufferization::registerTransformDialectExtension(registry);
114 linalg::registerTransformDialectExtension(registry);
115 scf::registerTransformDialectExtension(registry);
116
117 // Register all external models.
118 arith::registerBufferizableOpInterfaceExternalModels(registry);
119 bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(
120 registry);
121 linalg::registerBufferizableOpInterfaceExternalModels(registry);
122 linalg::registerTilingInterfaceExternalModels(registry);
123 scf::registerBufferizableOpInterfaceExternalModels(registry);
124 shape::registerBufferizableOpInterfaceExternalModels(registry);
125 sparse_tensor::registerBufferizableOpInterfaceExternalModels(registry);
126 tensor::registerBufferizableOpInterfaceExternalModels(registry);
127 tensor::registerInferTypeOpInterfaceExternalModels(registry);
128 tensor::registerTilingOpInterfaceExternalModels(registry);
129 vector::registerBufferizableOpInterfaceExternalModels(registry);
130 }
131
132 /// Append all the MLIR dialects to the registry contained in the given context.
registerAllDialects(MLIRContext & context)133 inline void registerAllDialects(MLIRContext &context) {
134 DialectRegistry registry;
135 registerAllDialects(registry);
136 context.appendDialectRegistry(registry);
137 }
138
139 } // namespace mlir
140
141 #endif // MLIR_INITALLDIALECTS_H_
142