Skip to content

Conversation

@mgcarrasco
Copy link
Contributor

@mgcarrasco mgcarrasco commented Dec 11, 2025

Prior to these changes, the toolchain was looking for device libs and failing.
This is fixed by not looking for device libs (for SPIR-V).
The device libs are never linked for SPIR-V.

@mgcarrasco mgcarrasco force-pushed the users/mgcarrasco/spirv/device-libs branch from 9096087 to 7069db9 Compare December 11, 2025 12:13
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).
@mgcarrasco mgcarrasco force-pushed the users/mgcarrasco/spirv/device-libs branch from 7069db9 to 6e84eb0 Compare December 11, 2025 13:19
@mgcarrasco mgcarrasco marked this pull request as ready for review December 11, 2025 13:24
@llvmbot llvmbot added clang Clang issues not falling into any other category clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' labels Dec 11, 2025
@llvmbot
Copy link
Member

llvmbot commented Dec 11, 2025

@llvm/pr-subscribers-backend-amdgpu
@llvm/pr-subscribers-clang-driver

@llvm/pr-subscribers-clang

Author: Manuel Carrasco (mgcarrasco)

Changes

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).
The device libs are never linked for SPIR-V.


Full diff: https://github.com/llvm/llvm-project/pull/171815.diff

3 Files Affected:

  • (modified) clang/lib/Driver/ToolChains/HIPAMD.cpp (+9)
  • (modified) clang/lib/Driver/ToolChains/HIPAMD.h (+5)
  • (modified) clang/test/Driver/spirv-amd-toolchain.c (+1-1)
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]]"

@mgcarrasco mgcarrasco merged commit c37c24a into main Dec 11, 2025
11 checks passed
@mgcarrasco mgcarrasco deleted the users/mgcarrasco/spirv/device-libs branch December 11, 2025 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend:AMDGPU clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang Clang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants