212 lines · cpp
1//===- RegisterAllDialects.cpp - 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-exception6//7//===----------------------------------------------------------------------===//8//9// This file defines a helper to trigger the registration of all dialects and10// passes to the system.11//12//===----------------------------------------------------------------------===//13 14#include "mlir/InitAllDialects.h"15 16#include "mlir/Dialect/AMDGPU/IR/AMDGPUDialect.h"17#include "mlir/Dialect/AMX/AMXDialect.h"18#include "mlir/Dialect/Affine/IR/AffineOps.h"19#include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h"20#include "mlir/Dialect/Arith/IR/Arith.h"21#include "mlir/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.h"22#include "mlir/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.h"23#include "mlir/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.h"24#include "mlir/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.h"25#include "mlir/Dialect/Arith/Transforms/ShardingInterfaceImpl.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/LLVMIR/XeVMDialect.h"49#include "mlir/Dialect/Linalg/IR/Linalg.h"50#include "mlir/Dialect/Linalg/Transforms/AllInterfaces.h"51#include "mlir/Dialect/Linalg/Transforms/RuntimeOpVerification.h"52#include "mlir/Dialect/MLProgram/IR/MLProgram.h"53#include "mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h"54#include "mlir/Dialect/MPI/IR/MPI.h"55#include "mlir/Dialect/Math/IR/Math.h"56#include "mlir/Dialect/MemRef/IR/MemRef.h"57#include "mlir/Dialect/MemRef/IR/MemRefMemorySlot.h"58#include "mlir/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.h"59#include "mlir/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.h"60#include "mlir/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.h"61#include "mlir/Dialect/MemRef/Transforms/RuntimeOpVerification.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/Ptr/IR/PtrDialect.h"68#include "mlir/Dialect/Quant/IR/Quant.h"69#include "mlir/Dialect/SCF/IR/SCF.h"70#include "mlir/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.h"71#include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.h"72#include "mlir/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.h"73#include "mlir/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.h"74#include "mlir/Dialect/SMT/IR/SMTDialect.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/Shard/IR/ShardDialect.h"79#include "mlir/Dialect/SparseTensor/IR/SparseTensor.h"80#include "mlir/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.h"81#include "mlir/Dialect/Tensor/IR/Tensor.h"82#include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h"83#include "mlir/Dialect/Tensor/IR/TensorTilingInterfaceImpl.h"84#include "mlir/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.h"85#include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h"86#include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h"87#include "mlir/Dialect/Tensor/Transforms/RuntimeOpVerification.h"88#include "mlir/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.h"89#include "mlir/Dialect/Tosa/IR/ShardingInterfaceImpl.h"90#include "mlir/Dialect/Tosa/IR/TosaOps.h"91#include "mlir/Dialect/Transform/IR/TransformDialect.h"92#include "mlir/Dialect/Transform/PDLExtension/PDLExtension.h"93#include "mlir/Dialect/UB/IR/UBOps.h"94#include "mlir/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.h"95#include "mlir/Dialect/Vector/IR/VectorOps.h"96#include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h"97#include "mlir/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.h"98#include "mlir/Dialect/WasmSSA/IR/WasmSSA.h"99#include "mlir/Dialect/X86Vector/X86VectorDialect.h"100#include "mlir/Dialect/XeGPU/IR/XeGPU.h"101#include "mlir/IR/Dialect.h"102#include "mlir/Interfaces/CastInterfaces.h"103#include "mlir/Target/LLVM/NVVM/Target.h"104#include "mlir/Target/LLVM/ROCDL/Target.h"105#include "mlir/Target/LLVM/XeVM/Target.h"106#include "mlir/Target/SPIRV/Target.h"107 108/// Add all the MLIR dialects to the provided registry.109void mlir::registerAllDialects(DialectRegistry ®istry) {110 // clang-format off111 registry.insert<acc::OpenACCDialect,112 affine::AffineDialect,113 amdgpu::AMDGPUDialect,114 amx::AMXDialect,115 arith::ArithDialect,116 arm_neon::ArmNeonDialect,117 arm_sme::ArmSMEDialect,118 arm_sve::ArmSVEDialect,119 async::AsyncDialect,120 bufferization::BufferizationDialect,121 cf::ControlFlowDialect,122 complex::ComplexDialect,123 DLTIDialect,124 emitc::EmitCDialect,125 func::FuncDialect,126 gpu::GPUDialect,127 index::IndexDialect,128 irdl::IRDLDialect,129 linalg::LinalgDialect,130 LLVM::LLVMDialect,131 math::MathDialect,132 memref::MemRefDialect,133 shard::ShardDialect,134 ml_program::MLProgramDialect,135 mpi::MPIDialect,136 nvgpu::NVGPUDialect,137 NVVM::NVVMDialect,138 omp::OpenMPDialect,139 pdl::PDLDialect,140 pdl_interp::PDLInterpDialect,141 ptr::PtrDialect,142 quant::QuantDialect,143 ROCDL::ROCDLDialect,144 scf::SCFDialect,145 shape::ShapeDialect,146 smt::SMTDialect,147 sparse_tensor::SparseTensorDialect,148 spirv::SPIRVDialect,149 tensor::TensorDialect,150 tosa::TosaDialect,151 transform::TransformDialect,152 ub::UBDialect,153 vector::VectorDialect,154 wasmssa::WasmSSADialect,155 x86vector::X86VectorDialect,156 xegpu::XeGPUDialect,157 xevm::XeVMDialect>();158 // clang-format on159 160 // Register all external models.161 affine::registerValueBoundsOpInterfaceExternalModels(registry);162 arith::registerBufferDeallocationOpInterfaceExternalModels(registry);163 arith::registerBufferizableOpInterfaceExternalModels(registry);164 arith::registerBufferViewFlowOpInterfaceExternalModels(registry);165 arith::registerShardingInterfaceExternalModels(registry);166 arith::registerValueBoundsOpInterfaceExternalModels(registry);167 bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(168 registry);169 builtin::registerCastOpInterfaceExternalModels(registry);170 cf::registerBufferizableOpInterfaceExternalModels(registry);171 cf::registerBufferDeallocationOpInterfaceExternalModels(registry);172 gpu::registerBufferDeallocationOpInterfaceExternalModels(registry);173 gpu::registerValueBoundsOpInterfaceExternalModels(registry);174 LLVM::registerInlinerInterface(registry);175 NVVM::registerInlinerInterface(registry);176 linalg::registerAllDialectInterfaceImplementations(registry);177 linalg::registerRuntimeVerifiableOpInterfaceExternalModels(registry);178 memref::registerAllocationOpInterfaceExternalModels(registry);179 memref::registerBufferViewFlowOpInterfaceExternalModels(registry);180 memref::registerRuntimeVerifiableOpInterfaceExternalModels(registry);181 memref::registerValueBoundsOpInterfaceExternalModels(registry);182 memref::registerMemorySlotExternalModels(registry);183 ml_program::registerBufferizableOpInterfaceExternalModels(registry);184 scf::registerBufferDeallocationOpInterfaceExternalModels(registry);185 scf::registerBufferizableOpInterfaceExternalModels(registry);186 scf::registerValueBoundsOpInterfaceExternalModels(registry);187 shape::registerBufferizableOpInterfaceExternalModels(registry);188 sparse_tensor::registerBufferizableOpInterfaceExternalModels(registry);189 tensor::registerBufferizableOpInterfaceExternalModels(registry);190 tensor::registerFindPayloadReplacementOpInterfaceExternalModels(registry);191 tensor::registerInferTypeOpInterfaceExternalModels(registry);192 tensor::registerRuntimeVerifiableOpInterfaceExternalModels(registry);193 tensor::registerSubsetOpInterfaceExternalModels(registry);194 tensor::registerTilingInterfaceExternalModels(registry);195 tensor::registerValueBoundsOpInterfaceExternalModels(registry);196 tosa::registerShardingInterfaceExternalModels(registry);197 vector::registerBufferizableOpInterfaceExternalModels(registry);198 vector::registerSubsetOpInterfaceExternalModels(registry);199 vector::registerValueBoundsOpInterfaceExternalModels(registry);200 NVVM::registerNVVMTargetInterfaceExternalModels(registry);201 ROCDL::registerROCDLTargetInterfaceExternalModels(registry);202 spirv::registerSPIRVTargetInterfaceExternalModels(registry);203 xevm::registerXeVMTargetInterfaceExternalModels(registry);204}205 206/// Append all the MLIR dialects to the registry contained in the given context.207void mlir::registerAllDialects(MLIRContext &context) {208 DialectRegistry registry;209 registerAllDialects(registry);210 context.appendDialectRegistry(registry);211}212