Home | History | Annotate | Download | only in InstCombine
      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