1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2 ; RUN: opt < %s -instcombine -S | FileCheck %s 3 4 define i32 @func1(i32 %a, i32 %b) { 5 ; CHECK-LABEL: @func1( 6 ; CHECK-NEXT: [[T2:%.*]] = xor i32 %a, %b 7 ; CHECK-NEXT: ret i32 [[T2]] 8 ; 9 %b_not = xor i32 %b, -1 10 %t0 = and i32 %a, %b_not 11 %a_not = xor i32 %a, -1 12 %t1 = and i32 %a_not, %b 13 %t2 = or i32 %t0, %t1 14 ret i32 %t2 15 } 16 17 define i32 @func2(i32 %a, i32 %b) { 18 ; CHECK-LABEL: @func2( 19 ; CHECK-NEXT: [[T2:%.*]] = xor i32 %a, %b 20 ; CHECK-NEXT: ret i32 [[T2]] 21 ; 22 %b_not = xor i32 %b, -1 23 %t0 = and i32 %b_not, %a 24 %a_not = xor i32 %a, -1 25 %t1 = and i32 %a_not, %b 26 %t2 = or i32 %t0, %t1 27 ret i32 %t2 28 } 29 30 define i32 @func3(i32 %a, i32 %b) { 31 ; CHECK-LABEL: @func3( 32 ; CHECK-NEXT: [[T2:%.*]] = xor i32 %a, %b 33 ; CHECK-NEXT: ret i32 [[T2]] 34 ; 35 %b_not = xor i32 %b, -1 36 %t0 = and i32 %a, %b_not 37 %a_not = xor i32 %a, -1 38 %t1 = and i32 %b, %a_not 39 %t2 = or i32 %t0, %t1 40 ret i32 %t2 41 } 42 43 define i32 @func4(i32 %a, i32 %b) { 44 ; CHECK-LABEL: @func4( 45 ; CHECK-NEXT: [[T2:%.*]] = xor i32 %a, %b 46 ; CHECK-NEXT: ret i32 [[T2]] 47 ; 48 %b_not = xor i32 %b, -1 49 %t0 = and i32 %b_not, %a 50 %a_not = xor i32 %a, -1 51 %t1 = and i32 %b, %a_not 52 %t2 = or i32 %t0, %t1 53 ret i32 %t2 54 } 55 56