https://github.com/jhuber6 updated https://github.com/llvm/llvm-project/pull/125744
>From ce7701b7c95ee1e59c7942b23833a7a7336abfb7 Mon Sep 17 00:00:00 2001 From: Joseph Huber <hube...@outlook.com> Date: Tue, 4 Feb 2025 12:06:34 -0600 Subject: [PATCH] Reapply "[AMDGPU] Use the AMDGPUToolChain when targeting C/C++ directly (#99687)" Summary: This reverts commit 740e6aeccdb2f8eeee549ba80b15ff3d5dd3392e. After discussions it was determined that the behavior for IR inputs needs to be maintained at least for now. In the future we should put a deprecation notice on this behavior. This patch keeps the old beahvior for OpenCL and IR inputs, while others will be standalone. This is good enough for standard compile flows. --- clang/lib/Driver/Driver.cpp | 21 ++++++++++++++++++-- clang/test/Driver/amdgpu-toolchain-opencl.cl | 5 +++++ clang/test/Driver/amdgpu-toolchain.c | 8 ++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 5a4737fb381e6a0..a91b8591bbd359b 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -146,6 +146,7 @@ getNVIDIAOffloadTargetTriple(const Driver &D, const ArgList &Args, D.Diag(diag::err_drv_invalid_or_unsupported_offload_target) << TT->str(); return std::nullopt; } + static std::optional<llvm::Triple> getHIPOffloadTargetTriple(const Driver &D, const ArgList &Args) { if (!Args.hasArg(options::OPT_offload_EQ)) { @@ -168,6 +169,17 @@ getHIPOffloadTargetTriple(const Driver &D, const ArgList &Args) { return std::nullopt; } +template <typename F> static bool usesInput(const ArgList &Args, F &&Fn) { + return llvm::any_of(Args, [&](Arg *A) { + return (A->getOption().matches(options::OPT_x) && + Fn(types::lookupTypeForTypeSpecifier(A->getValue()))) || + (A->getOption().getKind() == Option::InputClass && + StringRef(A->getValue()).rfind('.') != StringRef::npos && + Fn(types::lookupTypeForExtension( + &A->getValue()[StringRef(A->getValue()).rfind('.') + 1]))); + }); +} + // static std::string Driver::GetResourcesPath(StringRef BinaryPath) { // Since the resource directory is embedded in the module hash, it's important @@ -6673,9 +6685,14 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, case llvm::Triple::CUDA: TC = std::make_unique<toolchains::NVPTXToolChain>(*this, Target, Args); break; - case llvm::Triple::AMDHSA: - TC = std::make_unique<toolchains::ROCMToolChain>(*this, Target, Args); + case llvm::Triple::AMDHSA: { + bool DL = + usesInput(Args, types::isOpenCL) || usesInput(Args, types::isLLVMIR); + TC = DL ? std::make_unique<toolchains::ROCMToolChain>(*this, Target, Args) + : std::make_unique<toolchains::AMDGPUToolChain>(*this, Target, + Args); break; + } case llvm::Triple::AMDPAL: case llvm::Triple::Mesa3D: TC = std::make_unique<toolchains::AMDGPUToolChain>(*this, Target, Args); diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 755d5e0ad8c502f..fb21301744b9151 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -35,3 +35,8 @@ // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -x cl -c -emit-llvm -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHECK-WARN-ATOMIC %s // CHECK-WARN-ATOMIC: "-cc1"{{.*}} "-Werror=atomic-alignment" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa -x cl -c -emit-llvm -mcpu=fiji %s 2>&1 \ +// RUN: -mcode-object-version=5 --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode \ +// RUN: | FileCheck -check-prefix=DEVICE-LIBS %s +// DEVICE-LIBS: "-mlink-builtin-bitcode" "[[ROCM_PATH:.+]]opencl.bc" diff --git a/clang/test/Driver/amdgpu-toolchain.c b/clang/test/Driver/amdgpu-toolchain.c index c1c5aa8e90e6868..f32940578251b51 100644 --- a/clang/test/Driver/amdgpu-toolchain.c +++ b/clang/test/Driver/amdgpu-toolchain.c @@ -36,3 +36,11 @@ // RUN: %clang -target amdgcn-amd-amdhsa -march=gfx90a -stdlib -startfiles \ // RUN: -nogpulib -nogpuinc -### %s 2>&1 | FileCheck -check-prefix=STARTUP %s // STARTUP: ld.lld{{.*}}"-lc" "-lm" "{{.*}}crt1.o" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa -mcpu=gfx906 %s 2>&1 | FileCheck -check-prefix=ROCM %s +// ROCM-NOT: -mlink-builtin-bitcode + +// RUN: %clang -### --target=amdgcn-amd-amdhsa -mcpu=fiji -x ir %s \ +// RUN: --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode 2>&1 \ +// RUN: | FileCheck -check-prefix=DEVICE-LIBS %s +// DEVICE-LIBS: "-mlink-builtin-bitcode" "[[ROCM_PATH:.+]]ockl.bc" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits