Skip to content

Commit 047e15d

Browse files
NikitaRudenkoIntelKonstantin Vladimirov
authored and
Konstantin Vladimirov
committed
Add check for source arguments of lsc atomics
Add check for source arguments of lsc atomics
1 parent cced9a9 commit 047e15d

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

clang/lib/Headers/cm/include/cm/cm_lsc.h

+12
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,8 @@ cm_atomic(SurfaceIndex Idx, vector<unsigned, N> Offset,
11361136
CM_STATIC_ERROR(lsc_check_simt<N>(), "unexpected number of channels");
11371137
CM_STATIC_ERROR((lsc_check_cache_hint<LSCAction::Atomic, L1H, L3H>()),
11381138
"unsupported cache hint");
1139+
CM_STATIC_ERROR(lsc_check_atomic_src<T>(),
1140+
"unsupported type for lsc atomic source or dest arguments");
11391141
constexpr DataSize _DS = lsc_expand_ds(lsc_data_size<T, DS>());
11401142
constexpr bool _Transposed = false;
11411143
using _IntRetTy = decltype(lsc_data_type_ext<T, N, VS>());
@@ -1166,6 +1168,8 @@ cm_atomic(SurfaceIndex Idx, vector<unsigned, N> Offset,
11661168
CM_STATIC_ERROR(lsc_check_simt<N>(), "unexpected number of channels");
11671169
CM_STATIC_ERROR((lsc_check_cache_hint<LSCAction::Atomic, L1H, L3H>()),
11681170
"unsupported cache hint");
1171+
CM_STATIC_ERROR(lsc_check_atomic_src<T>(),
1172+
"unsupported type for lsc atomic source or dest arguments");
11691173
constexpr DataSize _DS = lsc_expand_ds(lsc_data_size<T, DS>());
11701174
using _IntRetTy = decltype(lsc_data_type_ext<T, N, VS>());
11711175
using _SrcTy = decltype(lsc_data_type_ext<T, N, VS>());
@@ -1223,6 +1227,8 @@ cm_ptr_atomic(T *Ptr, vector<unsigned, N> Offset,
12231227
CM_STATIC_ERROR(lsc_check_simt<N>(), "unexpected number of channels");
12241228
CM_STATIC_ERROR((lsc_check_cache_hint<LSCAction::Atomic, L1H, L3H>()),
12251229
"unsupported cache hint");
1230+
CM_STATIC_ERROR(lsc_check_atomic_src<T>(),
1231+
"unsupported type for lsc atomic source or dest arguments");
12261232
constexpr DataSize _DS = lsc_expand_ds(lsc_data_size<T, DS>());
12271233
constexpr bool _Transposed = false;
12281234
uint64_t _Addr = (uint64_t)Ptr;
@@ -1254,6 +1260,8 @@ cm_ptr_atomic(T *Ptr, vector<unsigned, N> Offset,
12541260
CM_STATIC_ERROR(lsc_check_simt<N>(), "unexpected number of channels");
12551261
CM_STATIC_ERROR((lsc_check_cache_hint<LSCAction::Atomic, L1H, L3H>()),
12561262
"unsupported cache hint");
1263+
CM_STATIC_ERROR(lsc_check_atomic_src<T>(),
1264+
"unsupported type for lsc atomic source or dest arguments");
12571265
constexpr DataSize _DS = lsc_expand_ds(lsc_data_size<T, DS>());
12581266
using _IntRetTy = decltype(lsc_data_type_ext<T, N, VS>());
12591267
using _SrcTy = decltype(lsc_data_type_ext<T, N, VS>());
@@ -1336,6 +1344,8 @@ cm_atomic_slm(vector<unsigned, N> Offset,
13361344
CM_STATIC_ERROR(lsc_check_simt<N>(), "unexpected number of channels");
13371345
CM_STATIC_ERROR((lsc_check_cache_hint<LSCAction::Atomic, L1H, L3H>()),
13381346
"unsupported cache hint");
1347+
CM_STATIC_ERROR(lsc_check_atomic_src<T>(),
1348+
"unsupported type for lsc atomic source or dest arguments");
13391349
constexpr DataSize _DS = lsc_expand_ds(lsc_data_size<T, DS>());
13401350
constexpr bool _Transposed = false;
13411351
using _IntRetTy = decltype(lsc_data_type_ext<T, N, VS>());
@@ -1366,6 +1376,8 @@ cm_atomic_slm(vector<unsigned, N> Offset,
13661376
CM_STATIC_ERROR(lsc_check_simt<N>(), "unexpected number of channels");
13671377
CM_STATIC_ERROR((lsc_check_cache_hint<LSCAction::Atomic, L1H, L3H>()),
13681378
"unsupported cache hint");
1379+
CM_STATIC_ERROR(lsc_check_atomic_src<T>(),
1380+
"unsupported type for lsc atomic source or dest arguments");
13691381
constexpr DataSize _DS = lsc_expand_ds(lsc_data_size<T, DS>());
13701382
using _IntRetTy = decltype(lsc_data_type_ext<T, N, VS>());
13711383
using _SrcTy = decltype(lsc_data_type_ext<T, N, VS>());

clang/lib/Headers/cm/include/cm/cm_util.h

+7
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,13 @@ constexpr bool lsc_check_simt() {
290290
#endif // CM_GENX >= 1280
291291
}
292292

293+
// Check for valid type for atomic source and dest arguments
294+
template <typename T>
295+
constexpr bool lsc_check_atomic_src() {
296+
// 8-bit atomics are unsupported
297+
return sizeof(T) >= 2;
298+
}
299+
293300
template <CacheHint mHint> class CacheHintWrap {
294301
template <CacheHint...> class is_one_of_t;
295302
template <CacheHint Last>

0 commit comments

Comments
 (0)