[ELF] Avoid make in elf::writeARMCmseImportLib
[llvm-project.git] / llvm / test / CodeGen / Hexagon / autohvx / funnel-128b.ll
blobc69e76d2d4e60a01f76f3632dba7118dee3819c9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=hexagon -mattr=+hvxv60,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V60 %s
3 ; RUN: llc -march=hexagon -mattr=+hvxv62,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V62 %s
4 ; RUN: llc -march=hexagon -mattr=+hvxv66,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V66 %s
6 define <128 x i8> @f0(<128 x i8> %a0, <128 x i8> %a1, i8 %a2) #0 {
7 ; V60-LABEL: f0:
8 ; V60:       // %bb.0:
9 ; V60-NEXT:    {
10 ; V60-NEXT:     r0 = vsplatb(r0)
11 ; V60-NEXT:    }
12 ; V60-NEXT:    {
13 ; V60-NEXT:     r1 = ##117901063
14 ; V60-NEXT:    }
15 ; V60-NEXT:    {
16 ; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
17 ; V60-NEXT:    }
18 ; V60-NEXT:    {
19 ; V60-NEXT:     v2 = vsplat(r0)
20 ; V60-NEXT:    }
21 ; V60-NEXT:    {
22 ; V60-NEXT:     v3 = vsplat(r1)
23 ; V60-NEXT:    }
24 ; V60-NEXT:    {
25 ; V60-NEXT:     v2 = vand(v2,v3)
26 ; V60-NEXT:    }
27 ; V60-NEXT:    {
28 ; V60-NEXT:     v3:2.uh = vzxt(v2.ub)
29 ; V60-NEXT:    }
30 ; V60-NEXT:    {
31 ; V60-NEXT:     v0.h = vasl(v0.h,v2.h)
32 ; V60-NEXT:    }
33 ; V60-NEXT:    {
34 ; V60-NEXT:     v1.h = vasl(v1.h,v3.h)
35 ; V60-NEXT:    }
36 ; V60-NEXT:    {
37 ; V60-NEXT:     v0.b = vshuffo(v1.b,v0.b)
38 ; V60-NEXT:    }
39 ; V60-NEXT:    {
40 ; V60-NEXT:     jumpr r31
41 ; V60-NEXT:    }
43 ; V62-LABEL: f0:
44 ; V62:       // %bb.0:
45 ; V62-NEXT:    {
46 ; V62-NEXT:     r2 = #7
47 ; V62-NEXT:    }
48 ; V62-NEXT:    {
49 ; V62-NEXT:     v2.b = vsplat(r0)
50 ; V62-NEXT:    }
51 ; V62-NEXT:    {
52 ; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
53 ; V62-NEXT:    }
54 ; V62-NEXT:    {
55 ; V62-NEXT:     v3.b = vsplat(r2)
56 ; V62-NEXT:    }
57 ; V62-NEXT:    {
58 ; V62-NEXT:     v2 = vand(v2,v3)
59 ; V62-NEXT:    }
60 ; V62-NEXT:    {
61 ; V62-NEXT:     v3:2.uh = vzxt(v2.ub)
62 ; V62-NEXT:    }
63 ; V62-NEXT:    {
64 ; V62-NEXT:     v0.h = vasl(v0.h,v2.h)
65 ; V62-NEXT:    }
66 ; V62-NEXT:    {
67 ; V62-NEXT:     v1.h = vasl(v1.h,v3.h)
68 ; V62-NEXT:    }
69 ; V62-NEXT:    {
70 ; V62-NEXT:     v0.b = vshuffo(v1.b,v0.b)
71 ; V62-NEXT:    }
72 ; V62-NEXT:    {
73 ; V62-NEXT:     jumpr r31
74 ; V62-NEXT:    }
76 ; V66-LABEL: f0:
77 ; V66:       // %bb.0:
78 ; V66-NEXT:    {
79 ; V66-NEXT:     r2 = #7
80 ; V66-NEXT:    }
81 ; V66-NEXT:    {
82 ; V66-NEXT:     v2.b = vsplat(r0)
83 ; V66-NEXT:    }
84 ; V66-NEXT:    {
85 ; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
86 ; V66-NEXT:    }
87 ; V66-NEXT:    {
88 ; V66-NEXT:     v3.b = vsplat(r2)
89 ; V66-NEXT:    }
90 ; V66-NEXT:    {
91 ; V66-NEXT:     v2 = vand(v2,v3)
92 ; V66-NEXT:    }
93 ; V66-NEXT:    {
94 ; V66-NEXT:     v3:2.uh = vzxt(v2.ub)
95 ; V66-NEXT:    }
96 ; V66-NEXT:    {
97 ; V66-NEXT:     v0.h = vasl(v0.h,v2.h)
98 ; V66-NEXT:    }
99 ; V66-NEXT:    {
100 ; V66-NEXT:     v1.h = vasl(v1.h,v3.h)
101 ; V66-NEXT:    }
102 ; V66-NEXT:    {
103 ; V66-NEXT:     v0.b = vshuffo(v1.b,v0.b)
104 ; V66-NEXT:    }
105 ; V66-NEXT:    {
106 ; V66-NEXT:     jumpr r31
107 ; V66-NEXT:    }
108   %v0 = insertelement <128 x i8> undef, i8 %a2, i32 0
109   %v1 = shufflevector <128 x i8> %v0, <128 x i8> undef, <128 x i32> zeroinitializer
110   %v2 = call <128 x i8> @llvm.fshl.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %v1)
111   ret <128 x i8> %v2
114 define <64 x i16> @f1(<64 x i16> %a0, <64 x i16> %a1, i16 %a2) #0 {
115 ; V60-LABEL: f1:
116 ; V60:       // %bb.0:
117 ; V60-NEXT:    {
118 ; V60-NEXT:     r1 = and(r0,#15)
119 ; V60-NEXT:    }
120 ; V60-NEXT:    {
121 ; V60-NEXT:     p0 = bitsclr(r0,#15)
122 ; V60-NEXT:    }
123 ; V60-NEXT:    {
124 ; V60-NEXT:     v2.h = vasl(v0.h,r1)
125 ; V60-NEXT:    }
126 ; V60-NEXT:    {
127 ; V60-NEXT:     r1 = sub(#16,r1)
128 ; V60-NEXT:    }
129 ; V60-NEXT:    {
130 ; V60-NEXT:     v1.uh = vlsr(v1.uh,r1)
131 ; V60-NEXT:    }
132 ; V60-NEXT:    {
133 ; V60-NEXT:     v1 = vor(v2,v1)
134 ; V60-NEXT:    }
135 ; V60-NEXT:    {
136 ; V60-NEXT:     if (!p0) v0 = v1
137 ; V60-NEXT:    }
138 ; V60-NEXT:    {
139 ; V60-NEXT:     jumpr r31
140 ; V60-NEXT:    }
142 ; V62-LABEL: f1:
143 ; V62:       // %bb.0:
144 ; V62-NEXT:    {
145 ; V62-NEXT:     r1 = and(r0,#15)
146 ; V62-NEXT:    }
147 ; V62-NEXT:    {
148 ; V62-NEXT:     p0 = bitsclr(r0,#15)
149 ; V62-NEXT:    }
150 ; V62-NEXT:    {
151 ; V62-NEXT:     v2.h = vasl(v0.h,r1)
152 ; V62-NEXT:    }
153 ; V62-NEXT:    {
154 ; V62-NEXT:     r1 = sub(#16,r1)
155 ; V62-NEXT:    }
156 ; V62-NEXT:    {
157 ; V62-NEXT:     v1.uh = vlsr(v1.uh,r1)
158 ; V62-NEXT:    }
159 ; V62-NEXT:    {
160 ; V62-NEXT:     v1 = vor(v2,v1)
161 ; V62-NEXT:    }
162 ; V62-NEXT:    {
163 ; V62-NEXT:     if (!p0) v0 = v1
164 ; V62-NEXT:    }
165 ; V62-NEXT:    {
166 ; V62-NEXT:     jumpr r31
167 ; V62-NEXT:    }
169 ; V66-LABEL: f1:
170 ; V66:       // %bb.0:
171 ; V66-NEXT:    {
172 ; V66-NEXT:     r1 = and(r0,#15)
173 ; V66-NEXT:    }
174 ; V66-NEXT:    {
175 ; V66-NEXT:     p0 = bitsclr(r0,#15)
176 ; V66-NEXT:    }
177 ; V66-NEXT:    {
178 ; V66-NEXT:     v2.h = vasl(v0.h,r1)
179 ; V66-NEXT:    }
180 ; V66-NEXT:    {
181 ; V66-NEXT:     r1 = sub(#16,r1)
182 ; V66-NEXT:    }
183 ; V66-NEXT:    {
184 ; V66-NEXT:     v1.uh = vlsr(v1.uh,r1)
185 ; V66-NEXT:    }
186 ; V66-NEXT:    {
187 ; V66-NEXT:     v1 = vor(v2,v1)
188 ; V66-NEXT:    }
189 ; V66-NEXT:    {
190 ; V66-NEXT:     if (!p0) v0 = v1
191 ; V66-NEXT:    }
192 ; V66-NEXT:    {
193 ; V66-NEXT:     jumpr r31
194 ; V66-NEXT:    }
195   %v0 = insertelement <64 x i16> undef, i16 %a2, i32 0
196   %v1 = shufflevector <64 x i16> %v0, <64 x i16> undef, <64 x i32> zeroinitializer
197   %v2 = call <64 x i16> @llvm.fshl.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %v1)
198   ret <64 x i16> %v2
201 define <32 x i32> @f2(<32 x i32> %a0, <32 x i32> %a1, i32 %a2) #0 {
202 ; V60-LABEL: f2:
203 ; V60:       // %bb.0:
204 ; V60-NEXT:    {
205 ; V60-NEXT:     r1 = and(r0,#31)
206 ; V60-NEXT:    }
207 ; V60-NEXT:    {
208 ; V60-NEXT:     p0 = bitsclr(r0,#31)
209 ; V60-NEXT:    }
210 ; V60-NEXT:    {
211 ; V60-NEXT:     v2.w = vasl(v0.w,r1)
212 ; V60-NEXT:    }
213 ; V60-NEXT:    {
214 ; V60-NEXT:     r1 = sub(#32,r1)
215 ; V60-NEXT:    }
216 ; V60-NEXT:    {
217 ; V60-NEXT:     v1.uw = vlsr(v1.uw,r1)
218 ; V60-NEXT:    }
219 ; V60-NEXT:    {
220 ; V60-NEXT:     v1 = vor(v2,v1)
221 ; V60-NEXT:    }
222 ; V60-NEXT:    {
223 ; V60-NEXT:     if (!p0) v0 = v1
224 ; V60-NEXT:    }
225 ; V60-NEXT:    {
226 ; V60-NEXT:     jumpr r31
227 ; V60-NEXT:    }
229 ; V62-LABEL: f2:
230 ; V62:       // %bb.0:
231 ; V62-NEXT:    {
232 ; V62-NEXT:     r1 = and(r0,#31)
233 ; V62-NEXT:    }
234 ; V62-NEXT:    {
235 ; V62-NEXT:     p0 = bitsclr(r0,#31)
236 ; V62-NEXT:    }
237 ; V62-NEXT:    {
238 ; V62-NEXT:     v2.w = vasl(v0.w,r1)
239 ; V62-NEXT:    }
240 ; V62-NEXT:    {
241 ; V62-NEXT:     r1 = sub(#32,r1)
242 ; V62-NEXT:    }
243 ; V62-NEXT:    {
244 ; V62-NEXT:     v1.uw = vlsr(v1.uw,r1)
245 ; V62-NEXT:    }
246 ; V62-NEXT:    {
247 ; V62-NEXT:     v1 = vor(v2,v1)
248 ; V62-NEXT:    }
249 ; V62-NEXT:    {
250 ; V62-NEXT:     if (!p0) v0 = v1
251 ; V62-NEXT:    }
252 ; V62-NEXT:    {
253 ; V62-NEXT:     jumpr r31
254 ; V62-NEXT:    }
256 ; V66-LABEL: f2:
257 ; V66:       // %bb.0:
258 ; V66-NEXT:    {
259 ; V66-NEXT:     r0 = and(r0,#31)
260 ; V66-NEXT:    }
261 ; V66-NEXT:    {
262 ; V66-NEXT:     r1 = #32
263 ; V66-NEXT:    }
264 ; V66-NEXT:    {
265 ; V66-NEXT:     v4 = vxor(v4,v4)
266 ; V66-NEXT:    }
267 ; V66-NEXT:    {
268 ; V66-NEXT:     v2 = vsplat(r0)
269 ; V66-NEXT:    }
270 ; V66-NEXT:    {
271 ; V66-NEXT:     v3 = vsplat(r1)
272 ; V66-NEXT:    }
273 ; V66-NEXT:    {
274 ; V66-NEXT:     v3.w = vsub(v3.w,v2.w)
275 ; V66-NEXT:    }
276 ; V66-NEXT:    {
277 ; V66-NEXT:     v2.w = vsub(v4.w,v2.w)
278 ; V66-NEXT:    }
279 ; V66-NEXT:    {
280 ; V66-NEXT:     v4.w = vlsr(v1.w,v3.w)
281 ; V66-NEXT:    }
282 ; V66-NEXT:    {
283 ; V66-NEXT:     v5:4.w = vasrinto(v0.w,v2.w)
284 ; V66-NEXT:    }
285 ; V66-NEXT:    {
286 ; V66-NEXT:     v0 = v5
287 ; V66-NEXT:    }
288 ; V66-NEXT:    {
289 ; V66-NEXT:     jumpr r31
290 ; V66-NEXT:    }
291   %v0 = insertelement <32 x i32> undef, i32 %a2, i32 0
292   %v1 = shufflevector <32 x i32> %v0, <32 x i32> undef, <32 x i32> zeroinitializer
293   %v2 = call <32 x i32> @llvm.fshl.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %v1)
294   ret <32 x i32> %v2
297 define <128 x i8> @f3(<128 x i8> %a0, <128 x i8> %a1, i8 %a2) #0 {
298 ; V60-LABEL: f3:
299 ; V60:       // %bb.0:
300 ; V60-NEXT:    {
301 ; V60-NEXT:     r0 = vsplatb(r0)
302 ; V60-NEXT:    }
303 ; V60-NEXT:    {
304 ; V60-NEXT:     r1 = ##117901063
305 ; V60-NEXT:    }
306 ; V60-NEXT:    {
307 ; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
308 ; V60-NEXT:    }
309 ; V60-NEXT:    {
310 ; V60-NEXT:     v2 = vsplat(r0)
311 ; V60-NEXT:    }
312 ; V60-NEXT:    {
313 ; V60-NEXT:     v3 = vsplat(r1)
314 ; V60-NEXT:    }
315 ; V60-NEXT:    {
316 ; V60-NEXT:     v2 = vand(v2,v3)
317 ; V60-NEXT:    }
318 ; V60-NEXT:    {
319 ; V60-NEXT:     v3:2.uh = vzxt(v2.ub)
320 ; V60-NEXT:    }
321 ; V60-NEXT:    {
322 ; V60-NEXT:     v0.h = vlsr(v0.h,v2.h)
323 ; V60-NEXT:    }
324 ; V60-NEXT:    {
325 ; V60-NEXT:     v1.h = vlsr(v1.h,v3.h)
326 ; V60-NEXT:    }
327 ; V60-NEXT:    {
328 ; V60-NEXT:     v0.b = vshuffe(v1.b,v0.b)
329 ; V60-NEXT:    }
330 ; V60-NEXT:    {
331 ; V60-NEXT:     jumpr r31
332 ; V60-NEXT:    }
334 ; V62-LABEL: f3:
335 ; V62:       // %bb.0:
336 ; V62-NEXT:    {
337 ; V62-NEXT:     r2 = #7
338 ; V62-NEXT:    }
339 ; V62-NEXT:    {
340 ; V62-NEXT:     v2.b = vsplat(r0)
341 ; V62-NEXT:    }
342 ; V62-NEXT:    {
343 ; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
344 ; V62-NEXT:    }
345 ; V62-NEXT:    {
346 ; V62-NEXT:     v3.b = vsplat(r2)
347 ; V62-NEXT:    }
348 ; V62-NEXT:    {
349 ; V62-NEXT:     v2 = vand(v2,v3)
350 ; V62-NEXT:    }
351 ; V62-NEXT:    {
352 ; V62-NEXT:     v3:2.uh = vzxt(v2.ub)
353 ; V62-NEXT:    }
354 ; V62-NEXT:    {
355 ; V62-NEXT:     v0.h = vlsr(v0.h,v2.h)
356 ; V62-NEXT:    }
357 ; V62-NEXT:    {
358 ; V62-NEXT:     v1.h = vlsr(v1.h,v3.h)
359 ; V62-NEXT:    }
360 ; V62-NEXT:    {
361 ; V62-NEXT:     v0.b = vshuffe(v1.b,v0.b)
362 ; V62-NEXT:    }
363 ; V62-NEXT:    {
364 ; V62-NEXT:     jumpr r31
365 ; V62-NEXT:    }
367 ; V66-LABEL: f3:
368 ; V66:       // %bb.0:
369 ; V66-NEXT:    {
370 ; V66-NEXT:     r2 = #7
371 ; V66-NEXT:    }
372 ; V66-NEXT:    {
373 ; V66-NEXT:     v2.b = vsplat(r0)
374 ; V66-NEXT:    }
375 ; V66-NEXT:    {
376 ; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
377 ; V66-NEXT:    }
378 ; V66-NEXT:    {
379 ; V66-NEXT:     v3.b = vsplat(r2)
380 ; V66-NEXT:    }
381 ; V66-NEXT:    {
382 ; V66-NEXT:     v2 = vand(v2,v3)
383 ; V66-NEXT:    }
384 ; V66-NEXT:    {
385 ; V66-NEXT:     v3:2.uh = vzxt(v2.ub)
386 ; V66-NEXT:    }
387 ; V66-NEXT:    {
388 ; V66-NEXT:     v0.h = vlsr(v0.h,v2.h)
389 ; V66-NEXT:    }
390 ; V66-NEXT:    {
391 ; V66-NEXT:     v1.h = vlsr(v1.h,v3.h)
392 ; V66-NEXT:    }
393 ; V66-NEXT:    {
394 ; V66-NEXT:     v0.b = vshuffe(v1.b,v0.b)
395 ; V66-NEXT:    }
396 ; V66-NEXT:    {
397 ; V66-NEXT:     jumpr r31
398 ; V66-NEXT:    }
399   %v0 = insertelement <128 x i8> undef, i8 %a2, i32 0
400   %v1 = shufflevector <128 x i8> %v0, <128 x i8> undef, <128 x i32> zeroinitializer
401   %v2 = call <128 x i8> @llvm.fshr.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %v1)
402   ret <128 x i8> %v2
405 define <64 x i16> @f4(<64 x i16> %a0, <64 x i16> %a1, i16 %a2) #0 {
406 ; V60-LABEL: f4:
407 ; V60:       // %bb.0:
408 ; V60-NEXT:    {
409 ; V60-NEXT:     r1 = and(r0,#15)
410 ; V60-NEXT:    }
411 ; V60-NEXT:    {
412 ; V60-NEXT:     p0 = bitsclr(r0,#15)
413 ; V60-NEXT:    }
414 ; V60-NEXT:    {
415 ; V60-NEXT:     v2.uh = vlsr(v1.uh,r1)
416 ; V60-NEXT:    }
417 ; V60-NEXT:    {
418 ; V60-NEXT:     r1 = sub(#16,r1)
419 ; V60-NEXT:    }
420 ; V60-NEXT:    {
421 ; V60-NEXT:     v0.h = vasl(v0.h,r1)
422 ; V60-NEXT:    }
423 ; V60-NEXT:    {
424 ; V60-NEXT:     v0 = vor(v0,v2)
425 ; V60-NEXT:    }
426 ; V60-NEXT:    {
427 ; V60-NEXT:     if (p0) v0 = v1
428 ; V60-NEXT:    }
429 ; V60-NEXT:    {
430 ; V60-NEXT:     jumpr r31
431 ; V60-NEXT:    }
433 ; V62-LABEL: f4:
434 ; V62:       // %bb.0:
435 ; V62-NEXT:    {
436 ; V62-NEXT:     r1 = and(r0,#15)
437 ; V62-NEXT:    }
438 ; V62-NEXT:    {
439 ; V62-NEXT:     p0 = bitsclr(r0,#15)
440 ; V62-NEXT:    }
441 ; V62-NEXT:    {
442 ; V62-NEXT:     v2.uh = vlsr(v1.uh,r1)
443 ; V62-NEXT:    }
444 ; V62-NEXT:    {
445 ; V62-NEXT:     r1 = sub(#16,r1)
446 ; V62-NEXT:    }
447 ; V62-NEXT:    {
448 ; V62-NEXT:     v0.h = vasl(v0.h,r1)
449 ; V62-NEXT:    }
450 ; V62-NEXT:    {
451 ; V62-NEXT:     v0 = vor(v0,v2)
452 ; V62-NEXT:    }
453 ; V62-NEXT:    {
454 ; V62-NEXT:     if (p0) v0 = v1
455 ; V62-NEXT:    }
456 ; V62-NEXT:    {
457 ; V62-NEXT:     jumpr r31
458 ; V62-NEXT:    }
460 ; V66-LABEL: f4:
461 ; V66:       // %bb.0:
462 ; V66-NEXT:    {
463 ; V66-NEXT:     r1 = and(r0,#15)
464 ; V66-NEXT:    }
465 ; V66-NEXT:    {
466 ; V66-NEXT:     p0 = bitsclr(r0,#15)
467 ; V66-NEXT:    }
468 ; V66-NEXT:    {
469 ; V66-NEXT:     v2.uh = vlsr(v1.uh,r1)
470 ; V66-NEXT:    }
471 ; V66-NEXT:    {
472 ; V66-NEXT:     r1 = sub(#16,r1)
473 ; V66-NEXT:    }
474 ; V66-NEXT:    {
475 ; V66-NEXT:     v0.h = vasl(v0.h,r1)
476 ; V66-NEXT:    }
477 ; V66-NEXT:    {
478 ; V66-NEXT:     v0 = vor(v0,v2)
479 ; V66-NEXT:    }
480 ; V66-NEXT:    {
481 ; V66-NEXT:     if (p0) v0 = v1
482 ; V66-NEXT:    }
483 ; V66-NEXT:    {
484 ; V66-NEXT:     jumpr r31
485 ; V66-NEXT:    }
486   %v0 = insertelement <64 x i16> undef, i16 %a2, i32 0
487   %v1 = shufflevector <64 x i16> %v0, <64 x i16> undef, <64 x i32> zeroinitializer
488   %v2 = call <64 x i16> @llvm.fshr.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %v1)
489   ret <64 x i16> %v2
492 define <32 x i32> @f5(<32 x i32> %a0, <32 x i32> %a1, i32 %a2) #0 {
493 ; V60-LABEL: f5:
494 ; V60:       // %bb.0:
495 ; V60-NEXT:    {
496 ; V60-NEXT:     r1 = and(r0,#31)
497 ; V60-NEXT:    }
498 ; V60-NEXT:    {
499 ; V60-NEXT:     p0 = bitsclr(r0,#31)
500 ; V60-NEXT:    }
501 ; V60-NEXT:    {
502 ; V60-NEXT:     v2.uw = vlsr(v1.uw,r1)
503 ; V60-NEXT:    }
504 ; V60-NEXT:    {
505 ; V60-NEXT:     r1 = sub(#32,r1)
506 ; V60-NEXT:    }
507 ; V60-NEXT:    {
508 ; V60-NEXT:     v0.w = vasl(v0.w,r1)
509 ; V60-NEXT:    }
510 ; V60-NEXT:    {
511 ; V60-NEXT:     v0 = vor(v0,v2)
512 ; V60-NEXT:    }
513 ; V60-NEXT:    {
514 ; V60-NEXT:     if (p0) v0 = v1
515 ; V60-NEXT:    }
516 ; V60-NEXT:    {
517 ; V60-NEXT:     jumpr r31
518 ; V60-NEXT:    }
520 ; V62-LABEL: f5:
521 ; V62:       // %bb.0:
522 ; V62-NEXT:    {
523 ; V62-NEXT:     r1 = and(r0,#31)
524 ; V62-NEXT:    }
525 ; V62-NEXT:    {
526 ; V62-NEXT:     p0 = bitsclr(r0,#31)
527 ; V62-NEXT:    }
528 ; V62-NEXT:    {
529 ; V62-NEXT:     v2.uw = vlsr(v1.uw,r1)
530 ; V62-NEXT:    }
531 ; V62-NEXT:    {
532 ; V62-NEXT:     r1 = sub(#32,r1)
533 ; V62-NEXT:    }
534 ; V62-NEXT:    {
535 ; V62-NEXT:     v0.w = vasl(v0.w,r1)
536 ; V62-NEXT:    }
537 ; V62-NEXT:    {
538 ; V62-NEXT:     v0 = vor(v0,v2)
539 ; V62-NEXT:    }
540 ; V62-NEXT:    {
541 ; V62-NEXT:     if (p0) v0 = v1
542 ; V62-NEXT:    }
543 ; V62-NEXT:    {
544 ; V62-NEXT:     jumpr r31
545 ; V62-NEXT:    }
547 ; V66-LABEL: f5:
548 ; V66:       // %bb.0:
549 ; V66-NEXT:    {
550 ; V66-NEXT:     r0 = and(r0,#31)
551 ; V66-NEXT:    }
552 ; V66-NEXT:    {
553 ; V66-NEXT:     v3 = vsplat(r0)
554 ; V66-NEXT:    }
555 ; V66-NEXT:    {
556 ; V66-NEXT:     v2.w = vlsr(v1.w,v3.w)
557 ; V66-NEXT:    }
558 ; V66-NEXT:    {
559 ; V66-NEXT:     v3:2.w = vasrinto(v0.w,v3.w)
560 ; V66-NEXT:    }
561 ; V66-NEXT:    {
562 ; V66-NEXT:     v0 = v2
563 ; V66-NEXT:    }
564 ; V66-NEXT:    {
565 ; V66-NEXT:     jumpr r31
566 ; V66-NEXT:    }
567   %v0 = insertelement <32 x i32> undef, i32 %a2, i32 0
568   %v1 = shufflevector <32 x i32> %v0, <32 x i32> undef, <32 x i32> zeroinitializer
569   %v2 = call <32 x i32> @llvm.fshr.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %v1)
570   ret <32 x i32> %v2
573 define <128 x i8> @f6(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2) #0 {
574 ; V60-LABEL: f6:
575 ; V60:       // %bb.0:
576 ; V60-NEXT:    {
577 ; V60-NEXT:     r0 = ##117901063
578 ; V60-NEXT:    }
579 ; V60-NEXT:    {
580 ; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
581 ; V60-NEXT:    }
582 ; V60-NEXT:    {
583 ; V60-NEXT:     v3 = vsplat(r0)
584 ; V60-NEXT:    }
585 ; V60-NEXT:    {
586 ; V60-NEXT:     v2 = vand(v2,v3)
587 ; V60-NEXT:    }
588 ; V60-NEXT:    {
589 ; V60-NEXT:     v3:2.uh = vzxt(v2.ub)
590 ; V60-NEXT:    }
591 ; V60-NEXT:    {
592 ; V60-NEXT:     v0.h = vasl(v0.h,v2.h)
593 ; V60-NEXT:    }
594 ; V60-NEXT:    {
595 ; V60-NEXT:     v1.h = vasl(v1.h,v3.h)
596 ; V60-NEXT:    }
597 ; V60-NEXT:    {
598 ; V60-NEXT:     v0.b = vshuffo(v1.b,v0.b)
599 ; V60-NEXT:    }
600 ; V60-NEXT:    {
601 ; V60-NEXT:     jumpr r31
602 ; V60-NEXT:    }
604 ; V62-LABEL: f6:
605 ; V62:       // %bb.0:
606 ; V62-NEXT:    {
607 ; V62-NEXT:     r0 = #7
608 ; V62-NEXT:    }
609 ; V62-NEXT:    {
610 ; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
611 ; V62-NEXT:    }
612 ; V62-NEXT:    {
613 ; V62-NEXT:     v3.b = vsplat(r0)
614 ; V62-NEXT:    }
615 ; V62-NEXT:    {
616 ; V62-NEXT:     v2 = vand(v2,v3)
617 ; V62-NEXT:    }
618 ; V62-NEXT:    {
619 ; V62-NEXT:     v3:2.uh = vzxt(v2.ub)
620 ; V62-NEXT:    }
621 ; V62-NEXT:    {
622 ; V62-NEXT:     v0.h = vasl(v0.h,v2.h)
623 ; V62-NEXT:    }
624 ; V62-NEXT:    {
625 ; V62-NEXT:     v1.h = vasl(v1.h,v3.h)
626 ; V62-NEXT:    }
627 ; V62-NEXT:    {
628 ; V62-NEXT:     v0.b = vshuffo(v1.b,v0.b)
629 ; V62-NEXT:    }
630 ; V62-NEXT:    {
631 ; V62-NEXT:     jumpr r31
632 ; V62-NEXT:    }
634 ; V66-LABEL: f6:
635 ; V66:       // %bb.0:
636 ; V66-NEXT:    {
637 ; V66-NEXT:     r0 = #7
638 ; V66-NEXT:    }
639 ; V66-NEXT:    {
640 ; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
641 ; V66-NEXT:    }
642 ; V66-NEXT:    {
643 ; V66-NEXT:     v3.b = vsplat(r0)
644 ; V66-NEXT:    }
645 ; V66-NEXT:    {
646 ; V66-NEXT:     v2 = vand(v2,v3)
647 ; V66-NEXT:    }
648 ; V66-NEXT:    {
649 ; V66-NEXT:     v3:2.uh = vzxt(v2.ub)
650 ; V66-NEXT:    }
651 ; V66-NEXT:    {
652 ; V66-NEXT:     v0.h = vasl(v0.h,v2.h)
653 ; V66-NEXT:    }
654 ; V66-NEXT:    {
655 ; V66-NEXT:     v1.h = vasl(v1.h,v3.h)
656 ; V66-NEXT:    }
657 ; V66-NEXT:    {
658 ; V66-NEXT:     v0.b = vshuffo(v1.b,v0.b)
659 ; V66-NEXT:    }
660 ; V66-NEXT:    {
661 ; V66-NEXT:     jumpr r31
662 ; V66-NEXT:    }
663   %v0 = call <128 x i8> @llvm.fshl.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2)
664   ret <128 x i8> %v0
667 define <64 x i16> @f7(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2) #0 {
668 ; V60-LABEL: f7:
669 ; V60:       // %bb.0:
670 ; V60-NEXT:    {
671 ; V60-NEXT:     r0 = ##983055
672 ; V60-NEXT:    }
673 ; V60-NEXT:    {
674 ; V60-NEXT:     r1 = ##1048592
675 ; V60-NEXT:    }
676 ; V60-NEXT:    {
677 ; V60-NEXT:     v3 = vxor(v3,v3)
678 ; V60-NEXT:    }
679 ; V60-NEXT:    {
680 ; V60-NEXT:     v4 = vsplat(r0)
681 ; V60-NEXT:    }
682 ; V60-NEXT:    {
683 ; V60-NEXT:     v5 = vsplat(r1)
684 ; V60-NEXT:    }
685 ; V60-NEXT:    {
686 ; V60-NEXT:     v2 = vand(v2,v4)
687 ; V60-NEXT:    }
688 ; V60-NEXT:    {
689 ; V60-NEXT:     v4.h = vsub(v5.h,v2.h)
690 ; V60-NEXT:    }
691 ; V60-NEXT:    {
692 ; V60-NEXT:     q0 = vcmp.eq(v2.h,v3.h)
693 ; V60-NEXT:    }
694 ; V60-NEXT:    {
695 ; V60-NEXT:     v31.h = vasl(v0.h,v2.h)
696 ; V60-NEXT:    }
697 ; V60-NEXT:    {
698 ; V60-NEXT:     v1.h = vlsr(v1.h,v4.h)
699 ; V60-NEXT:    }
700 ; V60-NEXT:    {
701 ; V60-NEXT:     v1 = vor(v31,v1)
702 ; V60-NEXT:    }
703 ; V60-NEXT:    {
704 ; V60-NEXT:     v0 = vmux(q0,v0,v1)
705 ; V60-NEXT:    }
706 ; V60-NEXT:    {
707 ; V60-NEXT:     jumpr r31
708 ; V60-NEXT:    }
710 ; V62-LABEL: f7:
711 ; V62:       // %bb.0:
712 ; V62-NEXT:    {
713 ; V62-NEXT:     r1:0 = combine(#16,#15)
714 ; V62-NEXT:    }
715 ; V62-NEXT:    {
716 ; V62-NEXT:     v3.h = vsplat(r0)
717 ; V62-NEXT:    }
718 ; V62-NEXT:    {
719 ; V62-NEXT:     v4.h = vsplat(r1)
720 ; V62-NEXT:    }
721 ; V62-NEXT:    {
722 ; V62-NEXT:     v2 = vand(v2,v3)
723 ; V62-NEXT:    }
724 ; V62-NEXT:    {
725 ; V62-NEXT:     v3.h = vsub(v4.h,v2.h)
726 ; V62-NEXT:    }
727 ; V62-NEXT:    {
728 ; V62-NEXT:     v0.h = vasl(v0.h,v2.h)
729 ; V62-NEXT:    }
730 ; V62-NEXT:    {
731 ; V62-NEXT:     v1.h = vlsr(v1.h,v3.h)
732 ; V62-NEXT:    }
733 ; V62-NEXT:    {
734 ; V62-NEXT:     v0 = vor(v0,v1)
735 ; V62-NEXT:    }
736 ; V62-NEXT:    {
737 ; V62-NEXT:     jumpr r31
738 ; V62-NEXT:    }
740 ; V66-LABEL: f7:
741 ; V66:       // %bb.0:
742 ; V66-NEXT:    {
743 ; V66-NEXT:     r1:0 = combine(#16,#15)
744 ; V66-NEXT:    }
745 ; V66-NEXT:    {
746 ; V66-NEXT:     v3.h = vsplat(r0)
747 ; V66-NEXT:    }
748 ; V66-NEXT:    {
749 ; V66-NEXT:     v4.h = vsplat(r1)
750 ; V66-NEXT:    }
751 ; V66-NEXT:    {
752 ; V66-NEXT:     v2 = vand(v2,v3)
753 ; V66-NEXT:    }
754 ; V66-NEXT:    {
755 ; V66-NEXT:     v3.h = vsub(v4.h,v2.h)
756 ; V66-NEXT:    }
757 ; V66-NEXT:    {
758 ; V66-NEXT:     v0.h = vasl(v0.h,v2.h)
759 ; V66-NEXT:    }
760 ; V66-NEXT:    {
761 ; V66-NEXT:     v1.h = vlsr(v1.h,v3.h)
762 ; V66-NEXT:    }
763 ; V66-NEXT:    {
764 ; V66-NEXT:     v0 = vor(v0,v1)
765 ; V66-NEXT:    }
766 ; V66-NEXT:    {
767 ; V66-NEXT:     jumpr r31
768 ; V66-NEXT:    }
769   %v0 = call <64 x i16> @llvm.fshl.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2)
770   ret <64 x i16> %v0
773 define <32 x i32> @f8(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2) #0 {
774 ; V60-LABEL: f8:
775 ; V60:       // %bb.0:
776 ; V60-NEXT:    {
777 ; V60-NEXT:     r1:0 = combine(#32,#31)
778 ; V60-NEXT:    }
779 ; V60-NEXT:    {
780 ; V60-NEXT:     v3 = vxor(v3,v3)
781 ; V60-NEXT:    }
782 ; V60-NEXT:    {
783 ; V60-NEXT:     v4 = vsplat(r0)
784 ; V60-NEXT:    }
785 ; V60-NEXT:    {
786 ; V60-NEXT:     v5 = vsplat(r1)
787 ; V60-NEXT:    }
788 ; V60-NEXT:    {
789 ; V60-NEXT:     v2 = vand(v2,v4)
790 ; V60-NEXT:    }
791 ; V60-NEXT:    {
792 ; V60-NEXT:     v5.w = vsub(v5.w,v2.w)
793 ; V60-NEXT:    }
794 ; V60-NEXT:    {
795 ; V60-NEXT:     v4 = vand(v2,v4)
796 ; V60-NEXT:    }
797 ; V60-NEXT:    {
798 ; V60-NEXT:     v2.w = vasl(v0.w,v2.w)
799 ; V60-NEXT:    }
800 ; V60-NEXT:    {
801 ; V60-NEXT:     q0 = vcmp.eq(v4.w,v3.w)
802 ; V60-NEXT:    }
803 ; V60-NEXT:    {
804 ; V60-NEXT:     v1.w = vlsr(v1.w,v5.w)
805 ; V60-NEXT:    }
806 ; V60-NEXT:    {
807 ; V60-NEXT:     v1 = vor(v2,v1)
808 ; V60-NEXT:    }
809 ; V60-NEXT:    {
810 ; V60-NEXT:     v0 = vmux(q0,v0,v1)
811 ; V60-NEXT:    }
812 ; V60-NEXT:    {
813 ; V60-NEXT:     jumpr r31
814 ; V60-NEXT:    }
816 ; V62-LABEL: f8:
817 ; V62:       // %bb.0:
818 ; V62-NEXT:    {
819 ; V62-NEXT:     r1:0 = combine(#32,#31)
820 ; V62-NEXT:    }
821 ; V62-NEXT:    {
822 ; V62-NEXT:     v3 = vsplat(r0)
823 ; V62-NEXT:    }
824 ; V62-NEXT:    {
825 ; V62-NEXT:     v4 = vsplat(r1)
826 ; V62-NEXT:    }
827 ; V62-NEXT:    {
828 ; V62-NEXT:     v2 = vand(v2,v3)
829 ; V62-NEXT:    }
830 ; V62-NEXT:    {
831 ; V62-NEXT:     v3.w = vsub(v4.w,v2.w)
832 ; V62-NEXT:    }
833 ; V62-NEXT:    {
834 ; V62-NEXT:     v0.w = vasl(v0.w,v2.w)
835 ; V62-NEXT:    }
836 ; V62-NEXT:    {
837 ; V62-NEXT:     v1.w = vlsr(v1.w,v3.w)
838 ; V62-NEXT:    }
839 ; V62-NEXT:    {
840 ; V62-NEXT:     v0 = vor(v0,v1)
841 ; V62-NEXT:    }
842 ; V62-NEXT:    {
843 ; V62-NEXT:     jumpr r31
844 ; V62-NEXT:    }
846 ; V66-LABEL: f8:
847 ; V66:       // %bb.0:
848 ; V66-NEXT:    {
849 ; V66-NEXT:     r1:0 = combine(#32,#31)
850 ; V66-NEXT:    }
851 ; V66-NEXT:    {
852 ; V66-NEXT:     v31 = vxor(v31,v31)
853 ; V66-NEXT:    }
854 ; V66-NEXT:    {
855 ; V66-NEXT:     v3 = vsplat(r0)
856 ; V66-NEXT:    }
857 ; V66-NEXT:    {
858 ; V66-NEXT:     v4 = vsplat(r1)
859 ; V66-NEXT:    }
860 ; V66-NEXT:    {
861 ; V66-NEXT:     v2 = vand(v2,v3)
862 ; V66-NEXT:    }
863 ; V66-NEXT:    {
864 ; V66-NEXT:     v4.w = vsub(v4.w,v2.w)
865 ; V66-NEXT:    }
866 ; V66-NEXT:    {
867 ; V66-NEXT:     v2.w = vsub(v31.w,v2.w)
868 ; V66-NEXT:    }
869 ; V66-NEXT:    {
870 ; V66-NEXT:     v4.w = vlsr(v1.w,v4.w)
871 ; V66-NEXT:    }
872 ; V66-NEXT:    {
873 ; V66-NEXT:     v5:4.w = vasrinto(v0.w,v2.w)
874 ; V66-NEXT:    }
875 ; V66-NEXT:    {
876 ; V66-NEXT:     v0 = v5
877 ; V66-NEXT:    }
878 ; V66-NEXT:    {
879 ; V66-NEXT:     jumpr r31
880 ; V66-NEXT:    }
881   %v0 = call <32 x i32> @llvm.fshl.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2)
882   ret <32 x i32> %v0
885 define <128 x i8> @f9(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2) #0 {
886 ; V60-LABEL: f9:
887 ; V60:       // %bb.0:
888 ; V60-NEXT:    {
889 ; V60-NEXT:     r0 = ##117901063
890 ; V60-NEXT:    }
891 ; V60-NEXT:    {
892 ; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
893 ; V60-NEXT:    }
894 ; V60-NEXT:    {
895 ; V60-NEXT:     v3 = vsplat(r0)
896 ; V60-NEXT:    }
897 ; V60-NEXT:    {
898 ; V60-NEXT:     v2 = vand(v2,v3)
899 ; V60-NEXT:    }
900 ; V60-NEXT:    {
901 ; V60-NEXT:     v3:2.uh = vzxt(v2.ub)
902 ; V60-NEXT:    }
903 ; V60-NEXT:    {
904 ; V60-NEXT:     v0.h = vlsr(v0.h,v2.h)
905 ; V60-NEXT:    }
906 ; V60-NEXT:    {
907 ; V60-NEXT:     v1.h = vlsr(v1.h,v3.h)
908 ; V60-NEXT:    }
909 ; V60-NEXT:    {
910 ; V60-NEXT:     v0.b = vshuffe(v1.b,v0.b)
911 ; V60-NEXT:    }
912 ; V60-NEXT:    {
913 ; V60-NEXT:     jumpr r31
914 ; V60-NEXT:    }
916 ; V62-LABEL: f9:
917 ; V62:       // %bb.0:
918 ; V62-NEXT:    {
919 ; V62-NEXT:     r0 = #7
920 ; V62-NEXT:    }
921 ; V62-NEXT:    {
922 ; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
923 ; V62-NEXT:    }
924 ; V62-NEXT:    {
925 ; V62-NEXT:     v3.b = vsplat(r0)
926 ; V62-NEXT:    }
927 ; V62-NEXT:    {
928 ; V62-NEXT:     v2 = vand(v2,v3)
929 ; V62-NEXT:    }
930 ; V62-NEXT:    {
931 ; V62-NEXT:     v3:2.uh = vzxt(v2.ub)
932 ; V62-NEXT:    }
933 ; V62-NEXT:    {
934 ; V62-NEXT:     v0.h = vlsr(v0.h,v2.h)
935 ; V62-NEXT:    }
936 ; V62-NEXT:    {
937 ; V62-NEXT:     v1.h = vlsr(v1.h,v3.h)
938 ; V62-NEXT:    }
939 ; V62-NEXT:    {
940 ; V62-NEXT:     v0.b = vshuffe(v1.b,v0.b)
941 ; V62-NEXT:    }
942 ; V62-NEXT:    {
943 ; V62-NEXT:     jumpr r31
944 ; V62-NEXT:    }
946 ; V66-LABEL: f9:
947 ; V66:       // %bb.0:
948 ; V66-NEXT:    {
949 ; V66-NEXT:     r0 = #7
950 ; V66-NEXT:    }
951 ; V66-NEXT:    {
952 ; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)
953 ; V66-NEXT:    }
954 ; V66-NEXT:    {
955 ; V66-NEXT:     v3.b = vsplat(r0)
956 ; V66-NEXT:    }
957 ; V66-NEXT:    {
958 ; V66-NEXT:     v2 = vand(v2,v3)
959 ; V66-NEXT:    }
960 ; V66-NEXT:    {
961 ; V66-NEXT:     v3:2.uh = vzxt(v2.ub)
962 ; V66-NEXT:    }
963 ; V66-NEXT:    {
964 ; V66-NEXT:     v0.h = vlsr(v0.h,v2.h)
965 ; V66-NEXT:    }
966 ; V66-NEXT:    {
967 ; V66-NEXT:     v1.h = vlsr(v1.h,v3.h)
968 ; V66-NEXT:    }
969 ; V66-NEXT:    {
970 ; V66-NEXT:     v0.b = vshuffe(v1.b,v0.b)
971 ; V66-NEXT:    }
972 ; V66-NEXT:    {
973 ; V66-NEXT:     jumpr r31
974 ; V66-NEXT:    }
975   %v0 = call <128 x i8> @llvm.fshr.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2)
976   ret <128 x i8> %v0
979 define <64 x i16> @f10(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2) #0 {
980 ; V60-LABEL: f10:
981 ; V60:       // %bb.0:
982 ; V60-NEXT:    {
983 ; V60-NEXT:     r0 = ##983055
984 ; V60-NEXT:    }
985 ; V60-NEXT:    {
986 ; V60-NEXT:     r1 = ##1048592
987 ; V60-NEXT:    }
988 ; V60-NEXT:    {
989 ; V60-NEXT:     v3 = vxor(v3,v3)
990 ; V60-NEXT:    }
991 ; V60-NEXT:    {
992 ; V60-NEXT:     v4 = vsplat(r0)
993 ; V60-NEXT:    }
994 ; V60-NEXT:    {
995 ; V60-NEXT:     v5 = vsplat(r1)
996 ; V60-NEXT:    }
997 ; V60-NEXT:    {
998 ; V60-NEXT:     v2 = vand(v2,v4)
999 ; V60-NEXT:    }
1000 ; V60-NEXT:    {
1001 ; V60-NEXT:     v4.h = vsub(v5.h,v2.h)
1002 ; V60-NEXT:    }
1003 ; V60-NEXT:    {
1004 ; V60-NEXT:     q0 = vcmp.eq(v2.h,v3.h)
1005 ; V60-NEXT:    }
1006 ; V60-NEXT:    {
1007 ; V60-NEXT:     v31.h = vlsr(v1.h,v2.h)
1008 ; V60-NEXT:    }
1009 ; V60-NEXT:    {
1010 ; V60-NEXT:     v0.h = vasl(v0.h,v4.h)
1011 ; V60-NEXT:    }
1012 ; V60-NEXT:    {
1013 ; V60-NEXT:     v0 = vor(v0,v31)
1014 ; V60-NEXT:    }
1015 ; V60-NEXT:    {
1016 ; V60-NEXT:     v0 = vmux(q0,v1,v0)
1017 ; V60-NEXT:    }
1018 ; V60-NEXT:    {
1019 ; V60-NEXT:     jumpr r31
1020 ; V60-NEXT:    }
1022 ; V62-LABEL: f10:
1023 ; V62:       // %bb.0:
1024 ; V62-NEXT:    {
1025 ; V62-NEXT:     r1:0 = combine(#16,#15)
1026 ; V62-NEXT:    }
1027 ; V62-NEXT:    {
1028 ; V62-NEXT:     v3.h = vsplat(r0)
1029 ; V62-NEXT:    }
1030 ; V62-NEXT:    {
1031 ; V62-NEXT:     v4.h = vsplat(r1)
1032 ; V62-NEXT:    }
1033 ; V62-NEXT:    {
1034 ; V62-NEXT:     v2 = vand(v2,v3)
1035 ; V62-NEXT:    }
1036 ; V62-NEXT:    {
1037 ; V62-NEXT:     v3.h = vsub(v2.h,v4.h)
1038 ; V62-NEXT:    }
1039 ; V62-NEXT:    {
1040 ; V62-NEXT:     v1.h = vlsr(v1.h,v2.h)
1041 ; V62-NEXT:    }
1042 ; V62-NEXT:    {
1043 ; V62-NEXT:     v0.h = vlsr(v0.h,v3.h)
1044 ; V62-NEXT:    }
1045 ; V62-NEXT:    {
1046 ; V62-NEXT:     v0 = vor(v0,v1)
1047 ; V62-NEXT:    }
1048 ; V62-NEXT:    {
1049 ; V62-NEXT:     jumpr r31
1050 ; V62-NEXT:    }
1052 ; V66-LABEL: f10:
1053 ; V66:       // %bb.0:
1054 ; V66-NEXT:    {
1055 ; V66-NEXT:     r1:0 = combine(#16,#15)
1056 ; V66-NEXT:    }
1057 ; V66-NEXT:    {
1058 ; V66-NEXT:     v3.h = vsplat(r0)
1059 ; V66-NEXT:    }
1060 ; V66-NEXT:    {
1061 ; V66-NEXT:     v4.h = vsplat(r1)
1062 ; V66-NEXT:    }
1063 ; V66-NEXT:    {
1064 ; V66-NEXT:     v2 = vand(v2,v3)
1065 ; V66-NEXT:    }
1066 ; V66-NEXT:    {
1067 ; V66-NEXT:     v3.h = vsub(v2.h,v4.h)
1068 ; V66-NEXT:    }
1069 ; V66-NEXT:    {
1070 ; V66-NEXT:     v1.h = vlsr(v1.h,v2.h)
1071 ; V66-NEXT:    }
1072 ; V66-NEXT:    {
1073 ; V66-NEXT:     v0.h = vlsr(v0.h,v3.h)
1074 ; V66-NEXT:    }
1075 ; V66-NEXT:    {
1076 ; V66-NEXT:     v0 = vor(v0,v1)
1077 ; V66-NEXT:    }
1078 ; V66-NEXT:    {
1079 ; V66-NEXT:     jumpr r31
1080 ; V66-NEXT:    }
1081   %v0 = call <64 x i16> @llvm.fshr.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2)
1082   ret <64 x i16> %v0
1085 define <32 x i32> @f11(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2) #0 {
1086 ; V60-LABEL: f11:
1087 ; V60:       // %bb.0:
1088 ; V60-NEXT:    {
1089 ; V60-NEXT:     r1:0 = combine(#32,#31)
1090 ; V60-NEXT:    }
1091 ; V60-NEXT:    {
1092 ; V60-NEXT:     v3 = vxor(v3,v3)
1093 ; V60-NEXT:    }
1094 ; V60-NEXT:    {
1095 ; V60-NEXT:     v4 = vsplat(r0)
1096 ; V60-NEXT:    }
1097 ; V60-NEXT:    {
1098 ; V60-NEXT:     v5 = vsplat(r1)
1099 ; V60-NEXT:    }
1100 ; V60-NEXT:    {
1101 ; V60-NEXT:     v2 = vand(v2,v4)
1102 ; V60-NEXT:    }
1103 ; V60-NEXT:    {
1104 ; V60-NEXT:     v4.w = vsub(v5.w,v2.w)
1105 ; V60-NEXT:    }
1106 ; V60-NEXT:    {
1107 ; V60-NEXT:     q0 = vcmp.eq(v2.w,v3.w)
1108 ; V60-NEXT:    }
1109 ; V60-NEXT:    {
1110 ; V60-NEXT:     v31.w = vlsr(v1.w,v2.w)
1111 ; V60-NEXT:    }
1112 ; V60-NEXT:    {
1113 ; V60-NEXT:     v0.w = vasl(v0.w,v4.w)
1114 ; V60-NEXT:    }
1115 ; V60-NEXT:    {
1116 ; V60-NEXT:     v0 = vor(v0,v31)
1117 ; V60-NEXT:    }
1118 ; V60-NEXT:    {
1119 ; V60-NEXT:     v0 = vmux(q0,v1,v0)
1120 ; V60-NEXT:    }
1121 ; V60-NEXT:    {
1122 ; V60-NEXT:     jumpr r31
1123 ; V60-NEXT:    }
1125 ; V62-LABEL: f11:
1126 ; V62:       // %bb.0:
1127 ; V62-NEXT:    {
1128 ; V62-NEXT:     r1:0 = combine(#32,#31)
1129 ; V62-NEXT:    }
1130 ; V62-NEXT:    {
1131 ; V62-NEXT:     v3 = vsplat(r0)
1132 ; V62-NEXT:    }
1133 ; V62-NEXT:    {
1134 ; V62-NEXT:     v4 = vsplat(r1)
1135 ; V62-NEXT:    }
1136 ; V62-NEXT:    {
1137 ; V62-NEXT:     v2 = vand(v2,v3)
1138 ; V62-NEXT:    }
1139 ; V62-NEXT:    {
1140 ; V62-NEXT:     v3.w = vsub(v2.w,v4.w)
1141 ; V62-NEXT:    }
1142 ; V62-NEXT:    {
1143 ; V62-NEXT:     v1.w = vlsr(v1.w,v2.w)
1144 ; V62-NEXT:    }
1145 ; V62-NEXT:    {
1146 ; V62-NEXT:     v0.w = vlsr(v0.w,v3.w)
1147 ; V62-NEXT:    }
1148 ; V62-NEXT:    {
1149 ; V62-NEXT:     v0 = vor(v0,v1)
1150 ; V62-NEXT:    }
1151 ; V62-NEXT:    {
1152 ; V62-NEXT:     jumpr r31
1153 ; V62-NEXT:    }
1155 ; V66-LABEL: f11:
1156 ; V66:       // %bb.0:
1157 ; V66-NEXT:    {
1158 ; V66-NEXT:     r0 = #31
1159 ; V66-NEXT:    }
1160 ; V66-NEXT:    {
1161 ; V66-NEXT:     v3 = vsplat(r0)
1162 ; V66-NEXT:    }
1163 ; V66-NEXT:    {
1164 ; V66-NEXT:     v3 = vand(v2,v3)
1165 ; V66-NEXT:    }
1166 ; V66-NEXT:    {
1167 ; V66-NEXT:     v2.w = vlsr(v1.w,v3.w)
1168 ; V66-NEXT:    }
1169 ; V66-NEXT:    {
1170 ; V66-NEXT:     v3:2.w = vasrinto(v0.w,v3.w)
1171 ; V66-NEXT:    }
1172 ; V66-NEXT:    {
1173 ; V66-NEXT:     v0 = v2
1174 ; V66-NEXT:    }
1175 ; V66-NEXT:    {
1176 ; V66-NEXT:     jumpr r31
1177 ; V66-NEXT:    }
1178   %v0 = call <32 x i32> @llvm.fshr.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2)
1179   ret <32 x i32> %v0
1182 declare <128 x i8> @llvm.fshl.v128i8(<128 x i8>, <128 x i8>, <128 x i8>)
1183 declare <128 x i8> @llvm.fshr.v128i8(<128 x i8>, <128 x i8>, <128 x i8>)
1184 declare <64 x i16> @llvm.fshl.v64i16(<64 x i16>, <64 x i16>, <64 x i16>)
1185 declare <64 x i16> @llvm.fshr.v64i16(<64 x i16>, <64 x i16>, <64 x i16>)
1186 declare <32 x i32> @llvm.fshl.v32i32(<32 x i32>, <32 x i32>, <32 x i32>)
1187 declare <32 x i32> @llvm.fshr.v32i32(<32 x i32>, <32 x i32>, <32 x i32>)
1189 attributes #0 = { nounwind }