1 ; RUN: opt < %s | opt -S | FileCheck %s
2 ; Basic smoke test for atomic operations.
4 define void @f(i32* %x) {
5 ; CHECK: load atomic i32* %x unordered, align 4
6 load atomic i32* %x unordered, align 4
7 ; CHECK: load atomic volatile i32* %x singlethread acquire, align 4
8 load atomic volatile i32* %x singlethread acquire, align 4
9 ; CHECK: store atomic i32 3, i32* %x release, align 4
10 store atomic i32 3, i32* %x release, align 4
11 ; CHECK: store atomic volatile i32 3, i32* %x singlethread monotonic, align 4
12 store atomic volatile i32 3, i32* %x singlethread monotonic, align 4
13 ; CHECK: cmpxchg i32* %x, i32 1, i32 0 singlethread monotonic monotonic
14 cmpxchg i32* %x, i32 1, i32 0 singlethread monotonic monotonic
15 ; CHECK: cmpxchg volatile i32* %x, i32 0, i32 1 acq_rel acquire
16 cmpxchg volatile i32* %x, i32 0, i32 1 acq_rel acquire
17 ; CHECK: cmpxchg i32* %x, i32 42, i32 0 acq_rel monotonic
18 cmpxchg i32* %x, i32 42, i32 0 acq_rel monotonic
19 ; CHECK: atomicrmw add i32* %x, i32 10 seq_cst
20 atomicrmw add i32* %x, i32 10 seq_cst
21 ; CHECK: atomicrmw volatile xchg i32* %x, i32 10 monotonic
22 atomicrmw volatile xchg i32* %x, i32 10 monotonic
23 ; CHECK: fence singlethread release
24 fence singlethread release
25 ; CHECK: fence seq_cst