blob: e93140f18c9babdb7a528acfc611ad3d01beed52 [file] [log] [blame]
Daniel Sanders0d972702016-06-24 12:23:17 +00001; RUN: llc -march=mips64el -mcpu=mips64r2 < %s | FileCheck -check-prefixes=ALL,MIPS %s
2; RUN: llc -march=mips64el -mcpu=mips64r6 -mattr=micromips < %s | FileCheck -check-prefixes=ALL,MICROMIPS %s
Akira Hatanaka61e256a2011-09-30 03:18:46 +00003
4define i64 @f0(i64 %a0, i64 %a1) nounwind readnone {
5entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +00006; ALL: dsllv
Akira Hatanaka61e256a2011-09-30 03:18:46 +00007 %shl = shl i64 %a0, %a1
8 ret i64 %shl
9}
10
11define i64 @f1(i64 %a0, i64 %a1) nounwind readnone {
12entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000013; ALL: dsrav
Akira Hatanaka61e256a2011-09-30 03:18:46 +000014 %shr = ashr i64 %a0, %a1
15 ret i64 %shr
16}
17
18define i64 @f2(i64 %a0, i64 %a1) nounwind readnone {
19entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000020; ALL: dsrlv
Akira Hatanaka61e256a2011-09-30 03:18:46 +000021 %shr = lshr i64 %a0, %a1
22 ret i64 %shr
23}
24
25define i64 @f3(i64 %a0) nounwind readnone {
26entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000027; ALL: dsll ${{[0-9]+}}, ${{[0-9]+}}, 10
Akira Hatanaka61e256a2011-09-30 03:18:46 +000028 %shl = shl i64 %a0, 10
29 ret i64 %shl
30}
31
32define i64 @f4(i64 %a0) nounwind readnone {
33entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000034; ALL: dsra ${{[0-9]+}}, ${{[0-9]+}}, 10
Akira Hatanaka61e256a2011-09-30 03:18:46 +000035 %shr = ashr i64 %a0, 10
36 ret i64 %shr
37}
38
39define i64 @f5(i64 %a0) nounwind readnone {
40entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000041; ALL: dsrl ${{[0-9]+}}, ${{[0-9]+}}, 10
Akira Hatanaka61e256a2011-09-30 03:18:46 +000042 %shr = lshr i64 %a0, 10
43 ret i64 %shr
44}
45
46define i64 @f6(i64 %a0) nounwind readnone {
47entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000048; ALL: dsll ${{[0-9]+}}, ${{[0-9]+}}, 40
Akira Hatanaka61e256a2011-09-30 03:18:46 +000049 %shl = shl i64 %a0, 40
50 ret i64 %shl
51}
52
53define i64 @f7(i64 %a0) nounwind readnone {
54entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000055; ALL: dsra ${{[0-9]+}}, ${{[0-9]+}}, 40
Akira Hatanaka61e256a2011-09-30 03:18:46 +000056 %shr = ashr i64 %a0, 40
57 ret i64 %shr
58}
59
60define i64 @f8(i64 %a0) nounwind readnone {
61entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000062; ALL: dsrl ${{[0-9]+}}, ${{[0-9]+}}, 40
Akira Hatanaka61e256a2011-09-30 03:18:46 +000063 %shr = lshr i64 %a0, 40
64 ret i64 %shr
65}
Akira Hatanaka7ba8a8d2011-09-30 18:51:46 +000066
67define i64 @f9(i64 %a0, i64 %a1) nounwind readnone {
68entry:
Vasileios Kalintiris32177d62015-04-21 10:49:03 +000069; CHECK-NOT: sll
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000070; ALL: drotrv
Akira Hatanaka7ba8a8d2011-09-30 18:51:46 +000071 %shr = lshr i64 %a0, %a1
72 %sub = sub i64 64, %a1
73 %shl = shl i64 %a0, %sub
74 %or = or i64 %shl, %shr
75 ret i64 %or
76}
77
78define i64 @f10(i64 %a0, i64 %a1) nounwind readnone {
79entry:
Vasileios Kalintiris32177d62015-04-21 10:49:03 +000080; CHECK-NOT: sll
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000081; ALL: drotrv
Akira Hatanaka7ba8a8d2011-09-30 18:51:46 +000082 %shl = shl i64 %a0, %a1
83 %sub = sub i64 64, %a1
84 %shr = lshr i64 %a0, %sub
85 %or = or i64 %shr, %shl
86 ret i64 %or
87}
88
89define i64 @f11(i64 %a0) nounwind readnone {
90entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +000091; ALL: drotr ${{[0-9]+}}, ${{[0-9]+}}, 10
Akira Hatanaka7ba8a8d2011-09-30 18:51:46 +000092 %shr = lshr i64 %a0, 10
93 %shl = shl i64 %a0, 54
94 %or = or i64 %shr, %shl
95 ret i64 %or
96}
97
98define i64 @f12(i64 %a0) nounwind readnone {
99entry:
Hrvoje Vargaf1e0a032016-06-16 07:06:25 +0000100; ALL: drotr ${{[0-9]+}}, ${{[0-9]+}}, 54
Akira Hatanaka7ba8a8d2011-09-30 18:51:46 +0000101 %shl = shl i64 %a0, 10
102 %shr = lshr i64 %a0, 54
103 %or = or i64 %shl, %shr
104 ret i64 %or
105}
106
107