fix PR4963: folding insertvalue would sometimes turn a packed struct into
[llvm/avr.git] / test / Transforms / InstCombine / or-to-xor.ll
blob1495ee49709f0f743e2742dd5b049ee143b591e7
1 ; RUN: opt < %s -instcombine -S | grep {xor i32 %a, %b} | count 4
2 ; RUN: opt < %s -instcombine -S | not grep {and}
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
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
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
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