@@ -176,6 +176,98 @@ float test15() {
176
176
return __builtin_asinf (1 .0F );
177
177
}
178
178
179
+ // CHECK: void test_atomic_loads(int *ptr, int *ret, int memorder) {
180
+ // CHECK: __atomic_load_n(ptr, memorder);
181
+ // CHECK: __atomic_load(ptr, ret, memorder);
182
+ // CHECK: }
183
+ void test_atomic_loads (int *ptr, int *ret, int memorder) {
184
+ __atomic_load_n (ptr, memorder);
185
+ __atomic_load (ptr, ret, memorder);
186
+ }
187
+
188
+ // CHECK: void test_atomic_stores(int *ptr, int val, int memorder) {
189
+ // CHECK: __atomic_store_n(ptr, val, memorder);
190
+ // CHECK: __atomic_store(ptr, &val, memorder);
191
+ // CHECK: }
192
+ void test_atomic_stores (int *ptr, int val, int memorder) {
193
+ __atomic_store_n (ptr, val, memorder);
194
+ __atomic_store (ptr, &val, memorder);
195
+ }
196
+
197
+ // CHECK: void test_atomic_exchanges(int *ptr, int val, int *ret, int memorder) {
198
+ // CHECK: __atomic_exchange_n(ptr, val, memorder);
199
+ // CHECK: __atomic_exchange(ptr, &val, ret, memorder);
200
+ // CHECK: }
201
+ void test_atomic_exchanges (int *ptr, int val, int *ret, int memorder) {
202
+ __atomic_exchange_n (ptr, val, memorder);
203
+ __atomic_exchange (ptr, &val, ret, memorder);
204
+ }
205
+
206
+ // CHECK: void test_atomic_cmpxchgs(int *ptr, int *expected, int desired, bool weak, int success_memorder, int failure_memorder) {
207
+ // CHECK: __atomic_compare_exchange_n(ptr, expected, desired, weak, success_memorder, failure_memorder);
208
+ // CHECK: __atomic_compare_exchange(ptr, expected, &desired, weak, success_memorder, failure_memorder);
209
+ // CHECK: }
210
+ void test_atomic_cmpxchgs (int *ptr, int *expected, int desired, bool weak, int success_memorder, int failure_memorder) {
211
+ __atomic_compare_exchange_n (ptr, expected, desired, weak, success_memorder, failure_memorder);
212
+ __atomic_compare_exchange (ptr, expected, &desired, weak, success_memorder, failure_memorder);
213
+ }
214
+
215
+ // CHECK: void test_atomic_fetch_ops(int *ptr, int val, int memorder) {
216
+ // CHECK: __atomic_add_fetch(ptr, val, memorder);
217
+ // CHECK: __atomic_sub_fetch(ptr, val, memorder);
218
+ // CHECK: __atomic_and_fetch(ptr, val, memorder);
219
+ // CHECK: __atomic_xor_fetch(ptr, val, memorder);
220
+ // CHECK: __atomic_or_fetch(ptr, val, memorder);
221
+ // CHECK: __atomic_nand_fetch(ptr, val, memorder);
222
+ // CHECK: __atomic_fetch_add(ptr, val, memorder);
223
+ // CHECK: __atomic_fetch_sub(ptr, val, memorder);
224
+ // CHECK: __atomic_fetch_and(ptr, val, memorder);
225
+ // CHECK: __atomic_fetch_xor(ptr, val, memorder);
226
+ // CHECK: __atomic_fetch_or(ptr, val, memorder);
227
+ // CHECK: __atomic_fetch_nand(ptr, val, memorder);
228
+ // CHECK: }
229
+ void test_atomic_fetch_ops (int *ptr, int val, int memorder) {
230
+ __atomic_add_fetch (ptr, val, memorder);
231
+ __atomic_sub_fetch (ptr, val, memorder);
232
+ __atomic_and_fetch (ptr, val, memorder);
233
+ __atomic_xor_fetch (ptr, val, memorder);
234
+ __atomic_or_fetch (ptr, val, memorder);
235
+ __atomic_nand_fetch (ptr, val, memorder);
236
+ __atomic_fetch_add (ptr, val, memorder);
237
+ __atomic_fetch_sub (ptr, val, memorder);
238
+ __atomic_fetch_and (ptr, val, memorder);
239
+ __atomic_fetch_xor (ptr, val, memorder);
240
+ __atomic_fetch_or (ptr, val, memorder);
241
+ __atomic_fetch_nand (ptr, val, memorder);
242
+ }
243
+
244
+ // CHECK: void test_atomic_setclear(void *ptr, int memorder) {
245
+ // CHECK: __atomic_test_and_set(ptr, memorder);
246
+ // CHECK: __atomic_clear(ptr, memorder);
247
+ // CHECK: }
248
+ void test_atomic_setclear (void *ptr, int memorder) {
249
+ __atomic_test_and_set (ptr, memorder);
250
+ __atomic_clear (ptr, memorder);
251
+ }
252
+
253
+ // CHECK: void test_atomic_fences(int memorder) {
254
+ // CHECK: __atomic_thread_fence(memorder);
255
+ // CHECK: __atomic_signal_fence(memorder);
256
+ // CHECK: }
257
+ void test_atomic_fences (int memorder) {
258
+ __atomic_thread_fence (memorder);
259
+ __atomic_signal_fence (memorder);
260
+ }
261
+
262
+ // CHECK: void test_atomic_lockfree(unsigned long size, void *ptr) {
263
+ // CHECK: __atomic_always_lock_free(size, ptr);
264
+ // CHECK: __atomic_is_lock_free(size, ptr);
265
+ // CHECK: }
266
+ void test_atomic_lockfree (unsigned long size, void *ptr) {
267
+ __atomic_always_lock_free (size, ptr);
268
+ __atomic_is_lock_free (size, ptr);
269
+ }
270
+
179
271
namespace PR18776 {
180
272
struct A {
181
273
operator void *();
0 commit comments