]>
Commit | Line | Data |
---|---|---|
3dfed10e | 1 | // Code generation of atomic operations. |
3dfed10e XL |
2 | // compile-flags: -O |
3 | #![crate_type = "lib"] | |
4 | ||
5 | use std::sync::atomic::{AtomicI32, Ordering::*}; | |
6 | ||
7 | // CHECK-LABEL: @compare_exchange | |
8 | #[no_mangle] | |
9 | pub fn compare_exchange(a: &AtomicI32) { | |
923072b8 | 10 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 10 monotonic monotonic |
064997fb FG |
11 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 11 monotonic acquire |
12 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 12 monotonic seq_cst | |
3dfed10e | 13 | let _ = a.compare_exchange(0, 10, Relaxed, Relaxed); |
064997fb FG |
14 | let _ = a.compare_exchange(0, 11, Relaxed, Acquire); |
15 | let _ = a.compare_exchange(0, 12, Relaxed, SeqCst); | |
3dfed10e | 16 | |
923072b8 | 17 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 20 release monotonic |
064997fb FG |
18 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 21 release acquire |
19 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 22 release seq_cst | |
3dfed10e | 20 | let _ = a.compare_exchange(0, 20, Release, Relaxed); |
064997fb FG |
21 | let _ = a.compare_exchange(0, 21, Release, Acquire); |
22 | let _ = a.compare_exchange(0, 22, Release, SeqCst); | |
3dfed10e | 23 | |
923072b8 FG |
24 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 30 acquire monotonic |
25 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 31 acquire acquire | |
064997fb | 26 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 32 acquire seq_cst |
3dfed10e XL |
27 | let _ = a.compare_exchange(0, 30, Acquire, Relaxed); |
28 | let _ = a.compare_exchange(0, 31, Acquire, Acquire); | |
064997fb | 29 | let _ = a.compare_exchange(0, 32, Acquire, SeqCst); |
3dfed10e | 30 | |
923072b8 FG |
31 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 40 acq_rel monotonic |
32 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 41 acq_rel acquire | |
064997fb | 33 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 42 acq_rel seq_cst |
3dfed10e XL |
34 | let _ = a.compare_exchange(0, 40, AcqRel, Relaxed); |
35 | let _ = a.compare_exchange(0, 41, AcqRel, Acquire); | |
064997fb | 36 | let _ = a.compare_exchange(0, 42, AcqRel, SeqCst); |
3dfed10e | 37 | |
923072b8 FG |
38 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 50 seq_cst monotonic |
39 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 51 seq_cst acquire | |
40 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 52 seq_cst seq_cst | |
3dfed10e XL |
41 | let _ = a.compare_exchange(0, 50, SeqCst, Relaxed); |
42 | let _ = a.compare_exchange(0, 51, SeqCst, Acquire); | |
43 | let _ = a.compare_exchange(0, 52, SeqCst, SeqCst); | |
44 | } | |
45 | ||
46 | // CHECK-LABEL: @compare_exchange_weak | |
47 | #[no_mangle] | |
48 | pub fn compare_exchange_weak(w: &AtomicI32) { | |
923072b8 | 49 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 10 monotonic monotonic |
064997fb FG |
50 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 11 monotonic acquire |
51 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 12 monotonic seq_cst | |
3dfed10e | 52 | let _ = w.compare_exchange_weak(1, 10, Relaxed, Relaxed); |
064997fb FG |
53 | let _ = w.compare_exchange_weak(1, 11, Relaxed, Acquire); |
54 | let _ = w.compare_exchange_weak(1, 12, Relaxed, SeqCst); | |
3dfed10e | 55 | |
923072b8 | 56 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 20 release monotonic |
064997fb FG |
57 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 21 release acquire |
58 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 22 release seq_cst | |
3dfed10e | 59 | let _ = w.compare_exchange_weak(1, 20, Release, Relaxed); |
064997fb FG |
60 | let _ = w.compare_exchange_weak(1, 21, Release, Acquire); |
61 | let _ = w.compare_exchange_weak(1, 22, Release, SeqCst); | |
3dfed10e | 62 | |
923072b8 FG |
63 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 30 acquire monotonic |
64 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 31 acquire acquire | |
064997fb | 65 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 32 acquire seq_cst |
3dfed10e XL |
66 | let _ = w.compare_exchange_weak(1, 30, Acquire, Relaxed); |
67 | let _ = w.compare_exchange_weak(1, 31, Acquire, Acquire); | |
064997fb | 68 | let _ = w.compare_exchange_weak(1, 32, Acquire, SeqCst); |
3dfed10e | 69 | |
923072b8 FG |
70 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 40 acq_rel monotonic |
71 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 41 acq_rel acquire | |
064997fb | 72 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 42 acq_rel seq_cst |
3dfed10e XL |
73 | let _ = w.compare_exchange_weak(1, 40, AcqRel, Relaxed); |
74 | let _ = w.compare_exchange_weak(1, 41, AcqRel, Acquire); | |
064997fb | 75 | let _ = w.compare_exchange_weak(1, 42, AcqRel, SeqCst); |
3dfed10e | 76 | |
923072b8 FG |
77 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 50 seq_cst monotonic |
78 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 51 seq_cst acquire | |
79 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 52 seq_cst seq_cst | |
3dfed10e XL |
80 | let _ = w.compare_exchange_weak(1, 50, SeqCst, Relaxed); |
81 | let _ = w.compare_exchange_weak(1, 51, SeqCst, Acquire); | |
82 | let _ = w.compare_exchange_weak(1, 52, SeqCst, SeqCst); | |
83 | } |