XFAIL test/CodeGen/Generic/MachineBranchProb.ll on Hexagon (PR23377)
[oota-llvm.git] / test / CodeGen / Mips / mips64shift.ll
1 ; RUN: llc -march=mips64el -mcpu=mips64r2 < %s | FileCheck %s
2
3 define i64 @f0(i64 %a0, i64 %a1) nounwind readnone {
4 entry:
5 ; CHECK: dsllv
6   %shl = shl i64 %a0, %a1
7   ret i64 %shl
8 }
9
10 define i64 @f1(i64 %a0, i64 %a1) nounwind readnone {
11 entry:
12 ; CHECK: dsrav
13   %shr = ashr i64 %a0, %a1
14   ret i64 %shr
15 }
16
17 define i64 @f2(i64 %a0, i64 %a1) nounwind readnone {
18 entry:
19 ; CHECK: dsrlv
20   %shr = lshr i64 %a0, %a1
21   ret i64 %shr
22 }
23
24 define i64 @f3(i64 %a0) nounwind readnone {
25 entry:
26 ; CHECK: dsll ${{[0-9]+}}, ${{[0-9]+}}, 10
27   %shl = shl i64 %a0, 10
28   ret i64 %shl
29 }
30
31 define i64 @f4(i64 %a0) nounwind readnone {
32 entry:
33 ; CHECK: dsra ${{[0-9]+}}, ${{[0-9]+}}, 10
34   %shr = ashr i64 %a0, 10
35   ret i64 %shr
36 }
37
38 define i64 @f5(i64 %a0) nounwind readnone {
39 entry:
40 ; CHECK: dsrl ${{[0-9]+}}, ${{[0-9]+}}, 10
41   %shr = lshr i64 %a0, 10
42   ret i64 %shr
43 }
44
45 define i64 @f6(i64 %a0) nounwind readnone {
46 entry:
47 ; CHECK: dsll ${{[0-9]+}}, ${{[0-9]+}}, 40
48   %shl = shl i64 %a0, 40
49   ret i64 %shl
50 }
51
52 define i64 @f7(i64 %a0) nounwind readnone {
53 entry:
54 ; CHECK: dsra ${{[0-9]+}}, ${{[0-9]+}}, 40
55   %shr = ashr i64 %a0, 40
56   ret i64 %shr
57 }
58
59 define i64 @f8(i64 %a0) nounwind readnone {
60 entry:
61 ; CHECK: dsrl ${{[0-9]+}}, ${{[0-9]+}}, 40
62   %shr = lshr i64 %a0, 40
63   ret i64 %shr
64 }
65
66 define i64 @f9(i64 %a0, i64 %a1) nounwind readnone {
67 entry:
68 ; CHECK-NOT:  sll
69 ; CHECK:      drotrv
70   %shr = lshr i64 %a0, %a1
71   %sub = sub i64 64, %a1
72   %shl = shl i64 %a0, %sub
73   %or = or i64 %shl, %shr
74   ret i64 %or
75 }
76
77 define i64 @f10(i64 %a0, i64 %a1) nounwind readnone {
78 entry:
79 ; CHECK-NOT:  sll
80 ; CHECK:      drotrv
81   %shl = shl i64 %a0, %a1
82   %sub = sub i64 64, %a1
83   %shr = lshr i64 %a0, %sub
84   %or = or i64 %shr, %shl
85   ret i64 %or
86 }
87
88 define i64 @f11(i64 %a0) nounwind readnone {
89 entry:
90 ; CHECK: drotr ${{[0-9]+}}, ${{[0-9]+}}, 10
91   %shr = lshr i64 %a0, 10
92   %shl = shl i64 %a0, 54
93   %or = or i64 %shr, %shl
94   ret i64 %or
95 }
96
97 define i64 @f12(i64 %a0) nounwind readnone {
98 entry:
99 ; CHECK: drotr ${{[0-9]+}}, ${{[0-9]+}}, 54
100   %shl = shl i64 %a0, 10
101   %shr = lshr i64 %a0, 54
102   %or = or i64 %shl, %shr
103   ret i64 %or
104 }
105
106