[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-vector-shift.mir
blob332b300ceaf88687529a2dafd89af41a8db4cfa7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3 ---
4 name:            shl_v2i32
5 alignment:       4
6 legalized:       true
7 regBankSelected: true
8 tracksRegLiveness: true
9 registers:
10   - { id: 0, class: fpr }
11   - { id: 1, class: fpr }
12   - { id: 2, class: fpr }
13 machineFunctionInfo: {}
14 body:             |
15   bb.1:
16     liveins: $d0, $d1
18     ; CHECK-LABEL: name: shl_v2i32
19     ; CHECK: liveins: $d0, $d1
20     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
21     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
22     ; CHECK: [[USHLv2i32_:%[0-9]+]]:fpr64 = USHLv2i32 [[COPY]], [[COPY1]]
23     ; CHECK: $d0 = COPY [[USHLv2i32_]]
24     ; CHECK: RET_ReallyLR implicit $d0
25     %0:fpr(<2 x s32>) = COPY $d0
26     %1:fpr(<2 x s32>) = COPY $d1
27     %2:fpr(<2 x s32>) = G_SHL %0, %1(<2 x s32>)
28     $d0 = COPY %2(<2 x s32>)
29     RET_ReallyLR implicit $d0
31 ...
32 ---
33 name:            shl_v2i32_imm
34 alignment:       4
35 legalized:       true
36 regBankSelected: true
37 tracksRegLiveness: true
38 registers:
39   - { id: 0, class: fpr }
40   - { id: 1, class: fpr }
41   - { id: 2, class: gpr }
42   - { id: 3, class: fpr }
43 liveins:
44   - { reg: '$d0' }
45 frameInfo:
46   maxAlignment:    1
47 machineFunctionInfo: {}
48 body:             |
49   bb.1:
50     liveins: $d0
52     ; CHECK-LABEL: name: shl_v2i32_imm
53     ; CHECK: liveins: $d0
54     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
55     ; CHECK: [[SHLv2i32_shift:%[0-9]+]]:fpr64 = SHLv2i32_shift [[COPY]], 24
56     ; CHECK: $d0 = COPY [[SHLv2i32_shift]]
57     ; CHECK: RET_ReallyLR implicit $d0
58     %0:fpr(<2 x s32>) = COPY $d0
59     %2:gpr(s32) = G_CONSTANT i32 24
60     %1:fpr(<2 x s32>) = G_BUILD_VECTOR %2(s32), %2(s32)
61     %3:fpr(<2 x s32>) = G_SHL %0, %1(<2 x s32>)
62     $d0 = COPY %3(<2 x s32>)
63     RET_ReallyLR implicit $d0
65 ...
66 ---
67 name:            shl_v2i32_imm_out_of_range
68 alignment:       4
69 legalized:       true
70 regBankSelected: true
71 tracksRegLiveness: true
72 registers:
73   - { id: 0, class: fpr }
74   - { id: 1, class: fpr }
75   - { id: 2, class: gpr }
76   - { id: 3, class: fpr }
77 liveins:
78   - { reg: '$d0' }
79 frameInfo:
80   maxAlignment:    1
81 machineFunctionInfo: {}
82 body:             |
83   bb.1:
84     liveins: $d0
86     ; CHECK-LABEL: name: shl_v2i32_imm_out_of_range
87     ; CHECK: liveins: $d0
88     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
89     ; CHECK: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) %const.0
90     ; CHECK: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) %const.0
91     ; CHECK: [[USHLv2i32_:%[0-9]+]]:fpr64 = USHLv2i32 [[COPY]], [[LDRDui]]
92     ; CHECK: $d0 = COPY [[USHLv2i32_]]
93     ; CHECK: RET_ReallyLR implicit $d0
94     %0:fpr(<2 x s32>) = COPY $d0
95     %2:gpr(s32) = G_CONSTANT i32 40
96     %1:fpr(<2 x s32>) = G_BUILD_VECTOR %2(s32), %2(s32)
97     %3:fpr(<2 x s32>) = G_SHL %0, %1(<2 x s32>)
98     $d0 = COPY %3(<2 x s32>)
99     RET_ReallyLR implicit $d0
103 name:            shl_v4i32
104 alignment:       4
105 legalized:       true
106 regBankSelected: true
107 tracksRegLiveness: true
108 registers:
109   - { id: 0, class: fpr }
110   - { id: 1, class: fpr }
111   - { id: 2, class: fpr }
112 machineFunctionInfo: {}
113 body:             |
114   bb.1:
115     liveins: $q0, $q1
117     ; CHECK-LABEL: name: shl_v4i32
118     ; CHECK: liveins: $q0, $q1
119     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
120     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
121     ; CHECK: [[USHLv4i32_:%[0-9]+]]:fpr128 = USHLv4i32 [[COPY]], [[COPY1]]
122     ; CHECK: $q0 = COPY [[USHLv4i32_]]
123     ; CHECK: RET_ReallyLR implicit $q0
124     %0:fpr(<4 x s32>) = COPY $q0
125     %1:fpr(<4 x s32>) = COPY $q1
126     %2:fpr(<4 x s32>) = G_SHL %0, %1(<4 x s32>)
127     $q0 = COPY %2(<4 x s32>)
128     RET_ReallyLR implicit $q0
132 name:            shl_v4i32_imm
133 alignment:       4
134 legalized:       true
135 regBankSelected: true
136 tracksRegLiveness: true
137 registers:
138   - { id: 0, class: fpr }
139   - { id: 1, class: fpr }
140   - { id: 2, class: gpr }
141   - { id: 3, class: fpr }
142 liveins:
143   - { reg: '$q0' }
144 frameInfo:
145   maxAlignment:    1
146 machineFunctionInfo: {}
147 body:             |
148   bb.1:
149     liveins: $q0
151     ; CHECK-LABEL: name: shl_v4i32_imm
152     ; CHECK: liveins: $q0
153     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
154     ; CHECK: [[SHLv4i32_shift:%[0-9]+]]:fpr128 = SHLv4i32_shift [[COPY]], 24
155     ; CHECK: $q0 = COPY [[SHLv4i32_shift]]
156     ; CHECK: RET_ReallyLR implicit $q0
157     %0:fpr(<4 x s32>) = COPY $q0
158     %2:gpr(s32) = G_CONSTANT i32 24
159     %1:fpr(<4 x s32>) = G_BUILD_VECTOR %2(s32), %2(s32), %2(s32), %2(s32)
160     %3:fpr(<4 x s32>) = G_SHL %0, %1(<4 x s32>)
161     $q0 = COPY %3(<4 x s32>)
162     RET_ReallyLR implicit $q0
166 name:            shl_v2i64
167 alignment:       4
168 legalized:       true
169 regBankSelected: true
170 tracksRegLiveness: true
171 registers:
172   - { id: 0, class: fpr }
173   - { id: 1, class: fpr }
174   - { id: 2, class: fpr }
175 machineFunctionInfo: {}
176 body:             |
177   bb.1:
178     liveins: $q0, $q1
180     ; CHECK-LABEL: name: shl_v2i64
181     ; CHECK: liveins: $q0, $q1
182     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
183     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
184     ; CHECK: [[USHLv2i64_:%[0-9]+]]:fpr128 = USHLv2i64 [[COPY]], [[COPY1]]
185     ; CHECK: $q0 = COPY [[USHLv2i64_]]
186     ; CHECK: RET_ReallyLR implicit $q0
187     %0:fpr(<2 x s64>) = COPY $q0
188     %1:fpr(<2 x s64>) = COPY $q1
189     %2:fpr(<2 x s64>) = G_SHL %0, %1(<2 x s64>)
190     $q0 = COPY %2(<2 x s64>)
191     RET_ReallyLR implicit $q0
195 name:            shl_v2i64_imm
196 alignment:       4
197 legalized:       true
198 regBankSelected: true
199 tracksRegLiveness: true
200 registers:
201   - { id: 0, class: fpr }
202   - { id: 1, class: fpr }
203   - { id: 2, class: gpr }
204   - { id: 3, class: fpr }
205 liveins:
206   - { reg: '$q0' }
207 frameInfo:
208   maxAlignment:    1
209 machineFunctionInfo: {}
210 body:             |
211   bb.1:
212     liveins: $q0
214     ; CHECK-LABEL: name: shl_v2i64_imm
215     ; CHECK: liveins: $q0
216     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
217     ; CHECK: [[SHLv2i64_shift:%[0-9]+]]:fpr128 = SHLv2i64_shift [[COPY]], 24
218     ; CHECK: $q0 = COPY [[SHLv2i64_shift]]
219     ; CHECK: RET_ReallyLR implicit $q0
220     %0:fpr(<2 x s64>) = COPY $q0
221     %2:gpr(s64) = G_CONSTANT i64 24
222     %1:fpr(<2 x s64>) = G_BUILD_VECTOR %2(s64), %2(s64)
223     %3:fpr(<2 x s64>) = G_SHL %0, %1(<2 x s64>)
224     $q0 = COPY %3(<2 x s64>)
225     RET_ReallyLR implicit $q0
229 name:            shl_v2i64_imm_out_of_range
230 alignment:       4
231 legalized:       true
232 regBankSelected: true
233 tracksRegLiveness: true
234 registers:
235   - { id: 0, class: fpr }
236   - { id: 1, class: fpr }
237   - { id: 2, class: gpr }
238   - { id: 3, class: fpr }
239 liveins:
240   - { reg: '$q0' }
241 frameInfo:
242   maxAlignment:    1
243 machineFunctionInfo: {}
244 body:             |
245   bb.1:
246     liveins: $q0
248     ; CHECK-LABEL: name: shl_v2i64_imm_out_of_range
249     ; CHECK: liveins: $q0
250     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
251     ; CHECK: [[ADRP:%[0-9]+]]:gpr64common = ADRP target-flags(aarch64-page) %const.0
252     ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) %const.0
253     ; CHECK: [[USHLv2i64_:%[0-9]+]]:fpr128 = USHLv2i64 [[COPY]], [[LDRQui]]
254     ; CHECK: $q0 = COPY [[USHLv2i64_]]
255     ; CHECK: RET_ReallyLR implicit $q0
256     %0:fpr(<2 x s64>) = COPY $q0
257     %2:gpr(s64) = G_CONSTANT i64 70
258     %1:fpr(<2 x s64>) = G_BUILD_VECTOR %2(s64), %2(s64)
259     %3:fpr(<2 x s64>) = G_SHL %0, %1(<2 x s64>)
260     $q0 = COPY %3(<2 x s64>)
261     RET_ReallyLR implicit $q0
265 name:            ashr_v2i32
266 alignment:       4
267 legalized:       true
268 regBankSelected: true
269 tracksRegLiveness: true
270 registers:
271   - { id: 0, class: fpr }
272   - { id: 1, class: fpr }
273   - { id: 2, class: fpr }
274 machineFunctionInfo: {}
275 body:             |
276   bb.1:
277     liveins: $d0, $d1
279     ; CHECK-LABEL: name: ashr_v2i32
280     ; CHECK: liveins: $d0, $d1
281     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
282     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
283     ; CHECK: [[NEGv2i32_:%[0-9]+]]:fpr64 = NEGv2i32 [[COPY1]]
284     ; CHECK: [[SSHLv2i32_:%[0-9]+]]:fpr64 = SSHLv2i32 [[COPY]], [[NEGv2i32_]]
285     ; CHECK: $d0 = COPY [[SSHLv2i32_]]
286     ; CHECK: RET_ReallyLR implicit $d0
287     %0:fpr(<2 x s32>) = COPY $d0
288     %1:fpr(<2 x s32>) = COPY $d1
289     %2:fpr(<2 x s32>) = G_ASHR %0, %1(<2 x s32>)
290     $d0 = COPY %2(<2 x s32>)
291     RET_ReallyLR implicit $d0
295 name:            ashr_v4i32
296 alignment:       4
297 legalized:       true
298 regBankSelected: true
299 tracksRegLiveness: true
300 registers:
301   - { id: 0, class: fpr }
302   - { id: 1, class: fpr }
303   - { id: 2, class: fpr }
304 machineFunctionInfo: {}
305 body:             |
306   bb.1:
307     liveins: $q0, $q1
309     ; CHECK-LABEL: name: ashr_v4i32
310     ; CHECK: liveins: $q0, $q1
311     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
312     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
313     ; CHECK: [[NEGv4i32_:%[0-9]+]]:fpr128 = NEGv4i32 [[COPY1]]
314     ; CHECK: [[SSHLv4i32_:%[0-9]+]]:fpr128 = SSHLv4i32 [[COPY]], [[NEGv4i32_]]
315     ; CHECK: $q0 = COPY [[SSHLv4i32_]]
316     ; CHECK: RET_ReallyLR implicit $q0
317     %0:fpr(<4 x s32>) = COPY $q0
318     %1:fpr(<4 x s32>) = COPY $q1
319     %2:fpr(<4 x s32>) = G_ASHR %0, %1(<4 x s32>)
320     $q0 = COPY %2(<4 x s32>)
321     RET_ReallyLR implicit $q0
325 name:            ashr_v2i64
326 alignment:       4
327 legalized:       true
328 regBankSelected: true
329 tracksRegLiveness: true
330 registers:
331   - { id: 0, class: fpr }
332   - { id: 1, class: fpr }
333   - { id: 2, class: fpr }
334 machineFunctionInfo: {}
335 body:             |
336   bb.1:
337     liveins: $q0, $q1
339     ; CHECK-LABEL: name: ashr_v2i64
340     ; CHECK: liveins: $q0, $q1
341     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
342     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
343     ; CHECK: [[NEGv2i64_:%[0-9]+]]:fpr128 = NEGv2i64 [[COPY1]]
344     ; CHECK: [[SSHLv2i64_:%[0-9]+]]:fpr128 = SSHLv2i64 [[COPY]], [[NEGv2i64_]]
345     ; CHECK: $q0 = COPY [[SSHLv2i64_]]
346     ; CHECK: RET_ReallyLR implicit $q0
347     %0:fpr(<2 x s64>) = COPY $q0
348     %1:fpr(<2 x s64>) = COPY $q1
349     %2:fpr(<2 x s64>) = G_ASHR %0, %1(<2 x s64>)
350     $q0 = COPY %2(<2 x s64>)
351     RET_ReallyLR implicit $q0
355 name:            shl_v4i16
356 legalized:       true
357 regBankSelected: true
358 tracksRegLiveness: true
359 body:             |
360   bb.1:
361     liveins: $d0, $d1
362     ; CHECK-LABEL: name: shl_v4i16
363     ; CHECK: liveins: $d0, $d1
364     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
365     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
366     ; CHECK: [[USHLv4i16_:%[0-9]+]]:fpr64 = USHLv4i16 [[COPY]], [[COPY1]]
367     ; CHECK: $d0 = COPY [[USHLv4i16_]]
368     ; CHECK: RET_ReallyLR implicit $d0
369     %0:fpr(<4 x s16>) = COPY $d0
370     %1:fpr(<4 x s16>) = COPY $d1
371     %2:fpr(<4 x s16>) = G_SHL %0, %1(<4 x s16>)
372     $d0 = COPY %2(<4 x s16>)
373     RET_ReallyLR implicit $d0
376 name:            lshr_v4i16
377 legalized:       true
378 regBankSelected: true
379 tracksRegLiveness: true
380 body:             |
381   bb.1:
382     liveins: $d0, $d1
383     ; CHECK-LABEL: name: lshr_v4i16
384     ; CHECK: liveins: $d0, $d1
385     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
386     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
387     ; CHECK: [[NEGv4i16_:%[0-9]+]]:fpr64 = NEGv4i16 [[COPY1]]
388     ; CHECK: [[USHLv4i16_:%[0-9]+]]:fpr64 = USHLv4i16 [[COPY]], [[NEGv4i16_]]
389     ; CHECK: $d0 = COPY [[USHLv4i16_]]
390     ; CHECK: RET_ReallyLR implicit $d0
391     %0:fpr(<4 x s16>) = COPY $d0
392     %1:fpr(<4 x s16>) = COPY $d1
393     %2:fpr(<4 x s16>) = G_LSHR %0, %1(<4 x s16>)
394     $d0 = COPY %2(<4 x s16>)
395     RET_ReallyLR implicit $d0
398 name:            lshr_v4i32
399 alignment:       4
400 legalized:       true
401 regBankSelected: true
402 tracksRegLiveness: true
403 registers:
404   - { id: 0, class: fpr }
405   - { id: 1, class: fpr }
406   - { id: 2, class: fpr }
407 machineFunctionInfo: {}
408 body:             |
409   bb.1:
410     liveins: $q0, $q1
412     ; CHECK-LABEL: name: lshr_v4i32
413     ; CHECK: liveins: $q0, $q1
414     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
415     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
416     ; CHECK: [[NEGv4i32_:%[0-9]+]]:fpr128 = NEGv4i32 [[COPY1]]
417     ; CHECK: [[USHLv4i32_:%[0-9]+]]:fpr128 = USHLv4i32 [[COPY]], [[NEGv4i32_]]
418     ; CHECK: $q0 = COPY [[USHLv4i32_]]
419     ; CHECK: RET_ReallyLR implicit $q0
420     %0:fpr(<4 x s32>) = COPY $q0
421     %1:fpr(<4 x s32>) = COPY $q1
422     %2:fpr(<4 x s32>) = G_LSHR %0, %1(<4 x s32>)
423     $q0 = COPY %2(<4 x s32>)
424     RET_ReallyLR implicit $q0
428 name:            lshr_v8i16
429 legalized:       true
430 regBankSelected: true
431 tracksRegLiveness: true
432 body:             |
433   bb.1:
434     liveins: $q0, $q1
435     ; CHECK-LABEL: name: lshr_v8i16
436     ; CHECK: liveins: $q0, $q1
437     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
438     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
439     ; CHECK: [[NEGv8i16_:%[0-9]+]]:fpr128 = NEGv8i16 [[COPY1]]
440     ; CHECK: [[USHLv8i16_:%[0-9]+]]:fpr128 = USHLv8i16 [[COPY]], [[NEGv8i16_]]
441     ; CHECK: $q0 = COPY [[USHLv8i16_]]
442     ; CHECK: RET_ReallyLR implicit $q0
443     %0:fpr(<8 x s16>) = COPY $q0
444     %1:fpr(<8 x s16>) = COPY $q1
445     %2:fpr(<8 x s16>) = G_LSHR %0, %1(<8 x s16>)
446     $q0 = COPY %2(<8 x s16>)
447     RET_ReallyLR implicit $q0
450 name:            ashr_v4i16
451 legalized:       true
452 regBankSelected: true
453 tracksRegLiveness: true
454 body:             |
455   bb.1:
456     liveins: $d0, $d1
457     ; CHECK-LABEL: name: ashr_v4i16
458     ; CHECK: liveins: $d0, $d1
459     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
460     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
461     ; CHECK: [[NEGv4i16_:%[0-9]+]]:fpr64 = NEGv4i16 [[COPY1]]
462     ; CHECK: [[SSHLv4i16_:%[0-9]+]]:fpr64 = SSHLv4i16 [[COPY]], [[NEGv4i16_]]
463     ; CHECK: $d0 = COPY [[SSHLv4i16_]]
464     ; CHECK: RET_ReallyLR implicit $d0
465     %0:fpr(<4 x s16>) = COPY $d0
466     %1:fpr(<4 x s16>) = COPY $d1
467     %2:fpr(<4 x s16>) = G_ASHR %0, %1(<4 x s16>)
468     $d0 = COPY %2(<4 x s16>)
469     RET_ReallyLR implicit $d0
472 name:            vashr_v4i16_imm
473 legalized:       true
474 regBankSelected: true
475 tracksRegLiveness: true
476 body:             |
477   bb.1:
478     liveins: $d0, $d1
479     ; CHECK-LABEL: name: vashr_v4i16_imm
480     ; CHECK: liveins: $d0, $d1
481     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
482     ; CHECK: [[SSHRv4i16_shift:%[0-9]+]]:fpr64 = SSHRv4i16_shift [[COPY]], 5
483     ; CHECK: $d0 = COPY [[SSHRv4i16_shift]]
484     ; CHECK: RET_ReallyLR implicit $d0
485     %0:fpr(<4 x s16>) = COPY $d0
486     %1:gpr(s32) = G_CONSTANT i32 5
487     %2:fpr(<4 x s16>) = G_VASHR %0, %1
488     $d0 = COPY %2(<4 x s16>)
489     RET_ReallyLR implicit $d0
492 name:            vlshr_v4i16_imm
493 legalized:       true
494 regBankSelected: true
495 tracksRegLiveness: true
496 body:             |
497   bb.1:
498     liveins: $d0, $d1
499     ; CHECK-LABEL: name: vlshr_v4i16_imm
500     ; CHECK: liveins: $d0, $d1
501     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
502     ; CHECK: [[USHRv4i16_shift:%[0-9]+]]:fpr64 = USHRv4i16_shift [[COPY]], 5
503     ; CHECK: $d0 = COPY [[USHRv4i16_shift]]
504     ; CHECK: RET_ReallyLR implicit $d0
505     %0:fpr(<4 x s16>) = COPY $d0
506     %1:gpr(s32) = G_CONSTANT i32 5
507     %2:fpr(<4 x s16>) = G_VLSHR %0, %1
508     $d0 = COPY %2(<4 x s16>)
509     RET_ReallyLR implicit $d0
512 name:            shl_v8i16
513 legalized:       true
514 regBankSelected: true
515 tracksRegLiveness: true
516 body:             |
517   bb.1:
518     liveins: $q0, $q1
519     ; CHECK-LABEL: name: shl_v8i16
520     ; CHECK: liveins: $q0, $q1
521     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
522     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
523     ; CHECK: [[USHLv8i16_:%[0-9]+]]:fpr128 = USHLv8i16 [[COPY]], [[COPY1]]
524     ; CHECK: $q0 = COPY [[USHLv8i16_]]
525     ; CHECK: RET_ReallyLR implicit $q0
526     %0:fpr(<8 x s16>) = COPY $q0
527     %1:fpr(<8 x s16>) = COPY $q1
528     %2:fpr(<8 x s16>) = G_SHL %0, %1(<8 x s16>)
529     $q0 = COPY %2(<8 x s16>)
530     RET_ReallyLR implicit $q0
533 name:            shl_v16i8
534 legalized:       true
535 regBankSelected: true
536 tracksRegLiveness: true
537 body:             |
538   bb.1:
539     liveins: $q0, $q1
540     ; CHECK-LABEL: name: shl_v16i8
541     ; CHECK: liveins: $q0, $q1
542     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
543     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
544     ; CHECK: [[USHLv16i8_:%[0-9]+]]:fpr128 = USHLv16i8 [[COPY]], [[COPY1]]
545     ; CHECK: $q0 = COPY [[USHLv16i8_]]
546     ; CHECK: RET_ReallyLR implicit $q0
547     %0:fpr(<16 x s8>) = COPY $q0
548     %1:fpr(<16 x s8>) = COPY $q1
549     %2:fpr(<16 x s8>) = G_SHL %0, %1(<16 x s8>)
550     $q0 = COPY %2(<16 x s8>)
551     RET_ReallyLR implicit $q0
554 name:            lshr_v16i8
555 legalized:       true
556 regBankSelected: true
557 tracksRegLiveness: true
558 body:             |
559   bb.1:
560     liveins: $q0, $q1
561     ; CHECK-LABEL: name: lshr_v16i8
562     ; CHECK: liveins: $q0, $q1
563     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
564     ; CHECK: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
565     ; CHECK: [[NEGv16i8_:%[0-9]+]]:fpr128 = NEGv16i8 [[COPY1]]
566     ; CHECK: [[USHLv16i8_:%[0-9]+]]:fpr128 = USHLv16i8 [[COPY]], [[NEGv16i8_]]
567     ; CHECK: $q0 = COPY [[USHLv16i8_]]
568     ; CHECK: RET_ReallyLR implicit $q0
569     %0:fpr(<16 x s8>) = COPY $q0
570     %1:fpr(<16 x s8>) = COPY $q1
571     %2:fpr(<16 x s8>) = G_LSHR %0, %1(<16 x s8>)
572     $q0 = COPY %2(<16 x s8>)
573     RET_ReallyLR implicit $q0
576 name:            shl_v2i32_imm_dup
577 alignment:       4
578 legalized:       true
579 regBankSelected: true
580 tracksRegLiveness: true
581 registers:
582   - { id: 0, class: fpr }
583   - { id: 1, class: fpr }
584   - { id: 2, class: gpr }
585   - { id: 3, class: fpr }
586 liveins:
587   - { reg: '$d0' }
588 frameInfo:
589   maxAlignment:    1
590 machineFunctionInfo: {}
591 body:             |
592   bb.1:
593     liveins: $d0
595     ; Should still be able to select immediate forms using a G_DUP from a
596     ; constant.
598     ; CHECK-LABEL: name: shl_v2i32_imm_dup
599     ; CHECK: liveins: $d0
600     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
601     ; CHECK: [[SHLv2i32_shift:%[0-9]+]]:fpr64 = SHLv2i32_shift [[COPY]], 24
602     ; CHECK: $d0 = COPY [[SHLv2i32_shift]]
603     ; CHECK: RET_ReallyLR implicit $d0
604     %0:fpr(<2 x s32>) = COPY $d0
605     %2:gpr(s32) = G_CONSTANT i32 24
606     %1:fpr(<2 x s32>) = G_DUP %2(s32)
607     %3:fpr(<2 x s32>) = G_SHL %0, %1(<2 x s32>)
608     $d0 = COPY %3(<2 x s32>)
609     RET_ReallyLR implicit $d0