Home | History | Annotate | Download | only in InstCombine
      1 ; RUN: opt < %s -instcombine -S | FileCheck %s
      2 
      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
      8 ;
      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
     14 }
     15 
     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
     20 ;
     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
     26 }
     27 
     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
     32 ;
     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
     39 }
     40