Skip to content

Commit 1d09900

Browse files
pveleskolinehill
andcommitted
HIPSPV: Unbundle SDL (llvm#136412)
This fixes the issue of rdc linking static libraries with device code CHIP-SPV/chipStar#984 --------- Co-authored-by: Henry Linjamäki <[email protected]>
1 parent 6009708 commit 1d09900

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

clang/lib/Driver/ToolChains/HIPSPV.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,17 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand(
7070

7171
// Link LLVM bitcode.
7272
ArgStringList LinkArgs{};
73+
7374
for (auto Input : Inputs)
7475
LinkArgs.push_back(Input.getFilename());
76+
77+
// Add static device libraries using the common helper function.
78+
// This handles unbundling archives (.a) containing bitcode bundles.
79+
StringRef Arch = getToolChain().getTriple().getArchName();
80+
StringRef Target =
81+
"generic"; // SPIR-V is generic, no specific target ID like -mcpu
82+
tools::AddStaticDeviceLibsLinking(C, *this, JA, Inputs, Args, LinkArgs, Arch,
83+
Target, /*IsBitCodeSDL=*/true);
7584
LinkArgs.append({"-o", TempFile});
7685
const char *LlvmLink =
7786
Args.MakeArgString(getToolChain().GetProgramPath("llvm-link"));
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Test HIPSPV static device library linking
2+
// REQUIRES: system-linux
3+
// UNSUPPORTED: system-windows
4+
5+
// Create a dummy archive to test SDL linking
6+
// RUN: rm -rf %t && mkdir %t
7+
// RUN: touch %t/dummy.bc
8+
// RUN: llvm-ar cr %t/libSDL.a %t/dummy.bc
9+
10+
// Test that -l options are passed to llvm-link for --offload=spirv64
11+
// RUN: %clang -### --target=x86_64-linux-gnu --offload=spirv64 \
12+
// RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \
13+
// RUN: -L%t -lSDL \
14+
// RUN: 2>&1 | FileCheck -check-prefix=SDL-LINK %s
15+
16+
// Test that .a files are properly unbundled and passed to llvm-link
17+
// RUN: %clang -### --target=x86_64-linux-gnu --offload=spirv64 \
18+
// RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \
19+
// RUN: %t/libSDL.a \
20+
// RUN: 2>&1 | FileCheck -check-prefix=SDL-ARCHIVE %s
21+
22+
// Verify that the input files are added before the SDL files in llvm-link command
23+
// This tests the ordering fix to match HIPAMD behavior
24+
// SDL-LINK: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles"
25+
// SDL-LINK: "{{.*}}llvm-link" "{{.*}}.bc" "[[SDL_A]]" "-o"
26+
27+
// SDL-ARCHIVE: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles"
28+
// SDL-ARCHIVE: "{{.*}}llvm-link" "{{.*}}.bc" "[[SDL_A]]" "-o"

0 commit comments

Comments
 (0)