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 &registry) {
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