revert a hunk of r82018 that wasn't supposed to go in yet.
[llvm/avr.git] / test / CodeGen / X86 / rot64.ll
blob4e082bb860b45db4db1e516a137249d322dad0a4
1 ; RUN: llc < %s -march=x86-64 > %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
7 define i64 @foo(i64 %x, i64 %y, i64 %z) nounwind readnone {
8 entry:
9         %0 = shl i64 %x, %z
10         %1 = sub i64 64, %z
11         %2 = lshr i64 %x, %1
12         %3 = or i64 %2, %0
13         ret i64 %3
16 define i64 @bar(i64 %x, i64 %y, i64 %z) nounwind readnone {
17 entry:
18         %0 = shl i64 %y, %z
19         %1 = sub i64 64, %z
20         %2 = lshr i64 %x, %1
21         %3 = or i64 %2, %0
22         ret i64 %3
25 define i64 @un(i64 %x, i64 %y, i64 %z) nounwind readnone {
26 entry:
27         %0 = lshr i64 %x, %z
28         %1 = sub i64 64, %z
29         %2 = shl i64 %x, %1
30         %3 = or i64 %2, %0
31         ret i64 %3
34 define i64 @bu(i64 %x, i64 %y, i64 %z) nounwind readnone {
35 entry:
36         %0 = lshr i64 %y, %z
37         %1 = sub i64 64, %z
38         %2 = shl i64 %x, %1
39         %3 = or i64 %2, %0
40         ret i64 %3
43 define i64 @xfoo(i64 %x, i64 %y, i64 %z) nounwind readnone {
44 entry:
45         %0 = lshr i64 %x, 57
46         %1 = shl i64 %x, 7
47         %2 = or i64 %0, %1
48         ret i64 %2
51 define i64 @xbar(i64 %x, i64 %y, i64 %z) nounwind readnone {
52 entry:
53         %0 = shl i64 %y, 7
54         %1 = lshr i64 %x, 57
55         %2 = or i64 %0, %1
56         ret i64 %2
59 define i64 @xun(i64 %x, i64 %y, i64 %z) nounwind readnone {
60 entry:
61         %0 = lshr i64 %x, 7
62         %1 = shl i64 %x, 57
63         %2 = or i64 %0, %1
64         ret i64 %2
67 define i64 @xbu(i64 %x, i64 %y, i64 %z) nounwind readnone {
68 entry:
69         %0 = lshr i64 %y, 7
70         %1 = shl i64 %x, 57
71         %2 = or i64 %0, %1
72         ret i64 %2