Skip to content

Commit 5983dfd

Browse files
authored
[Driver][SYCL] Turn on -fsycl-dead-args-optimization by default (#3004)
Turn on -fsycl-dead-args-optimization by default for -fsycl compilations. Update tests to reflect the new behavior
1 parent 4c3e699 commit 5983dfd

File tree

7 files changed

+76
-18
lines changed

7 files changed

+76
-18
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4200,8 +4200,11 @@ class OffloadingActionBuilder final {
42004200
// device objects for future host link. Device libraries should
42014201
// be linked by default to resolve any undefined reference.
42024202
const auto *TC = ToolChains.front();
4203-
if (TC->getTriple().getSubArch() !=
4204-
llvm::Triple::SPIRSubArch_fpga) {
4203+
llvm::Triple TT(TC->getTriple());
4204+
bool isAOT = TT.getSubArch() == llvm::Triple::SPIRSubArch_fpga ||
4205+
TT.getSubArch() == llvm::Triple::SPIRSubArch_gen ||
4206+
TT.getSubArch() == llvm::Triple::SPIRSubArch_x86_64;
4207+
if (TT.getSubArch() != llvm::Triple::SPIRSubArch_fpga) {
42054208
SYCLDeviceLibLinked =
42064209
addSYCLDeviceLibs(TC, FullSYCLLinkBinaryList, true,
42074210
C.getDefaultToolChain()
@@ -4216,11 +4219,26 @@ class OffloadingActionBuilder final {
42164219
else
42174220
FullDeviceLinkAction = DeviceLinkAction;
42184221
auto *PostLinkAction = C.MakeAction<SYCLPostLinkJobAction>(
4219-
FullDeviceLinkAction, types::TY_LLVM_BC, types::TY_LLVM_BC);
4222+
FullDeviceLinkAction, types::TY_LLVM_BC,
4223+
types::TY_Tempfiletable);
4224+
PostLinkAction->setRTSetsSpecConstants(!isAOT);
4225+
auto *ExtractIRFilesAction = C.MakeAction<FileTableTformJobAction>(
4226+
PostLinkAction, types::TY_Tempfilelist, types::TY_Tempfilelist);
4227+
// single column w/o title fits TY_Tempfilelist format
4228+
ExtractIRFilesAction->addExtractColumnTform(
4229+
FileTableTformJobAction::COL_CODE, false /*drop titles*/);
42204230
auto *TranslateAction = C.MakeAction<SPIRVTranslatorJobAction>(
4221-
PostLinkAction, types::TY_Image);
4231+
ExtractIRFilesAction, types::TY_Tempfilelist);
4232+
4233+
ActionList TformInputs{PostLinkAction, TranslateAction};
4234+
auto *ReplaceFilesAction = C.MakeAction<FileTableTformJobAction>(
4235+
TformInputs, types::TY_Tempfiletable, types::TY_Tempfiletable);
4236+
ReplaceFilesAction->addReplaceColumnTform(
4237+
FileTableTformJobAction::COL_CODE,
4238+
FileTableTformJobAction::COL_CODE);
4239+
42224240
SYCLLinkBinary = C.MakeAction<OffloadWrapperJobAction>(
4223-
TranslateAction, types::TY_Object);
4241+
ReplaceFilesAction, types::TY_Object);
42244242
} else {
42254243
auto *Link = C.MakeAction<LinkJobAction>(SYCLLinkBinaryList,
42264244
types::TY_Image);

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,29 @@ static void addCoveragePrefixMapArg(const Driver &D, const ArgList &Args,
695695
}
696696
}
697697

698+
/// Simple check to see if the optimization level is at -O2 or higher.
699+
/// For -fsycl (DPC++) -O2 is the default.
700+
static bool isSYCLOptimizationO2orHigher(const ArgList &Args) {
701+
if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
702+
if (A->getOption().matches(options::OPT_O4) ||
703+
A->getOption().matches(options::OPT_Ofast))
704+
return true;
705+
706+
if (A->getOption().matches(options::OPT_O0))
707+
return false;
708+
709+
assert(A->getOption().matches(options::OPT_O) && "Must have a -O flag");
710+
711+
StringRef S(A->getValue());
712+
unsigned OptLevel = 0;
713+
if (S.getAsInteger(10, OptLevel))
714+
return false;
715+
return OptLevel > 1;
716+
}
717+
// No -O setting seen, default is -O2 for device.
718+
return true;
719+
}
720+
698721
/// Vectorize at all optimization levels greater than 1 except for -Oz.
699722
/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
700723
/// enabled.
@@ -4736,9 +4759,13 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
47364759
}
47374760

47384761
// Turn on Dead Parameter Elimination Optimization with early optimizations
4762+
// TODO: Enable DAE by default without the Optimization level check in the
4763+
// driver. The enabling can be done in CodeGenOpt, and we can pass an
4764+
// option to explicitly disable/disable here.
47394765
if (!(RawTriple.isAMDGCN()) &&
47404766
Args.hasFlag(options::OPT_fsycl_dead_args_optimization,
4741-
options::OPT_fno_sycl_dead_args_optimization, false))
4767+
options::OPT_fno_sycl_dead_args_optimization,
4768+
isSYCLOptimizationO2orHigher(Args)))
47424769
CmdArgs.push_back("-fenable-sycl-dae");
47434770
bool IsMSVC = AuxT.isWindowsMSVCEnvironment();
47444771
if (IsMSVC) {
@@ -9135,7 +9162,8 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA,
91359162
// Turn on Dead Parameter Elimination Optimization with early optimizations
91369163
if (!(getToolChain().getTriple().isAMDGCN()) &&
91379164
TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization,
9138-
options::OPT_fno_sycl_dead_args_optimization, false))
9165+
options::OPT_fno_sycl_dead_args_optimization,
9166+
isSYCLOptimizationO2orHigher(TCArgs)))
91399167
addArgs(CmdArgs, TCArgs, {"-emit-param-info"});
91409168
// Enable PI program metadata
91419169
if (getToolChain().getTriple().isNVPTX())

clang/test/Driver/sycl-device-lib.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128

129129
/// ###########################################################################
130130
/// test llvm-link behavior for fno-sycl-device-lib
131-
// RUN: %clangxx -fsycl -fno-sycl-device-lib=all %s -### 2>&1 \
131+
// RUN: %clangxx -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all %s -### 2>&1 \
132132
// RUN: | FileCheck %s -check-prefix=SYCL_LLVM_LINK_NO_DEVICE_LIB
133133
// SYCL_LLVM_LINK_NO_DEVICE_LIB: clang{{.*}} "-cc1" {{.*}} "-fsycl-is-device"
134134
// SYCL_LLVM_LINK_NO_DEVICE_LIB-NOT: llvm-link{{.*}} "-only-needed"

clang/test/Driver/sycl-device-optimizations.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,21 @@
3030
// CHECK-NO-SYCL-EARLY-OPTS: "-fno-sycl-early-optimizations"
3131

3232
/// Check that Dead Parameter Elimination Optimization is enabled
33-
// RUN: %clang -### -fsycl -fsycl-dead-args-optimization %s 2>&1 \
33+
// RUN: %clang -### -fsycl %s 2>&1 \
3434
// RUN: | FileCheck -check-prefix=CHECK-DAE %s
35-
// RUN: %clang_cl -### -fsycl -fsycl-dead-args-optimization %s 2>&1 \
35+
// RUN: %clang_cl -### -fsycl %s 2>&1 \
3636
// RUN: | FileCheck -check-prefix=CHECK-DAE %s
3737
// CHECK-DAE: clang{{.*}} "-fenable-sycl-dae"
3838
// CHECK-DAE: sycl-post-link{{.*}} "-emit-param-info"
3939

40+
/// Check that Dead Parameter Elimination Optimization is disabled
41+
// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 \
42+
// RUN: | FileCheck -check-prefix=CHECK-NO-DAE %s
43+
// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 \
44+
// RUN: | FileCheck -check-prefix=CHECK-NO-DAE %s
45+
// CHECK-NO-DAE-NOT: clang{{.*}} "-fenable-sycl-dae"
46+
// CHECK-NO-DAE-NOT: sycl-post-link{{.*}} "-emit-param-info"
47+
4048
// Check "-fgpu-inline-threshold" is passed to the front-end:
4149
// RUN: %clang -### -fsycl -fgpu-inline-threshold=100000 %s 2>&1 \
4250
// RUN: | FileCheck -check-prefix=CHECK-THRESH %s

clang/test/Driver/sycl-intelfpga-static-lib.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// RUN: llvm-ar cr %t.a %t1_bundle.o
1111

1212
/// Check phases with static lib
13-
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga %t.a -ccc-print-phases 2>&1 \
13+
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t.a -ccc-print-phases 2>&1 \
1414
// RUN: | FileCheck -check-prefix=CHECK_PHASES %s
1515
// CHECK_PHASES: 0: input, "[[INPUT:.+\.a]]", object, (host-sycl)
1616
// CHECK_PHASES: 1: linker, {0}, image, (host-sycl)

clang/test/Driver/sycl-offload.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -471,9 +471,11 @@
471471
// CHK-LINK-UB: 1: clang-offload-unbundler, {0}, object
472472
// CHK-LINK-UB: 2: linker, {1}, image, (device-sycl)
473473
// CHK-LINK-UB: 3: sycl-post-link, {2}, ir, (device-sycl)
474-
// CHK-LINK-UB: 4: llvm-spirv, {3}, image, (device-sycl)
475-
// CHK-LINK-UB: 5: clang-offload-wrapper, {4}, object, (device-sycl)
476-
// CHK-LINK-UB: 6: offload, "device-sycl (spir64-unknown-unknown)" {5}, object
474+
// CHK-LINK-UB: 4: file-table-tform, {3}, tempfilelist, (device-sycl)
475+
// CHK-LINK-UB: 5: llvm-spirv, {4}, tempfilelist, (device-sycl)
476+
// CHK-LINK-UB: 6: file-table-tform, {3, 5}, tempfiletable, (device-sycl)
477+
// CHK-LINK-UB: 7: clang-offload-wrapper, {6}, object, (device-sycl)
478+
// CHK-LINK-UB: 8: offload, "device-sycl (spir64-unknown-unknown)" {7}, object
477479

478480
/// ###########################################################################
479481

@@ -487,9 +489,11 @@
487489
// CHK-LINK: 2: compiler, {1}, ir, (device-sycl)
488490
// CHK-LINK: 3: linker, {2}, image, (device-sycl)
489491
// CHK-LINK: 4: sycl-post-link, {3}, ir, (device-sycl)
490-
// CHK-LINK: 5: llvm-spirv, {4}, image, (device-sycl)
491-
// CHK-LINK: 6: clang-offload-wrapper, {5}, object, (device-sycl)
492-
// CHK-LINK: 7: offload, "device-sycl (spir64-unknown-unknown)" {6}, object
492+
// CHK-LINK: 5: file-table-tform, {4}, tempfilelist, (device-sycl)
493+
// CHK-LINK: 6: llvm-spirv, {5}, tempfilelist, (device-sycl)
494+
// CHK-LINK: 7: file-table-tform, {4, 6}, tempfiletable, (device-sycl)
495+
// CHK-LINK: 8: clang-offload-wrapper, {7}, object, (device-sycl)
496+
// CHK-LINK: 9: offload, "device-sycl (spir64-unknown-unknown)" {8}, object
493497

494498
/// ###########################################################################
495499

sycl/test/scheduler/ReleaseResourcesTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -fsycl-dead-args-optimization -I %sycl_source_dir %s -o %t.out
1+
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -I %sycl_source_dir %s -o %t.out
22
// RUN: %RUN_ON_HOST %t.out
33

44
//==------------------- ReleaseResourcesTests.cpp --------------------------==//

0 commit comments

Comments
 (0)