Home | History | Annotate | Download | only in InstCombine
      1 ; RUN: opt < %s -instcombine -S | grep "xor i32 %a, %b" | count 4
      2 ; RUN: opt < %s -instcombine -S | not grep "and"
      3 
      4 define i32 @func1(i32 %a, i32 %b) nounwind readnone {
      5 entry:
      6 	%b_not = xor i32 %b, -1
      7 	%0 = and i32 %a, %b_not
      8 	%a_not = xor i32 %a, -1
      9 	%1 = and i32 %a_not, %b
     10 	%2 = or i32 %0, %1
     11 	ret i32 %2
     12 }
     13 
     14 define i32 @func2(i32 %a, i32 %b) nounwind readnone {
     15 entry:
     16 	%b_not = xor i32 %b, -1
     17 	%0 = and i32 %b_not, %a
     18 	%a_not = xor i32 %a, -1
     19 	%1 = and i32 %a_not, %b
     20 	%2 = or i32 %0, %1
     21 	ret i32 %2
     22 }
     23 
     24 define i32 @func3(i32 %a, i32 %b) nounwind readnone {
     25 entry:
     26 	%b_not = xor i32 %b, -1
     27 	%0 = and i32 %a, %b_not
     28 	%a_not = xor i32 %a, -1
     29 	%1 = and i32 %b, %a_not
     30 	%2 = or i32 %0, %1
     31 	ret i32 %2
     32 }
     33 
     34 define i32 @func4(i32 %a, i32 %b) nounwind readnone {
     35 entry:
     36 	%b_not = xor i32 %b, -1
     37 	%0 = and i32 %b_not, %a
     38 	%a_not = xor i32 %a, -1
     39 	%1 = and i32 %b, %a_not
     40 	%2 = or i32 %0, %1
     41 	ret i32 %2
     42 }
     43