13
13
#include < cstdint>
14
14
#include < type_traits>
15
15
16
+ // Convergent attribute
17
+ #ifdef __SYCL_DEVICE_ONLY__
18
+ #define __SYCL_CONVERGENT__ __attribute__ ((convergent))
19
+ #else
20
+ #define __SYCL_CONVERGENT__
21
+ #endif
22
+
16
23
#ifdef __SYCL_DEVICE_ONLY__
17
24
18
25
template <typename RetT, typename ImageT>
@@ -45,11 +52,10 @@ extern SYCL_EXTERNAL TempRetT __spirv_ImageSampleExplicitLod(SampledType,
45
52
//
46
53
47
54
template <typename dataT>
48
- __ocl_event_t __spirv_GroupAsyncCopy (__spv::Scope Execution,
49
- __attribute__ ((opencl_local)) dataT *Dest,
50
- __attribute__((opencl_global)) dataT *Src,
51
- size_t NumElements, size_t Stride,
52
- __ocl_event_t E) noexcept {
55
+ __SYCL_CONVERGENT__ __ocl_event_t __spirv_GroupAsyncCopy (
56
+ __spv::Scope Execution, __attribute__((opencl_local)) dataT *Dest,
57
+ __attribute__((opencl_global)) dataT *Src, size_t NumElements,
58
+ size_t Stride, __ocl_event_t E) noexcept {
53
59
for (int i = 0 ; i < NumElements; i++) {
54
60
Dest[i] = Src[i * Stride];
55
61
}
@@ -58,11 +64,10 @@ __ocl_event_t __spirv_GroupAsyncCopy(__spv::Scope Execution,
58
64
}
59
65
60
66
template <typename dataT>
61
- __ocl_event_t __spirv_GroupAsyncCopy (__spv::Scope Execution,
62
- __attribute__ ((opencl_global)) dataT *Dest,
63
- __attribute__((opencl_local)) dataT *Src,
64
- size_t NumElements, size_t Stride,
65
- __ocl_event_t E) noexcept {
67
+ __SYCL_CONVERGENT__ __ocl_event_t __spirv_GroupAsyncCopy (
68
+ __spv::Scope Execution, __attribute__((opencl_global)) dataT *Dest,
69
+ __attribute__((opencl_local)) dataT *Src, size_t NumElements, size_t Stride,
70
+ __ocl_event_t E) noexcept {
66
71
for (int i = 0 ; i < NumElements; i++) {
67
72
Dest[i * Stride] = Src[i];
68
73
}
@@ -71,13 +76,13 @@ __ocl_event_t __spirv_GroupAsyncCopy(__spv::Scope Execution,
71
76
}
72
77
#else
73
78
template <typename dataT>
74
- extern SYCL_EXTERNAL __ocl_event_t __spirv_GroupAsyncCopy (
79
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL __ocl_event_t __spirv_GroupAsyncCopy (
75
80
__spv::Scope Execution, __attribute__((opencl_local)) dataT *Dest,
76
81
__attribute__((opencl_global)) dataT *Src, size_t NumElements,
77
82
size_t Stride, __ocl_event_t E) noexcept ;
78
83
79
84
template <typename dataT>
80
- extern SYCL_EXTERNAL __ocl_event_t __spirv_GroupAsyncCopy (
85
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL __ocl_event_t __spirv_GroupAsyncCopy (
81
86
__spv::Scope Execution, __attribute__((opencl_global)) dataT *Dest,
82
87
__attribute__((opencl_local)) dataT *Src, size_t NumElements, size_t Stride,
83
88
__ocl_event_t E) noexcept ;
@@ -182,95 +187,86 @@ __SPIRV_ATOMICS(__SPIRV_ATOMIC_UNSIGNED, unsigned long long)
182
187
__SPIRV_ATOMICS(__SPIRV_ATOMIC_MINMAX, Min)
183
188
__SPIRV_ATOMICS(__SPIRV_ATOMIC_MINMAX, Max)
184
189
185
- extern SYCL_EXTERNAL bool __spirv_GroupAll(__spv::Scope Execution,
186
- bool Predicate) noexcept ;
190
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL bool
191
+ __spirv_GroupAll(__spv::Scope Execution, bool Predicate) noexcept ;
187
192
188
- extern SYCL_EXTERNAL bool __spirv_GroupAny (__spv::Scope Execution,
189
- bool Predicate) noexcept ;
193
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL bool
194
+ __spirv_GroupAny (__spv::Scope Execution, bool Predicate) noexcept ;
190
195
191
196
template <typename dataT>
192
- extern SYCL_EXTERNAL dataT __spirv_GroupBroadcast (__spv::Scope Execution,
193
- dataT Value,
194
- size_t LocalId) noexcept ;
197
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupBroadcast (
198
+ __spv::Scope Execution, dataT Value, size_t LocalId) noexcept ;
195
199
196
200
template <typename dataT>
197
- extern SYCL_EXTERNAL dataT
201
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT
198
202
__spirv_GroupBroadcast (__spv::Scope Execution, dataT Value,
199
203
__ocl_vec_t <size_t , 2 > LocalId) noexcept ;
200
204
template <typename dataT>
201
- extern SYCL_EXTERNAL dataT
205
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT
202
206
__spirv_GroupBroadcast (__spv::Scope Execution, dataT Value,
203
207
__ocl_vec_t <size_t , 3 > LocalId) noexcept ;
204
208
205
209
template <typename dataT>
206
- extern SYCL_EXTERNAL dataT __spirv_GroupIAdd (__spv::Scope Execution,
207
- __spv::GroupOperation Op,
208
- dataT Value) noexcept ;
210
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupIAdd (
211
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
209
212
template <typename dataT>
210
- extern SYCL_EXTERNAL dataT __spirv_GroupFAdd (__spv::Scope Execution,
211
- __spv::GroupOperation Op,
212
- dataT Value) noexcept ;
213
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupFAdd (
214
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
213
215
template <typename dataT>
214
- extern SYCL_EXTERNAL dataT __spirv_GroupUMin (__spv::Scope Execution,
215
- __spv::GroupOperation Op,
216
- dataT Value) noexcept ;
216
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupUMin (
217
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
217
218
template <typename dataT>
218
- extern SYCL_EXTERNAL dataT __spirv_GroupSMin (__spv::Scope Execution,
219
- __spv::GroupOperation Op,
220
- dataT Value) noexcept ;
219
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupSMin (
220
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
221
221
template <typename dataT>
222
- extern SYCL_EXTERNAL dataT __spirv_GroupFMin (__spv::Scope Execution,
223
- __spv::GroupOperation Op,
224
- dataT Value) noexcept ;
222
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupFMin (
223
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
225
224
template <typename dataT>
226
- extern SYCL_EXTERNAL dataT __spirv_GroupUMax (__spv::Scope Execution,
227
- __spv::GroupOperation Op,
228
- dataT Value) noexcept ;
225
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupUMax (
226
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
229
227
template <typename dataT>
230
- extern SYCL_EXTERNAL dataT __spirv_GroupSMax (__spv::Scope Execution,
231
- __spv::GroupOperation Op,
232
- dataT Value) noexcept ;
228
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupSMax (
229
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
233
230
template <typename dataT>
234
- extern SYCL_EXTERNAL dataT __spirv_GroupFMax (__spv::Scope Execution,
235
- __spv::GroupOperation Op,
236
- dataT Value) noexcept ;
231
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_GroupFMax (
232
+ __spv::Scope Execution, __spv::GroupOperation Op, dataT Value) noexcept ;
237
233
template <typename dataT>
238
- extern SYCL_EXTERNAL dataT
234
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT
239
235
__spirv_SubgroupShuffleINTEL (dataT Data, uint32_t InvocationId) noexcept ;
240
236
template <typename dataT>
241
- extern SYCL_EXTERNAL dataT __spirv_SubgroupShuffleDownINTEL (
237
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_SubgroupShuffleDownINTEL (
242
238
dataT Current, dataT Next, uint32_t Delta) noexcept ;
243
239
template <typename dataT>
244
- extern SYCL_EXTERNAL dataT __spirv_SubgroupShuffleUpINTEL (
240
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_SubgroupShuffleUpINTEL (
245
241
dataT Previous, dataT Current, uint32_t Delta) noexcept ;
246
242
template <typename dataT>
247
- extern SYCL_EXTERNAL dataT
243
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT
248
244
__spirv_SubgroupShuffleXorINTEL (dataT Data, uint32_t Value) noexcept ;
249
245
250
246
template <typename dataT>
251
- extern SYCL_EXTERNAL dataT __spirv_SubgroupBlockReadINTEL (
247
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_SubgroupBlockReadINTEL (
252
248
const __attribute__ ((opencl_global)) uint8_t *Ptr) noexcept ;
253
249
254
250
template <typename dataT>
255
- extern SYCL_EXTERNAL void
251
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL void
256
252
__spirv_SubgroupBlockWriteINTEL (__attribute__((opencl_global)) uint8_t *Ptr,
257
253
dataT Data) noexcept ;
258
254
259
255
template <typename dataT>
260
- extern SYCL_EXTERNAL dataT __spirv_SubgroupBlockReadINTEL (
256
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_SubgroupBlockReadINTEL (
261
257
const __attribute__ ((opencl_global)) uint16_t *Ptr) noexcept ;
262
258
263
259
template <typename dataT>
264
- extern SYCL_EXTERNAL void
260
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL void
265
261
__spirv_SubgroupBlockWriteINTEL (__attribute__((opencl_global)) uint16_t *Ptr,
266
262
dataT Data) noexcept ;
267
263
268
264
template <typename dataT>
269
- extern SYCL_EXTERNAL dataT __spirv_SubgroupBlockReadINTEL (
265
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL dataT __spirv_SubgroupBlockReadINTEL (
270
266
const __attribute__ ((opencl_global)) uint32_t *Ptr) noexcept ;
271
267
272
268
template <typename dataT>
273
- extern SYCL_EXTERNAL void
269
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL void
274
270
__spirv_SubgroupBlockWriteINTEL (__attribute__((opencl_global)) uint32_t *Ptr,
275
271
dataT Data) noexcept ;
276
272
@@ -538,7 +534,7 @@ __SPIRV_DECLARE_OCL3(select) // select
538
534
#else // if !__SYCL_DEVICE_ONLY__
539
535
540
536
template <typename dataT>
541
- extern __ocl_event_t
537
+ __SYCL_CONVERGENT__ extern __ocl_event_t
542
538
OpGroupAsyncCopyGlobalToLocal (__spv::Scope Execution, dataT *Dest, dataT *Src,
543
539
size_t NumElements, size_t Stride,
544
540
__ocl_event_t E) noexcept {
@@ -550,7 +546,7 @@ OpGroupAsyncCopyGlobalToLocal(__spv::Scope Execution, dataT *Dest, dataT *Src,
550
546
}
551
547
552
548
template <typename dataT>
553
- extern __ocl_event_t
549
+ __SYCL_CONVERGENT__ extern __ocl_event_t
554
550
OpGroupAsyncCopyLocalToGlobal (__spv::Scope Execution, dataT *Dest, dataT *Src,
555
551
size_t NumElements, size_t Stride,
556
552
__ocl_event_t E) noexcept {
@@ -565,13 +561,13 @@ extern void __spirv_ocl_prefetch(const char *Ptr, size_t NumBytes) noexcept;
565
561
566
562
#endif // !__SYCL_DEVICE_ONLY__
567
563
568
- extern SYCL_EXTERNAL void __spirv_ControlBarrier (__spv::Scope Execution,
569
- __spv::Scope Memory,
570
- uint32_t Semantics) noexcept ;
564
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL void
565
+ __spirv_ControlBarrier (__spv::Scope Execution, __spv::Scope Memory,
566
+ uint32_t Semantics) noexcept ;
571
567
572
- extern SYCL_EXTERNAL void __spirv_MemoryBarrier (__spv::Scope Memory,
573
- uint32_t Semantics) noexcept ;
568
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL void
569
+ __spirv_MemoryBarrier (__spv::Scope Memory, uint32_t Semantics) noexcept ;
574
570
575
- extern SYCL_EXTERNAL void
571
+ __SYCL_CONVERGENT__ extern SYCL_EXTERNAL void
576
572
__spirv_GroupWaitEvents (__spv::Scope Execution, uint32_t NumEvents,
577
573
__ocl_event_t *WaitEvents) noexcept ;
0 commit comments