Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / ARM / GlobalISel / select-fp.mir
blobec834f1233acef9bafacaea4ae8fb6b26b91b1d0
1 # RUN: llc -O0 -mtriple arm-- -mattr=+vfp4,-neonfp -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2 # RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2,+vfp4,-neonfp -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3 --- |
4   define void @test_trunc_s64() { ret void }
6   define void @test_fadd_s32() { ret void }
7   define void @test_fadd_s64() { ret void }
9   define void @test_fsub_s32() { ret void }
10   define void @test_fsub_s64() { ret void }
12   define void @test_fmul_s32() { ret void }
13   define void @test_fmul_s64() { ret void }
15   define void @test_fdiv_s32() { ret void }
16   define void @test_fdiv_s64() { ret void }
18   define void @test_fneg_s32() { ret void }
19   define void @test_fneg_s64() { ret void }
21   define void @test_fma_s32() { ret void }
22   define void @test_fma_s64() { ret void }
24   define void @test_fpext_s32_to_s64() { ret void }
25   define void @test_fptrunc_s64_to_s32() {ret void }
27   define void @test_fptosi_s32() { ret void }
28   define void @test_fptosi_s64() { ret void }
29   define void @test_fptoui_s32() { ret void }
30   define void @test_fptoui_s64() { ret void }
32   define void @test_sitofp_s32() { ret void }
33   define void @test_sitofp_s64() { ret void }
34   define void @test_uitofp_s32() { ret void }
35   define void @test_uitofp_s64() { ret void }
37   define void @test_load_f32() { ret void }
38   define void @test_load_f64() { ret void }
40   define void @test_stores() { ret void }
42   define void @test_phi_s64() { ret void }
44   define void @test_soft_fp_double() { ret void }
46 ...
47 ---
48 name:            test_trunc_s64
49 # CHECK-LABEL: name: test_trunc_s64
50 legalized:       true
51 regBankSelected: true
52 selected:        false
53 # CHECK: selected: true
54 registers:
55   - { id: 0, class: fprb }
56   - { id: 1, class: gprb }
57   - { id: 2, class: gprb }
58 body:             |
59   bb.0:
60     liveins: $r0, $d0
62     %0(s64) = COPY $d0
63     ; CHECK: [[VREG:%[0-9]+]]:dpr = COPY $d0
65     %2(p0) = COPY $r0
66     ; CHECK: [[PTR:%[0-9]+]]:gpr = COPY $r0
68     %1(s32) = G_TRUNC %0(s64)
69     ; CHECK: [[VREGTRUNC:%[0-9]+]]:gpr, [[UNINTERESTING:%[0-9]+]]:gpr = VMOVRRD [[VREG]]
71     G_STORE %1(s32), %2 :: (store (s32))
72     ; CHECK: STRi12 [[VREGTRUNC]], [[PTR]], 0, 14 /* CC::al */, $noreg
74     BX_RET 14, $noreg
75     ; CHECK: BX_RET 14 /* CC::al */, $noreg
76 ...
77 ---
78 name:            test_fadd_s32
79 # CHECK-LABEL: name: test_fadd_s32
80 legalized:       true
81 regBankSelected: true
82 selected:        false
83 # CHECK: selected: true
84 registers:
85   - { id: 0, class: fprb }
86   - { id: 1, class: fprb }
87   - { id: 2, class: fprb }
88 body:             |
89   bb.0:
90     liveins: $s0, $s1
92     %0(s32) = COPY $s0
93     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
95     %1(s32) = COPY $s1
96     ; CHECK: [[VREGY:%[0-9]+]]:spr = COPY $s1
98     %2(s32) = G_FADD %0, %1
99     ; CHECK: [[VREGSUM:%[0-9]+]]:spr = VADDS [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
101     $s0 = COPY %2(s32)
102     ; CHECK: $s0 = COPY [[VREGSUM]]
104     BX_RET 14, $noreg, implicit $s0
105     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
108 name:            test_fadd_s64
109 # CHECK-LABEL: name: test_fadd_s64
110 legalized:       true
111 regBankSelected: true
112 selected:        false
113 # CHECK: selected: true
114 registers:
115   - { id: 0, class: fprb }
116   - { id: 1, class: fprb }
117   - { id: 2, class: fprb }
118 body:             |
119   bb.0:
120     liveins: $d0, $d1
122     %0(s64) = COPY $d0
123     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
125     %1(s64) = COPY $d1
126     ; CHECK: [[VREGY:%[0-9]+]]:dpr = COPY $d1
128     %2(s64) = G_FADD %0, %1
129     ; CHECK: [[VREGSUM:%[0-9]+]]:dpr = VADDD [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
131     $d0 = COPY %2(s64)
132     ; CHECK: $d0 = COPY [[VREGSUM]]
134     BX_RET 14, $noreg, implicit $d0
135     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
138 name:            test_fsub_s32
139 # CHECK-LABEL: name: test_fsub_s32
140 legalized:       true
141 regBankSelected: true
142 selected:        false
143 # CHECK: selected: true
144 registers:
145   - { id: 0, class: fprb }
146   - { id: 1, class: fprb }
147   - { id: 2, class: fprb }
148 body:             |
149   bb.0:
150     liveins: $s0, $s1
152     %0(s32) = COPY $s0
153     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
155     %1(s32) = COPY $s1
156     ; CHECK: [[VREGY:%[0-9]+]]:spr = COPY $s1
158     %2(s32) = G_FSUB %0, %1
159     ; CHECK: [[VREGSUM:%[0-9]+]]:spr = VSUBS [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
161     $s0 = COPY %2(s32)
162     ; CHECK: $s0 = COPY [[VREGSUM]]
164     BX_RET 14, $noreg, implicit $s0
165     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
168 name:            test_fsub_s64
169 # CHECK-LABEL: name: test_fsub_s64
170 legalized:       true
171 regBankSelected: true
172 selected:        false
173 # CHECK: selected: true
174 registers:
175   - { id: 0, class: fprb }
176   - { id: 1, class: fprb }
177   - { id: 2, class: fprb }
178 body:             |
179   bb.0:
180     liveins: $d0, $d1
182     %0(s64) = COPY $d0
183     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
185     %1(s64) = COPY $d1
186     ; CHECK: [[VREGY:%[0-9]+]]:dpr = COPY $d1
188     %2(s64) = G_FSUB %0, %1
189     ; CHECK: [[VREGSUM:%[0-9]+]]:dpr = VSUBD [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
191     $d0 = COPY %2(s64)
192     ; CHECK: $d0 = COPY [[VREGSUM]]
194     BX_RET 14, $noreg, implicit $d0
195     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
198 name:            test_fmul_s32
199 # CHECK-LABEL: name: test_fmul_s32
200 legalized:       true
201 regBankSelected: true
202 selected:        false
203 # CHECK: selected: true
204 registers:
205   - { id: 0, class: fprb }
206   - { id: 1, class: fprb }
207   - { id: 2, class: fprb }
208 body:             |
209   bb.0:
210     liveins: $s0, $s1
212     %0(s32) = COPY $s0
213     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
215     %1(s32) = COPY $s1
216     ; CHECK: [[VREGY:%[0-9]+]]:spr = COPY $s1
218     %2(s32) = G_FMUL %0, %1
219     ; CHECK: [[VREGSUM:%[0-9]+]]:spr = VMULS [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
221     $s0 = COPY %2(s32)
222     ; CHECK: $s0 = COPY [[VREGSUM]]
224     BX_RET 14, $noreg, implicit $s0
225     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
228 name:            test_fmul_s64
229 # CHECK-LABEL: name: test_fmul_s64
230 legalized:       true
231 regBankSelected: true
232 selected:        false
233 # CHECK: selected: true
234 registers:
235   - { id: 0, class: fprb }
236   - { id: 1, class: fprb }
237   - { id: 2, class: fprb }
238 body:             |
239   bb.0:
240     liveins: $d0, $d1
242     %0(s64) = COPY $d0
243     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
245     %1(s64) = COPY $d1
246     ; CHECK: [[VREGY:%[0-9]+]]:dpr = COPY $d1
248     %2(s64) = G_FMUL %0, %1
249     ; CHECK: [[VREGSUM:%[0-9]+]]:dpr = VMULD [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
251     $d0 = COPY %2(s64)
252     ; CHECK: $d0 = COPY [[VREGSUM]]
254     BX_RET 14, $noreg, implicit $d0
255     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
258 name:            test_fdiv_s32
259 # CHECK-LABEL: name: test_fdiv_s32
260 legalized:       true
261 regBankSelected: true
262 selected:        false
263 # CHECK: selected: true
264 registers:
265   - { id: 0, class: fprb }
266   - { id: 1, class: fprb }
267   - { id: 2, class: fprb }
268 body:             |
269   bb.0:
270     liveins: $s0, $s1
272     %0(s32) = COPY $s0
273     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
275     %1(s32) = COPY $s1
276     ; CHECK: [[VREGY:%[0-9]+]]:spr = COPY $s1
278     %2(s32) = G_FDIV %0, %1
279     ; CHECK: [[VREGSUM:%[0-9]+]]:spr = VDIVS [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
281     $s0 = COPY %2(s32)
282     ; CHECK: $s0 = COPY [[VREGSUM]]
284     BX_RET 14, $noreg, implicit $s0
285     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
288 name:            test_fdiv_s64
289 # CHECK-LABEL: name: test_fdiv_s64
290 legalized:       true
291 regBankSelected: true
292 selected:        false
293 # CHECK: selected: true
294 registers:
295   - { id: 0, class: fprb }
296   - { id: 1, class: fprb }
297   - { id: 2, class: fprb }
298 body:             |
299   bb.0:
300     liveins: $d0, $d1
302     %0(s64) = COPY $d0
303     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
305     %1(s64) = COPY $d1
306     ; CHECK: [[VREGY:%[0-9]+]]:dpr = COPY $d1
308     %2(s64) = G_FDIV %0, %1
309     ; CHECK: [[VREGSUM:%[0-9]+]]:dpr = VDIVD [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
311     $d0 = COPY %2(s64)
312     ; CHECK: $d0 = COPY [[VREGSUM]]
314     BX_RET 14, $noreg, implicit $d0
315     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
318 name:            test_fneg_s32
319 # CHECK-LABEL: name: test_fneg_s32
320 legalized:       true
321 regBankSelected: true
322 selected:        false
323 # CHECK: selected: true
324 registers:
325   - { id: 0, class: fprb }
326   - { id: 1, class: fprb }
327 body:             |
328   bb.0:
329     liveins: $s0
331     %0(s32) = COPY $s0
332     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
334     %1(s32) = G_FNEG %0
335     ; CHECK: [[VREGSUM:%[0-9]+]]:spr = VNEGS [[VREGX]], 14 /* CC::al */, $noreg
337     $s0 = COPY %1(s32)
338     ; CHECK: $s0 = COPY [[VREGSUM]]
340     BX_RET 14, $noreg, implicit $s0
341     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
344 name:            test_fneg_s64
345 # CHECK-LABEL: name: test_fneg_s64
346 legalized:       true
347 regBankSelected: true
348 selected:        false
349 # CHECK: selected: true
350 registers:
351   - { id: 0, class: fprb }
352   - { id: 1, class: fprb }
353   - { id: 2, class: fprb }
354 body:             |
355   bb.0:
356     liveins: $d0
358     %0(s64) = COPY $d0
359     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
361     %1(s64) = G_FNEG %0
362     ; CHECK: [[VREGSUM:%[0-9]+]]:dpr = VNEGD [[VREGX]], 14 /* CC::al */, $noreg
364     $d0 = COPY %1(s64)
365     ; CHECK: $d0 = COPY [[VREGSUM]]
367     BX_RET 14, $noreg, implicit $d0
368     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
371 name:            test_fma_s32
372 # CHECK-LABEL: name: test_fma_s32
373 legalized:       true
374 regBankSelected: true
375 selected:        false
376 # CHECK: selected: true
377 registers:
378   - { id: 0, class: fprb }
379   - { id: 1, class: fprb }
380   - { id: 2, class: fprb }
381   - { id: 3, class: fprb }
382 body:             |
383   bb.0:
384     liveins: $s0, $s1, $s2
386     %0(s32) = COPY $s0
387     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
389     %1(s32) = COPY $s1
390     ; CHECK: [[VREGY:%[0-9]+]]:spr = COPY $s1
392     %2(s32) = COPY $s2
393     ; CHECK: [[VREGZ:%[0-9]+]]:spr = COPY $s2
395     %3(s32) = G_FMA %0, %1, %2
396     ; CHECK: [[VREGR:%[0-9]+]]:spr = VFMAS [[VREGZ]], [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
398     $s0 = COPY %3(s32)
399     ; CHECK: $s0 = COPY [[VREGR]]
401     BX_RET 14, $noreg, implicit $s0
402     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
405 name:            test_fma_s64
406 # CHECK-LABEL: name: test_fma_s64
407 legalized:       true
408 regBankSelected: true
409 selected:        false
410 # CHECK: selected: true
411 registers:
412   - { id: 0, class: fprb }
413   - { id: 1, class: fprb }
414   - { id: 2, class: fprb }
415   - { id: 3, class: fprb }
416 body:             |
417   bb.0:
418     liveins: $d0, $d1, $d2
420     %0(s64) = COPY $d0
421     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
423     %1(s64) = COPY $d1
424     ; CHECK: [[VREGY:%[0-9]+]]:dpr = COPY $d1
426     %2(s64) = COPY $d2
427     ; CHECK: [[VREGZ:%[0-9]+]]:dpr = COPY $d2
429     %3(s64) = G_FMA %0, %1, %2
430     ; CHECK: [[VREGR:%[0-9]+]]:dpr = VFMAD [[VREGZ]], [[VREGX]], [[VREGY]], 14 /* CC::al */, $noreg
432     $d0 = COPY %3(s64)
433     ; CHECK: $d0 = COPY [[VREGR]]
435     BX_RET 14, $noreg, implicit $d0
436     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
439 name:            test_fpext_s32_to_s64
440 # CHECK-LABEL: name: test_fpext_s32_to_s64
441 legalized:       true
442 regBankSelected: true
443 selected:        false
444 # CHECK: selected: true
445 registers:
446   - { id: 0, class: fprb }
447   - { id: 1, class: fprb }
448 body:             |
449   bb.0:
450     liveins: $s0
452     %0(s32) = COPY $s0
453     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
455     %1(s64) = G_FPEXT %0(s32)
456     ; CHECK: [[VREGR:%[0-9]+]]:dpr = VCVTDS [[VREGX]], 14 /* CC::al */, $noreg
458     $d0 = COPY %1(s64)
459     ; CHECK: $d0 = COPY [[VREGR]]
461     BX_RET 14, $noreg, implicit $d0
462     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
465 name:            test_fptrunc_s64_to_s32
466 # CHECK-LABEL: name: test_fptrunc_s64_to_s32
467 legalized:       true
468 regBankSelected: true
469 selected:        false
470 # CHECK: selected: true
471 registers:
472   - { id: 0, class: fprb }
473   - { id: 1, class: fprb }
474 body:             |
475   bb.0:
476     liveins: $d0
478     %0(s64) = COPY $d0
479     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
481     %1(s32) = G_FPTRUNC %0(s64)
482     ; CHECK: [[VREGR:%[0-9]+]]:spr = VCVTSD [[VREGX]], 14 /* CC::al */, $noreg
484     $s0 = COPY %1(s32)
485     ; CHECK: $s0 = COPY [[VREGR]]
487     BX_RET 14, $noreg, implicit $s0
488     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
491 name:            test_fptosi_s32
492 # CHECK-LABEL: name: test_fptosi_s32
493 legalized:       true
494 regBankSelected: true
495 selected:        false
496 # CHECK: selected: true
497 registers:
498   - { id: 0, class: fprb }
499   - { id: 1, class: gprb }
500 body:             |
501   bb.0:
502     liveins: $s0
504     %0(s32) = COPY $s0
505     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
507     %1(s32) = G_FPTOSI %0(s32)
508     ; CHECK: [[VREGI:%[0-9]+]]:spr = VTOSIZS [[VREGX]], 14 /* CC::al */, $noreg
509     ; CHECK: [[VREGR:%[0-9]+]]:gpr = COPY [[VREGI]]
511     $r0 = COPY %1(s32)
512     ; CHECK: $r0 = COPY [[VREGR]]
514     BX_RET 14, $noreg, implicit $r0
515     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
518 name:            test_fptosi_s64
519 # CHECK-LABEL: name: test_fptosi_s64
520 legalized:       true
521 regBankSelected: true
522 selected:        false
523 # CHECK: selected: true
524 registers:
525   - { id: 0, class: fprb }
526   - { id: 1, class: gprb }
527 body:             |
528   bb.0:
529     liveins: $d0
531     %0(s64) = COPY $d0
532     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
534     %1(s32) = G_FPTOSI %0(s64)
535     ; CHECK: [[VREGI:%[0-9]+]]:spr = VTOSIZD [[VREGX]], 14 /* CC::al */, $noreg
536     ; CHECK: [[VREGR:%[0-9]+]]:gpr = COPY [[VREGI]]
538     $r0 = COPY %1(s32)
539     ; CHECK: $r0 = COPY [[VREGR]]
541     BX_RET 14, $noreg, implicit $r0
542     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
545 name:            test_fptoui_s32
546 # CHECK-LABEL: name: test_fptoui_s32
547 legalized:       true
548 regBankSelected: true
549 selected:        false
550 # CHECK: selected: true
551 registers:
552   - { id: 0, class: fprb }
553   - { id: 1, class: gprb }
554 body:             |
555   bb.0:
556     liveins: $s0
558     %0(s32) = COPY $s0
559     ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
561     %1(s32) = G_FPTOUI %0(s32)
562     ; CHECK: [[VREGI:%[0-9]+]]:spr = VTOUIZS [[VREGX]], 14 /* CC::al */, $noreg
563     ; CHECK: [[VREGR:%[0-9]+]]:gpr = COPY [[VREGI]]
565     $r0 = COPY %1(s32)
566     ; CHECK: $r0 = COPY [[VREGR]]
568     BX_RET 14, $noreg, implicit $r0
569     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
572 name:            test_fptoui_s64
573 # CHECK-LABEL: name: test_fptoui_s64
574 legalized:       true
575 regBankSelected: true
576 selected:        false
577 # CHECK: selected: true
578 registers:
579   - { id: 0, class: fprb }
580   - { id: 1, class: gprb }
581 body:             |
582   bb.0:
583     liveins: $d0
585     %0(s64) = COPY $d0
586     ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
588     %1(s32) = G_FPTOUI %0(s64)
589     ; CHECK: [[VREGI:%[0-9]+]]:spr = VTOUIZD [[VREGX]], 14 /* CC::al */, $noreg
590     ; CHECK: [[VREGR:%[0-9]+]]:gpr = COPY [[VREGI]]
592     $r0 = COPY %1(s32)
593     ; CHECK: $r0 = COPY [[VREGR]]
595     BX_RET 14, $noreg, implicit $r0
596     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
599 name:            test_sitofp_s32
600 # CHECK-LABEL: name: test_sitofp_s32
601 legalized:       true
602 regBankSelected: true
603 selected:        false
604 # CHECK: selected: true
605 registers:
606   - { id: 0, class: gprb }
607   - { id: 1, class: fprb }
608 body:             |
609   bb.0:
610     liveins: $r0
612     %0(s32) = COPY $r0
613     ; CHECK: [[VREGX:%[0-9]+]]:gpr = COPY $r0
615     %1(s32) = G_SITOFP %0(s32)
616     ; CHECK: [[VREGF:%[0-9]+]]:spr = COPY [[VREGX]]
617     ; CHECK: [[VREGR:%[0-9]+]]:spr = VSITOS [[VREGF]], 14 /* CC::al */, $noreg
619     $s0 = COPY %1(s32)
620     ; CHECK: $s0 = COPY [[VREGR]]
622     BX_RET 14, $noreg, implicit $s0
623     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
626 name:            test_sitofp_s64
627 # CHECK-LABEL: name: test_sitofp_s64
628 legalized:       true
629 regBankSelected: true
630 selected:        false
631 # CHECK: selected: true
632 registers:
633   - { id: 0, class: gprb }
634   - { id: 1, class: fprb }
635 body:             |
636   bb.0:
637     liveins: $r0
639     %0(s32) = COPY $r0
640     ; CHECK: [[VREGX:%[0-9]+]]:gpr = COPY $r0
642     %1(s64) = G_SITOFP %0(s32)
643     ; CHECK: [[VREGF:%[0-9]+]]:spr = COPY [[VREGX]]
644     ; CHECK: [[VREGR:%[0-9]+]]:dpr = VSITOD [[VREGF]], 14 /* CC::al */, $noreg
646     $d0 = COPY %1(s64)
647     ; CHECK: $d0 = COPY [[VREGR]]
649     BX_RET 14, $noreg, implicit $d0
650     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
653 name:            test_uitofp_s32
654 # CHECK-LABEL: name: test_uitofp_s32
655 legalized:       true
656 regBankSelected: true
657 selected:        false
658 # CHECK: selected: true
659 registers:
660   - { id: 0, class: gprb }
661   - { id: 1, class: fprb }
662 body:             |
663   bb.0:
664     liveins: $r0
666     %0(s32) = COPY $r0
667     ; CHECK: [[VREGX:%[0-9]+]]:gpr = COPY $r0
669     %1(s32) = G_UITOFP %0(s32)
670     ; CHECK: [[VREGF:%[0-9]+]]:spr = COPY [[VREGX]]
671     ; CHECK: [[VREGR:%[0-9]+]]:spr = VUITOS [[VREGF]], 14 /* CC::al */, $noreg
673     $s0 = COPY %1(s32)
674     ; CHECK: $s0 = COPY [[VREGR]]
676     BX_RET 14, $noreg, implicit $s0
677     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
680 name:            test_uitofp_s64
681 # CHECK-LABEL: name: test_uitofp_s64
682 legalized:       true
683 regBankSelected: true
684 selected:        false
685 # CHECK: selected: true
686 registers:
687   - { id: 0, class: gprb }
688   - { id: 1, class: fprb }
689 body:             |
690   bb.0:
691     liveins: $r0
693     %0(s32) = COPY $r0
694     ; CHECK: [[VREGX:%[0-9]+]]:gpr = COPY $r0
696     %1(s64) = G_UITOFP %0(s32)
697     ; CHECK: [[VREGF:%[0-9]+]]:spr = COPY [[VREGX]]
698     ; CHECK: [[VREGR:%[0-9]+]]:dpr = VUITOD [[VREGF]], 14 /* CC::al */, $noreg
700     $d0 = COPY %1(s64)
701     ; CHECK: $d0 = COPY [[VREGR]]
703     BX_RET 14, $noreg, implicit $d0
704     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
707 name:            test_load_f32
708 # CHECK-LABEL: name: test_load_f32
709 legalized:       true
710 regBankSelected: true
711 selected:        false
712 # CHECK: selected: true
713 registers:
714   - { id: 0, class: gprb }
715   - { id: 1, class: fprb }
716 body:             |
717   bb.0:
718     liveins: $r0
720     %0(p0) = COPY $r0
721     ; CHECK: %[[P:[0-9]+]]:gpr = COPY $r0
723     %1(s32) = G_LOAD %0(p0) :: (load (s32))
724     ; CHECK: %[[V:[0-9]+]]:spr = VLDRS %[[P]], 0, 14 /* CC::al */, $noreg
726     $s0 = COPY %1
727     ; CHECK: $s0 = COPY %[[V]]
729     BX_RET 14, $noreg, implicit $s0
730     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
733 name:            test_load_f64
734 # CHECK-LABEL: name: test_load_f64
735 legalized:       true
736 regBankSelected: true
737 selected:        false
738 # CHECK: selected: true
739 registers:
740   - { id: 0, class: gprb }
741   - { id: 1, class: fprb }
742 body:             |
743   bb.0:
744     liveins: $r0
746     %0(p0) = COPY $r0
747     ; CHECK: %[[P:[0-9]+]]:gpr = COPY $r0
749     %1(s64) = G_LOAD %0(p0) :: (load (s64))
750     ; CHECK: %[[V:[0-9]+]]:dpr = VLDRD %[[P]], 0, 14 /* CC::al */, $noreg
752     $d0 = COPY %1
753     ; CHECK: $d0 = COPY %[[V]]
755     BX_RET 14, $noreg, implicit $d0
756     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
759 name:            test_stores
760 # CHECK-LABEL: name: test_stores
761 legalized:       true
762 regBankSelected: true
763 selected:        false
764 # CHECK: selected: true
765 registers:
766   - { id: 0, class: gprb }
767   - { id: 1, class: fprb }
768   - { id: 2, class: fprb }
769 # CHECK: id: [[P:[0-9]+]], class: gpr
770 # CHECK: id: [[F32:[0-9]+]], class: spr
771 # CHECK: id: [[F64:[0-9]+]], class: dpr
772 body:             |
773   bb.0:
774     liveins: $r0, $s0, $d0
776     %0(p0) = COPY $r0
777     %1(s32) = COPY $s0
778     %2(s64) = COPY $d2
780     G_STORE %1(s32), %0(p0) :: (store (s32))
781     ; CHECK: VSTRS %[[F32]], %[[P]], 0, 14 /* CC::al */, $noreg
783     G_STORE %2(s64), %0(p0) :: (store (s64))
784     ; CHECK: VSTRD %[[F64]], %[[P]], 0, 14 /* CC::al */, $noreg
786     BX_RET 14, $noreg
789 name:            test_phi_s64
790 # CHECK-LABEL: name: test_phi_s64
791 legalized:       true
792 regBankSelected: true
793 selected:        false
794 # CHECK: selected: true
795 tracksRegLiveness: true
796 registers:
797   - { id: 0, class: gprb }
798   - { id: 1, class: gprb }
799   - { id: 2, class: fprb }
800   - { id: 3, class: fprb }
801   - { id: 4, class: fprb }
802 body:             |
803   bb.0:
804   ; CHECK: [[BB1:bb.0]]:
805     successors: %bb.1(0x40000000), %bb.2(0x40000000)
806     liveins: $r0, $d0, $d1
808     %0(s32) = COPY $r0
809     %1(s1) = G_TRUNC %0(s32)
811     %2(s64) = COPY $d0
812     %3(s64) = COPY $d1
813     ; CHECK: [[V1:%[0-9]+]]:dpr = COPY $d0
814     ; CHECK: [[V2:%[0-9]+]]:dpr = COPY $d1
816     G_BRCOND %1(s1), %bb.1
817     G_BR %bb.2
819   bb.1:
820   ; CHECK: [[BB2:bb.1]]:
821     successors: %bb.2(0x80000000)
823     G_BR %bb.2
824     ; CHECK: B %bb.2
826   bb.2:
827   ; CHECK: bb.2
828     %4(s64) = G_PHI %2(s64), %bb.0, %3(s64), %bb.1
829     ; CHECK: {{%[0-9]+}}:dpr = PHI [[V1]], %[[BB1]], [[V2]], %[[BB2]]
831     $d0 = COPY %4(s64)
832     BX_RET 14 /* CC::al */, $noreg, implicit $d0
835 name:            test_soft_fp_double
836 # CHECK-LABEL: name: test_soft_fp_double
837 legalized:       true
838 regBankSelected: true
839 selected:        false
840 # CHECK: selected: true
841 registers:
842   - { id: 0, class: gprb }
843   - { id: 1, class: gprb }
844   - { id: 2, class: fprb }
845   - { id: 3, class: gprb }
846   - { id: 4, class: gprb }
847 body:             |
848   bb.0:
849     liveins: $r0, $r1, $r2, $r3
851     %0(s32) = COPY $r2
852     ; CHECK: [[IN1:%[0-9]+]]:gpr = COPY $r2
854     %1(s32) = COPY $r3
855     ; CHECK: [[IN2:%[0-9]+]]:gpr = COPY $r3
857     %2(s64) = G_MERGE_VALUES %0(s32), %1(s32)
858     ; CHECK: %[[DREG:[0-9]+]]:dpr = VMOVDRR [[IN1]], [[IN2]]
860     %3(s32), %4(s32) = G_UNMERGE_VALUES %2(s64)
861     ; CHECK: [[OUT1:%[0-9]+]]:gpr, [[OUT2:%[0-9]+]]:gpr = VMOVRRD %[[DREG]]
863     $r0 = COPY %3
864     ; CHECK: $r0 = COPY [[OUT1]]
866     $r1 = COPY %4
867     ; CHECK: $r1 = COPY [[OUT2]]
869     BX_RET 14, $noreg, implicit $r0, implicit $r1
870     ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0, implicit $r1