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 | 281 |
1 files changed, 249 insertions, 32 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 index 99dbb81c..c609b08b 100644 --- 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 | |||
@@ -1,20 +1,28 @@ | |||
1 | From f1a24eeb89342186c6c718e02dd394775620799f Mon Sep 17 00:00:00 2001 | 1 | From 85505bdb386a426310c1fb0a845780beeeec4353 Mon Sep 17 00:00:00 2001 |
2 | From: haonanya <haonan.yang@intel.com> | 2 | From: haonanya <haonan.yang@intel.com> |
3 | Date: Wed, 28 Jul 2021 14:20:08 +0800 | 3 | Date: Wed, 9 Feb 2022 09:16:35 +0800 |
4 | Subject: [PATCH 3/3] Support cl_ext_float_atomics | 4 | Subject: [PATCH] Support cl_ext_float_atomics |
5 | 5 | ||
6 | Upstream-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] | 6 | This backports https://reviews.llvm.org/D106343 and https://reviews.llvm.org/D109740 |
7 | 7 | ||
8 | Signed-off-by: haonanya <haonan.yang@intel.com> | 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 | |||
9 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | 15 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> |
16 | |||
10 | --- | 17 | --- |
11 | clang/lib/Headers/opencl-c-base.h | 19 +++ | 18 | clang/lib/Headers/opencl-c-base.h | 19 ++ |
12 | clang/lib/Headers/opencl-c.h | 195 ++++++++++++++++++++++++++ | 19 | clang/lib/Headers/opencl-c.h | 378 ++++++++++++++++++++++++++ |
13 | clang/test/Headers/opencl-c-header.cl | 72 ++++++++++ | 20 | clang/lib/Sema/Sema.cpp | 3 + |
14 | 3 files changed, 286 insertions(+) | 21 | clang/test/Headers/opencl-c-header.cl | 84 ++++++ |
22 | 4 files changed, 484 insertions(+) | ||
15 | 23 | ||
16 | diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h | 24 | diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h |
17 | index e8dcd70377e5..c8b6d36029ec 100644 | 25 | index e8dcd70377e5..d94d64372dbb 100644 |
18 | --- a/clang/lib/Headers/opencl-c-base.h | 26 | --- a/clang/lib/Headers/opencl-c-base.h |
19 | +++ b/clang/lib/Headers/opencl-c-base.h | 27 | +++ b/clang/lib/Headers/opencl-c-base.h |
20 | @@ -21,6 +21,25 @@ | 28 | @@ -21,6 +21,25 @@ |
@@ -30,7 +38,7 @@ index e8dcd70377e5..c8b6d36029ec 100644 | |||
30 | +#define __opencl_c_ext_fp16_global_atomic_min_max 1 | 38 | +#define __opencl_c_ext_fp16_global_atomic_min_max 1 |
31 | +#define __opencl_c_ext_fp16_local_atomic_min_max 1 | 39 | +#define __opencl_c_ext_fp16_local_atomic_min_max 1 |
32 | +#endif | 40 | +#endif |
33 | +#ifdef __opencl_c_fp64 | 41 | +#ifdef cl_khr_fp64 |
34 | +#define __opencl_c_ext_fp64_global_atomic_add 1 | 42 | +#define __opencl_c_ext_fp64_global_atomic_add 1 |
35 | +#define __opencl_c_ext_fp64_local_atomic_add 1 | 43 | +#define __opencl_c_ext_fp64_local_atomic_add 1 |
36 | +#define __opencl_c_ext_fp64_global_atomic_min_max 1 | 44 | +#define __opencl_c_ext_fp64_global_atomic_min_max 1 |
@@ -44,15 +52,128 @@ index e8dcd70377e5..c8b6d36029ec 100644 | |||
44 | #endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) | 52 | #endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) |
45 | 53 | ||
46 | diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h | 54 | diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h |
47 | index ab665628c8e1..6676da858d2a 100644 | 55 | index ab665628c8e1..584db7e81e04 100644 |
48 | --- a/clang/lib/Headers/opencl-c.h | 56 | --- a/clang/lib/Headers/opencl-c.h |
49 | +++ b/clang/lib/Headers/opencl-c.h | 57 | +++ 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 | 58 | @@ -13531,6 +13531,384 @@ 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); | 59 | intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uintptr_t opermax, memory_order minder, memory_scope scope); |
52 | #endif | 60 | #endif |
53 | 61 | ||
62 | +// The functionality added by cl_ext_float_atomics extension | ||
54 | +#if defined(cl_ext_float_atomics) | 63 | +#if defined(cl_ext_float_atomics) |
55 | + | 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 | + | ||
56 | +#if defined(__opencl_c_ext_fp32_global_atomic_min_max) | 177 | +#if defined(__opencl_c_ext_fp32_global_atomic_min_max) |
57 | +float __ovld atomic_fetch_min(volatile __global atomic_float *object, | 178 | +float __ovld atomic_fetch_min(volatile __global atomic_float *object, |
58 | + float operand); | 179 | + float operand); |
@@ -68,7 +189,8 @@ index ab665628c8e1..6676da858d2a 100644 | |||
68 | +float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object, | 189 | +float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object, |
69 | + float operand, memory_order order, | 190 | + float operand, memory_order order, |
70 | + memory_scope scope); | 191 | + memory_scope scope); |
71 | +#endif | 192 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max) |
193 | + | ||
72 | +#if defined(__opencl_c_ext_fp32_local_atomic_min_max) | 194 | +#if defined(__opencl_c_ext_fp32_local_atomic_min_max) |
73 | +float __ovld atomic_fetch_min(volatile __local atomic_float *object, | 195 | +float __ovld atomic_fetch_min(volatile __local atomic_float *object, |
74 | + float operand); | 196 | + float operand); |
@@ -84,8 +206,9 @@ index ab665628c8e1..6676da858d2a 100644 | |||
84 | +float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object, | 206 | +float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object, |
85 | + float operand, memory_order order, | 207 | + float operand, memory_order order, |
86 | + memory_scope scope); | 208 | + memory_scope scope); |
87 | +#endif | 209 | +#endif // defined(__opencl_c_ext_fp32_local_atomic_min_max) |
88 | +#if defined(__opencl_c_ext_fp32_global_atomic_min_max) || \ | 210 | + |
211 | +#if defined(__opencl_c_ext_fp32_global_atomic_min_max) && \ | ||
89 | + defined(__opencl_c_ext_fp32_local_atomic_min_max) | 212 | + defined(__opencl_c_ext_fp32_local_atomic_min_max) |
90 | +float __ovld atomic_fetch_min(volatile atomic_float *object, float operand); | 213 | +float __ovld atomic_fetch_min(volatile atomic_float *object, float operand); |
91 | +float __ovld atomic_fetch_max(volatile atomic_float *object, float operand); | 214 | +float __ovld atomic_fetch_max(volatile atomic_float *object, float operand); |
@@ -99,7 +222,10 @@ index ab665628c8e1..6676da858d2a 100644 | |||
99 | +float __ovld atomic_fetch_max_explicit(volatile atomic_float *object, | 222 | +float __ovld atomic_fetch_max_explicit(volatile atomic_float *object, |
100 | + float operand, memory_order order, | 223 | + float operand, memory_order order, |
101 | + memory_scope scope); | 224 | + memory_scope scope); |
102 | +#endif | 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) | ||
103 | +#if defined(__opencl_c_ext_fp64_global_atomic_min_max) | 229 | +#if defined(__opencl_c_ext_fp64_global_atomic_min_max) |
104 | +double __ovld atomic_fetch_min(volatile __global atomic_double *object, | 230 | +double __ovld atomic_fetch_min(volatile __global atomic_double *object, |
105 | + double operand); | 231 | + double operand); |
@@ -115,7 +241,8 @@ index ab665628c8e1..6676da858d2a 100644 | |||
115 | +double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object, | 241 | +double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object, |
116 | + double operand, memory_order order, | 242 | + double operand, memory_order order, |
117 | + memory_scope scope); | 243 | + memory_scope scope); |
118 | +#endif | 244 | +#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max) |
245 | + | ||
119 | +#if defined(__opencl_c_ext_fp64_local_atomic_min_max) | 246 | +#if defined(__opencl_c_ext_fp64_local_atomic_min_max) |
120 | +double __ovld atomic_fetch_min(volatile __local atomic_double *object, | 247 | +double __ovld atomic_fetch_min(volatile __local atomic_double *object, |
121 | + double operand); | 248 | + double operand); |
@@ -131,8 +258,9 @@ index ab665628c8e1..6676da858d2a 100644 | |||
131 | +double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object, | 258 | +double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object, |
132 | + double operand, memory_order order, | 259 | + double operand, memory_order order, |
133 | + memory_scope scope); | 260 | + memory_scope scope); |
134 | +#endif | 261 | +#endif // defined(__opencl_c_ext_fp64_local_atomic_min_max) |
135 | +#if defined(__opencl_c_ext_fp64_global_atomic_min_max) || \ | 262 | + |
263 | +#if defined(__opencl_c_ext_fp64_global_atomic_min_max) && \ | ||
136 | + defined(__opencl_c_ext_fp64_local_atomic_min_max) | 264 | + defined(__opencl_c_ext_fp64_local_atomic_min_max) |
137 | +double __ovld atomic_fetch_min(volatile atomic_double *object, double operand); | 265 | +double __ovld atomic_fetch_min(volatile atomic_double *object, double operand); |
138 | +double __ovld atomic_fetch_max(volatile atomic_double *object, double operand); | 266 | +double __ovld atomic_fetch_max(volatile atomic_double *object, double operand); |
@@ -146,7 +274,61 @@ index ab665628c8e1..6676da858d2a 100644 | |||
146 | +double __ovld atomic_fetch_max_explicit(volatile atomic_double *object, | 274 | +double __ovld atomic_fetch_max_explicit(volatile atomic_double *object, |
147 | + double operand, memory_order order, | 275 | + double operand, memory_order order, |
148 | + memory_scope scope); | 276 | + memory_scope scope); |
149 | +#endif | 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) | ||
150 | + | 332 | + |
151 | +#if defined(__opencl_c_ext_fp32_global_atomic_add) | 333 | +#if defined(__opencl_c_ext_fp32_global_atomic_add) |
152 | +float __ovld atomic_fetch_add(volatile __global atomic_float *object, | 334 | +float __ovld atomic_fetch_add(volatile __global atomic_float *object, |
@@ -163,7 +345,8 @@ index ab665628c8e1..6676da858d2a 100644 | |||
163 | +float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object, | 345 | +float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object, |
164 | + float operand, memory_order order, | 346 | + float operand, memory_order order, |
165 | + memory_scope scope); | 347 | + memory_scope scope); |
166 | +#endif | 348 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_add) |
349 | + | ||
167 | +#if defined(__opencl_c_ext_fp32_local_atomic_add) | 350 | +#if defined(__opencl_c_ext_fp32_local_atomic_add) |
168 | +float __ovld atomic_fetch_add(volatile __local atomic_float *object, | 351 | +float __ovld atomic_fetch_add(volatile __local atomic_float *object, |
169 | + float operand); | 352 | + float operand); |
@@ -179,8 +362,9 @@ index ab665628c8e1..6676da858d2a 100644 | |||
179 | +float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object, | 362 | +float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object, |
180 | + float operand, memory_order order, | 363 | + float operand, memory_order order, |
181 | + memory_scope scope); | 364 | + memory_scope scope); |
182 | +#endif | 365 | +#endif // defined(__opencl_c_ext_fp32_local_atomic_add) |
183 | +#if defined(__opencl_c_ext_fp32_global_atomic_add) || \ | 366 | + |
367 | +#if defined(__opencl_c_ext_fp32_global_atomic_add) && \ | ||
184 | + defined(__opencl_c_ext_fp32_local_atomic_add) | 368 | + defined(__opencl_c_ext_fp32_local_atomic_add) |
185 | +float __ovld atomic_fetch_add(volatile atomic_float *object, float operand); | 369 | +float __ovld atomic_fetch_add(volatile atomic_float *object, float operand); |
186 | +float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand); | 370 | +float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand); |
@@ -194,8 +378,10 @@ index ab665628c8e1..6676da858d2a 100644 | |||
194 | +float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object, | 378 | +float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object, |
195 | + float operand, memory_order order, | 379 | + float operand, memory_order order, |
196 | + memory_scope scope); | 380 | + memory_scope scope); |
197 | +#endif | 381 | +#endif // defined(__opencl_c_ext_fp32_global_atomic_add) && \ |
382 | + defined(__opencl_c_ext_fp32_local_atomic_add) | ||
198 | + | 383 | + |
384 | +#if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics) | ||
199 | +#if defined(__opencl_c_ext_fp64_global_atomic_add) | 385 | +#if defined(__opencl_c_ext_fp64_global_atomic_add) |
200 | +double __ovld atomic_fetch_add(volatile __global atomic_double *object, | 386 | +double __ovld atomic_fetch_add(volatile __global atomic_double *object, |
201 | + double operand); | 387 | + double operand); |
@@ -211,7 +397,8 @@ index ab665628c8e1..6676da858d2a 100644 | |||
211 | +double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object, | 397 | +double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object, |
212 | + double operand, memory_order order, | 398 | + double operand, memory_order order, |
213 | + memory_scope scope); | 399 | + memory_scope scope); |
214 | +#endif | 400 | +#endif // defined(__opencl_c_ext_fp64_global_atomic_add) |
401 | + | ||
215 | +#if defined(__opencl_c_ext_fp64_local_atomic_add) | 402 | +#if defined(__opencl_c_ext_fp64_local_atomic_add) |
216 | +double __ovld atomic_fetch_add(volatile __local atomic_double *object, | 403 | +double __ovld atomic_fetch_add(volatile __local atomic_double *object, |
217 | + double operand); | 404 | + double operand); |
@@ -227,8 +414,9 @@ index ab665628c8e1..6676da858d2a 100644 | |||
227 | +double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object, | 414 | +double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object, |
228 | + double operand, memory_order order, | 415 | + double operand, memory_order order, |
229 | + memory_scope scope); | 416 | + memory_scope scope); |
230 | +#endif | 417 | +#endif // defined(__opencl_c_ext_fp64_local_atomic_add) |
231 | +#if defined(__opencl_c_ext_fp64_global_atomic_add) || \ | 418 | + |
419 | +#if defined(__opencl_c_ext_fp64_global_atomic_add) && \ | ||
232 | + defined(__opencl_c_ext_fp64_local_atomic_add) | 420 | + defined(__opencl_c_ext_fp64_local_atomic_add) |
233 | +double __ovld atomic_fetch_add(volatile atomic_double *object, double operand); | 421 | +double __ovld atomic_fetch_add(volatile atomic_double *object, double operand); |
234 | +double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand); | 422 | +double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand); |
@@ -242,18 +430,35 @@ index ab665628c8e1..6676da858d2a 100644 | |||
242 | +double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object, | 430 | +double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object, |
243 | + double operand, memory_order order, | 431 | + double operand, memory_order order, |
244 | + memory_scope scope); | 432 | + memory_scope scope); |
245 | +#endif | 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) | ||
246 | + | 437 | + |
247 | +#endif // cl_ext_float_atomics | 438 | +#endif // cl_ext_float_atomics |
248 | + | 439 | + |
249 | // atomic_store() | 440 | // atomic_store() |
250 | 441 | ||
251 | void __ovld atomic_store(volatile atomic_int *object, int desired); | 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); | ||
252 | diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl | 457 | diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl |
253 | index 13a3b62481ec..2c02d14f25c3 100644 | 458 | index 13a3b62481ec..443f682c711a 100644 |
254 | --- a/clang/test/Headers/opencl-c-header.cl | 459 | --- a/clang/test/Headers/opencl-c-header.cl |
255 | +++ b/clang/test/Headers/opencl-c-header.cl | 460 | +++ b/clang/test/Headers/opencl-c-header.cl |
256 | @@ -124,6 +124,36 @@ global atomic_int z = ATOMIC_VAR_INIT(99); | 461 | @@ -124,6 +124,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99); |
257 | #if cl_khr_subgroup_clustered_reduce != 1 | 462 | #if cl_khr_subgroup_clustered_reduce != 1 |
258 | #error "Incorrectly defined cl_khr_subgroup_clustered_reduce" | 463 | #error "Incorrectly defined cl_khr_subgroup_clustered_reduce" |
259 | #endif | 464 | #endif |
@@ -269,28 +474,40 @@ index 13a3b62481ec..2c02d14f25c3 100644 | |||
269 | +#if __opencl_c_ext_fp32_global_atomic_add != 1 | 474 | +#if __opencl_c_ext_fp32_global_atomic_add != 1 |
270 | +#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add" | 475 | +#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add" |
271 | +#endif | 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 | ||
272 | +#if __opencl_c_ext_fp16_local_atomic_add != 1 | 480 | +#if __opencl_c_ext_fp16_local_atomic_add != 1 |
273 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add" | 481 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add" |
274 | +#endif | 482 | +#endif |
275 | +#if __opencl_c_ext_fp32_local_atomic_add != 1 | 483 | +#if __opencl_c_ext_fp32_local_atomic_add != 1 |
276 | +#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add" | 484 | +#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add" |
277 | +#endif | 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 | ||
278 | +#if __opencl_c_ext_fp16_global_atomic_min_max != 1 | 489 | +#if __opencl_c_ext_fp16_global_atomic_min_max != 1 |
279 | +#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max" | 490 | +#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max" |
280 | +#endif | 491 | +#endif |
281 | +#if __opencl_c_ext_fp32_global_atomic_min_max != 1 | 492 | +#if __opencl_c_ext_fp32_global_atomic_min_max != 1 |
282 | +#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max" | 493 | +#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max" |
283 | +#endif | 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 | ||
284 | +#if __opencl_c_ext_fp16_local_atomic_min_max != 1 | 498 | +#if __opencl_c_ext_fp16_local_atomic_min_max != 1 |
285 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max" | 499 | +#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max" |
286 | +#endif | 500 | +#endif |
287 | +#if __opencl_c_ext_fp32_local_atomic_min_max != 1 | 501 | +#if __opencl_c_ext_fp32_local_atomic_min_max != 1 |
288 | +#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max" | 502 | +#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max" |
289 | +#endif | 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 | ||
290 | 507 | ||
291 | #else | 508 | #else |
292 | 509 | ||
293 | @@ -148,6 +178,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99); | 510 | @@ -148,6 +190,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99); |
294 | #ifdef cl_khr_subgroup_clustered_reduce | 511 | #ifdef cl_khr_subgroup_clustered_reduce |
295 | #error "Incorrect cl_khr_subgroup_clustered_reduce define" | 512 | #error "Incorrect cl_khr_subgroup_clustered_reduce define" |
296 | #endif | 513 | #endif |
@@ -340,5 +557,5 @@ index 13a3b62481ec..2c02d14f25c3 100644 | |||
340 | #endif //(defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) | 557 | #endif //(defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200) |
341 | 558 | ||
342 | -- | 559 | -- |
343 | 2.17.1 | 560 | 2.29.2 |
344 | 561 | ||