xref: /aosp_15_r20/external/clang/test/CodeGen/arm-atomics-m.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv7m-none--eabi -target-cpu cortex-m3 | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li int i;
4*67e74705SXin Li long long l;
5*67e74705SXin Li 
6*67e74705SXin Li typedef enum memory_order {
7*67e74705SXin Li   memory_order_relaxed, memory_order_consume, memory_order_acquire,
8*67e74705SXin Li   memory_order_release, memory_order_acq_rel, memory_order_seq_cst
9*67e74705SXin Li } memory_order;
10*67e74705SXin Li 
test_presence(void)11*67e74705SXin Li void test_presence(void)
12*67e74705SXin Li {
13*67e74705SXin Li   // CHECK-LABEL: @test_presence
14*67e74705SXin Li   // CHECK: atomicrmw add i32* {{.*}} seq_cst
15*67e74705SXin Li   __atomic_fetch_add(&i, 1, memory_order_seq_cst);
16*67e74705SXin Li   // CHECK: atomicrmw sub i32* {{.*}} seq_cst
17*67e74705SXin Li   __atomic_fetch_sub(&i, 1, memory_order_seq_cst);
18*67e74705SXin Li   // CHECK: load atomic i32, i32* {{.*}} seq_cst
19*67e74705SXin Li   int r;
20*67e74705SXin Li   __atomic_load(&i, &r, memory_order_seq_cst);
21*67e74705SXin Li   // CHECK: store atomic i32 {{.*}} seq_cst
22*67e74705SXin Li   r = 0;
23*67e74705SXin Li   __atomic_store(&i, &r, memory_order_seq_cst);
24*67e74705SXin Li 
25*67e74705SXin Li   // CHECK: __atomic_fetch_add_8
26*67e74705SXin Li   __atomic_fetch_add(&l, 1, memory_order_seq_cst);
27*67e74705SXin Li   // CHECK: __atomic_fetch_sub_8
28*67e74705SXin Li   __atomic_fetch_sub(&l, 1, memory_order_seq_cst);
29*67e74705SXin Li   // CHECK: __atomic_load_8
30*67e74705SXin Li   long long rl;
31*67e74705SXin Li   __atomic_load(&l, &rl, memory_order_seq_cst);
32*67e74705SXin Li   // CHECK: __atomic_store_8
33*67e74705SXin Li   rl = 0;
34*67e74705SXin Li   __atomic_store(&l, &rl, memory_order_seq_cst);
35*67e74705SXin Li }
36