Skip to content

Commit d099ed0

Browse files
[Driver] Add an option to do ESIMD lowering in sycl-post-link (#3197)
This is one of the patches for moving ESIMD passes from clang FE (BackendUtils.cpp) to sycl-post-link.
1 parent e362e7a commit d099ed0

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2398,6 +2398,10 @@ def fsycl_device_code_split_esimd : Flag<["-"], "fsycl-device-code-split-esimd">
23982398
Flags<[CC1Option, CoreOption]>, HelpText<"Split SYCL and ESIMD kernels into separate modules">;
23992399
def fno_sycl_device_code_split_esimd : Flag<["-"], "fno-sycl-device-code-split-esimd">,
24002400
Flags<[CC1Option, CoreOption]>, HelpText<"Don't split SYCL and ESIMD kernels into separate modules">;
2401+
def fsycl_device_code_lower_esimd : Flag<["-"], "fsycl-device-code-lower-esimd">,
2402+
Flags<[CC1Option, CoreOption]>, HelpText<"Lower ESIMD-specific constructs">;
2403+
def fno_sycl_device_code_lower_esimd : Flag<["-"], "fno-sycl-device-code-lower-esimd">,
2404+
Flags<[CC1Option, CoreOption]>, HelpText<"Do not lower ESIMD-specific constructs">;
24012405
defm sycl_id_queries_fit_in_int: OptInFFlag<"sycl-id-queries-fit-in-int", "Assume", "Do not assume", " that SYCL ID queries fit within MAX_INT.", [CC1Option,CoreOption], LangOpts<"SYCLValueFitInMaxInt">>;
24022406
def fsycl_use_bitcode : Flag<["-"], "fsycl-use-bitcode">,
24032407
Flags<[CC1Option, CoreOption]>, HelpText<"Use LLVM bitcode instead of SPIR-V in fat objects">;

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8321,6 +8321,9 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA,
83218321
if (TCArgs.hasFlag(options::OPT_fsycl_device_code_split_esimd,
83228322
options::OPT_fno_sycl_device_code_split_esimd, true))
83238323
addArgs(CmdArgs, TCArgs, {"-split-esimd"});
8324+
if (TCArgs.hasFlag(options::OPT_fsycl_device_code_lower_esimd,
8325+
options::OPT_fno_sycl_device_code_lower_esimd, false))
8326+
addArgs(CmdArgs, TCArgs, {"-lower-esimd"});
83248327
}
83258328
// specialization constants processing is mandatory
83268329
auto *SYCLPostLink = llvm::dyn_cast<SYCLPostLinkJobAction>(&JA);

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,15 @@
316316
// RUN: %clang_cl -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT
317317
// CHK-ESIMD-SPLIT: sycl-post-link{{.*}} "-split-esimd"
318318
// CHK-NO-ESIMD-SPLIT-NOT: sycl-post-link{{.*}} "-split-esimd"
319+
320+
// Check lowering of ESIMD device code.
321+
// RUN: %clang -### -fsycl %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER
322+
// RUN: %clang_cl -### -fsycl %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER
323+
// RUN: %clang -### -fsycl -fsycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER
324+
// RUN: %clang_cl -### -fsycl -fsycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER
325+
// RUN: %clang -### -fsycl -fno-sycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER
326+
// RUN: %clang_cl -### -fsycl -fno-sycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER
327+
// RUN: %clang -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER
328+
// RUN: %clang_cl -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER
329+
// CHK-ESIMD-LOWER: sycl-post-link{{.*}} "-lower-esimd"
330+
// CHK-NO-ESIMD-LOWER-NOT: sycl-post-link{{.*}} "-lower-esimd"

0 commit comments

Comments
 (0)