[Alignment][NFC] migrate DataLayout internal struct to llvm::Align
[llvm-core.git] / test / CodeGen / AArch64 / GlobalISel / select-fp-casts.mir
blobaea10c5c6c9dd5faf5a159e16ae5e646a7e8ea08
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 name:            fptrunc_s16_s32_fpr
6 legalized:       true
7 regBankSelected: true
9 registers:
10   - { id: 0, class: fpr }
11   - { id: 1, class: fpr }
13 body:             |
14   bb.0:
15     liveins: $s0
17     ; CHECK-LABEL: name: fptrunc_s16_s32_fpr
18     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
19     ; CHECK: [[FCVTHSr:%[0-9]+]]:fpr16 = FCVTHSr [[COPY]]
20     ; CHECK: $h0 = COPY [[FCVTHSr]]
21     %0(s32) = COPY $s0
22     %1(s16) = G_FPTRUNC %0
23     $h0 = COPY %1(s16)
24 ...
26 ---
27 name:            fptrunc_s16_s64_fpr
28 legalized:       true
29 regBankSelected: true
31 registers:
32   - { id: 0, class: fpr }
33   - { id: 1, class: fpr }
35 body:             |
36   bb.0:
37     liveins: $d0
39     ; CHECK-LABEL: name: fptrunc_s16_s64_fpr
40     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
41     ; CHECK: [[FCVTHDr:%[0-9]+]]:fpr16 = FCVTHDr [[COPY]]
42     ; CHECK: $h0 = COPY [[FCVTHDr]]
43     %0(s64) = COPY $d0
44     %1(s16) = G_FPTRUNC %0
45     $h0 = COPY %1(s16)
46 ...
48 ---
49 name:            fptrunc_s32_s64_fpr
50 legalized:       true
51 regBankSelected: true
53 registers:
54   - { id: 0, class: fpr }
55   - { id: 1, class: fpr }
57 body:             |
58   bb.0:
59     liveins: $d0
61     ; CHECK-LABEL: name: fptrunc_s32_s64_fpr
62     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
63     ; CHECK: [[FCVTSDr:%[0-9]+]]:fpr32 = FCVTSDr [[COPY]]
64     ; CHECK: $s0 = COPY [[FCVTSDr]]
65     %0(s64) = COPY $d0
66     %1(s32) = G_FPTRUNC %0
67     $s0 = COPY %1(s32)
68 ...
70 ---
71 name:            fptrunc_v4s16_v4s32_fpr
72 legalized:       true
73 regBankSelected: true
75 registers:
76   - { id: 0, class: fpr }
77   - { id: 1, class: fpr }
79 body:             |
80   bb.0:
81     liveins: $d0
82     ; CHECK-LABEL: name: fptrunc_v4s16_v4s32_fpr
83     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
84     ; CHECK: [[FCVTNv4i16:%[0-9]+]]:fpr64 = FCVTNv4i16 [[COPY]]
85     ; CHECK: $d0 = COPY [[FCVTNv4i16]]
86     %0(<4 x s32>) = COPY $q0
87     %1(<4 x s16>) = G_FPTRUNC %0
88     $d0 = COPY %1(<4 x s16>)
89 ...
91 ---
92 name:            fptrunc_v2s32_v2s64_fpr
93 legalized:       true
94 regBankSelected: true
96 registers:
97   - { id: 0, class: fpr }
98   - { id: 1, class: fpr }
100 body:             |
101   bb.0:
102     liveins: $q0
103     ; CHECK-LABEL: name: fptrunc_v2s32_v2s64_fpr
104     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
105     ; CHECK: [[FCVTNv2i32:%[0-9]+]]:fpr64 = FCVTNv2i32 [[COPY]]
106     ; CHECK: $d0 = COPY [[FCVTNv2i32]]
107     %0(<2 x s64>) = COPY $q0
108     %1(<2 x s32>) = G_FPTRUNC %0
109     $d0 = COPY %1(<2 x s32>)
113 name:            fpext_s32_s16_fpr
114 legalized:       true
115 regBankSelected: true
117 registers:
118   - { id: 0, class: fpr }
119   - { id: 1, class: fpr }
121 body:             |
122   bb.0:
123     liveins: $h0
125     ; CHECK-LABEL: name: fpext_s32_s16_fpr
126     ; CHECK: [[COPY:%[0-9]+]]:fpr16 = COPY $h0
127     ; CHECK: [[FCVTSHr:%[0-9]+]]:fpr32 = FCVTSHr [[COPY]]
128     ; CHECK: $s0 = COPY [[FCVTSHr]]
129     %0(s16) = COPY $h0
130     %1(s32) = G_FPEXT %0
131     $s0 = COPY %1(s32)
135 name:            fpext_s64_s16_fpr
136 legalized:       true
137 regBankSelected: true
139 registers:
140   - { id: 0, class: fpr }
141   - { id: 1, class: fpr }
143 body:             |
144   bb.0:
145     liveins: $h0
147     ; CHECK-LABEL: name: fpext_s64_s16_fpr
148     ; CHECK: [[COPY:%[0-9]+]]:fpr16 = COPY $h0
149     ; CHECK: [[FCVTDHr:%[0-9]+]]:fpr64 = FCVTDHr [[COPY]]
150     ; CHECK: $d0 = COPY [[FCVTDHr]]
151     %0(s16) = COPY $h0
152     %1(s64) = G_FPEXT %0
153     $d0 = COPY %1(s64)
157 name:            fpext_s64_s32_fpr
158 legalized:       true
159 regBankSelected: true
161 registers:
162   - { id: 0, class: fpr }
163   - { id: 1, class: fpr }
165 body:             |
166   bb.0:
167     liveins: $d0
169     ; CHECK-LABEL: name: fpext_s64_s32_fpr
170     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
171     ; CHECK: [[FCVTDSr:%[0-9]+]]:fpr64 = FCVTDSr [[COPY]]
172     ; CHECK: $d0 = COPY [[FCVTDSr]]
173     %0(s32) = COPY $s0
174     %1(s64) = G_FPEXT %0
175     $d0 = COPY %1(s64)
179 name:            fpext_v4s32_v4s16_fpr
180 legalized:       true
181 regBankSelected: true
183 registers:
184   - { id: 0, class: fpr }
185   - { id: 1, class: fpr }
187 body:             |
188   bb.0:
189     liveins: $d0
190     ; CHECK-LABEL: name: fpext_v4s32_v4s16_fpr
191     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
192     ; CHECK: [[FCVTLv4i16:%[0-9]+]]:fpr128 = FCVTLv4i16 [[COPY]]
193     ; CHECK: $q0 = COPY [[FCVTLv4i16]]
194     %0(<4 x s16>) = COPY $d0
195     %1(<4 x s32>) = G_FPEXT %0
196     $q0 = COPY %1(<4 x s32>)
200 name:            fpext_v2s64_v2s32_fpr
201 legalized:       true
202 regBankSelected: true
204 registers:
205   - { id: 0, class: fpr }
206   - { id: 1, class: fpr }
208 body:             |
209   bb.0:
210     liveins: $d0
211     ; CHECK-LABEL: name: fpext_v2s64_v2s32_fpr
212     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
213     ; CHECK: [[FCVTLv2i32:%[0-9]+]]:fpr128 = FCVTLv2i32 [[COPY]]
214     ; CHECK: $q0 = COPY [[FCVTLv2i32]]
215     %0(<2 x s32>) = COPY $d0
216     %1(<2 x s64>) = G_FPEXT %0
217     $q0 = COPY %1(<2 x s64>)
221 name:            sitofp_s32_s32_fpr
222 legalized:       true
223 regBankSelected: true
225 registers:
226   - { id: 0, class: gpr }
227   - { id: 1, class: fpr }
229 body:             |
230   bb.0:
231     liveins: $w0
233     ; CHECK-LABEL: name: sitofp_s32_s32_fpr
234     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
235     ; CHECK: [[SCVTFUWSri:%[0-9]+]]:fpr32 = SCVTFUWSri [[COPY]]
236     ; CHECK: $s0 = COPY [[SCVTFUWSri]]
237     %0(s32) = COPY $w0
238     %1(s32) = G_SITOFP %0
239     $s0 = COPY %1(s32)
243 name:            sitofp_s32_s64_fpr
244 legalized:       true
245 regBankSelected: true
247 registers:
248   - { id: 0, class: gpr }
249   - { id: 1, class: fpr }
251 body:             |
252   bb.0:
253     liveins: $x0
255     ; CHECK-LABEL: name: sitofp_s32_s64_fpr
256     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
257     ; CHECK: [[SCVTFUXSri:%[0-9]+]]:fpr32 = SCVTFUXSri [[COPY]]
258     ; CHECK: $s0 = COPY [[SCVTFUXSri]]
259     %0(s64) = COPY $x0
260     %1(s32) = G_SITOFP %0
261     $s0 = COPY %1(s32)
265 name:            sitofp_s64_s32_fpr
266 legalized:       true
267 regBankSelected: true
269 registers:
270   - { id: 0, class: gpr }
271   - { id: 1, class: fpr }
273 body:             |
274   bb.0:
275     liveins: $w0
277     ; CHECK-LABEL: name: sitofp_s64_s32_fpr
278     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
279     ; CHECK: [[SCVTFUWDri:%[0-9]+]]:fpr64 = SCVTFUWDri [[COPY]]
280     ; CHECK: $d0 = COPY [[SCVTFUWDri]]
281     %0(s32) = COPY $w0
282     %1(s64) = G_SITOFP %0
283     $d0 = COPY %1(s64)
287 name:            sitofp_s64_s64_fpr
288 legalized:       true
289 regBankSelected: true
291 registers:
292   - { id: 0, class: gpr }
293   - { id: 1, class: fpr }
295 body:             |
296   bb.0:
297     liveins: $x0
299     ; CHECK-LABEL: name: sitofp_s64_s64_fpr
300     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
301     ; CHECK: [[SCVTFUXDri:%[0-9]+]]:fpr64 = SCVTFUXDri [[COPY]]
302     ; CHECK: $d0 = COPY [[SCVTFUXDri]]
303     %0(s64) = COPY $x0
304     %1(s64) = G_SITOFP %0
305     $d0 = COPY %1(s64)
309 name:            uitofp_s32_s32_fpr
310 legalized:       true
311 regBankSelected: true
313 registers:
314   - { id: 0, class: gpr }
315   - { id: 1, class: fpr }
317 body:             |
318   bb.0:
319     liveins: $w0
321     ; CHECK-LABEL: name: uitofp_s32_s32_fpr
322     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
323     ; CHECK: [[UCVTFUWSri:%[0-9]+]]:fpr32 = UCVTFUWSri [[COPY]]
324     ; CHECK: $s0 = COPY [[UCVTFUWSri]]
325     %0(s32) = COPY $w0
326     %1(s32) = G_UITOFP %0
327     $s0 = COPY %1(s32)
331 name:            uitofp_s32_s64_fpr
332 legalized:       true
333 regBankSelected: true
335 registers:
336   - { id: 0, class: gpr }
337   - { id: 1, class: fpr }
339 body:             |
340   bb.0:
341     liveins: $x0
343     ; CHECK-LABEL: name: uitofp_s32_s64_fpr
344     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
345     ; CHECK: [[UCVTFUXSri:%[0-9]+]]:fpr32 = UCVTFUXSri [[COPY]]
346     ; CHECK: $s0 = COPY [[UCVTFUXSri]]
347     %0(s64) = COPY $x0
348     %1(s32) = G_UITOFP %0
349     $s0 = COPY %1(s32)
353 name:            uitofp_s64_s32_fpr
354 legalized:       true
355 regBankSelected: true
357 registers:
358   - { id: 0, class: gpr }
359   - { id: 1, class: fpr }
361 body:             |
362   bb.0:
363     liveins: $w0
365     ; CHECK-LABEL: name: uitofp_s64_s32_fpr
366     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
367     ; CHECK: [[UCVTFUWDri:%[0-9]+]]:fpr64 = UCVTFUWDri [[COPY]]
368     ; CHECK: $d0 = COPY [[UCVTFUWDri]]
369     %0(s32) = COPY $w0
370     %1(s64) = G_UITOFP %0
371     $d0 = COPY %1(s64)
375 name:            uitofp_s64_s64_fpr
376 legalized:       true
377 regBankSelected: true
379 registers:
380   - { id: 0, class: gpr }
381   - { id: 1, class: fpr }
383 body:             |
384   bb.0:
385     liveins: $x0
387     ; CHECK-LABEL: name: uitofp_s64_s64_fpr
388     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
389     ; CHECK: [[UCVTFUXDri:%[0-9]+]]:fpr64 = UCVTFUXDri [[COPY]]
390     ; CHECK: $d0 = COPY [[UCVTFUXDri]]
391     %0(s64) = COPY $x0
392     %1(s64) = G_UITOFP %0
393     $d0 = COPY %1(s64)
397 name:            fptosi_s32_s32_gpr
398 legalized:       true
399 regBankSelected: true
401 registers:
402   - { id: 0, class: fpr }
403   - { id: 1, class: gpr }
405 body:             |
406   bb.0:
407     liveins: $s0
409     ; CHECK-LABEL: name: fptosi_s32_s32_gpr
410     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
411     ; CHECK: [[FCVTZSUWSr:%[0-9]+]]:gpr32 = FCVTZSUWSr [[COPY]]
412     ; CHECK: $w0 = COPY [[FCVTZSUWSr]]
413     %0(s32) = COPY $s0
414     %1(s32) = G_FPTOSI %0
415     $w0 = COPY %1(s32)
419 name:            fptosi_s32_s64_gpr
420 legalized:       true
421 regBankSelected: true
423 registers:
424   - { id: 0, class: fpr }
425   - { id: 1, class: gpr }
427 body:             |
428   bb.0:
429     liveins: $d0
431     ; CHECK-LABEL: name: fptosi_s32_s64_gpr
432     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
433     ; CHECK: [[FCVTZSUWDr:%[0-9]+]]:gpr32 = FCVTZSUWDr [[COPY]]
434     ; CHECK: $w0 = COPY [[FCVTZSUWDr]]
435     %0(s64) = COPY $d0
436     %1(s32) = G_FPTOSI %0
437     $w0 = COPY %1(s32)
441 name:            fptosi_s64_s32_gpr
442 legalized:       true
443 regBankSelected: true
445 registers:
446   - { id: 0, class: fpr }
447   - { id: 1, class: gpr }
449 body:             |
450   bb.0:
451     liveins: $s0
453     ; CHECK-LABEL: name: fptosi_s64_s32_gpr
454     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
455     ; CHECK: [[FCVTZSUXSr:%[0-9]+]]:gpr64 = FCVTZSUXSr [[COPY]]
456     ; CHECK: $x0 = COPY [[FCVTZSUXSr]]
457     %0(s32) = COPY $s0
458     %1(s64) = G_FPTOSI %0
459     $x0 = COPY %1(s64)
463 name:            fptosi_s64_s64_gpr
464 legalized:       true
465 regBankSelected: true
467 registers:
468   - { id: 0, class: fpr }
469   - { id: 1, class: gpr }
471 body:             |
472   bb.0:
473     liveins: $d0
475     ; CHECK-LABEL: name: fptosi_s64_s64_gpr
476     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
477     ; CHECK: [[FCVTZSUXDr:%[0-9]+]]:gpr64 = FCVTZSUXDr [[COPY]]
478     ; CHECK: $x0 = COPY [[FCVTZSUXDr]]
479     %0(s64) = COPY $d0
480     %1(s64) = G_FPTOSI %0
481     $x0 = COPY %1(s64)
485 name:            fptoui_s32_s32_gpr
486 legalized:       true
487 regBankSelected: true
489 registers:
490   - { id: 0, class: fpr }
491   - { id: 1, class: gpr }
493 body:             |
494   bb.0:
495     liveins: $s0
497     ; CHECK-LABEL: name: fptoui_s32_s32_gpr
498     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
499     ; CHECK: [[FCVTZUUWSr:%[0-9]+]]:gpr32 = FCVTZUUWSr [[COPY]]
500     ; CHECK: $w0 = COPY [[FCVTZUUWSr]]
501     %0(s32) = COPY $s0
502     %1(s32) = G_FPTOUI %0
503     $w0 = COPY %1(s32)
507 name:            fptoui_s32_s64_gpr
508 legalized:       true
509 regBankSelected: true
511 registers:
512   - { id: 0, class: fpr }
513   - { id: 1, class: gpr }
515 body:             |
516   bb.0:
517     liveins: $d0
519     ; CHECK-LABEL: name: fptoui_s32_s64_gpr
520     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
521     ; CHECK: [[FCVTZUUWDr:%[0-9]+]]:gpr32 = FCVTZUUWDr [[COPY]]
522     ; CHECK: $w0 = COPY [[FCVTZUUWDr]]
523     %0(s64) = COPY $d0
524     %1(s32) = G_FPTOUI %0
525     $w0 = COPY %1(s32)
529 name:            fptoui_s64_s32_gpr
530 legalized:       true
531 regBankSelected: true
533 registers:
534   - { id: 0, class: fpr }
535   - { id: 1, class: gpr }
537 body:             |
538   bb.0:
539     liveins: $s0
541     ; CHECK-LABEL: name: fptoui_s64_s32_gpr
542     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
543     ; CHECK: [[FCVTZUUXSr:%[0-9]+]]:gpr64 = FCVTZUUXSr [[COPY]]
544     ; CHECK: $x0 = COPY [[FCVTZUUXSr]]
545     %0(s32) = COPY $s0
546     %1(s64) = G_FPTOUI %0
547     $x0 = COPY %1(s64)
551 name:            fptoui_s64_s64_gpr
552 legalized:       true
553 regBankSelected: true
555 registers:
556   - { id: 0, class: fpr }
557   - { id: 1, class: gpr }
559 body:             |
560   bb.0:
561     liveins: $d0
563     ; CHECK-LABEL: name: fptoui_s64_s64_gpr
564     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
565     ; CHECK: [[FCVTZUUXDr:%[0-9]+]]:gpr64 = FCVTZUUXDr [[COPY]]
566     ; CHECK: $x0 = COPY [[FCVTZUUXDr]]
567     %0(s64) = COPY $d0
568     %1(s64) = G_FPTOUI %0
569     $x0 = COPY %1(s64)