Skip to content

Commit b07b08e

Browse files
[SYCL] Support online_compiler::compile compiled with pre-C++11 ABI
1 parent 1873789 commit b07b08e

File tree

4 files changed

+78
-36
lines changed

4 files changed

+78
-36
lines changed

sycl/include/sycl/detail/string_view.hpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,19 @@ class string_view {
3737

3838
const char *data() const noexcept { return str; }
3939

40-
friend bool operator==(const string_view &lhs,
41-
std::string_view rhs) noexcept {
40+
friend bool operator==(string_view lhs, std::string_view rhs) noexcept {
4241
return rhs == lhs.data();
4342
}
44-
friend bool operator==(std::string_view lhs,
45-
const string_view &rhs) noexcept {
43+
friend bool operator==(std::string_view lhs, string_view rhs) noexcept {
4644
return lhs == rhs.data();
4745
}
46+
47+
friend bool operator!=(string_view lhs, std::string_view rhs) noexcept {
48+
return rhs != lhs.data();
49+
}
50+
friend bool operator!=(std::string_view lhs, string_view rhs) noexcept {
51+
return lhs != rhs.data();
52+
}
4853
};
4954

5055
} // namespace detail

sycl/include/sycl/ext/intel/experimental/online_compiler.hpp

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,21 @@ class __SYCL2020_DEPRECATED(
8181
"experimental online_compiler is being deprecated. See "
8282
"'sycl_ext_oneapi_kernel_compiler.asciidoc' instead for new kernel "
8383
"compiler extension to kernel_bundle implementation.") online_compiler {
84+
__SYCL_EXPORT std::vector<byte>
85+
compile_impl(sycl::detail::string_view Src,
86+
sycl::detail::string_view DeviceStepping,
87+
const std::vector<sycl::detail::string_view> &Options);
88+
89+
std::vector<byte> compile_impl(const std::string &Source,
90+
const std::vector<std::string> &UserArgs) {
91+
std::vector<sycl::detail::string_view> Args;
92+
for (auto &&Arg : UserArgs)
93+
Args.emplace_back(Arg);
94+
95+
return compile_impl(std::string_view{Source},
96+
std::string_view{DeviceStepping}, Args);
97+
}
98+
8499
public:
85100
/// Constructs online compiler which can target any device and produces
86101
/// given compiled code format. Produces 64-bit device code.
@@ -196,9 +211,17 @@ class __SYCL2020_DEPRECATED(
196211
/// OpenCL JIT compiler options must be supported.
197212
template <>
198213
template <>
199-
__SYCL_EXPORT std::vector<byte>
200-
online_compiler<source_language::opencl_c>::compile(
201-
const std::string &src, const std::vector<std::string> &options);
214+
#if !defined(__SYCL_ONLINE_COMPILER_CPP) || \
215+
defined(__INTEL_PREVIEW_BREAKING_CHANGES)
216+
inline
217+
#else
218+
__SYCL_EXPORT
219+
#endif
220+
std::vector<byte>
221+
online_compiler<source_language::opencl_c>::compile(
222+
const std::string &src, const std::vector<std::string> &options) {
223+
return compile_impl(src, options);
224+
}
202225

203226
/// Compiles the given OpenCL source. May throw \c online_compile_error.
204227
/// @param src - contents of the source.
@@ -214,8 +237,17 @@ online_compiler<source_language::opencl_c>::compile(const std::string &src) {
214237
/// @param options - compilation options (implementation defined).
215238
template <>
216239
template <>
217-
__SYCL_EXPORT std::vector<byte> online_compiler<source_language::cm>::compile(
218-
const std::string &src, const std::vector<std::string> &options);
240+
#if !defined(__SYCL_ONLINE_COMPILER_CPP) || \
241+
defined(__INTEL_PREVIEW_BREAKING_CHANGES)
242+
inline
243+
#else
244+
__SYCL_EXPORT
245+
#endif
246+
std::vector<byte>
247+
online_compiler<source_language::cm>::compile(
248+
const std::string &src, const std::vector<std::string> &options) {
249+
return compile_impl(src, options);
250+
}
219251

220252
/// Compiles the given CM source \p src.
221253
template <>

sycl/source/detail/online_compiler/online_compiler.cpp

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
#define __SYCL_ONLINE_COMPILER_CPP
10+
911
#include <sycl/detail/os_util.hpp>
1012
#include <sycl/detail/ur.hpp>
1113
#include <sycl/ext/intel/experimental/online_compiler.hpp>
@@ -19,9 +21,11 @@ inline namespace _V1 {
1921
namespace ext::intel::experimental {
2022
namespace detail {
2123

24+
using namespace sycl::detail;
25+
2226
static std::vector<const char *>
2327
prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
24-
bool Is64Bit, const std::string &DeviceStepping,
28+
bool Is64Bit, string_view DeviceStepping,
2529
const std::string &UserArgs) {
2630
std::vector<const char *> Args = {"ocloc", "-q", "-spv_only", "-device"};
2731

@@ -54,7 +58,7 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
5458

5559
if (DeviceStepping != "") {
5660
Args.push_back("-revision_id");
57-
Args.push_back(DeviceStepping.c_str());
61+
Args.push_back(DeviceStepping.data());
5862
}
5963

6064
Args.push_back(Is64Bit ? "-64" : "-32");
@@ -82,11 +86,12 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
8286
/// allocated during the compilation.
8387
/// @param UserArgs - User's options to ocloc compiler.
8488
static std::vector<byte>
85-
compileToSPIRV(const std::string &Source, sycl::info::device_type DeviceType,
89+
compileToSPIRV(string_view Src, sycl::info::device_type DeviceType,
8690
device_arch DeviceArch, bool Is64Bit,
87-
const std::string &DeviceStepping, void *&CompileToSPIRVHandle,
91+
string_view DeviceStepping, void *&CompileToSPIRVHandle,
8892
void *&FreeSPIRVOutputsHandle,
8993
const std::vector<std::string> &UserArgs) {
94+
std::string Source{Src.data()};
9095

9196
if (!CompileToSPIRVHandle) {
9297
#ifdef __SYCL_RT_OS_WINDOWS
@@ -198,11 +203,11 @@ compileToSPIRV(const std::string &Source, sycl::info::device_type DeviceType,
198203
}
199204
} // namespace detail
200205

201-
template <>
202-
template <>
203-
__SYCL_EXPORT std::vector<byte>
204-
online_compiler<source_language::opencl_c>::compile(
205-
const std::string &Source, const std::vector<std::string> &UserArgs) {
206+
template <source_language Lang>
207+
__SYCL_EXPORT std::vector<byte> online_compiler<Lang>::compile_impl(
208+
detail::string_view Src,
209+
detail::string_view DeviceStepping,
210+
const std::vector<detail::string_view> &Options) {
206211

207212
if (OutputFormatVersion != std::pair<int, int>{0, 0}) {
208213
std::string Version = std::to_string(OutputFormatVersion.first) + ", " +
@@ -211,29 +216,27 @@ online_compiler<source_language::opencl_c>::compile(
211216
Version + ") is not supported yet");
212217
}
213218

214-
return detail::compileToSPIRV(Source, DeviceType, DeviceArch, Is64Bit,
219+
std::vector<std::string> UserArgs;
220+
for (auto &&Opt : Options)
221+
UserArgs.emplace_back(Opt.data());
222+
223+
if constexpr (Lang == source_language::cm)
224+
UserArgs.push_back("-cmc");
225+
226+
return detail::compileToSPIRV(Src, DeviceType, DeviceArch, Is64Bit,
215227
DeviceStepping, CompileToSPIRVHandle,
216228
FreeSPIRVOutputsHandle, UserArgs);
217229
}
218230

219-
template <>
220-
template <>
221-
__SYCL_EXPORT std::vector<byte> online_compiler<source_language::cm>::compile(
222-
const std::string &Source, const std::vector<std::string> &UserArgs) {
231+
template __SYCL_EXPORT std::vector<byte>
232+
online_compiler<source_language::opencl_c>::compile_impl(
233+
detail::string_view Src, detail::string_view DeviceStepping,
234+
const std::vector<detail::string_view> &Options);
223235

224-
if (OutputFormatVersion != std::pair<int, int>{0, 0}) {
225-
std::string Version = std::to_string(OutputFormatVersion.first) + ", " +
226-
std::to_string(OutputFormatVersion.second);
227-
throw online_compile_error(std::string("The output format version (") +
228-
Version + ") is not supported yet");
229-
}
230-
231-
std::vector<std::string> CMUserArgs = UserArgs;
232-
CMUserArgs.push_back("-cmc");
233-
return detail::compileToSPIRV(Source, DeviceType, DeviceArch, Is64Bit,
234-
DeviceStepping, CompileToSPIRVHandle,
235-
FreeSPIRVOutputsHandle, CMUserArgs);
236-
}
236+
template __SYCL_EXPORT std::vector<byte>
237+
online_compiler<source_language::cm>::compile_impl(
238+
detail::string_view Src, detail::string_view DeviceStepping,
239+
const std::vector<detail::string_view> &Options);
237240
} // namespace ext::intel::experimental
238241

239242
namespace ext {

sycl/test/abi/sycl_symbols_linux.dump

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2985,7 +2985,9 @@ _ZN4sycl3_V121__isgreaterequal_implEdd
29852985
_ZN4sycl3_V121__isgreaterequal_implEff
29862986
_ZN4sycl3_V122accelerator_selector_vERKNS0_6deviceE
29872987
_ZN4sycl3_V128verifyUSMAllocatorPropertiesERKNS0_13property_listE
2988+
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE0EE12compile_implENS0_6detail11string_viewES8_RKSt6vectorIS8_SaIS8_EE
29882989
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE0EE7compileIJSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISE_EEEEES8_IhSaIhEERKSE_DpRKT_
2990+
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE1EE12compile_implENS0_6detail11string_viewES8_RKSt6vectorIS8_SaIS8_EE
29892991
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE1EE7compileIJSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISE_EEEEES8_IhSaIhEERKSE_DpRKT_
29902992
_ZN4sycl3_V13ext5intel12experimental9pipe_base13get_pipe_nameB5cxx11EPKv
29912993
_ZN4sycl3_V13ext5intel12experimental9pipe_base17wait_non_blockingERKNS0_5eventE

0 commit comments

Comments
 (0)