[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / InstCombine / select-cmpxchg.ll
blobd14fcad861fefcc76d72a9d54feb3b3c49d49e2d
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
13   ret i64 %tmp3
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
25   ret i64 %tmp3
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
38   ret i64 %tmp4