@@ -818,13 +818,13 @@ template <typename T, int NElts = 1,
818818 lsc_data_size DS = lsc_data_size::default_size,
819819 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
820820 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 ) {
828828#ifdef __ESIMD_FORCE_STATELESS_MEM
829829 return lsc_gather<T, NElts, DS, L1H, L3H>(
830830 reinterpret_cast <T *>(acc.get_pointer ().get ()), offsets, pred);
@@ -854,8 +854,8 @@ template <typename T, int NElts = 1,
854854 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
855855 int N, typename AccessorTy, typename Toffset>
856856__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 > &&
859859 std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >,
860860 __ESIMD_NS::simd<T, N * NElts>>
861861lsc_gather (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
@@ -869,11 +869,12 @@ template <typename T, int NElts = 1,
869869 lsc_data_size DS = lsc_data_size::default_size,
870870 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
871871 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 ) {
877878 return lsc_slm_gather<T, NElts, DS>(
878879 offsets + __ESIMD_DNS::localAccessorToOffset (acc), pred);
879880}
@@ -903,14 +904,14 @@ template <typename T, int NElts = 1,
903904 lsc_data_size DS = lsc_data_size::default_size,
904905 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
905906 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) {
914915#ifdef __ESIMD_FORCE_STATELESS_MEM
915916 return lsc_gather<T, NElts, DS, L1H, L3H>(
916917 reinterpret_cast <T *>(acc.get_pointer ().get ()), offsets, pred, pass_thru);
@@ -943,8 +944,8 @@ template <typename T, int NElts = 1,
943944 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
944945 int N, typename AccessorTy, typename Toffset>
945946__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 > &&
948949 std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >,
949950 __ESIMD_NS::simd<T, N * NElts>>
950951lsc_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,
11301131 typename AccessorTy,
11311132 typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
11321133__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 > &&
11351136 __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
11361137 __ESIMD_NS::simd<T, NElts>>
11371138lsc_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,
11451146 typename AccessorTy,
11461147 typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
11471148__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> &&
11491151 __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
11501152 __ESIMD_NS::simd<T, NElts>>
11511153lsc_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,
11851187 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
11861188 typename AccessorTy,
11871189 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>>
11911195lsc_block_load (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
11921196 FlagsT flags) {
11931197 return lsc_block_load<T, NElts, DS, L1H, L3H>(
11941198 acc, offset, __ESIMD_NS::simd_mask<1 >(1 ), flags);
11951199}
11961200
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+
11971215// / Accessor-based transposed gather with 1 channel.
11981216// / Supported platforms: DG2, PVC
11991217// / VISA instruction: lsc_load.ugm
@@ -1231,8 +1249,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
12311249 typename AccessorTy,
12321250 typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
12331251__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 > &&
12361254 __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
12371255 __ESIMD_NS::simd<T, NElts>>
12381256lsc_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,
12471265 typename AccessorTy,
12481266 typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
12491267__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> &&
12511270 __ESIMD_NS::is_simd_flag_type_v<FlagsT>,
12521271 __ESIMD_NS::simd<T, NElts>>
12531272lsc_block_load (AccessorTy acc, uint32_t offset, __ESIMD_NS::simd_mask<1 > pred,
@@ -1377,9 +1396,8 @@ template <typename T, int NElts = 1,
13771396 lsc_data_size DS = lsc_data_size::default_size,
13781397 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
13791398 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>>
13831401lsc_prefetch (AccessorTy acc,
13841402#ifdef __ESIMD_FORCE_STATELESS_MEM
13851403 __ESIMD_NS::simd<uint64_t , N> offsets,
@@ -1414,8 +1432,8 @@ template <typename T, int NElts = 1,
14141432 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
14151433 int N, typename AccessorTy, typename Toffset>
14161434__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 > &&
14191437 std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >>
14201438lsc_prefetch (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
14211439 __ESIMD_NS::simd_mask<N> pred = 1 ) {
@@ -1443,9 +1461,8 @@ template <typename T, int NElts = 1,
14431461 lsc_data_size DS = lsc_data_size::default_size,
14441462 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
14451463 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>>
14491466lsc_prefetch (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset) {
14501467#ifdef __ESIMD_FORCE_STATELESS_MEM
14511468 lsc_prefetch<T, NElts, DS, L1H, L3H>(
@@ -1619,9 +1636,8 @@ template <typename T, int NElts = 1,
16191636 lsc_data_size DS = lsc_data_size::default_size,
16201637 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
16211638 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>>
16251641lsc_scatter (AccessorTy acc,
16261642 __ESIMD_NS::simd<__ESIMD_DNS::DeviceAccessorOffsetT, N> offsets,
16271643 __ESIMD_NS::simd<T, N * NElts> vals,
@@ -1656,8 +1672,8 @@ template <typename T, int NElts = 1,
16561672 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
16571673 int N, typename AccessorTy, typename Toffset>
16581674__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 > &&
16611677 std::is_integral_v<Toffset> && !std::is_same_v<Toffset, uint64_t >>
16621678lsc_scatter (AccessorTy acc, __ESIMD_NS::simd<Toffset, N> offsets,
16631679 __ESIMD_NS::simd<T, N * NElts> vals,
@@ -1671,8 +1687,8 @@ template <typename T, int NElts = 1,
16711687 lsc_data_size DS = lsc_data_size::default_size,
16721688 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
16731689 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 >>
16761692lsc_scatter (AccessorTy acc, __ESIMD_NS::simd<uint32_t , N> offsets,
16771693 __ESIMD_NS::simd<T, N * NElts> vals,
16781694 __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,
17981814 typename AccessorTy,
17991815 typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
18001816__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 > &&
18031819 __ESIMD_NS::is_simd_flag_type_v<FlagsT>>
18041820lsc_block_store (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
18051821 __ESIMD_NS::simd<T, NElts> vals,
@@ -1813,7 +1829,8 @@ template <typename T, int NElts, lsc_data_size DS = lsc_data_size::default_size,
18131829 typename AccessorTy,
18141830 typename FlagsT = __ESIMD_DNS::dqword_element_aligned_tag>
18151831__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> &&
18171834 __ESIMD_NS::is_simd_flag_type_v<FlagsT>>
18181835lsc_block_store (AccessorTy acc, uint32_t offset,
18191836 __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,
18551872 cache_hint L1H = cache_hint::none, cache_hint L3H = cache_hint::none,
18561873 typename AccessorTy,
18571874 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>>
18601879lsc_block_store (AccessorTy acc, __ESIMD_DNS::DeviceAccessorOffsetT offset,
18611880 __ESIMD_NS::simd<T, NElts> vals, FlagsT flags) {
18621881 lsc_block_store<T, NElts, DS, L1H, L3H>(acc, offset, vals,
0 commit comments