
`InitAll***` functions are used by `opt`-style tools to init all MLIR dialects/passes/extensions. Currently they are implemeted as inline functions and include essentially the entire MLIR header tree. Each file which includes this header (~10 currently) takes 10+ sec and multiple GB of ram to compile (tested with clang-19), which limits amount of parallel compiler jobs which can be run. Also, flang just includes this file into one of its headers. Move the actual registration code to the static library, so it's compiled only once. Discourse thread https://discourse.llvm.org/t/rfc-moving-initall-implementation-into-static-library/87559
208 lines
10 KiB
C++
208 lines
10 KiB
C++
//===- RegisterAllDialects.cpp - MLIR Dialects Registration -----*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines a helper to trigger the registration of all dialects and
|
|
// passes to the system.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "mlir/InitAllDialects.h"
|
|
|
|
#include "mlir/Dialect/AMDGPU/IR/AMDGPUDialect.h"
|
|
#include "mlir/Dialect/AMX/AMXDialect.h"
|
|
#include "mlir/Dialect/Affine/IR/AffineOps.h"
|
|
#include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Arith/IR/Arith.h"
|
|
#include "mlir/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Arith/Transforms/BufferDeallocationOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Arith/Transforms/ShardingInterfaceImpl.h"
|
|
#include "mlir/Dialect/ArmNeon/ArmNeonDialect.h"
|
|
#include "mlir/Dialect/ArmSME/IR/ArmSME.h"
|
|
#include "mlir/Dialect/ArmSVE/IR/ArmSVEDialect.h"
|
|
#include "mlir/Dialect/Async/IR/Async.h"
|
|
#include "mlir/Dialect/Bufferization/IR/Bufferization.h"
|
|
#include "mlir/Dialect/Bufferization/Transforms/FuncBufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Complex/IR/Complex.h"
|
|
#include "mlir/Dialect/ControlFlow/IR/ControlFlow.h"
|
|
#include "mlir/Dialect/ControlFlow/Transforms/BufferDeallocationOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/ControlFlow/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/DLTI/DLTI.h"
|
|
#include "mlir/Dialect/EmitC/IR/EmitC.h"
|
|
#include "mlir/Dialect/Func/IR/FuncOps.h"
|
|
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
|
|
#include "mlir/Dialect/GPU/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/GPU/Transforms/BufferDeallocationOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/IRDL/IR/IRDL.h"
|
|
#include "mlir/Dialect/Index/IR/IndexDialect.h"
|
|
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
|
|
#include "mlir/Dialect/LLVMIR/NVVMDialect.h"
|
|
#include "mlir/Dialect/LLVMIR/ROCDLDialect.h"
|
|
#include "mlir/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.h"
|
|
#include "mlir/Dialect/LLVMIR/XeVMDialect.h"
|
|
#include "mlir/Dialect/Linalg/IR/Linalg.h"
|
|
#include "mlir/Dialect/Linalg/Transforms/AllInterfaces.h"
|
|
#include "mlir/Dialect/Linalg/Transforms/RuntimeOpVerification.h"
|
|
#include "mlir/Dialect/MLProgram/IR/MLProgram.h"
|
|
#include "mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/MPI/IR/MPI.h"
|
|
#include "mlir/Dialect/Math/IR/Math.h"
|
|
#include "mlir/Dialect/MemRef/IR/MemRef.h"
|
|
#include "mlir/Dialect/MemRef/IR/MemRefMemorySlot.h"
|
|
#include "mlir/Dialect/MemRef/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/MemRef/Transforms/AllocationOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/MemRef/Transforms/BufferViewFlowOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/MemRef/Transforms/RuntimeOpVerification.h"
|
|
#include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h"
|
|
#include "mlir/Dialect/OpenACC/OpenACC.h"
|
|
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
|
|
#include "mlir/Dialect/PDL/IR/PDL.h"
|
|
#include "mlir/Dialect/PDLInterp/IR/PDLInterp.h"
|
|
#include "mlir/Dialect/Ptr/IR/PtrDialect.h"
|
|
#include "mlir/Dialect/Quant/IR/Quant.h"
|
|
#include "mlir/Dialect/SCF/IR/SCF.h"
|
|
#include "mlir/Dialect/SCF/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.h"
|
|
#include "mlir/Dialect/SCF/Transforms/BufferDeallocationOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/SMT/IR/SMTDialect.h"
|
|
#include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
|
|
#include "mlir/Dialect/Shape/IR/Shape.h"
|
|
#include "mlir/Dialect/Shape/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Shard/IR/ShardDialect.h"
|
|
#include "mlir/Dialect/SparseTensor/IR/SparseTensor.h"
|
|
#include "mlir/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tensor/IR/Tensor.h"
|
|
#include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tensor/IR/TensorTilingInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tensor/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h"
|
|
#include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tensor/Transforms/RuntimeOpVerification.h"
|
|
#include "mlir/Dialect/Tensor/Transforms/SubsetInsertionOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tosa/IR/ShardingInterfaceImpl.h"
|
|
#include "mlir/Dialect/Tosa/IR/TosaOps.h"
|
|
#include "mlir/Dialect/Transform/IR/TransformDialect.h"
|
|
#include "mlir/Dialect/Transform/PDLExtension/PDLExtension.h"
|
|
#include "mlir/Dialect/UB/IR/UBOps.h"
|
|
#include "mlir/Dialect/Vector/IR/ValueBoundsOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Vector/IR/VectorOps.h"
|
|
#include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/Vector/Transforms/SubsetOpInterfaceImpl.h"
|
|
#include "mlir/Dialect/X86Vector/X86VectorDialect.h"
|
|
#include "mlir/Dialect/XeGPU/IR/XeGPU.h"
|
|
#include "mlir/IR/Dialect.h"
|
|
#include "mlir/Interfaces/CastInterfaces.h"
|
|
#include "mlir/Target/LLVM/NVVM/Target.h"
|
|
#include "mlir/Target/LLVM/ROCDL/Target.h"
|
|
#include "mlir/Target/SPIRV/Target.h"
|
|
|
|
/// Add all the MLIR dialects to the provided registry.
|
|
void mlir::registerAllDialects(DialectRegistry ®istry) {
|
|
// clang-format off
|
|
registry.insert<acc::OpenACCDialect,
|
|
affine::AffineDialect,
|
|
amdgpu::AMDGPUDialect,
|
|
amx::AMXDialect,
|
|
arith::ArithDialect,
|
|
arm_neon::ArmNeonDialect,
|
|
arm_sme::ArmSMEDialect,
|
|
arm_sve::ArmSVEDialect,
|
|
async::AsyncDialect,
|
|
bufferization::BufferizationDialect,
|
|
cf::ControlFlowDialect,
|
|
complex::ComplexDialect,
|
|
DLTIDialect,
|
|
emitc::EmitCDialect,
|
|
func::FuncDialect,
|
|
gpu::GPUDialect,
|
|
index::IndexDialect,
|
|
irdl::IRDLDialect,
|
|
linalg::LinalgDialect,
|
|
LLVM::LLVMDialect,
|
|
math::MathDialect,
|
|
memref::MemRefDialect,
|
|
shard::ShardDialect,
|
|
ml_program::MLProgramDialect,
|
|
mpi::MPIDialect,
|
|
nvgpu::NVGPUDialect,
|
|
NVVM::NVVMDialect,
|
|
omp::OpenMPDialect,
|
|
pdl::PDLDialect,
|
|
pdl_interp::PDLInterpDialect,
|
|
ptr::PtrDialect,
|
|
quant::QuantDialect,
|
|
ROCDL::ROCDLDialect,
|
|
scf::SCFDialect,
|
|
shape::ShapeDialect,
|
|
smt::SMTDialect,
|
|
sparse_tensor::SparseTensorDialect,
|
|
spirv::SPIRVDialect,
|
|
tensor::TensorDialect,
|
|
tosa::TosaDialect,
|
|
transform::TransformDialect,
|
|
ub::UBDialect,
|
|
vector::VectorDialect,
|
|
x86vector::X86VectorDialect,
|
|
xegpu::XeGPUDialect,
|
|
xevm::XeVMDialect>();
|
|
// clang-format on
|
|
|
|
// Register all external models.
|
|
affine::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
arith::registerBufferDeallocationOpInterfaceExternalModels(registry);
|
|
arith::registerBufferizableOpInterfaceExternalModels(registry);
|
|
arith::registerBufferViewFlowOpInterfaceExternalModels(registry);
|
|
arith::registerShardingInterfaceExternalModels(registry);
|
|
arith::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(
|
|
registry);
|
|
builtin::registerCastOpInterfaceExternalModels(registry);
|
|
cf::registerBufferizableOpInterfaceExternalModels(registry);
|
|
cf::registerBufferDeallocationOpInterfaceExternalModels(registry);
|
|
gpu::registerBufferDeallocationOpInterfaceExternalModels(registry);
|
|
gpu::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
LLVM::registerInlinerInterface(registry);
|
|
NVVM::registerInlinerInterface(registry);
|
|
linalg::registerAllDialectInterfaceImplementations(registry);
|
|
linalg::registerRuntimeVerifiableOpInterfaceExternalModels(registry);
|
|
memref::registerAllocationOpInterfaceExternalModels(registry);
|
|
memref::registerBufferViewFlowOpInterfaceExternalModels(registry);
|
|
memref::registerRuntimeVerifiableOpInterfaceExternalModels(registry);
|
|
memref::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
memref::registerMemorySlotExternalModels(registry);
|
|
ml_program::registerBufferizableOpInterfaceExternalModels(registry);
|
|
scf::registerBufferDeallocationOpInterfaceExternalModels(registry);
|
|
scf::registerBufferizableOpInterfaceExternalModels(registry);
|
|
scf::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
shape::registerBufferizableOpInterfaceExternalModels(registry);
|
|
sparse_tensor::registerBufferizableOpInterfaceExternalModels(registry);
|
|
tensor::registerBufferizableOpInterfaceExternalModels(registry);
|
|
tensor::registerFindPayloadReplacementOpInterfaceExternalModels(registry);
|
|
tensor::registerInferTypeOpInterfaceExternalModels(registry);
|
|
tensor::registerRuntimeVerifiableOpInterfaceExternalModels(registry);
|
|
tensor::registerSubsetOpInterfaceExternalModels(registry);
|
|
tensor::registerTilingInterfaceExternalModels(registry);
|
|
tensor::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
tosa::registerShardingInterfaceExternalModels(registry);
|
|
vector::registerBufferizableOpInterfaceExternalModels(registry);
|
|
vector::registerSubsetOpInterfaceExternalModels(registry);
|
|
vector::registerValueBoundsOpInterfaceExternalModels(registry);
|
|
NVVM::registerNVVMTargetInterfaceExternalModels(registry);
|
|
ROCDL::registerROCDLTargetInterfaceExternalModels(registry);
|
|
spirv::registerSPIRVTargetInterfaceExternalModels(registry);
|
|
}
|
|
|
|
/// Append all the MLIR dialects to the registry contained in the given context.
|
|
void mlir::registerAllDialects(MLIRContext &context) {
|
|
DialectRegistry registry;
|
|
registerAllDialects(registry);
|
|
context.appendDialectRegistry(registry);
|
|
}
|