mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 08:06:40 +00:00
[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).
This commit is contained in:
parent
4ebe9bba59
commit
8178a3ad1b
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -27,4 +27,4 @@ func.func @test_math(%arg0 : f32) {
|
||||
gpu.terminator
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
@ -51,10 +51,7 @@ expand_template(
|
||||
"#cmakedefine01 MLIR_ENABLE_NVPTXCOMPILER": "#define MLIR_ENABLE_NVPTXCOMPILER 0",
|
||||
"#cmakedefine01 MLIR_ENABLE_PDL_IN_PATTERNMATCH": "#define MLIR_ENABLE_PDL_IN_PATTERNMATCH 1",
|
||||
"#cmakedefine01 MLIR_ENABLE_ROCM_CONVERSIONS": "#define MLIR_ENABLE_ROCM_CONVERSIONS 0",
|
||||
} | if_cuda_available(
|
||||
{"#cmakedefine01 MLIR_ENABLE_CUDA_CONVERSIONS": "#define MLIR_ENABLE_CUDA_CONVERSIONS 1"},
|
||||
{"#cmakedefine01 MLIR_ENABLE_CUDA_CONVERSIONS": "#define MLIR_ENABLE_CUDA_CONVERSIONS 0"},
|
||||
),
|
||||
},
|
||||
template = "include/mlir/Config/mlir-config.h.cmake",
|
||||
)
|
||||
|
||||
@ -5616,7 +5613,6 @@ cc_library(
|
||||
":Transforms",
|
||||
":VectorToLLVM",
|
||||
":VectorToSCF",
|
||||
":config",
|
||||
],
|
||||
)
|
||||
|
||||
@ -5666,7 +5662,6 @@ cc_library(
|
||||
":Transforms",
|
||||
":VCIXToLLVMIRTranslation",
|
||||
":VectorDialect",
|
||||
":config",
|
||||
"//llvm:Core",
|
||||
"//llvm:MC",
|
||||
"//llvm:Support",
|
||||
@ -6282,7 +6277,6 @@ cc_library(
|
||||
":NVVMToLLVMIRTranslation",
|
||||
":TargetLLVM",
|
||||
":ToLLVMIRTranslation",
|
||||
":config",
|
||||
"//llvm:NVPTXCodeGen",
|
||||
"//llvm:Support",
|
||||
"//llvm:config",
|
||||
@ -9363,7 +9357,6 @@ cc_library(
|
||||
":X86VectorTransforms",
|
||||
":XeGPUDialect",
|
||||
":XeGPUTransforms",
|
||||
":config",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -36,7 +36,7 @@ expand_template(
|
||||
"\"@MLIR_BINARY_DIR@\"": "os.environ[\"TEST_UNDECLARED_OUTPUTS_DIR\"]",
|
||||
# All disabled, but required to substituted because they are not in quotes.
|
||||
"@LLVM_BUILD_EXAMPLES@": "0",
|
||||
"@MLIR_ENABLE_CUDA_CONVERSIONS@": "0",
|
||||
"@LLVM_HAS_NVPTX_TARGET@": "0",
|
||||
"@MLIR_ENABLE_CUDA_RUNNER@": "0",
|
||||
"@MLIR_ENABLE_ROCM_CONVERSIONS@": "0",
|
||||
"@MLIR_ENABLE_ROCM_RUNNER@": "0",
|
||||
|
Loading…
x
Reference in New Issue
Block a user