@@ -2873,8 +2873,11 @@ template <__ESIMD_NS::atomic_op Op, typename T, int N,
28732873 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
28742874 typename AccessorTy, typename Toffset>
28752875__ESIMD_API std::enable_if_t <
2876- sycl::detail::acc_properties::is_accessor_v<AccessorTy> &&
2877- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
2876+ __ESIMD_DNS::is_device_accessor_with_v<
2877+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read> &&
2878+ (Op == __ESIMD_NS::atomic_op::load ||
2879+ __ESIMD_DNS::is_device_accessor_with_v<
2880+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write>),
28782881 __ESIMD_NS::simd<T, N>>
28792882lsc_atomic_update (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
28802883 __ESIMD_NS::simd_mask<N> pred) {
@@ -2901,9 +2904,8 @@ template <__ESIMD_NS::atomic_op Op, typename T, int N,
29012904 lsc_data_size DS = lsc_data_size::default_size,
29022905 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
29032906 typename AccessorTy>
2904- __ESIMD_API std::enable_if_t <
2905- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
2906- __ESIMD_NS::simd<T, N>>
2907+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_rw_local_accessor_v<AccessorTy>,
2908+ __ESIMD_NS::simd<T, N>>
29072909lsc_atomic_update (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
29082910 __ESIMD_NS::simd_mask<N> pred) {
29092911 return lsc_slm_atomic_update<Op, T, N, DS>(
@@ -2932,10 +2934,8 @@ template <__ESIMD_NS::atomic_op Op, typename T, int N,
29322934 lsc_data_size DS = lsc_data_size::default_size,
29332935 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
29342936 typename AccessorTy, typename Toffset>
2935- __ESIMD_API std::enable_if_t <
2936- sycl::detail::acc_properties::is_accessor_v<AccessorTy> &&
2937- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
2938- __ESIMD_NS::simd<T, N>>
2937+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_rw_device_accessor_v<AccessorTy>,
2938+ __ESIMD_NS::simd<T, N>>
29392939lsc_atomic_update (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
29402940 __ESIMD_NS::simd<T, N> src0, __ESIMD_NS::simd_mask<N> pred) {
29412941 return __ESIMD_DNS::atomic_update_impl<Op, T, N, DS, L1H, L3H>(acc, offsets,
@@ -2962,9 +2962,8 @@ template <__ESIMD_NS::atomic_op Op, typename T, int N,
29622962 lsc_data_size DS = lsc_data_size::default_size,
29632963 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
29642964 typename AccessorTy>
2965- __ESIMD_API std::enable_if_t <
2966- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
2967- __ESIMD_NS::simd<T, N>>
2965+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_rw_local_accessor_v<AccessorTy>,
2966+ __ESIMD_NS::simd<T, N>>
29682967lsc_atomic_update (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
29692968 __ESIMD_NS::simd<T, N> src0, __ESIMD_NS::simd_mask<N> pred) {
29702969 return lsc_slm_atomic_update<Op, T, N, DS>(
@@ -2994,10 +2993,8 @@ template <__ESIMD_NS::atomic_op Op, typename T, int N,
29942993 lsc_data_size DS = lsc_data_size::default_size,
29952994 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
29962995 typename AccessorTy, typename Toffset>
2997- __ESIMD_API std::enable_if_t <
2998- sycl::detail::acc_properties::is_accessor_v<AccessorTy> &&
2999- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
3000- __ESIMD_NS::simd<T, N>>
2996+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_rw_device_accessor_v<AccessorTy>,
2997+ __ESIMD_NS::simd<T, N>>
30012998lsc_atomic_update (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
30022999 __ESIMD_NS::simd<T, N> src0, __ESIMD_NS::simd<T, N> src1,
30033000 __ESIMD_NS::simd_mask<N> pred) {
@@ -3052,9 +3049,8 @@ template <__ESIMD_NS::atomic_op Op, typename T, int N,
30523049 lsc_data_size DS = lsc_data_size::default_size,
30533050 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
30543051 typename AccessorTy>
3055- __ESIMD_API std::enable_if_t <
3056- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
3057- __ESIMD_NS::simd<T, N>>
3052+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_rw_local_accessor_v<AccessorTy>,
3053+ __ESIMD_NS::simd<T, N>>
30583054lsc_atomic_update (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
30593055 __ESIMD_NS::simd<T, N> src0, __ESIMD_NS::simd<T, N> src1,
30603056 __ESIMD_NS::simd_mask<N> pred) {
@@ -3131,9 +3127,7 @@ atomic_update(T *p, simd<Toffset, N> offset, simd_mask<N> mask) {
31313127
31323128template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
31333129 typename RegionTy = __ESIMD_NS::region1d_t <Toffset, N, 1 >>
3134- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3135- __ESIMD_DNS::get_num_args<Op>() == 0 ,
3136- simd<T, N>>
3130+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::get_num_args<Op>() == 0 , simd<T, N>>
31373131atomic_update (T *p, simd_view<Toffset, RegionTy> offsets,
31383132 simd_mask<N> mask = 1 ) {
31393133 return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
@@ -3151,24 +3145,20 @@ atomic_update(T *p, Toffset offset, simd_mask<N> mask = 1) {
31513145
31523146// / LSC version of the single-argument atomic update.
31533147template <native::lsc::atomic_op Op, typename T, int N, typename Toffset>
3154- __ESIMD_API
3155- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3156- __ESIMD_DNS::get_num_args<Op>() == 1 ,
3157- simd<T, N>>
3158- atomic_update (T *p, simd<Toffset, N> offset, simd<T, N> src0,
3159- simd_mask<N> mask) {
3148+ __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3149+ __ESIMD_DNS::get_num_args<Op>() == 1 ,
3150+ simd<T, N>>
3151+ atomic_update (T *p, simd<Toffset, N> offset, simd<T, N> src0,
3152+ simd_mask<N> mask) {
31603153 return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
31613154 p, offset, src0, mask);
31623155}
31633156
31643157template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
31653158 typename RegionTy = __ESIMD_NS::region1d_t <Toffset, N, 1 >>
3166- __ESIMD_API
3167- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3168- __ESIMD_DNS::get_num_args<Op>() == 1 ,
3169- simd<T, N>>
3170- atomic_update (T *p, simd_view<Toffset, RegionTy> offsets, simd<T, N> src0,
3171- simd_mask<N> mask = 1 ) {
3159+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::get_num_args<Op>() == 1 , simd<T, N>>
3160+ atomic_update (T *p, simd_view<Toffset, RegionTy> offsets, simd<T, N> src0,
3161+ simd_mask<N> mask = 1 ) {
31723162 return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
31733163 p, offsets, src0, mask);
31743164}
@@ -3198,9 +3188,7 @@ atomic_update(T *p, simd<Toffset, N> offset, simd<T, N> src0, simd<T, N> src1,
31983188
31993189template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32003190 typename RegionTy = __ESIMD_NS::region1d_t <Toffset, N, 1 >>
3201- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3202- __ESIMD_DNS::get_num_args<Op>() == 2 ,
3203- simd<T, N>>
3191+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::get_num_args<Op>() == 2 , simd<T, N>>
32043192atomic_update (T *p, simd_view<Toffset, RegionTy> offsets, simd<T, N> src0,
32053193 simd<T, N> src1, simd_mask<N> mask = 1 ) {
32063194 return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
@@ -3231,8 +3219,7 @@ atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd_mask<N> mask) {
32313219template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32323220 typename RegionTy = __ESIMD_NS::region1d_t <Toffset, N, 1 >,
32333221 typename AccessorTy>
3234- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3235- __ESIMD_DNS::get_num_args<Op>() == 0 &&
3222+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::get_num_args<Op>() == 0 &&
32363223 !std::is_pointer_v<AccessorTy>,
32373224 simd<T, N>>
32383225atomic_update (AccessorTy acc, simd_view<Toffset, RegionTy> offsets,
@@ -3255,27 +3242,24 @@ atomic_update(AccessorTy acc, Toffset offset, simd_mask<N> mask) {
32553242// / LSC version of the single-argument atomic update.
32563243template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32573244 typename AccessorTy>
3258- __ESIMD_API
3259- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3260- __ESIMD_DNS::get_num_args<Op>() == 1 &&
3261- !std::is_pointer_v<AccessorTy>,
3262- simd<T, N>>
3263- atomic_update (AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
3264- simd_mask<N> mask) {
3245+ __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3246+ __ESIMD_DNS::get_num_args<Op>() == 1 &&
3247+ !std::is_pointer_v<AccessorTy>,
3248+ simd<T, N>>
3249+ atomic_update (AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
3250+ simd_mask<N> mask) {
32653251 return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
32663252 acc, offset, src0, mask);
32673253}
32683254
32693255template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
32703256 typename RegionTy = __ESIMD_NS::region1d_t <Toffset, N, 1 >,
32713257 typename AccessorTy>
3272- __ESIMD_API
3273- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3274- __ESIMD_DNS::get_num_args<Op>() == 1 &&
3275- !std::is_pointer_v<AccessorTy>,
3276- simd<T, N>>
3277- atomic_update (AccessorTy acc, simd_view<Toffset, RegionTy> offsets,
3278- simd<T, N> src0, simd_mask<N> mask) {
3258+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::get_num_args<Op>() == 1 &&
3259+ !std::is_pointer_v<AccessorTy>,
3260+ simd<T, N>>
3261+ atomic_update (AccessorTy acc, simd_view<Toffset, RegionTy> offsets,
3262+ simd<T, N> src0, simd_mask<N> mask) {
32793263 return __ESIMD_ENS::lsc_atomic_update<detail::to_atomic_op<Op>(), T, N>(
32803264 acc, offsets, src0, mask);
32813265}
@@ -3311,8 +3295,7 @@ atomic_update(AccessorTy acc, simd<Toffset, N> offset, simd<T, N> src0,
33113295template <native::lsc::atomic_op Op, typename T, int N, typename Toffset,
33123296 typename RegionTy = __ESIMD_NS::region1d_t <Toffset, N, 1 >,
33133297 typename AccessorTy>
3314- __ESIMD_API std::enable_if_t <std::is_integral_v<Toffset> &&
3315- __ESIMD_DNS::get_num_args<Op>() == 2 &&
3298+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::get_num_args<Op>() == 2 &&
33163299 !std::is_pointer_v<AccessorTy>,
33173300 simd<T, N>>
33183301atomic_update (AccessorTy acc, simd_view<Toffset, RegionTy> offsets,
0 commit comments