summaryrefslogtreecommitdiffstats
path: root/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch')
-rw-r--r--dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch344
1 files changed, 0 insertions, 344 deletions
diff --git a/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch b/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch
deleted file mode 100644
index 99dbb81c..00000000
--- a/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch
+++ /dev/null
@@ -1,344 +0,0 @@
1From f1a24eeb89342186c6c718e02dd394775620799f Mon Sep 17 00:00:00 2001
2From: haonanya <haonan.yang@intel.com>
3Date: Wed, 28 Jul 2021 14:20:08 +0800
4Subject: [PATCH 3/3] Support cl_ext_float_atomics
5
6Upstream-Status: Backport [Taken from opencl-clang patches; https://github.com/intel/opencl-clang/blob/ocl-open-120/patches/clang/0003-OpenCL-Support-cl_ext_float_atomics.patch]
7
8Signed-off-by: haonanya <haonan.yang@intel.com>
9Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
10---
11 clang/lib/Headers/opencl-c-base.h | 19 +++
12 clang/lib/Headers/opencl-c.h | 195 ++++++++++++++++++++++++++
13 clang/test/Headers/opencl-c-header.cl | 72 ++++++++++
14 3 files changed, 286 insertions(+)
15
16diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h
17index e8dcd70377e5..c8b6d36029ec 100644
18--- a/clang/lib/Headers/opencl-c-base.h
19+++ b/clang/lib/Headers/opencl-c-base.h
20@@ -21,6 +21,25 @@
21 #define cl_khr_subgroup_shuffle 1
22 #define cl_khr_subgroup_shuffle_relative 1
23 #define cl_khr_subgroup_clustered_reduce 1
24+#define cl_ext_float_atomics
25+#ifdef cl_khr_fp16
26+#define __opencl_c_ext_fp16_global_atomic_load_store 1
27+#define __opencl_c_ext_fp16_local_atomic_load_store 1
28+#define __opencl_c_ext_fp16_global_atomic_add 1
29+#define __opencl_c_ext_fp16_local_atomic_add 1
30+#define __opencl_c_ext_fp16_global_atomic_min_max 1
31+#define __opencl_c_ext_fp16_local_atomic_min_max 1
32+#endif
33+#ifdef __opencl_c_fp64
34+#define __opencl_c_ext_fp64_global_atomic_add 1
35+#define __opencl_c_ext_fp64_local_atomic_add 1
36+#define __opencl_c_ext_fp64_global_atomic_min_max 1
37+#define __opencl_c_ext_fp64_local_atomic_min_max 1
38+#endif
39+#define __opencl_c_ext_fp32_global_atomic_add 1
40+#define __opencl_c_ext_fp32_local_atomic_add 1
41+#define __opencl_c_ext_fp32_global_atomic_min_max 1
42+#define __opencl_c_ext_fp32_local_atomic_min_max 1
43 #endif // defined(__SPIR__)
44 #endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
45
46diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h
47index ab665628c8e1..6676da858d2a 100644
48--- a/clang/lib/Headers/opencl-c.h
49+++ b/clang/lib/Headers/opencl-c.h
50@@ -13531,6 +13531,201 @@ intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uint
51 intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uintptr_t opermax, memory_order minder, memory_scope scope);
52 #endif
53
54+#if defined(cl_ext_float_atomics)
55+
56+#if defined(__opencl_c_ext_fp32_global_atomic_min_max)
57+float __ovld atomic_fetch_min(volatile __global atomic_float *object,
58+ float operand);
59+float __ovld atomic_fetch_max(volatile __global atomic_float *object,
60+ float operand);
61+float __ovld atomic_fetch_min_explicit(volatile __global atomic_float *object,
62+ float operand, memory_order order);
63+float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object,
64+ float operand, memory_order order);
65+float __ovld atomic_fetch_min_explicit(volatile __global atomic_float *object,
66+ float operand, memory_order order,
67+ memory_scope scope);
68+float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object,
69+ float operand, memory_order order,
70+ memory_scope scope);
71+#endif
72+#if defined(__opencl_c_ext_fp32_local_atomic_min_max)
73+float __ovld atomic_fetch_min(volatile __local atomic_float *object,
74+ float operand);
75+float __ovld atomic_fetch_max(volatile __local atomic_float *object,
76+ float operand);
77+float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object,
78+ float operand, memory_order order);
79+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
80+ float operand, memory_order order);
81+float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object,
82+ float operand, memory_order order,
83+ memory_scope scope);
84+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
85+ float operand, memory_order order,
86+ memory_scope scope);
87+#endif
88+#if defined(__opencl_c_ext_fp32_global_atomic_min_max) || \
89+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
90+float __ovld atomic_fetch_min(volatile atomic_float *object, float operand);
91+float __ovld atomic_fetch_max(volatile atomic_float *object, float operand);
92+float __ovld atomic_fetch_min_explicit(volatile atomic_float *object,
93+ float operand, memory_order order);
94+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
95+ float operand, memory_order order);
96+float __ovld atomic_fetch_min_explicit(volatile atomic_float *object,
97+ float operand, memory_order order,
98+ memory_scope scope);
99+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
100+ float operand, memory_order order,
101+ memory_scope scope);
102+#endif
103+#if defined(__opencl_c_ext_fp64_global_atomic_min_max)
104+double __ovld atomic_fetch_min(volatile __global atomic_double *object,
105+ double operand);
106+double __ovld atomic_fetch_max(volatile __global atomic_double *object,
107+ double operand);
108+double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object,
109+ double operand, memory_order order);
110+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
111+ double operand, memory_order order);
112+double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object,
113+ double operand, memory_order order,
114+ memory_scope scope);
115+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
116+ double operand, memory_order order,
117+ memory_scope scope);
118+#endif
119+#if defined(__opencl_c_ext_fp64_local_atomic_min_max)
120+double __ovld atomic_fetch_min(volatile __local atomic_double *object,
121+ double operand);
122+double __ovld atomic_fetch_max(volatile __local atomic_double *object,
123+ double operand);
124+double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object,
125+ double operand, memory_order order);
126+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
127+ double operand, memory_order order);
128+double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object,
129+ double operand, memory_order order,
130+ memory_scope scope);
131+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
132+ double operand, memory_order order,
133+ memory_scope scope);
134+#endif
135+#if defined(__opencl_c_ext_fp64_global_atomic_min_max) || \
136+ defined(__opencl_c_ext_fp64_local_atomic_min_max)
137+double __ovld atomic_fetch_min(volatile atomic_double *object, double operand);
138+double __ovld atomic_fetch_max(volatile atomic_double *object, double operand);
139+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
140+ double operand, memory_order order);
141+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
142+ double operand, memory_order order);
143+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
144+ double operand, memory_order order,
145+ memory_scope scope);
146+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
147+ double operand, memory_order order,
148+ memory_scope scope);
149+#endif
150+
151+#if defined(__opencl_c_ext_fp32_global_atomic_add)
152+float __ovld atomic_fetch_add(volatile __global atomic_float *object,
153+ float operand);
154+float __ovld atomic_fetch_sub(volatile __global atomic_float *object,
155+ float operand);
156+float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object,
157+ float operand, memory_order order);
158+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
159+ float operand, memory_order order);
160+float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object,
161+ float operand, memory_order order,
162+ memory_scope scope);
163+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
164+ float operand, memory_order order,
165+ memory_scope scope);
166+#endif
167+#if defined(__opencl_c_ext_fp32_local_atomic_add)
168+float __ovld atomic_fetch_add(volatile __local atomic_float *object,
169+ float operand);
170+float __ovld atomic_fetch_sub(volatile __local atomic_float *object,
171+ float operand);
172+float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object,
173+ float operand, memory_order order);
174+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
175+ float operand, memory_order order);
176+float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object,
177+ float operand, memory_order order,
178+ memory_scope scope);
179+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
180+ float operand, memory_order order,
181+ memory_scope scope);
182+#endif
183+#if defined(__opencl_c_ext_fp32_global_atomic_add) || \
184+ defined(__opencl_c_ext_fp32_local_atomic_add)
185+float __ovld atomic_fetch_add(volatile atomic_float *object, float operand);
186+float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand);
187+float __ovld atomic_fetch_add_explicit(volatile atomic_float *object,
188+ float operand, memory_order order);
189+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
190+ float operand, memory_order order);
191+float __ovld atomic_fetch_add_explicit(volatile atomic_float *object,
192+ float operand, memory_order order,
193+ memory_scope scope);
194+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
195+ float operand, memory_order order,
196+ memory_scope scope);
197+#endif
198+
199+#if defined(__opencl_c_ext_fp64_global_atomic_add)
200+double __ovld atomic_fetch_add(volatile __global atomic_double *object,
201+ double operand);
202+double __ovld atomic_fetch_sub(volatile __global atomic_double *object,
203+ double operand);
204+double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object,
205+ double operand, memory_order order);
206+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
207+ double operand, memory_order order);
208+double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object,
209+ double operand, memory_order order,
210+ memory_scope scope);
211+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
212+ double operand, memory_order order,
213+ memory_scope scope);
214+#endif
215+#if defined(__opencl_c_ext_fp64_local_atomic_add)
216+double __ovld atomic_fetch_add(volatile __local atomic_double *object,
217+ double operand);
218+double __ovld atomic_fetch_sub(volatile __local atomic_double *object,
219+ double operand);
220+double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object,
221+ double operand, memory_order order);
222+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
223+ double operand, memory_order order);
224+double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object,
225+ double operand, memory_order order,
226+ memory_scope scope);
227+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
228+ double operand, memory_order order,
229+ memory_scope scope);
230+#endif
231+#if defined(__opencl_c_ext_fp64_global_atomic_add) || \
232+ defined(__opencl_c_ext_fp64_local_atomic_add)
233+double __ovld atomic_fetch_add(volatile atomic_double *object, double operand);
234+double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand);
235+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
236+ double operand, memory_order order);
237+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
238+ double operand, memory_order order);
239+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
240+ double operand, memory_order order,
241+ memory_scope scope);
242+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
243+ double operand, memory_order order,
244+ memory_scope scope);
245+#endif
246+
247+#endif // cl_ext_float_atomics
248+
249 // atomic_store()
250
251 void __ovld atomic_store(volatile atomic_int *object, int desired);
252diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl
253index 13a3b62481ec..2c02d14f25c3 100644
254--- a/clang/test/Headers/opencl-c-header.cl
255+++ b/clang/test/Headers/opencl-c-header.cl
256@@ -124,6 +124,36 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
257 #if cl_khr_subgroup_clustered_reduce != 1
258 #error "Incorrectly defined cl_khr_subgroup_clustered_reduce"
259 #endif
260+#if __opencl_c_ext_fp16_global_atomic_load_store != 1
261+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_load_store"
262+#endif
263+#if __opencl_c_ext_fp16_local_atomic_load_store != 1
264+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_load_store"
265+#endif
266+#if __opencl_c_ext_fp16_global_atomic_add != 1
267+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_add"
268+#endif
269+#if __opencl_c_ext_fp32_global_atomic_add != 1
270+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add"
271+#endif
272+#if __opencl_c_ext_fp16_local_atomic_add != 1
273+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add"
274+#endif
275+#if __opencl_c_ext_fp32_local_atomic_add != 1
276+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add"
277+#endif
278+#if __opencl_c_ext_fp16_global_atomic_min_max != 1
279+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max"
280+#endif
281+#if __opencl_c_ext_fp32_global_atomic_min_max != 1
282+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max"
283+#endif
284+#if __opencl_c_ext_fp16_local_atomic_min_max != 1
285+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max"
286+#endif
287+#if __opencl_c_ext_fp32_local_atomic_min_max != 1
288+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max"
289+#endif
290
291 #else
292
293@@ -148,6 +178,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
294 #ifdef cl_khr_subgroup_clustered_reduce
295 #error "Incorrect cl_khr_subgroup_clustered_reduce define"
296 #endif
297+#ifdef __opencl_c_ext_fp16_global_atomic_load_store
298+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_load_store defined"
299+#endif
300+#ifdef __opencl_c_ext_fp16_local_atomic_load_store
301+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_load_store defined"
302+#endif
303+#ifdef __opencl_c_ext_fp16_global_atomic_add
304+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_add defined"
305+#endif
306+#ifdef __opencl_c_ext_fp32_global_atomic_add
307+#error "Incorrectly __opencl_c_ext_fp32_global_atomic_add defined"
308+#endif
309+#ifdef __opencl_c_ext_fp64_global_atomic_add
310+#error "Incorrectly __opencl_c_ext_fp64_global_atomic_add defined"
311+#endif
312+#ifdef __opencl_c_ext_fp16_local_atomic_add
313+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_add defined"
314+#endif
315+#ifdef __opencl_c_ext_fp32_local_atomic_add
316+#error "Incorrectly __opencl_c_ext_fp32_local_atomic_add defined"
317+#endif
318+#ifdef __opencl_c_ext_fp64_local_atomic_add
319+#error "Incorrectly __opencl_c_ext_fp64_local_atomic_add defined"
320+#endif
321+#ifdef __opencl_c_ext_fp16_global_atomic_min_max
322+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_min_max defined"
323+#endif
324+#ifdef __opencl_c_ext_fp32_global_atomic_min_max
325+#error "Incorrectly __opencl_c_ext_fp32_global_atomic_min_max defined"
326+#endif
327+#ifdef __opencl_c_ext_fp64_global_atomic_min_max
328+#error "Incorrectly __opencl_c_ext_fp64_global_atomic_min_max defined"
329+#endif
330+#ifdef __opencl_c_ext_fp16_local_atomic_min_max
331+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_min_max defined"
332+#endif
333+#ifdef __opencl_c_ext_fp32_local_atomic_min_max
334+#error "Incorrectly __opencl_c_ext_fp32_local_atomic_min_max defined"
335+#endif
336+#ifdef __opencl_c_ext_fp64_local_atomic_min_max
337+#error "Incorrectly __opencl_c_ext_fp64_local_atomic_min_max defined"
338+#endif
339
340 #endif //(defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
341
342--
3432.17.1
344