Skip to content

Commit 8396fd7

Browse files
committed
[ESIMD] Add driver option to control SYCL/ESIMD code splitting.
Signed-off-by: Konstantin S Bobrovsky <[email protected]>
1 parent 3fe5f10 commit 8396fd7

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2770,6 +2770,10 @@ def fsycl_device_code_split_EQ : Joined<["-"], "fsycl-device-code-split=">,
27702770
def fsycl_device_code_split : Flag<["-"], "fsycl-device-code-split">, Alias<fsycl_device_code_split_EQ>,
27712771
AliasArgs<["auto"]>, Flags<[CC1Option, CoreOption]>,
27722772
HelpText<"Perform SYCL device code split in the 'auto' mode, i.e. use heuristic to distribute device code across modules">;
2773+
def fsycl_device_code_split_esimd : Flag<["-"], "fsycl-device-code-split-esimd">,
2774+
Flags<[CC1Option, CoreOption]>, HelpText<"split ESIMD device code from SYCL into a separate device binary image (default). Has effect only for SPIR-based targets.">;
2775+
def fno_sycl_device_code_split_esimd : Flag<["-"], "fno-sycl-device-code-split-esimd">,
2776+
Flags<[CC1Option, CoreOption]>, HelpText<"do not split ESIMD and SYCL device code into separate device binary images. Has effect only for SPIR-based targets.">;
27732777
def fsycl_instrument_device_code : Flag<["-"], "fsycl-instrument-device-code">,
27742778
Group<sycl_Group>, Flags<[CC1Option, CoreOption]>,
27752779
HelpText<"Add ITT instrumentation intrinsics calls">,

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9384,11 +9384,16 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA,
93849384
addArgs(CmdArgs, TCArgs, {"-ir-output-only"});
93859385
} else {
93869386
assert(SYCLPostLink->getTrueType() == types::TY_Tempfiletable);
9387+
bool SplitEsimdByDefault = getToolChain().getTriple().isSPIR();
9388+
bool SplitEsimd = TCArgs.hasFlag(
9389+
options::OPT_fsycl_device_code_split_esimd,
9390+
options::OPT_fno_sycl_device_code_split_esimd, SplitEsimdByDefault);
93879391
// Symbol file and specialization constant info generation is mandatory -
93889392
// add options unconditionally
93899393
addArgs(CmdArgs, TCArgs, {"-symbols"});
93909394
addArgs(CmdArgs, TCArgs, {"-emit-exported-symbols"});
9391-
addArgs(CmdArgs, TCArgs, {"-split-esimd"});
9395+
if (SplitEsimd)
9396+
addArgs(CmdArgs, TCArgs, {"-split-esimd"});
93929397
addArgs(CmdArgs, TCArgs, {"-lower-esimd"});
93939398
}
93949399
addArgs(CmdArgs, TCArgs,

clang/test/Driver/sycl-offload-with-split.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,17 @@
338338
// RUN: %clang -### -fsycl -fsycl-targets=spir64_fpga-unknown-unknown %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER
339339
// RUN: %clang_cl -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER
340340
// CHK-ESIMD-LOWER: sycl-post-link{{.*}} "-lower-esimd"
341+
342+
// Check -f[no]sycl-device-code-split-esimd option's effect on sycl-post-link invocation
343+
// RUN: %clang -### -fsycl -fsycl-device-code-split-esimd %s 2>&1 \
344+
// RUN: | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT-ON
345+
// RUN: %clang -### -fsycl -fno-sycl-device-code-split-esimd %s 2>&1 \
346+
// RUN: | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT-OFF
347+
// RUN: %clang -### -fsycl %s 2>&1 \
348+
// RUN: | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT-DEFAULT
349+
// RUN: %clang -### -fsycl -fsycl-targets=nvptx64-nvidia-cuda %s 2>&1 \
350+
// RUN: | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT-NON-SPIRV
351+
// CHK-ESIMD-SPLIT-ON: sycl-post-link{{.*}} "-split-esimd"{{.*}} "-o"{{.*}}
352+
// CHK-ESIMD-SPLIT-OFF-NOT: sycl-post-link{{.*}} "-split-esimd"{{.*}}
353+
// CHK-ESIMD-SPLIT-DEFAULT: sycl-post-link{{.*}} "-split-esimd"{{.*}} "-o"{{.*}}
354+
// CHK-ESIMD-SPLIT-NON-SPIRV-NOT: sycl-post-link{{.*}} "-split-esimd"{{.*}}

0 commit comments

Comments
 (0)