summaryrefslogtreecommitdiffstats
path: root/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm11-0006-OpenCL-support-cl_ext_float_atomics.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm11-0006-OpenCL-support-cl_ext_float_atomics.patch')
-rw-r--r--dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm11-0006-OpenCL-support-cl_ext_float_atomics.patch353
1 files changed, 0 insertions, 353 deletions
diff --git a/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm11-0006-OpenCL-support-cl_ext_float_atomics.patch b/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm11-0006-OpenCL-support-cl_ext_float_atomics.patch
deleted file mode 100644
index 0178fd43..00000000
--- a/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm11-0006-OpenCL-support-cl_ext_float_atomics.patch
+++ /dev/null
@@ -1,353 +0,0 @@
1From a1b924d76cdacfa3f9dbb79a9e3edddcd75f61ca Mon Sep 17 00:00:00 2001
2From: Naveen Saini <naveen.kumar.saini@intel.com>
3Date: Thu, 19 Aug 2021 16:06:33 +0800
4Subject: [PATCH 6/6] [OpenCL] support cl_ext_float_atomics
5
6Upstream-Status: Backport [Taken from opencl-clang patches; https://github.com/intel/opencl-clang/blob/ocl-open-110/patches/clang/0004-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 | 195 ++++++++++++++++++++++++++
13 clang/test/Headers/opencl-c-header.cl | 85 +++++++++++
14 3 files changed, 305 insertions(+)
15
16diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h
17index afa900ab24d9..9a3ee8529acf 100644
18--- a/clang/lib/Headers/opencl-c-base.h
19+++ b/clang/lib/Headers/opencl-c-base.h
20@@ -62,6 +62,31 @@
21 #endif
22 #endif // defined(__OPENCL_CPP_VERSION__) || (__OPENCL_C_VERSION__ == CL_VERSION_2_0)
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
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 // built-in scalar data types:
50
51 /**
52diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h
53index 67d900eb1c3d..bda0f5c6df80 100644
54--- a/clang/lib/Headers/opencl-c.h
55+++ b/clang/lib/Headers/opencl-c.h
56@@ -14354,6 +14354,201 @@ 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
78+#if defined(__opencl_c_ext_fp32_local_atomic_min_max)
79+float __ovld atomic_fetch_min(volatile __local atomic_float *object,
80+ float operand);
81+float __ovld atomic_fetch_max(volatile __local atomic_float *object,
82+ float operand);
83+float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object,
84+ float operand, memory_order order);
85+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
86+ float operand, memory_order order);
87+float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object,
88+ float operand, memory_order order,
89+ memory_scope scope);
90+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
91+ float operand, memory_order order,
92+ memory_scope scope);
93+#endif
94+#if defined(__opencl_c_ext_fp32_global_atomic_min_max) || \
95+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
96+float __ovld atomic_fetch_min(volatile atomic_float *object, float operand);
97+float __ovld atomic_fetch_max(volatile atomic_float *object, float operand);
98+float __ovld atomic_fetch_min_explicit(volatile atomic_float *object,
99+ float operand, memory_order order);
100+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
101+ float operand, memory_order order);
102+float __ovld atomic_fetch_min_explicit(volatile atomic_float *object,
103+ float operand, memory_order order,
104+ memory_scope scope);
105+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
106+ float operand, memory_order order,
107+ memory_scope scope);
108+#endif
109+#if defined(__opencl_c_ext_fp64_global_atomic_min_max)
110+double __ovld atomic_fetch_min(volatile __global atomic_double *object,
111+ double operand);
112+double __ovld atomic_fetch_max(volatile __global atomic_double *object,
113+ double operand);
114+double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object,
115+ double operand, memory_order order);
116+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
117+ double operand, memory_order order);
118+double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object,
119+ double operand, memory_order order,
120+ memory_scope scope);
121+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
122+ double operand, memory_order order,
123+ memory_scope scope);
124+#endif
125+#if defined(__opencl_c_ext_fp64_local_atomic_min_max)
126+double __ovld atomic_fetch_min(volatile __local atomic_double *object,
127+ double operand);
128+double __ovld atomic_fetch_max(volatile __local atomic_double *object,
129+ double operand);
130+double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object,
131+ double operand, memory_order order);
132+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
133+ double operand, memory_order order);
134+double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object,
135+ double operand, memory_order order,
136+ memory_scope scope);
137+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
138+ double operand, memory_order order,
139+ memory_scope scope);
140+#endif
141+#if defined(__opencl_c_ext_fp64_global_atomic_min_max) || \
142+ defined(__opencl_c_ext_fp64_local_atomic_min_max)
143+double __ovld atomic_fetch_min(volatile atomic_double *object, double operand);
144+double __ovld atomic_fetch_max(volatile atomic_double *object, double operand);
145+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
146+ double operand, memory_order order);
147+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
148+ double operand, memory_order order);
149+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
150+ double operand, memory_order order,
151+ memory_scope scope);
152+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
153+ double operand, memory_order order,
154+ memory_scope scope);
155+#endif
156+
157+#if defined(__opencl_c_ext_fp32_global_atomic_add)
158+float __ovld atomic_fetch_add(volatile __global atomic_float *object,
159+ float operand);
160+float __ovld atomic_fetch_sub(volatile __global atomic_float *object,
161+ float operand);
162+float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object,
163+ float operand, memory_order order);
164+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
165+ float operand, memory_order order);
166+float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object,
167+ float operand, memory_order order,
168+ memory_scope scope);
169+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
170+ float operand, memory_order order,
171+ memory_scope scope);
172+#endif
173+#if defined(__opencl_c_ext_fp32_local_atomic_add)
174+float __ovld atomic_fetch_add(volatile __local atomic_float *object,
175+ float operand);
176+float __ovld atomic_fetch_sub(volatile __local atomic_float *object,
177+ float operand);
178+float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object,
179+ float operand, memory_order order);
180+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
181+ float operand, memory_order order);
182+float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object,
183+ float operand, memory_order order,
184+ memory_scope scope);
185+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
186+ float operand, memory_order order,
187+ memory_scope scope);
188+#endif
189+#if defined(__opencl_c_ext_fp32_global_atomic_add) || \
190+ defined(__opencl_c_ext_fp32_local_atomic_add)
191+float __ovld atomic_fetch_add(volatile atomic_float *object, float operand);
192+float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand);
193+float __ovld atomic_fetch_add_explicit(volatile atomic_float *object,
194+ float operand, memory_order order);
195+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
196+ float operand, memory_order order);
197+float __ovld atomic_fetch_add_explicit(volatile atomic_float *object,
198+ float operand, memory_order order,
199+ memory_scope scope);
200+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
201+ float operand, memory_order order,
202+ memory_scope scope);
203+#endif
204+
205+#if defined(__opencl_c_ext_fp64_global_atomic_add)
206+double __ovld atomic_fetch_add(volatile __global atomic_double *object,
207+ double operand);
208+double __ovld atomic_fetch_sub(volatile __global atomic_double *object,
209+ double operand);
210+double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object,
211+ double operand, memory_order order);
212+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
213+ double operand, memory_order order);
214+double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object,
215+ double operand, memory_order order,
216+ memory_scope scope);
217+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
218+ double operand, memory_order order,
219+ memory_scope scope);
220+#endif
221+#if defined(__opencl_c_ext_fp64_local_atomic_add)
222+double __ovld atomic_fetch_add(volatile __local atomic_double *object,
223+ double operand);
224+double __ovld atomic_fetch_sub(volatile __local atomic_double *object,
225+ double operand);
226+double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object,
227+ double operand, memory_order order);
228+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
229+ double operand, memory_order order);
230+double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object,
231+ double operand, memory_order order,
232+ memory_scope scope);
233+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
234+ double operand, memory_order order,
235+ memory_scope scope);
236+#endif
237+#if defined(__opencl_c_ext_fp64_global_atomic_add) || \
238+ defined(__opencl_c_ext_fp64_local_atomic_add)
239+double __ovld atomic_fetch_add(volatile atomic_double *object, double operand);
240+double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand);
241+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
242+ double operand, memory_order order);
243+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
244+ double operand, memory_order order);
245+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
246+ double operand, memory_order order,
247+ memory_scope scope);
248+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
249+ double operand, memory_order order,
250+ memory_scope scope);
251+#endif
252+
253+#endif // cl_ext_float_atomics
254+
255 // atomic_store()
256
257 #if defined(__opencl_c_atomic_scope_device) && \
258diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl
259index 2716076acdcf..6b3eca84e8b9 100644
260--- a/clang/test/Headers/opencl-c-header.cl
261+++ b/clang/test/Headers/opencl-c-header.cl
262@@ -98,3 +98,88 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
263 #pragma OPENCL EXTENSION cl_intel_planar_yuv : enable
264
265 // CHECK-MOD: Reading modules
266+
267+// For SPIR all extensions are supported.
268+#if defined(__SPIR__)
269+
270+#if (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
271+
272+#if __opencl_c_ext_fp16_global_atomic_load_store != 1
273+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_load_store"
274+#endif
275+#if __opencl_c_ext_fp16_local_atomic_load_store != 1
276+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_load_store"
277+#endif
278+#if __opencl_c_ext_fp16_global_atomic_add != 1
279+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_add"
280+#endif
281+#if __opencl_c_ext_fp32_global_atomic_add != 1
282+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add"
283+#endif
284+#if __opencl_c_ext_fp16_local_atomic_add != 1
285+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add"
286+#endif
287+#if __opencl_c_ext_fp32_local_atomic_add != 1
288+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add"
289+#endif
290+#if __opencl_c_ext_fp16_global_atomic_min_max != 1
291+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max"
292+#endif
293+#if __opencl_c_ext_fp32_global_atomic_min_max != 1
294+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max"
295+#endif
296+#if __opencl_c_ext_fp16_local_atomic_min_max != 1
297+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max"
298+#endif
299+#if __opencl_c_ext_fp32_local_atomic_min_max != 1
300+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max"
301+#endif
302+
303+#else
304+#ifdef __opencl_c_ext_fp16_global_atomic_load_store
305+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_load_store defined"
306+#endif
307+#ifdef __opencl_c_ext_fp16_local_atomic_load_store
308+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_load_store defined"
309+#endif
310+#ifdef __opencl_c_ext_fp16_global_atomic_add
311+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_add defined"
312+#endif
313+#ifdef __opencl_c_ext_fp32_global_atomic_add
314+#error "Incorrectly __opencl_c_ext_fp32_global_atomic_add defined"
315+#endif
316+#ifdef __opencl_c_ext_fp64_global_atomic_add
317+#error "Incorrectly __opencl_c_ext_fp64_global_atomic_add defined"
318+#endif
319+#ifdef __opencl_c_ext_fp16_local_atomic_add
320+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_add defined"
321+#endif
322+#ifdef __opencl_c_ext_fp32_local_atomic_add
323+#error "Incorrectly __opencl_c_ext_fp32_local_atomic_add defined"
324+#endif
325+#ifdef __opencl_c_ext_fp64_local_atomic_add
326+#error "Incorrectly __opencl_c_ext_fp64_local_atomic_add defined"
327+#endif
328+#ifdef __opencl_c_ext_fp16_global_atomic_min_max
329+#error "Incorrectly __opencl_c_ext_fp16_global_atomic_min_max defined"
330+#endif
331+#ifdef __opencl_c_ext_fp32_global_atomic_min_max
332+#error "Incorrectly __opencl_c_ext_fp32_global_atomic_min_max defined"
333+#endif
334+#ifdef __opencl_c_ext_fp64_global_atomic_min_max
335+#error "Incorrectly __opencl_c_ext_fp64_global_atomic_min_max defined"
336+#endif
337+#ifdef __opencl_c_ext_fp16_local_atomic_min_max
338+#error "Incorrectly __opencl_c_ext_fp16_local_atomic_min_max defined"
339+#endif
340+#ifdef __opencl_c_ext_fp32_local_atomic_min_max
341+#error "Incorrectly __opencl_c_ext_fp32_local_atomic_min_max defined"
342+#endif
343+#ifdef __opencl_c_ext_fp64_local_atomic_min_max
344+#error "Incorrectly __opencl_c_ext_fp64_local_atomic_min_max defined"
345+#endif
346+
347+#endif //(defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
348+
349+#endif // defined(__SPIR__)
350+
351--
3522.17.1
353