[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / select-int-ext.mir
blob90de1f6df2cc90557b56be3b6ae40d97c808f0f6
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
4 --- |
5   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
7   define void @anyext_s64_from_s32() { ret void }
8   define void @anyext_s32_from_s8() { ret void }
9   define void @anyext_v8s16_from_v8s8() { ret void }
10   define void @anyext_v4s32_from_v4s16() { ret void }
11   define void @anyext_v2s64_from_v2s32() { ret void }
13   define void @zext_s64_from_s32() { ret void }
14   define void @zext_s32_from_s16() { ret void }
15   define void @zext_s32_from_s8() { ret void }
16   define void @zext_s16_from_s8() { ret void }
17   define void @zext_v8s16_from_v8s8() { ret void }
18   define void @zext_v4s32_from_v4s16() { ret void }
19   define void @zext_v2s64_from_v2s32() { ret void }
21   define void @sext_s64_from_s32() { ret void }
22   define void @sext_s32_from_s16() { ret void }
23   define void @sext_s32_from_s8() { ret void }
24   define void @sext_s16_from_s8() { ret void }
25   define void @sext_v8s16_from_v8s8() { ret void }
26   define void @sext_v4s32_from_v4s16() { ret void }
27   define void @sext_v2s64_from_v2s32() { ret void }
28 ...
30 ---
31 name:            anyext_s64_from_s32
32 legalized:       true
33 regBankSelected: true
35 registers:
36   - { id: 0, class: gpr }
37   - { id: 1, class: gpr }
39 body:             |
40   bb.0:
41     liveins: $w0
43     ; CHECK-LABEL: name: anyext_s64_from_s32
44     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
45     ; CHECK: [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF
46     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:gpr64all = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.sub_32
47     ; CHECK: $x0 = COPY [[INSERT_SUBREG]]
48     %0(s32) = COPY $w0
49     %1(s64) = G_ANYEXT %0
50     $x0 = COPY %1(s64)
51 ...
53 ---
54 name:            anyext_s32_from_s8
55 legalized:       true
56 regBankSelected: true
58 registers:
59   - { id: 0, class: gpr }
60   - { id: 1, class: gpr }
62 body:             |
63   bb.0:
64     liveins: $w0
66     ; CHECK-LABEL: name: anyext_s32_from_s8
67     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
68     ; CHECK: [[COPY1:%[0-9]+]]:gpr32all = COPY [[COPY]]
69     ; CHECK: $w0 = COPY [[COPY1]]
70     %2:gpr(s32) = COPY $w0
71     %0(s8) = G_TRUNC %2
72     %1(s32) = G_ANYEXT %0
73     $w0 = COPY %1(s32)
74 ...
76 ---
77 name:            anyext_v8s16_from_v8s8
78 alignment:       2
79 legalized:       true
80 regBankSelected: true
81 tracksRegLiveness: true
82 registers:
83   - { id: 0, class: fpr }
84   - { id: 1, class: fpr }
85 machineFunctionInfo: {}
86 body:             |
87   bb.0:
88     liveins: $d0
90     ; CHECK-LABEL: name: anyext_v8s16_from_v8s8
91     ; CHECK: liveins: $d0
92     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
93     ; CHECK: [[USHLLv8i8_shift:%[0-9]+]]:fpr128 = USHLLv8i8_shift [[COPY]], 0
94     ; CHECK: $q0 = COPY [[USHLLv8i8_shift]]
95     ; CHECK: RET_ReallyLR implicit $q0
96     %0:fpr(<8 x s8>) = COPY $d0
97     %1:fpr(<8 x s16>) = G_ANYEXT %0(<8 x s8>)
98     $q0 = COPY %1(<8 x s16>)
99     RET_ReallyLR implicit $q0
103 name:            anyext_v4s32_from_v4s16
104 alignment:       2
105 legalized:       true
106 regBankSelected: true
107 tracksRegLiveness: true
108 registers:
109   - { id: 0, class: fpr }
110   - { id: 1, class: fpr }
111 machineFunctionInfo: {}
112 body:             |
113   bb.0:
114     liveins: $d0
116     ; CHECK-LABEL: name: anyext_v4s32_from_v4s16
117     ; CHECK: liveins: $d0
118     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
119     ; CHECK: [[USHLLv4i16_shift:%[0-9]+]]:fpr128 = USHLLv4i16_shift [[COPY]], 0
120     ; CHECK: $q0 = COPY [[USHLLv4i16_shift]]
121     ; CHECK: RET_ReallyLR implicit $q0
122     %0:fpr(<4 x s16>) = COPY $d0
123     %1:fpr(<4 x s32>) = G_ANYEXT %0(<4 x s16>)
124     $q0 = COPY %1(<4 x s32>)
125     RET_ReallyLR implicit $q0
129 name:            anyext_v2s64_from_v2s32
130 alignment:       2
131 tracksRegLiveness: true
132 legalized:       true
133 regBankSelected: true
134 tracksRegLiveness: true
135 registers:
136   - { id: 0, class: fpr }
137   - { id: 1, class: fpr }
138 machineFunctionInfo: {}
139 body:             |
140   bb.0:
141     liveins: $d0
143     ; CHECK-LABEL: name: anyext_v2s64_from_v2s32
144     ; CHECK: liveins: $d0
145     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
146     ; CHECK: [[USHLLv2i32_shift:%[0-9]+]]:fpr128 = USHLLv2i32_shift [[COPY]], 0
147     ; CHECK: $q0 = COPY [[USHLLv2i32_shift]]
148     ; CHECK: RET_ReallyLR implicit $q0
149     %0:fpr(<2 x s32>) = COPY $d0
150     %1:fpr(<2 x s64>) = G_ANYEXT %0(<2 x s32>)
151     $q0 = COPY %1(<2 x s64>)
152     RET_ReallyLR implicit $q0
156 name:            zext_s64_from_s32
157 legalized:       true
158 regBankSelected: true
160 registers:
161   - { id: 0, class: gpr }
162   - { id: 1, class: gpr }
164 body:             |
165   bb.0:
166     liveins: $w0
168     ; CHECK-LABEL: name: zext_s64_from_s32
169     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
170     ; CHECK: [[SUBREG_TO_REG:%[0-9]+]]:gpr64 = SUBREG_TO_REG 0, [[COPY]], %subreg.sub_32
171     ; CHECK: [[UBFMXri:%[0-9]+]]:gpr64 = UBFMXri [[SUBREG_TO_REG]], 0, 31
172     ; CHECK: $x0 = COPY [[UBFMXri]]
173     %0(s32) = COPY $w0
174     %1(s64) = G_ZEXT %0
175     $x0 = COPY %1(s64)
179 name:            zext_s32_from_s16
180 legalized:       true
181 regBankSelected: true
183 registers:
184   - { id: 0, class: gpr }
185   - { id: 1, class: gpr }
187 body:             |
188   bb.0:
189     liveins: $w0
191     ; CHECK-LABEL: name: zext_s32_from_s16
192     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
193     ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY]], 0, 15
194     ; CHECK: $w0 = COPY [[UBFMWri]]
195     %2:gpr(s32) = COPY $w0
196     %0(s16) = G_TRUNC %2
197     %1(s32) = G_ZEXT %0
198     $w0 = COPY %1
202 name:            zext_s32_from_s8
203 legalized:       true
204 regBankSelected: true
206 registers:
207   - { id: 0, class: gpr }
208   - { id: 1, class: gpr }
210 body:             |
211   bb.0:
212     liveins: $w0
214     ; CHECK-LABEL: name: zext_s32_from_s8
215     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
216     ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY]], 0, 15
217     ; CHECK: $w0 = COPY [[UBFMWri]]
218     %2:gpr(s32) = COPY $w0
219     %0(s16) = G_TRUNC %2
220     %1(s32) = G_ZEXT %0
221     $w0 = COPY %1(s32)
225 name:            zext_s16_from_s8
226 legalized:       true
227 regBankSelected: true
229 registers:
230   - { id: 0, class: gpr }
231   - { id: 1, class: gpr }
233 body:             |
234   bb.0:
235     liveins: $w0
237     ; CHECK-LABEL: name: zext_s16_from_s8
238     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
239     ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32 = UBFMWri [[COPY]], 0, 7
240     ; CHECK: [[COPY1:%[0-9]+]]:gpr32all = COPY [[UBFMWri]]
241     ; CHECK: $w0 = COPY [[COPY1]]
242     %2:gpr(s32) = COPY $w0
243     %0(s8) = G_TRUNC %2
244     %1(s16) = G_ZEXT %0
245     %3:gpr(s32) = G_ANYEXT %1
246     $w0 = COPY %3(s32)
250 name:            zext_v8s16_from_v8s8
251 alignment:       2
252 legalized:       true
253 regBankSelected: true
254 tracksRegLiveness: true
255 registers:
256   - { id: 0, class: fpr }
257   - { id: 1, class: fpr }
258 machineFunctionInfo: {}
259 body:             |
260   bb.0:
261     liveins: $d0
263     ; CHECK-LABEL: name: zext_v8s16_from_v8s8
264     ; CHECK: liveins: $d0
265     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
266     ; CHECK: [[USHLLv8i8_shift:%[0-9]+]]:fpr128 = USHLLv8i8_shift [[COPY]], 0
267     ; CHECK: $q0 = COPY [[USHLLv8i8_shift]]
268     ; CHECK: RET_ReallyLR implicit $q0
269     %0:fpr(<8 x s8>) = COPY $d0
270     %1:fpr(<8 x s16>) = G_ZEXT %0(<8 x s8>)
271     $q0 = COPY %1(<8 x s16>)
272     RET_ReallyLR implicit $q0
277 name:            zext_v4s32_from_v4s16
278 alignment:       2
279 legalized:       true
280 regBankSelected: true
281 tracksRegLiveness: true
282 registers:
283   - { id: 0, class: fpr }
284   - { id: 1, class: fpr }
285 machineFunctionInfo: {}
286 body:             |
287   bb.0:
288     liveins: $d0
290     ; CHECK-LABEL: name: zext_v4s32_from_v4s16
291     ; CHECK: liveins: $d0
292     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
293     ; CHECK: [[USHLLv4i16_shift:%[0-9]+]]:fpr128 = USHLLv4i16_shift [[COPY]], 0
294     ; CHECK: $q0 = COPY [[USHLLv4i16_shift]]
295     ; CHECK: RET_ReallyLR implicit $q0
296     %0:fpr(<4 x s16>) = COPY $d0
297     %1:fpr(<4 x s32>) = G_ZEXT %0(<4 x s16>)
298     $q0 = COPY %1(<4 x s32>)
299     RET_ReallyLR implicit $q0
303 name:            zext_v2s64_from_v2s32
304 alignment:       2
305 legalized:       true
306 regBankSelected: true
307 tracksRegLiveness: true
308 registers:
309   - { id: 0, class: fpr }
310   - { id: 1, class: fpr }
311 machineFunctionInfo: {}
312 body:             |
313   bb.0:
314     liveins: $d0
316     ; CHECK-LABEL: name: zext_v2s64_from_v2s32
317     ; CHECK: liveins: $d0
318     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
319     ; CHECK: [[USHLLv2i32_shift:%[0-9]+]]:fpr128 = USHLLv2i32_shift [[COPY]], 0
320     ; CHECK: $q0 = COPY [[USHLLv2i32_shift]]
321     ; CHECK: RET_ReallyLR implicit $q0
322     %0:fpr(<2 x s32>) = COPY $d0
323     %1:fpr(<2 x s64>) = G_ZEXT %0(<2 x s32>)
324     $q0 = COPY %1(<2 x s64>)
325     RET_ReallyLR implicit $q0
329 name:            sext_s64_from_s32
330 legalized:       true
331 regBankSelected: true
333 registers:
334   - { id: 0, class: gpr }
335   - { id: 1, class: gpr }
337 body:             |
338   bb.0:
339     liveins: $w0
341     ; CHECK-LABEL: name: sext_s64_from_s32
342     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
343     ; CHECK: [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF
344     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:gpr64 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.sub_32
345     ; CHECK: [[SBFMXri:%[0-9]+]]:gpr64 = SBFMXri [[INSERT_SUBREG]], 0, 31
346     ; CHECK: $x0 = COPY [[SBFMXri]]
347     %0(s32) = COPY $w0
348     %1(s64) = G_SEXT %0
349     $x0 = COPY %1(s64)
353 name:            sext_s32_from_s16
354 legalized:       true
355 regBankSelected: true
357 registers:
358   - { id: 0, class: gpr }
359   - { id: 1, class: gpr }
361 body:             |
362   bb.0:
363     liveins: $w0
365     ; CHECK-LABEL: name: sext_s32_from_s16
366     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
367     ; CHECK: [[SBFMWri:%[0-9]+]]:gpr32 = SBFMWri [[COPY]], 0, 15
368     ; CHECK: $w0 = COPY [[SBFMWri]]
369     %2:gpr(s32) = COPY $w0
370     %0(s16) = G_TRUNC %2
371     %1(s32) = G_SEXT %0
372     $w0 = COPY %1
376 name:            sext_s32_from_s8
377 legalized:       true
378 regBankSelected: true
380 registers:
381   - { id: 0, class: gpr }
382   - { id: 1, class: gpr }
384 body:             |
385   bb.0:
386     liveins: $w0
388     ; CHECK-LABEL: name: sext_s32_from_s8
389     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
390     ; CHECK: [[SBFMWri:%[0-9]+]]:gpr32 = SBFMWri [[COPY]], 0, 7
391     ; CHECK: $w0 = COPY [[SBFMWri]]
392     %2:gpr(s32) = COPY $w0
393     %0(s8) = G_TRUNC %2
394     %1(s32) = G_SEXT %0
395     $w0 = COPY %1(s32)
399 name:            sext_s16_from_s8
400 legalized:       true
401 regBankSelected: true
403 registers:
404   - { id: 0, class: gpr }
405   - { id: 1, class: gpr }
407 body:             |
408   bb.0:
409     liveins: $w0
411     ; CHECK-LABEL: name: sext_s16_from_s8
412     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
413     ; CHECK: [[SBFMWri:%[0-9]+]]:gpr32 = SBFMWri [[COPY]], 0, 7
414     ; CHECK: [[COPY1:%[0-9]+]]:gpr32all = COPY [[SBFMWri]]
415     ; CHECK: $w0 = COPY [[COPY1]]
416     %2:gpr(s32) = COPY $w0
417     %0(s8) = G_TRUNC %2
418     %1(s16) = G_SEXT %0
419     %3:gpr(s32) = G_ANYEXT %1
420     $w0 = COPY %3(s32)
424 name:            sext_v8s16_from_v8s8
425 alignment:       2
426 legalized:       true
427 regBankSelected: true
428 tracksRegLiveness: true
429 registers:
430   - { id: 0, class: fpr }
431   - { id: 1, class: fpr }
432 machineFunctionInfo: {}
433 body:             |
434   bb.0:
435     liveins: $d0
437     ; CHECK-LABEL: name: sext_v8s16_from_v8s8
438     ; CHECK: liveins: $d0
439     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
440     ; CHECK: [[SSHLLv8i8_shift:%[0-9]+]]:fpr128 = SSHLLv8i8_shift [[COPY]], 0
441     ; CHECK: $q0 = COPY [[SSHLLv8i8_shift]]
442     ; CHECK: RET_ReallyLR implicit $q0
443     %0:fpr(<8 x s8>) = COPY $d0
444     %1:fpr(<8 x s16>) = G_SEXT %0(<8 x s8>)
445     $q0 = COPY %1(<8 x s16>)
446     RET_ReallyLR implicit $q0
451 name:            sext_v4s32_from_v4s16
452 alignment:       2
453 legalized:       true
454 regBankSelected: true
455 tracksRegLiveness: true
456 registers:
457   - { id: 0, class: fpr }
458   - { id: 1, class: fpr }
459 machineFunctionInfo: {}
460 body:             |
461   bb.0:
462     liveins: $d0
464     ; CHECK-LABEL: name: sext_v4s32_from_v4s16
465     ; CHECK: liveins: $d0
466     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
467     ; CHECK: [[SSHLLv4i16_shift:%[0-9]+]]:fpr128 = SSHLLv4i16_shift [[COPY]], 0
468     ; CHECK: $q0 = COPY [[SSHLLv4i16_shift]]
469     ; CHECK: RET_ReallyLR implicit $q0
470     %0:fpr(<4 x s16>) = COPY $d0
471     %1:fpr(<4 x s32>) = G_SEXT %0(<4 x s16>)
472     $q0 = COPY %1(<4 x s32>)
473     RET_ReallyLR implicit $q0
477 name:            sext_v2s64_from_v2s32
478 alignment:       2
479 legalized:       true
480 regBankSelected: true
481 tracksRegLiveness: true
482 registers:
483   - { id: 0, class: fpr }
484   - { id: 1, class: fpr }
485 machineFunctionInfo: {}
486 body:             |
487   bb.0:
488     liveins: $d0
490     ; CHECK-LABEL: name: sext_v2s64_from_v2s32
491     ; CHECK: liveins: $d0
492     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
493     ; CHECK: [[SSHLLv2i32_shift:%[0-9]+]]:fpr128 = SSHLLv2i32_shift [[COPY]], 0
494     ; CHECK: $q0 = COPY [[SSHLLv2i32_shift]]
495     ; CHECK: RET_ReallyLR implicit $q0
496     %0:fpr(<2 x s32>) = COPY $d0
497     %1:fpr(<2 x s64>) = G_SEXT %0(<2 x s32>)
498     $q0 = COPY %1(<2 x s64>)
499     RET_ReallyLR implicit $q0