1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s
5 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
7 define void @add_s32_gpr() { ret void }
8 define void @add_s64_gpr() { ret void }
10 define void @add_imm_s32_gpr() { ret void }
11 define void @add_imm_s64_gpr() { ret void }
13 define void @add_imm_s32_gpr_bb() { ret void }
15 define void @sub_s32_gpr() { ret void }
16 define void @sub_s64_gpr() { ret void }
18 define void @or_s32_gpr() { ret void }
19 define void @or_s64_gpr() { ret void }
20 define void @or_v2s32_fpr() { ret void }
22 define void @and_s32_gpr() { ret void }
23 define void @and_s64_gpr() { ret void }
25 define void @shl_s32_gpr() { ret void }
26 define void @shl_s64_gpr() { ret void }
28 define void @lshr_s32_gpr() { ret void }
29 define void @lshr_s64_gpr() { ret void }
31 define void @ashr_s32_gpr() { ret void }
32 define void @ashr_s64_gpr() { ret void }
34 define void @mul_s32_gpr() { ret void }
35 define void @mul_s64_gpr() { ret void }
37 define void @mulh_s64_gpr() { ret void }
39 define void @sdiv_s32_gpr() { ret void }
40 define void @sdiv_s64_gpr() { ret void }
42 define void @udiv_s32_gpr() { ret void }
43 define void @udiv_s64_gpr() { ret void }
45 define void @fadd_s32_fpr() { ret void }
46 define void @fadd_s64_fpr() { ret void }
48 define void @fsub_s32_fpr() { ret void }
49 define void @fsub_s64_fpr() { ret void }
51 define void @fmul_s32_fpr() { ret void }
52 define void @fmul_s64_fpr() { ret void }
54 define void @fdiv_s32_fpr() { ret void }
55 define void @fdiv_s64_fpr() { ret void }
60 # Check that we select a 32-bit GPR G_ADD into ADDWrr on GPR32.
61 # Also check that we constrain the register class of the COPY to GPR32.
67 - { id: 0, class: gpr }
68 - { id: 1, class: gpr }
69 - { id: 2, class: gpr }
75 ; CHECK-LABEL: name: add_s32_gpr
76 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
77 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
78 ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr [[COPY]], [[COPY1]]
79 ; CHECK: %w0 = COPY [[ADDWrr]]
82 %2(s32) = G_ADD %0, %1
87 # Same as add_s32_gpr, for 64-bit operations.
93 - { id: 0, class: gpr }
94 - { id: 1, class: gpr }
95 - { id: 2, class: gpr }
101 ; CHECK-LABEL: name: add_s64_gpr
102 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
103 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
104 ; CHECK: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[COPY1]]
105 ; CHECK: %x0 = COPY [[ADDXrr]]
108 %2(s64) = G_ADD %0, %1
113 name: add_imm_s32_gpr
115 regBankSelected: true
118 - { id: 0, class: gpr }
119 - { id: 1, class: gpr }
120 - { id: 2, class: gpr }
126 ; CHECK-LABEL: name: add_imm_s32_gpr
127 ; CHECK: [[COPY:%[0-9]+]]:gpr32sp = COPY %w0
128 ; CHECK: [[ADDWri:%[0-9]+]]:gpr32sp = ADDWri [[COPY]], 1, 0
129 ; CHECK: %w0 = COPY [[ADDWri]]
131 %1(s32) = G_CONSTANT i32 1
132 %2(s32) = G_ADD %0, %1
137 name: add_imm_s64_gpr
139 regBankSelected: true
142 - { id: 0, class: gpr }
143 - { id: 1, class: gpr }
144 - { id: 2, class: gpr }
150 ; CHECK-LABEL: name: add_imm_s64_gpr
151 ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY %x0
152 ; CHECK: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri [[COPY]], 1, 0
153 ; CHECK: %x0 = COPY [[ADDXri]]
155 %1(s64) = G_CONSTANT i32 1
156 %2(s64) = G_ADD %0, %1
161 name: add_imm_s32_gpr_bb
163 regBankSelected: true
166 - { id: 0, class: gpr }
167 - { id: 1, class: gpr }
168 - { id: 2, class: gpr }
171 ; CHECK-LABEL: name: add_imm_s32_gpr_bb
173 ; CHECK: successors: %bb.1(0x80000000)
174 ; CHECK: [[COPY:%[0-9]+]]:gpr32sp = COPY %w0
177 ; CHECK: [[ADDWri:%[0-9]+]]:gpr32sp = ADDWri [[COPY]], 1, 0
178 ; CHECK: %w0 = COPY [[ADDWri]]
184 %1(s32) = G_CONSTANT i32 1
188 %2(s32) = G_ADD %0, %1
193 # Same as add_s32_gpr, for G_SUB operations.
196 regBankSelected: true
199 - { id: 0, class: gpr }
200 - { id: 1, class: gpr }
201 - { id: 2, class: gpr }
207 ; CHECK-LABEL: name: sub_s32_gpr
208 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
209 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
210 ; CHECK: [[SUBSWrr:%[0-9]+]]:gpr32 = SUBSWrr [[COPY]], [[COPY1]], implicit-def %nzcv
211 ; CHECK: %w0 = COPY [[SUBSWrr]]
214 %2(s32) = G_SUB %0, %1
219 # Same as add_s64_gpr, for G_SUB operations.
222 regBankSelected: true
225 - { id: 0, class: gpr }
226 - { id: 1, class: gpr }
227 - { id: 2, class: gpr }
233 ; CHECK-LABEL: name: sub_s64_gpr
234 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
235 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
236 ; CHECK: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr [[COPY]], [[COPY1]], implicit-def %nzcv
237 ; CHECK: %x0 = COPY [[SUBSXrr]]
240 %2(s64) = G_SUB %0, %1
245 # Same as add_s32_gpr, for G_OR operations.
248 regBankSelected: true
251 - { id: 0, class: gpr }
252 - { id: 1, class: gpr }
253 - { id: 2, class: gpr }
259 ; CHECK-LABEL: name: or_s32_gpr
260 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
261 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
262 ; CHECK: [[ORRWrr:%[0-9]+]]:gpr32 = ORRWrr [[COPY]], [[COPY1]]
263 ; CHECK: %w0 = COPY [[ORRWrr]]
266 %2(s32) = G_OR %0, %1
271 # Same as add_s64_gpr, for G_OR operations.
274 regBankSelected: true
277 - { id: 0, class: gpr }
278 - { id: 1, class: gpr }
279 - { id: 2, class: gpr }
285 ; CHECK-LABEL: name: or_s64_gpr
286 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
287 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
288 ; CHECK: [[ORRXrr:%[0-9]+]]:gpr64 = ORRXrr [[COPY]], [[COPY1]]
289 ; CHECK: %x0 = COPY [[ORRXrr]]
292 %2(s64) = G_OR %0, %1
297 # 64-bit G_OR on vector registers.
300 regBankSelected: true
303 - { id: 0, class: fpr }
304 - { id: 1, class: fpr }
305 - { id: 2, class: fpr }
307 # The actual OR does not matter as long as it is operating
308 # on 64-bit width vector.
313 ; CHECK-LABEL: name: or_v2s32_fpr
314 ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY %d0
315 ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY %d1
316 ; CHECK: [[ORRv8i8_:%[0-9]+]]:fpr64 = ORRv8i8 [[COPY]], [[COPY1]]
317 ; CHECK: %d0 = COPY [[ORRv8i8_]]
318 %0(<2 x s32>) = COPY %d0
319 %1(<2 x s32>) = COPY %d1
320 %2(<2 x s32>) = G_OR %0, %1
321 %d0 = COPY %2(<2 x s32>)
325 # Same as add_s32_gpr, for G_AND operations.
328 regBankSelected: true
331 - { id: 0, class: gpr }
332 - { id: 1, class: gpr }
333 - { id: 2, class: gpr }
339 ; CHECK-LABEL: name: and_s32_gpr
340 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
341 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
342 ; CHECK: [[ANDWrr:%[0-9]+]]:gpr32 = ANDWrr [[COPY]], [[COPY1]]
343 ; CHECK: %w0 = COPY [[ANDWrr]]
346 %2(s32) = G_AND %0, %1
351 # Same as add_s64_gpr, for G_AND operations.
354 regBankSelected: true
357 - { id: 0, class: gpr }
358 - { id: 1, class: gpr }
359 - { id: 2, class: gpr }
365 ; CHECK-LABEL: name: and_s64_gpr
366 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
367 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
368 ; CHECK: [[ANDXrr:%[0-9]+]]:gpr64 = ANDXrr [[COPY]], [[COPY1]]
369 ; CHECK: %x0 = COPY [[ANDXrr]]
372 %2(s64) = G_AND %0, %1
377 # Same as add_s32_gpr, for G_SHL operations.
380 regBankSelected: true
383 - { id: 0, class: gpr }
384 - { id: 1, class: gpr }
385 - { id: 2, class: gpr }
391 ; CHECK-LABEL: name: shl_s32_gpr
392 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
393 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
394 ; CHECK: [[LSLVWr:%[0-9]+]]:gpr32 = LSLVWr [[COPY]], [[COPY1]]
395 ; CHECK: %w0 = COPY [[LSLVWr]]
398 %2(s32) = G_SHL %0, %1
403 # Same as add_s64_gpr, for G_SHL operations.
406 regBankSelected: true
409 - { id: 0, class: gpr }
410 - { id: 1, class: gpr }
411 - { id: 2, class: gpr }
417 ; CHECK-LABEL: name: shl_s64_gpr
418 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
419 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
420 ; CHECK: [[LSLVXr:%[0-9]+]]:gpr64 = LSLVXr [[COPY]], [[COPY1]]
421 ; CHECK: %x0 = COPY [[LSLVXr]]
424 %2(s64) = G_SHL %0, %1
429 # Same as add_s32_gpr, for G_LSHR operations.
432 regBankSelected: true
435 - { id: 0, class: gpr }
436 - { id: 1, class: gpr }
437 - { id: 2, class: gpr }
443 ; CHECK-LABEL: name: lshr_s32_gpr
444 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
445 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
446 ; CHECK: [[LSRVWr:%[0-9]+]]:gpr32 = LSRVWr [[COPY]], [[COPY1]]
447 ; CHECK: %w0 = COPY [[LSRVWr]]
450 %2(s32) = G_LSHR %0, %1
455 # Same as add_s64_gpr, for G_LSHR operations.
458 regBankSelected: true
461 - { id: 0, class: gpr }
462 - { id: 1, class: gpr }
463 - { id: 2, class: gpr }
469 ; CHECK-LABEL: name: lshr_s64_gpr
470 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
471 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
472 ; CHECK: [[LSRVXr:%[0-9]+]]:gpr64 = LSRVXr [[COPY]], [[COPY1]]
473 ; CHECK: %x0 = COPY [[LSRVXr]]
476 %2(s64) = G_LSHR %0, %1
481 # Same as add_s32_gpr, for G_ASHR operations.
484 regBankSelected: true
487 - { id: 0, class: gpr }
488 - { id: 1, class: gpr }
489 - { id: 2, class: gpr }
495 ; CHECK-LABEL: name: ashr_s32_gpr
496 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
497 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
498 ; CHECK: [[ASRVWr:%[0-9]+]]:gpr32 = ASRVWr [[COPY]], [[COPY1]]
499 ; CHECK: %w0 = COPY [[ASRVWr]]
502 %2(s32) = G_ASHR %0, %1
507 # Same as add_s64_gpr, for G_ASHR operations.
510 regBankSelected: true
513 - { id: 0, class: gpr }
514 - { id: 1, class: gpr }
515 - { id: 2, class: gpr }
521 ; CHECK-LABEL: name: ashr_s64_gpr
522 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
523 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
524 ; CHECK: [[ASRVXr:%[0-9]+]]:gpr64 = ASRVXr [[COPY]], [[COPY1]]
525 ; CHECK: %x0 = COPY [[ASRVXr]]
528 %2(s64) = G_ASHR %0, %1
533 # Check that we select s32 GPR G_MUL. This is trickier than other binops because
534 # there is only MADDWrrr, and we have to use the WZR physreg.
537 regBankSelected: true
540 - { id: 0, class: gpr }
541 - { id: 1, class: gpr }
542 - { id: 2, class: gpr }
548 ; CHECK-LABEL: name: mul_s32_gpr
549 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
550 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
551 ; CHECK: [[MADDWrrr:%[0-9]+]]:gpr32 = MADDWrrr [[COPY]], [[COPY1]], %wzr
552 ; CHECK: %w0 = COPY [[MADDWrrr]]
555 %2(s32) = G_MUL %0, %1
560 # Same as mul_s32_gpr for the s64 type.
563 regBankSelected: true
566 - { id: 0, class: gpr }
567 - { id: 1, class: gpr }
568 - { id: 2, class: gpr }
574 ; CHECK-LABEL: name: mul_s64_gpr
575 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
576 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
577 ; CHECK: [[MADDXrrr:%[0-9]+]]:gpr64 = MADDXrrr [[COPY]], [[COPY1]], %xzr
578 ; CHECK: %x0 = COPY [[MADDXrrr]]
581 %2(s64) = G_MUL %0, %1
586 # Same as mul_s32_gpr for the s64 type.
589 regBankSelected: true
596 ; CHECK-LABEL: name: mulh_s64_gpr
597 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
598 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
599 ; CHECK: [[SMULHrr:%[0-9]+]]:gpr64 = SMULHrr [[COPY]], [[COPY1]]
600 ; CHECK: [[UMULHrr:%[0-9]+]]:gpr64 = UMULHrr [[COPY]], [[COPY1]]
601 ; CHECK: %x0 = COPY [[SMULHrr]]
602 ; CHECK: %x0 = COPY [[UMULHrr]]
603 %0:gpr(s64) = COPY %x0
604 %1:gpr(s64) = COPY %x1
605 %2:gpr(s64) = G_SMULH %0, %1
606 %3:gpr(s64) = G_UMULH %0, %1
612 # Same as add_s32_gpr, for G_SDIV operations.
615 regBankSelected: true
618 - { id: 0, class: gpr }
619 - { id: 1, class: gpr }
620 - { id: 2, class: gpr }
626 ; CHECK-LABEL: name: sdiv_s32_gpr
627 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
628 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
629 ; CHECK: [[SDIVWr:%[0-9]+]]:gpr32 = SDIVWr [[COPY]], [[COPY1]]
630 ; CHECK: %w0 = COPY [[SDIVWr]]
633 %2(s32) = G_SDIV %0, %1
638 # Same as add_s64_gpr, for G_SDIV operations.
641 regBankSelected: true
644 - { id: 0, class: gpr }
645 - { id: 1, class: gpr }
646 - { id: 2, class: gpr }
652 ; CHECK-LABEL: name: sdiv_s64_gpr
653 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
654 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
655 ; CHECK: [[SDIVXr:%[0-9]+]]:gpr64 = SDIVXr [[COPY]], [[COPY1]]
656 ; CHECK: %x0 = COPY [[SDIVXr]]
659 %2(s64) = G_SDIV %0, %1
664 # Same as add_s32_gpr, for G_UDIV operations.
667 regBankSelected: true
670 - { id: 0, class: gpr }
671 - { id: 1, class: gpr }
672 - { id: 2, class: gpr }
678 ; CHECK-LABEL: name: udiv_s32_gpr
679 ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY %w0
680 ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY %w1
681 ; CHECK: [[UDIVWr:%[0-9]+]]:gpr32 = UDIVWr [[COPY]], [[COPY1]]
682 ; CHECK: %w0 = COPY [[UDIVWr]]
685 %2(s32) = G_UDIV %0, %1
690 # Same as add_s64_gpr, for G_UDIV operations.
693 regBankSelected: true
696 - { id: 0, class: gpr }
697 - { id: 1, class: gpr }
698 - { id: 2, class: gpr }
704 ; CHECK-LABEL: name: udiv_s64_gpr
705 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY %x0
706 ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY %x1
707 ; CHECK: [[UDIVXr:%[0-9]+]]:gpr64 = UDIVXr [[COPY]], [[COPY1]]
708 ; CHECK: %x0 = COPY [[UDIVXr]]
711 %2(s64) = G_UDIV %0, %1
716 # Check that we select a s32 FPR G_FADD into FADDSrr.
719 regBankSelected: true
722 - { id: 0, class: fpr }
723 - { id: 1, class: fpr }
724 - { id: 2, class: fpr }
730 ; CHECK-LABEL: name: fadd_s32_fpr
731 ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY %s0
732 ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY %s1
733 ; CHECK: [[FADDSrr:%[0-9]+]]:fpr32 = FADDSrr [[COPY]], [[COPY1]]
734 ; CHECK: %s0 = COPY [[FADDSrr]]
737 %2(s32) = G_FADD %0, %1
744 regBankSelected: true
747 - { id: 0, class: fpr }
748 - { id: 1, class: fpr }
749 - { id: 2, class: fpr }
755 ; CHECK-LABEL: name: fadd_s64_fpr
756 ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY %d0
757 ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY %d1
758 ; CHECK: [[FADDDrr:%[0-9]+]]:fpr64 = FADDDrr [[COPY]], [[COPY1]]
759 ; CHECK: %d0 = COPY [[FADDDrr]]
762 %2(s64) = G_FADD %0, %1
769 regBankSelected: true
772 - { id: 0, class: fpr }
773 - { id: 1, class: fpr }
774 - { id: 2, class: fpr }
780 ; CHECK-LABEL: name: fsub_s32_fpr
781 ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY %s0
782 ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY %s1
783 ; CHECK: [[FSUBSrr:%[0-9]+]]:fpr32 = FSUBSrr [[COPY]], [[COPY1]]
784 ; CHECK: %s0 = COPY [[FSUBSrr]]
787 %2(s32) = G_FSUB %0, %1
794 regBankSelected: true
797 - { id: 0, class: fpr }
798 - { id: 1, class: fpr }
799 - { id: 2, class: fpr }
805 ; CHECK-LABEL: name: fsub_s64_fpr
806 ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY %d0
807 ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY %d1
808 ; CHECK: [[FSUBDrr:%[0-9]+]]:fpr64 = FSUBDrr [[COPY]], [[COPY1]]
809 ; CHECK: %d0 = COPY [[FSUBDrr]]
812 %2(s64) = G_FSUB %0, %1
819 regBankSelected: true
822 - { id: 0, class: fpr }
823 - { id: 1, class: fpr }
824 - { id: 2, class: fpr }
830 ; CHECK-LABEL: name: fmul_s32_fpr
831 ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY %s0
832 ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY %s1
833 ; CHECK: [[FMULSrr:%[0-9]+]]:fpr32 = FMULSrr [[COPY]], [[COPY1]]
834 ; CHECK: %s0 = COPY [[FMULSrr]]
837 %2(s32) = G_FMUL %0, %1
844 regBankSelected: true
847 - { id: 0, class: fpr }
848 - { id: 1, class: fpr }
849 - { id: 2, class: fpr }
855 ; CHECK-LABEL: name: fmul_s64_fpr
856 ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY %d0
857 ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY %d1
858 ; CHECK: [[FMULDrr:%[0-9]+]]:fpr64 = FMULDrr [[COPY]], [[COPY1]]
859 ; CHECK: %d0 = COPY [[FMULDrr]]
862 %2(s64) = G_FMUL %0, %1
869 regBankSelected: true
872 - { id: 0, class: fpr }
873 - { id: 1, class: fpr }
874 - { id: 2, class: fpr }
880 ; CHECK-LABEL: name: fdiv_s32_fpr
881 ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY %s0
882 ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY %s1
883 ; CHECK: [[FDIVSrr:%[0-9]+]]:fpr32 = FDIVSrr [[COPY]], [[COPY1]]
884 ; CHECK: %s0 = COPY [[FDIVSrr]]
887 %2(s32) = G_FDIV %0, %1
894 regBankSelected: true
897 - { id: 0, class: fpr }
898 - { id: 1, class: fpr }
899 - { id: 2, class: fpr }
905 ; CHECK-LABEL: name: fdiv_s64_fpr
906 ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY %d0
907 ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY %d1
908 ; CHECK: [[FDIVDrr:%[0-9]+]]:fpr64 = FDIVDrr [[COPY]], [[COPY1]]
909 ; CHECK: %d0 = COPY [[FDIVDrr]]
912 %2(s64) = G_FDIV %0, %1