Skip to content

Commit 911dedf

Browse files
[SYCL] Cover more cases to compute kernel names length in compile time (#18804)
constexpr was added to detail::string_view to support this.
1 parent c2c2022 commit 911dedf

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

sycl/include/sycl/detail/string_view.hpp

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ class string_view {
2727
#endif
2828

2929
public:
30-
string_view() noexcept = default;
31-
string_view(const string_view &strn) noexcept = default;
32-
string_view(string_view &&strn) noexcept = default;
33-
string_view(std::string_view strn) noexcept
30+
constexpr string_view() noexcept = default;
31+
constexpr string_view(const string_view &strn) noexcept = default;
32+
constexpr string_view(string_view &&strn) noexcept = default;
33+
constexpr string_view(std::string_view strn) noexcept
3434
: str(strn.data())
3535
#ifdef __INTEL_PREVIEW_BREAKING_CHANGES
3636
,
@@ -47,10 +47,10 @@ class string_view {
4747
{
4848
}
4949

50-
string_view &operator=(string_view &&strn) noexcept = default;
50+
constexpr string_view &operator=(string_view &&strn) noexcept = default;
5151
string_view &operator=(const string_view &strn) noexcept = default;
5252

53-
string_view &operator=(std::string_view strn) noexcept {
53+
constexpr string_view &operator=(std::string_view strn) noexcept {
5454
str = strn.data();
5555
#ifdef __INTEL_PREVIEW_BREAKING_CHANGES
5656
len = strn.size();
@@ -66,9 +66,9 @@ class string_view {
6666
return *this;
6767
}
6868

69-
const char *data() const noexcept { return str ? str : ""; }
69+
constexpr const char *data() const noexcept { return str ? str : ""; }
7070

71-
explicit operator std::string_view() const noexcept {
71+
constexpr explicit operator std::string_view() const noexcept {
7272
#ifdef __INTEL_PREVIEW_BREAKING_CHANGES
7373
return std::string_view(str, len);
7474
#else
@@ -77,31 +77,39 @@ class string_view {
7777
}
7878

7979
#ifdef __INTEL_PREVIEW_BREAKING_CHANGES
80-
friend bool operator==(string_view lhs, std::string_view rhs) noexcept {
80+
friend constexpr bool operator==(string_view lhs,
81+
std::string_view rhs) noexcept {
8182
return rhs == std::string_view(lhs);
8283
}
83-
friend bool operator==(std::string_view lhs, string_view rhs) noexcept {
84+
friend constexpr bool operator==(std::string_view lhs,
85+
string_view rhs) noexcept {
8486
return lhs == std::string_view(rhs);
8587
}
8688

87-
friend bool operator!=(string_view lhs, std::string_view rhs) noexcept {
89+
friend constexpr bool operator!=(string_view lhs,
90+
std::string_view rhs) noexcept {
8891
return rhs != std::string_view(lhs);
8992
}
90-
friend bool operator!=(std::string_view lhs, string_view rhs) noexcept {
93+
friend constexpr bool operator!=(std::string_view lhs,
94+
string_view rhs) noexcept {
9195
return lhs != std::string_view(rhs);
9296
}
9397
#else
94-
friend bool operator==(string_view lhs, std::string_view rhs) noexcept {
98+
friend constexpr bool operator==(string_view lhs,
99+
std::string_view rhs) noexcept {
95100
return rhs == lhs.data();
96101
}
97-
friend bool operator==(std::string_view lhs, string_view rhs) noexcept {
102+
friend constexpr bool operator==(std::string_view lhs,
103+
string_view rhs) noexcept {
98104
return lhs == rhs.data();
99105
}
100106

101-
friend bool operator!=(string_view lhs, std::string_view rhs) noexcept {
107+
friend constexpr bool operator!=(string_view lhs,
108+
std::string_view rhs) noexcept {
102109
return rhs != lhs.data();
103110
}
104-
friend bool operator!=(std::string_view lhs, string_view rhs) noexcept {
111+
friend constexpr bool operator!=(std::string_view lhs,
112+
string_view rhs) noexcept {
105113
return lhs != rhs.data();
106114
}
107115
#endif

sycl/include/sycl/handler.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,8 +1293,8 @@ class __SYCL_EXPORT handler {
12931293
KernelWrapper<WrapAs::parallel_for, KName, decltype(Wrapper),
12941294
TransformedArgType, PropertiesT>::wrap(this, Wrapper);
12951295
#ifndef __SYCL_DEVICE_ONLY__
1296-
verifyUsedKernelBundleInternal(
1297-
detail::string_view{detail::getKernelName<NameT>()});
1296+
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
1297+
verifyUsedKernelBundleInternal(Name);
12981298
// We are executing over the rounded range, but there are still
12991299
// items/ids that are are constructed in ther range rounded
13001300
// kernel use items/ids in the user range, which means that
@@ -1318,9 +1318,9 @@ class __SYCL_EXPORT handler {
13181318
KernelWrapper<WrapAs::parallel_for, NameT, KernelType, TransformedArgType,
13191319
PropertiesT>::wrap(this, KernelFunc);
13201320
#ifndef __SYCL_DEVICE_ONLY__
1321-
constexpr std::string_view Name{detail::getKernelName<NameT>()};
1321+
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
13221322

1323-
verifyUsedKernelBundleInternal(detail::string_view{Name});
1323+
verifyUsedKernelBundleInternal(Name);
13241324
processProperties<detail::isKernelESIMD<NameT>(), PropertiesT>(Props);
13251325
detail::checkValueRange<Dims>(UserRange);
13261326
setNDRangeDescriptor(std::move(UserRange));
@@ -1611,8 +1611,8 @@ class __SYCL_EXPORT handler {
16111611
throwOnKernelParameterMisuse<KernelName, KernelType>();
16121612
}
16131613
throwIfActionIsCreated();
1614-
verifyUsedKernelBundleInternal(
1615-
detail::string_view{detail::getKernelName<NameT>()});
1614+
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
1615+
verifyUsedKernelBundleInternal(Name);
16161616
setType(detail::CGType::Kernel);
16171617

16181618
detail::checkValueRange<Dims>(params...);
@@ -1655,8 +1655,8 @@ class __SYCL_EXPORT handler {
16551655
// Ignore any set kernel bundles and use the one associated with the
16561656
// kernel.
16571657
setHandlerKernelBundle(Kernel);
1658-
verifyUsedKernelBundleInternal(
1659-
detail::string_view{detail::getKernelName<NameT>()});
1658+
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
1659+
verifyUsedKernelBundleInternal(Name);
16601660
setType(detail::CGType::Kernel);
16611661

16621662
detail::checkValueRange<Dims>(params...);
@@ -2108,8 +2108,8 @@ class __SYCL_EXPORT handler {
21082108
kernel_single_task<NameT>(KernelFunc);
21092109
#ifndef __SYCL_DEVICE_ONLY__
21102110
throwIfActionIsCreated();
2111-
verifyUsedKernelBundleInternal(
2112-
detail::string_view{detail::getKernelName<NameT>()});
2111+
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
2112+
verifyUsedKernelBundleInternal(Name);
21132113
// No need to check if range is out of INT_MAX limits as it's compile-time
21142114
// known constant
21152115
setNDRangeDescriptor(range<1>{1});

0 commit comments

Comments
 (0)