Unifies the two dialects that define x86 operations into a single one. The AMX dialect is moved into X86 in line with other x86 extensions. Following the dialect renaming, X86 dialect is now a suitable home for wider range of operations targeting specific hardware features. Moving AMX definitions to X86 dialect creates a single, centralized hub for defining all x86 intrinsic-like operations. The new grouping aims to eliminate the need for new dialects as new hardware extensions become available. The two dialects are simply merged together. X86 dialect refactoring will be addressed separately. List of changes: - operations: 'amx.tile_*' => 'x86.amx.tile_*' - types: '!amx.tile' => '!x86.amx.tile' - namespace: 'mlir::amx' => 'mlir::x86::amx' - test define: 'MLIR_RUN_AMX_TESTS' => 'MLIR_RUN_X86_AMX_TESTS' - vector lowering: AMX is enabled by default together with X86 The MLIR AMX tests are now nested under X86 directory. To enable AMX integration tests, 'MLIR_RUN_X86_TESTS' must also be defined.
210 lines
10 KiB
C++
210 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/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/WasmSSA/IR/WasmSSA.h"
|
|
#include "mlir/Dialect/X86/X86Dialect.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/LLVM/XeVM/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,
|
|
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,
|
|
wasmssa::WasmSSADialect,
|
|
x86::X86Dialect,
|
|
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);
|
|
xevm::registerXeVMTargetInterfaceExternalModels(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);
|
|
}
|