1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -instcombine -S | FileCheck %s 3 4define 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 17define 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 30define 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 43define 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