Skip to content

Commit 37bedf8

Browse files
authored
[SYCL][Driver] Add hidden option to specify spirv-to-ir-wrapper flags (#10611)
This is a hidden option and is not intended for use by end users. It has value for local testing and validation of the generated SPIR-V. This addresses a missed usecase from #9569 Signed-off-by: Sarnie, Nick <[email protected]>
1 parent d5f3511 commit 37bedf8

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,11 @@ def Xspirv_translator : Separate<["-"], "Xspirv-translator">,
894894
def Xspirv_translator_EQ : JoinedAndSeparate<["-"], "Xspirv-translator=">,
895895
HelpText<"Pass <arg> to the LLVM IR to SPIR-V translation backend identified by <triple>.">,
896896
MetaVarName<"<triple> <arg>">, Flags<[CoreOption, HelpHidden]>;
897+
def Xspirv_to_ir_wrapper : Separate<["-"], "Xspirv-to-ir-wrapper">,
898+
HelpText<"Pass <arg> to the SPIR-V to LLVM IR translation backend.">, MetaVarName<"<arg>">, Flags<[CoreOption, HelpHidden]>;
899+
def Xspirv_to_ir_wrapper_EQ : JoinedAndSeparate<["-"], "Xspirv-to-ir-wrapper=">,
900+
HelpText<"Pass <arg> to the SPIR-V to LLVM IR translation backend identified by <triple>.">,
901+
MetaVarName<"<triple> <arg>">, Flags<[CoreOption, HelpHidden]>;
897902
def Xsycl_backend : Separate<["-"], "Xsycl-target-backend">,
898903
HelpText<"Pass <arg> to the SYCL based target backend.">, MetaVarName<"<arg>">, Flags<[CoreOption]>;
899904
def Xsycl_backend_EQ : JoinedAndSeparate<["-"], "Xsycl-target-backend=">,

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10107,6 +10107,14 @@ void SpirvToIrWrapper::ConstructJob(Compilation &C, const JobAction &JA,
1010710107
"--spirv-preserve-auxdata --spirv-target-env=SPV-IR "
1010810108
"--spirv-builtin-format=global"});
1010910109

10110+
const toolchains::SYCLToolChain &TC =
10111+
static_cast<const toolchains::SYCLToolChain &>(getToolChain());
10112+
10113+
// Handle -Xspirv-to-ir-wrapper
10114+
TC.TranslateTargetOpt(TCArgs, CmdArgs, options::OPT_Xspirv_to_ir_wrapper,
10115+
options::OPT_Xspirv_to_ir_wrapper_EQ,
10116+
JA.getOffloadingArch());
10117+
1011010118
auto Cmd = std::make_unique<Command>(
1011110119
JA, *this, ResponseFileSupport::None(),
1011210120
TCArgs.MakeArgString(getToolChain().GetProgramPath(getShortName())),
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
///
2+
/// Tests for -Xspirv-to-ir-wrapper
3+
///
4+
5+
// RUN: touch %tfoo.o
6+
// RUN: %clangxx -fsycl -Xspirv-to-ir-wrapper "foo" -### %tfoo.o 2>&1 | \
7+
// RUN: FileCheck %s -check-prefix CHECK-SINGLE-TARGET
8+
9+
// RUN: %clangxx -fsycl -Xspirv-to-ir-wrapper=spir64_gen "foo" -### %tfoo.o 2>&1 | \
10+
// RUN: FileCheck %s -check-prefix CHECK-SINGLE-TARGET-UNUSED --implicit-check-not 'spirv-to-ir-wrapper{{.*}} "foo"'
11+
12+
// RUN: %clangxx -fsycl -fsycl-targets=spir64,spir64_gen -Xspirv-to-ir-wrapper=spir64_gen "foo" -Xspirv-to-ir-wrapper=spir64 "bar" -### %tfoo.o 2>&1 | \
13+
// RUN: FileCheck %s -check-prefix CHECK-MULTIPLE-TARGET --implicit-check-not 'spirv-to-ir-wrapper{{.*}} "foo" "bar"'
14+
15+
// CHECK-SINGLE-TARGET: spirv-to-ir-wrapper{{.*}} "foo"
16+
17+
// CHECK-SINGLE-TARGET-UNUSED: argument unused during compilation: '-Xspirv-to-ir-wrapper=spir64_gen foo'
18+
19+
// CHECK-MULTIPLE-TARGET: spirv-to-ir-wrapper{{.*}} "bar"
20+
// CHECK-MULTIPLE-TARGET: clang-offload-wrapper{{.*}} "-target=spir64" "-kind=sycl"
21+
// CHECK-MULTIPLE-TARGET: spirv-to-ir-wrapper{{.*}} "foo"
22+
// CHECK-MULTIPLE-TARGET: clang-offload-wrapper{{.*}} "-target=spir64_gen" "-kind=sycl"

0 commit comments

Comments
 (0)