diff --git a/mlir/examples/transform/Ch2/transform-opt/transform-opt.cpp b/mlir/examples/transform/Ch2/transform-opt/transform-opt.cpp --- a/mlir/examples/transform/Ch2/transform-opt/transform-opt.cpp +++ b/mlir/examples/transform/Ch2/transform-opt/transform-opt.cpp @@ -15,6 +15,7 @@ #include "mlir/IR/DialectRegistry.h" #include "mlir/IR/MLIRContext.h" #include "mlir/InitAllDialects.h" +#include "mlir/InitAllExtensions.h" #include "mlir/Tools/mlir-opt/MlirOptMain.h" #include "mlir/Transforms/Passes.h" #include @@ -35,6 +36,7 @@ // Register all "core" dialects and our transform dialect extension. mlir::DialectRegistry registry; mlir::registerAllDialects(registry); + mlir::registerAllExtensions(registry); registerMyExtension(registry); // Register a handful of cleanup passes that we can run to make the output IR diff --git a/mlir/examples/transform/Ch3/transform-opt/transform-opt.cpp b/mlir/examples/transform/Ch3/transform-opt/transform-opt.cpp --- a/mlir/examples/transform/Ch3/transform-opt/transform-opt.cpp +++ b/mlir/examples/transform/Ch3/transform-opt/transform-opt.cpp @@ -15,6 +15,7 @@ #include "mlir/IR/DialectRegistry.h" #include "mlir/IR/MLIRContext.h" #include "mlir/InitAllDialects.h" +#include "mlir/InitAllExtensions.h" #include "mlir/Tools/mlir-opt/MlirOptMain.h" #include "mlir/Transforms/Passes.h" #include @@ -35,6 +36,7 @@ // Register all "core" dialects and our transform dialect extension. mlir::DialectRegistry registry; mlir::registerAllDialects(registry); + mlir::registerAllExtensions(registry); registerMyExtension(registry); // Register a handful of cleanup passes that we can run to make the output IR diff --git a/mlir/include/mlir/InitAllDialects.h b/mlir/include/mlir/InitAllDialects.h --- a/mlir/include/mlir/InitAllDialects.h +++ b/mlir/include/mlir/InitAllDialects.h @@ -18,7 +18,6 @@ #include "mlir/Dialect/AMX/AMXDialect.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/ValueBoundsOpInterfaceImpl.h" -#include "mlir/Dialect/Affine/TransformOps/AffineTransformOps.h" #include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/Arith/IR/ValueBoundsOpInterfaceImpl.h" #include "mlir/Dialect/Arith/Transforms/BufferizableOpInterfaceImpl.h" @@ -27,16 +26,13 @@ #include "mlir/Dialect/ArmSVE/ArmSVEDialect.h" #include "mlir/Dialect/Async/IR/Async.h" #include "mlir/Dialect/Bufferization/IR/Bufferization.h" -#include "mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.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/DLTI/DLTI.h" #include "mlir/Dialect/EmitC/IR/EmitC.h" #include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Dialect/Func/TransformOps/FuncTransformOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/GPU/TransformOps/GPUTransformOps.h" #include "mlir/Dialect/IRDL/IR/IRDL.h" #include "mlir/Dialect/Index/IR/IndexDialect.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -44,7 +40,6 @@ #include "mlir/Dialect/LLVMIR/ROCDLDialect.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/IR/ValueBoundsOpInterfaceImpl.h" -#include "mlir/Dialect/Linalg/TransformOps/DialectExtension.h" #include "mlir/Dialect/Linalg/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/Linalg/Transforms/TilingInterfaceImpl.h" #include "mlir/Dialect/MLProgram/IR/MLProgram.h" @@ -52,11 +47,9 @@ #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/TransformOps/MemRefTransformOps.h" #include "mlir/Dialect/MemRef/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/MemRef/Transforms/RuntimeOpVerification.h" #include "mlir/Dialect/NVGPU/IR/NVGPUDialect.h" -#include "mlir/Dialect/NVGPU/TransformOps/NVGPUTransformOps.h" #include "mlir/Dialect/OpenACC/OpenACC.h" #include "mlir/Dialect/OpenMP/OpenMPDialect.h" #include "mlir/Dialect/PDL/IR/PDL.h" @@ -64,13 +57,11 @@ #include "mlir/Dialect/Quant/QuantOps.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/BufferizableOpInterfaceImpl.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/SparseTensor/IR/SparseTensor.h" -#include "mlir/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.h" #include "mlir/Dialect/SparseTensor/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h" @@ -83,7 +74,6 @@ #include "mlir/Dialect/Transform/PDLExtension/PDLExtension.h" #include "mlir/Dialect/UB/IR/UBOps.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" -#include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.h" #include "mlir/Dialect/Vector/Transforms/BufferizableOpInterfaceImpl.h" #include "mlir/Dialect/X86Vector/X86VectorDialect.h" #include "mlir/IR/Dialect.h" @@ -136,20 +126,6 @@ x86vector::X86VectorDialect>(); // clang-format on - // Register all dialect extensions. - affine::registerTransformDialectExtension(registry); - bufferization::registerTransformDialectExtension(registry); - func::registerTransformDialectExtension(registry); - gpu::registerTransformDialectExtension(registry); - linalg::registerTransformDialectExtension(registry); - memref::registerTransformDialectExtension(registry); - nvgpu::registerTransformDialectExtension(registry); - scf::registerTransformDialectExtension(registry); - sparse_tensor::registerTransformDialectExtension(registry); - tensor::registerTransformDialectExtension(registry); - transform::registerPDLExtension(registry); - vector::registerTransformDialectExtension(registry); - // Register all external models. affine::registerValueBoundsOpInterfaceExternalModels(registry); arith::registerBufferizableOpInterfaceExternalModels(registry); diff --git a/mlir/include/mlir/InitAllExtensions.h b/mlir/include/mlir/InitAllExtensions.h --- a/mlir/include/mlir/InitAllExtensions.h +++ b/mlir/include/mlir/InitAllExtensions.h @@ -23,9 +23,24 @@ #include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h" #include "mlir/Conversion/NVVMToLLVM/NVVMToLLVM.h" #include "mlir/Conversion/UBToLLVM/UBToLLVM.h" +#include "mlir/Dialect/Affine/TransformOps/AffineTransformOps.h" +#include "mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.h" #include "mlir/Dialect/Func/Extensions/AllExtensions.h" +#include "mlir/Dialect/Func/TransformOps/FuncTransformOps.h" +#include "mlir/Dialect/GPU/TransformOps/GPUTransformOps.h" +#include "mlir/Dialect/Linalg/TransformOps/DialectExtension.h" +#include "mlir/Dialect/MemRef/TransformOps/MemRefTransformOps.h" +#include "mlir/Dialect/NVGPU/TransformOps/NVGPUTransformOps.h" +#include "mlir/Dialect/SCF/TransformOps/SCFTransformOps.h" +#include "mlir/Dialect/SparseTensor/TransformOps/SparseTensorTransformOps.h" +#include "mlir/Dialect/Tensor/TransformOps/TensorTransformOps.h" +#include "mlir/Dialect/Vector/TransformOps/VectorTransformOps.h" #include "mlir/Target/LLVM/NVVM/Target.h" #include "mlir/Target/LLVM/ROCDL/Target.h" +#include "mlir/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.h" +#include "mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h" +#include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" +#include "mlir/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.h" #include @@ -37,6 +52,7 @@ /// individually register the specific extensions that are useful for the /// pipelines and transformations you are using. inline void registerAllExtensions(DialectRegistry ®istry) { + // Register all conversions to LLVM extensions. arith::registerConvertArithToLLVMInterface(registry); registerConvertComplexToLLVMInterface(registry); cf::registerConvertControlFlowToLLVMInterface(registry); @@ -47,8 +63,27 @@ registerConvertMemRefToLLVMInterface(registry); registerConvertNVVMToLLVMInterface(registry); ub::registerConvertUBToLLVMInterface(registry); - registerNVVMTarget(registry); - registerROCDLTarget(registry); + + // Register all transform dialect extensions. + affine::registerTransformDialectExtension(registry); + bufferization::registerTransformDialectExtension(registry); + func::registerTransformDialectExtension(registry); + gpu::registerTransformDialectExtension(registry); + linalg::registerTransformDialectExtension(registry); + memref::registerTransformDialectExtension(registry); + nvgpu::registerTransformDialectExtension(registry); + scf::registerTransformDialectExtension(registry); + sparse_tensor::registerTransformDialectExtension(registry); + tensor::registerTransformDialectExtension(registry); + transform::registerPDLExtension(registry); + vector::registerTransformDialectExtension(registry); + + // Translation extensions need to be registered by calling + // `registerAllToLLVMIRTranslations` (see All.h). + + // However, GPU target attribute interfaces require special treatment. + registerNVVMTargetInterfaceExtension(registry); + registerROCDLTargetInterfaceExtension(registry); } } // namespace mlir diff --git a/mlir/include/mlir/Target/LLVM/NVVM/Target.h b/mlir/include/mlir/Target/LLVM/NVVM/Target.h --- a/mlir/include/mlir/Target/LLVM/NVVM/Target.h +++ b/mlir/include/mlir/Target/LLVM/NVVM/Target.h @@ -18,11 +18,11 @@ class MLIRContext; /// Registers the `TargetAttrInterface` for the `#nvvm.target` attribute in the /// given registry. -void registerNVVMTarget(DialectRegistry ®istry); +void registerNVVMTargetInterfaceExtension(DialectRegistry ®istry); /// Registers the `TargetAttrInterface` for the `#nvvm.target` attribute in the /// registry associated with the given context. -void registerNVVMTarget(MLIRContext &context); +void registerNVVMTargetInterfaceExtension(MLIRContext &context); } // namespace mlir #endif // MLIR_TARGET_LLVM_NVVM_TARGET_H diff --git a/mlir/include/mlir/Target/LLVM/ROCDL/Target.h b/mlir/include/mlir/Target/LLVM/ROCDL/Target.h --- a/mlir/include/mlir/Target/LLVM/ROCDL/Target.h +++ b/mlir/include/mlir/Target/LLVM/ROCDL/Target.h @@ -18,11 +18,11 @@ class MLIRContext; /// Registers the `TargetAttrInterface` for the `#rocdl.target` attribute in the /// given registry. -void registerROCDLTarget(DialectRegistry ®istry); +void registerROCDLTargetInterfaceExtension(DialectRegistry ®istry); /// Registers the `TargetAttrInterface` for the `#rocdl.target` attribute in the /// registry associated with the given context. -void registerROCDLTarget(MLIRContext &context); +void registerROCDLTargetInterfaceExtension(MLIRContext &context); } // namespace mlir #endif // MLIR_TARGET_LLVM_ROCDL_TARGET_H diff --git a/mlir/include/mlir/Target/LLVMIR/Dialect/All.h b/mlir/include/mlir/Target/LLVMIR/Dialect/All.h --- a/mlir/include/mlir/Target/LLVMIR/Dialect/All.h +++ b/mlir/include/mlir/Target/LLVMIR/Dialect/All.h @@ -14,6 +14,8 @@ #ifndef MLIR_TARGET_LLVMIR_DIALECT_ALL_H #define MLIR_TARGET_LLVMIR_DIALECT_ALL_H +#include "mlir/Target/LLVM/NVVM/Target.h" +#include "mlir/Target/LLVM/ROCDL/Target.h" #include "mlir/Target/LLVMIR/Dialect/AMX/AMXToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/ArmNeon/ArmNeonToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/ArmSME/ArmSMEToLLVMIRTranslation.h" @@ -46,6 +48,16 @@ registerOpenMPDialectTranslation(registry); registerROCDLDialectTranslation(registry); registerX86VectorDialectTranslation(registry); + + // Extension required for translating GPU offloading Ops. + gpu::registerOffloadingLLVMTranslationInterfaceExtension(registry); + + // GPU target attribute interfaces are not used during translation, however + // the IR fails to verify if they are not registered due to the promise + // mechanism. + // TODO: remove these. + registerNVVMTargetInterfaceExtension(registry); + registerROCDLTargetInterfaceExtension(registry); } /// Registers all dialects that can be translated from LLVM IR and the diff --git a/mlir/include/mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h b/mlir/include/mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h --- a/mlir/include/mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h +++ b/mlir/include/mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h @@ -29,7 +29,7 @@ namespace gpu { /// Registers the offloading LLVM translation interfaces for /// `gpu.select_object`. -void registerOffloadingLLVMTranslationInterfacesExternalModels( +void registerOffloadingLLVMTranslationInterfaceExtension( mlir::DialectRegistry ®istry); } // namespace gpu diff --git a/mlir/lib/CAPI/RegisterEverything/RegisterEverything.cpp b/mlir/lib/CAPI/RegisterEverything/RegisterEverything.cpp --- a/mlir/lib/CAPI/RegisterEverything/RegisterEverything.cpp +++ b/mlir/lib/CAPI/RegisterEverything/RegisterEverything.cpp @@ -9,9 +9,11 @@ #include "mlir-c/RegisterEverything.h" #include "mlir/CAPI/IR.h" +#include "mlir/IR/MLIRContext.h" #include "mlir/InitAllDialects.h" #include "mlir/InitAllExtensions.h" #include "mlir/InitAllPasses.h" +#include "mlir/Target/LLVMIR/Dialect/All.h" #include "mlir/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" @@ -22,8 +24,9 @@ void mlirRegisterAllLLVMTranslations(MlirContext context) { auto &ctx = *unwrap(context); - mlir::registerBuiltinDialectTranslation(ctx); - mlir::registerLLVMDialectTranslation(ctx); + mlir::DialectRegistry registry; + mlir::registerAllToLLVMIRTranslations(registry); + ctx.appendDialectRegistry(registry); } void mlirRegisterAllPasses() { mlir::registerAllPasses(); } diff --git a/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp b/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp --- a/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp @@ -15,11 +15,10 @@ #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/Dialect/LLVMIR/NVVMDialect.h" +#include "mlir/Dialect/LLVMIR/ROCDLDialect.h" #include "mlir/IR/BuiltinOps.h" -#include "mlir/Target/LLVM/NVVM/Target.h" -#include "mlir/Target/LLVM/ROCDL/Target.h" -#include "mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h" -#include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "llvm/ADT/STLExtras.h" @@ -46,13 +45,13 @@ void GpuModuleToBinaryPass::getDependentDialects( DialectRegistry ®istry) const { // Register all GPU related translations. - registerLLVMDialectTranslation(registry); - registerGPUDialectTranslation(registry); + registry.insert(); + registry.insert(); #if MLIR_CUDA_CONVERSIONS_ENABLED == 1 - registerNVVMTarget(registry); + registry.insert(); #endif #if MLIR_ROCM_CONVERSIONS_ENABLED == 1 - registerROCDLTarget(registry); + registry.insert(); #endif } diff --git a/mlir/lib/Dialect/GPU/Transforms/NVVMAttachTarget.cpp b/mlir/lib/Dialect/GPU/Transforms/NVVMAttachTarget.cpp --- a/mlir/lib/Dialect/GPU/Transforms/NVVMAttachTarget.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/NVVMAttachTarget.cpp @@ -38,7 +38,7 @@ void runOnOperation() override; void getDependentDialects(DialectRegistry ®istry) const override { - registerNVVMTarget(registry); + registry.insert(); } }; } // namespace diff --git a/mlir/lib/Dialect/GPU/Transforms/ROCDLAttachTarget.cpp b/mlir/lib/Dialect/GPU/Transforms/ROCDLAttachTarget.cpp --- a/mlir/lib/Dialect/GPU/Transforms/ROCDLAttachTarget.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/ROCDLAttachTarget.cpp @@ -38,7 +38,7 @@ void runOnOperation() override; void getDependentDialects(DialectRegistry ®istry) const override { - registerROCDLTarget(registry); + registry.insert(); } }; } // namespace diff --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp --- a/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToBlob.cpp @@ -12,7 +12,9 @@ // //===----------------------------------------------------------------------===// +#include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/GPU/Transforms/Passes.h" +#include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/ExecutionEngine/OptUtils.h" #include "mlir/Pass/Pass.h" #include "mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h" @@ -23,8 +25,8 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Target/TargetMachine.h" -#include #include +#include #define DEBUG_TYPE "serialize-to-blob" @@ -126,8 +128,8 @@ void gpu::SerializeToBlobPass::getDependentDialects( DialectRegistry ®istry) const { - registerGPUDialectTranslation(registry); - registerLLVMDialectTranslation(registry); + registry.insert(); + registry.insert(); OperationPass::getDependentDialects(registry); } diff --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp --- a/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/GPU/Transforms/Passes.h" +#include "mlir/Dialect/LLVMIR/NVVMDialect.h" #include "llvm/Support/Debug.h" #if MLIR_GPU_TO_CUBIN_PASS_ENABLE @@ -102,7 +103,7 @@ void SerializeToCubinPass::getDependentDialects( DialectRegistry ®istry) const { - registerNVVMDialectTranslation(registry); + registry.insert(); gpu::SerializeToBlobPass::getDependentDialects(registry); } diff --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp --- a/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/GPU/Transforms/Passes.h" +#include "mlir/Dialect/LLVMIR/ROCDLDialect.h" #include "mlir/IR/Location.h" #include "mlir/IR/MLIRContext.h" @@ -147,7 +148,7 @@ void SerializeToHsacoPass::getDependentDialects( DialectRegistry ®istry) const { - registerROCDLDialectTranslation(registry); + registry.insert(); gpu::SerializeToBlobPass::getDependentDialects(registry); } diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp --- a/mlir/lib/Target/LLVM/NVVM/Target.cpp +++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp @@ -51,16 +51,15 @@ } // namespace // Register the NVVM dialect, the NVVM translation & the target interface. -void mlir::registerNVVMTarget(DialectRegistry ®istry) { - registerNVVMDialectTranslation(registry); +void mlir::registerNVVMTargetInterfaceExtension(DialectRegistry ®istry) { registry.addExtension(+[](MLIRContext *ctx, NVVM::NVVMDialect *dialect) { NVVMTargetAttr::attachInterface(*ctx); }); } -void mlir::registerNVVMTarget(MLIRContext &context) { +void mlir::registerNVVMTargetInterfaceExtension(MLIRContext &context) { DialectRegistry registry; - registerNVVMTarget(registry); + registerNVVMTargetInterfaceExtension(registry); context.appendDialectRegistry(registry); } diff --git a/mlir/lib/Target/LLVM/ROCDL/Target.cpp b/mlir/lib/Target/LLVM/ROCDL/Target.cpp --- a/mlir/lib/Target/LLVM/ROCDL/Target.cpp +++ b/mlir/lib/Target/LLVM/ROCDL/Target.cpp @@ -64,16 +64,15 @@ } // namespace // Register the ROCDL dialect, the ROCDL translation and the target interface. -void mlir::registerROCDLTarget(DialectRegistry ®istry) { - registerROCDLDialectTranslation(registry); +void mlir::registerROCDLTargetInterfaceExtension(DialectRegistry ®istry) { registry.addExtension(+[](MLIRContext *ctx, ROCDL::ROCDLDialect *dialect) { ROCDLTargetAttr::attachInterface(*ctx); }); } -void mlir::registerROCDLTarget(MLIRContext &context) { +void mlir::registerROCDLTargetInterfaceExtension(MLIRContext &context) { DialectRegistry registry; - registerROCDLTarget(registry); + registerROCDLTargetInterfaceExtension(registry); context.appendDialectRegistry(registry); } diff --git a/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp b/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp --- a/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp +++ b/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp @@ -13,8 +13,6 @@ #include "mlir/Dialect/DLTI/DLTI.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/IR/BuiltinOps.h" -#include "mlir/Target/LLVM/NVVM/Target.h" -#include "mlir/Target/LLVM/ROCDL/Target.h" #include "mlir/Target/LLVMIR/Dialect/All.h" #include "mlir/Target/LLVMIR/Export.h" #include "mlir/Tools/mlir-translate/Translation.h" @@ -38,8 +36,6 @@ }, [](DialectRegistry ®istry) { registry.insert(); - registerNVVMTarget(registry); - registerROCDLTarget(registry); registerAllToLLVMIRTranslations(registry); }); } diff --git a/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp --- a/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.cpp @@ -68,7 +68,6 @@ registry.addExtension(+[](MLIRContext *ctx, gpu::GPUDialect *dialect) { dialect->addInterfaces(); }); - gpu::registerOffloadingLLVMTranslationInterfacesExternalModels(registry); } void mlir::registerGPUDialectTranslation(MLIRContext &context) { diff --git a/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp b/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp --- a/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/GPU/SelectObjectAttr.cpp @@ -51,7 +51,7 @@ } } // namespace -void mlir::gpu::registerOffloadingLLVMTranslationInterfacesExternalModels( +void mlir::gpu::registerOffloadingLLVMTranslationInterfaceExtension( DialectRegistry ®istry) { registry.addExtension(+[](MLIRContext *ctx, gpu::GPUDialect *dialect) { SelectObjectAttr::attachInterface(*ctx); diff --git a/mlir/tools/mlir-opt/mlir-opt.cpp b/mlir/tools/mlir-opt/mlir-opt.cpp --- a/mlir/tools/mlir-opt/mlir-opt.cpp +++ b/mlir/tools/mlir-opt/mlir-opt.cpp @@ -19,6 +19,7 @@ #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassManager.h" #include "mlir/Support/FileUtilities.h" +#include "mlir/Target/LLVMIR/Dialect/All.h" #include "mlir/Tools/mlir-opt/MlirOptMain.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/InitLLVM.h" @@ -275,6 +276,7 @@ DialectRegistry registry; registerAllDialects(registry); registerAllExtensions(registry); + registerAllToLLVMIRTranslations(registry); #ifdef MLIR_INCLUDE_TESTS ::test::registerTestDialect(registry); diff --git a/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp b/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp --- a/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp +++ b/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp @@ -15,6 +15,7 @@ #include "mlir/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" +#include "mlir/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.h" #include "llvm/IRReader/IRReader.h" #include "llvm/Support/MemoryBufferRef.h" @@ -40,7 +41,8 @@ registerBuiltinDialectTranslation(registry); registerLLVMDialectTranslation(registry); registerGPUDialectTranslation(registry); - registerNVVMTarget(registry); + registerNVVMDialectTranslation(registry); + registerNVVMTargetInterfaceExtension(registry); } // Checks if PTXAS is in PATH. diff --git a/mlir/unittests/Target/LLVM/SerializeROCDLTarget.cpp b/mlir/unittests/Target/LLVM/SerializeROCDLTarget.cpp --- a/mlir/unittests/Target/LLVM/SerializeROCDLTarget.cpp +++ b/mlir/unittests/Target/LLVM/SerializeROCDLTarget.cpp @@ -16,6 +16,7 @@ #include "mlir/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/GPU/GPUToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" +#include "mlir/Target/LLVMIR/Dialect/ROCDL/ROCDLToLLVMIRTranslation.h" #include "llvm/IRReader/IRReader.h" #include "llvm/Support/FileSystem.h" @@ -42,7 +43,8 @@ registerBuiltinDialectTranslation(registry); registerLLVMDialectTranslation(registry); registerGPUDialectTranslation(registry); - registerROCDLTarget(registry); + registerROCDLDialectTranslation(registry); + registerROCDLTargetInterfaceExtension(registry); } // Checks if a ROCm installation is available.