@@ -818,13 +818,13 @@ template <typename T, int NElts = 1,
818
818
lsc_data_size DS = lsc_data_size::default_size,
819
819
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
820
820
int N, typename AccessorTy>
821
- __ESIMD_API std:: enable_if_t <
822
- ! std::is_pointer_v<AccessorTy> &&
823
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy >,
824
- __ESIMD_NS::simd<T, N * NElts>>
825
- lsc_gather (AccessorTy acc,
826
- __ESIMD_NS::simd<__ESIMD_DNS::DeviceAccessorOffsetT, N> offsets,
827
- __ESIMD_NS::simd_mask<N> pred = 1 ) {
821
+ __ESIMD_API
822
+ std::enable_if_t <__ESIMD_DNS::is_device_accessor_with_v<
823
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read >,
824
+ __ESIMD_NS::simd<T, N * NElts>>
825
+ lsc_gather (AccessorTy acc,
826
+ __ESIMD_NS::simd<__ESIMD_DNS::DeviceAccessorOffsetT, N> offsets,
827
+ __ESIMD_NS::simd_mask<N> pred = 1 ) {
828
828
#ifdef __ESIMD_FORCE_STATELESS_MEM
829
829
return lsc_gather<T, NElts, DS, L1H, L3H>(
830
830
reinterpret_cast <T *>(acc.get_pointer ().get ()), offsets, pred);
@@ -854,8 +854,8 @@ template <typename T, int NElts = 1,
854
854
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
855
855
int N, typename AccessorTy, typename Toffset>
856
856
__ESIMD_API std::enable_if_t <
857
- !std::is_pointer_v<AccessorTy> &&
858
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
857
+ __ESIMD_DNS::is_device_accessor_with_v<
858
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read > &&
859
859
std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >,
860
860
__ESIMD_NS::simd<T, N * NElts>>
861
861
lsc_gather (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
@@ -869,11 +869,12 @@ template <typename T, int NElts = 1,
869
869
lsc_data_size DS = lsc_data_size::default_size,
870
870
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
871
871
int N, typename AccessorTy>
872
- __ESIMD_API std::enable_if_t <
873
- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>,
874
- __ESIMD_NS::simd<T, N * NElts>>
875
- lsc_gather (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
876
- __ESIMD_NS::simd_mask<N> pred = 1 ) {
872
+ __ESIMD_API
873
+ std::enable_if_t <__ESIMD_DNS::is_local_accessor_with_v<
874
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read>,
875
+ __ESIMD_NS::simd<T, N * NElts>>
876
+ lsc_gather (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
877
+ __ESIMD_NS::simd_mask<N> pred = 1 ) {
877
878
return lsc_slm_gather<T, NElts, DS>(
878
879
offsets + __ESIMD_DNS::localAccessorToOffset (acc), pred);
879
880
}
@@ -903,14 +904,14 @@ template <typename T, int NElts = 1,
903
904
lsc_data_size DS = lsc_data_size::default_size,
904
905
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
905
906
int N, typename AccessorTy>
906
- __ESIMD_API std:: enable_if_t <
907
- ! std::is_pointer_v<AccessorTy> &&
908
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy >,
909
- __ESIMD_NS::simd<T, N * NElts>>
910
- lsc_gather (AccessorTy acc,
911
- __ESIMD_NS::simd<__ESIMD_DNS::DeviceAccessorOffsetT, N> offsets,
912
- __ESIMD_NS::simd_mask<N> pred,
913
- __ESIMD_NS::simd<T, N * NElts> pass_thru) {
907
+ __ESIMD_API
908
+ std::enable_if_t <__ESIMD_DNS::is_device_accessor_with_v<
909
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read >,
910
+ __ESIMD_NS::simd<T, N * NElts>>
911
+ lsc_gather (AccessorTy acc,
912
+ __ESIMD_NS::simd<__ESIMD_DNS::DeviceAccessorOffsetT, N> offsets,
913
+ __ESIMD_NS::simd_mask<N> pred,
914
+ __ESIMD_NS::simd<T, N * NElts> pass_thru) {
914
915
#ifdef __ESIMD_FORCE_STATELESS_MEM
915
916
return lsc_gather<T, NElts, DS, L1H, L3H>(
916
917
reinterpret_cast <T *>(acc.get_pointer ().get ()), offsets, pred, pass_thru);
@@ -943,8 +944,8 @@ template <typename T, int NElts = 1,
943
944
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
944
945
int N, typename AccessorTy, typename Toffset>
945
946
__ESIMD_API std::enable_if_t <
946
- !std::is_pointer_v<AccessorTy> &&
947
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
947
+ __ESIMD_DNS::is_device_accessor_with_v<
948
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read > &&
948
949
std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >,
949
950
__ESIMD_NS::simd<T, N * NElts>>
950
951
lsc_gather (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
@@ -1130,8 +1131,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1130
1131
typename AccessorTy,
1131
1132
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1132
1133
__ESIMD_API std::enable_if_t <
1133
- !std::is_pointer_v<AccessorTy> &&
1134
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
1134
+ __ESIMD_DNS::is_device_accessor_with_v<
1135
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read > &&
1135
1136
__ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1136
1137
__ESIMD_NS::simd<T, NElts>>
1137
1138
lsc_block_load (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
@@ -1145,7 +1146,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1145
1146
typename AccessorTy,
1146
1147
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1147
1148
__ESIMD_API std::enable_if_t <
1148
- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy> &&
1149
+ __ESIMD_DNS::is_local_accessor_with_v<
1150
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read> &&
1149
1151
__ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1150
1152
__ESIMD_NS::simd<T, NElts>>
1151
1153
lsc_block_load (AccessorTy acc, uint32_t offset,
@@ -1185,15 +1187,31 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1185
1187
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1186
1188
typename AccessorTy,
1187
1189
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1188
- __ESIMD_API std::enable_if_t <!std::is_pointer_v<AccessorTy> &&
1189
- __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1190
- __ESIMD_NS::simd<T, NElts>>
1190
+ __ESIMD_API std::enable_if_t <
1191
+ __ESIMD_DNS::is_device_accessor_with_v<
1192
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read> &&
1193
+ __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1194
+ __ESIMD_NS::simd<T, NElts>>
1191
1195
lsc_block_load (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
1192
1196
FlagsT flags) {
1193
1197
return lsc_block_load<T, NElts, DS, L1H, L3H>(
1194
1198
acc, offset, __ESIMD_NS::simd_mask<1 >(1 ), flags);
1195
1199
}
1196
1200
1201
+ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1202
+ cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1203
+ typename AccessorTy,
1204
+ typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1205
+ __ESIMD_API std::enable_if_t <
1206
+ __ESIMD_DNS::is_local_accessor_with_v<
1207
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read> &&
1208
+ __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1209
+ __ESIMD_NS::simd<T, NElts>>
1210
+ lsc_block_load (AccessorTy acc, uint32_t offset, FlagsT flags) {
1211
+ return lsc_block_load<T, NElts, DS, L1H, L3H>(
1212
+ acc, offset, __ESIMD_NS::simd_mask<1 >(1 ), flags);
1213
+ }
1214
+
1197
1215
// / Accessor-based transposed gather with 1 channel.
1198
1216
// / Supported platforms: DG2, PVC
1199
1217
// / VISA instruction: lsc_load.ugm
@@ -1231,8 +1249,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1231
1249
typename AccessorTy,
1232
1250
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1233
1251
__ESIMD_API std::enable_if_t <
1234
- !std::is_pointer_v<AccessorTy> &&
1235
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
1252
+ __ESIMD_DNS::is_device_accessor_with_v<
1253
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read > &&
1236
1254
__ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1237
1255
__ESIMD_NS::simd<T, NElts>>
1238
1256
lsc_block_load (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
@@ -1247,7 +1265,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1247
1265
typename AccessorTy,
1248
1266
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1249
1267
__ESIMD_API std::enable_if_t <
1250
- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy> &&
1268
+ __ESIMD_DNS::is_local_accessor_with_v<
1269
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read> &&
1251
1270
__ESIMD_NS::is_simd_flag_type_v<FlagsT>,
1252
1271
__ESIMD_NS::simd<T, NElts>>
1253
1272
lsc_block_load (AccessorTy acc, uint32_t offset, __ESIMD_NS::simd_mask<1 > pred,
@@ -1377,9 +1396,8 @@ template <typename T, int NElts = 1,
1377
1396
lsc_data_size DS = lsc_data_size::default_size,
1378
1397
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1379
1398
int N, typename AccessorTy>
1380
- __ESIMD_API std::enable_if_t <
1381
- !std::is_pointer_v<AccessorTy> &&
1382
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>>
1399
+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_device_accessor_with_v<
1400
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read>>
1383
1401
lsc_prefetch (AccessorTy acc,
1384
1402
#ifdef __ESIMD_FORCE_STATELESS_MEM
1385
1403
__ESIMD_NS::simd<uint64_t , N> offsets,
@@ -1414,8 +1432,8 @@ template <typename T, int NElts = 1,
1414
1432
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1415
1433
int N, typename AccessorTy, typename Toffset>
1416
1434
__ESIMD_API std::enable_if_t <
1417
- !std::is_pointer_v<AccessorTy> &&
1418
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
1435
+ __ESIMD_DNS::is_device_accessor_with_v<
1436
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read > &&
1419
1437
std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >>
1420
1438
lsc_prefetch (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
1421
1439
__ESIMD_NS::simd_mask<N> pred = 1 ) {
@@ -1443,9 +1461,8 @@ template <typename T, int NElts = 1,
1443
1461
lsc_data_size DS = lsc_data_size::default_size,
1444
1462
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1445
1463
typename AccessorTy>
1446
- __ESIMD_API std::enable_if_t <
1447
- !std::is_pointer_v<AccessorTy> &&
1448
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>>
1464
+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_device_accessor_with_v<
1465
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_read>>
1449
1466
lsc_prefetch (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset) {
1450
1467
#ifdef __ESIMD_FORCE_STATELESS_MEM
1451
1468
lsc_prefetch<T, NElts, DS, L1H, L3H>(
@@ -1619,9 +1636,8 @@ template <typename T, int NElts = 1,
1619
1636
lsc_data_size DS = lsc_data_size::default_size,
1620
1637
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1621
1638
int N, typename AccessorTy>
1622
- __ESIMD_API std::enable_if_t <
1623
- !std::is_pointer_v<AccessorTy> &&
1624
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy>>
1639
+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_device_accessor_with_v<
1640
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write>>
1625
1641
lsc_scatter (AccessorTy acc,
1626
1642
__ESIMD_NS::simd<__ESIMD_DNS::DeviceAccessorOffsetT, N> offsets,
1627
1643
__ESIMD_NS::simd<T, N * NElts> vals,
@@ -1656,8 +1672,8 @@ template <typename T, int NElts = 1,
1656
1672
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1657
1673
int N, typename AccessorTy, typename Toffset>
1658
1674
__ESIMD_API std::enable_if_t <
1659
- !std::is_pointer_v<AccessorTy> &&
1660
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
1675
+ __ESIMD_DNS::is_device_accessor_with_v<
1676
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write > &&
1661
1677
std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >>
1662
1678
lsc_scatter (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
1663
1679
__ESIMD_NS::simd<T, N * NElts> vals,
@@ -1671,8 +1687,8 @@ template <typename T, int NElts = 1,
1671
1687
lsc_data_size DS = lsc_data_size::default_size,
1672
1688
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1673
1689
int N, typename AccessorTy>
1674
- __ESIMD_API std::enable_if_t <
1675
- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy >>
1690
+ __ESIMD_API std::enable_if_t <__ESIMD_DNS::is_local_accessor_with_v<
1691
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write >>
1676
1692
lsc_scatter (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
1677
1693
__ESIMD_NS::simd<T, N * NElts> vals,
1678
1694
__ESIMD_NS::simd_mask<N> pred = 1 ) {
@@ -1798,8 +1814,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1798
1814
typename AccessorTy,
1799
1815
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1800
1816
__ESIMD_API std::enable_if_t <
1801
- !std::is_pointer_v<AccessorTy> &&
1802
- !sycl::detail::acc_properties::is_local_accessor_v<AccessorTy > &&
1817
+ __ESIMD_DNS::is_device_accessor_with_v<
1818
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write > &&
1803
1819
__ESIMD_NS::is_simd_flag_type_v<FlagsT>>
1804
1820
lsc_block_store (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
1805
1821
__ESIMD_NS::simd<T, NElts> vals,
@@ -1813,7 +1829,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1813
1829
typename AccessorTy,
1814
1830
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1815
1831
__ESIMD_API std::enable_if_t <
1816
- sycl::detail::acc_properties::is_local_accessor_v<AccessorTy> &&
1832
+ __ESIMD_DNS::is_local_accessor_with_v<
1833
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write> &&
1817
1834
__ESIMD_NS::is_simd_flag_type_v<FlagsT>>
1818
1835
lsc_block_store (AccessorTy acc, uint32_t offset,
1819
1836
__ESIMD_NS::simd<T, NElts> vals, FlagsT flags = FlagsT{}) {
@@ -1855,8 +1872,10 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
1855
1872
cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
1856
1873
typename AccessorTy,
1857
1874
typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
1858
- __ESIMD_API std::enable_if_t <!std::is_pointer_v<AccessorTy> &&
1859
- __ESIMD_NS::is_simd_flag_type_v<FlagsT>>
1875
+ __ESIMD_API std::enable_if_t <
1876
+ __ESIMD_DNS::is_accessor_with_v<
1877
+ AccessorTy, __ESIMD_DNS::accessor_mode_cap::can_write> &&
1878
+ __ESIMD_NS::is_simd_flag_type_v<FlagsT>>
1860
1879
lsc_block_store (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
1861
1880
__ESIMD_NS::simd<T, NElts> vals, FlagsT flags) {
1862
1881
lsc_block_store<T, NElts, DS, L1H, L3H>(acc, offset, vals,
0 commit comments