Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 22 additions & 31 deletions clang/lib/Driver/ToolChains/Clang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9994,6 +9994,25 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
// object that is fed to the linker from the wrapper generated bc file
assert(isa<OffloadWrapperJobAction>(JA) && "Expecting wrapping job!");

// Validate and propogate CLI options related to device image compression
// and enabling preview breaking changes.
auto addCLIOptions = [&](ArgStringList &Args) -> void {
// -offload-compress
if (C.getInputArgs().getLastArg(options::OPT_offload_compress)) {
Args.push_back(C.getArgs().MakeArgString(Twine("-offload-compress")));
// -offload-compression-level=<>
if (Arg *A = C.getInputArgs().getLastArg(
options::OPT_offload_compression_level_EQ))
Args.push_back(C.getArgs().MakeArgString(
Twine("-offload-compression-level=") + A->getValue()));
}
// Enable preview breaking changes in clang-offload-wrapper,
// in case it needs to introduce any ABI breaking changes.
// For example, changes in offload binary descriptor format.
if (C.getArgs().hasArg(options::OPT_fpreview_breaking_changes))
Args.push_back("-fpreview-breaking-changes");
};

Action::OffloadKind OffloadingKind = JA.getOffloadingDeviceKind();
if (OffloadingKind == Action::OFK_SYCL) {
// The wrapper command looks like this:
Expand Down Expand Up @@ -10030,18 +10049,7 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
llvm::Triple TT = getToolChain().getTriple();
SmallString<128> TargetTripleOpt = TT.getArchName();

// Validate and propogate CLI options related to device image compression.
// -offload-compress
if (C.getInputArgs().getLastArg(options::OPT_offload_compress)) {
WrapperArgs.push_back(
C.getArgs().MakeArgString(Twine("-offload-compress")));
// -offload-compression-level=<>
if (Arg *A = C.getInputArgs().getLastArg(
options::OPT_offload_compression_level_EQ))
WrapperArgs.push_back(C.getArgs().MakeArgString(
Twine("-offload-compression-level=") + A->getValue()));
}

addCLIOptions(WrapperArgs);
addRunTimeWrapperOpts(C, OffloadingKind, TCArgs, WrapperArgs,
getToolChain(), JA);

Expand Down Expand Up @@ -10071,12 +10079,6 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
WrapperArgs.push_back(
C.getArgs().MakeArgString(Twine("-kind=") + Twine(Kind)));

// Enable preview breaking changes in clang-offload-wrapper,
// in case it needs to introduce any ABI breaking changes.
// For example, changes in offload binary descriptor format.
if (C.getArgs().hasArg(options::OPT_fpreview_breaking_changes))
WrapperArgs.push_back("-fpreview-breaking-changes");

assert((Inputs.size() > 0) && "no inputs for clang-offload-wrapper");
assert(((Inputs[0].getType() != types::TY_Tempfiletable) ||
(Inputs.size() == 1)) &&
Expand Down Expand Up @@ -10144,19 +10146,8 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA,
"Not have inputs for all dependence actions??");

if (OffloadingKind == Action::OFK_None &&
C.getArgs().hasArg(options::OPT_fsycl_link_EQ)) {

// When compiling and linking separately, we need to propagate the
// compression related CLI options to offload-wrapper.
if (C.getInputArgs().getLastArg(options::OPT_offload_compress)) {
CmdArgs.push_back(C.getArgs().MakeArgString(Twine("-offload-compress")));
// -offload-compression-level=<>
if (Arg *A = C.getInputArgs().getLastArg(
options::OPT_offload_compression_level_EQ))
CmdArgs.push_back(C.getArgs().MakeArgString(
Twine("-offload-compression-level=") + A->getValue()));
}
}
C.getArgs().hasArg(options::OPT_fsycl_link_EQ))
addCLIOptions(CmdArgs);

// Add offload targets and inputs.
for (unsigned I = 0; I < Inputs.size(); ++I) {
Expand Down
10 changes: 10 additions & 0 deletions clang/test/Driver/sycl-offload-old-model.c
Original file line number Diff line number Diff line change
Expand Up @@ -898,6 +898,16 @@
// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}.lib
// FSYCL-PREVIEW-BREAKING-CHANGES-DEBUG-CHECK-NOT: -defaultlib:sycl{{[0-9]*}}-preview.lib

/// Check for -fpreview-breaking-changes output during the clang-offload-wrapper
/// step of the offload compilation.
// RUN: %clang -### -fsycl --no-offload-new-driver -fpreview-breaking-changes \
// RUN: %s 2>&1 \
// RUN: | FileCheck -check-prefix PREVIEW-WRAPPER %s
// RUN: %clang -### -fsycl --no-offload-new-driver -fpreview-breaking-changes \
// RUN: -fsycl-link %s 2>&1 \
// RUN: | FileCheck -check-prefix PREVIEW-WRAPPER %s
// PREVIEW-WRAPPER: clang-offload-wrapper{{.*}} "-fpreview-breaking-changes"

// Check if fsycl-targets correctly processes multiple NVidia
// and AMD GPU targets.
// RUN: %clang -### -fsycl -fsycl-targets=nvidia_gpu_sm_60,nvidia_gpu_sm_70 -fno-sycl-libspirv -nocudalib --no-offload-new-driver %s 2>&1 \
Expand Down
Loading