Skip to content

Commit 05a6880

Browse files
authored
[SYCL][ESIMD] Remove use of std::is_pointer in the API declarations (#12206)
1 parent 7b921ea commit 05a6880

File tree

3 files changed

+23
-18
lines changed

3 files changed

+23
-18
lines changed

sycl/include/sycl/ext/intel/esimd/detail/sycl_util.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ inline constexpr bool is_rw_local_accessor_v =
115115
is_local_accessor_with_v<T, accessor_mode_cap::can_read> &&
116116
is_local_accessor_with_v<T, accessor_mode_cap::can_write>;
117117

118+
template <typename T>
119+
inline constexpr bool is_rw_accessor_v =
120+
is_rw_device_accessor_v<T> || is_rw_local_accessor_v<T>;
121+
118122
template <typename T, accessor_mode_cap_val_t Capability, typename RetT>
119123
using EnableIfAccessor =
120124
std::enable_if_t<detail::is_device_accessor_with_v<T, Capability>, RetT>;

sycl/include/sycl/ext/intel/esimd/memory.hpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2038,12 +2038,12 @@ block_store(AccessorT acc, simd<T, N> vals, simd_mask<1> pred,
20382038
// Implementations of accessor-based gather and scatter functions
20392039
namespace detail {
20402040
template <typename T, int N, typename AccessorTy>
2041-
ESIMD_INLINE
2042-
ESIMD_NODEBUG std::enable_if_t<(sizeof(T) <= 4) &&
2043-
(N == 1 || N == 8 || N == 16 || N == 32) &&
2044-
!std::is_pointer_v<AccessorTy>>
2045-
scatter_impl(AccessorTy acc, simd<T, N> vals, simd<uint32_t, N> offsets,
2046-
uint32_t glob_offset, simd_mask<N> mask) {
2041+
ESIMD_INLINE ESIMD_NODEBUG std::enable_if_t<
2042+
(sizeof(T) <= 4) && (N == 1 || N == 8 || N == 16 || N == 32) &&
2043+
(std::is_same_v<detail::LocalAccessorMarker, AccessorTy> ||
2044+
is_accessor_with_v<AccessorTy, detail::accessor_mode_cap::can_write>)>
2045+
scatter_impl(AccessorTy acc, simd<T, N> vals, simd<uint32_t, N> offsets,
2046+
uint32_t glob_offset, simd_mask<N> mask) {
20472047
constexpr int TypeSizeLog2 = detail::ElemsPerAddrEncoding<sizeof(T)>();
20482048
// TODO (performance) use hardware-supported scale once BE supports it
20492049
constexpr int16_t scale = 0;
@@ -2075,7 +2075,8 @@ ESIMD_INLINE
20752075
template <typename T, int N, typename AccessorTy>
20762076
ESIMD_INLINE ESIMD_NODEBUG std::enable_if_t<
20772077
(sizeof(T) <= 4) && (N == 1 || N == 8 || N == 16 || N == 32) &&
2078-
!std::is_pointer_v<AccessorTy>,
2078+
(std::is_same_v<detail::LocalAccessorMarker, AccessorTy> ||
2079+
is_accessor_with_v<AccessorTy, detail::accessor_mode_cap::can_read>),
20792080
simd<T, N>>
20802081
gather_impl(AccessorTy acc, simd<uint32_t, N> offsets, uint32_t glob_offset,
20812082
simd_mask<N> mask) {

sycl/include/sycl/ext/intel/experimental/esimd/memory.hpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3148,7 +3148,7 @@ template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
31483148
typename AccessorTy>
31493149
__ESIMD_API std::enable_if_t<std::is_integral_v<Toffset> &&
31503150
__ESIMD_DNS::get_num_args<Op>() == 0 &&
3151-
!std::is_pointer_v<AccessorTy>,
3151+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
31523152
simd<T, N>>
31533153
atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd_mask<N> mask) {
31543154
return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
@@ -3158,7 +3158,7 @@ atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd_mask<N> mask) {
31583158
template <native::lsc::atomic_op Op, typename T, int N, typename OffsetObjT,
31593159
typename RegionTy, typename AccessorTy>
31603160
__ESIMD_API std::enable_if_t<__ESIMD_DNS::get_num_args<Op>() == 0 &&
3161-
!std::is_pointer_v<AccessorTy>,
3161+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
31623162
simd<T, N>>
31633163
atomic_update(AccessorTy acc, simd_view<OffsetObjT, RegionTy> offsets,
31643164
simd_mask<N> mask) {
@@ -3170,7 +3170,7 @@ template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
31703170
typename AccessorTy>
31713171
__ESIMD_API std::enable_if_t<std::is_integral_v<Toffset> &&
31723172
__ESIMD_DNS::get_num_args<Op>() == 0 &&
3173-
!std::is_pointer_v<AccessorTy>,
3173+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
31743174
simd<T, N>>
31753175
atomic_update(AccessorTy acc, Toffset offset, simd_mask<N> mask) {
31763176
return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
@@ -3182,7 +3182,7 @@ template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
31823182
typename AccessorTy>
31833183
__ESIMD_API std::enable_if_t<std::is_integral_v<Toffset> &&
31843184
__ESIMD_DNS::get_num_args<Op>() == 1 &&
3185-
!std::is_pointer_v<AccessorTy>,
3185+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
31863186
simd<T, N>>
31873187
atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
31883188
simd_mask<N> mask) {
@@ -3192,9 +3192,9 @@ atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
31923192

31933193
template <native::lsc::atomic_op Op, typename T, int N, typename OffsetObjT,
31943194
typename RegionTy, typename AccessorTy>
3195-
__ESIMD_API __ESIMD_API std::enable_if_t<__ESIMD_DNS::get_num_args<Op>() == 1 &&
3196-
!std::is_pointer_v<AccessorTy>,
3197-
simd<T, N>>
3195+
__ESIMD_API std::enable_if_t<__ESIMD_DNS::get_num_args<Op>() == 1 &&
3196+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
3197+
simd<T, N>>
31983198
atomic_update(AccessorTy acc, simd_view<OffsetObjT, RegionTy> offsets,
31993199
simd<T, N> src0, simd_mask<N> mask) {
32003200
return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
@@ -3205,7 +3205,7 @@ template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32053205
typename AccessorTy>
32063206
__ESIMD_API std::enable_if_t<std::is_integral_v<Toffset> &&
32073207
__ESIMD_DNS::get_num_args<Op>() == 1 &&
3208-
!std::is_pointer_v<AccessorTy>,
3208+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
32093209
simd<T, N>>
32103210
atomic_update(AccessorTy acc, Toffset offset, simd<T, N> src0,
32113211
simd_mask<N> mask) {
@@ -3218,7 +3218,7 @@ template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32183218
typename AccessorTy>
32193219
__ESIMD_API std::enable_if_t<std::is_integral_v<Toffset> &&
32203220
__ESIMD_DNS::get_num_args<Op>() == 2 &&
3221-
!std::is_pointer_v<AccessorTy>,
3221+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
32223222
simd<T, N>>
32233223
atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
32243224
simd<T, N> src1, simd_mask<N> mask) {
@@ -3232,7 +3232,7 @@ atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
32323232
template <native::lsc::atomic_op Op, typename T, int N, typename OffsetObjT,
32333233
typename RegionTy, typename AccessorTy>
32343234
__ESIMD_API std::enable_if_t<__ESIMD_DNS::get_num_args<Op>() == 2 &&
3235-
!std::is_pointer_v<AccessorTy>,
3235+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
32363236
simd<T, N>>
32373237
atomic_update(AccessorTy acc, simd_view<OffsetObjT, RegionTy> offsets,
32383238
simd<T, N> src0, simd<T, N> src1, simd_mask<N> mask) {
@@ -3244,7 +3244,7 @@ template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32443244
typename AccessorTy>
32453245
__ESIMD_API std::enable_if_t<std::is_integral_v<Toffset> &&
32463246
__ESIMD_DNS::get_num_args<Op>() == 2 &&
3247-
!std::is_pointer_v<AccessorTy>,
3247+
__ESIMD_DNS::is_rw_accessor_v<AccessorTy>,
32483248
__ESIMD_NS::simd<T, N>>
32493249
atomic_update(AccessorTy acc, Toffset offset, simd<T, N> src0, simd<T, N> src1,
32503250
simd_mask<N> mask) {

0 commit comments

Comments
 (0)