Skip to content

Commit d37b832

Browse files
authored
[Driver][SYCL] Limit default device check when default triple is used (#4404)
When -fsycl (by itself) or -fsycl-targets=spir64 is used, do not perform the default device check in the command line binaries. We do not want to say the default device is implied if the user specified them. This was preventing -Xsycl-target-backend/-Xsycl-target-link from being fulfilled during link specific compilations.
1 parent 491ec6d commit d37b832

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2932,6 +2932,18 @@ bool Driver::checkForSYCLDefaultDevice(Compilation &C,
29322932
if (Args.hasArg(options::OPT_fno_sycl_link_spirv))
29332933
return false;
29342934

2935+
// Do not do the check if the default device is passed in -fsycl-targets
2936+
// or if -fsycl-targets isn't passed (that implies default device)
2937+
if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) {
2938+
for (const char *Val : A->getValues()) {
2939+
llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(Val));
2940+
if (TT.isSPIR() && TT.getSubArch() == llvm::Triple::NoSubArch)
2941+
// Default triple found
2942+
return false;
2943+
}
2944+
} else if (!Args.hasArg(options::OPT_fintelfpga))
2945+
return false;
2946+
29352947
SmallVector<const char *, 16> AllArgs(getLinkerArgs(C, Args, true));
29362948
for (StringRef Arg : AllArgs) {
29372949
if (hasSYCLDefaultSection(C, Arg))

clang/test/Driver/sycl-offload.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,10 @@
9696
// RUN: | FileCheck -check-prefix NO_IMPLIED_DEVICE %s
9797
// NO_IMPLIED_DEVICE: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown-sycldevice"{{.*}} "-check-section"
9898
// NO_IMPLIED_DEVICE-NOT: clang-offload-bundler{{.*}} "-targets={{.*}}spir64-unknown-unknown-sycldevice{{.*}}" "-unbundle"
99+
100+
/// Passing in the default triple should allow for -Xsycl-target options
101+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64 -Xsycl-target-backend=spir64 -DFOO -Xsycl-target-linker=spir64 -DFOO2 %S/Inputs/SYCL/objlin64.o 2>&1 \
102+
// RUN: | FileCheck -check-prefixes=SYCL_TARGET_OPT %s
103+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -Xsycl-target-backend=spir64 -DFOO -Xsycl-target-linker=spir64 -DFOO2 %S/Inputs/SYCL/objlin64.o 2>&1 \
104+
// RUN: | FileCheck -check-prefixes=SYCL_TARGET_OPT %s
105+
// SYCL_TARGET_OPT: clang-offload-wrapper{{.*}} "-compile-opts=-DFOO" "-link-opts=-DFOO2"

0 commit comments

Comments
 (0)