Run this through -simplifycfg and -mem2reg to test only what we need to test.
[oota-llvm.git] / test / CodeGen / X86 / rot32.ll
1 ; RUN: llvm-as < %s | llc -march=x86 > %t
2 ; RUN: grep rol %t | count 3
3 ; RUN: grep ror %t | count 1
4 ; RUN: grep shld %t | count 2
5 ; RUN: grep shrd %t | count 2
6
7 define i32 @foo(i32 %x, i32 %y, i32 %z) nounwind readnone {
8 entry:
9         %0 = shl i32 %x, %z
10         %1 = sub i32 32, %z
11         %2 = lshr i32 %x, %1
12         %3 = or i32 %2, %0
13         ret i32 %3
14 }
15
16 define i32 @bar(i32 %x, i32 %y, i32 %z) nounwind readnone {
17 entry:
18         %0 = shl i32 %y, %z
19         %1 = sub i32 32, %z
20         %2 = lshr i32 %x, %1
21         %3 = or i32 %2, %0
22         ret i32 %3
23 }
24
25 define i32 @un(i32 %x, i32 %y, i32 %z) nounwind readnone {
26 entry:
27         %0 = lshr i32 %x, %z
28         %1 = sub i32 32, %z
29         %2 = shl i32 %x, %1
30         %3 = or i32 %2, %0
31         ret i32 %3
32 }
33
34 define i32 @bu(i32 %x, i32 %y, i32 %z) nounwind readnone {
35 entry:
36         %0 = lshr i32 %y, %z
37         %1 = sub i32 32, %z
38         %2 = shl i32 %x, %1
39         %3 = or i32 %2, %0
40         ret i32 %3
41 }
42
43 define i32 @xfoo(i32 %x, i32 %y, i32 %z) nounwind readnone {
44 entry:
45         %0 = lshr i32 %x, 25
46         %1 = shl i32 %x, 7
47         %2 = or i32 %0, %1
48         ret i32 %2
49 }
50
51 define i32 @xbar(i32 %x, i32 %y, i32 %z) nounwind readnone {
52 entry:
53         %0 = shl i32 %y, 7
54         %1 = lshr i32 %x, 25
55         %2 = or i32 %0, %1
56         ret i32 %2
57 }
58
59 define i32 @xun(i32 %x, i32 %y, i32 %z) nounwind readnone {
60 entry:
61         %0 = lshr i32 %x, 7
62         %1 = shl i32 %x, 25
63         %2 = or i32 %0, %1
64         ret i32 %2
65 }
66
67 define i32 @xbu(i32 %x, i32 %y, i32 %z) nounwind readnone {
68 entry:
69         %0 = lshr i32 %y, 7
70         %1 = shl i32 %x, 25
71         %2 = or i32 %0, %1
72         ret i32 %2
73 }