Skip to content

Commit 161c25d

Browse files
authored
[Driver][SYCL] Do not perform link step with -fsycl-link-targets (#13004)
When using the -fsycl-link-targets option, we inadvertently were triggering the additional device linking steps that are performed for -fsycl-link. Prevent this from happening. Also do a little cleanup of some code that is not needed.
1 parent 046d998 commit 161c25d

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5047,8 +5047,6 @@ class OffloadingActionBuilder final {
50475047
// action or fat binary.
50485048
SYCLDeviceActions.clear();
50495049

5050-
for (auto SDA : SYCLDeviceActions)
5051-
SYCLLinkBinaryList.push_back(SDA);
50525050
if (WrapDeviceOnlyBinary)
50535051
return ABRT_Success;
50545052
auto *Link =
@@ -7512,9 +7510,12 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
75127510
}
75137511

75147512
// Add a link action if necessary.
7513+
// When offloading with -fsycl-link-targets, no link action is processed
7514+
// as we stop at the spirv-translation step.
75157515
Arg *FinalPhaseArg;
75167516
if (!UseNewOffloadingDriver &&
7517-
getFinalPhase(Args, &FinalPhaseArg) == phases::Link) {
7517+
getFinalPhase(Args, &FinalPhaseArg) == phases::Link &&
7518+
!Args.hasArg(options::OPT_fsycl_link_targets_EQ)) {
75187519
if (LinkerInputs.empty() && DeviceAOTLinkerInputs.empty())
75197520
OffloadBuilder->appendDeviceLinkActions(Actions);
75207521

clang/test/Driver/sycl-link-add-targets.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@
7878
// CHK-LINK-TARGETS-UB: 2: linker, {1}, image, (device-sycl)
7979
// CHK-LINK-TARGETS-UB: 3: llvm-spirv, {2}, image, (device-sycl)
8080
// CHK-LINK-TARGETS-UB: 4: offload, "device-sycl (spir64-unknown-unknown)" {3}, image
81+
// CHK-LINK-TARGETS-UB-NOT: offload
82+
83+
// RUN: %clangxx -ccc-print-bindings --target=x86_64-unknown-linux-gnu \
84+
// RUN: -fsycl -o checkme.out -fsycl-link-targets=spir64 %s 2>&1 \
85+
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS-BINDINGS %s
86+
// CHK-LINK-TARGETS-BINDINGS: "spir64-unknown-unknown" - "clang", inputs: [{{.*}}], output: "[[IR_OUTPUT_BC:.+\.bc]]"
87+
// CHK-LINK-TARGETS-BINDINGS: "spir64-unknown-unknown" - "SYCL::Linker", inputs: ["[[IR_OUTPUT_BC]]"], output: "[[LLVM_LINK_OUTPUT:.+\.out]]"
88+
// CHK-LINK-TARGETS-BINDINGS: "spir64-unknown-unknown" - "SPIR-V translator", inputs: ["[[LLVM_LINK_OUTPUT]]"], output: "checkme.out"
8189

8290
/// Check -fsycl-link-targets=<triple> behaviors unbundle multiple objects
8391
// RUN: touch %t-a.o

0 commit comments

Comments
 (0)