1 ; RUN: opt < %s -instcombine -S | FileCheck %s
3 define i64 @cmpxchg_0(i64* %ptr, i64 %compare, i64 %new_value) {
4 ; CHECK-LABEL: @cmpxchg_0(
5 ; CHECK-NEXT: %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
6 ; CHECK-NEXT: %tmp2 = extractvalue { i64, i1 } %tmp0, 0
7 ; CHECK-NEXT: ret i64 %tmp2
9 %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
10 %tmp1 = extractvalue { i64, i1 } %tmp0, 1
11 %tmp2 = extractvalue { i64, i1 } %tmp0, 0
12 %tmp3 = select i1 %tmp1, i64 %compare, i64 %tmp2
16 define i64 @cmpxchg_1(i64* %ptr, i64 %compare, i64 %new_value) {
17 ; CHECK-LABEL: @cmpxchg_1(
18 ; CHECK-NEXT: %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
19 ; CHECK-NEXT: ret i64 %compare
21 %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
22 %tmp1 = extractvalue { i64, i1 } %tmp0, 1
23 %tmp2 = extractvalue { i64, i1 } %tmp0, 0
24 %tmp3 = select i1 %tmp1, i64 %tmp2, i64 %compare
28 define i64 @cmpxchg_2(i64* %ptr, i64 %compare, i64 %new_value) {
29 ; CHECK-LABEL: @cmpxchg_2(
30 ; CHECK-NEXT: %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value acq_rel monotonic
31 ; CHECK-NEXT: ret i64 %compare
33 %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value acq_rel monotonic
34 %tmp1 = extractvalue { i64, i1 } %tmp0, 1
35 %tmp2 = extractvalue { i64, i1 } %tmp0, 0
36 %tmp3 = select i1 %tmp1, i64 %compare, i64 %tmp2
37 %tmp4 = select i1 %tmp1, i64 %tmp3, i64 %compare