[clang] [clang][Driver] SPIRVAMDToolChain must not require device libs. (PR #171815)
Manuel Carrasco via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 11 07:55:49 PST 2025
https://github.com/mgcarrasco updated https://github.com/llvm/llvm-project/pull/171815
>From 6e84eb0149b67fd8d67c2ab2d7aba2fb496ef17e Mon Sep 17 00:00:00 2001
From: Manuel Carrasco <Manuel.Carrasco at amd.com>
Date: Thu, 11 Dec 2025 06:09:39 -0600
Subject: [PATCH 1/3] [clang][Driver] SPIRVAMDToolChain must not require device
libs.
Prior to this changes, the toolchain was looking for device libs and failing.
This is fixed by not looking for device libs (for SPIR-V).
---
clang/lib/Driver/ToolChains/HIPAMD.cpp | 9 +++++++++
clang/lib/Driver/ToolChains/HIPAMD.h | 5 +++++
clang/test/Driver/spirv-amd-toolchain.c | 2 +-
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index f2f64922cb404..810218e1e5748 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -466,3 +466,12 @@ Tool *SPIRVAMDToolChain::buildLinker() const {
assert(getTriple().getArch() == llvm::Triple::spirv64);
return new tools::AMDGCN::Linker(*this);
}
+
+void SPIRVAMDToolChain::addClangTargetOptions(
+ const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
+ Action::OffloadKind DeviceOffloadingKind) const {
+ // For SPIR-V we must not link any device libraries, so we call the
+ // AMDGPUToolChain impl instead of the ROCMToolChain one.
+ AMDGPUToolChain::addClangTargetOptions(DriverArgs, CC1Args,
+ DeviceOffloadingKind);
+}
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.h b/clang/lib/Driver/ToolChains/HIPAMD.h
index 30fc01a2f8e40..d04e805f7e30c 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.h
+++ b/clang/lib/Driver/ToolChains/HIPAMD.h
@@ -104,6 +104,11 @@ class LLVM_LIBRARY_VISIBILITY SPIRVAMDToolChain final : public ROCMToolChain {
SPIRVAMDToolChain(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);
+ void
+ addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args,
+ Action::OffloadKind DeviceOffloadKind) const override;
+
protected:
Tool *buildLinker() const override;
};
diff --git a/clang/test/Driver/spirv-amd-toolchain.c b/clang/test/Driver/spirv-amd-toolchain.c
index 8f1f0f33e53f9..91cd43622518d 100644
--- a/clang/test/Driver/spirv-amd-toolchain.c
+++ b/clang/test/Driver/spirv-amd-toolchain.c
@@ -12,7 +12,7 @@
// BINDINGS: # "spirv64-amd-amdhsa" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[OUTPUT:.+]]"
// BINDINGS: # "spirv64-amd-amdhsa" - "AMDGCN::Linker", inputs: ["[[OUTPUT]]"], output: "a.out"
-// RUN: %clang -### --target=spirv64-amd-amdhsa %s -nogpulib -nogpuinc 2>&1 \
+// RUN: %clang -### --target=spirv64-amd-amdhsa %s 2>&1 \
// RUN: | FileCheck %s --check-prefix=INVOCATION
// INVOCATION: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-disable-llvm-optzns" {{.*}} "-o" "[[OUTPUT:.+]]" "-x" "c"
// INVOCATION: "{{.*}}llvm-link" "-o" "[[LINKED_OUTPUT:.+]]" "[[OUTPUT]]"
>From 5c7ecdbc72987ee0fb787a307ef14a13e7d4aece Mon Sep 17 00:00:00 2001
From: Manuel Carrasco <Manuel.Carrasco at amd.com>
Date: Thu, 11 Dec 2025 09:52:19 -0600
Subject: [PATCH 2/3] [Review] Revert last changes except its test case.
---
clang/lib/Driver/ToolChains/HIPAMD.cpp | 9 ---------
clang/lib/Driver/ToolChains/HIPAMD.h | 5 -----
2 files changed, 14 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index 810218e1e5748..f2f64922cb404 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -466,12 +466,3 @@ Tool *SPIRVAMDToolChain::buildLinker() const {
assert(getTriple().getArch() == llvm::Triple::spirv64);
return new tools::AMDGCN::Linker(*this);
}
-
-void SPIRVAMDToolChain::addClangTargetOptions(
- const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
- Action::OffloadKind DeviceOffloadingKind) const {
- // For SPIR-V we must not link any device libraries, so we call the
- // AMDGPUToolChain impl instead of the ROCMToolChain one.
- AMDGPUToolChain::addClangTargetOptions(DriverArgs, CC1Args,
- DeviceOffloadingKind);
-}
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.h b/clang/lib/Driver/ToolChains/HIPAMD.h
index d04e805f7e30c..30fc01a2f8e40 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.h
+++ b/clang/lib/Driver/ToolChains/HIPAMD.h
@@ -104,11 +104,6 @@ class LLVM_LIBRARY_VISIBILITY SPIRVAMDToolChain final : public ROCMToolChain {
SPIRVAMDToolChain(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);
- void
- addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
- llvm::opt::ArgStringList &CC1Args,
- Action::OffloadKind DeviceOffloadKind) const override;
-
protected:
Tool *buildLinker() const override;
};
>From 911051bd5c3e8b699701926767a055542df07299 Mon Sep 17 00:00:00 2001
From: Manuel Carrasco <Manuel.Carrasco at amd.com>
Date: Thu, 11 Dec 2025 09:54:45 -0600
Subject: [PATCH 3/3] [Review] Skip device lib linking in ROCMToolChain for
SPIR-V.
---
clang/lib/Driver/ToolChains/AMDGPU.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 87ccd40372681..8514a5123e3fa 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -967,6 +967,8 @@ void ROCMToolChain::addClangTargetOptions(
true))
return;
+ // For SPIR-V (SPIRVAMDToolChain) we must not link any device libraries so we skip it.
+ if (!this->getEffectiveTriple().isSPIRV()){
// Get the device name and canonicalize it
const StringRef GpuArch = getGPUArch(DriverArgs);
auto Kind = llvm::AMDGPU::parseArchAMDGCN(GpuArch);
@@ -995,6 +997,7 @@ void ROCMToolChain::addClangTargetOptions(
CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
}
}
+}
bool RocmInstallationDetector::checkCommonBitcodeLibs(
StringRef GPUArch, StringRef LibDeviceFile,
More information about the cfe-commits
mailing list