1
- From 366b6e3dde93e6a11143a9ed812bf2aafdfe4c5b Mon Sep 17 00:00:00 2001
1
+ From e601cdf68ecb1a1ce4111a515b22a05845bb07c7 Mon Sep 17 00:00:00 2001
2
2
From: haonanya <
[email protected] >
3
3
Date: Wed, 28 Jul 2021 14:20:08 +0800
4
4
Subject: [PATCH] [OpenCL] Support cl_ext_float_atomics
5
5
6
6
Signed-off-by: haonanya <
[email protected] >
7
7
---
8
8
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(+)
12
12
13
13
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
15
15
--- a/clang/lib/Headers/opencl-c-base.h
16
16
+++ b/clang/lib/Headers/opencl-c-base.h
17
17
@@ -21,6 +21,25 @@
@@ -27,7 +27,7 @@ index e8dcd70377e5..c8b6d36029ec 100644
27
27
+ #define __opencl_c_ext_fp16_global_atomic_min_max 1
28
28
+ #define __opencl_c_ext_fp16_local_atomic_min_max 1
29
29
+ #endif
30
- + #ifdef __opencl_c_fp64
30
+ + #ifdef cl_khr_fp64
31
31
+ #define __opencl_c_ext_fp64_global_atomic_add 1
32
32
+ #define __opencl_c_ext_fp64_local_atomic_add 1
33
33
+ #define __opencl_c_ext_fp64_global_atomic_min_max 1
@@ -41,10 +41,10 @@ index e8dcd70377e5..c8b6d36029ec 100644
41
41
#endif // (defined(__OPENCL_CPP_VERSION__) || __OPENCL_C_VERSION__ >= 200)
42
42
43
43
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
45
45
--- a/clang/lib/Headers/opencl-c.h
46
46
+++ 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
48
48
intptr_t __ovld atomic_fetch_max_explicit(volatile atomic_intptr_t *object, uintptr_t opermax, memory_order minder, memory_scope scope);
49
49
#endif
50
50
@@ -65,7 +65,8 @@ index ab665628c8e1..6676da858d2a 100644
65
65
+ float __ovld atomic_fetch_max_explicit(volatile __global atomic_float *object,
66
66
+ float operand, memory_order order,
67
67
+ memory_scope scope);
68
- + #endif
68
+ + #endif // defined(__opencl_c_ext_fp32_global_atomic_min_max)
69
+ +
69
70
+ #if defined(__opencl_c_ext_fp32_local_atomic_min_max)
70
71
+ float __ovld atomic_fetch_min(volatile __local atomic_float *object,
71
72
+ float operand);
@@ -81,8 +82,9 @@ index ab665628c8e1..6676da858d2a 100644
81
82
+ float __ovld atomic_fetch_max_explicit(volatile __local atomic_float *object,
82
83
+ float operand, memory_order order,
83
84
+ 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) && \
86
88
+ defined(__opencl_c_ext_fp32_local_atomic_min_max)
87
89
+ float __ovld atomic_fetch_min(volatile atomic_float *object, float operand);
88
90
+ float __ovld atomic_fetch_max(volatile atomic_float *object, float operand);
@@ -96,8 +98,12 @@ index ab665628c8e1..6676da858d2a 100644
96
98
+ float __ovld atomic_fetch_max_explicit(volatile atomic_float *object,
97
99
+ float operand, memory_order order,
98
100
+ 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)
101
107
+ double __ovld atomic_fetch_min(volatile __global atomic_double *object,
102
108
+ double operand);
103
109
+ double __ovld atomic_fetch_max(volatile __global atomic_double *object,
@@ -112,8 +118,13 @@ index ab665628c8e1..6676da858d2a 100644
112
118
+ double __ovld atomic_fetch_max_explicit(volatile __global atomic_double *object,
113
119
+ double operand, memory_order order,
114
120
+ 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)
117
128
+ double __ovld atomic_fetch_min(volatile __local atomic_double *object,
118
129
+ double operand);
119
130
+ double __ovld atomic_fetch_max(volatile __local atomic_double *object,
@@ -128,9 +139,14 @@ index ab665628c8e1..6676da858d2a 100644
128
139
+ double __ovld atomic_fetch_max_explicit(volatile __local atomic_double *object,
129
140
+ double operand, memory_order order,
130
141
+ 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)
134
150
+ double __ovld atomic_fetch_min(volatile atomic_double *object, double operand);
135
151
+ double __ovld atomic_fetch_max(volatile atomic_double *object, double operand);
136
152
+ double __ovld atomic_fetch_min_explicit(volatile atomic_double *object,
@@ -143,7 +159,10 @@ index ab665628c8e1..6676da858d2a 100644
143
159
+ double __ovld atomic_fetch_max_explicit(volatile atomic_double *object,
144
160
+ double operand, memory_order order,
145
161
+ 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)
147
166
+
148
167
+ #if defined(__opencl_c_ext_fp32_global_atomic_add)
149
168
+ float __ovld atomic_fetch_add(volatile __global atomic_float *object,
@@ -160,7 +179,8 @@ index ab665628c8e1..6676da858d2a 100644
160
179
+ float __ovld atomic_fetch_sub_explicit(volatile __global atomic_float *object,
161
180
+ float operand, memory_order order,
162
181
+ memory_scope scope);
163
- + #endif
182
+ + #endif // defined(__opencl_c_ext_fp32_global_atomic_add)
183
+ +
164
184
+ #if defined(__opencl_c_ext_fp32_local_atomic_add)
165
185
+ float __ovld atomic_fetch_add(volatile __local atomic_float *object,
166
186
+ float operand);
@@ -176,8 +196,9 @@ index ab665628c8e1..6676da858d2a 100644
176
196
+ float __ovld atomic_fetch_sub_explicit(volatile __local atomic_float *object,
177
197
+ float operand, memory_order order,
178
198
+ 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) && \
181
202
+ defined(__opencl_c_ext_fp32_local_atomic_add)
182
203
+ float __ovld atomic_fetch_add(volatile atomic_float *object, float operand);
183
204
+ float __ovld atomic_fetch_sub(volatile atomic_float *object, float operand);
@@ -191,9 +212,12 @@ index ab665628c8e1..6676da858d2a 100644
191
212
+ float __ovld atomic_fetch_sub_explicit(volatile atomic_float *object,
192
213
+ float operand, memory_order order,
193
214
+ memory_scope scope);
194
- + #endif
215
+ + #endif // defined(__opencl_c_ext_fp32_global_atomic_add) && \
216
+ + defined(__opencl_c_ext_fp32_local_atomic_add)
195
217
+
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)
197
221
+ double __ovld atomic_fetch_add(volatile __global atomic_double *object,
198
222
+ double operand);
199
223
+ double __ovld atomic_fetch_sub(volatile __global atomic_double *object,
@@ -208,8 +232,13 @@ index ab665628c8e1..6676da858d2a 100644
208
232
+ double __ovld atomic_fetch_sub_explicit(volatile __global atomic_double *object,
209
233
+ double operand, memory_order order,
210
234
+ 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)
213
242
+ double __ovld atomic_fetch_add(volatile __local atomic_double *object,
214
243
+ double operand);
215
244
+ double __ovld atomic_fetch_sub(volatile __local atomic_double *object,
@@ -224,9 +253,14 @@ index ab665628c8e1..6676da858d2a 100644
224
253
+ double __ovld atomic_fetch_sub_explicit(volatile __local atomic_double *object,
225
254
+ double operand, memory_order order,
226
255
+ 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)
230
264
+ double __ovld atomic_fetch_add(volatile atomic_double *object, double operand);
231
265
+ double __ovld atomic_fetch_sub(volatile atomic_double *object, double operand);
232
266
+ double __ovld atomic_fetch_add_explicit(volatile atomic_double *object,
@@ -239,18 +273,21 @@ index ab665628c8e1..6676da858d2a 100644
239
273
+ double __ovld atomic_fetch_sub_explicit(volatile atomic_double *object,
240
274
+ double operand, memory_order order,
241
275
+ 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)
243
280
+
244
281
+ #endif // cl_ext_float_atomics
245
282
+
246
283
// atomic_store()
247
284
248
285
void __ovld atomic_store(volatile atomic_int *object, int desired);
249
286
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
251
288
--- a/clang/test/Headers/opencl-c-header.cl
252
289
+++ 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);
254
291
#if cl_khr_subgroup_clustered_reduce != 1
255
292
#error "Incorrectly defined cl_khr_subgroup_clustered_reduce"
256
293
#endif
@@ -266,28 +303,40 @@ index 13a3b62481ec..2c02d14f25c3 100644
266
303
+ #if __opencl_c_ext_fp32_global_atomic_add != 1
267
304
+ #error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_add"
268
305
+ #endif
306
+ + #if __opencl_c_ext_fp64_global_atomic_add != 1
307
+ + #error "Incorrectly defined __opencl_c_ext_fp64_global_atomic_add"
308
+ + #endif
269
309
+ #if __opencl_c_ext_fp16_local_atomic_add != 1
270
310
+ #error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_add"
271
311
+ #endif
272
312
+ #if __opencl_c_ext_fp32_local_atomic_add != 1
273
313
+ #error "Incorrectly defined __opencl_c_ext_fp32_local_atomic_add"
274
314
+ #endif
315
+ + #if __opencl_c_ext_fp64_local_atomic_add != 1
316
+ + #error "Incorrectly defined __opencl_c_ext_fp64_local_atomic_add"
317
+ + #endif
275
318
+ #if __opencl_c_ext_fp16_global_atomic_min_max != 1
276
319
+ #error "Incorrectly defined __opencl_c_ext_fp16_global_atomic_min_max"
277
320
+ #endif
278
321
+ #if __opencl_c_ext_fp32_global_atomic_min_max != 1
279
322
+ #error "Incorrectly defined __opencl_c_ext_fp32_global_atomic_min_max"
280
323
+ #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
281
327
+ #if __opencl_c_ext_fp16_local_atomic_min_max != 1
282
328
+ #error "Incorrectly defined __opencl_c_ext_fp16_local_atomic_min_max"
283
329
+ #endif
284
330
+ #if __opencl_c_ext_fp32_local_atomic_min_max != 1
285
331
+ #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"
286
335
+ #endif
287
336
288
337
#else
289
338
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);
291
340
#ifdef cl_khr_subgroup_clustered_reduce
292
341
#error "Incorrect cl_khr_subgroup_clustered_reduce define"
293
342
#endif
0 commit comments