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