blob: a8b527f2f863c4a326ff50989983ddbaf4197063 [file] [log] [blame]
Eli Friedmanc3d35982011-09-19 19:41:28 +00001; RUN: opt < %s | opt -S | FileCheck %s
Duncan P. N. Exon Smith13f5c582014-08-19 21:08:27 +00002; RUN: verify-uselistorder %s
Eli Friedmanf03bb262011-08-12 22:50:01 +00003; Basic smoke test for atomic operations.
4
5define void @f(i32* %x) {
David Blaikie7c9c6ed2015-02-27 21:17:42 +00006 ; CHECK: load atomic i32, i32* %x unordered, align 4
7 load atomic i32, i32* %x unordered, align 4
Konstantin Zhuravlyov8f856852017-07-11 22:23:00 +00008 ; CHECK: load atomic volatile i32, i32* %x syncscope("singlethread") acquire, align 4
9 load atomic volatile i32, i32* %x syncscope("singlethread") acquire, align 4
10 ; CHECK: load atomic volatile i32, i32* %x syncscope("agent") acquire, align 4
11 load atomic volatile i32, i32* %x syncscope("agent") acquire, align 4
Eli Friedmanf03bb262011-08-12 22:50:01 +000012 ; CHECK: store atomic i32 3, i32* %x release, align 4
13 store atomic i32 3, i32* %x release, align 4
Konstantin Zhuravlyov8f856852017-07-11 22:23:00 +000014 ; CHECK: store atomic volatile i32 3, i32* %x syncscope("singlethread") monotonic, align 4
15 store atomic volatile i32 3, i32* %x syncscope("singlethread") monotonic, align 4
16 ; CHECK: store atomic volatile i32 3, i32* %x syncscope("workgroup") monotonic, align 4
17 store atomic volatile i32 3, i32* %x syncscope("workgroup") monotonic, align 4
18 ; CHECK: cmpxchg i32* %x, i32 1, i32 0 syncscope("singlethread") monotonic monotonic
19 cmpxchg i32* %x, i32 1, i32 0 syncscope("singlethread") monotonic monotonic
20 ; CHECK: cmpxchg i32* %x, i32 1, i32 0 syncscope("workitem") monotonic monotonic
21 cmpxchg i32* %x, i32 1, i32 0 syncscope("workitem") monotonic monotonic
Tim Northoverca396e32014-03-11 10:48:52 +000022 ; CHECK: cmpxchg volatile i32* %x, i32 0, i32 1 acq_rel acquire
23 cmpxchg volatile i32* %x, i32 0, i32 1 acq_rel acquire
24 ; CHECK: cmpxchg i32* %x, i32 42, i32 0 acq_rel monotonic
25 cmpxchg i32* %x, i32 42, i32 0 acq_rel monotonic
Tim Northover8f2a85e2014-06-13 14:24:07 +000026 ; CHECK: cmpxchg weak i32* %x, i32 13, i32 0 seq_cst monotonic
27 cmpxchg weak i32* %x, i32 13, i32 0 seq_cst monotonic
Eli Friedmanf03bb262011-08-12 22:50:01 +000028 ; CHECK: atomicrmw add i32* %x, i32 10 seq_cst
29 atomicrmw add i32* %x, i32 10 seq_cst
30 ; CHECK: atomicrmw volatile xchg i32* %x, i32 10 monotonic
31 atomicrmw volatile xchg i32* %x, i32 10 monotonic
Konstantin Zhuravlyov8f856852017-07-11 22:23:00 +000032 ; CHECK: atomicrmw volatile xchg i32* %x, i32 10 syncscope("agent") monotonic
33 atomicrmw volatile xchg i32* %x, i32 10 syncscope("agent") monotonic
34 ; CHECK: fence syncscope("singlethread") release
35 fence syncscope("singlethread") release
Eli Friedmanf03bb262011-08-12 22:50:01 +000036 ; CHECK: fence seq_cst
37 fence seq_cst
Konstantin Zhuravlyov8f856852017-07-11 22:23:00 +000038 ; CHECK: fence syncscope("device") seq_cst
39 fence syncscope("device") seq_cst
Eli Friedmanf03bb262011-08-12 22:50:01 +000040 ret void
41}