Skip to content

Commit f316273

Browse files
authored
[ESIMD] Enable -fsycl-esimd-force-stateless-mem by default (intel#9452)
Signed-off-by: Vyacheslav N Klochkov <[email protected]
1 parent d747667 commit f316273

File tree

6 files changed

+29
-23
lines changed

6 files changed

+29
-23
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3821,11 +3821,11 @@ def fsycl_device_only : Flag<["-"], "fsycl-device-only">, Visibility<[ClangOptio
38213821
def fsycl_embed_ir : Flag<["-"], "fsycl-embed-ir">, Visibility<[ClangOption, CLOption, DXCOption]>,
38223822
HelpText<"Embed LLVM IR for runtime kernel fusion">;
38233823
defm sycl_esimd_force_stateless_mem : BoolFOption<"sycl-esimd-force-stateless-mem",
3824-
LangOpts<"SYCLESIMDForceStatelessMem">, DefaultFalse,
3824+
LangOpts<"SYCLESIMDForceStatelessMem">, DefaultTrue,
38253825
PosFlag<SetTrue, [], [ClangOption], "Enforce using stateless memory accesses. "
38263826
"Convert stateful accesses via SYCL accessors to stateless within ESIMD kernels. "
3827-
"Disabled by default. (experimental)">,
3828-
NegFlag<SetFalse, [], [ClangOption], "Do not enforce using stateless memory accesses. (experimental)">,
3827+
"Enabled by default.">,
3828+
NegFlag<SetFalse, [], [ClangOption], "Do not enforce using stateless memory accesses.">,
38293829
BothFlags<[], [ClangOption, CLOption, DXCOption, CC1Option], "">>;
38303830
// TODO: Remove this option once ESIMD headers are updated to
38313831
// guard vectors to be device only.

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5400,6 +5400,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
54005400
options::OPT_fno_sycl_unnamed_lambda, true))
54015401
CmdArgs.push_back("-fno-sycl-unnamed-lambda");
54025402

5403+
if (!Args.hasFlag(options::OPT_fsycl_esimd_force_stateless_mem,
5404+
options::OPT_fno_sycl_esimd_force_stateless_mem, true))
5405+
CmdArgs.push_back("-fno-sycl-esimd-force-stateless-mem");
5406+
54035407
// Add the Unique ID prefix
54045408
StringRef UniqueID = D.getSYCLUniqueID(Input.getBaseInput());
54055409
if (!UniqueID.empty())
@@ -5506,9 +5510,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
55065510
if (Args.hasArg(options::OPT_fno_sycl_esimd_build_host_code))
55075511
CmdArgs.push_back("-fno-sycl-esimd-build-host-code");
55085512
}
5509-
if (Args.hasFlag(options::OPT_fsycl_esimd_force_stateless_mem,
5510-
options::OPT_fno_sycl_esimd_force_stateless_mem, false))
5511-
CmdArgs.push_back("-fsycl-esimd-force-stateless-mem");
55125513

55135514
const auto DeviceTraitsMacrosArgs = D.getDeviceTraitsMacrosArgs();
55145515
for (const auto &Arg : DeviceTraitsMacrosArgs) {
@@ -10448,9 +10449,9 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA,
1044810449
addArgs(CmdArgs, TCArgs, {"-device-globals"});
1044910450

1045010451
// Make ESIMD accessors use stateless memory accesses.
10451-
if (TCArgs.hasFlag(options::OPT_fsycl_esimd_force_stateless_mem,
10452-
options::OPT_fno_sycl_esimd_force_stateless_mem, false))
10453-
addArgs(CmdArgs, TCArgs, {"-lower-esimd-force-stateless-mem"});
10452+
if (TCArgs.hasFlag(options::OPT_fno_sycl_esimd_force_stateless_mem,
10453+
options::OPT_fsycl_esimd_force_stateless_mem, false))
10454+
addArgs(CmdArgs, TCArgs, {"-lower-esimd-force-stateless-mem=false"});
1045410455

1045510456
// Add output file table file option
1045610457
assert(Output.isFilename() && "output must be a filename");
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11

22
/// Verify that the driver option is translated to corresponding options
33
/// to host/device compilation and sycl-post-link.
4-
// RUN: %clang -### -fsycl -fsycl-esimd-force-stateless-mem \
5-
// RUN: %s 2>&1 | FileCheck -check-prefix=CHECK-PASS-TO-COMPS %s
6-
// CHECK-PASS-TO-COMPS: clang{{.*}} "-fsycl-esimd-force-stateless-mem"
7-
// CHECK-PASS-TO-COMPS: sycl-post-link{{.*}} "-lower-esimd-force-stateless-mem"
8-
// CHECK-PASS-TO-COMPS: clang{{.*}} "-fsycl-is-host" {{.*}}"-fsycl-esimd-force-stateless-mem"
9-
"
104

11-
/// Verify that stateless memory accesses mapping is not enforced by default
5+
// Case1: Check that the enforcing is turned on by default.
6+
// Actually, only sycl-post-link gets an additional flag in this case.
127
// RUN: %clang -### -fsycl %s 2>&1 | FileCheck -check-prefix=CHECK-DEFAULT %s
13-
// CHECK-DEFAULT-NOT: clang{{.*}} "-fsycl-esimd-force-stateless-mem"
8+
// CHECK-DEFAULT-NOT: clang{{.*}} "sycl-esimd-force-stateless-mem"
149
// CHECK-DEFAULT-NOT: sycl-post-link{{.*}} "-lower-esimd-force-stateless-mem"
10+
// CHECK-DEFAULT-NOT: clang{{.*}} "-fsycl-is-host" {{.*}}"sycl-esimd-force-stateless-mem"
11+
12+
// Case2: Check that -fno-sycl-esimd-force-stateless-mem is handled correctly -
13+
// i.e. sycl-post-link gets nothing and clang gets corresponding -fno... option.
14+
// RUN: %clang -### -fsycl -fno-sycl-esimd-force-stateless-mem %s 2>&1 | FileCheck -check-prefix=CHECK-NEG %s
15+
// CHECK-NEG: clang{{.*}} "-fno-sycl-esimd-force-stateless-mem"
16+
// CHECK-NEG: sycl-post-link{{.*}} "-lower-esimd-force-stateless-mem=false"
17+
// CHECK-NEG-NOT: clang{{.*}} "-fsycl-is-host" {{.*}}"sycl-esimd-force-stateless-mem"
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
/// This test checks that the macro __ESIMD_FORCE_STATELESS_MEM is automatically
2-
/// defined only if the option -fsycl-esimd-force-stateless-mem is used.
2+
/// defined by default with -fsycl-is-device or -fsycl-is-host.
33

44
// RUN: %clang_cc1 %s -fsycl-is-device -fsycl-esimd-force-stateless-mem -E -dM | FileCheck --check-prefix=CHECK-OPT %s
5+
// RUN: %clang_cc1 %s -fsycl-is-device -E -dM | FileCheck --check-prefix=CHECK-OPT %s
6+
// RUN: %clang_cc1 %s -fsycl-is-host -E -dM | FileCheck --check-prefix=CHECK-OPT %s
57

68
// RUN: %clang_cc1 %s -E -dM | FileCheck --check-prefix=CHECK-NOOPT %s
7-
// RUN: %clang_cc1 %s -fsycl-is-device -E -dM | FileCheck --check-prefix=CHECK-NOOPT %s
8-
// RUN: %clang_cc1 %s -fsycl-is-host -E -dM | FileCheck --check-prefix=CHECK-NOOPT %s
9+
// RUN: %clang_cc1 %s -fsycl-is-device -fno-sycl-esimd-force-stateless-mem -E -dM | FileCheck --check-prefix=CHECK-NOOPT %s
10+
// RUN: %clang_cc1 %s -fsycl-is-host -fno-sycl-esimd-force-stateless-mem -E -dM | FileCheck --check-prefix=CHECK-NOOPT %s
911

1012
// CHECK-OPT:#define __ESIMD_FORCE_STATELESS_MEM 1
1113
// CHECK-NOOPT-NOT:#define __ESIMD_FORCE_STATELESS_MEM 1

llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ using namespace llvm::esimd;
5858
cl::opt<bool> ForceStatelessMem(
5959
"lower-esimd-force-stateless-mem", llvm::cl::Optional, llvm::cl::Hidden,
6060
llvm::cl::desc("Use stateless API for accessor based API."),
61-
llvm::cl::init(false));
61+
llvm::cl::init(true));
6262

6363
namespace {
6464
SmallPtrSet<Type *, 4> collectGenXVolatileTypes(Module &);

sycl/test/esimd/lsc.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// RUN: %clangxx -O0 -fsycl -fno-sycl-esimd-force-stateless-mem -fsycl-device-only -Xclang -emit-llvm %s -o %t
2-
// RUN: sycl-post-link -split-esimd -lower-esimd -O0 -S %t -o %t.table
2+
// RUN: sycl-post-link -split-esimd -lower-esimd -lower-esimd-force-stateless-mem=false -O0 -S %t -o %t.table
33
// RUN: FileCheck %s -input-file=%t_esimd_0.ll --check-prefixes=CHECK,CHECK-STATEFUL
44

55
// RUN: %clangxx -O0 -fsycl -fsycl-esimd-force-stateless-mem -fsycl-device-only -Xclang -emit-llvm %s -o %t
6-
// RUN: sycl-post-link -split-esimd -lower-esimd -lower-esimd-force-stateless-mem -O0 -S %t -o %t.table
6+
// RUN: sycl-post-link -split-esimd -lower-esimd -O0 -S %t -o %t.table
77
// RUN: FileCheck %s -input-file=%t_esimd_0.ll --check-prefixes=CHECK,CHECK-STATELESS
88

99
// Checks ESIMD intrinsic translation.

0 commit comments

Comments
 (0)