diff options
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.patch | 561 |
1 files changed, 0 insertions, 561 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 c609b08b..00000000 --- a/dynamic-layers/clang-layer/recipes-devtools/clang/files/llvm12-0003-Support-cl_ext_float_atomics.patch +++ /dev/null | |||
@@ -1,561 +0,0 @@ | |||
1 | From 85505bdb386a426310c1fb0a845780beeeec4353 Mon Sep 17 00:00:00 2001 | ||
2 | From: haonanya <haonan.yang@intel.com> | ||
3 | Date: Wed, 9 Feb 2022 09:16:35 +0800 | ||
4 | Subject: [PATCH] Support cl_ext_float_atomics | ||
5 | |||
6 | This backports https://reviews.llvm.org/D106343 and https://reviews.llvm.org/D109740 | ||
7 | |||
8 | Signed-off-by: haonanya <haonan.yang@intel.com> | ||
9 | |||
10 | Upstream-Status: Backport | ||
11 | |||
12 | https://github.com/llvm/llvm-project/commit/d353d1c50112a1cb315eccdab18ce7bd1563cd06 | ||
13 | https://github.com/llvm/llvm-project/commit/544d89e847d42ce8856296752b0fb279aa89aace | ||
14 | |||
15 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | ||
16 | |||
17 | --- | ||
18 | clang/lib/Headers/opencl-c-base.h | 19 ++ | ||
19 | clang/lib/Headers/opencl-c.h | 378 ++++++++++++++++++++++++++ | ||
20 | clang/lib/Sema/Sema.cpp | 3 + | ||
21 | clang/test/Headers/opencl-c-header.cl | 84 ++++++ | ||
22 | 4 files changed, 484 insertions(+) | ||
23 | |||
24 | diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h | ||
25 | index e8dcd70377e5..d94d64372dbb 100644 | ||
26 | --- a/clang/lib/Headers/opencl-c-base.h | ||
27 | +++ b/clang/lib/Headers/opencl-c-base.h | ||
28 | @@ -21,6 +21,25 @@ | ||
29 | #define cl_khr_subgroup_shuffle 1 | ||
30 | #define cl_khr_subgroup_shuffle_relative 1 | ||
31 | #define cl_khr_subgroup_clustered_reduce 1 | ||
32 | +#define cl_ext_float_atomics | ||
33 | +#ifdef cl_khr_fp16 | ||
34 | +#define __opencl_c_ext_fp16_global_atomic_load_store 1 | ||
35 | +#define __opencl_c_ext_fp16_local_atomic_load_store 1 | ||
36 | +#define __opencl_c_ext_fp16_global_atomic_add 1 | ||
37 | +#define __opencl_c_ext_fp16_local_atomic_add 1 | ||
38 | +#define __opencl_c_ext_fp16_global_atomic_min_max 1 | ||
39 | +#define __opencl_c_ext_fp16_local_atomic_min_max 1 | ||
40 | +#endif | ||
41 | +#ifdef cl_khr_fp64 | ||
42 | +#define __opencl_c_ext_fp64_global_atomic_add 1 | ||
43 | +#define __opencl_c_ext_fp64_local_atomic_add 1 | ||
44 | +#define __opencl_c_ext_fp64_global_atomic_min_max 1 | ||
45 | +#define __opencl_c_ext_fp64_local_atomic_min_max 1 | ||
46 | +#endif | ||
47 | +#define __opencl_c_ext_fp32_global_atomic_add 1 | ||
48 | +#define __opencl_c_ext_fp32_local_atomic_add 1 | ||
49 | +#define __opencl_c_ext_fp32_global_atomic_min_max 1 | ||
50 | +#define __opencl_c_ext_fp32_local_atomic_min_max 1 | ||
51 | #endif // defined(__SPIR__) | ||
52 | #endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) | ||
53 | |||
54 | diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h | ||
55 | index ab665628c8e1..584db7e81e04 100644 | ||
56 | --- a/clang/lib/Headers/opencl-c.h | ||
57 | +++ b/clang/lib/Headers/opencl-c.h | ||
58 | @@ -13531,6 +13531,384 @@ intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uint | ||
59 | intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uintptr_t opermax, memory_order minder, memory_scope scope); | ||
60 | #endif | ||
61 | |||
62 | +// The functionality added by cl_ext_float_atomics extension | ||
63 | +#if defined(cl_ext_float_atomics) | ||
64 | + | ||
65 | +#if defined(__opencl_c_ext_fp16_global_atomic_load_store) | ||
66 | +void __ovld atomic_store(volatile __global atomic_half *object, half operand); | ||
67 | +void __ovld atomic_store_explicit(volatile __global atomic_half *object, | ||
68 | + half operand, memory_order order); | ||
69 | +void __ovld atomic_store_explicit(volatile __global atomic_half *object, | ||
70 | + half operand, memory_order order, | ||
71 | + memory_scope scope); | ||
72 | +half __ovld atomic_load(volatile __global atomic_half *object); | ||
73 | +half __ovld atomic_load_explicit(volatile __global atomic_half *object, | ||
74 | + memory_order order); | ||
75 | +half __ovld atomic_load_explicit(volatile __global atomic_half *object, | ||
76 | + memory_order order, memory_scope scope); | ||
77 | +half __ovld atomic_exchange(volatile __global atomic_half *object, | ||
78 | + half operand); | ||
79 | +half __ovld atomic_exchange_explicit(volatile __global atomic_half *object, | ||
80 | + half operand, memory_order order); | ||
81 | +half __ovld atomic_exchange_explicit(volatile __global atomic_half *object, | ||
82 | + half operand, memory_order order, | ||
83 | + memory_scope scope); | ||
84 | +#endif // defined(__opencl_c_ext_fp16_global_atomic_load_store) | ||
85 | + | ||
86 | +#if defined(__opencl_c_ext_fp16_local_atomic_load_store) | ||
87 | +void __ovld atomic_store(volatile __local atomic_half *object, half operand); | ||
88 | +void __ovld atomic_store_explicit(volatile __local atomic_half *object, | ||
89 | + half operand, memory_order order); | ||
90 | +void __ovld atomic_store_explicit(volatile __local atomic_half *object, | ||
91 | + half operand, memory_order order, | ||
92 | + memory_scope scope); | ||
93 | +half __ovld atomic_load(volatile __local atomic_half *object); | ||
94 | +half __ovld atomic_load_explicit(volatile __local atomic_half *object, | ||
95 | + memory_order order); | ||
96 | +half __ovld atomic_load_explicit(volatile __local atomic_half *object, | ||
97 | + memory_order order, memory_scope scope); | ||
98 | +half __ovld atomic_exchange(volatile __local atomic_half *object, half operand); | ||
99 | +half __ovld atomic_exchange_explicit(volatile __local atomic_half *object, | ||
100 | + half operand, memory_order order); | ||
101 | +half __ovld atomic_exchange_explicit(volatile __local atomic_half *object, | ||
102 | + half operand, memory_order order, | ||
103 | + memory_scope scope); | ||
104 | +#endif // defined(__opencl_c_ext_fp16_local_atomic_load_store) | ||
105 | + | ||
106 | +#if defined(__opencl_c_ext_fp16_global_atomic_load_store) && \ | ||
107 | + defined(__opencl_c_ext_fp16_local_atomic_load_store) | ||
108 | +void __ovld atomic_store(volatile atomic_half *object, half operand); | ||
109 | +void __ovld atomic_store_explicit(volatile atomic_half *object, half operand, | ||
110 | + memory_order order); | ||
111 | +void __ovld atomic_store_explicit(volatile atomic_half *object, half operand, | ||
112 | + memory_order order, memory_scope scope); | ||
113 | +half __ovld atomic_load(volatile atomic_half *object); | ||
114 | +half __ovld atomic_load_explicit(volatile atomic_half *object, | ||
115 | + memory_order order); | ||
116 | +half __ovld atomic_load_explicit(volatile atomic_half *object, | ||
117 | + memory_order order, memory_scope scope); | ||
118 | +half __ovld atomic_exchange(volatile atomic_half *object, half operand); | ||
119 | +half __ovld atomic_exchange_explicit(volatile atomic_half *object, half operand, | ||
120 | + memory_order order); | ||
121 | +half __ovld atomic_exchange_explicit(volatile atomic_half *object, half operand, | ||
122 | + memory_order order, memory_scope scope); | ||
123 | +#endif // defined(__opencl_c_ext_fp16_global_atomic_load_store) && | ||
124 | + // defined(__opencl_c_ext_fp16_local_atomic_load_store) | ||
125 | + | ||
126 | +#if defined(__opencl_c_ext_fp16_global_atomic_min_max) | ||
127 | +half __ovld atomic_fetch_min(volatile __global atomic_half *object, | ||
128 | + half operand); | ||
129 | +half __ovld atomic_fetch_max(volatile __global atomic_half *object, | ||
130 | + half operand); | ||
131 | +half __ovld atomic_fetch_min_explicit(volatile __global atomic_half *object, | ||
132 | + half operand, memory_order order); | ||
133 | +half __ovld atomic_fetch_max_explicit(volatile __global atomic_half *object, | ||
134 | + half operand, memory_order order); | ||
135 | +half __ovld atomic_fetch_min_explicit(volatile __global atomic_half *object, | ||
136 | + half operand, memory_order order, | ||
137 | + memory_scope scope); | ||
138 | +half __ovld atomic_fetch_max_explicit(volatile __global atomic_half *object, | ||
139 | + half operand, memory_order order, | ||
140 | + memory_scope scope); | ||
141 | +#endif // defined(__opencl_c_ext_fp16_global_atomic_min_max) | ||
142 | + | ||
143 | +#if defined(__opencl_c_ext_fp16_local_atomic_min_max) | ||
144 | +half __ovld atomic_fetch_min(volatile __local atomic_half *object, | ||
145 | + half operand); | ||
146 | +half __ovld atomic_fetch_max(volatile __local atomic_half *object, | ||
147 | + half operand); | ||
148 | +half __ovld atomic_fetch_min_explicit(volatile __local atomic_half *object, | ||
149 | + half operand, memory_order order); | ||
150 | +half __ovld atomic_fetch_max_explicit(volatile __local atomic_half *object, | ||
151 | + half operand, memory_order order); | ||
152 | +half __ovld atomic_fetch_min_explicit(volatile __local atomic_half *object, | ||
153 | + half operand, memory_order order, | ||
154 | + memory_scope scope); | ||
155 | +half __ovld atomic_fetch_max_explicit(volatile __local atomic_half *object, | ||
156 | + half operand, memory_order order, | ||
157 | + memory_scope scope); | ||
158 | +#endif // defined(__opencl_c_ext_fp16_local_atomic_min_max) | ||
159 | + | ||
160 | +#if defined(__opencl_c_ext_fp16_global_atomic_min_max) && \ | ||
161 | + defined(__opencl_c_ext_fp16_local_atomic_min_max) | ||
162 | +half __ovld atomic_fetch_min(volatile atomic_half *object, half operand); | ||
163 | +half __ovld atomic_fetch_max(volatile atomic_half *object, half operand); | ||
164 | +half __ovld atomic_fetch_min_explicit(volatile atomic_half *object, | ||
165 | + half operand, memory_order order); | ||
166 | +half __ovld atomic_fetch_max_explicit(volatile atomic_half *object, | ||
167 | + half operand, memory_order order); | ||
168 | +half __ovld atomic_fetch_min_explicit(volatile atomic_half *object, | ||
169 | + half operand, memory_order order, | ||
170 | + memory_scope scope); | ||
171 | +half __ovld atomic_fetch_max_explicit(volatile atomic_half *object, | ||
172 | + half operand, memory_order order, | ||
173 | + memory_scope scope); | ||
174 | +#endif // defined(__opencl_c_ext_fp16_global_atomic_min_max) && \ | ||
175 | + defined(__opencl_c_ext_fp16_local_atomic_min_max) | ||
176 | + | ||
177 | +#if defined(__opencl_c_ext_fp32_global_atomic_min_max) | ||
178 | +float __ovld atomic_fetch_min(volatile __global atomic_float *object, | ||
179 | + float operand); | ||
180 | +float __ovld atomic_fetch_max(volatile __global atomic_float *object, | ||
181 | + float operand); | ||
182 | +float __ovld atomic_fetch_min_explicit(volatile __global atomic_float *object, | ||
183 | + float operand, memory_order order); | ||
184 | +float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object, | ||
185 | + float operand, memory_order order); | ||
186 | +float __ovld atomic_fetch_min_explicit(volatile __global atomic_float *object, | ||
187 | + float operand, memory_order order, | ||
188 | + memory_scope scope); | ||
189 | +float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object, | ||
190 | + float operand, memory_order order, | ||
191 | + memory_scope scope); | ||
192 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max) | ||
193 | + | ||
194 | +#if defined(__opencl_c_ext_fp32_local_atomic_min_max) | ||
195 | +float __ovld atomic_fetch_min(volatile __local atomic_float *object, | ||
196 | + float operand); | ||
197 | +float __ovld atomic_fetch_max(volatile __local atomic_float *object, | ||
198 | + float operand); | ||
199 | +float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object, | ||
200 | + float operand, memory_order order); | ||
201 | +float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object, | ||
202 | + float operand, memory_order order); | ||
203 | +float __ovld atomic_fetch_min_explicit(volatile __local atomic_float *object, | ||
204 | + float operand, memory_order order, | ||
205 | + memory_scope scope); | ||
206 | +float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object, | ||
207 | + float operand, memory_order order, | ||
208 | + memory_scope scope); | ||
209 | +#endif // defined(__opencl_c_ext_fp32_local_atomic_min_max) | ||
210 | + | ||
211 | +#if defined(__opencl_c_ext_fp32_global_atomic_min_max) && \ | ||
212 | + defined(__opencl_c_ext_fp32_local_atomic_min_max) | ||
213 | +float __ovld atomic_fetch_min(volatile atomic_float *object, float operand); | ||
214 | +float __ovld atomic_fetch_max(volatile atomic_float *object, float operand); | ||
215 | +float __ovld atomic_fetch_min_explicit(volatile atomic_float *object, | ||
216 | + float operand, memory_order order); | ||
217 | +float __ovld atomic_fetch_max_explicit(volatile atomic_float *object, | ||
218 | + float operand, memory_order order); | ||
219 | +float __ovld atomic_fetch_min_explicit(volatile atomic_float *object, | ||
220 | + float operand, memory_order order, | ||
221 | + memory_scope scope); | ||
222 | +float __ovld atomic_fetch_max_explicit(volatile atomic_float *object, | ||
223 | + float operand, memory_order order, | ||
224 | + memory_scope scope); | ||
225 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max) && \ | ||
226 | + defined(__opencl_c_ext_fp32_local_atomic_min_max) | ||
227 | + | ||
228 | +#if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics) | ||
229 | +#if defined(__opencl_c_ext_fp64_global_atomic_min_max) | ||
230 | +double __ovld atomic_fetch_min(volatile __global atomic_double *object, | ||
231 | + double operand); | ||
232 | +double __ovld atomic_fetch_max(volatile __global atomic_double *object, | ||
233 | + double operand); | ||
234 | +double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object, | ||
235 | + double operand, memory_order order); | ||
236 | +double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object, | ||
237 | + double operand, memory_order order); | ||
238 | +double __ovld atomic_fetch_min_explicit(volatile __global atomic_double *object, | ||
239 | + double operand, memory_order order, | ||
240 | + memory_scope scope); | ||
241 | +double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object, | ||
242 | + double operand, memory_order order, | ||
243 | + memory_scope scope); | ||
244 | +#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max) | ||
245 | + | ||
246 | +#if defined(__opencl_c_ext_fp64_local_atomic_min_max) | ||
247 | +double __ovld atomic_fetch_min(volatile __local atomic_double *object, | ||
248 | + double operand); | ||
249 | +double __ovld atomic_fetch_max(volatile __local atomic_double *object, | ||
250 | + double operand); | ||
251 | +double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object, | ||
252 | + double operand, memory_order order); | ||
253 | +double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object, | ||
254 | + double operand, memory_order order); | ||
255 | +double __ovld atomic_fetch_min_explicit(volatile __local atomic_double *object, | ||
256 | + double operand, memory_order order, | ||
257 | + memory_scope scope); | ||
258 | +double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object, | ||
259 | + double operand, memory_order order, | ||
260 | + memory_scope scope); | ||
261 | +#endif // defined(__opencl_c_ext_fp64_local_atomic_min_max) | ||
262 | + | ||
263 | +#if defined(__opencl_c_ext_fp64_global_atomic_min_max) && \ | ||
264 | + defined(__opencl_c_ext_fp64_local_atomic_min_max) | ||
265 | +double __ovld atomic_fetch_min(volatile atomic_double *object, double operand); | ||
266 | +double __ovld atomic_fetch_max(volatile atomic_double *object, double operand); | ||
267 | +double __ovld atomic_fetch_min_explicit(volatile atomic_double *object, | ||
268 | + double operand, memory_order order); | ||
269 | +double __ovld atomic_fetch_max_explicit(volatile atomic_double *object, | ||
270 | + double operand, memory_order order); | ||
271 | +double __ovld atomic_fetch_min_explicit(volatile atomic_double *object, | ||
272 | + double operand, memory_order order, | ||
273 | + memory_scope scope); | ||
274 | +double __ovld atomic_fetch_max_explicit(volatile atomic_double *object, | ||
275 | + double operand, memory_order order, | ||
276 | + memory_scope scope); | ||
277 | +#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max) && \ | ||
278 | + defined(__opencl_c_ext_fp64_local_atomic_min_max) | ||
279 | +#endif // defined(cl_khr_int64_base_atomics) && | ||
280 | + // defined(cl_khr_int64_extended_atomics) | ||
281 | + | ||
282 | +#if defined(__opencl_c_ext_fp16_global_atomic_add) | ||
283 | +half __ovld atomic_fetch_add(volatile __global atomic_half *object, | ||
284 | + half operand); | ||
285 | +half __ovld atomic_fetch_sub(volatile __global atomic_half *object, | ||
286 | + half operand); | ||
287 | +half __ovld atomic_fetch_add_explicit(volatile __global atomic_half *object, | ||
288 | + half operand, memory_order order); | ||
289 | +half __ovld atomic_fetch_sub_explicit(volatile __global atomic_half *object, | ||
290 | + half operand, memory_order order); | ||
291 | +half __ovld atomic_fetch_add_explicit(volatile __global atomic_half *object, | ||
292 | + half operand, memory_order order, | ||
293 | + memory_scope scope); | ||
294 | +half __ovld atomic_fetch_sub_explicit(volatile __global atomic_half *object, | ||
295 | + half operand, memory_order order, | ||
296 | + memory_scope scope); | ||
297 | +#endif // defined(__opencl_c_ext_fp16_global_atomic_add) | ||
298 | + | ||
299 | +#if defined(__opencl_c_ext_fp16_local_atomic_add) | ||
300 | +half __ovld atomic_fetch_add(volatile __local atomic_half *object, | ||
301 | + half operand); | ||
302 | +half __ovld atomic_fetch_sub(volatile __local atomic_half *object, | ||
303 | + half operand); | ||
304 | +half __ovld atomic_fetch_add_explicit(volatile __local atomic_half *object, | ||
305 | + half operand, memory_order order); | ||
306 | +half __ovld atomic_fetch_sub_explicit(volatile __local atomic_half *object, | ||
307 | + half operand, memory_order order); | ||
308 | +half __ovld atomic_fetch_add_explicit(volatile __local atomic_half *object, | ||
309 | + half operand, memory_order order, | ||
310 | + memory_scope scope); | ||
311 | +half __ovld atomic_fetch_sub_explicit(volatile __local atomic_half *object, | ||
312 | + half operand, memory_order order, | ||
313 | + memory_scope scope); | ||
314 | +#endif // defined(__opencl_c_ext_fp16_local_atomic_add) | ||
315 | + | ||
316 | +#if defined(__opencl_c_ext_fp16_global_atomic_add) && \ | ||
317 | + defined(__opencl_c_ext_fp16_local_atomic_add) | ||
318 | +half __ovld atomic_fetch_add(volatile atomic_half *object, half operand); | ||
319 | +half __ovld atomic_fetch_sub(volatile atomic_half *object, half operand); | ||
320 | +half __ovld atomic_fetch_add_explicit(volatile atomic_half *object, | ||
321 | + half operand, memory_order order); | ||
322 | +half __ovld atomic_fetch_sub_explicit(volatile atomic_half *object, | ||
323 | + half operand, memory_order order); | ||
324 | +half __ovld atomic_fetch_add_explicit(volatile atomic_half *object, | ||
325 | + half operand, memory_order order, | ||
326 | + memory_scope scope); | ||
327 | +half __ovld atomic_fetch_sub_explicit(volatile atomic_half *object, | ||
328 | + half operand, memory_order order, | ||
329 | + memory_scope scope); | ||
330 | +#endif // defined(__opencl_c_ext_fp16_global_atomic_add) && \ | ||
331 | + defined(__opencl_c_ext_fp16_local_atomic_add) | ||
332 | + | ||
333 | +#if defined(__opencl_c_ext_fp32_global_atomic_add) | ||
334 | +float __ovld atomic_fetch_add(volatile __global atomic_float *object, | ||
335 | + float operand); | ||
336 | +float __ovld atomic_fetch_sub(volatile __global atomic_float *object, | ||
337 | + float operand); | ||
338 | +float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object, | ||
339 | + float operand, memory_order order); | ||
340 | +float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object, | ||
341 | + float operand, memory_order order); | ||
342 | +float __ovld atomic_fetch_add_explicit(volatile __global atomic_float *object, | ||
343 | + float operand, memory_order order, | ||
344 | + memory_scope scope); | ||
345 | +float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object, | ||
346 | + float operand, memory_order order, | ||
347 | + memory_scope scope); | ||
348 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_add) | ||
349 | + | ||
350 | +#if defined(__opencl_c_ext_fp32_local_atomic_add) | ||
351 | +float __ovld atomic_fetch_add(volatile __local atomic_float *object, | ||
352 | + float operand); | ||
353 | +float __ovld atomic_fetch_sub(volatile __local atomic_float *object, | ||
354 | + float operand); | ||
355 | +float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object, | ||
356 | + float operand, memory_order order); | ||
357 | +float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object, | ||
358 | + float operand, memory_order order); | ||
359 | +float __ovld atomic_fetch_add_explicit(volatile __local atomic_float *object, | ||
360 | + float operand, memory_order order, | ||
361 | + memory_scope scope); | ||
362 | +float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object, | ||
363 | + float operand, memory_order order, | ||
364 | + memory_scope scope); | ||
365 | +#endif // defined(__opencl_c_ext_fp32_local_atomic_add) | ||
366 | + | ||
367 | +#if defined(__opencl_c_ext_fp32_global_atomic_add) && \ | ||
368 | + defined(__opencl_c_ext_fp32_local_atomic_add) | ||
369 | +float __ovld atomic_fetch_add(volatile atomic_float *object, float operand); | ||
370 | +float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand); | ||
371 | +float __ovld atomic_fetch_add_explicit(volatile atomic_float *object, | ||
372 | + float operand, memory_order order); | ||
373 | +float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object, | ||
374 | + float operand, memory_order order); | ||
375 | +float __ovld atomic_fetch_add_explicit(volatile atomic_float *object, | ||
376 | + float operand, memory_order order, | ||
377 | + memory_scope scope); | ||
378 | +float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object, | ||
379 | + float operand, memory_order order, | ||
380 | + memory_scope scope); | ||
381 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_add) && \ | ||
382 | + defined(__opencl_c_ext_fp32_local_atomic_add) | ||
383 | + | ||
384 | +#if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics) | ||
385 | +#if defined(__opencl_c_ext_fp64_global_atomic_add) | ||
386 | +double __ovld atomic_fetch_add(volatile __global atomic_double *object, | ||
387 | + double operand); | ||
388 | +double __ovld atomic_fetch_sub(volatile __global atomic_double *object, | ||
389 | + double operand); | ||
390 | +double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object, | ||
391 | + double operand, memory_order order); | ||
392 | +double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object, | ||
393 | + double operand, memory_order order); | ||
394 | +double __ovld atomic_fetch_add_explicit(volatile __global atomic_double *object, | ||
395 | + double operand, memory_order order, | ||
396 | + memory_scope scope); | ||
397 | +double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object, | ||
398 | + double operand, memory_order order, | ||
399 | + memory_scope scope); | ||
400 | +#endif // defined(__opencl_c_ext_fp64_global_atomic_add) | ||
401 | + | ||
402 | +#if defined(__opencl_c_ext_fp64_local_atomic_add) | ||
403 | +double __ovld atomic_fetch_add(volatile __local atomic_double *object, | ||
404 | + double operand); | ||
405 | +double __ovld atomic_fetch_sub(volatile __local atomic_double *object, | ||
406 | + double operand); | ||
407 | +double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object, | ||
408 | + double operand, memory_order order); | ||
409 | +double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object, | ||
410 | + double operand, memory_order order); | ||
411 | +double __ovld atomic_fetch_add_explicit(volatile __local atomic_double *object, | ||
412 | + double operand, memory_order order, | ||
413 | + memory_scope scope); | ||
414 | +double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object, | ||
415 | + double operand, memory_order order, | ||
416 | + memory_scope scope); | ||
417 | +#endif // defined(__opencl_c_ext_fp64_local_atomic_add) | ||
418 | + | ||
419 | +#if defined(__opencl_c_ext_fp64_global_atomic_add) && \ | ||
420 | + defined(__opencl_c_ext_fp64_local_atomic_add) | ||
421 | +double __ovld atomic_fetch_add(volatile atomic_double *object, double operand); | ||
422 | +double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand); | ||
423 | +double __ovld atomic_fetch_add_explicit(volatile atomic_double *object, | ||
424 | + double operand, memory_order order); | ||
425 | +double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object, | ||
426 | + double operand, memory_order order); | ||
427 | +double __ovld atomic_fetch_add_explicit(volatile atomic_double *object, | ||
428 | + double operand, memory_order order, | ||
429 | + memory_scope scope); | ||
430 | +double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object, | ||
431 | + double operand, memory_order order, | ||
432 | + memory_scope scope); | ||
433 | +#endif // defined(__opencl_c_ext_fp64_global_atomic_add) && \ | ||
434 | + defined(__opencl_c_ext_fp64_local_atomic_add) | ||
435 | +#endif // defined(cl_khr_int64_base_atomics) && | ||
436 | + // defined(cl_khr_int64_extended_atomics) | ||
437 | + | ||
438 | +#endif // cl_ext_float_atomics | ||
439 | + | ||
440 | // atomic_store() | ||
441 | |||
442 | void __ovld atomic_store(volatile atomic_int *object, int desired); | ||
443 | diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp | ||
444 | index 450f9c020f7f..a91291c7af38 100644 | ||
445 | --- a/clang/lib/Sema/Sema.cpp | ||
446 | +++ b/clang/lib/Sema/Sema.cpp | ||
447 | @@ -313,6 +313,9 @@ void Sema::Initialize() { | ||
448 | addImplicitTypedef("atomic_long", AtomicLongT); | ||
449 | auto AtomicULongT = Context.getAtomicType(Context.UnsignedLongTy); | ||
450 | addImplicitTypedef("atomic_ulong", AtomicULongT); | ||
451 | + auto AtomicHalfT = Context.getAtomicType(Context.HalfTy); | ||
452 | + addImplicitTypedef("atomic_half", AtomicHalfT); | ||
453 | + setOpenCLExtensionForType(AtomicHalfT, "cl_khr_fp16"); | ||
454 | addImplicitTypedef("atomic_float", | ||
455 | Context.getAtomicType(Context.FloatTy)); | ||
456 | auto AtomicDoubleT = Context.getAtomicType(Context.DoubleTy); | ||
457 | diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl | ||
458 | index 13a3b62481ec..443f682c711a 100644 | ||
459 | --- a/clang/test/Headers/opencl-c-header.cl | ||
460 | +++ b/clang/test/Headers/opencl-c-header.cl | ||
461 | @@ -124,6 +124,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99); | ||
462 | #if cl_khr_subgroup_clustered_reduce != 1 | ||
463 | #error "Incorrectly defined cl_khr_subgroup_clustered_reduce" | ||
464 | #endif | ||
465 | +#if __opencl_c_ext_fp16_global_atomic_load_store != 1 | ||
466 | +#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_load_store" | ||
467 | +#endif | ||
468 | +#if __opencl_c_ext_fp16_local_atomic_load_store != 1 | ||
469 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_load_store" | ||
470 | +#endif | ||
471 | +#if __opencl_c_ext_fp16_global_atomic_add != 1 | ||
472 | +#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_add" | ||
473 | +#endif | ||
474 | +#if __opencl_c_ext_fp32_global_atomic_add != 1 | ||
475 | +#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add" | ||
476 | +#endif | ||
477 | +#if __opencl_c_ext_fp64_global_atomic_add != 1 | ||
478 | +#error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_add" | ||
479 | +#endif | ||
480 | +#if __opencl_c_ext_fp16_local_atomic_add != 1 | ||
481 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add" | ||
482 | +#endif | ||
483 | +#if __opencl_c_ext_fp32_local_atomic_add != 1 | ||
484 | +#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add" | ||
485 | +#endif | ||
486 | +#if __opencl_c_ext_fp64_local_atomic_add != 1 | ||
487 | +#error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_add" | ||
488 | +#endif | ||
489 | +#if __opencl_c_ext_fp16_global_atomic_min_max != 1 | ||
490 | +#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max" | ||
491 | +#endif | ||
492 | +#if __opencl_c_ext_fp32_global_atomic_min_max != 1 | ||
493 | +#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max" | ||
494 | +#endif | ||
495 | +#if __opencl_c_ext_fp64_global_atomic_min_max != 1 | ||
496 | +#error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_min_max" | ||
497 | +#endif | ||
498 | +#if __opencl_c_ext_fp16_local_atomic_min_max != 1 | ||
499 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max" | ||
500 | +#endif | ||
501 | +#if __opencl_c_ext_fp32_local_atomic_min_max != 1 | ||
502 | +#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max" | ||
503 | +#endif | ||
504 | +#if __opencl_c_ext_fp64_local_atomic_min_max != 1 | ||
505 | +#error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_min_max" | ||
506 | +#endif | ||
507 | |||
508 | #else | ||
509 | |||
510 | @@ -148,6 +190,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99); | ||
511 | #ifdef cl_khr_subgroup_clustered_reduce | ||
512 | #error "Incorrect cl_khr_subgroup_clustered_reduce define" | ||
513 | #endif | ||
514 | +#ifdef __opencl_c_ext_fp16_global_atomic_load_store | ||
515 | +#error "Incorrectly __opencl_c_ext_fp16_global_atomic_load_store defined" | ||
516 | +#endif | ||
517 | +#ifdef __opencl_c_ext_fp16_local_atomic_load_store | ||
518 | +#error "Incorrectly __opencl_c_ext_fp16_local_atomic_load_store defined" | ||
519 | +#endif | ||
520 | +#ifdef __opencl_c_ext_fp16_global_atomic_add | ||
521 | +#error "Incorrectly __opencl_c_ext_fp16_global_atomic_add defined" | ||
522 | +#endif | ||
523 | +#ifdef __opencl_c_ext_fp32_global_atomic_add | ||
524 | +#error "Incorrectly __opencl_c_ext_fp32_global_atomic_add defined" | ||
525 | +#endif | ||
526 | +#ifdef __opencl_c_ext_fp64_global_atomic_add | ||
527 | +#error "Incorrectly __opencl_c_ext_fp64_global_atomic_add defined" | ||
528 | +#endif | ||
529 | +#ifdef __opencl_c_ext_fp16_local_atomic_add | ||
530 | +#error "Incorrectly __opencl_c_ext_fp16_local_atomic_add defined" | ||
531 | +#endif | ||
532 | +#ifdef __opencl_c_ext_fp32_local_atomic_add | ||
533 | +#error "Incorrectly __opencl_c_ext_fp32_local_atomic_add defined" | ||
534 | +#endif | ||
535 | +#ifdef __opencl_c_ext_fp64_local_atomic_add | ||
536 | +#error "Incorrectly __opencl_c_ext_fp64_local_atomic_add defined" | ||
537 | +#endif | ||
538 | +#ifdef __opencl_c_ext_fp16_global_atomic_min_max | ||
539 | +#error "Incorrectly __opencl_c_ext_fp16_global_atomic_min_max defined" | ||
540 | +#endif | ||
541 | +#ifdef __opencl_c_ext_fp32_global_atomic_min_max | ||
542 | +#error "Incorrectly __opencl_c_ext_fp32_global_atomic_min_max defined" | ||
543 | +#endif | ||
544 | +#ifdef __opencl_c_ext_fp64_global_atomic_min_max | ||
545 | +#error "Incorrectly __opencl_c_ext_fp64_global_atomic_min_max defined" | ||
546 | +#endif | ||
547 | +#ifdef __opencl_c_ext_fp16_local_atomic_min_max | ||
548 | +#error "Incorrectly __opencl_c_ext_fp16_local_atomic_min_max defined" | ||
549 | +#endif | ||
550 | +#ifdef __opencl_c_ext_fp32_local_atomic_min_max | ||
551 | +#error "Incorrectly __opencl_c_ext_fp32_local_atomic_min_max defined" | ||
552 | +#endif | ||
553 | +#ifdef __opencl_c_ext_fp64_local_atomic_min_max | ||
554 | +#error "Incorrectly __opencl_c_ext_fp64_local_atomic_min_max defined" | ||
555 | +#endif | ||
556 | |||
557 | #endif //(defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) | ||
558 | |||
559 | -- | ||
560 | 2.29.2 | ||
561 | |||