Skip to content

Commit 20921b1

Browse files
[SYCL] Disable vectorizers in early optimizations (#2402)
1 parent 17eb598 commit 20921b1

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5995,10 +5995,17 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
59955995
options::OPT_fno_gnu_inline_asm, true))
59965996
CmdArgs.push_back("-fno-gnu-inline-asm");
59975997

5998+
bool EnableSYCLEarlyOptimizations =
5999+
Args.hasFlag(options::OPT_fsycl_early_optimizations,
6000+
options::OPT_fno_sycl_early_optimizations,
6001+
Triple.getSubArch() != llvm::Triple::SPIRSubArch_fpga);
6002+
59986003
// Enable vectorization per default according to the optimization level
59996004
// selected. For optimization levels that want vectorization we use the alias
60006005
// option to simplify the hasFlag logic.
60016006
bool EnableVec = shouldEnableVectorizerAtOLevel(Args, false);
6007+
if (UseSYCLTriple && EnableSYCLEarlyOptimizations)
6008+
EnableVec = false; // But disable vectorization for SYCL device code
60026009
OptSpecifier VectorizeAliasOption =
60036010
EnableVec ? options::OPT_O_Group : options::OPT_fvectorize;
60046011
if (Args.hasFlag(options::OPT_fvectorize, VectorizeAliasOption,
@@ -6007,6 +6014,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
60076014

60086015
// -fslp-vectorize is enabled based on the optimization level selected.
60096016
bool EnableSLPVec = shouldEnableVectorizerAtOLevel(Args, true);
6017+
if (UseSYCLTriple && EnableSYCLEarlyOptimizations)
6018+
EnableSLPVec = false; // But disable vectorization for SYCL device code
60106019
OptSpecifier SLPVectAliasOption =
60116020
EnableSLPVec ? options::OPT_O_Group : options::OPT_fslp_vectorize;
60126021
if (Args.hasFlag(options::OPT_fslp_vectorize, SLPVectAliasOption,

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,13 @@
3636
// RUN: | FileCheck -check-prefix=CHECK-DAE %s
3737
// CHECK-DAE: clang{{.*}} "-fenable-sycl-dae"
3838
// CHECK-DAE: sycl-post-link{{.*}} "-emit-param-info"
39+
40+
/// Check that vectorizers are disabled by default:
41+
// RUN: %clang -### -fsycl %s 2>&1 \
42+
// RUN: | FileCheck -check-prefix=CHECK-VEC-DEFAULT %s
43+
// CHECK-VEC-DEFAULT-NOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-vectorize-loops"
44+
// CHECK-VEC-DEFAULT-NOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-vectorize-slp"
45+
/// Check that vectorizers can still be enabled manually:
46+
// RUN: %clang -### -fsycl -fvectorize -fslp-vectorize %s 2>&1 \
47+
// RUN: | FileCheck -check-prefix=CHECK-VEC-ENABLE %s
48+
// CHECK-VEC-ENABLE: clang{{.*}} "-fsycl-is-device"{{.*}}"-vectorize-loops"{{.*}}"-vectorize-slp"

0 commit comments

Comments
 (0)