Skip to content

Commit 971eeca

Browse files
Set O0 as the default SYCL device optimization if -g is passed.
1 parent 66867d4 commit 971eeca

File tree

3 files changed

+58
-61
lines changed

3 files changed

+58
-61
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5606,9 +5606,27 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
56065606
CmdArgs.push_back("-Wno-sycl-strict");
56075607
}
56085608

5609-
// Set O2 optimization level by default
5610-
if (!Args.getLastArg(options::OPT_O_Group))
5611-
CmdArgs.push_back("-O2");
5609+
// If no optimization controlling flags (-O) are provided, check if
5610+
// any debug information flags(-g) are passed.
5611+
// "-fintelfpga" implies "-g" and we preserve the default optimization for
5612+
// this flow(-O2).
5613+
// if "-g" is explicitly passed from the command-line, set default
5614+
// optimization to -O0.
5615+
5616+
if (!Args.hasArgNoClaim(options::OPT_O_Group, options::OPT__SLASH_O)) {
5617+
StringRef OptLevel = "-O2";
5618+
const Arg *DebugInfoGroup = Args.getLastArg(options::OPT_g_Group);
5619+
// -fintelfpga -g case
5620+
if ((Args.hasArg(options::OPT_fintelfpga) &&
5621+
Args.hasMultipleArgs(options::OPT_g_Group)) ||
5622+
/* -fsycl -g case */ (!Args.hasArg(options::OPT_fintelfpga) &&
5623+
DebugInfoGroup)) {
5624+
if (!DebugInfoGroup->getOption().matches(options::OPT_g0)) {
5625+
OptLevel = "-O0";
5626+
}
5627+
}
5628+
CmdArgs.push_back(OptLevel.data());
5629+
}
56125630

56135631
// Add the integration header option to generate the header.
56145632
StringRef Header(D.getIntegrationHeader(Input.getBaseInput()));
@@ -10876,7 +10894,25 @@ static std::string getSYCLPostLinkOptimizationLevel(const ArgList &Args) {
1087610894
[=](char c) { return c == S[0]; }))
1087710895
return std::string("-O") + S[0];
1087810896
}
10879-
10897+
// If no optimization controlling flags (-O) are provided, check if
10898+
// any debug information flags(-g) are passed.
10899+
// "-fintelfpga" implies "-g" and we preserve the default optimization for
10900+
// this flow(-O2).
10901+
// if "-g" is explicitly passed from the command-line, set default
10902+
// optimization to -O0.
10903+
10904+
if (!Args.hasArg(options::OPT_O_Group)) {
10905+
const Arg *DebugInfoGroup = Args.getLastArg(options::OPT_g_Group);
10906+
// -fintelfpga -g case
10907+
if ((Args.hasArg(options::OPT_fintelfpga) &&
10908+
Args.hasMultipleArgs(options::OPT_g_Group)) ||
10909+
/* -fsycl -g case */
10910+
(!Args.hasArg(options::OPT_fintelfpga) && DebugInfoGroup)) {
10911+
if (!DebugInfoGroup->getOption().matches(options::OPT_g0)) {
10912+
return "-O0";
10913+
}
10914+
}
10915+
}
1088010916
// The default for SYCL device code optimization
1088110917
return "-O2";
1088210918
}
Lines changed: 16 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,16 @@
1-
/// Check that optimizations for sycl device are enabled by default:
2-
// RUN: %clang -### -fsycl --offload-new-driver %s 2>&1 \
3-
// RUN: | FileCheck -check-prefix=CHECK-DEFAULT %s
4-
// RUN: %clang_cl -### -fsycl --offload-new-driver %s 2>&1 \
5-
// RUN: | FileCheck -check-prefix=CHECK-DEFAULT %s
6-
// RUN: %clang -### -fsycl --offload-new-driver -fsycl-device-only %s 2>&1 \
7-
// RUN: | FileCheck -check-prefix=CHECK-DEFAULT %s
8-
// RUN: %clang_cl -### -fsycl --offload-new-driver -fsycl-device-only %s 2>&1 \
9-
// RUN: | FileCheck -check-prefix=CHECK-DEFAULT %s
10-
// RUN: %clang -### -fintelfpga -fsycl-early-optimizations %s 2>&1 \
11-
// RUN: | FileCheck -check-prefix=CHECK-DEFAULT %s
12-
// RUN: %clang_cl -### -fintelfpga -fsycl-early-optimizations %s 2>&1 \
13-
// RUN: | FileCheck -check-prefix=CHECK-DEFAULT %s
14-
// CHECK-DEFAULT-NOT: "-fno-sycl-early-optimizations"
15-
// CHECK-DEFAULT-NOT: "-disable-llvm-passes"
16-
// CHECK-DEFAULT: "-fsycl-is-device"
17-
// CHECK-DEFAULT-SAME: "-O2"
18-
19-
/// Check "-fno-sycl-early-optimizations" is passed to the front-end:
20-
// RUN: %clang -### -fsycl --offload-new-driver -fno-sycl-early-optimizations %s 2>&1 \
21-
// RUN: | FileCheck -check-prefix=CHECK-NO-SYCL-EARLY-OPTS %s
22-
// RUN: %clang_cl -### -fsycl --offload-new-driver -fno-sycl-early-optimizations %s 2>&1 \
23-
// RUN: | FileCheck -check-prefix=CHECK-NO-SYCL-EARLY-OPTS %s
24-
// RUN: %clang -### -fsycl --offload-new-driver -fsycl-device-only -fno-sycl-early-optimizations %s 2>&1 \
25-
// RUN: | FileCheck -check-prefix=CHECK-NO-SYCL-EARLY-OPTS %s
26-
// RUN: %clang_cl -### -fsycl --offload-new-driver -fsycl-device-only -fno-sycl-early-optimizations %s 2>&1 \
27-
// RUN: | FileCheck -check-prefix=CHECK-NO-SYCL-EARLY-OPTS %s
28-
// RUN: %clang -### -fintelfpga %s 2>&1 \
29-
// RUN: | FileCheck -check-prefix=CHECK-NO-SYCL-EARLY-OPTS %s
30-
// RUN: %clang_cl -### -fintelfpga %s 2>&1 \
31-
// RUN: | FileCheck -check-prefix=CHECK-NO-SYCL-EARLY-OPTS %s
32-
// CHECK-NO-SYCL-EARLY-OPTS: "-fno-sycl-early-optimizations"
33-
34-
/// Check that Dead Parameter Elimination Optimization is enabled
35-
// RUN: %clang -### -fsycl --offload-new-driver %s 2>&1 \
36-
// RUN: | FileCheck -check-prefix=CHECK-DAE %s
37-
// RUN: %clang_cl -### -fsycl --offload-new-driver %s 2>&1 \
38-
// RUN: | FileCheck -check-prefix=CHECK-DAE %s
39-
// CHECK-DAE: clang{{.*}} "-fenable-sycl-dae"
40-
41-
/// Check that Dead Parameter Elimination Optimization is disabled
42-
// RUN: %clang -### -fsycl --offload-new-driver -fno-sycl-dead-args-optimization %s 2>&1 \
43-
// RUN: | FileCheck -check-prefix=CHECK-NO-DAE %s
44-
// RUN: %clang_cl -### -fsycl --offload-new-driver -fno-sycl-dead-args-optimization %s 2>&1 \
45-
// RUN: | FileCheck -check-prefix=CHECK-NO-DAE %s
46-
// CHECK-NO-DAE-NOT: clang{{.*}} "-fenable-sycl-dae"
47-
48-
// Check "-fgpu-inline-threshold" is passed to the front-end:
49-
// RUN: %clang -### -fsycl --offload-new-driver -fgpu-inline-threshold=100000 %s 2>&1 \
50-
// RUN: | FileCheck -check-prefix=CHECK-THRESH %s
51-
// CHECK-THRESH: "-mllvm" "-inline-threshold=100000"
52-
53-
// RUN: %clang -### -fsycl --offload-new-driver %s 2>&1 \
54-
// RUN: | FileCheck -check-prefix=CHECK-NO-THRESH %s
55-
// CHECK-NO-THRESH-NOT: "-mllvm" "-inline-threshold
1+
2+
3+
4+
5+
/// Check that optimizations for sycl device are enabled with -g and O2 passed:
6+
7+
// RUN: %clang_cl -### -fsycl -O2 -g %s 2>&1 \
8+
// RUN: | FileCheck -check-prefix=CHECK-G-O2 %s
9+
// CHECK-G-O2: clang{{.*}} "-fsycl-is-device{{.*}}" "-O3"
10+
// CHECK-G-O2: sycl-post-link{{.*}} "-O3"
11+
// CHECK-G-O2-NOT: "-O0"
12+
13+
14+
15+
16+

clang/test/Driver/sycl-offload-intelfpga.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@
228228
// RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s
229229
// RUN: %clang_cl -### -fintelfpga -Zi -Od -Xs "-DFOO1 -DFOO2" -Xshardware %s 2>&1 \
230230
// RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s
231-
// CHK-TOOLS-IMPLIED-OPTS-NOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-O0"
232-
// CHK-TOOLS-IMPLIED-OPTS: sycl-post-link{{.*}} "-O2"
231+
// CHK-TOOLS-IMPLIED-OPTS: clang{{.*}} "-fsycl-is-device"{{.*}} "-fno-sycl-early-optimizations"{{.*}} "-O0"
232+
// CHK-TOOLS-IMPLIED-OPTS: sycl-post-link{{.*}} "-O0"
233233
// CHK-TOOLS-IMPLIED-OPTS: aoc{{.*}} "-g" "-DFOO1" "-DFOO2"
234234

235235
/// shared objects should not be checked for FPGA contents

0 commit comments

Comments
 (0)