1 // RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv7-none--eabi | FileCheck %s 2 // RUN: %clang_cc1 %s -emit-llvm -o - -triple=armv6-none--eabi | FileCheck %s 3 // RUN: %clang_cc1 %s -emit-llvm -o - -triple=armv7-unknown-openbsd | FileCheck %s 4 5 int i; 6 long long l; 7 8 typedef enum memory_order { 9 memory_order_relaxed, memory_order_consume, memory_order_acquire, 10 memory_order_release, memory_order_acq_rel, memory_order_seq_cst 11 } memory_order; 12 13 void test_presence(void) 14 { 15 // CHECK-LABEL: @test_presence 16 // CHECK: atomicrmw add i32* {{.*}} seq_cst 17 __atomic_fetch_add(&i, 1, memory_order_seq_cst); 18 // CHECK: atomicrmw sub i32* {{.*}} seq_cst 19 __atomic_fetch_sub(&i, 1, memory_order_seq_cst); 20 // CHECK: load atomic i32* {{.*}} seq_cst 21 int r; 22 __atomic_load(&i, &r, memory_order_seq_cst); 23 // CHECK: store atomic i32 {{.*}} seq_cst 24 r = 0; 25 __atomic_store(&i, &r, memory_order_seq_cst); 26 27 // CHECK: atomicrmw add i64* {{.*}} seq_cst 28 __atomic_fetch_add(&l, 1, memory_order_seq_cst); 29 // CHECK: atomicrmw sub i64* {{.*}} seq_cst 30 __atomic_fetch_sub(&l, 1, memory_order_seq_cst); 31 // CHECK: load atomic i64* {{.*}} seq_cst 32 long long rl; 33 __atomic_load(&l, &rl, memory_order_seq_cst); 34 // CHECK: store atomic i64 {{.*}} seq_cst 35 rl = 0; 36 __atomic_store(&l, &rl, memory_order_seq_cst); 37 } 38