Skip to content

Commit c69e5ce

Browse files
[NFC][SYCL] Minor refactoring in accessor_properties.hpp (#7177)
1 parent 4b5ad3c commit c69e5ce

File tree

1 file changed

+37
-64
lines changed

1 file changed

+37
-64
lines changed

sycl/include/sycl/properties/accessor_properties.hpp

Lines changed: 37 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,11 @@ class __SYCL2020_DEPRECATED("spelling is now: no_init") noinit
2525

2626
} // namespace property
2727

28-
#if __cplusplus >= 201703L
29-
3028
__SYCL_INLINE_CONSTEXPR property::no_init no_init;
3129

3230
__SYCL2020_DEPRECATED("spelling is now: no_init")
3331
__SYCL_INLINE_CONSTEXPR property::noinit noinit;
3432

35-
#else
36-
37-
namespace {
38-
39-
constexpr const auto &no_init =
40-
sycl::detail::InlineVariableHelper<property::no_init>::value;
41-
42-
constexpr const auto &noinit __SYCL2020_DEPRECATED("spelling is now: no_init") =
43-
sycl::detail::InlineVariableHelper<property::noinit>::value;
44-
} // namespace
45-
46-
#endif
47-
4833
namespace ext {
4934
namespace intel {
5035
namespace property {
@@ -62,10 +47,9 @@ struct __SYCL_TYPE(buffer_location) buffer_location {
6247
};
6348
};
6449
} // namespace property
65-
#if __cplusplus >= 201703L
50+
6651
template <int A>
6752
inline constexpr property::buffer_location::instance<A> buffer_location{};
68-
#endif
6953
} // namespace intel
7054
} // namespace ext
7155

@@ -94,13 +78,9 @@ struct __SYCL_TYPE(no_alias) no_alias {
9478
};
9579
} // namespace property
9680

97-
#if __cplusplus >= 201703L
98-
9981
inline constexpr property::no_offset::instance<> no_offset;
10082
inline constexpr property::no_alias::instance<> no_alias;
10183

102-
#endif
103-
10484
template <>
10585
struct is_compile_time_property<ext::oneapi::property::no_offset>
10686
: std::true_type {};
@@ -121,6 +101,22 @@ class accessor;
121101
template <typename DataT, int Dimensions, access::mode AccessMode>
122102
class host_accessor;
123103

104+
namespace detail {
105+
namespace acc_properties {
106+
template <typename T> struct is_accessor : std::false_type {};
107+
template <typename DataT, int Dimensions, access::mode AccessMode,
108+
access::target AccessTarget, access::placeholder IsPlaceholder,
109+
typename PropertyListT>
110+
struct is_accessor<accessor<DataT, Dimensions, AccessMode, AccessTarget,
111+
IsPlaceholder, PropertyListT>> : std::true_type {};
112+
113+
template <typename T> struct is_host_accessor : std::false_type {};
114+
template <typename DataT, int Dimensions, access::mode AccessMode>
115+
struct is_host_accessor<host_accessor<DataT, Dimensions, AccessMode>>
116+
: std::true_type {};
117+
} // namespace acc_properties
118+
} // namespace detail
119+
124120
// Accessor property trait specializations
125121
template <>
126122
struct is_property<ext::oneapi::property::no_offset> : std::true_type {};
@@ -129,50 +125,27 @@ struct is_property<ext::oneapi::property::no_alias> : std::true_type {};
129125
template <>
130126
struct is_property<ext::intel::property::buffer_location> : std::true_type {};
131127

132-
template <typename DataT, int Dimensions, access::mode AccessMode,
133-
access::target AccessTarget, access::placeholder IsPlaceholder,
134-
typename PropertyListT>
135-
struct is_property_of<property::noinit,
136-
accessor<DataT, Dimensions, AccessMode, AccessTarget,
137-
IsPlaceholder, PropertyListT>> : std::true_type {
138-
};
139-
template <typename DataT, int Dimensions, access::mode AccessMode,
140-
access::target AccessTarget, access::placeholder IsPlaceholder,
141-
typename PropertyListT>
142-
struct is_property_of<property::no_init,
143-
accessor<DataT, Dimensions, AccessMode, AccessTarget,
144-
IsPlaceholder, PropertyListT>> : std::true_type {
145-
};
146-
template <typename DataT, int Dimensions, access::mode AccessMode,
147-
access::target AccessTarget, access::placeholder IsPlaceholder,
148-
typename PropertyListT>
149-
struct is_property_of<ext::oneapi::property::no_offset,
150-
accessor<DataT, Dimensions, AccessMode, AccessTarget,
151-
IsPlaceholder, PropertyListT>> : std::true_type {
152-
};
153-
template <typename DataT, int Dimensions, access::mode AccessMode,
154-
access::target AccessTarget, access::placeholder IsPlaceholder,
155-
typename PropertyListT>
156-
struct is_property_of<ext::oneapi::property::no_alias,
157-
accessor<DataT, Dimensions, AccessMode, AccessTarget,
158-
IsPlaceholder, PropertyListT>> : std::true_type {
159-
};
160-
template <typename DataT, int Dimensions, access::mode AccessMode,
161-
access::target AccessTarget, access::placeholder IsPlaceholder,
162-
typename PropertyListT>
163-
struct is_property_of<ext::intel::property::buffer_location,
164-
accessor<DataT, Dimensions, AccessMode, AccessTarget,
165-
IsPlaceholder, PropertyListT>> : std::true_type {
166-
};
128+
template <typename T>
129+
struct is_property_of<property::noinit, T>
130+
: std::bool_constant<detail::acc_properties::is_accessor<T>::value ||
131+
detail::acc_properties::is_host_accessor<T>::value> {};
167132

168-
template <typename DataT, int Dimensions, access::mode AccessMode>
169-
struct is_property_of<property::noinit,
170-
host_accessor<DataT, Dimensions, AccessMode>>
171-
: std::true_type {};
172-
template <typename DataT, int Dimensions, access::mode AccessMode>
173-
struct is_property_of<property::no_init,
174-
host_accessor<DataT, Dimensions, AccessMode>>
175-
: std::true_type {};
133+
template <typename T>
134+
struct is_property_of<property::no_init, T>
135+
: std::bool_constant<detail::acc_properties::is_accessor<T>::value ||
136+
detail::acc_properties::is_host_accessor<T>::value> {};
137+
138+
template <typename T>
139+
struct is_property_of<ext::oneapi::property::no_offset, T>
140+
: std::bool_constant<detail::acc_properties::is_accessor<T>::value> {};
141+
142+
template <typename T>
143+
struct is_property_of<ext::oneapi::property::no_alias, T>
144+
: std::bool_constant<detail::acc_properties::is_accessor<T>::value> {};
145+
146+
template <typename T>
147+
struct is_property_of<ext::intel::property::buffer_location, T>
148+
: std::bool_constant<detail::acc_properties::is_accessor<T>::value> {};
176149

177150
namespace detail {
178151
template <int I>

0 commit comments

Comments
 (0)