xref: /aosp_15_r20/external/llvm/test/Analysis/CostModel/X86/testshiftlshr.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=core2 < %s | FileCheck --check-prefix=SSE2-CODEGEN %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -mtriple=x86_64-apple-darwin -mcpu=core2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE2 %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker%shifttype = type <2 x i16>
5*9880d681SAndroid Build Coastguard Workerdefine %shifttype @shift2i16(%shifttype %a, %shifttype %b) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i16
8*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
9*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i16
10*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype %a , %b
13*9880d681SAndroid Build Coastguard Worker  ret %shifttype %0
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker%shifttype4i16 = type <4 x i16>
17*9880d681SAndroid Build Coastguard Workerdefine %shifttype4i16 @shift4i16(%shifttype4i16 %a, %shifttype4i16 %b) {
18*9880d681SAndroid Build Coastguard Workerentry:
19*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i16
20*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 16 {{.*}} lshr
21*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i16
22*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype4i16 %a , %b
25*9880d681SAndroid Build Coastguard Worker  ret %shifttype4i16 %0
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker%shifttype8i16 = type <8 x i16>
29*9880d681SAndroid Build Coastguard Workerdefine %shifttype8i16 @shift8i16(%shifttype8i16 %a, %shifttype8i16 %b) {
30*9880d681SAndroid Build Coastguard Workerentry:
31*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i16
32*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 32 {{.*}} lshr
33*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i16
34*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype8i16 %a , %b
37*9880d681SAndroid Build Coastguard Worker  ret %shifttype8i16 %0
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker%shifttype16i16 = type <16 x i16>
41*9880d681SAndroid Build Coastguard Workerdefine %shifttype16i16 @shift16i16(%shifttype16i16 %a, %shifttype16i16 %b) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i16
44*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 64 {{.*}} lshr
45*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i16
46*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype16i16 %a , %b
49*9880d681SAndroid Build Coastguard Worker  ret %shifttype16i16 %0
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker%shifttype32i16 = type <32 x i16>
53*9880d681SAndroid Build Coastguard Workerdefine %shifttype32i16 @shift32i16(%shifttype32i16 %a, %shifttype32i16 %b) {
54*9880d681SAndroid Build Coastguard Workerentry:
55*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i16
56*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 128 {{.*}} lshr
57*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i16
58*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype32i16 %a , %b
61*9880d681SAndroid Build Coastguard Worker  ret %shifttype32i16 %0
62*9880d681SAndroid Build Coastguard Worker}
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker%shifttype2i32 = type <2 x i32>
65*9880d681SAndroid Build Coastguard Workerdefine %shifttype2i32 @shift2i32(%shifttype2i32 %a, %shifttype2i32 %b) {
66*9880d681SAndroid Build Coastguard Workerentry:
67*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i32
68*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
69*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i32
70*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype2i32 %a , %b
73*9880d681SAndroid Build Coastguard Worker  ret %shifttype2i32 %0
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker%shifttype4i32 = type <4 x i32>
77*9880d681SAndroid Build Coastguard Workerdefine %shifttype4i32 @shift4i32(%shifttype4i32 %a, %shifttype4i32 %b) {
78*9880d681SAndroid Build Coastguard Workerentry:
79*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i32
80*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 16 {{.*}} lshr
81*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i32
82*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype4i32 %a , %b
85*9880d681SAndroid Build Coastguard Worker  ret %shifttype4i32 %0
86*9880d681SAndroid Build Coastguard Worker}
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker%shifttype8i32 = type <8 x i32>
89*9880d681SAndroid Build Coastguard Workerdefine %shifttype8i32 @shift8i32(%shifttype8i32 %a, %shifttype8i32 %b) {
90*9880d681SAndroid Build Coastguard Workerentry:
91*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i32
92*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 32 {{.*}} lshr
93*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i32
94*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype8i32 %a , %b
97*9880d681SAndroid Build Coastguard Worker  ret %shifttype8i32 %0
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker%shifttype16i32 = type <16 x i32>
101*9880d681SAndroid Build Coastguard Workerdefine %shifttype16i32 @shift16i32(%shifttype16i32 %a, %shifttype16i32 %b) {
102*9880d681SAndroid Build Coastguard Workerentry:
103*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i32
104*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 64 {{.*}} lshr
105*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i32
106*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype16i32 %a , %b
109*9880d681SAndroid Build Coastguard Worker  ret %shifttype16i32 %0
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker%shifttype32i32 = type <32 x i32>
113*9880d681SAndroid Build Coastguard Workerdefine %shifttype32i32 @shift32i32(%shifttype32i32 %a, %shifttype32i32 %b) {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i32
116*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 128 {{.*}} lshr
117*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i32
118*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype32i32 %a , %b
121*9880d681SAndroid Build Coastguard Worker  ret %shifttype32i32 %0
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker%shifttype2i64 = type <2 x i64>
125*9880d681SAndroid Build Coastguard Workerdefine %shifttype2i64 @shift2i64(%shifttype2i64 %a, %shifttype2i64 %b) {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i64
128*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
129*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i64
130*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype2i64 %a , %b
133*9880d681SAndroid Build Coastguard Worker  ret %shifttype2i64 %0
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker%shifttype4i64 = type <4 x i64>
137*9880d681SAndroid Build Coastguard Workerdefine %shifttype4i64 @shift4i64(%shifttype4i64 %a, %shifttype4i64 %b) {
138*9880d681SAndroid Build Coastguard Workerentry:
139*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i64
140*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 8 {{.*}} lshr
141*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i64
142*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype4i64 %a , %b
145*9880d681SAndroid Build Coastguard Worker  ret %shifttype4i64 %0
146*9880d681SAndroid Build Coastguard Worker}
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Worker%shifttype8i64 = type <8 x i64>
149*9880d681SAndroid Build Coastguard Workerdefine %shifttype8i64 @shift8i64(%shifttype8i64 %a, %shifttype8i64 %b) {
150*9880d681SAndroid Build Coastguard Workerentry:
151*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i64
152*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 16 {{.*}} lshr
153*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i64
154*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype8i64 %a , %b
157*9880d681SAndroid Build Coastguard Worker  ret %shifttype8i64 %0
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker%shifttype16i64 = type <16 x i64>
161*9880d681SAndroid Build Coastguard Workerdefine %shifttype16i64 @shift16i64(%shifttype16i64 %a, %shifttype16i64 %b) {
162*9880d681SAndroid Build Coastguard Workerentry:
163*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i64
164*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 32 {{.*}} lshr
165*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i64
166*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype16i64 %a , %b
169*9880d681SAndroid Build Coastguard Worker  ret %shifttype16i64 %0
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker%shifttype32i64 = type <32 x i64>
173*9880d681SAndroid Build Coastguard Workerdefine %shifttype32i64 @shift32i64(%shifttype32i64 %a, %shifttype32i64 %b) {
174*9880d681SAndroid Build Coastguard Workerentry:
175*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i64
176*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 64 {{.*}} lshr
177*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i64
178*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype32i64 %a , %b
181*9880d681SAndroid Build Coastguard Worker  ret %shifttype32i64 %0
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker%shifttype2i8 = type <2 x i8>
185*9880d681SAndroid Build Coastguard Workerdefine %shifttype2i8 @shift2i8(%shifttype2i8 %a, %shifttype2i8 %b) {
186*9880d681SAndroid Build Coastguard Workerentry:
187*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i8
188*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
189*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i8
190*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype2i8 %a , %b
193*9880d681SAndroid Build Coastguard Worker  ret %shifttype2i8 %0
194*9880d681SAndroid Build Coastguard Worker}
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker%shifttype4i8 = type <4 x i8>
197*9880d681SAndroid Build Coastguard Workerdefine %shifttype4i8 @shift4i8(%shifttype4i8 %a, %shifttype4i8 %b) {
198*9880d681SAndroid Build Coastguard Workerentry:
199*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i8
200*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 16 {{.*}} lshr
201*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i8
202*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype4i8 %a , %b
205*9880d681SAndroid Build Coastguard Worker  ret %shifttype4i8 %0
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker%shifttype8i8 = type <8 x i8>
209*9880d681SAndroid Build Coastguard Workerdefine %shifttype8i8 @shift8i8(%shifttype8i8 %a, %shifttype8i8 %b) {
210*9880d681SAndroid Build Coastguard Workerentry:
211*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i8
212*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 32 {{.*}} lshr
213*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i8
214*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype8i8 %a , %b
217*9880d681SAndroid Build Coastguard Worker  ret %shifttype8i8 %0
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker%shifttype16i8 = type <16 x i8>
221*9880d681SAndroid Build Coastguard Workerdefine %shifttype16i8 @shift16i8(%shifttype16i8 %a, %shifttype16i8 %b) {
222*9880d681SAndroid Build Coastguard Workerentry:
223*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i8
224*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 26 {{.*}} lshr
225*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i8
226*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype16i8 %a , %b
229*9880d681SAndroid Build Coastguard Worker  ret %shifttype16i8 %0
230*9880d681SAndroid Build Coastguard Worker}
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker%shifttype32i8 = type <32 x i8>
233*9880d681SAndroid Build Coastguard Workerdefine %shifttype32i8 @shift32i8(%shifttype32i8 %a, %shifttype32i8 %b) {
234*9880d681SAndroid Build Coastguard Workerentry:
235*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i8
236*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 52 {{.*}} lshr
237*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i8
238*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttype32i8 %a , %b
241*9880d681SAndroid Build Coastguard Worker  ret %shifttype32i8 %0
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Worker; Test shift by a constant vector.
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker%shifttypec = type <2 x i16>
247*9880d681SAndroid Build Coastguard Workerdefine %shifttypec @shift2i16const(%shifttypec %a, %shifttypec %b) {
248*9880d681SAndroid Build Coastguard Workerentry:
249*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i16const
250*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
251*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i16const
252*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec %a , <i16 3, i16 3>
255*9880d681SAndroid Build Coastguard Worker  ret %shifttypec %0
256*9880d681SAndroid Build Coastguard Worker}
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker%shifttypec4i16 = type <4 x i16>
259*9880d681SAndroid Build Coastguard Workerdefine %shifttypec4i16 @shift4i16const(%shifttypec4i16 %a, %shifttypec4i16 %b) {
260*9880d681SAndroid Build Coastguard Workerentry:
261*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i16const
262*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
263*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i16const
264*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld $3
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec4i16 %a , <i16 3, i16 3, i16 3, i16 3>
267*9880d681SAndroid Build Coastguard Worker  ret %shifttypec4i16 %0
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Worker%shifttypec8i16 = type <8 x i16>
271*9880d681SAndroid Build Coastguard Workerdefine %shifttypec8i16 @shift8i16const(%shifttypec8i16 %a, %shifttypec8i16 %b) {
272*9880d681SAndroid Build Coastguard Workerentry:
273*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i16const
274*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
275*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i16const
276*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw $3
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec8i16 %a , <i16 3, i16 3, i16 3, i16 3,
279*9880d681SAndroid Build Coastguard Worker                                  i16 3, i16 3, i16 3, i16 3>
280*9880d681SAndroid Build Coastguard Worker  ret %shifttypec8i16 %0
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker%shifttypec16i16 = type <16 x i16>
284*9880d681SAndroid Build Coastguard Workerdefine %shifttypec16i16 @shift16i16const(%shifttypec16i16 %a,
285*9880d681SAndroid Build Coastguard Worker                                         %shifttypec16i16 %b) {
286*9880d681SAndroid Build Coastguard Workerentry:
287*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i16const
288*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 2 {{.*}} lshr
289*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i16const
290*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw $3
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec16i16 %a , <i16 3, i16 3, i16 3, i16 3,
293*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
294*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
295*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3>
296*9880d681SAndroid Build Coastguard Worker  ret %shifttypec16i16 %0
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker%shifttypec32i16 = type <32 x i16>
300*9880d681SAndroid Build Coastguard Workerdefine %shifttypec32i16 @shift32i16const(%shifttypec32i16 %a,
301*9880d681SAndroid Build Coastguard Worker                                        %shifttypec32i16 %b) {
302*9880d681SAndroid Build Coastguard Workerentry:
303*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i16const
304*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
305*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i16const
306*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw $3
307*9880d681SAndroid Build Coastguard Worker
308*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec32i16 %a , <i16 3, i16 3, i16 3, i16 3,
309*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
310*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
311*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
312*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
313*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
314*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3,
315*9880d681SAndroid Build Coastguard Worker                                   i16 3, i16 3, i16 3, i16 3>
316*9880d681SAndroid Build Coastguard Worker  ret %shifttypec32i16 %0
317*9880d681SAndroid Build Coastguard Worker}
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Worker%shifttypec2i32 = type <2 x i32>
320*9880d681SAndroid Build Coastguard Workerdefine %shifttypec2i32 @shift2i32c(%shifttypec2i32 %a, %shifttypec2i32 %b) {
321*9880d681SAndroid Build Coastguard Workerentry:
322*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i32c
323*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
324*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i32c
325*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec2i32 %a , <i32 3, i32 3>
328*9880d681SAndroid Build Coastguard Worker  ret %shifttypec2i32 %0
329*9880d681SAndroid Build Coastguard Worker}
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Worker%shifttypec4i32 = type <4 x i32>
332*9880d681SAndroid Build Coastguard Workerdefine %shifttypec4i32 @shift4i32c(%shifttypec4i32 %a, %shifttypec4i32 %b) {
333*9880d681SAndroid Build Coastguard Workerentry:
334*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i32c
335*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
336*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i32c
337*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld $3
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec4i32 %a , <i32 3, i32 3, i32 3, i32 3>
340*9880d681SAndroid Build Coastguard Worker  ret %shifttypec4i32 %0
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker%shifttypec8i32 = type <8 x i32>
344*9880d681SAndroid Build Coastguard Workerdefine %shifttypec8i32 @shift8i32c(%shifttypec8i32 %a, %shifttypec8i32 %b) {
345*9880d681SAndroid Build Coastguard Workerentry:
346*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i32c
347*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 2 {{.*}} lshr
348*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i32c
349*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld $3
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec8i32 %a , <i32 3, i32 3, i32 3, i32 3,
352*9880d681SAndroid Build Coastguard Worker                                  i32 3, i32 3, i32 3, i32 3>
353*9880d681SAndroid Build Coastguard Worker  ret %shifttypec8i32 %0
354*9880d681SAndroid Build Coastguard Worker}
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Worker%shifttypec16i32 = type <16 x i32>
357*9880d681SAndroid Build Coastguard Workerdefine %shifttypec16i32 @shift16i32c(%shifttypec16i32 %a, %shifttypec16i32 %b) {
358*9880d681SAndroid Build Coastguard Workerentry:
359*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i32c
360*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
361*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i32c
362*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld $3
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec16i32 %a , <i32 3, i32 3, i32 3, i32 3,
365*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
366*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
367*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3>
368*9880d681SAndroid Build Coastguard Worker  ret %shifttypec16i32 %0
369*9880d681SAndroid Build Coastguard Worker}
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker%shifttypec32i32 = type <32 x i32>
372*9880d681SAndroid Build Coastguard Workerdefine %shifttypec32i32 @shift32i32c(%shifttypec32i32 %a, %shifttypec32i32 %b) {
373*9880d681SAndroid Build Coastguard Workerentry:
374*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i32c
375*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 8 {{.*}} lshr
376*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i32c
377*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld $3
378*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec32i32 %a , <i32 3, i32 3, i32 3, i32 3,
379*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
380*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
381*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
382*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
383*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
384*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3,
385*9880d681SAndroid Build Coastguard Worker                                   i32 3, i32 3, i32 3, i32 3>
386*9880d681SAndroid Build Coastguard Worker  ret %shifttypec32i32 %0
387*9880d681SAndroid Build Coastguard Worker}
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker%shifttypec2i64 = type <2 x i64>
390*9880d681SAndroid Build Coastguard Workerdefine %shifttypec2i64 @shift2i64c(%shifttypec2i64 %a, %shifttypec2i64 %b) {
391*9880d681SAndroid Build Coastguard Workerentry:
392*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i64c
393*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
394*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i64c
395*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec2i64 %a , <i64 3, i64 3>
398*9880d681SAndroid Build Coastguard Worker  ret %shifttypec2i64 %0
399*9880d681SAndroid Build Coastguard Worker}
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Worker%shifttypec4i64 = type <4 x i64>
402*9880d681SAndroid Build Coastguard Workerdefine %shifttypec4i64 @shift4i64c(%shifttypec4i64 %a, %shifttypec4i64 %b) {
403*9880d681SAndroid Build Coastguard Workerentry:
404*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i64c
405*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 2 {{.*}} lshr
406*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i64c
407*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
408*9880d681SAndroid Build Coastguard Worker
409*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec4i64 %a , <i64 3, i64 3, i64 3, i64 3>
410*9880d681SAndroid Build Coastguard Worker  ret %shifttypec4i64 %0
411*9880d681SAndroid Build Coastguard Worker}
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Worker%shifttypec8i64 = type <8 x i64>
414*9880d681SAndroid Build Coastguard Workerdefine %shifttypec8i64 @shift8i64c(%shifttypec8i64 %a, %shifttypec8i64 %b) {
415*9880d681SAndroid Build Coastguard Workerentry:
416*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i64c
417*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 4 {{.*}} lshr
418*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i64c
419*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Worker %0 = lshr %shifttypec8i64 %a , <i64 3, i64 3, i64 3, i64 3,
422*9880d681SAndroid Build Coastguard Worker                                 i64 3, i64 3, i64 3, i64 3>
423*9880d681SAndroid Build Coastguard Worker  ret %shifttypec8i64 %0
424*9880d681SAndroid Build Coastguard Worker}
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Worker%shifttypec16i64 = type <16 x i64>
427*9880d681SAndroid Build Coastguard Workerdefine %shifttypec16i64 @shift16i64c(%shifttypec16i64 %a, %shifttypec16i64 %b) {
428*9880d681SAndroid Build Coastguard Workerentry:
429*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i64c
430*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 8 {{.*}} lshr
431*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i64c
432*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
433*9880d681SAndroid Build Coastguard Worker
434*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec16i64 %a , <i64 3, i64 3, i64 3, i64 3,
435*9880d681SAndroid Build Coastguard Worker                                   i64 3, i64 3, i64 3, i64 3,
436*9880d681SAndroid Build Coastguard Worker                                   i64 3, i64 3, i64 3, i64 3,
437*9880d681SAndroid Build Coastguard Worker                                   i64 3, i64 3, i64 3, i64 3>
438*9880d681SAndroid Build Coastguard Worker  ret %shifttypec16i64 %0
439*9880d681SAndroid Build Coastguard Worker}
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Worker%shifttypec32i64 = type <32 x i64>
442*9880d681SAndroid Build Coastguard Workerdefine %shifttypec32i64 @shift32i64c(%shifttypec32i64 %a, %shifttypec32i64 %b) {
443*9880d681SAndroid Build Coastguard Workerentry:
444*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i64c
445*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 16 {{.*}} lshr
446*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i64c
447*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
448*9880d681SAndroid Build Coastguard Worker
449*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec32i64 %a ,<i64 3, i64 3, i64 3, i64 3,
450*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3,
451*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3,
452*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3,
453*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3,
454*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3,
455*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3,
456*9880d681SAndroid Build Coastguard Worker                                  i64 3, i64 3, i64 3, i64 3>
457*9880d681SAndroid Build Coastguard Worker  ret %shifttypec32i64 %0
458*9880d681SAndroid Build Coastguard Worker}
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Worker%shifttypec2i8 = type <2 x i8>
461*9880d681SAndroid Build Coastguard Workerdefine %shifttypec2i8 @shift2i8c(%shifttypec2i8 %a, %shifttypec2i8 %b) {
462*9880d681SAndroid Build Coastguard Workerentry:
463*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift2i8c
464*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
465*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift2i8c
466*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlq $3
467*9880d681SAndroid Build Coastguard Worker
468*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec2i8 %a , <i8 3, i8 3>
469*9880d681SAndroid Build Coastguard Worker  ret %shifttypec2i8 %0
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Worker%shifttypec4i8 = type <4 x i8>
473*9880d681SAndroid Build Coastguard Workerdefine %shifttypec4i8 @shift4i8c(%shifttypec4i8 %a, %shifttypec4i8 %b) {
474*9880d681SAndroid Build Coastguard Workerentry:
475*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift4i8c
476*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
477*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift4i8c
478*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrld $3
479*9880d681SAndroid Build Coastguard Worker
480*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec4i8 %a , <i8 3, i8 3, i8 3, i8 3>
481*9880d681SAndroid Build Coastguard Worker  ret %shifttypec4i8 %0
482*9880d681SAndroid Build Coastguard Worker}
483*9880d681SAndroid Build Coastguard Worker
484*9880d681SAndroid Build Coastguard Worker%shifttypec8i8 = type <8 x i8>
485*9880d681SAndroid Build Coastguard Workerdefine %shifttypec8i8 @shift8i8c(%shifttypec8i8 %a, %shifttypec8i8 %b) {
486*9880d681SAndroid Build Coastguard Workerentry:
487*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift8i8c
488*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
489*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift8i8c
490*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw $3
491*9880d681SAndroid Build Coastguard Worker
492*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec8i8 %a , <i8 3, i8 3, i8 3, i8 3,
493*9880d681SAndroid Build Coastguard Worker                                 i8 3, i8 3, i8 3, i8 3>
494*9880d681SAndroid Build Coastguard Worker  ret %shifttypec8i8 %0
495*9880d681SAndroid Build Coastguard Worker}
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard Worker%shifttypec16i8 = type <16 x i8>
498*9880d681SAndroid Build Coastguard Workerdefine %shifttypec16i8 @shift16i8c(%shifttypec16i8 %a, %shifttypec16i8 %b) {
499*9880d681SAndroid Build Coastguard Workerentry:
500*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift16i8c
501*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 1 {{.*}} lshr
502*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift16i8c
503*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw $3
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec16i8 %a , <i8 3, i8 3, i8 3, i8 3,
506*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
507*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
508*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3>
509*9880d681SAndroid Build Coastguard Worker  ret %shifttypec16i8 %0
510*9880d681SAndroid Build Coastguard Worker}
511*9880d681SAndroid Build Coastguard Worker
512*9880d681SAndroid Build Coastguard Worker%shifttypec32i8 = type <32 x i8>
513*9880d681SAndroid Build Coastguard Workerdefine %shifttypec32i8 @shift32i8c(%shifttypec32i8 %a, %shifttypec32i8 %b) {
514*9880d681SAndroid Build Coastguard Workerentry:
515*9880d681SAndroid Build Coastguard Worker  ; SSE2: shift32i8c
516*9880d681SAndroid Build Coastguard Worker  ; SSE2: cost of 2 {{.*}} lshr
517*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: shift32i8c
518*9880d681SAndroid Build Coastguard Worker  ; SSE2-CODEGEN: psrlw $3
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Worker  %0 = lshr %shifttypec32i8 %a , <i8 3, i8 3, i8 3, i8 3,
521*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
522*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
523*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
524*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
525*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
526*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3,
527*9880d681SAndroid Build Coastguard Worker                                  i8 3, i8 3, i8 3, i8 3>
528*9880d681SAndroid Build Coastguard Worker  ret %shifttypec32i8 %0
529*9880d681SAndroid Build Coastguard Worker}
530