Skip to content

Commit e877e3b

Browse files
authored
[Driver][SYCL] Fix problem with -fsycl-link-targets when using AOT tr… (#4909)
When using AOT derived triples with -fsycl-link-targets, we encountered a mismatch of expected triples causing an assert. Update the triple population logic to also incorporate usage of -fsycl-link-targets.
1 parent bb99979 commit e877e3b

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4877,11 +4877,14 @@ class OffloadingActionBuilder final {
48774877
bool SYCLfpgaTriple = false;
48784878
bool ShouldAddDefaultTriple = true;
48794879
bool GpuInitHasErrors = false;
4880-
if (SYCLTargets || SYCLAddTargets) {
4881-
if (SYCLTargets) {
4880+
bool HasSYCLTargetsOption =
4881+
SYCLAddTargets || SYCLTargets || SYCLLinkTargets;
4882+
if (HasSYCLTargetsOption) {
4883+
if (SYCLTargets || SYCLLinkTargets) {
4884+
Arg *SYCLTargetsValues = SYCLTargets ? SYCLTargets : SYCLLinkTargets;
48824885
// Fill SYCLTripleList
48834886
llvm::StringMap<StringRef> FoundNormalizedTriples;
4884-
for (const char *Val : SYCLTargets->getValues()) {
4887+
for (const char *Val : SYCLTargetsValues->getValues()) {
48854888
llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(Val));
48864889
std::string NormalizedName = TT.normalize();
48874890

clang/test/Driver/sycl-offload.c

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,26 @@
135135

136136
/// Check no error for -fsycl-[add|link]-targets with good triple
137137
// RUN: %clang -### -fsycl-add-targets=spir64-unknown-unknown:dummy.spv -fsycl %s 2>&1 \
138-
// RUN: | FileCheck -check-prefix=CHK-SYCL-FPGA-ADDLINK-TRIPLE %s
138+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
139139
// RUN: %clang_cl -### -fsycl-add-targets=spir64-unknown-unknown:dummy.spv -fsycl %s 2>&1 \
140-
// RUN: | FileCheck -check-prefix=CHK-SYCL-FPGA-ADDLINK-TRIPLE %s
140+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
141+
// RUN: %clang -### -fsycl-add-targets=spir64_gen-unknown-unknown:dummy.spv -fsycl %s 2>&1 \
142+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
143+
// RUN: %clang -### -fsycl-add-targets=spir64_fpga-unknown-unknown:dummy.spv -fsycl %s 2>&1 \
144+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
145+
// RUN: %clang -### -fsycl-add-targets=spir64_x86_64-unknown-unknown:dummy.spv -fsycl %s 2>&1 \
146+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
141147
// RUN: %clang -### -fsycl-link-targets=spir64-unknown-unknown -fsycl %s 2>&1 \
142-
// RUN: | FileCheck -check-prefix=CHK-SYCL-FPGA-ADDLINK-TRIPLE %s
148+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
143149
// RUN: %clang_cl -### -fsycl-link-targets=spir64-unknown-unknown -fsycl %s 2>&1 \
144-
// RUN: | FileCheck -check-prefix=CHK-SYCL-FPGA-ADDLINK-TRIPLE %s
145-
// CHK-SYCL-FPGA-ADDLINK-TRIPLE-NOT: error: SYCL target is invalid
150+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
151+
// RUN: %clang -### -fsycl-link-targets=spir64_gen-unknown-unknown -fsycl %s 2>&1 \
152+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
153+
// RUN: %clang -### -fsycl-link-targets=spir64_fpga-unknown-unknown -fsycl %s 2>&1 \
154+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
155+
// RUN: %clang -### -fsycl-link-targets=spir64_x86_64-unknown-unknown -fsycl %s 2>&1 \
156+
// RUN: | FileCheck -check-prefix=CHK-SYCL-ADDLINK-TRIPLE %s
157+
// CHK-SYCL-ADDLINK-TRIPLE-NOT: error: SYCL target is invalid
146158

147159
/// ###########################################################################
148160

@@ -432,15 +444,21 @@
432444

433445
/// Check -fsycl-link-targets=<triple> behaviors from source
434446
// RUN: %clang -### -ccc-print-phases -target x86_64-unknown-linux-gnu -fsycl -o %t.out -fsycl-link-targets=spir64-unknown-unknown %s 2>&1 \
435-
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s
447+
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s -DSUBARCH=
436448
// RUN: %clang_cl -### -ccc-print-phases -fsycl -o %t.out -fsycl-link-targets=spir64-unknown-unknown %s 2>&1 \
437-
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s
449+
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s -DSUBARCH=
450+
// RUN: %clang -### -ccc-print-phases -target x86_64-unknown-linux-gnu -fsycl -o %t.out -fsycl-link-targets=spir64_gen-unknown-unknown %s 2>&1 \
451+
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s -DSUBARCH=_gen
452+
// RUN: %clang -### -ccc-print-phases -target x86_64-unknown-linux-gnu -fsycl -o %t.out -fsycl-link-targets=spir64_fpga-unknown-unknown %s 2>&1 \
453+
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s -DSUBARCH=_fpga
454+
// RUN: %clang -### -ccc-print-phases -target x86_64-unknown-linux-gnu -fsycl -o %t.out -fsycl-link-targets=spir64_x86_64-unknown-unknown %s 2>&1 \
455+
// RUN: | FileCheck -check-prefix=CHK-LINK-TARGETS %s -DSUBARCH=_x86_64
438456
// CHK-LINK-TARGETS: 0: input, "[[INPUT:.+\.c]]", c++, (device-sycl)
439457
// CHK-LINK-TARGETS: 1: preprocessor, {0}, c++-cpp-output, (device-sycl)
440458
// CHK-LINK-TARGETS: 2: compiler, {1}, ir, (device-sycl)
441459
// CHK-LINK-TARGETS: 3: linker, {2}, image, (device-sycl)
442460
// CHK-LINK-TARGETS: 4: llvm-spirv, {3}, image, (device-sycl)
443-
// CHK-LINK-TARGETS: 5: offload, "device-sycl (spir64-unknown-unknown)" {4}, image
461+
// CHK-LINK-TARGETS: 5: offload, "device-sycl (spir64[[SUBARCH]]-unknown-unknown)" {4}, image
444462

445463
/// ###########################################################################
446464

0 commit comments

Comments
 (0)