1; RUN: opt < %s -instcombine -S | FileCheck %s 2 3define 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 16define 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 28define 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