From d53656900921de5bb26b849b5910efd05a233107 Mon Sep 17 00:00:00 2001 From: Frederik Gossen Date: Tue, 8 Dec 2020 19:34:06 +0100 Subject: [PATCH] [MLIR] Expose target configuration for lowering to NVVM Differential Revision: https://reviews.llvm.org/D92871 --- .../mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h | 4 ++++ .../Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp | 22 ++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h b/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h index 1af1305..8be0a7c 100644 --- a/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h +++ b/mlir/include/mlir/Conversion/GPUToNVVM/GPUToNVVMPass.h @@ -14,6 +14,7 @@ namespace mlir { class LLVMTypeConverter; class OwningRewritePatternList; +class ConversionTarget; template class OperationPass; @@ -21,6 +22,9 @@ namespace gpu { class GPUModuleOp; } +/// Configure target to convert from to convert from the GPU dialect to NVVM. +void configureGpuToNVVMConversionLegality(ConversionTarget &target); + /// Collect a set of patterns to convert from the GPU dialect to NVVM. void populateGpuToNVVMConversionPatterns(LLVMTypeConverter &converter, OwningRewritePatternList &patterns); diff --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp index 467c622..a0fe481 100644 --- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp +++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp @@ -135,14 +135,7 @@ struct LowerGpuOpsToNVVMOpsPass populateStdToLLVMConversionPatterns(converter, llvmPatterns); populateGpuToNVVMConversionPatterns(converter, llvmPatterns); LLVMConversionTarget target(getContext()); - target.addIllegalDialect(); - target.addIllegalOp(); - target.addIllegalOp(); - target.addLegalDialect(); - // TODO: Remove once we support replacing non-root ops. - target.addLegalOp(); + configureGpuToNVVMConversionLegality(target); if (failed(applyPartialConversion(m, target, std::move(llvmPatterns)))) signalPassFailure(); } @@ -150,6 +143,19 @@ struct LowerGpuOpsToNVVMOpsPass } // anonymous namespace +void mlir::configureGpuToNVVMConversionLegality(ConversionTarget &target) { + target.addIllegalOp(); + target.addLegalDialect<::mlir::LLVM::LLVMDialect>(); + target.addLegalDialect<::mlir::NVVM::NVVMDialect>(); + target.addIllegalDialect(); + target.addIllegalOp(); + + // TODO: Remove once we support replacing non-root ops. + target.addLegalOp(); +} + void mlir::populateGpuToNVVMConversionPatterns( LLVMTypeConverter &converter, OwningRewritePatternList &patterns) { populateWithGenerated(converter.getDialect()->getContext(), patterns); -- 2.7.4