Run this through -simplifycfg and -mem2reg to test only what we need to test.
[oota-llvm.git] / test / CodeGen / X86 / xor_not.ll
1 ; RUN: llvm-as < %s | llc -march=x86 | grep {not\[lwb\]} | count 4
2 ; RUN: llvm-as < %s | llc -march=x86-64 | grep {not\[lwb\]}  | count 4
3 define i32 @test(i32 %a, i32 %b) nounwind  {
4 entry:
5         %tmp1not = xor i32 %b, -2
6         %tmp3 = and i32 %tmp1not, %a
7         %tmp4 = lshr i32 %tmp3, 1
8         ret i32 %tmp4
9 }
10
11 define i32 @sum32(i32 %a, i32 %b) nounwind  {
12 entry:
13         br label %bb
14 bb:
15         %b_addr.0 = phi i32 [ %b, %entry ], [ %tmp8, %bb ]
16         %a_addr.0 = phi i32 [ %a, %entry ], [ %tmp3, %bb ]
17         %tmp3 = xor i32 %a_addr.0, %b_addr.0
18         %tmp4not = xor i32 %tmp3, 2147483647
19         %tmp6 = and i32 %tmp4not, %b_addr.0
20         %tmp8 = shl i32 %tmp6, 1
21         %tmp10 = icmp eq i32 %tmp8, 0
22         br i1 %tmp10, label %bb12, label %bb
23 bb12:
24         ret i32 %tmp3
25 }
26
27 define i16 @sum16(i16 %a, i16 %b) nounwind  {
28 entry:
29         br label %bb
30 bb:
31         %b_addr.0 = phi i16 [ %b, %entry ], [ %tmp8, %bb ]
32         %a_addr.0 = phi i16 [ %a, %entry ], [ %tmp3, %bb ]
33         %tmp3 = xor i16 %a_addr.0, %b_addr.0
34         %tmp4not = xor i16 %tmp3, 32767
35         %tmp6 = and i16 %tmp4not, %b_addr.0
36         %tmp8 = shl i16 %tmp6, 1
37         %tmp10 = icmp eq i16 %tmp8, 0
38         br i1 %tmp10, label %bb12, label %bb
39 bb12:
40         ret i16 %tmp3
41 }
42
43 define i8 @sum8(i8 %a, i8 %b) nounwind  {
44 entry:
45         br label %bb
46 bb:
47         %b_addr.0 = phi i8 [ %b, %entry ], [ %tmp8, %bb ]
48         %a_addr.0 = phi i8 [ %a, %entry ], [ %tmp3, %bb ]
49         %tmp3 = xor i8 %a_addr.0, %b_addr.0
50         %tmp4not = xor i8 %tmp3, 127
51         %tmp6 = and i8 %tmp4not, %b_addr.0
52         %tmp8 = shl i8 %tmp6, 1
53         %tmp10 = icmp eq i8 %tmp8, 0
54         br i1 %tmp10, label %bb12, label %bb
55 bb12:
56         ret i8 %tmp3
57 }
58
59 define i32 @test2(i32 %a, i32 %b) nounwind  {
60 entry:
61         br label %bb
62 bb:
63         %b_addr.0 = phi i32 [ %b, %entry ], [ %tmp8, %bb ]
64         %a_addr.0 = phi i32 [ %a, %entry ], [ %tmp3, %bb ]
65         %tmp3 = xor i32 %a_addr.0, %b_addr.0
66         %tmp4not = xor i32 %tmp3, 2147483646
67         %tmp6 = and i32 %tmp4not, %b_addr.0
68         %tmp8 = shl i32 %tmp6, 1
69         %tmp10 = icmp eq i32 %tmp8, 0
70         br i1 %tmp10, label %bb12, label %bb
71 bb12:
72         ret i32 %tmp3
73 }
74