summaryrefslogtreecommitdiffstats
path: root/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm10-0007-support-cl_ext_float_atomics.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm10-0007-support-cl_ext_float_atomics.patch')
-rw-r--r--dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm10-0007-support-cl_ext_float_atomics.patch377
1 files changed, 377 insertions, 0 deletions
diff --git a/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm10-0007-support-cl_ext_float_atomics.patch b/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm10-0007-support-cl_ext_float_atomics.patch
new file mode 100644
index 00000000..f7d191ff
--- /dev/null
+++ b/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm10-0007-support-cl_ext_float_atomics.patch
@@ -0,0 +1,377 @@
1From a685de6fc45afcdbe4a7120e9d5b33e175dd71cd Mon Sep 17 00:00:00 2001
2From: haonanya <haonan.yang@intel.com>
3Date: Fri, 13 Aug 2021 10:00:02 +0800
4Subject: [PATCH 7/7] support cl_ext_float_atomics
5
6Upstream-Status: Backport [Taken from opencl-clang patches; https://github.com/intel/opencl-clang/blob/ocl-open-100/patches/clang/0005-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 | 25 ++++
12 clang/lib/Headers/opencl-c.h | 208 ++++++++++++++++++++++++++
13 clang/test/Headers/opencl-c-header.cl | 96 ++++++++++++
14 3 files changed, 329 insertions(+)
15
16diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h
17index 2cc688ccc3da..86bbee12fdf8 100644
18--- a/clang/lib/Headers/opencl-c-base.h
19+++ b/clang/lib/Headers/opencl-c-base.h
20@@ -14,6 +14,31 @@
21 #define CL_VERSION_3_0 300
22 #endif
23
24+#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
25+// For SPIR all extensions are supported.
26+#if defined(__SPIR__)
27+#define cl_ext_float_atomics 1
28+#ifdef cl_khr_fp16
29+#define __opencl_c_ext_fp16_global_atomic_load_store 1
30+#define __opencl_c_ext_fp16_local_atomic_load_store 1
31+#define __opencl_c_ext_fp16_global_atomic_add 1
32+#define __opencl_c_ext_fp16_local_atomic_add 1
33+#define __opencl_c_ext_fp16_global_atomic_min_max 1
34+#define __opencl_c_ext_fp16_local_atomic_min_max 1
35+#endif
36+#ifdef __opencl_c_fp64
37+#define __opencl_c_ext_fp64_global_atomic_add 1
38+#define __opencl_c_ext_fp64_local_atomic_add 1
39+#define __opencl_c_ext_fp64_global_atomic_min_max 1
40+#define __opencl_c_ext_fp64_local_atomic_min_max 1
41+#endif
42+#define __opencl_c_ext_fp32_global_atomic_add 1
43+#define __opencl_c_ext_fp32_local_atomic_add 1
44+#define __opencl_c_ext_fp32_global_atomic_min_max 1
45+#define __opencl_c_ext_fp32_local_atomic_min_max 1
46+#endif // defined(__SPIR__)
47+#endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
48+
49 // Define features for 2.0 for header backward compatibility
50 #ifndef __opencl_c_int64
51 #define __opencl_c_int64 1
52diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h
53index 67d900eb1c3d..b463e702d95e 100644
54--- a/clang/lib/Headers/opencl-c.h
55+++ b/clang/lib/Headers/opencl-c.h
56@@ -14354,6 +14354,214 @@ intptr_t __ovld atomic_fetch_max_explicit(
57 // defined(cl_khr_int64_extended_atomics)
58 #endif // (__OPENCL_C_VERSION__ >= CL_VERSION_3_0)
59
60+#if defined(cl_ext_float_atomics)
61+
62+#if defined(__opencl_c_ext_fp32_global_atomic_min_max)
63+float __ovld atomic_fetch_min(volatile __global atomic_float *object,
64+ float operand);
65+float __ovld atomic_fetch_max(volatile __global atomic_float *object,
66+ float operand);
67+float __ovld atomic_fetch_min_explicit(volatile __global atomic_float *object,
68+ float operand, memory_order order);
69+float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object,
70+ float operand, memory_order order);
71+float __ovld atomic_fetch_min_explicit(volatile __global atomic_float *object,
72+ float operand, memory_order order,
73+ memory_scope scope);
74+float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object,
75+ float operand, memory_order order,
76+ memory_scope scope);
77+#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max)
78+
79+#if defined(__opencl_c_ext_fp32_local_atomic_min_max)
80+float __ovld atomic_fetch_min(volatile __local atomic_float *object,
81+ float operand);
82+float __ovld atomic_fetch_max(volatile __local atomic_float *object,
83+ float operand);
84+float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object,
85+ float operand, memory_order order);
86+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
87+ float operand, memory_order order);
88+float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object,
89+ float operand, memory_order order,
90+ memory_scope scope);
91+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
92+ float operand, memory_order order,
93+ memory_scope scope);
94+#endif // defined(__opencl_c_ext_fp32_local_atomic_min_max)
95+
96+#if defined(__opencl_c_ext_fp32_global_atomic_min_max) || \
97+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
98+float __ovld atomic_fetch_min(volatile atomic_float *object, float operand);
99+float __ovld atomic_fetch_max(volatile atomic_float *object, float operand);
100+float __ovld atomic_fetch_min_explicit(volatile atomic_float *object,
101+ float operand, memory_order order);
102+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
103+ float operand, memory_order order);
104+float __ovld atomic_fetch_min_explicit(volatile atomic_float *object,
105+ float operand, memory_order order,
106+ memory_scope scope);
107+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
108+ float operand, memory_order order,
109+ memory_scope scope);
110+#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max) || \
111+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
112+
113+#if defined(__opencl_c_ext_fp64_global_atomic_min_max)
114+double __ovld atomic_fetch_min(volatile __global atomic_double *object,
115+ double operand);
116+double __ovld atomic_fetch_max(volatile __global atomic_double *object,
117+ double operand);
118+double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object,
119+ double operand, memory_order order);
120+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
121+ double operand, memory_order order);
122+double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object,
123+ double operand, memory_order order,
124+ memory_scope scope);
125+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
126+ double operand, memory_order order,
127+ memory_scope scope);
128+#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max)
129+
130+#if defined(__opencl_c_ext_fp64_local_atomic_min_max)
131+double __ovld atomic_fetch_min(volatile __local atomic_double *object,
132+ double operand);
133+double __ovld atomic_fetch_max(volatile __local atomic_double *object,
134+ double operand);
135+double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object,
136+ double operand, memory_order order);
137+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
138+ double operand, memory_order order);
139+double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object,
140+ double operand, memory_order order,
141+ memory_scope scope);
142+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
143+ double operand, memory_order order,
144+ memory_scope scope);
145+#endif // defined(__opencl_c_ext_fp64_local_atomic_min_max)
146+
147+#if defined(__opencl_c_ext_fp64_global_atomic_min_max) || \
148+ defined(__opencl_c_ext_fp64_local_atomic_min_max)
149+double __ovld atomic_fetch_min(volatile atomic_double *object, double operand);
150+double __ovld atomic_fetch_max(volatile atomic_double *object, double operand);
151+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
152+ double operand, memory_order order);
153+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
154+ double operand, memory_order order);
155+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
156+ double operand, memory_order order,
157+ memory_scope scope);
158+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
159+ double operand, memory_order order,
160+ memory_scope scope);
161+#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max) || \
162+ defined(__opencl_c_ext_fp64_local_atomic_min_max)
163+
164+#if defined(__opencl_c_ext_fp32_global_atomic_add)
165+float __ovld atomic_fetch_add(volatile __global atomic_float *object,
166+ float operand);
167+float __ovld atomic_fetch_sub(volatile __global atomic_float *object,
168+ float operand);
169+float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object,
170+ float operand, memory_order order);
171+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
172+ float operand, memory_order order);
173+float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object,
174+ float operand, memory_order order,
175+ memory_scope scope);
176+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
177+ float operand, memory_order order,
178+ memory_scope scope);
179+#endif // defined(__opencl_c_ext_fp32_global_atomic_add)
180+
181+#if defined(__opencl_c_ext_fp32_local_atomic_add)
182+float __ovld atomic_fetch_add(volatile __local atomic_float *object,
183+ float operand);
184+float __ovld atomic_fetch_sub(volatile __local atomic_float *object,
185+ float operand);
186+float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object,
187+ float operand, memory_order order);
188+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
189+ float operand, memory_order order);
190+float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object,
191+ float operand, memory_order order,
192+ memory_scope scope);
193+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
194+ float operand, memory_order order,
195+ memory_scope scope);
196+#endif // defined(__opencl_c_ext_fp32_local_atomic_add)
197+
198+#if defined(__opencl_c_ext_fp32_global_atomic_add) || \
199+ defined(__opencl_c_ext_fp32_local_atomic_add)
200+float __ovld atomic_fetch_add(volatile atomic_float *object, float operand);
201+float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand);
202+float __ovld atomic_fetch_add_explicit(volatile atomic_float *object,
203+ float operand, memory_order order);
204+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
205+ float operand, memory_order order);
206+float __ovld atomic_fetch_add_explicit(volatile atomic_float *object,
207+ float operand, memory_order order,
208+ memory_scope scope);
209+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
210+ float operand, memory_order order,
211+ memory_scope scope);
212+#endif // defined(__opencl_c_ext_fp32_global_atomic_add) || \
213+ defined(__opencl_c_ext_fp32_local_atomic_add)
214+
215+#if defined(__opencl_c_ext_fp64_global_atomic_add)
216+double __ovld atomic_fetch_add(volatile __global atomic_double *object,
217+ double operand);
218+double __ovld atomic_fetch_sub(volatile __global atomic_double *object,
219+ double operand);
220+double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object,
221+ double operand, memory_order order);
222+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
223+ double operand, memory_order order);
224+double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object,
225+ double operand, memory_order order,
226+ memory_scope scope);
227+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
228+ double operand, memory_order order,
229+ memory_scope scope);
230+#endif // defined(__opencl_c_ext_fp64_global_atomic_add)
231+
232+#if defined(__opencl_c_ext_fp64_local_atomic_add)
233+double __ovld atomic_fetch_add(volatile __local atomic_double *object,
234+ double operand);
235+double __ovld atomic_fetch_sub(volatile __local atomic_double *object,
236+ double operand);
237+double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object,
238+ double operand, memory_order order);
239+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
240+ double operand, memory_order order);
241+double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object,
242+ double operand, memory_order order,
243+ memory_scope scope);
244+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
245+ double operand, memory_order order,
246+ memory_scope scope);
247+#endif // defined(__opencl_c_ext_fp64_local_atomic_add)
248+
249+#if defined(__opencl_c_ext_fp64_global_atomic_add) || \
250+ defined(__opencl_c_ext_fp64_local_atomic_add)
251+double __ovld atomic_fetch_add(volatile atomic_double *object, double operand);
252+double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand);
253+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
254+ double operand, memory_order order);
255+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
256+ double operand, memory_order order);
257+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
258+ double operand, memory_order order,
259+ memory_scope scope);
260+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
261+ double operand, memory_order order,
262+ memory_scope scope);
263+#endif // defined(__opencl_c_ext_fp64_global_atomic_add) || \
264+ defined(__opencl_c_ext_fp64_local_atomic_add)
265+
266+#endif // cl_ext_float_atomics
267+
268 // atomic_store()
269
270 #if defined(__opencl_c_atomic_scope_device) && \
271diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl
272index 2716076acdcf..7f720cf28142 100644
273--- a/clang/test/Headers/opencl-c-header.cl
274+++ b/clang/test/Headers/opencl-c-header.cl
275@@ -98,3 +98,99 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
276 #pragma OPENCL EXTENSION cl_intel_planar_yuv : enable
277
278 // CHECK-MOD: Reading modules
279+
280+// For SPIR all extensions are supported.
281+#if defined(__SPIR__)
282+
283+#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
284+
285+#if __opencl_c_ext_fp16_global_atomic_load_store != 1
286+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_load_store"
287+#endif
288+#if __opencl_c_ext_fp16_local_atomic_load_store != 1
289+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_load_store"
290+#endif
291+#if __opencl_c_ext_fp16_global_atomic_add != 1
292+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_add"
293+#endif
294+#if __opencl_c_ext_fp32_global_atomic_add != 1
295+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add"
296+#endif
297+#if __opencl_c_ext_fp64_global_atomic_add != 1
298+#error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_add"
299+#endif
300+#if __opencl_c_ext_fp16_local_atomic_add != 1
301+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add"
302+#endif
303+#if __opencl_c_ext_fp32_local_atomic_add != 1
304+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add"
305+#endif
306+#if __opencl_c_ext_fp64_local_atomic_add != 1
307+#error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_add"
308+#endif
309+#if __opencl_c_ext_fp16_global_atomic_min_max != 1
310+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max"
311+#endif
312+#if __opencl_c_ext_fp32_global_atomic_min_max != 1
313+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max"
314+#endif
315+#if __opencl_c_ext_fp64_global_atomic_min_max != 1
316+#error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_min_max"
317+#endif
318+#if __opencl_c_ext_fp16_local_atomic_min_max != 1
319+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max"
320+#endif
321+#if __opencl_c_ext_fp32_local_atomic_min_max != 1
322+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max"
323+#endif
324+#if __opencl_c_ext_fp64_local_atomic_min_max != 1
325+#error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_min_max"
326+#endif
327+#else
328+
329+#ifdef __opencl_c_ext_fp16_global_atomic_load_store
330+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_load_store defined"
331+#endif
332+#ifdef __opencl_c_ext_fp16_local_atomic_load_store
333+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_load_store defined"
334+#endif
335+#ifdef __opencl_c_ext_fp16_global_atomic_add
336+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_add defined"
337+#endif
338+#ifdef __opencl_c_ext_fp32_global_atomic_add
339+#error "Incorrectly __opencl_c_ext_fp32_global_atomic_add defined"
340+#endif
341+#ifdef __opencl_c_ext_fp64_global_atomic_add
342+#error "Incorrectly __opencl_c_ext_fp64_global_atomic_add defined"
343+#endif
344+#ifdef __opencl_c_ext_fp16_local_atomic_add
345+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_add defined"
346+#endif
347+#ifdef __opencl_c_ext_fp32_local_atomic_add
348+#error "Incorrectly __opencl_c_ext_fp32_local_atomic_add defined"
349+#endif
350+#ifdef __opencl_c_ext_fp64_local_atomic_add
351+#error "Incorrectly __opencl_c_ext_fp64_local_atomic_add defined"
352+#endif
353+#ifdef __opencl_c_ext_fp16_global_atomic_min_max
354+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_min_max defined"
355+#endif
356+#ifdef __opencl_c_ext_fp32_global_atomic_min_max
357+#error "Incorrectly __opencl_c_ext_fp32_global_atomic_min_max defined"
358+#endif
359+#ifdef __opencl_c_ext_fp64_global_atomic_min_max
360+#error "Incorrectly __opencl_c_ext_fp64_global_atomic_min_max defined"
361+#endif
362+#ifdef __opencl_c_ext_fp16_local_atomic_min_max
363+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_min_max defined"
364+#endif
365+#ifdef __opencl_c_ext_fp32_local_atomic_min_max
366+#error "Incorrectly __opencl_c_ext_fp32_local_atomic_min_max defined"
367+#endif
368+#ifdef __opencl_c_ext_fp64_local_atomic_min_max
369+#error "Incorrectly __opencl_c_ext_fp64_local_atomic_min_max defined"
370+#endif
371+
372+#endif //(defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
373+
374+#endif // defined(__SPIR__)
375--
3762.17.1
377