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
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 }
49 # CHECK-LABEL: name: test_trunc_s64
53 # CHECK: selected: true
55 - { id: 0, class: fprb }
56 - { id: 1, class: gprb }
57 - { id: 2, class: gprb }
63 ; CHECK: [[VREG:%[0-9]+]]:dpr = COPY $d0
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
75 ; CHECK: BX_RET 14 /* CC::al */, $noreg
79 # CHECK-LABEL: name: test_fadd_s32
83 # CHECK: selected: true
85 - { id: 0, class: fprb }
86 - { id: 1, class: fprb }
87 - { id: 2, class: fprb }
93 ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
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
102 ; CHECK: $s0 = COPY [[VREGSUM]]
104 BX_RET 14, $noreg, implicit $s0
105 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
109 # CHECK-LABEL: name: test_fadd_s64
111 regBankSelected: true
113 # CHECK: selected: true
115 - { id: 0, class: fprb }
116 - { id: 1, class: fprb }
117 - { id: 2, class: fprb }
123 ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
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
132 ; CHECK: $d0 = COPY [[VREGSUM]]
134 BX_RET 14, $noreg, implicit $d0
135 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
139 # CHECK-LABEL: name: test_fsub_s32
141 regBankSelected: true
143 # CHECK: selected: true
145 - { id: 0, class: fprb }
146 - { id: 1, class: fprb }
147 - { id: 2, class: fprb }
153 ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
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
162 ; CHECK: $s0 = COPY [[VREGSUM]]
164 BX_RET 14, $noreg, implicit $s0
165 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
169 # CHECK-LABEL: name: test_fsub_s64
171 regBankSelected: true
173 # CHECK: selected: true
175 - { id: 0, class: fprb }
176 - { id: 1, class: fprb }
177 - { id: 2, class: fprb }
183 ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
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
192 ; CHECK: $d0 = COPY [[VREGSUM]]
194 BX_RET 14, $noreg, implicit $d0
195 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
199 # CHECK-LABEL: name: test_fmul_s32
201 regBankSelected: true
203 # CHECK: selected: true
205 - { id: 0, class: fprb }
206 - { id: 1, class: fprb }
207 - { id: 2, class: fprb }
213 ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
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
222 ; CHECK: $s0 = COPY [[VREGSUM]]
224 BX_RET 14, $noreg, implicit $s0
225 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
229 # CHECK-LABEL: name: test_fmul_s64
231 regBankSelected: true
233 # CHECK: selected: true
235 - { id: 0, class: fprb }
236 - { id: 1, class: fprb }
237 - { id: 2, class: fprb }
243 ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
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
252 ; CHECK: $d0 = COPY [[VREGSUM]]
254 BX_RET 14, $noreg, implicit $d0
255 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
259 # CHECK-LABEL: name: test_fdiv_s32
261 regBankSelected: true
263 # CHECK: selected: true
265 - { id: 0, class: fprb }
266 - { id: 1, class: fprb }
267 - { id: 2, class: fprb }
273 ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
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
282 ; CHECK: $s0 = COPY [[VREGSUM]]
284 BX_RET 14, $noreg, implicit $s0
285 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
289 # CHECK-LABEL: name: test_fdiv_s64
291 regBankSelected: true
293 # CHECK: selected: true
295 - { id: 0, class: fprb }
296 - { id: 1, class: fprb }
297 - { id: 2, class: fprb }
303 ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
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
312 ; CHECK: $d0 = COPY [[VREGSUM]]
314 BX_RET 14, $noreg, implicit $d0
315 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
319 # CHECK-LABEL: name: test_fneg_s32
321 regBankSelected: true
323 # CHECK: selected: true
325 - { id: 0, class: fprb }
326 - { id: 1, class: fprb }
332 ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
335 ; CHECK: [[VREGSUM:%[0-9]+]]:spr = VNEGS [[VREGX]], 14 /* CC::al */, $noreg
338 ; CHECK: $s0 = COPY [[VREGSUM]]
340 BX_RET 14, $noreg, implicit $s0
341 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
345 # CHECK-LABEL: name: test_fneg_s64
347 regBankSelected: true
349 # CHECK: selected: true
351 - { id: 0, class: fprb }
352 - { id: 1, class: fprb }
353 - { id: 2, class: fprb }
359 ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
362 ; CHECK: [[VREGSUM:%[0-9]+]]:dpr = VNEGD [[VREGX]], 14 /* CC::al */, $noreg
365 ; CHECK: $d0 = COPY [[VREGSUM]]
367 BX_RET 14, $noreg, implicit $d0
368 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
372 # CHECK-LABEL: name: test_fma_s32
374 regBankSelected: true
376 # CHECK: selected: true
378 - { id: 0, class: fprb }
379 - { id: 1, class: fprb }
380 - { id: 2, class: fprb }
381 - { id: 3, class: fprb }
384 liveins: $s0, $s1, $s2
387 ; CHECK: [[VREGX:%[0-9]+]]:spr = COPY $s0
390 ; CHECK: [[VREGY:%[0-9]+]]:spr = COPY $s1
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
399 ; CHECK: $s0 = COPY [[VREGR]]
401 BX_RET 14, $noreg, implicit $s0
402 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
406 # CHECK-LABEL: name: test_fma_s64
408 regBankSelected: true
410 # CHECK: selected: true
412 - { id: 0, class: fprb }
413 - { id: 1, class: fprb }
414 - { id: 2, class: fprb }
415 - { id: 3, class: fprb }
418 liveins: $d0, $d1, $d2
421 ; CHECK: [[VREGX:%[0-9]+]]:dpr = COPY $d0
424 ; CHECK: [[VREGY:%[0-9]+]]:dpr = COPY $d1
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
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
442 regBankSelected: true
444 # CHECK: selected: true
446 - { id: 0, class: fprb }
447 - { id: 1, class: fprb }
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
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
468 regBankSelected: true
470 # CHECK: selected: true
472 - { id: 0, class: fprb }
473 - { id: 1, class: fprb }
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
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
494 regBankSelected: true
496 # CHECK: selected: true
498 - { id: 0, class: fprb }
499 - { id: 1, class: gprb }
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]]
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
521 regBankSelected: true
523 # CHECK: selected: true
525 - { id: 0, class: fprb }
526 - { id: 1, class: gprb }
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]]
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
548 regBankSelected: true
550 # CHECK: selected: true
552 - { id: 0, class: fprb }
553 - { id: 1, class: gprb }
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]]
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
575 regBankSelected: true
577 # CHECK: selected: true
579 - { id: 0, class: fprb }
580 - { id: 1, class: gprb }
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]]
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
602 regBankSelected: true
604 # CHECK: selected: true
606 - { id: 0, class: gprb }
607 - { id: 1, class: fprb }
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
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
629 regBankSelected: true
631 # CHECK: selected: true
633 - { id: 0, class: gprb }
634 - { id: 1, class: fprb }
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
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
656 regBankSelected: true
658 # CHECK: selected: true
660 - { id: 0, class: gprb }
661 - { id: 1, class: fprb }
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
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
683 regBankSelected: true
685 # CHECK: selected: true
687 - { id: 0, class: gprb }
688 - { id: 1, class: fprb }
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
701 ; CHECK: $d0 = COPY [[VREGR]]
703 BX_RET 14, $noreg, implicit $d0
704 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
708 # CHECK-LABEL: name: test_load_f32
710 regBankSelected: true
712 # CHECK: selected: true
714 - { id: 0, class: gprb }
715 - { id: 1, class: fprb }
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
727 ; CHECK: $s0 = COPY %[[V]]
729 BX_RET 14, $noreg, implicit $s0
730 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $s0
734 # CHECK-LABEL: name: test_load_f64
736 regBankSelected: true
738 # CHECK: selected: true
740 - { id: 0, class: gprb }
741 - { id: 1, class: fprb }
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
753 ; CHECK: $d0 = COPY %[[V]]
755 BX_RET 14, $noreg, implicit $d0
756 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $d0
760 # CHECK-LABEL: name: test_stores
762 regBankSelected: true
764 # CHECK: selected: true
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
774 liveins: $r0, $s0, $d0
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
790 # CHECK-LABEL: name: test_phi_s64
792 regBankSelected: true
794 # CHECK: selected: true
795 tracksRegLiveness: true
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 }
804 ; CHECK: [[BB1:bb.0]]:
805 successors: %bb.1(0x40000000), %bb.2(0x40000000)
806 liveins: $r0, $d0, $d1
809 %1(s1) = G_TRUNC %0(s32)
813 ; CHECK: [[V1:%[0-9]+]]:dpr = COPY $d0
814 ; CHECK: [[V2:%[0-9]+]]:dpr = COPY $d1
816 G_BRCOND %1(s1), %bb.1
820 ; CHECK: [[BB2:bb.1]]:
821 successors: %bb.2(0x80000000)
828 %4(s64) = G_PHI %2(s64), %bb.0, %3(s64), %bb.1
829 ; CHECK: {{%[0-9]+}}:dpr = PHI [[V1]], %[[BB1]], [[V2]], %[[BB2]]
832 BX_RET 14 /* CC::al */, $noreg, implicit $d0
835 name: test_soft_fp_double
836 # CHECK-LABEL: name: test_soft_fp_double
838 regBankSelected: true
840 # CHECK: selected: true
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 }
849 liveins: $r0, $r1, $r2, $r3
852 ; CHECK: [[IN1:%[0-9]+]]:gpr = COPY $r2
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]]
864 ; CHECK: $r0 = COPY [[OUT1]]
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