@@ -176,6 +176,98 @@ float test15() {
176176 return __builtin_asinf (1 .0F );
177177}
178178
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+
179271namespace PR18776 {
180272struct A {
181273 operator void *();
0 commit comments