Skip to content
13 changes: 4 additions & 9 deletions clang/lib/Driver/ToolChains/Clang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11214,7 +11214,6 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
OPT_R_value_Group,
OPT_R_Group,
OPT_Xcuda_ptxas,
OPT_ftarget_register_alloc_mode_EQ,
OPT_ftime_report,
OPT_ftime_trace,
OPT_ftime_trace_EQ,
Expand Down Expand Up @@ -11278,22 +11277,18 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
else if (ShouldForward(LinkerOptions, A, *TC))
A->render(Args, LinkerArgs);
}

// Append device compiler arguments and their values to `CompilerArgs`.
for (Arg *A : BaseCompilerArgs)
A->render(BaseCompilerArgs, CompilerArgs);
if (Kind == Action::OFK_SYCL) {
// Add implied SYCL target arguments to `CompilerArgs`
// based on the selected target.
const toolchains::SYCLToolChain &SYCLTC =
static_cast<const toolchains::SYCLToolChain &>(*TC);
const ToolChain *HostTC =
C.getSingleOffloadToolChain<Action::OFK_Host>();
SYCLTC.AddImpliedTargetArgs(SYCLTC.getTriple(), BaseCompilerArgs,
SYCLTC.AddImpliedTargetArgs(SYCLTC.getTriple(), ToolChainArgs,
CompilerArgs, JA, *HostTC);
} else {
// For non-SYCL offload kinds (CUDA, OpenMP, HIP), directly convert
// the BaseCompilerArgs to CompilerArgs without additional processing.
for (Arg *A : BaseCompilerArgs) {
A->render(BaseCompilerArgs, CompilerArgs);
}
}

// If the user explicitly requested it via `--offload-arch` we should
Expand Down
13 changes: 13 additions & 0 deletions clang/test/Driver/sycl-offload-jit-xarch.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Test passing of -Xarch_<arch> <option> to SYCL offload compilations.

// Verify that -Xarch_spir64 forwards options to the SYCL device compilation
// and clang-linker-wrapper call.
// RUN: %clang -fsycl --offload-new-driver -Xarch_spir64 -O3 -### %s 2>&1 \
// RUN: | FileCheck -check-prefixes=SYCL-DEVICE-O3 %s
// SYCL-DEVICE-O3: "-triple" "spir64-unknown-unknown" "-O3"{{.*}} "-fsycl-is-device"
// CLW-O3: {{"[^"]*clang-linker-wrapper[^"]*".* "--device-compiler=spirv64-unknown-unknown=-O3"}}

// Verify that `-Xarch_spir64` forwards libraries to the device linker.
// RUN: %clang -fsycl --offload-new-driver -Xarch_spir64 -Wl,-lfoo -### %s 2>&1 \
// RUN: | FileCheck -check-prefix=DEVICE-LINKER %s
// DEVICE-LINKER: {{"[^"]*clang-linker-wrapper[^"]*".* "--device-linker=spir64-unknown-unknown=-lfoo"}}
Loading