Skip to content

Commit eb935fe

Browse files
committed
Update cl_ext_float_atomics patch
1. Use cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics to guard the functions using atomic_double type 2. Fix incorrect atomic builtins translation and add related tests Signed-off-by: haonanya <[email protected]>
1 parent faffa34 commit eb935fe

File tree

2 files changed

+339
-193
lines changed

2 files changed

+339
-193
lines changed

patches/clang/0003-OpenCL-Support-cl_ext_float_atomics.patch

Lines changed: 82 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
From 366b6e3dde93e6a11143a9ed812bf2aafdfe4c5b Mon Sep 17 00:00:00 2001
1+
From e601cdf68ecb1a1ce4111a515b22a05845bb07c7 Mon Sep 17 00:00:00 2001
22
From: haonanya <[email protected]>
33
Date: Wed, 28 Jul 2021 14:20:08 +0800
44
Subject: [PATCH] [OpenCL] Support cl_ext_float_atomics
55

66
Signed-off-by: haonanya <[email protected]>
77
---
88
clang/lib/Headers/opencl-c-base.h | 19 +++
9-
clang/lib/Headers/opencl-c.h | 195 ++++++++++++++++++++++++++
10-
clang/test/Headers/opencl-c-header.cl | 72 ++++++++++
11-
3 files changed, 286 insertions(+)
9+
clang/lib/Headers/opencl-c.h | 232 ++++++++++++++++++++++++++
10+
clang/test/Headers/opencl-c-header.cl | 84 ++++++++++
11+
3 files changed, 335 insertions(+)
1212

1313
diff --git a/clang/lib/Headers/opencl-c-base.h b/clang/lib/Headers/opencl-c-base.h
14-
index e8dcd70377e5..c8b6d36029ec 100644
14+
index e8dcd70377e5..d94d64372dbb 100644
1515
--- a/clang/lib/Headers/opencl-c-base.h
1616
+++ b/clang/lib/Headers/opencl-c-base.h
1717
@@ -21,6 +21,25 @@
@@ -27,7 +27,7 @@ index e8dcd70377e5..c8b6d36029ec 100644
2727
+#define __opencl_c_ext_fp16_global_atomic_min_max 1
2828
+#define __opencl_c_ext_fp16_local_atomic_min_max 1
2929
+#endif
30-
+#ifdef __opencl_c_fp64
30+
+#ifdef cl_khr_fp64
3131
+#define __opencl_c_ext_fp64_global_atomic_add 1
3232
+#define __opencl_c_ext_fp64_local_atomic_add 1
3333
+#define __opencl_c_ext_fp64_global_atomic_min_max 1
@@ -41,10 +41,10 @@ index e8dcd70377e5..c8b6d36029ec 100644
4141
#endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
4242

4343
diff --git a/clang/lib/Headers/opencl-c.h b/clang/lib/Headers/opencl-c.h
44-
index ab665628c8e1..6676da858d2a 100644
44+
index ab665628c8e1..501a04f6e82b 100644
4545
--- a/clang/lib/Headers/opencl-c.h
4646
+++ b/clang/lib/Headers/opencl-c.h
47-
@@ -13531,6 +13531,201 @@ intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uint
47+
@@ -13531,6 +13531,238 @@ intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uint
4848
intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uintptr_t opermax, memory_order minder, memory_scope scope);
4949
#endif
5050

@@ -65,7 +65,8 @@ index ab665628c8e1..6676da858d2a 100644
6565
+float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object,
6666
+ float operand, memory_order order,
6767
+ memory_scope scope);
68-
+#endif
68+
+#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max)
69+
+
6970
+#if defined(__opencl_c_ext_fp32_local_atomic_min_max)
7071
+float __ovld atomic_fetch_min(volatile __local atomic_float *object,
7172
+ float operand);
@@ -81,8 +82,9 @@ index ab665628c8e1..6676da858d2a 100644
8182
+float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
8283
+ float operand, memory_order order,
8384
+ memory_scope scope);
84-
+#endif
85-
+#if defined(__opencl_c_ext_fp32_global_atomic_min_max) || \
85+
+#endif // defined(__opencl_c_ext_fp32_local_atomic_min_max)
86+
+
87+
+#if defined(__opencl_c_ext_fp32_global_atomic_min_max) && \
8688
+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
8789
+float __ovld atomic_fetch_min(volatile atomic_float *object, float operand);
8890
+float __ovld atomic_fetch_max(volatile atomic_float *object, float operand);
@@ -96,8 +98,12 @@ index ab665628c8e1..6676da858d2a 100644
9698
+float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
9799
+ float operand, memory_order order,
98100
+ memory_scope scope);
99-
+#endif
100-
+#if defined(__opencl_c_ext_fp64_global_atomic_min_max)
101+
+#endif // defined(__opencl_c_ext_fp32_global_atomic_min_max) && \
102+
+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
103+
+
104+
+#if defined(__opencl_c_ext_fp64_global_atomic_min_max) && \
105+
+ defined(cl_khr_int64_base_atomics) && \
106+
+ defined(cl_khr_int64_extended_atomics)
101107
+double __ovld atomic_fetch_min(volatile __global atomic_double *object,
102108
+ double operand);
103109
+double __ovld atomic_fetch_max(volatile __global atomic_double *object,
@@ -112,8 +118,13 @@ index ab665628c8e1..6676da858d2a 100644
112118
+double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
113119
+ double operand, memory_order order,
114120
+ memory_scope scope);
115-
+#endif
116-
+#if defined(__opencl_c_ext_fp64_local_atomic_min_max)
121+
+#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max) &&
122+
+ // defined(cl_khr_int64_base_atomics) &&
123+
+ // defined(cl_khr_int64_extended_atomics)
124+
+
125+
+#if defined(__opencl_c_ext_fp64_local_atomic_min_max) && \
126+
+ defined(cl_khr_int64_base_atomics) && \
127+
+ defined(cl_khr_int64_extended_atomics)
117128
+double __ovld atomic_fetch_min(volatile __local atomic_double *object,
118129
+ double operand);
119130
+double __ovld atomic_fetch_max(volatile __local atomic_double *object,
@@ -128,9 +139,14 @@ index ab665628c8e1..6676da858d2a 100644
128139
+double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
129140
+ double operand, memory_order order,
130141
+ memory_scope scope);
131-
+#endif
132-
+#if defined(__opencl_c_ext_fp64_global_atomic_min_max) || \
133-
+ defined(__opencl_c_ext_fp64_local_atomic_min_max)
142+
+#endif // defined(__opencl_c_ext_fp64_local_atomic_min_max) &&
143+
+ // defined(cl_khr_int64_base_atomics) &&
144+
+ // defined(cl_khr_int64_extended_atomics)
145+
+
146+
+#if defined(__opencl_c_ext_fp64_global_atomic_min_max) && \
147+
+ defined(__opencl_c_ext_fp64_local_atomic_min_max) && \
148+
+ defined(cl_khr_int64_base_atomics) && \
149+
+ defined(cl_khr_int64_extended_atomics)
134150
+double __ovld atomic_fetch_min(volatile atomic_double *object, double operand);
135151
+double __ovld atomic_fetch_max(volatile atomic_double *object, double operand);
136152
+double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
@@ -143,7 +159,10 @@ index ab665628c8e1..6676da858d2a 100644
143159
+double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
144160
+ double operand, memory_order order,
145161
+ memory_scope scope);
146-
+#endif
162+
+#endif // defined(__opencl_c_ext_fp64_global_atomic_min_max) &&
163+
+ // defined(__opencl_c_ext_fp64_local_atomic_min_max) &&
164+
+ // defined(cl_khr_int64_base_atomics) &&
165+
+ // defined(cl_khr_int64_extended_atomics)
147166
+
148167
+#if defined(__opencl_c_ext_fp32_global_atomic_add)
149168
+float __ovld atomic_fetch_add(volatile __global atomic_float *object,
@@ -160,7 +179,8 @@ index ab665628c8e1..6676da858d2a 100644
160179
+float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
161180
+ float operand, memory_order order,
162181
+ memory_scope scope);
163-
+#endif
182+
+#endif // defined(__opencl_c_ext_fp32_global_atomic_add)
183+
+
164184
+#if defined(__opencl_c_ext_fp32_local_atomic_add)
165185
+float __ovld atomic_fetch_add(volatile __local atomic_float *object,
166186
+ float operand);
@@ -176,8 +196,9 @@ index ab665628c8e1..6676da858d2a 100644
176196
+float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
177197
+ float operand, memory_order order,
178198
+ memory_scope scope);
179-
+#endif
180-
+#if defined(__opencl_c_ext_fp32_global_atomic_add) || \
199+
+#endif // defined(__opencl_c_ext_fp32_local_atomic_add)
200+
+
201+
+#if defined(__opencl_c_ext_fp32_global_atomic_add) && \
181202
+ defined(__opencl_c_ext_fp32_local_atomic_add)
182203
+float __ovld atomic_fetch_add(volatile atomic_float *object, float operand);
183204
+float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand);
@@ -191,9 +212,12 @@ index ab665628c8e1..6676da858d2a 100644
191212
+float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
192213
+ float operand, memory_order order,
193214
+ memory_scope scope);
194-
+#endif
215+
+#endif // defined(__opencl_c_ext_fp32_global_atomic_add) && \
216+
+ defined(__opencl_c_ext_fp32_local_atomic_add)
195217
+
196-
+#if defined(__opencl_c_ext_fp64_global_atomic_add)
218+
+#if defined(__opencl_c_ext_fp64_global_atomic_add) && \
219+
+ defined(cl_khr_int64_base_atomics) && \
220+
+ defined(cl_khr_int64_extended_atomics)
197221
+double __ovld atomic_fetch_add(volatile __global atomic_double *object,
198222
+ double operand);
199223
+double __ovld atomic_fetch_sub(volatile __global atomic_double *object,
@@ -208,8 +232,13 @@ index ab665628c8e1..6676da858d2a 100644
208232
+double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
209233
+ double operand, memory_order order,
210234
+ memory_scope scope);
211-
+#endif
212-
+#if defined(__opencl_c_ext_fp64_local_atomic_add)
235+
+#endif // defined(__opencl_c_ext_fp64_global_atomic_add) &&
236+
+ // defined(cl_khr_int64_base_atomics) &&
237+
+ // defined(cl_khr_int64_extended_atomics)
238+
+
239+
+#if defined(__opencl_c_ext_fp64_local_atomic_add) && \
240+
+ defined(cl_khr_int64_base_atomics) && \
241+
+ defined(cl_khr_int64_extended_atomics)
213242
+double __ovld atomic_fetch_add(volatile __local atomic_double *object,
214243
+ double operand);
215244
+double __ovld atomic_fetch_sub(volatile __local atomic_double *object,
@@ -224,9 +253,14 @@ index ab665628c8e1..6676da858d2a 100644
224253
+double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
225254
+ double operand, memory_order order,
226255
+ memory_scope scope);
227-
+#endif
228-
+#if defined(__opencl_c_ext_fp64_global_atomic_add) || \
229-
+ defined(__opencl_c_ext_fp64_local_atomic_add)
256+
+#endif // defined(__opencl_c_ext_fp64_local_atomic_add) &&
257+
+ // defined(cl_khr_int64_base_atomics) &&
258+
+ // defined(cl_khr_int64_extended_atomics)
259+
+
260+
+#if defined(__opencl_c_ext_fp64_global_atomic_add) && \
261+
+ defined(__opencl_c_ext_fp64_local_atomic_add) && \
262+
+ defined(cl_khr_int64_base_atomics) && \
263+
+ defined(cl_khr_int64_extended_atomics)
230264
+double __ovld atomic_fetch_add(volatile atomic_double *object, double operand);
231265
+double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand);
232266
+double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
@@ -239,18 +273,21 @@ index ab665628c8e1..6676da858d2a 100644
239273
+double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
240274
+ double operand, memory_order order,
241275
+ memory_scope scope);
242-
+#endif
276+
+#endif // defined(__opencl_c_ext_fp64_global_atomic_add) &&
277+
+ // defined(__opencl_c_ext_fp64_local_atomic_add) &&
278+
+ // defined(cl_khr_int64_base_atomics) &&
279+
+ // defined(cl_khr_int64_extended_atomics)
243280
+
244281
+#endif // cl_ext_float_atomics
245282
+
246283
// atomic_store()
247284

248285
void __ovld atomic_store(volatile atomic_int *object, int desired);
249286
diff --git a/clang/test/Headers/opencl-c-header.cl b/clang/test/Headers/opencl-c-header.cl
250-
index 13a3b62481ec..2c02d14f25c3 100644
287+
index 13a3b62481ec..443f682c711a 100644
251288
--- a/clang/test/Headers/opencl-c-header.cl
252289
+++ b/clang/test/Headers/opencl-c-header.cl
253-
@@ -124,6 +124,36 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
290+
@@ -124,6 +124,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
254291
#if cl_khr_subgroup_clustered_reduce != 1
255292
#error "Incorrectly defined cl_khr_subgroup_clustered_reduce"
256293
#endif
@@ -266,28 +303,40 @@ index 13a3b62481ec..2c02d14f25c3 100644
266303
+#if __opencl_c_ext_fp32_global_atomic_add != 1
267304
+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add"
268305
+#endif
306+
+#if __opencl_c_ext_fp64_global_atomic_add != 1
307+
+#error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_add"
308+
+#endif
269309
+#if __opencl_c_ext_fp16_local_atomic_add != 1
270310
+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add"
271311
+#endif
272312
+#if __opencl_c_ext_fp32_local_atomic_add != 1
273313
+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add"
274314
+#endif
315+
+#if __opencl_c_ext_fp64_local_atomic_add != 1
316+
+#error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_add"
317+
+#endif
275318
+#if __opencl_c_ext_fp16_global_atomic_min_max != 1
276319
+#error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max"
277320
+#endif
278321
+#if __opencl_c_ext_fp32_global_atomic_min_max != 1
279322
+#error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max"
280323
+#endif
324+
+#if __opencl_c_ext_fp64_global_atomic_min_max != 1
325+
+#error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_min_max"
326+
+#endif
281327
+#if __opencl_c_ext_fp16_local_atomic_min_max != 1
282328
+#error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max"
283329
+#endif
284330
+#if __opencl_c_ext_fp32_local_atomic_min_max != 1
285331
+#error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_min_max"
332+
+#endif
333+
+#if __opencl_c_ext_fp64_local_atomic_min_max != 1
334+
+#error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_min_max"
286335
+#endif
287336

288337
#else
289338

290-
@@ -148,6 +178,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
339+
@@ -148,6 +190,48 @@ global atomic_int z = ATOMIC_VAR_INIT(99);
291340
#ifdef cl_khr_subgroup_clustered_reduce
292341
#error "Incorrect cl_khr_subgroup_clustered_reduce define"
293342
#endif

0 commit comments

Comments
 (0)