diff options
author | tyb0807 <sontuan.vu119@gmail.com> | 2024-05-24 17:31:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-24 17:31:28 +0200 |
commit | 8178a3ad1b16e3c06e3bb8d91a8412bf329be3e0 (patch) | |
tree | b39e81fcff00011cf35325c63f7c1e8c6d4f6897 /mlir | |
parent | 4ebe9bba59389b0788ca01ec3f4bd2cb7f567a17 (diff) | |
download | llvm-8178a3ad1b16e3c06e3bb8d91a8412bf329be3e0.zip llvm-8178a3ad1b16e3c06e3bb8d91a8412bf329be3e0.tar.gz llvm-8178a3ad1b16e3c06e3bb8d91a8412bf329be3e0.tar.bz2 |
[mlir] Replace MLIR_ENABLE_CUDA_CONVERSIONS with LLVM_HAS_NVPTX_TARGET (#93008)
LLVM_HAS_NVPTX_TARGET is automatically set depending on whether NVPTX
was enabled when building LLVM. Use this instead of manually defining
MLIR_ENABLE_CUDA_CONVERSIONS (whose name is a bit misleading btw).
Diffstat (limited to 'mlir')
-rw-r--r-- | mlir/CMakeLists.txt | 8 | ||||
-rw-r--r-- | mlir/include/mlir/Config/mlir-config.h.cmake | 4 | ||||
-rw-r--r-- | mlir/include/mlir/InitAllPasses.h | 3 | ||||
-rw-r--r-- | mlir/lib/Dialect/GPU/Pipelines/GPUToNVVMPipeline.cpp | 5 | ||||
-rw-r--r-- | mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp | 3 | ||||
-rw-r--r-- | mlir/lib/Target/LLVM/CMakeLists.txt | 2 | ||||
-rw-r--r-- | mlir/lib/Target/LLVM/NVVM/Target.cpp | 34 | ||||
-rw-r--r-- | mlir/test/CMakeLists.txt | 2 | ||||
-rw-r--r-- | mlir/test/Dialect/GPU/test-nvvm-pipeline.mlir | 2 | ||||
-rw-r--r-- | mlir/test/lit.cfg.py | 2 | ||||
-rw-r--r-- | mlir/test/lit.site.cfg.py.in | 2 | ||||
-rw-r--r-- | mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp | 2 |
12 files changed, 28 insertions, 41 deletions
diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt index 4c0ef83..9f0b0d6 100644 --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -110,14 +110,6 @@ else() set(MLIR_ENABLE_EXECUTION_ENGINE 0) endif() -# Build the CUDA conversions and run according tests if the NVPTX backend -# is available -if ("NVPTX" IN_LIST LLVM_TARGETS_TO_BUILD) - set(MLIR_ENABLE_CUDA_CONVERSIONS 1) -else() - set(MLIR_ENABLE_CUDA_CONVERSIONS 0) -endif() - # Build the ROCm conversions and run according tests if the AMDGPU backend # is available. if ("AMDGPU" IN_LIST LLVM_TARGETS_TO_BUILD) diff --git a/mlir/include/mlir/Config/mlir-config.h.cmake b/mlir/include/mlir/Config/mlir-config.h.cmake index 9339ce0..abd6f41 100644 --- a/mlir/include/mlir/Config/mlir-config.h.cmake +++ b/mlir/include/mlir/Config/mlir-config.h.cmake @@ -39,10 +39,6 @@ /* If set, enables PDL usage. */ #cmakedefine01 MLIR_ENABLE_PDL_IN_PATTERNMATCH -/* If set, enables CUDA-related features in CUDA-related transforms, pipelines, - and targets. */ -#cmakedefine01 MLIR_ENABLE_CUDA_CONVERSIONS - /* If set, enables features that depend on the NVIDIA's PTX compiler. */ #cmakedefine01 MLIR_ENABLE_NVPTXCOMPILER diff --git a/mlir/include/mlir/InitAllPasses.h b/mlir/include/mlir/InitAllPasses.h index 90406f5..fedd773 100644 --- a/mlir/include/mlir/InitAllPasses.h +++ b/mlir/include/mlir/InitAllPasses.h @@ -14,7 +14,6 @@ #ifndef MLIR_INITALLPASSES_H_ #define MLIR_INITALLPASSES_H_ -#include "mlir/Config/mlir-config.h" #include "mlir/Conversion/Passes.h" #include "mlir/Dialect/AMDGPU/Transforms/Passes.h" #include "mlir/Dialect/Affine/Passes.h" @@ -99,7 +98,7 @@ inline void registerAllPasses() { bufferization::registerBufferizationPipelines(); sparse_tensor::registerSparseTensorPipelines(); tosa::registerTosaToLinalgPipelines(); -#if MLIR_ENABLE_CUDA_CONVERSIONS +#if LLVM_HAS_NVPTX_TARGET gpu::registerGPUToNVVMPipeline(); #endif } diff --git a/mlir/lib/Dialect/GPU/Pipelines/GPUToNVVMPipeline.cpp b/mlir/lib/Dialect/GPU/Pipelines/GPUToNVVMPipeline.cpp index db1974d..f457303 100644 --- a/mlir/lib/Dialect/GPU/Pipelines/GPUToNVVMPipeline.cpp +++ b/mlir/lib/Dialect/GPU/Pipelines/GPUToNVVMPipeline.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Config/mlir-config.h" #include "mlir/Conversion/AffineToStandard/AffineToStandard.h" #include "mlir/Conversion/ArithToLLVM/ArithToLLVM.h" #include "mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h" @@ -39,7 +38,7 @@ using namespace mlir; -#if MLIR_ENABLE_CUDA_CONVERSIONS +#if LLVM_HAS_NVPTX_TARGET namespace { //===----------------------------------------------------------------------===// @@ -128,4 +127,4 @@ void mlir::gpu::registerGPUToNVVMPipeline() { buildLowerToNVVMPassPipeline); } -#endif // MLIR_ENABLE_CUDA_CONVERSIONS +#endif // LLVM_HAS_NVPTX_TARGET diff --git a/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp b/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp index 836e939..1e7596e 100644 --- a/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/ModuleToBinary.cpp @@ -13,7 +13,6 @@ #include "mlir/Dialect/GPU/Transforms/Passes.h" -#include "mlir/Config/mlir-config.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -49,7 +48,7 @@ void GpuModuleToBinaryPass::getDependentDialects( // Register all GPU related translations. registry.insert<gpu::GPUDialect>(); registry.insert<LLVM::LLVMDialect>(); -#if MLIR_ENABLE_CUDA_CONVERSIONS +#if LLVM_HAS_NVPTX_TARGET registry.insert<NVVM::NVVMDialect>(); #endif #if MLIR_ENABLE_ROCM_CONVERSIONS diff --git a/mlir/lib/Target/LLVM/CMakeLists.txt b/mlir/lib/Target/LLVM/CMakeLists.txt index e0657c89..5a3fa16 100644 --- a/mlir/lib/Target/LLVM/CMakeLists.txt +++ b/mlir/lib/Target/LLVM/CMakeLists.txt @@ -47,7 +47,7 @@ add_mlir_dialect_library(MLIRNVVMTarget MLIRNVVMToLLVMIRTranslation ) -if(MLIR_ENABLE_CUDA_CONVERSIONS) +if ("NVPTX" IN_LIST LLVM_TARGETS_TO_BUILD) # Find the CUDA toolkit. find_package(CUDAToolkit) diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp index e438ce8..e75547f 100644 --- a/mlir/lib/Target/LLVM/NVVM/Target.cpp +++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp @@ -13,7 +13,6 @@ #include "mlir/Target/LLVM/NVVM/Target.h" -#include "mlir/Config/mlir-config.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/LLVMIR/NVVMDialect.h" #include "mlir/Target/LLVM/NVVM/Utils.h" @@ -158,40 +157,43 @@ SerializeGPUModuleBase::loadBitcodeFiles(llvm::Module &module) { return std::move(bcFiles); } -#if MLIR_ENABLE_CUDA_CONVERSIONS +#if LLVM_HAS_NVPTX_TARGET namespace { class NVPTXSerializer : public SerializeGPUModuleBase { public: NVPTXSerializer(Operation &module, NVVMTargetAttr target, const gpu::TargetOptions &targetOptions); + /// Returns the GPU module op being serialized. gpu::GPUModuleOp getOperation(); - // Compile PTX to cubin using `ptxas`. + /// Compiles PTX to cubin using `ptxas`. std::optional<SmallVector<char, 0>> compileToBinary(const std::string &ptxCode); - // Compile PTX to cubin using the `nvptxcompiler` library. + /// Compiles PTX to cubin using the `nvptxcompiler` library. std::optional<SmallVector<char, 0>> compileToBinaryNVPTX(const std::string &ptxCode); + /// Serializes the LLVM module to an object format, depending on the + /// compilation target selected in target options. std::optional<SmallVector<char, 0>> moduleToObject(llvm::Module &llvmModule) override; private: using TmpFile = std::pair<llvm::SmallString<128>, llvm::FileRemover>; - // Create a temp file. + /// Creates a temp file. std::optional<TmpFile> createTemp(StringRef name, StringRef suffix); - // Find the `tool` path, where `tool` is the name of the binary to search, - // i.e. `ptxas` or `fatbinary`. The search order is: - // 1. The toolkit path in `targetOptions`. - // 2. In the system PATH. - // 3. The path from `getCUDAToolkitPath()`. + /// Finds the `tool` path, where `tool` is the name of the binary to search, + /// i.e. `ptxas` or `fatbinary`. The search order is: + /// 1. The toolkit path in `targetOptions`. + /// 2. In the system PATH. + /// 3. The path from `getCUDAToolkitPath()`. std::optional<std::string> findTool(StringRef tool); - // Target options. + /// Target options. gpu::TargetOptions targetOptions; }; } // namespace @@ -515,7 +517,7 @@ NVPTXSerializer::compileToBinaryNVPTX(const std::string &ptxCode) { std::optional<SmallVector<char, 0>> NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) { - // Return LLVM IR if the compilation target is offload. + // Return LLVM IR if the compilation target is `offload`. #define DEBUG_TYPE "serialize-to-llvm" LLVM_DEBUG({ llvm::dbgs() << "LLVM IR for module: " << getOperation().getNameAttr() @@ -549,7 +551,7 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) { }); #undef DEBUG_TYPE - // Return PTX if the compilation target is assembly. + // Return PTX if the compilation target is `assembly`. if (targetOptions.getCompilationTarget() == gpu::CompilationTarget::Assembly) { // Make sure to include the null terminator. @@ -564,7 +566,7 @@ NVPTXSerializer::moduleToObject(llvm::Module &llvmModule) { return compileToBinary(*serializedISA); #endif // MLIR_ENABLE_NVPTXCOMPILER } -#endif // MLIR_ENABLE_CUDA_CONVERSIONS +#endif // LLVM_HAS_NVPTX_TARGET std::optional<SmallVector<char, 0>> NVVMTargetAttrImpl::serializeToObject(Attribute attribute, Operation *module, @@ -576,7 +578,7 @@ NVVMTargetAttrImpl::serializeToObject(Attribute attribute, Operation *module, module->emitError("Module must be a GPU module."); return std::nullopt; } -#if MLIR_ENABLE_CUDA_CONVERSIONS +#if LLVM_HAS_NVPTX_TARGET NVPTXSerializer serializer(*module, cast<NVVMTargetAttr>(attribute), options); serializer.init(); return serializer.run(); @@ -584,7 +586,7 @@ NVVMTargetAttrImpl::serializeToObject(Attribute attribute, Operation *module, module->emitError( "The `NVPTX` target was not built. Please enable it when building LLVM."); return std::nullopt; -#endif // MLIR_ENABLE_CUDA_CONVERSIONS +#endif // LLVM_HAS_NVPTX_TARGET } Attribute diff --git a/mlir/test/CMakeLists.txt b/mlir/test/CMakeLists.txt index 8806a1d..be0b26e 100644 --- a/mlir/test/CMakeLists.txt +++ b/mlir/test/CMakeLists.txt @@ -67,8 +67,8 @@ endif() llvm_canonicalize_cmake_booleans( LLVM_BUILD_EXAMPLES + LLVM_HAS_NVPTX_TARGET MLIR_ENABLE_BINDINGS_PYTHON - MLIR_ENABLE_CUDA_CONVERSIONS MLIR_ENABLE_CUDA_RUNNER MLIR_ENABLE_ROCM_CONVERSIONS MLIR_ENABLE_ROCM_RUNNER diff --git a/mlir/test/Dialect/GPU/test-nvvm-pipeline.mlir b/mlir/test/Dialect/GPU/test-nvvm-pipeline.mlir index 07e7197..732f40c 100644 --- a/mlir/test/Dialect/GPU/test-nvvm-pipeline.mlir +++ b/mlir/test/Dialect/GPU/test-nvvm-pipeline.mlir @@ -27,4 +27,4 @@ func.func @test_math(%arg0 : f32) { gpu.terminator } return -}
\ No newline at end of file +} diff --git a/mlir/test/lit.cfg.py b/mlir/test/lit.cfg.py index ea6d9ae..9ed3a2e 100644 --- a/mlir/test/lit.cfg.py +++ b/mlir/test/lit.cfg.py @@ -245,7 +245,7 @@ def have_host_jit_feature_support(feature_name): if have_host_jit_feature_support("jit"): config.available_features.add("host-supports-jit") -if config.run_cuda_tests: +if config.run_nvptx_tests: config.available_features.add("host-supports-nvptx") if config.run_rocm_tests: diff --git a/mlir/test/lit.site.cfg.py.in b/mlir/test/lit.site.cfg.py.in index c0fa1b8..4f5186d 100644 --- a/mlir/test/lit.site.cfg.py.in +++ b/mlir/test/lit.site.cfg.py.in @@ -25,7 +25,7 @@ config.mlir_cmake_dir = "@MLIR_CMAKE_DIR@" config.mlir_lib_dir = "@MLIR_LIB_DIR@" config.build_examples = @LLVM_BUILD_EXAMPLES@ -config.run_cuda_tests = @MLIR_ENABLE_CUDA_CONVERSIONS@ +config.run_nvptx_tests = @LLVM_HAS_NVPTX_TARGET@ config.enable_cuda_runner = @MLIR_ENABLE_CUDA_RUNNER@ config.run_rocm_tests = @MLIR_ENABLE_ROCM_CONVERSIONS@ config.enable_rocm_runner = @MLIR_ENABLE_ROCM_RUNNER@ diff --git a/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp b/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp index cea4935..a8fe20d 100644 --- a/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp +++ b/mlir/unittests/Target/LLVM/SerializeNVVMTarget.cpp @@ -30,7 +30,7 @@ using namespace mlir; // Skip the test if the NVPTX target was not built. -#if MLIR_ENABLE_CUDA_CONVERSIONS +#if LLVM_HAS_NVPTX_TARGET #define SKIP_WITHOUT_NVPTX(x) x #else #define SKIP_WITHOUT_NVPTX(x) DISABLED_##x |