1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -run-pass=regbankselect %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=FAST
3 # RUN: llc -mtriple=x86_64-linux-gnu -regbankselect-greedy -run-pass=regbankselect %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=GREEDY
6 define i8 @test_add_i8(i8 %arg1, i8 %arg2) {
7 %ret = add i8 %arg1, %arg2
11 define i16 @test_add_i16(i16 %arg1, i16 %arg2) {
12 %ret = add i16 %arg1, %arg2
16 define i32 @test_add_i32(i32 %arg1, i32 %arg2) {
17 %ret = add i32 %arg1, %arg2
21 define i64 @test_add_i64(i64 %arg1, i64 %arg2) {
22 %ret = add i64 %arg1, %arg2
26 define void @test_mul_gpr() {
30 define float @test_add_float(float %arg1, float %arg2) {
31 %ret = fadd float %arg1, %arg2
35 define double @test_add_double(double %arg1, double %arg2) {
36 %ret = fadd double %arg1, %arg2
40 define void @test_fsub_float() {
41 %ret1 = fsub float undef, undef
42 %ret2 = fsub double undef, undef
46 define void @test_fmul_float() {
47 %ret1 = fmul float undef, undef
48 %ret2 = fmul double undef, undef
52 define void @test_fdiv_float() {
53 %ret1 = fdiv float undef, undef
54 %ret2 = fdiv double undef, undef
59 define <4 x i32> @test_add_v4i32(<4 x i32> %arg1, <4 x i32> %arg2) {
60 %ret = add <4 x i32> %arg1, %arg2
64 define <4 x float> @test_add_v4f32(<4 x float> %arg1, <4 x float> %arg2) {
65 %ret = fadd <4 x float> %arg1, %arg2
69 define i8 @test_load_i8(i8* %p1) {
74 define i16 @test_load_i16(i16* %p1) {
75 %r = load i16, i16* %p1
79 define i32 @test_load_i32(i32* %p1) {
80 %r = load i32, i32* %p1
84 define i64 @test_load_i64(i64* %p1) {
85 %r = load i64, i64* %p1
89 define float @test_load_float(float* %p1) {
90 %r = load float, float* %p1
94 define double @test_load_double(double* %p1) {
95 %r = load double, double* %p1
99 define <4 x i32> @test_load_v4i32(<4 x i32>* %p1) {
100 %r = load <4 x i32>, <4 x i32>* %p1, align 16
104 define i32* @test_store_i32(i32 %val, i32* %p1) {
105 store i32 %val, i32* %p1
109 define i64* @test_store_i64(i64 %val, i64* %p1) {
110 store i64 %val, i64* %p1
114 define float* @test_store_float(float %val, float* %p1) {
115 store float %val, float* %p1
119 define double* @test_store_double(double %val, double* %p1) {
120 store double %val, double* %p1
124 define void @constInt_check() {
128 define void @trunc_check() {
132 define void @test_gep() {
133 %p1 = getelementptr i32, i32* undef, i32 5
134 %p2 = getelementptr i32, i32* undef, i64 5
138 define i1 @test_icmp_eq_i8(i8 %a, i8 %b) {
139 %r = icmp eq i8 %a, %b
143 define i1 @test_icmp_eq_i16(i16 %a, i16 %b) {
144 %r = icmp eq i16 %a, %b
148 define i1 @test_icmp_eq_i32(i32 %a, i32 %b) {
149 %r = icmp eq i32 %a, %b
153 define i1 @test_icmp_eq_i64(i64 %a, i64 %b) {
154 %r = icmp eq i64 %a, %b
158 define i8 @test_xor_i8() {
159 %ret = xor i8 undef, undef
163 define i16 @test_or_i16() {
164 %ret = or i16 undef, undef
168 define i32 @test_and_i32() {
169 %ret = and i32 undef, undef
173 define i64 @test_and_i64() {
174 %ret = and i64 undef, undef
178 @g_int = global i32 0, align 4
180 define i32* @test_global_ptrv() {
185 define i8 @test_undef() {
189 define i8 @test_undef2(i8 %a) {
190 %r = add i8 %a, undef
194 define float @test_undef3() {
198 define float @test_undef4(float %a) {
199 %r = fadd float %a, undef
203 define i32 @test_i32(i32 %a, i32 %f, i32 %t) {
205 %cmp = icmp sgt i32 %a, 0
206 br i1 %cmp, label %cond.true, label %cond.false
208 cond.true: ; preds = %entry
211 cond.false: ; preds = %entry
214 cond.end: ; preds = %cond.false, %cond.true
215 %cond = phi i32 [ %f, %cond.true ], [ %t, %cond.false ]
219 define float @test_float(i32 %a, float %f, float %t) {
221 %cmp = icmp sgt i32 %a, 0
222 br i1 %cmp, label %cond.true, label %cond.false
224 cond.true: ; preds = %entry
227 cond.false: ; preds = %entry
230 cond.end: ; preds = %cond.false, %cond.true
231 %cond = phi float [ %f, %cond.true ], [ %t, %cond.false ]
235 define double @test_fpext(float %a) {
237 %conv = fpext float %a to double
241 define float @test_fptrunc(double %a) {
243 %conv = fptrunc double %a to float
247 define void @test_fconstant() {
251 define float @int32_to_float(i32 %a) {
253 %conv = sitofp i32 %a to float
257 define float @int64_to_float(i64 %a) {
259 %conv = sitofp i64 %a to float
263 define double @int32_to_double(i32 %a) {
265 %conv = sitofp i32 %a to double
269 define double @int64_to_double(i64 %a) {
271 %conv = sitofp i64 %a to double
275 define signext i8 @float_to_int8(float %val) {
277 %conv = fptosi float %val to i8
281 define signext i16 @float_to_int16(float %val) {
283 %conv = fptosi float %val to i16
287 define i32 @float_to_int32(float %val) {
289 %conv = fptosi float %val to i32
293 define i64 @float_to_int64(float %val) {
295 %conv = fptosi float %val to i64
299 define signext i8 @double_to_int8(double %val) {
301 %conv = fptosi double %val to i8
305 define signext i16 @double_to_int16(double %val) {
307 %conv = fptosi double %val to i16
311 define i32 @double_to_int32(double %val) {
313 %conv = fptosi double %val to i32
317 define i64 @double_to_int64(double %val) {
319 %conv = fptosi double %val to i64
323 define i1 @fcmp_float_oeq(float %x, float %y) {
324 %1 = fcmp oeq float %x, %y
328 define i1 @fcmp_float_ogt(float %x, float %y) {
329 %1 = fcmp ogt float %x, %y
333 define i1 @fcmp_float_oge(float %x, float %y) {
334 %1 = fcmp oge float %x, %y
338 define i1 @fcmp_float_olt(float %x, float %y) {
339 %1 = fcmp olt float %x, %y
343 define i1 @fcmp_float_ole(float %x, float %y) {
344 %1 = fcmp ole float %x, %y
348 define i1 @fcmp_float_one(float %x, float %y) {
349 %1 = fcmp one float %x, %y
353 define i1 @fcmp_float_ord(float %x, float %y) {
354 %1 = fcmp ord float %x, %y
358 define i1 @fcmp_float_uno(float %x, float %y) {
359 %1 = fcmp uno float %x, %y
363 define i1 @fcmp_float_ueq(float %x, float %y) {
364 %1 = fcmp ueq float %x, %y
368 define i1 @fcmp_float_ugt(float %x, float %y) {
369 %1 = fcmp ugt float %x, %y
373 define i1 @fcmp_float_uge(float %x, float %y) {
374 %1 = fcmp uge float %x, %y
378 define i1 @fcmp_float_ult(float %x, float %y) {
379 %1 = fcmp ult float %x, %y
383 define i1 @fcmp_float_ule(float %x, float %y) {
384 %1 = fcmp ule float %x, %y
388 define i1 @fcmp_float_une(float %x, float %y) {
389 %1 = fcmp une float %x, %y
393 define i1 @fcmp_double_oeq(double %x, double %y) {
394 %1 = fcmp oeq double %x, %y
398 define i1 @fcmp_double_ogt(double %x, double %y) {
399 %1 = fcmp ogt double %x, %y
403 define i1 @fcmp_double_oge(double %x, double %y) {
404 %1 = fcmp oge double %x, %y
408 define i1 @fcmp_double_olt(double %x, double %y) {
409 %1 = fcmp olt double %x, %y
413 define i1 @fcmp_double_ole(double %x, double %y) {
414 %1 = fcmp ole double %x, %y
418 define i1 @fcmp_double_one(double %x, double %y) {
419 %1 = fcmp one double %x, %y
423 define i1 @fcmp_double_ord(double %x, double %y) {
424 %1 = fcmp ord double %x, %y
428 define i1 @fcmp_double_uno(double %x, double %y) {
429 %1 = fcmp uno double %x, %y
433 define i1 @fcmp_double_ueq(double %x, double %y) {
434 %1 = fcmp ueq double %x, %y
438 define i1 @fcmp_double_ugt(double %x, double %y) {
439 %1 = fcmp ugt double %x, %y
443 define i1 @fcmp_double_uge(double %x, double %y) {
444 %1 = fcmp uge double %x, %y
448 define i1 @fcmp_double_ult(double %x, double %y) {
449 %1 = fcmp ult double %x, %y
453 define i1 @fcmp_double_ule(double %x, double %y) {
454 %1 = fcmp ule double %x, %y
458 define i1 @fcmp_double_une(double %x, double %y) {
459 %1 = fcmp une double %x, %y
468 regBankSelected: false
470 tracksRegLiveness: true
472 - { id: 0, class: _ }
473 - { id: 1, class: _ }
474 - { id: 2, class: _ }
479 ; FAST-LABEL: name: test_add_i8
480 ; FAST: liveins: $edi, $esi
481 ; FAST: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
482 ; FAST: [[COPY1:%[0-9]+]]:gpr(s8) = COPY $sil
483 ; FAST: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[COPY1]]
484 ; FAST: $al = COPY [[ADD]](s8)
485 ; FAST: RET 0, implicit $al
486 ; GREEDY-LABEL: name: test_add_i8
487 ; GREEDY: liveins: $edi, $esi
488 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
489 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s8) = COPY $sil
490 ; GREEDY: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[COPY1]]
491 ; GREEDY: $al = COPY [[ADD]](s8)
492 ; GREEDY: RET 0, implicit $al
495 %2(s8) = G_ADD %0, %1
504 regBankSelected: false
506 tracksRegLiveness: true
508 - { id: 0, class: _ }
509 - { id: 1, class: _ }
510 - { id: 2, class: _ }
515 ; FAST-LABEL: name: test_add_i16
516 ; FAST: liveins: $edi, $esi
517 ; FAST: [[COPY:%[0-9]+]]:gpr(s16) = COPY $di
518 ; FAST: [[COPY1:%[0-9]+]]:gpr(s16) = COPY $si
519 ; FAST: [[ADD:%[0-9]+]]:gpr(s16) = G_ADD [[COPY]], [[COPY1]]
520 ; FAST: $ax = COPY [[ADD]](s16)
521 ; FAST: RET 0, implicit $ax
522 ; GREEDY-LABEL: name: test_add_i16
523 ; GREEDY: liveins: $edi, $esi
524 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s16) = COPY $di
525 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s16) = COPY $si
526 ; GREEDY: [[ADD:%[0-9]+]]:gpr(s16) = G_ADD [[COPY]], [[COPY1]]
527 ; GREEDY: $ax = COPY [[ADD]](s16)
528 ; GREEDY: RET 0, implicit $ax
531 %2(s16) = G_ADD %0, %1
540 regBankSelected: false
542 tracksRegLiveness: true
544 - { id: 0, class: _ }
545 - { id: 1, class: _ }
546 - { id: 2, class: _ }
551 ; FAST-LABEL: name: test_add_i32
552 ; FAST: liveins: $edi, $esi
553 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
554 ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
555 ; FAST: [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[COPY]], [[COPY1]]
556 ; FAST: $eax = COPY [[ADD]](s32)
557 ; FAST: RET 0, implicit $eax
558 ; GREEDY-LABEL: name: test_add_i32
559 ; GREEDY: liveins: $edi, $esi
560 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
561 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
562 ; GREEDY: [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[COPY]], [[COPY1]]
563 ; GREEDY: $eax = COPY [[ADD]](s32)
564 ; GREEDY: RET 0, implicit $eax
567 %2(s32) = G_ADD %0, %1
576 regBankSelected: false
578 tracksRegLiveness: true
580 - { id: 0, class: _ }
581 - { id: 1, class: _ }
582 - { id: 2, class: _ }
587 ; FAST-LABEL: name: test_add_i64
588 ; FAST: liveins: $rdi, $rsi
589 ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
590 ; FAST: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
591 ; FAST: [[ADD:%[0-9]+]]:gpr(s64) = G_ADD [[COPY]], [[COPY1]]
592 ; FAST: $rax = COPY [[ADD]](s64)
593 ; FAST: RET 0, implicit $rax
594 ; GREEDY-LABEL: name: test_add_i64
595 ; GREEDY: liveins: $rdi, $rsi
596 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
597 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
598 ; GREEDY: [[ADD:%[0-9]+]]:gpr(s64) = G_ADD [[COPY]], [[COPY1]]
599 ; GREEDY: $rax = COPY [[ADD]](s64)
600 ; GREEDY: RET 0, implicit $rax
603 %2(s64) = G_ADD %0, %1
612 regBankSelected: false
614 tracksRegLiveness: true
616 - { id: 0, class: _ }
617 - { id: 1, class: _ }
618 - { id: 2, class: _ }
619 - { id: 3, class: _ }
620 - { id: 4, class: _ }
621 - { id: 5, class: _ }
622 - { id: 6, class: _ }
623 - { id: 7, class: _ }
627 ; FAST-LABEL: name: test_mul_gpr
628 ; FAST: [[DEF:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
629 ; FAST: [[DEF1:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
630 ; FAST: [[DEF2:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
631 ; FAST: [[DEF3:%[0-9]+]]:gpr(s8) = IMPLICIT_DEF
632 ; FAST: [[MUL:%[0-9]+]]:gpr(s64) = G_MUL [[DEF]], [[DEF]]
633 ; FAST: [[MUL1:%[0-9]+]]:gpr(s32) = G_MUL [[DEF1]], [[DEF1]]
634 ; FAST: [[MUL2:%[0-9]+]]:gpr(s16) = G_MUL [[DEF2]], [[DEF2]]
635 ; FAST: [[MUL3:%[0-9]+]]:gpr(s8) = G_MUL [[DEF3]], [[DEF3]]
637 ; GREEDY-LABEL: name: test_mul_gpr
638 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
639 ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
640 ; GREEDY: [[DEF2:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
641 ; GREEDY: [[DEF3:%[0-9]+]]:gpr(s8) = IMPLICIT_DEF
642 ; GREEDY: [[MUL:%[0-9]+]]:gpr(s64) = G_MUL [[DEF]], [[DEF]]
643 ; GREEDY: [[MUL1:%[0-9]+]]:gpr(s32) = G_MUL [[DEF1]], [[DEF1]]
644 ; GREEDY: [[MUL2:%[0-9]+]]:gpr(s16) = G_MUL [[DEF2]], [[DEF2]]
645 ; GREEDY: [[MUL3:%[0-9]+]]:gpr(s8) = G_MUL [[DEF3]], [[DEF3]]
647 %0(s64) = IMPLICIT_DEF
648 %1(s32) = IMPLICIT_DEF
649 %2(s16) = IMPLICIT_DEF
650 %3(s8) = IMPLICIT_DEF
651 %4(s64) = G_MUL %0, %0
652 %5(s32) = G_MUL %1, %1
653 %6(s16) = G_MUL %2, %2
654 %7(s8) = G_MUL %3, %3
661 regBankSelected: false
663 tracksRegLiveness: true
665 - { id: 0, class: _ }
666 - { id: 1, class: _ }
667 - { id: 2, class: _ }
668 - { id: 3, class: _ }
669 - { id: 4, class: _ }
670 - { id: 5, class: _ }
673 liveins: $xmm0, $xmm1
675 ; FAST-LABEL: name: test_add_float
676 ; FAST: liveins: $xmm0, $xmm1
677 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
678 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
679 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
680 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
681 ; FAST: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[TRUNC1]]
682 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
683 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
684 ; FAST: RET 0, implicit $xmm0
685 ; GREEDY-LABEL: name: test_add_float
686 ; GREEDY: liveins: $xmm0, $xmm1
687 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
688 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
689 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
690 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
691 ; GREEDY: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[TRUNC1]]
692 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
693 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
694 ; GREEDY: RET 0, implicit $xmm0
695 %2:_(s128) = COPY $xmm0
696 %0:_(s32) = G_TRUNC %2(s128)
697 %3:_(s128) = COPY $xmm1
698 %1:_(s32) = G_TRUNC %3(s128)
699 %4:_(s32) = G_FADD %0, %1
700 %5:_(s128) = G_ANYEXT %4(s32)
701 $xmm0 = COPY %5(s128)
702 RET 0, implicit $xmm0
706 name: test_add_double
709 regBankSelected: false
711 tracksRegLiveness: true
713 - { id: 0, class: _ }
714 - { id: 1, class: _ }
715 - { id: 2, class: _ }
716 - { id: 3, class: _ }
717 - { id: 4, class: _ }
718 - { id: 5, class: _ }
721 liveins: $xmm0, $xmm1
723 ; FAST-LABEL: name: test_add_double
724 ; FAST: liveins: $xmm0, $xmm1
725 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
726 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
727 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
728 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
729 ; FAST: [[FADD:%[0-9]+]]:vecr(s64) = G_FADD [[TRUNC]], [[TRUNC1]]
730 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s64)
731 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
732 ; FAST: RET 0, implicit $xmm0
733 ; GREEDY-LABEL: name: test_add_double
734 ; GREEDY: liveins: $xmm0, $xmm1
735 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
736 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
737 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
738 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
739 ; GREEDY: [[FADD:%[0-9]+]]:vecr(s64) = G_FADD [[TRUNC]], [[TRUNC1]]
740 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s64)
741 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
742 ; GREEDY: RET 0, implicit $xmm0
743 %2:_(s128) = COPY $xmm0
744 %0:_(s64) = G_TRUNC %2(s128)
745 %3:_(s128) = COPY $xmm1
746 %1:_(s64) = G_TRUNC %3(s128)
747 %4:_(s64) = G_FADD %0, %1
748 %5:_(s128) = G_ANYEXT %4(s64)
749 $xmm0 = COPY %5(s128)
750 RET 0, implicit $xmm0
754 name: test_fsub_float
757 regBankSelected: false
759 - { id: 0, class: _, preferred-register: '' }
760 - { id: 1, class: _, preferred-register: '' }
761 - { id: 2, class: _, preferred-register: '' }
762 - { id: 3, class: _, preferred-register: '' }
769 ; FAST-LABEL: name: test_fsub_float
770 ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
771 ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
772 ; FAST: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
773 ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
774 ; FAST: [[FSUB:%[0-9]+]]:vecr(s32) = G_FSUB [[COPY]], [[COPY1]]
775 ; FAST: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
776 ; FAST: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
777 ; FAST: [[FSUB1:%[0-9]+]]:vecr(s64) = G_FSUB [[COPY2]], [[COPY3]]
779 ; GREEDY-LABEL: name: test_fsub_float
780 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
781 ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
782 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
783 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
784 ; GREEDY: [[FSUB:%[0-9]+]]:vecr(s32) = G_FSUB [[COPY]], [[COPY1]]
785 ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
786 ; GREEDY: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
787 ; GREEDY: [[FSUB1:%[0-9]+]]:vecr(s64) = G_FSUB [[COPY2]], [[COPY3]]
789 %0(s32) = IMPLICIT_DEF
790 %2(s64) = IMPLICIT_DEF
791 %1(s32) = G_FSUB %0, %0
792 %3(s64) = G_FSUB %2, %2
797 name: test_fmul_float
800 regBankSelected: false
802 - { id: 0, class: _, preferred-register: '' }
803 - { id: 1, class: _, preferred-register: '' }
804 - { id: 2, class: _, preferred-register: '' }
805 - { id: 3, class: _, preferred-register: '' }
812 ; FAST-LABEL: name: test_fmul_float
813 ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
814 ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
815 ; FAST: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
816 ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
817 ; FAST: [[FMUL:%[0-9]+]]:vecr(s32) = G_FMUL [[COPY]], [[COPY1]]
818 ; FAST: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
819 ; FAST: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
820 ; FAST: [[FMUL1:%[0-9]+]]:vecr(s64) = G_FMUL [[COPY2]], [[COPY3]]
822 ; GREEDY-LABEL: name: test_fmul_float
823 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
824 ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
825 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
826 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
827 ; GREEDY: [[FMUL:%[0-9]+]]:vecr(s32) = G_FMUL [[COPY]], [[COPY1]]
828 ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
829 ; GREEDY: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
830 ; GREEDY: [[FMUL1:%[0-9]+]]:vecr(s64) = G_FMUL [[COPY2]], [[COPY3]]
832 %0(s32) = IMPLICIT_DEF
833 %2(s64) = IMPLICIT_DEF
834 %1(s32) = G_FMUL %0, %0
835 %3(s64) = G_FMUL %2, %2
840 name: test_fdiv_float
843 regBankSelected: false
845 - { id: 0, class: _, preferred-register: '' }
846 - { id: 1, class: _, preferred-register: '' }
847 - { id: 2, class: _, preferred-register: '' }
848 - { id: 3, class: _, preferred-register: '' }
855 ; FAST-LABEL: name: test_fdiv_float
856 ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
857 ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
858 ; FAST: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
859 ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
860 ; FAST: [[FDIV:%[0-9]+]]:vecr(s32) = G_FDIV [[COPY]], [[COPY1]]
861 ; FAST: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
862 ; FAST: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
863 ; FAST: [[FDIV1:%[0-9]+]]:vecr(s64) = G_FDIV [[COPY2]], [[COPY3]]
865 ; GREEDY-LABEL: name: test_fdiv_float
866 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
867 ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
868 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
869 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
870 ; GREEDY: [[FDIV:%[0-9]+]]:vecr(s32) = G_FDIV [[COPY]], [[COPY1]]
871 ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
872 ; GREEDY: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
873 ; GREEDY: [[FDIV1:%[0-9]+]]:vecr(s64) = G_FDIV [[COPY2]], [[COPY3]]
875 %0(s32) = IMPLICIT_DEF
876 %2(s64) = IMPLICIT_DEF
877 %1(s32) = G_FDIV %0, %0
878 %3(s64) = G_FDIV %2, %2
886 regBankSelected: false
888 tracksRegLiveness: true
890 - { id: 0, class: _ }
891 - { id: 1, class: _ }
892 - { id: 2, class: _ }
895 liveins: $xmm0, $xmm1
897 ; FAST-LABEL: name: test_add_v4i32
898 ; FAST: liveins: $xmm0, $xmm1
899 ; FAST: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
900 ; FAST: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
901 ; FAST: [[ADD:%[0-9]+]]:vecr(<4 x s32>) = G_ADD [[COPY]], [[COPY1]]
902 ; FAST: $xmm0 = COPY [[ADD]](<4 x s32>)
903 ; FAST: RET 0, implicit $xmm0
904 ; GREEDY-LABEL: name: test_add_v4i32
905 ; GREEDY: liveins: $xmm0, $xmm1
906 ; GREEDY: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
907 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
908 ; GREEDY: [[ADD:%[0-9]+]]:vecr(<4 x s32>) = G_ADD [[COPY]], [[COPY1]]
909 ; GREEDY: $xmm0 = COPY [[ADD]](<4 x s32>)
910 ; GREEDY: RET 0, implicit $xmm0
911 %0(<4 x s32>) = COPY $xmm0
912 %1(<4 x s32>) = COPY $xmm1
913 %2(<4 x s32>) = G_ADD %0, %1
914 $xmm0 = COPY %2(<4 x s32>)
915 RET 0, implicit $xmm0
922 regBankSelected: false
924 tracksRegLiveness: true
926 - { id: 0, class: _ }
927 - { id: 1, class: _ }
928 - { id: 2, class: _ }
931 liveins: $xmm0, $xmm1
933 ; FAST-LABEL: name: test_add_v4f32
934 ; FAST: liveins: $xmm0, $xmm1
935 ; FAST: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
936 ; FAST: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
937 ; FAST: [[FADD:%[0-9]+]]:vecr(<4 x s32>) = G_FADD [[COPY]], [[COPY1]]
938 ; FAST: $xmm0 = COPY [[FADD]](<4 x s32>)
939 ; FAST: RET 0, implicit $xmm0
940 ; GREEDY-LABEL: name: test_add_v4f32
941 ; GREEDY: liveins: $xmm0, $xmm1
942 ; GREEDY: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
943 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
944 ; GREEDY: [[FADD:%[0-9]+]]:vecr(<4 x s32>) = G_FADD [[COPY]], [[COPY1]]
945 ; GREEDY: $xmm0 = COPY [[FADD]](<4 x s32>)
946 ; GREEDY: RET 0, implicit $xmm0
947 %0(<4 x s32>) = COPY $xmm0
948 %1(<4 x s32>) = COPY $xmm1
949 %2(<4 x s32>) = G_FADD %0, %1
950 $xmm0 = COPY %2(<4 x s32>)
951 RET 0, implicit $xmm0
958 regBankSelected: false
961 - { id: 0, class: _ }
962 - { id: 1, class: _ }
967 ; FAST-LABEL: name: test_load_i8
968 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
969 ; FAST: [[LOAD:%[0-9]+]]:gpr(s8) = G_LOAD [[COPY]](p0) :: (load 1 from %ir.p1)
970 ; FAST: $al = COPY [[LOAD]](s8)
971 ; FAST: RET 0, implicit $al
972 ; GREEDY-LABEL: name: test_load_i8
973 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
974 ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s8) = G_LOAD [[COPY]](p0) :: (load 1 from %ir.p1)
975 ; GREEDY: $al = COPY [[LOAD]](s8)
976 ; GREEDY: RET 0, implicit $al
978 %1(s8) = G_LOAD %0(p0) :: (load 1 from %ir.p1)
987 regBankSelected: false
990 - { id: 0, class: _ }
991 - { id: 1, class: _ }
996 ; FAST-LABEL: name: test_load_i16
997 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
998 ; FAST: [[LOAD:%[0-9]+]]:gpr(s16) = G_LOAD [[COPY]](p0) :: (load 2 from %ir.p1)
999 ; FAST: $ax = COPY [[LOAD]](s16)
1000 ; FAST: RET 0, implicit $ax
1001 ; GREEDY-LABEL: name: test_load_i16
1002 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1003 ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s16) = G_LOAD [[COPY]](p0) :: (load 2 from %ir.p1)
1004 ; GREEDY: $ax = COPY [[LOAD]](s16)
1005 ; GREEDY: RET 0, implicit $ax
1007 %1(s16) = G_LOAD %0(p0) :: (load 2 from %ir.p1)
1016 regBankSelected: false
1019 - { id: 0, class: _ }
1020 - { id: 1, class: _ }
1025 ; FAST-LABEL: name: test_load_i32
1026 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1027 ; FAST: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.p1)
1028 ; FAST: $eax = COPY [[LOAD]](s32)
1029 ; FAST: RET 0, implicit $eax
1030 ; GREEDY-LABEL: name: test_load_i32
1031 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1032 ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.p1)
1033 ; GREEDY: $eax = COPY [[LOAD]](s32)
1034 ; GREEDY: RET 0, implicit $eax
1036 %1(s32) = G_LOAD %0(p0) :: (load 4 from %ir.p1)
1038 RET 0, implicit $eax
1044 exposesReturnsTwice: false
1046 regBankSelected: false
1049 - { id: 0, class: _ }
1050 - { id: 1, class: _ }
1055 ; FAST-LABEL: name: test_load_i64
1056 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1057 ; FAST: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load 8 from %ir.p1)
1058 ; FAST: $rax = COPY [[LOAD]](s64)
1059 ; FAST: RET 0, implicit $rax
1060 ; GREEDY-LABEL: name: test_load_i64
1061 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1062 ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load 8 from %ir.p1)
1063 ; GREEDY: $rax = COPY [[LOAD]](s64)
1064 ; GREEDY: RET 0, implicit $rax
1066 %1(s64) = G_LOAD %0(p0) :: (load 8 from %ir.p1)
1068 RET 0, implicit $rax
1072 name: test_load_float
1075 regBankSelected: false
1078 - { id: 0, class: _ }
1079 - { id: 1, class: _ }
1084 ; FAST-LABEL: name: test_load_float
1085 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1086 ; FAST: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.p1)
1087 ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[LOAD]](s32)
1088 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s32)
1089 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1090 ; FAST: RET 0, implicit $xmm0
1091 ; GREEDY-LABEL: name: test_load_float
1092 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1093 ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load 4 from %ir.p1)
1094 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[LOAD]](s32)
1095 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s32)
1096 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1097 ; GREEDY: RET 0, implicit $xmm0
1098 %0:_(p0) = COPY $rdi
1099 %1:_(s32) = G_LOAD %0(p0) :: (load 4 from %ir.p1)
1100 %2:_(s128) = G_ANYEXT %1(s32)
1101 $xmm0 = COPY %2(s128)
1102 RET 0, implicit $xmm0
1106 name: test_load_double
1109 regBankSelected: false
1112 - { id: 0, class: _ }
1113 - { id: 1, class: _ }
1118 ; FAST-LABEL: name: test_load_double
1119 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1120 ; FAST: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load 8 from %ir.p1)
1121 ; FAST: [[COPY1:%[0-9]+]]:vecr(s64) = COPY [[LOAD]](s64)
1122 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s64)
1123 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1124 ; FAST: RET 0, implicit $xmm0
1125 ; GREEDY-LABEL: name: test_load_double
1126 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1127 ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load 8 from %ir.p1)
1128 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s64) = COPY [[LOAD]](s64)
1129 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s64)
1130 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1131 ; GREEDY: RET 0, implicit $xmm0
1132 %0:_(p0) = COPY $rdi
1133 %1:_(s64) = G_LOAD %0(p0) :: (load 8 from %ir.p1)
1134 %2:_(s128) = G_ANYEXT %1(s64)
1135 $xmm0 = COPY %2(s128)
1136 RET 0, implicit $xmm0
1140 name: test_load_v4i32
1143 regBankSelected: false
1146 - { id: 0, class: _ }
1147 - { id: 1, class: _ }
1152 ; FAST-LABEL: name: test_load_v4i32
1153 ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1154 ; FAST: [[LOAD:%[0-9]+]]:vecr(<4 x s32>) = G_LOAD [[COPY]](p0) :: (load 16 from %ir.p1, align 1)
1155 ; FAST: $xmm0 = COPY [[LOAD]](<4 x s32>)
1156 ; FAST: RET 0, implicit $xmm0
1157 ; GREEDY-LABEL: name: test_load_v4i32
1158 ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1159 ; GREEDY: [[LOAD:%[0-9]+]]:vecr(<4 x s32>) = G_LOAD [[COPY]](p0) :: (load 16 from %ir.p1, align 1)
1160 ; GREEDY: $xmm0 = COPY [[LOAD]](<4 x s32>)
1161 ; GREEDY: RET 0, implicit $xmm0
1163 %1(<4 x s32>) = G_LOAD %0(p0) :: (load 16 from %ir.p1, align 1)
1164 $xmm0 = COPY %1(<4 x s32>)
1165 RET 0, implicit $xmm0
1169 name: test_store_i32
1172 regBankSelected: false
1175 - { id: 0, class: _ }
1176 - { id: 1, class: _ }
1181 ; FAST-LABEL: name: test_store_i32
1182 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1183 ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1184 ; FAST: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store 4 into %ir.p1)
1185 ; FAST: $rax = COPY [[COPY1]](p0)
1186 ; FAST: RET 0, implicit $rax
1187 ; GREEDY-LABEL: name: test_store_i32
1188 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1189 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1190 ; GREEDY: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store 4 into %ir.p1)
1191 ; GREEDY: $rax = COPY [[COPY1]](p0)
1192 ; GREEDY: RET 0, implicit $rax
1195 G_STORE %0(s32), %1(p0) :: (store 4 into %ir.p1)
1197 RET 0, implicit $rax
1201 name: test_store_i64
1204 regBankSelected: false
1207 - { id: 0, class: _ }
1208 - { id: 1, class: _ }
1213 ; FAST-LABEL: name: test_store_i64
1214 ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1215 ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1216 ; FAST: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store 8 into %ir.p1)
1217 ; FAST: $rax = COPY [[COPY1]](p0)
1218 ; FAST: RET 0, implicit $rax
1219 ; GREEDY-LABEL: name: test_store_i64
1220 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1221 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1222 ; GREEDY: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store 8 into %ir.p1)
1223 ; GREEDY: $rax = COPY [[COPY1]](p0)
1224 ; GREEDY: RET 0, implicit $rax
1227 G_STORE %0(s64), %1(p0) :: (store 8 into %ir.p1)
1229 RET 0, implicit $rax
1233 name: test_store_float
1236 regBankSelected: false
1242 - { id: 0, class: _ }
1243 - { id: 1, class: _ }
1246 liveins: $rdi, $xmm0
1248 ; FAST-LABEL: name: test_store_float
1249 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1250 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1251 ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1252 ; FAST: [[COPY2:%[0-9]+]]:gpr(s32) = COPY [[TRUNC]](s32)
1253 ; FAST: G_STORE [[COPY2]](s32), [[COPY1]](p0) :: (store 4 into %ir.p1)
1254 ; FAST: $rax = COPY [[COPY1]](p0)
1255 ; FAST: RET 0, implicit $rax
1256 ; GREEDY-LABEL: name: test_store_float
1257 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1258 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1259 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1260 ; GREEDY: G_STORE [[TRUNC]](s32), [[COPY1]](p0) :: (store 4 into %ir.p1)
1261 ; GREEDY: $rax = COPY [[COPY1]](p0)
1262 ; GREEDY: RET 0, implicit $rax
1263 %2:_(s128) = COPY $xmm0
1264 %0:_(s32) = G_TRUNC %2(s128)
1265 %1:_(p0) = COPY $rdi
1266 G_STORE %0(s32), %1(p0) :: (store 4 into %ir.p1)
1268 RET 0, implicit $rax
1272 name: test_store_double
1275 regBankSelected: false
1281 - { id: 0, class: _ }
1282 - { id: 1, class: _ }
1285 liveins: $rdi, $xmm0
1287 ; FAST-LABEL: name: test_store_double
1288 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1289 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
1290 ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1291 ; FAST: [[COPY2:%[0-9]+]]:gpr(s64) = COPY [[TRUNC]](s64)
1292 ; FAST: G_STORE [[COPY2]](s64), [[COPY1]](p0) :: (store 8 into %ir.p1)
1293 ; FAST: $rax = COPY [[COPY1]](p0)
1294 ; FAST: RET 0, implicit $rax
1295 ; GREEDY-LABEL: name: test_store_double
1296 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1297 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
1298 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1299 ; GREEDY: G_STORE [[TRUNC]](s64), [[COPY1]](p0) :: (store 8 into %ir.p1)
1300 ; GREEDY: $rax = COPY [[COPY1]](p0)
1301 ; GREEDY: RET 0, implicit $rax
1302 %2:_(s128) = COPY $xmm0
1303 %0:_(s64) = G_TRUNC %2(s128)
1304 %1:_(p0) = COPY $rdi
1305 G_STORE %0(s64), %1(p0) :: (store 8 into %ir.p1)
1307 RET 0, implicit $rax
1311 name: constInt_check
1315 - { id: 0, class: _ }
1316 - { id: 1, class: _ }
1317 - { id: 2, class: _ }
1318 - { id: 3, class: _ }
1321 ; FAST-LABEL: name: constInt_check
1322 ; FAST: [[C:%[0-9]+]]:gpr(s8) = G_CONSTANT i8 8
1323 ; FAST: [[C1:%[0-9]+]]:gpr(s16) = G_CONSTANT i16 16
1324 ; FAST: [[C2:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 32
1325 ; FAST: [[C3:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 64
1327 ; GREEDY-LABEL: name: constInt_check
1328 ; GREEDY: [[C:%[0-9]+]]:gpr(s8) = G_CONSTANT i8 8
1329 ; GREEDY: [[C1:%[0-9]+]]:gpr(s16) = G_CONSTANT i16 16
1330 ; GREEDY: [[C2:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 32
1331 ; GREEDY: [[C3:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 64
1333 %0(s8) = G_CONSTANT i8 8
1334 %1(s16) = G_CONSTANT i16 16
1335 %2(s32) = G_CONSTANT i32 32
1336 %3(s64) = G_CONSTANT i64 64
1345 - { id: 0, class: _ }
1346 - { id: 1, class: _ }
1347 - { id: 2, class: _ }
1348 - { id: 3, class: _ }
1351 ; FAST-LABEL: name: trunc_check
1352 ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
1353 ; FAST: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[DEF]](s32)
1354 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[DEF]](s32)
1355 ; FAST: [[TRUNC2:%[0-9]+]]:gpr(s16) = G_TRUNC [[DEF]](s32)
1357 ; GREEDY-LABEL: name: trunc_check
1358 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
1359 ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[DEF]](s32)
1360 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[DEF]](s32)
1361 ; GREEDY: [[TRUNC2:%[0-9]+]]:gpr(s16) = G_TRUNC [[DEF]](s32)
1363 %0(s32) = IMPLICIT_DEF
1364 %1(s1) = G_TRUNC %0(s32)
1365 %2(s8) = G_TRUNC %0(s32)
1366 %3(s16) = G_TRUNC %0(s32)
1374 - { id: 0, class: _ }
1375 - { id: 1, class: _ }
1376 - { id: 2, class: _ }
1377 - { id: 3, class: _ }
1378 - { id: 4, class: _ }
1381 ; FAST-LABEL: name: test_gep
1382 ; FAST: [[DEF:%[0-9]+]]:gpr(p0) = IMPLICIT_DEF
1383 ; FAST: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 20
1384 ; FAST: [[GEP:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C]](s32)
1385 ; FAST: [[C1:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 20
1386 ; FAST: [[GEP1:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C1]](s64)
1388 ; GREEDY-LABEL: name: test_gep
1389 ; GREEDY: [[DEF:%[0-9]+]]:gpr(p0) = IMPLICIT_DEF
1390 ; GREEDY: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 20
1391 ; GREEDY: [[GEP:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C]](s32)
1392 ; GREEDY: [[C1:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 20
1393 ; GREEDY: [[GEP1:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C1]](s64)
1395 %0(p0) = IMPLICIT_DEF
1396 %1(s32) = G_CONSTANT i32 20
1397 %2(p0) = G_GEP %0, %1(s32)
1398 %3(s64) = G_CONSTANT i64 20
1399 %4(p0) = G_GEP %0, %3(s64)
1404 name: test_icmp_eq_i8
1407 regBankSelected: false
1409 - { id: 0, class: _ }
1410 - { id: 1, class: _ }
1411 - { id: 2, class: _ }
1416 ; FAST-LABEL: name: test_icmp_eq_i8
1417 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1418 ; FAST: [[TRUNC:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY]](s32)
1419 ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1420 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY1]](s32)
1421 ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s8), [[TRUNC1]]
1422 ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1423 ; FAST: $al = COPY [[ANYEXT]](s8)
1424 ; FAST: RET 0, implicit $al
1425 ; GREEDY-LABEL: name: test_icmp_eq_i8
1426 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1427 ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY]](s32)
1428 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1429 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY1]](s32)
1430 ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s8), [[TRUNC1]]
1431 ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1432 ; GREEDY: $al = COPY [[ANYEXT]](s8)
1433 ; GREEDY: RET 0, implicit $al
1434 %2:_(s32) = COPY $edi
1435 %0:_(s8) = G_TRUNC %2(s32)
1436 %3:_(s32) = COPY $esi
1437 %1:_(s8) = G_TRUNC %3(s32)
1438 %4:_(s1) = G_ICMP intpred(eq), %0(s8), %1
1439 %5:_(s8) = G_ANYEXT %4(s1)
1445 name: test_icmp_eq_i16
1448 regBankSelected: false
1450 - { id: 0, class: _ }
1451 - { id: 1, class: _ }
1452 - { id: 2, class: _ }
1457 ; FAST-LABEL: name: test_icmp_eq_i16
1458 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1459 ; FAST: [[TRUNC:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY]](s32)
1460 ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1461 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY1]](s32)
1462 ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s16), [[TRUNC1]]
1463 ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1464 ; FAST: $al = COPY [[ANYEXT]](s8)
1465 ; FAST: RET 0, implicit $al
1466 ; GREEDY-LABEL: name: test_icmp_eq_i16
1467 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1468 ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY]](s32)
1469 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1470 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY1]](s32)
1471 ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s16), [[TRUNC1]]
1472 ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1473 ; GREEDY: $al = COPY [[ANYEXT]](s8)
1474 ; GREEDY: RET 0, implicit $al
1475 %2:_(s32) = COPY $edi
1476 %0:_(s16) = G_TRUNC %2(s32)
1477 %3:_(s32) = COPY $esi
1478 %1:_(s16) = G_TRUNC %3(s32)
1479 %4:_(s1) = G_ICMP intpred(eq), %0(s16), %1
1480 %5:_(s8) = G_ANYEXT %4(s1)
1486 name: test_icmp_eq_i32
1489 regBankSelected: false
1491 - { id: 0, class: _ }
1492 - { id: 1, class: _ }
1493 - { id: 2, class: _ }
1498 ; FAST-LABEL: name: test_icmp_eq_i32
1499 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1500 ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1501 ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
1502 ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1503 ; FAST: $al = COPY [[ANYEXT]](s8)
1504 ; FAST: RET 0, implicit $al
1505 ; GREEDY-LABEL: name: test_icmp_eq_i32
1506 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1507 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1508 ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
1509 ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1510 ; GREEDY: $al = COPY [[ANYEXT]](s8)
1511 ; GREEDY: RET 0, implicit $al
1512 %0:_(s32) = COPY $edi
1513 %1:_(s32) = COPY $esi
1514 %2:_(s1) = G_ICMP intpred(eq), %0(s32), %1
1515 %3:_(s8) = G_ANYEXT %2(s1)
1521 name: test_icmp_eq_i64
1524 regBankSelected: false
1526 - { id: 0, class: _ }
1527 - { id: 1, class: _ }
1528 - { id: 2, class: _ }
1533 ; FAST-LABEL: name: test_icmp_eq_i64
1534 ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1535 ; FAST: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
1536 ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
1537 ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1538 ; FAST: $al = COPY [[ANYEXT]](s8)
1539 ; FAST: RET 0, implicit $al
1540 ; GREEDY-LABEL: name: test_icmp_eq_i64
1541 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1542 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
1543 ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
1544 ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1545 ; GREEDY: $al = COPY [[ANYEXT]](s8)
1546 ; GREEDY: RET 0, implicit $al
1547 %0:_(s64) = COPY $rdi
1548 %1:_(s64) = COPY $rsi
1549 %2:_(s1) = G_ICMP intpred(eq), %0(s64), %1
1550 %3:_(s8) = G_ANYEXT %2(s1)
1559 regBankSelected: false
1561 - { id: 0, class: _, preferred-register: '' }
1562 - { id: 1, class: _, preferred-register: '' }
1569 ; FAST-LABEL: name: test_xor_i8
1570 ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = IMPLICIT_DEF
1571 ; FAST: [[XOR:%[0-9]+]]:gpr(s8) = G_XOR [[DEF]], [[DEF]]
1572 ; FAST: $al = COPY [[XOR]](s8)
1573 ; FAST: RET 0, implicit $al
1574 ; GREEDY-LABEL: name: test_xor_i8
1575 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = IMPLICIT_DEF
1576 ; GREEDY: [[XOR:%[0-9]+]]:gpr(s8) = G_XOR [[DEF]], [[DEF]]
1577 ; GREEDY: $al = COPY [[XOR]](s8)
1578 ; GREEDY: RET 0, implicit $al
1579 %0(s8) = IMPLICIT_DEF
1580 %1(s8) = G_XOR %0, %0
1589 regBankSelected: false
1591 - { id: 0, class: _, preferred-register: '' }
1592 - { id: 1, class: _, preferred-register: '' }
1599 ; FAST-LABEL: name: test_or_i16
1600 ; FAST: [[DEF:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
1601 ; FAST: [[OR:%[0-9]+]]:gpr(s16) = G_OR [[DEF]], [[DEF]]
1602 ; FAST: $ax = COPY [[OR]](s16)
1603 ; FAST: RET 0, implicit $ax
1604 ; GREEDY-LABEL: name: test_or_i16
1605 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
1606 ; GREEDY: [[OR:%[0-9]+]]:gpr(s16) = G_OR [[DEF]], [[DEF]]
1607 ; GREEDY: $ax = COPY [[OR]](s16)
1608 ; GREEDY: RET 0, implicit $ax
1609 %0(s16) = IMPLICIT_DEF
1610 %1(s16) = G_OR %0, %0
1619 regBankSelected: false
1621 - { id: 0, class: _, preferred-register: '' }
1622 - { id: 1, class: _, preferred-register: '' }
1629 ; FAST-LABEL: name: test_and_i32
1630 ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
1631 ; FAST: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[DEF]], [[DEF]]
1632 ; FAST: $eax = COPY [[AND]](s32)
1633 ; FAST: RET 0, implicit $eax
1634 ; GREEDY-LABEL: name: test_and_i32
1635 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
1636 ; GREEDY: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[DEF]], [[DEF]]
1637 ; GREEDY: $eax = COPY [[AND]](s32)
1638 ; GREEDY: RET 0, implicit $eax
1639 %0(s32) = IMPLICIT_DEF
1640 %1(s32) = G_AND %0, %0
1642 RET 0, implicit $eax
1649 regBankSelected: false
1651 - { id: 0, class: _, preferred-register: '' }
1652 - { id: 1, class: _, preferred-register: '' }
1659 ; FAST-LABEL: name: test_and_i64
1660 ; FAST: [[DEF:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
1661 ; FAST: [[AND:%[0-9]+]]:gpr(s64) = G_AND [[DEF]], [[DEF]]
1662 ; FAST: $rax = COPY [[AND]](s64)
1663 ; FAST: RET 0, implicit $rax
1664 ; GREEDY-LABEL: name: test_and_i64
1665 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
1666 ; GREEDY: [[AND:%[0-9]+]]:gpr(s64) = G_AND [[DEF]], [[DEF]]
1667 ; GREEDY: $rax = COPY [[AND]](s64)
1668 ; GREEDY: RET 0, implicit $rax
1669 %0(s64) = IMPLICIT_DEF
1670 %1(s64) = G_AND %0, %0
1672 RET 0, implicit $rax
1676 name: test_global_ptrv
1679 regBankSelected: false
1681 - { id: 0, class: _, preferred-register: '' }
1684 ; FAST-LABEL: name: test_global_ptrv
1685 ; FAST: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @g_int
1686 ; FAST: $rax = COPY [[GV]](p0)
1687 ; FAST: RET 0, implicit $rax
1688 ; GREEDY-LABEL: name: test_global_ptrv
1689 ; GREEDY: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @g_int
1690 ; GREEDY: $rax = COPY [[GV]](p0)
1691 ; GREEDY: RET 0, implicit $rax
1692 %0(p0) = G_GLOBAL_VALUE @g_int
1694 RET 0, implicit $rax
1701 regBankSelected: false
1703 - { id: 0, class: _, preferred-register: '' }
1710 ; FAST-LABEL: name: test_undef
1711 ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1712 ; FAST: $al = COPY [[DEF]](s8)
1713 ; FAST: RET 0, implicit $al
1714 ; GREEDY-LABEL: name: test_undef
1715 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1716 ; GREEDY: $al = COPY [[DEF]](s8)
1717 ; GREEDY: RET 0, implicit $al
1718 %0(s8) = G_IMPLICIT_DEF
1727 regBankSelected: false
1729 - { id: 0, class: _, preferred-register: '' }
1730 - { id: 1, class: _, preferred-register: '' }
1731 - { id: 2, class: _, preferred-register: '' }
1740 ; FAST-LABEL: name: test_undef2
1741 ; FAST: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
1742 ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1743 ; FAST: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[DEF]]
1744 ; FAST: $al = COPY [[ADD]](s8)
1745 ; FAST: RET 0, implicit $al
1746 ; GREEDY-LABEL: name: test_undef2
1747 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
1748 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1749 ; GREEDY: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[DEF]]
1750 ; GREEDY: $al = COPY [[ADD]](s8)
1751 ; GREEDY: RET 0, implicit $al
1753 %1(s8) = G_IMPLICIT_DEF
1754 %2(s8) = G_ADD %0, %1
1763 regBankSelected: false
1765 - { id: 1, class: _, preferred-register: '' }
1772 ; FAST-LABEL: name: test_undef3
1773 ; FAST: [[DEF:%[0-9]+]]:vecr(s128) = G_IMPLICIT_DEF
1774 ; FAST: $xmm0 = COPY [[DEF]](s128)
1775 ; FAST: RET 0, implicit $xmm0
1776 ; GREEDY-LABEL: name: test_undef3
1777 ; GREEDY: [[DEF:%[0-9]+]]:vecr(s128) = G_IMPLICIT_DEF
1778 ; GREEDY: $xmm0 = COPY [[DEF]](s128)
1779 ; GREEDY: RET 0, implicit $xmm0
1780 %1(s128) = G_IMPLICIT_DEF
1781 $xmm0 = COPY %1(s128)
1782 RET 0, implicit $xmm0
1789 regBankSelected: false
1791 - { id: 0, class: _, preferred-register: '' }
1792 - { id: 1, class: _, preferred-register: '' }
1793 - { id: 2, class: _, preferred-register: '' }
1794 - { id: 3, class: _, preferred-register: '' }
1795 - { id: 4, class: _, preferred-register: '' }
1804 ; FAST-LABEL: name: test_undef4
1805 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1806 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1807 ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1808 ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
1809 ; FAST: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[COPY1]]
1810 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
1811 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1812 ; FAST: RET 0, implicit $xmm0
1813 ; GREEDY-LABEL: name: test_undef4
1814 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1815 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1816 ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1817 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
1818 ; GREEDY: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[COPY1]]
1819 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
1820 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1821 ; GREEDY: RET 0, implicit $xmm0
1822 %1:_(s128) = COPY $xmm0
1823 %0:_(s32) = G_TRUNC %1(s128)
1824 %2:_(s32) = G_IMPLICIT_DEF
1825 %3:_(s32) = G_FADD %0, %2
1826 %4:_(s128) = G_ANYEXT %3(s32)
1827 $xmm0 = COPY %4(s128)
1828 RET 0, implicit $xmm0
1835 regBankSelected: false
1836 tracksRegLiveness: true
1838 - { id: 0, class: _, preferred-register: '' }
1839 - { id: 1, class: _, preferred-register: '' }
1840 - { id: 2, class: _, preferred-register: '' }
1841 - { id: 3, class: _, preferred-register: '' }
1842 - { id: 4, class: _, preferred-register: '' }
1843 - { id: 5, class: _, preferred-register: '' }
1845 ; FAST-LABEL: name: test_i32
1847 ; FAST: successors: %bb.1(0x40000000), %bb.2(0x40000000)
1848 ; FAST: liveins: $edi, $edx, $esi
1849 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1850 ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1851 ; FAST: [[COPY2:%[0-9]+]]:gpr(s32) = COPY $edx
1852 ; FAST: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1853 ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1854 ; FAST: G_BRCOND [[ICMP]](s1), %bb.1
1856 ; FAST: bb.1.cond.true:
1857 ; FAST: successors: %bb.3(0x80000000)
1859 ; FAST: bb.2.cond.false:
1860 ; FAST: successors: %bb.3(0x80000000)
1861 ; FAST: bb.3.cond.end:
1862 ; FAST: [[PHI:%[0-9]+]]:gpr(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
1863 ; FAST: $eax = COPY [[PHI]](s32)
1864 ; FAST: RET 0, implicit $eax
1865 ; GREEDY-LABEL: name: test_i32
1866 ; GREEDY: bb.0.entry:
1867 ; GREEDY: successors: %bb.1(0x40000000), %bb.2(0x40000000)
1868 ; GREEDY: liveins: $edi, $edx, $esi
1869 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1870 ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1871 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s32) = COPY $edx
1872 ; GREEDY: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1873 ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1874 ; GREEDY: G_BRCOND [[ICMP]](s1), %bb.1
1875 ; GREEDY: G_BR %bb.2
1876 ; GREEDY: bb.1.cond.true:
1877 ; GREEDY: successors: %bb.3(0x80000000)
1878 ; GREEDY: G_BR %bb.3
1879 ; GREEDY: bb.2.cond.false:
1880 ; GREEDY: successors: %bb.3(0x80000000)
1881 ; GREEDY: bb.3.cond.end:
1882 ; GREEDY: [[PHI:%[0-9]+]]:gpr(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
1883 ; GREEDY: $eax = COPY [[PHI]](s32)
1884 ; GREEDY: RET 0, implicit $eax
1886 successors: %bb.1(0x40000000), %bb.2(0x40000000)
1887 liveins: $edi, $edx, $esi
1892 %3(s32) = G_CONSTANT i32 0
1893 %4(s1) = G_ICMP intpred(sgt), %0(s32), %3
1894 G_BRCOND %4(s1), %bb.1
1898 successors: %bb.3(0x80000000)
1903 successors: %bb.3(0x80000000)
1906 %5(s32) = G_PHI %1(s32), %bb.1, %2(s32), %bb.2
1908 RET 0, implicit $eax
1915 regBankSelected: false
1916 tracksRegLiveness: true
1918 - { id: 0, class: _, preferred-register: '' }
1919 - { id: 1, class: _, preferred-register: '' }
1920 - { id: 2, class: _, preferred-register: '' }
1921 - { id: 3, class: _, preferred-register: '' }
1922 - { id: 4, class: _, preferred-register: '' }
1923 - { id: 5, class: _, preferred-register: '' }
1925 ; FAST-LABEL: name: test_float
1927 ; FAST: successors: %bb.2(0x40000000), %bb.1(0x40000000)
1928 ; FAST: liveins: $edi, $xmm0, $xmm1
1929 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1930 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm0
1931 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
1932 ; FAST: [[COPY2:%[0-9]+]]:vecr(s128) = COPY $xmm1
1933 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY2]](s128)
1934 ; FAST: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1935 ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1936 ; FAST: G_BRCOND [[ICMP]](s1), %bb.2
1937 ; FAST: bb.1.cond.false:
1938 ; FAST: successors: %bb.2(0x80000000)
1939 ; FAST: bb.2.cond.end:
1940 ; FAST: [[PHI:%[0-9]+]]:vecr(s32) = G_PHI [[TRUNC1]](s32), %bb.1, [[TRUNC]](s32), %bb.0
1941 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[PHI]](s32)
1942 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1943 ; FAST: RET 0, implicit $xmm0
1944 ; GREEDY-LABEL: name: test_float
1945 ; GREEDY: bb.0.entry:
1946 ; GREEDY: successors: %bb.2(0x40000000), %bb.1(0x40000000)
1947 ; GREEDY: liveins: $edi, $xmm0, $xmm1
1948 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1949 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm0
1950 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
1951 ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s128) = COPY $xmm1
1952 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY2]](s128)
1953 ; GREEDY: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1954 ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1955 ; GREEDY: G_BRCOND [[ICMP]](s1), %bb.2
1956 ; GREEDY: bb.1.cond.false:
1957 ; GREEDY: successors: %bb.2(0x80000000)
1958 ; GREEDY: bb.2.cond.end:
1959 ; GREEDY: [[PHI:%[0-9]+]]:vecr(s32) = G_PHI [[TRUNC1]](s32), %bb.1, [[TRUNC]](s32), %bb.0
1960 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[PHI]](s32)
1961 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1962 ; GREEDY: RET 0, implicit $xmm0
1964 successors: %bb.3(0x40000000), %bb.2(0x40000000)
1965 liveins: $edi, $xmm0, $xmm1
1967 %0:_(s32) = COPY $edi
1968 %3:_(s128) = COPY $xmm0
1969 %1:_(s32) = G_TRUNC %3(s128)
1970 %4:_(s128) = COPY $xmm1
1971 %2:_(s32) = G_TRUNC %4(s128)
1972 %5:_(s32) = G_CONSTANT i32 0
1973 %6:_(s1) = G_ICMP intpred(sgt), %0(s32), %5
1974 G_BRCOND %6(s1), %bb.3
1977 successors: %bb.3(0x80000000)
1981 %7:_(s32) = G_PHI %2(s32), %bb.2, %1(s32), %bb.1
1982 %8:_(s128) = G_ANYEXT %7(s32)
1983 $xmm0 = COPY %8(s128)
1984 RET 0, implicit $xmm0
1991 regBankSelected: false
1993 - { id: 0, class: _, preferred-register: '' }
1994 - { id: 1, class: _, preferred-register: '' }
1999 ; FAST-LABEL: name: test_fpext
2000 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2001 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2002 ; FAST: [[FPEXT:%[0-9]+]]:vecr(s64) = G_FPEXT [[TRUNC]](s32)
2003 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPEXT]](s64)
2004 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2005 ; FAST: RET 0, implicit $xmm0
2006 ; GREEDY-LABEL: name: test_fpext
2007 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2008 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2009 ; GREEDY: [[FPEXT:%[0-9]+]]:vecr(s64) = G_FPEXT [[TRUNC]](s32)
2010 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPEXT]](s64)
2011 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2012 ; GREEDY: RET 0, implicit $xmm0
2013 %1:_(s128) = COPY $xmm0
2014 %0:_(s32) = G_TRUNC %1(s128)
2015 %2:_(s64) = G_FPEXT %0(s32)
2016 %3:_(s128) = G_ANYEXT %2(s64)
2017 $xmm0 = COPY %3(s128)
2018 RET 0, implicit $xmm0
2025 tracksRegLiveness: true
2027 - { id: 0, class: _ }
2028 - { id: 1, class: _ }
2029 - { id: 2, class: _ }
2030 - { id: 3, class: _ }
2035 ; FAST-LABEL: name: test_fptrunc
2036 ; FAST: liveins: $xmm0
2037 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2038 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2039 ; FAST: [[FPTRUNC:%[0-9]+]]:vecr(s32) = G_FPTRUNC [[TRUNC]](s64)
2040 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPTRUNC]](s32)
2041 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2042 ; FAST: RET 0, implicit $xmm0
2043 ; GREEDY-LABEL: name: test_fptrunc
2044 ; GREEDY: liveins: $xmm0
2045 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2046 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2047 ; GREEDY: [[FPTRUNC:%[0-9]+]]:vecr(s32) = G_FPTRUNC [[TRUNC]](s64)
2048 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPTRUNC]](s32)
2049 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2050 ; GREEDY: RET 0, implicit $xmm0
2051 %1:_(s128) = COPY $xmm0
2052 %0:_(s64) = G_TRUNC %1(s128)
2053 %2:_(s32) = G_FPTRUNC %0(s64)
2054 %3:_(s128) = G_ANYEXT %2(s32)
2055 $xmm0 = COPY %3(s128)
2056 RET 0, implicit $xmm0
2060 name: test_fconstant
2061 # ALL-LABEL: name: test_fconstant
2064 - { id: 0, class: _ }
2065 - { id: 1, class: _ }
2068 ; FAST-LABEL: name: test_fconstant
2069 ; FAST: [[C:%[0-9]+]]:vecr(s32) = G_FCONSTANT float 1.000000e+00
2070 ; FAST: [[C1:%[0-9]+]]:vecr(s64) = G_FCONSTANT double 2.000000e+00
2071 ; GREEDY-LABEL: name: test_fconstant
2072 ; GREEDY: [[C:%[0-9]+]]:vecr(s32) = G_FCONSTANT float 1.000000e+00
2073 ; GREEDY: [[C1:%[0-9]+]]:vecr(s64) = G_FCONSTANT double 2.000000e+00
2074 %0(s32) = G_FCONSTANT float 1.0
2075 %1(s64) = G_FCONSTANT double 2.0
2079 name: int32_to_float
2082 tracksRegLiveness: true
2084 - { id: 0, class: _ }
2085 - { id: 1, class: _ }
2086 - { id: 2, class: _ }
2091 ; FAST-LABEL: name: int32_to_float
2092 ; FAST: liveins: $edi
2093 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2094 ; FAST: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s32)
2095 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2096 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2097 ; FAST: RET 0, implicit $xmm0
2098 ; GREEDY-LABEL: name: int32_to_float
2099 ; GREEDY: liveins: $edi
2100 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2101 ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s32)
2102 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2103 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2104 ; GREEDY: RET 0, implicit $xmm0
2105 %0:_(s32) = COPY $edi
2106 %1:_(s32) = G_SITOFP %0(s32)
2107 %2:_(s128) = G_ANYEXT %1(s32)
2108 $xmm0 = COPY %2(s128)
2109 RET 0, implicit $xmm0
2113 name: int64_to_float
2116 tracksRegLiveness: true
2118 - { id: 0, class: _ }
2119 - { id: 1, class: _ }
2120 - { id: 2, class: _ }
2125 ; FAST-LABEL: name: int64_to_float
2126 ; FAST: liveins: $rdi
2127 ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2128 ; FAST: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s64)
2129 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2130 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2131 ; FAST: RET 0, implicit $xmm0
2132 ; GREEDY-LABEL: name: int64_to_float
2133 ; GREEDY: liveins: $rdi
2134 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2135 ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s64)
2136 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2137 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2138 ; GREEDY: RET 0, implicit $xmm0
2139 %0:_(s64) = COPY $rdi
2140 %1:_(s32) = G_SITOFP %0(s64)
2141 %2:_(s128) = G_ANYEXT %1(s32)
2142 $xmm0 = COPY %2(s128)
2143 RET 0, implicit $xmm0
2147 name: int32_to_double
2150 tracksRegLiveness: true
2152 - { id: 0, class: _ }
2153 - { id: 1, class: _ }
2154 - { id: 2, class: _ }
2159 ; FAST-LABEL: name: int32_to_double
2160 ; FAST: liveins: $edi
2161 ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2162 ; FAST: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s32)
2163 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2164 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2165 ; FAST: RET 0, implicit $xmm0
2166 ; GREEDY-LABEL: name: int32_to_double
2167 ; GREEDY: liveins: $edi
2168 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2169 ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s32)
2170 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2171 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2172 ; GREEDY: RET 0, implicit $xmm0
2173 %0:_(s32) = COPY $edi
2174 %1:_(s64) = G_SITOFP %0(s32)
2175 %2:_(s128) = G_ANYEXT %1(s64)
2176 $xmm0 = COPY %2(s128)
2177 RET 0, implicit $xmm0
2181 name: int64_to_double
2184 tracksRegLiveness: true
2186 - { id: 0, class: _ }
2187 - { id: 1, class: _ }
2188 - { id: 2, class: _ }
2193 ; FAST-LABEL: name: int64_to_double
2194 ; FAST: liveins: $rdi
2195 ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2196 ; FAST: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s64)
2197 ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2198 ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2199 ; FAST: RET 0, implicit $xmm0
2200 ; GREEDY-LABEL: name: int64_to_double
2201 ; GREEDY: liveins: $rdi
2202 ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2203 ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s64)
2204 ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2205 ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2206 ; GREEDY: RET 0, implicit $xmm0
2207 %0:_(s64) = COPY $rdi
2208 %1:_(s64) = G_SITOFP %0(s64)
2209 %2:_(s128) = G_ANYEXT %1(s64)
2210 $xmm0 = COPY %2(s128)
2211 RET 0, implicit $xmm0
2218 tracksRegLiveness: true
2220 - { id: 0, class: _ }
2221 - { id: 1, class: _ }
2222 - { id: 2, class: _ }
2223 - { id: 3, class: _ }
2228 ; FAST-LABEL: name: float_to_int8
2229 ; FAST: liveins: $xmm0
2230 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2231 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2232 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2233 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2234 ; FAST: $al = COPY [[TRUNC1]](s8)
2235 ; FAST: RET 0, implicit $al
2236 ; GREEDY-LABEL: name: float_to_int8
2237 ; GREEDY: liveins: $xmm0
2238 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2239 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2240 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2241 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2242 ; GREEDY: $al = COPY [[TRUNC1]](s8)
2243 ; GREEDY: RET 0, implicit $al
2244 %1:_(s128) = COPY $xmm0
2245 %0:_(s32) = G_TRUNC %1(s128)
2246 %3:_(s32) = G_FPTOSI %0(s32)
2247 %2:_(s8) = G_TRUNC %3(s32)
2253 name: float_to_int16
2256 tracksRegLiveness: true
2258 - { id: 0, class: _ }
2259 - { id: 1, class: _ }
2260 - { id: 2, class: _ }
2261 - { id: 3, class: _ }
2266 ; FAST-LABEL: name: float_to_int16
2267 ; FAST: liveins: $xmm0
2268 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2269 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2270 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2271 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2272 ; FAST: $ax = COPY [[TRUNC1]](s16)
2273 ; FAST: RET 0, implicit $ax
2274 ; GREEDY-LABEL: name: float_to_int16
2275 ; GREEDY: liveins: $xmm0
2276 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2277 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2278 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2279 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2280 ; GREEDY: $ax = COPY [[TRUNC1]](s16)
2281 ; GREEDY: RET 0, implicit $ax
2282 %1:_(s128) = COPY $xmm0
2283 %0:_(s32) = G_TRUNC %1(s128)
2284 %3:_(s32) = G_FPTOSI %0(s32)
2285 %2:_(s16) = G_TRUNC %3(s32)
2291 name: float_to_int32
2294 tracksRegLiveness: true
2296 - { id: 0, class: _ }
2297 - { id: 1, class: _ }
2298 - { id: 2, class: _ }
2303 ; FAST-LABEL: name: float_to_int32
2304 ; FAST: liveins: $xmm0
2305 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2306 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2307 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2308 ; FAST: $eax = COPY [[FPTOSI]](s32)
2309 ; FAST: RET 0, implicit $eax
2310 ; GREEDY-LABEL: name: float_to_int32
2311 ; GREEDY: liveins: $xmm0
2312 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2313 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2314 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2315 ; GREEDY: $eax = COPY [[FPTOSI]](s32)
2316 ; GREEDY: RET 0, implicit $eax
2317 %1:_(s128) = COPY $xmm0
2318 %0:_(s32) = G_TRUNC %1(s128)
2319 %2:_(s32) = G_FPTOSI %0(s32)
2321 RET 0, implicit $eax
2325 name: float_to_int64
2328 tracksRegLiveness: true
2330 - { id: 0, class: _ }
2331 - { id: 1, class: _ }
2332 - { id: 2, class: _ }
2337 ; FAST-LABEL: name: float_to_int64
2338 ; FAST: liveins: $xmm0
2339 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2340 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2341 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s32)
2342 ; FAST: $rax = COPY [[FPTOSI]](s64)
2343 ; FAST: RET 0, implicit $rax
2344 ; GREEDY-LABEL: name: float_to_int64
2345 ; GREEDY: liveins: $xmm0
2346 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2347 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2348 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s32)
2349 ; GREEDY: $rax = COPY [[FPTOSI]](s64)
2350 ; GREEDY: RET 0, implicit $rax
2351 %1:_(s128) = COPY $xmm0
2352 %0:_(s32) = G_TRUNC %1(s128)
2353 %2:_(s64) = G_FPTOSI %0(s32)
2355 RET 0, implicit $rax
2359 name: double_to_int8
2362 tracksRegLiveness: true
2364 - { id: 0, class: _ }
2365 - { id: 1, class: _ }
2366 - { id: 2, class: _ }
2367 - { id: 3, class: _ }
2372 ; FAST-LABEL: name: double_to_int8
2373 ; FAST: liveins: $xmm0
2374 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2375 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2376 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2377 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2378 ; FAST: $al = COPY [[TRUNC1]](s8)
2379 ; FAST: RET 0, implicit $al
2380 ; GREEDY-LABEL: name: double_to_int8
2381 ; GREEDY: liveins: $xmm0
2382 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2383 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2384 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2385 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2386 ; GREEDY: $al = COPY [[TRUNC1]](s8)
2387 ; GREEDY: RET 0, implicit $al
2388 %1:_(s128) = COPY $xmm0
2389 %0:_(s64) = G_TRUNC %1(s128)
2390 %3:_(s32) = G_FPTOSI %0(s64)
2391 %2:_(s8) = G_TRUNC %3(s32)
2397 name: double_to_int16
2400 tracksRegLiveness: true
2402 - { id: 0, class: _ }
2403 - { id: 1, class: _ }
2404 - { id: 2, class: _ }
2405 - { id: 3, class: _ }
2410 ; FAST-LABEL: name: double_to_int16
2411 ; FAST: liveins: $xmm0
2412 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2413 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2414 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2415 ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2416 ; FAST: $ax = COPY [[TRUNC1]](s16)
2417 ; FAST: RET 0, implicit $ax
2418 ; GREEDY-LABEL: name: double_to_int16
2419 ; GREEDY: liveins: $xmm0
2420 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2421 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2422 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2423 ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2424 ; GREEDY: $ax = COPY [[TRUNC1]](s16)
2425 ; GREEDY: RET 0, implicit $ax
2426 %1:_(s128) = COPY $xmm0
2427 %0:_(s64) = G_TRUNC %1(s128)
2428 %3:_(s32) = G_FPTOSI %0(s64)
2429 %2:_(s16) = G_TRUNC %3(s32)
2435 name: double_to_int32
2438 tracksRegLiveness: true
2440 - { id: 0, class: _ }
2441 - { id: 1, class: _ }
2442 - { id: 2, class: _ }
2447 ; FAST-LABEL: name: double_to_int32
2448 ; FAST: liveins: $xmm0
2449 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2450 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2451 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2452 ; FAST: $eax = COPY [[FPTOSI]](s32)
2453 ; FAST: RET 0, implicit $eax
2454 ; GREEDY-LABEL: name: double_to_int32
2455 ; GREEDY: liveins: $xmm0
2456 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2457 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2458 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2459 ; GREEDY: $eax = COPY [[FPTOSI]](s32)
2460 ; GREEDY: RET 0, implicit $eax
2461 %1:_(s128) = COPY $xmm0
2462 %0:_(s64) = G_TRUNC %1(s128)
2463 %2:_(s32) = G_FPTOSI %0(s64)
2465 RET 0, implicit $eax
2469 name: double_to_int64
2472 tracksRegLiveness: true
2474 - { id: 0, class: _ }
2475 - { id: 1, class: _ }
2476 - { id: 2, class: _ }
2481 ; FAST-LABEL: name: double_to_int64
2482 ; FAST: liveins: $xmm0
2483 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2484 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2485 ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s64)
2486 ; FAST: $rax = COPY [[FPTOSI]](s64)
2487 ; FAST: RET 0, implicit $rax
2488 ; GREEDY-LABEL: name: double_to_int64
2489 ; GREEDY: liveins: $xmm0
2490 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2491 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2492 ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s64)
2493 ; GREEDY: $rax = COPY [[FPTOSI]](s64)
2494 ; GREEDY: RET 0, implicit $rax
2495 %1:_(s128) = COPY $xmm0
2496 %0:_(s64) = G_TRUNC %1(s128)
2497 %2:_(s64) = G_FPTOSI %0(s64)
2499 RET 0, implicit $rax
2503 name: fcmp_float_oeq
2506 tracksRegLiveness: true
2508 - { id: 0, class: _ }
2509 - { id: 1, class: _ }
2510 - { id: 2, class: _ }
2511 - { id: 3, class: _ }
2512 - { id: 4, class: _ }
2513 - { id: 5, class: _ }
2514 - { id: 6, class: _ }
2517 liveins: $xmm0, $xmm1
2519 ; FAST-LABEL: name: fcmp_float_oeq
2520 ; FAST: liveins: $xmm0, $xmm1
2521 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2522 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2523 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2524 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2525 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s32), [[TRUNC1]]
2526 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2527 ; FAST: $al = COPY [[COPY2]](s8)
2528 ; FAST: RET 0, implicit $al
2529 ; GREEDY-LABEL: name: fcmp_float_oeq
2530 ; GREEDY: liveins: $xmm0, $xmm1
2531 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2532 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2533 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2534 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2535 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s32), [[TRUNC1]]
2536 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2537 ; GREEDY: $al = COPY [[COPY2]](s8)
2538 ; GREEDY: RET 0, implicit $al
2539 %2:_(s128) = COPY $xmm0
2540 %0:_(s32) = G_TRUNC %2(s128)
2541 %3:_(s128) = COPY $xmm1
2542 %1:_(s32) = G_TRUNC %3(s128)
2543 %6:_(s8) = G_FCMP floatpred(oeq), %0(s32), %1
2544 %5:_(s8) = COPY %6(s8)
2550 name: fcmp_float_ogt
2553 tracksRegLiveness: true
2555 - { id: 0, class: _ }
2556 - { id: 1, class: _ }
2557 - { id: 2, class: _ }
2558 - { id: 3, class: _ }
2559 - { id: 4, class: _ }
2560 - { id: 5, class: _ }
2561 - { id: 6, class: _ }
2564 liveins: $xmm0, $xmm1
2566 ; FAST-LABEL: name: fcmp_float_ogt
2567 ; FAST: liveins: $xmm0, $xmm1
2568 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2569 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2570 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2571 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2572 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s32), [[TRUNC1]]
2573 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2574 ; FAST: $al = COPY [[COPY2]](s8)
2575 ; FAST: RET 0, implicit $al
2576 ; GREEDY-LABEL: name: fcmp_float_ogt
2577 ; GREEDY: liveins: $xmm0, $xmm1
2578 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2579 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2580 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2581 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2582 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s32), [[TRUNC1]]
2583 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2584 ; GREEDY: $al = COPY [[COPY2]](s8)
2585 ; GREEDY: RET 0, implicit $al
2586 %2:_(s128) = COPY $xmm0
2587 %0:_(s32) = G_TRUNC %2(s128)
2588 %3:_(s128) = COPY $xmm1
2589 %1:_(s32) = G_TRUNC %3(s128)
2590 %6:_(s8) = G_FCMP floatpred(ogt), %0(s32), %1
2591 %5:_(s8) = COPY %6(s8)
2597 name: fcmp_float_oge
2600 tracksRegLiveness: true
2602 - { id: 0, class: _ }
2603 - { id: 1, class: _ }
2604 - { id: 2, class: _ }
2605 - { id: 3, class: _ }
2606 - { id: 4, class: _ }
2607 - { id: 5, class: _ }
2608 - { id: 6, class: _ }
2611 liveins: $xmm0, $xmm1
2613 ; FAST-LABEL: name: fcmp_float_oge
2614 ; FAST: liveins: $xmm0, $xmm1
2615 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2616 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2617 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2618 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2619 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s32), [[TRUNC1]]
2620 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2621 ; FAST: $al = COPY [[COPY2]](s8)
2622 ; FAST: RET 0, implicit $al
2623 ; GREEDY-LABEL: name: fcmp_float_oge
2624 ; GREEDY: liveins: $xmm0, $xmm1
2625 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2626 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2627 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2628 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2629 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s32), [[TRUNC1]]
2630 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2631 ; GREEDY: $al = COPY [[COPY2]](s8)
2632 ; GREEDY: RET 0, implicit $al
2633 %2:_(s128) = COPY $xmm0
2634 %0:_(s32) = G_TRUNC %2(s128)
2635 %3:_(s128) = COPY $xmm1
2636 %1:_(s32) = G_TRUNC %3(s128)
2637 %6:_(s8) = G_FCMP floatpred(oge), %0(s32), %1
2638 %5:_(s8) = COPY %6(s8)
2644 name: fcmp_float_olt
2647 tracksRegLiveness: true
2649 - { id: 0, class: _ }
2650 - { id: 1, class: _ }
2651 - { id: 2, class: _ }
2652 - { id: 3, class: _ }
2653 - { id: 4, class: _ }
2654 - { id: 5, class: _ }
2655 - { id: 6, class: _ }
2658 liveins: $xmm0, $xmm1
2660 ; FAST-LABEL: name: fcmp_float_olt
2661 ; FAST: liveins: $xmm0, $xmm1
2662 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2663 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2664 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2665 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2666 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s32), [[TRUNC1]]
2667 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2668 ; FAST: $al = COPY [[COPY2]](s8)
2669 ; FAST: RET 0, implicit $al
2670 ; GREEDY-LABEL: name: fcmp_float_olt
2671 ; GREEDY: liveins: $xmm0, $xmm1
2672 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2673 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2674 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2675 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2676 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s32), [[TRUNC1]]
2677 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2678 ; GREEDY: $al = COPY [[COPY2]](s8)
2679 ; GREEDY: RET 0, implicit $al
2680 %2:_(s128) = COPY $xmm0
2681 %0:_(s32) = G_TRUNC %2(s128)
2682 %3:_(s128) = COPY $xmm1
2683 %1:_(s32) = G_TRUNC %3(s128)
2684 %6:_(s8) = G_FCMP floatpred(olt), %0(s32), %1
2685 %5:_(s8) = COPY %6(s8)
2691 name: fcmp_float_ole
2694 tracksRegLiveness: true
2696 - { id: 0, class: _ }
2697 - { id: 1, class: _ }
2698 - { id: 2, class: _ }
2699 - { id: 3, class: _ }
2700 - { id: 4, class: _ }
2701 - { id: 5, class: _ }
2702 - { id: 6, class: _ }
2705 liveins: $xmm0, $xmm1
2707 ; FAST-LABEL: name: fcmp_float_ole
2708 ; FAST: liveins: $xmm0, $xmm1
2709 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2710 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2711 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2712 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2713 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s32), [[TRUNC1]]
2714 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2715 ; FAST: $al = COPY [[COPY2]](s8)
2716 ; FAST: RET 0, implicit $al
2717 ; GREEDY-LABEL: name: fcmp_float_ole
2718 ; GREEDY: liveins: $xmm0, $xmm1
2719 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2720 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2721 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2722 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2723 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s32), [[TRUNC1]]
2724 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2725 ; GREEDY: $al = COPY [[COPY2]](s8)
2726 ; GREEDY: RET 0, implicit $al
2727 %2:_(s128) = COPY $xmm0
2728 %0:_(s32) = G_TRUNC %2(s128)
2729 %3:_(s128) = COPY $xmm1
2730 %1:_(s32) = G_TRUNC %3(s128)
2731 %6:_(s8) = G_FCMP floatpred(ole), %0(s32), %1
2732 %5:_(s8) = COPY %6(s8)
2738 name: fcmp_float_one
2741 tracksRegLiveness: true
2743 - { id: 0, class: _ }
2744 - { id: 1, class: _ }
2745 - { id: 2, class: _ }
2746 - { id: 3, class: _ }
2747 - { id: 4, class: _ }
2748 - { id: 5, class: _ }
2749 - { id: 6, class: _ }
2752 liveins: $xmm0, $xmm1
2754 ; FAST-LABEL: name: fcmp_float_one
2755 ; FAST: liveins: $xmm0, $xmm1
2756 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2757 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2758 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2759 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2760 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s32), [[TRUNC1]]
2761 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2762 ; FAST: $al = COPY [[COPY2]](s8)
2763 ; FAST: RET 0, implicit $al
2764 ; GREEDY-LABEL: name: fcmp_float_one
2765 ; GREEDY: liveins: $xmm0, $xmm1
2766 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2767 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2768 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2769 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2770 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s32), [[TRUNC1]]
2771 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2772 ; GREEDY: $al = COPY [[COPY2]](s8)
2773 ; GREEDY: RET 0, implicit $al
2774 %2:_(s128) = COPY $xmm0
2775 %0:_(s32) = G_TRUNC %2(s128)
2776 %3:_(s128) = COPY $xmm1
2777 %1:_(s32) = G_TRUNC %3(s128)
2778 %6:_(s8) = G_FCMP floatpred(one), %0(s32), %1
2779 %5:_(s8) = COPY %6(s8)
2785 name: fcmp_float_ord
2788 tracksRegLiveness: true
2790 - { id: 0, class: _ }
2791 - { id: 1, class: _ }
2792 - { id: 2, class: _ }
2793 - { id: 3, class: _ }
2794 - { id: 4, class: _ }
2795 - { id: 5, class: _ }
2796 - { id: 6, class: _ }
2799 liveins: $xmm0, $xmm1
2801 ; FAST-LABEL: name: fcmp_float_ord
2802 ; FAST: liveins: $xmm0, $xmm1
2803 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2804 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2805 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2806 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2807 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s32), [[TRUNC1]]
2808 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2809 ; FAST: $al = COPY [[COPY2]](s8)
2810 ; FAST: RET 0, implicit $al
2811 ; GREEDY-LABEL: name: fcmp_float_ord
2812 ; GREEDY: liveins: $xmm0, $xmm1
2813 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2814 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2815 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2816 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2817 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s32), [[TRUNC1]]
2818 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2819 ; GREEDY: $al = COPY [[COPY2]](s8)
2820 ; GREEDY: RET 0, implicit $al
2821 %2:_(s128) = COPY $xmm0
2822 %0:_(s32) = G_TRUNC %2(s128)
2823 %3:_(s128) = COPY $xmm1
2824 %1:_(s32) = G_TRUNC %3(s128)
2825 %6:_(s8) = G_FCMP floatpred(ord), %0(s32), %1
2826 %5:_(s8) = COPY %6(s8)
2832 name: fcmp_float_uno
2835 tracksRegLiveness: true
2837 - { id: 0, class: _ }
2838 - { id: 1, class: _ }
2839 - { id: 2, class: _ }
2840 - { id: 3, class: _ }
2841 - { id: 4, class: _ }
2842 - { id: 5, class: _ }
2843 - { id: 6, class: _ }
2846 liveins: $xmm0, $xmm1
2848 ; FAST-LABEL: name: fcmp_float_uno
2849 ; FAST: liveins: $xmm0, $xmm1
2850 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2851 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2852 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2853 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2854 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s32), [[TRUNC1]]
2855 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2856 ; FAST: $al = COPY [[COPY2]](s8)
2857 ; FAST: RET 0, implicit $al
2858 ; GREEDY-LABEL: name: fcmp_float_uno
2859 ; GREEDY: liveins: $xmm0, $xmm1
2860 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2861 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2862 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2863 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2864 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s32), [[TRUNC1]]
2865 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2866 ; GREEDY: $al = COPY [[COPY2]](s8)
2867 ; GREEDY: RET 0, implicit $al
2868 %2:_(s128) = COPY $xmm0
2869 %0:_(s32) = G_TRUNC %2(s128)
2870 %3:_(s128) = COPY $xmm1
2871 %1:_(s32) = G_TRUNC %3(s128)
2872 %6:_(s8) = G_FCMP floatpred(uno), %0(s32), %1
2873 %5:_(s8) = COPY %6(s8)
2879 name: fcmp_float_ueq
2882 tracksRegLiveness: true
2884 - { id: 0, class: _ }
2885 - { id: 1, class: _ }
2886 - { id: 2, class: _ }
2887 - { id: 3, class: _ }
2888 - { id: 4, class: _ }
2889 - { id: 5, class: _ }
2890 - { id: 6, class: _ }
2893 liveins: $xmm0, $xmm1
2895 ; FAST-LABEL: name: fcmp_float_ueq
2896 ; FAST: liveins: $xmm0, $xmm1
2897 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2898 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2899 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2900 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2901 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s32), [[TRUNC1]]
2902 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2903 ; FAST: $al = COPY [[COPY2]](s8)
2904 ; FAST: RET 0, implicit $al
2905 ; GREEDY-LABEL: name: fcmp_float_ueq
2906 ; GREEDY: liveins: $xmm0, $xmm1
2907 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2908 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2909 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2910 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2911 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s32), [[TRUNC1]]
2912 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2913 ; GREEDY: $al = COPY [[COPY2]](s8)
2914 ; GREEDY: RET 0, implicit $al
2915 %2:_(s128) = COPY $xmm0
2916 %0:_(s32) = G_TRUNC %2(s128)
2917 %3:_(s128) = COPY $xmm1
2918 %1:_(s32) = G_TRUNC %3(s128)
2919 %6:_(s8) = G_FCMP floatpred(ueq), %0(s32), %1
2920 %5:_(s8) = COPY %6(s8)
2926 name: fcmp_float_ugt
2929 tracksRegLiveness: true
2931 - { id: 0, class: _ }
2932 - { id: 1, class: _ }
2933 - { id: 2, class: _ }
2934 - { id: 3, class: _ }
2935 - { id: 4, class: _ }
2936 - { id: 5, class: _ }
2937 - { id: 6, class: _ }
2940 liveins: $xmm0, $xmm1
2942 ; FAST-LABEL: name: fcmp_float_ugt
2943 ; FAST: liveins: $xmm0, $xmm1
2944 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2945 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2946 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2947 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2948 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s32), [[TRUNC1]]
2949 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2950 ; FAST: $al = COPY [[COPY2]](s8)
2951 ; FAST: RET 0, implicit $al
2952 ; GREEDY-LABEL: name: fcmp_float_ugt
2953 ; GREEDY: liveins: $xmm0, $xmm1
2954 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2955 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2956 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2957 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2958 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s32), [[TRUNC1]]
2959 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2960 ; GREEDY: $al = COPY [[COPY2]](s8)
2961 ; GREEDY: RET 0, implicit $al
2962 %2:_(s128) = COPY $xmm0
2963 %0:_(s32) = G_TRUNC %2(s128)
2964 %3:_(s128) = COPY $xmm1
2965 %1:_(s32) = G_TRUNC %3(s128)
2966 %6:_(s8) = G_FCMP floatpred(ugt), %0(s32), %1
2967 %5:_(s8) = COPY %6(s8)
2973 name: fcmp_float_uge
2976 tracksRegLiveness: true
2978 - { id: 0, class: _ }
2979 - { id: 1, class: _ }
2980 - { id: 2, class: _ }
2981 - { id: 3, class: _ }
2982 - { id: 4, class: _ }
2983 - { id: 5, class: _ }
2984 - { id: 6, class: _ }
2987 liveins: $xmm0, $xmm1
2989 ; FAST-LABEL: name: fcmp_float_uge
2990 ; FAST: liveins: $xmm0, $xmm1
2991 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2992 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2993 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2994 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2995 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s32), [[TRUNC1]]
2996 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2997 ; FAST: $al = COPY [[COPY2]](s8)
2998 ; FAST: RET 0, implicit $al
2999 ; GREEDY-LABEL: name: fcmp_float_uge
3000 ; GREEDY: liveins: $xmm0, $xmm1
3001 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3002 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3003 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3004 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3005 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s32), [[TRUNC1]]
3006 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3007 ; GREEDY: $al = COPY [[COPY2]](s8)
3008 ; GREEDY: RET 0, implicit $al
3009 %2:_(s128) = COPY $xmm0
3010 %0:_(s32) = G_TRUNC %2(s128)
3011 %3:_(s128) = COPY $xmm1
3012 %1:_(s32) = G_TRUNC %3(s128)
3013 %6:_(s8) = G_FCMP floatpred(uge), %0(s32), %1
3014 %5:_(s8) = COPY %6(s8)
3020 name: fcmp_float_ult
3023 tracksRegLiveness: true
3025 - { id: 0, class: _ }
3026 - { id: 1, class: _ }
3027 - { id: 2, class: _ }
3028 - { id: 3, class: _ }
3029 - { id: 4, class: _ }
3030 - { id: 5, class: _ }
3031 - { id: 6, class: _ }
3034 liveins: $xmm0, $xmm1
3036 ; FAST-LABEL: name: fcmp_float_ult
3037 ; FAST: liveins: $xmm0, $xmm1
3038 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3039 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3040 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3041 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3042 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s32), [[TRUNC1]]
3043 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3044 ; FAST: $al = COPY [[COPY2]](s8)
3045 ; FAST: RET 0, implicit $al
3046 ; GREEDY-LABEL: name: fcmp_float_ult
3047 ; GREEDY: liveins: $xmm0, $xmm1
3048 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3049 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3050 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3051 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3052 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s32), [[TRUNC1]]
3053 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3054 ; GREEDY: $al = COPY [[COPY2]](s8)
3055 ; GREEDY: RET 0, implicit $al
3056 %2:_(s128) = COPY $xmm0
3057 %0:_(s32) = G_TRUNC %2(s128)
3058 %3:_(s128) = COPY $xmm1
3059 %1:_(s32) = G_TRUNC %3(s128)
3060 %6:_(s8) = G_FCMP floatpred(ult), %0(s32), %1
3061 %5:_(s8) = COPY %6(s8)
3067 name: fcmp_float_ule
3070 tracksRegLiveness: true
3072 - { id: 0, class: _ }
3073 - { id: 1, class: _ }
3074 - { id: 2, class: _ }
3075 - { id: 3, class: _ }
3076 - { id: 4, class: _ }
3077 - { id: 5, class: _ }
3078 - { id: 6, class: _ }
3081 liveins: $xmm0, $xmm1
3083 ; FAST-LABEL: name: fcmp_float_ule
3084 ; FAST: liveins: $xmm0, $xmm1
3085 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3086 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3087 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3088 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3089 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s32), [[TRUNC1]]
3090 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3091 ; FAST: $al = COPY [[COPY2]](s8)
3092 ; FAST: RET 0, implicit $al
3093 ; GREEDY-LABEL: name: fcmp_float_ule
3094 ; GREEDY: liveins: $xmm0, $xmm1
3095 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3096 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3097 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3098 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3099 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s32), [[TRUNC1]]
3100 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3101 ; GREEDY: $al = COPY [[COPY2]](s8)
3102 ; GREEDY: RET 0, implicit $al
3103 %2:_(s128) = COPY $xmm0
3104 %0:_(s32) = G_TRUNC %2(s128)
3105 %3:_(s128) = COPY $xmm1
3106 %1:_(s32) = G_TRUNC %3(s128)
3107 %6:_(s8) = G_FCMP floatpred(ule), %0(s32), %1
3108 %5:_(s8) = COPY %6(s8)
3114 name: fcmp_float_une
3117 tracksRegLiveness: true
3119 - { id: 0, class: _ }
3120 - { id: 1, class: _ }
3121 - { id: 2, class: _ }
3122 - { id: 3, class: _ }
3123 - { id: 4, class: _ }
3124 - { id: 5, class: _ }
3125 - { id: 6, class: _ }
3128 liveins: $xmm0, $xmm1
3130 ; FAST-LABEL: name: fcmp_float_une
3131 ; FAST: liveins: $xmm0, $xmm1
3132 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3133 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3134 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3135 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3136 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s32), [[TRUNC1]]
3137 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3138 ; FAST: $al = COPY [[COPY2]](s8)
3139 ; FAST: RET 0, implicit $al
3140 ; GREEDY-LABEL: name: fcmp_float_une
3141 ; GREEDY: liveins: $xmm0, $xmm1
3142 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3143 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3144 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3145 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3146 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s32), [[TRUNC1]]
3147 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3148 ; GREEDY: $al = COPY [[COPY2]](s8)
3149 ; GREEDY: RET 0, implicit $al
3150 %2:_(s128) = COPY $xmm0
3151 %0:_(s32) = G_TRUNC %2(s128)
3152 %3:_(s128) = COPY $xmm1
3153 %1:_(s32) = G_TRUNC %3(s128)
3154 %6:_(s8) = G_FCMP floatpred(une), %0(s32), %1
3155 %5:_(s8) = COPY %6(s8)
3161 name: fcmp_double_oeq
3164 tracksRegLiveness: true
3166 - { id: 0, class: _ }
3167 - { id: 1, class: _ }
3168 - { id: 2, class: _ }
3169 - { id: 3, class: _ }
3170 - { id: 4, class: _ }
3171 - { id: 5, class: _ }
3172 - { id: 6, class: _ }
3175 liveins: $xmm0, $xmm1
3177 ; FAST-LABEL: name: fcmp_double_oeq
3178 ; FAST: liveins: $xmm0, $xmm1
3179 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3180 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3181 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3182 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3183 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s64), [[TRUNC1]]
3184 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3185 ; FAST: $al = COPY [[COPY2]](s8)
3186 ; FAST: RET 0, implicit $al
3187 ; GREEDY-LABEL: name: fcmp_double_oeq
3188 ; GREEDY: liveins: $xmm0, $xmm1
3189 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3190 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3191 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3192 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3193 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s64), [[TRUNC1]]
3194 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3195 ; GREEDY: $al = COPY [[COPY2]](s8)
3196 ; GREEDY: RET 0, implicit $al
3197 %2:_(s128) = COPY $xmm0
3198 %0:_(s64) = G_TRUNC %2(s128)
3199 %3:_(s128) = COPY $xmm1
3200 %1:_(s64) = G_TRUNC %3(s128)
3201 %6:_(s8) = G_FCMP floatpred(oeq), %0(s64), %1
3202 %5:_(s8) = COPY %6(s8)
3208 name: fcmp_double_ogt
3211 tracksRegLiveness: true
3213 - { id: 0, class: _ }
3214 - { id: 1, class: _ }
3215 - { id: 2, class: _ }
3216 - { id: 3, class: _ }
3217 - { id: 4, class: _ }
3218 - { id: 5, class: _ }
3219 - { id: 6, class: _ }
3222 liveins: $xmm0, $xmm1
3224 ; FAST-LABEL: name: fcmp_double_ogt
3225 ; FAST: liveins: $xmm0, $xmm1
3226 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3227 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3228 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3229 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3230 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s64), [[TRUNC1]]
3231 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3232 ; FAST: $al = COPY [[COPY2]](s8)
3233 ; FAST: RET 0, implicit $al
3234 ; GREEDY-LABEL: name: fcmp_double_ogt
3235 ; GREEDY: liveins: $xmm0, $xmm1
3236 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3237 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3238 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3239 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3240 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s64), [[TRUNC1]]
3241 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3242 ; GREEDY: $al = COPY [[COPY2]](s8)
3243 ; GREEDY: RET 0, implicit $al
3244 %2:_(s128) = COPY $xmm0
3245 %0:_(s64) = G_TRUNC %2(s128)
3246 %3:_(s128) = COPY $xmm1
3247 %1:_(s64) = G_TRUNC %3(s128)
3248 %6:_(s8) = G_FCMP floatpred(ogt), %0(s64), %1
3249 %5:_(s8) = COPY %6(s8)
3255 name: fcmp_double_oge
3258 tracksRegLiveness: true
3260 - { id: 0, class: _ }
3261 - { id: 1, class: _ }
3262 - { id: 2, class: _ }
3263 - { id: 3, class: _ }
3264 - { id: 4, class: _ }
3265 - { id: 5, class: _ }
3266 - { id: 6, class: _ }
3269 liveins: $xmm0, $xmm1
3271 ; FAST-LABEL: name: fcmp_double_oge
3272 ; FAST: liveins: $xmm0, $xmm1
3273 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3274 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3275 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3276 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3277 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s64), [[TRUNC1]]
3278 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3279 ; FAST: $al = COPY [[COPY2]](s8)
3280 ; FAST: RET 0, implicit $al
3281 ; GREEDY-LABEL: name: fcmp_double_oge
3282 ; GREEDY: liveins: $xmm0, $xmm1
3283 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3284 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3285 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3286 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3287 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s64), [[TRUNC1]]
3288 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3289 ; GREEDY: $al = COPY [[COPY2]](s8)
3290 ; GREEDY: RET 0, implicit $al
3291 %2:_(s128) = COPY $xmm0
3292 %0:_(s64) = G_TRUNC %2(s128)
3293 %3:_(s128) = COPY $xmm1
3294 %1:_(s64) = G_TRUNC %3(s128)
3295 %6:_(s8) = G_FCMP floatpred(oge), %0(s64), %1
3296 %5:_(s8) = COPY %6(s8)
3302 name: fcmp_double_olt
3305 tracksRegLiveness: true
3307 - { id: 0, class: _ }
3308 - { id: 1, class: _ }
3309 - { id: 2, class: _ }
3310 - { id: 3, class: _ }
3311 - { id: 4, class: _ }
3312 - { id: 5, class: _ }
3313 - { id: 6, class: _ }
3316 liveins: $xmm0, $xmm1
3318 ; FAST-LABEL: name: fcmp_double_olt
3319 ; FAST: liveins: $xmm0, $xmm1
3320 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3321 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3322 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3323 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3324 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s64), [[TRUNC1]]
3325 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3326 ; FAST: $al = COPY [[COPY2]](s8)
3327 ; FAST: RET 0, implicit $al
3328 ; GREEDY-LABEL: name: fcmp_double_olt
3329 ; GREEDY: liveins: $xmm0, $xmm1
3330 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3331 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3332 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3333 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3334 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s64), [[TRUNC1]]
3335 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3336 ; GREEDY: $al = COPY [[COPY2]](s8)
3337 ; GREEDY: RET 0, implicit $al
3338 %2:_(s128) = COPY $xmm0
3339 %0:_(s64) = G_TRUNC %2(s128)
3340 %3:_(s128) = COPY $xmm1
3341 %1:_(s64) = G_TRUNC %3(s128)
3342 %6:_(s8) = G_FCMP floatpred(olt), %0(s64), %1
3343 %5:_(s8) = COPY %6(s8)
3349 name: fcmp_double_ole
3352 tracksRegLiveness: true
3354 - { id: 0, class: _ }
3355 - { id: 1, class: _ }
3356 - { id: 2, class: _ }
3357 - { id: 3, class: _ }
3358 - { id: 4, class: _ }
3359 - { id: 5, class: _ }
3360 - { id: 6, class: _ }
3363 liveins: $xmm0, $xmm1
3365 ; FAST-LABEL: name: fcmp_double_ole
3366 ; FAST: liveins: $xmm0, $xmm1
3367 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3368 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3369 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3370 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3371 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s64), [[TRUNC1]]
3372 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3373 ; FAST: $al = COPY [[COPY2]](s8)
3374 ; FAST: RET 0, implicit $al
3375 ; GREEDY-LABEL: name: fcmp_double_ole
3376 ; GREEDY: liveins: $xmm0, $xmm1
3377 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3378 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3379 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3380 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3381 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s64), [[TRUNC1]]
3382 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3383 ; GREEDY: $al = COPY [[COPY2]](s8)
3384 ; GREEDY: RET 0, implicit $al
3385 %2:_(s128) = COPY $xmm0
3386 %0:_(s64) = G_TRUNC %2(s128)
3387 %3:_(s128) = COPY $xmm1
3388 %1:_(s64) = G_TRUNC %3(s128)
3389 %6:_(s8) = G_FCMP floatpred(ole), %0(s64), %1
3390 %5:_(s8) = COPY %6(s8)
3396 name: fcmp_double_one
3399 tracksRegLiveness: true
3401 - { id: 0, class: _ }
3402 - { id: 1, class: _ }
3403 - { id: 2, class: _ }
3404 - { id: 3, class: _ }
3405 - { id: 4, class: _ }
3406 - { id: 5, class: _ }
3407 - { id: 6, class: _ }
3410 liveins: $xmm0, $xmm1
3412 ; FAST-LABEL: name: fcmp_double_one
3413 ; FAST: liveins: $xmm0, $xmm1
3414 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3415 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3416 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3417 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3418 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s64), [[TRUNC1]]
3419 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3420 ; FAST: $al = COPY [[COPY2]](s8)
3421 ; FAST: RET 0, implicit $al
3422 ; GREEDY-LABEL: name: fcmp_double_one
3423 ; GREEDY: liveins: $xmm0, $xmm1
3424 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3425 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3426 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3427 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3428 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s64), [[TRUNC1]]
3429 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3430 ; GREEDY: $al = COPY [[COPY2]](s8)
3431 ; GREEDY: RET 0, implicit $al
3432 %2:_(s128) = COPY $xmm0
3433 %0:_(s64) = G_TRUNC %2(s128)
3434 %3:_(s128) = COPY $xmm1
3435 %1:_(s64) = G_TRUNC %3(s128)
3436 %6:_(s8) = G_FCMP floatpred(one), %0(s64), %1
3437 %5:_(s8) = COPY %6(s8)
3443 name: fcmp_double_ord
3446 tracksRegLiveness: true
3448 - { id: 0, class: _ }
3449 - { id: 1, class: _ }
3450 - { id: 2, class: _ }
3451 - { id: 3, class: _ }
3452 - { id: 4, class: _ }
3453 - { id: 5, class: _ }
3454 - { id: 6, class: _ }
3457 liveins: $xmm0, $xmm1
3459 ; FAST-LABEL: name: fcmp_double_ord
3460 ; FAST: liveins: $xmm0, $xmm1
3461 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3462 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3463 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3464 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3465 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s64), [[TRUNC1]]
3466 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3467 ; FAST: $al = COPY [[COPY2]](s8)
3468 ; FAST: RET 0, implicit $al
3469 ; GREEDY-LABEL: name: fcmp_double_ord
3470 ; GREEDY: liveins: $xmm0, $xmm1
3471 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3472 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3473 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3474 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3475 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s64), [[TRUNC1]]
3476 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3477 ; GREEDY: $al = COPY [[COPY2]](s8)
3478 ; GREEDY: RET 0, implicit $al
3479 %2:_(s128) = COPY $xmm0
3480 %0:_(s64) = G_TRUNC %2(s128)
3481 %3:_(s128) = COPY $xmm1
3482 %1:_(s64) = G_TRUNC %3(s128)
3483 %6:_(s8) = G_FCMP floatpred(ord), %0(s64), %1
3484 %5:_(s8) = COPY %6(s8)
3490 name: fcmp_double_uno
3493 tracksRegLiveness: true
3495 - { id: 0, class: _ }
3496 - { id: 1, class: _ }
3497 - { id: 2, class: _ }
3498 - { id: 3, class: _ }
3499 - { id: 4, class: _ }
3500 - { id: 5, class: _ }
3501 - { id: 6, class: _ }
3504 liveins: $xmm0, $xmm1
3506 ; FAST-LABEL: name: fcmp_double_uno
3507 ; FAST: liveins: $xmm0, $xmm1
3508 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3509 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3510 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3511 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3512 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s64), [[TRUNC1]]
3513 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3514 ; FAST: $al = COPY [[COPY2]](s8)
3515 ; FAST: RET 0, implicit $al
3516 ; GREEDY-LABEL: name: fcmp_double_uno
3517 ; GREEDY: liveins: $xmm0, $xmm1
3518 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3519 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3520 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3521 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3522 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s64), [[TRUNC1]]
3523 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3524 ; GREEDY: $al = COPY [[COPY2]](s8)
3525 ; GREEDY: RET 0, implicit $al
3526 %2:_(s128) = COPY $xmm0
3527 %0:_(s64) = G_TRUNC %2(s128)
3528 %3:_(s128) = COPY $xmm1
3529 %1:_(s64) = G_TRUNC %3(s128)
3530 %6:_(s8) = G_FCMP floatpred(uno), %0(s64), %1
3531 %5:_(s8) = COPY %6(s8)
3537 name: fcmp_double_ueq
3540 tracksRegLiveness: true
3542 - { id: 0, class: _ }
3543 - { id: 1, class: _ }
3544 - { id: 2, class: _ }
3545 - { id: 3, class: _ }
3546 - { id: 4, class: _ }
3547 - { id: 5, class: _ }
3548 - { id: 6, class: _ }
3551 liveins: $xmm0, $xmm1
3553 ; FAST-LABEL: name: fcmp_double_ueq
3554 ; FAST: liveins: $xmm0, $xmm1
3555 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3556 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3557 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3558 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3559 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s64), [[TRUNC1]]
3560 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3561 ; FAST: $al = COPY [[COPY2]](s8)
3562 ; FAST: RET 0, implicit $al
3563 ; GREEDY-LABEL: name: fcmp_double_ueq
3564 ; GREEDY: liveins: $xmm0, $xmm1
3565 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3566 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3567 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3568 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3569 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s64), [[TRUNC1]]
3570 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3571 ; GREEDY: $al = COPY [[COPY2]](s8)
3572 ; GREEDY: RET 0, implicit $al
3573 %2:_(s128) = COPY $xmm0
3574 %0:_(s64) = G_TRUNC %2(s128)
3575 %3:_(s128) = COPY $xmm1
3576 %1:_(s64) = G_TRUNC %3(s128)
3577 %6:_(s8) = G_FCMP floatpred(ueq), %0(s64), %1
3578 %5:_(s8) = COPY %6(s8)
3584 name: fcmp_double_ugt
3587 tracksRegLiveness: true
3589 - { id: 0, class: _ }
3590 - { id: 1, class: _ }
3591 - { id: 2, class: _ }
3592 - { id: 3, class: _ }
3593 - { id: 4, class: _ }
3594 - { id: 5, class: _ }
3595 - { id: 6, class: _ }
3598 liveins: $xmm0, $xmm1
3600 ; FAST-LABEL: name: fcmp_double_ugt
3601 ; FAST: liveins: $xmm0, $xmm1
3602 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3603 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3604 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3605 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3606 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s64), [[TRUNC1]]
3607 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3608 ; FAST: $al = COPY [[COPY2]](s8)
3609 ; FAST: RET 0, implicit $al
3610 ; GREEDY-LABEL: name: fcmp_double_ugt
3611 ; GREEDY: liveins: $xmm0, $xmm1
3612 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3613 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3614 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3615 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3616 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s64), [[TRUNC1]]
3617 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3618 ; GREEDY: $al = COPY [[COPY2]](s8)
3619 ; GREEDY: RET 0, implicit $al
3620 %2:_(s128) = COPY $xmm0
3621 %0:_(s64) = G_TRUNC %2(s128)
3622 %3:_(s128) = COPY $xmm1
3623 %1:_(s64) = G_TRUNC %3(s128)
3624 %6:_(s8) = G_FCMP floatpred(ugt), %0(s64), %1
3625 %5:_(s8) = COPY %6(s8)
3631 name: fcmp_double_uge
3634 tracksRegLiveness: true
3636 - { id: 0, class: _ }
3637 - { id: 1, class: _ }
3638 - { id: 2, class: _ }
3639 - { id: 3, class: _ }
3640 - { id: 4, class: _ }
3641 - { id: 5, class: _ }
3642 - { id: 6, class: _ }
3645 liveins: $xmm0, $xmm1
3647 ; FAST-LABEL: name: fcmp_double_uge
3648 ; FAST: liveins: $xmm0, $xmm1
3649 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3650 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3651 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3652 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3653 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s64), [[TRUNC1]]
3654 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3655 ; FAST: $al = COPY [[COPY2]](s8)
3656 ; FAST: RET 0, implicit $al
3657 ; GREEDY-LABEL: name: fcmp_double_uge
3658 ; GREEDY: liveins: $xmm0, $xmm1
3659 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3660 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3661 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3662 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3663 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s64), [[TRUNC1]]
3664 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3665 ; GREEDY: $al = COPY [[COPY2]](s8)
3666 ; GREEDY: RET 0, implicit $al
3667 %2:_(s128) = COPY $xmm0
3668 %0:_(s64) = G_TRUNC %2(s128)
3669 %3:_(s128) = COPY $xmm1
3670 %1:_(s64) = G_TRUNC %3(s128)
3671 %6:_(s8) = G_FCMP floatpred(uge), %0(s64), %1
3672 %5:_(s8) = COPY %6(s8)
3678 name: fcmp_double_ult
3681 tracksRegLiveness: true
3683 - { id: 0, class: _ }
3684 - { id: 1, class: _ }
3685 - { id: 2, class: _ }
3686 - { id: 3, class: _ }
3687 - { id: 4, class: _ }
3688 - { id: 5, class: _ }
3689 - { id: 6, class: _ }
3692 liveins: $xmm0, $xmm1
3694 ; FAST-LABEL: name: fcmp_double_ult
3695 ; FAST: liveins: $xmm0, $xmm1
3696 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3697 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3698 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3699 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3700 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s64), [[TRUNC1]]
3701 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3702 ; FAST: $al = COPY [[COPY2]](s8)
3703 ; FAST: RET 0, implicit $al
3704 ; GREEDY-LABEL: name: fcmp_double_ult
3705 ; GREEDY: liveins: $xmm0, $xmm1
3706 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3707 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3708 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3709 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3710 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s64), [[TRUNC1]]
3711 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3712 ; GREEDY: $al = COPY [[COPY2]](s8)
3713 ; GREEDY: RET 0, implicit $al
3714 %2:_(s128) = COPY $xmm0
3715 %0:_(s64) = G_TRUNC %2(s128)
3716 %3:_(s128) = COPY $xmm1
3717 %1:_(s64) = G_TRUNC %3(s128)
3718 %6:_(s8) = G_FCMP floatpred(ult), %0(s64), %1
3719 %5:_(s8) = COPY %6(s8)
3725 name: fcmp_double_ule
3728 tracksRegLiveness: true
3730 - { id: 0, class: _ }
3731 - { id: 1, class: _ }
3732 - { id: 2, class: _ }
3733 - { id: 3, class: _ }
3734 - { id: 4, class: _ }
3735 - { id: 5, class: _ }
3736 - { id: 6, class: _ }
3739 liveins: $xmm0, $xmm1
3741 ; FAST-LABEL: name: fcmp_double_ule
3742 ; FAST: liveins: $xmm0, $xmm1
3743 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3744 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3745 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3746 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3747 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s64), [[TRUNC1]]
3748 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3749 ; FAST: $al = COPY [[COPY2]](s8)
3750 ; FAST: RET 0, implicit $al
3751 ; GREEDY-LABEL: name: fcmp_double_ule
3752 ; GREEDY: liveins: $xmm0, $xmm1
3753 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3754 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3755 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3756 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3757 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s64), [[TRUNC1]]
3758 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3759 ; GREEDY: $al = COPY [[COPY2]](s8)
3760 ; GREEDY: RET 0, implicit $al
3761 %2:_(s128) = COPY $xmm0
3762 %0:_(s64) = G_TRUNC %2(s128)
3763 %3:_(s128) = COPY $xmm1
3764 %1:_(s64) = G_TRUNC %3(s128)
3765 %6:_(s8) = G_FCMP floatpred(ule), %0(s64), %1
3766 %5:_(s8) = COPY %6(s8)
3772 name: fcmp_double_une
3775 tracksRegLiveness: true
3777 - { id: 0, class: _ }
3778 - { id: 1, class: _ }
3779 - { id: 2, class: _ }
3780 - { id: 3, class: _ }
3781 - { id: 4, class: _ }
3782 - { id: 5, class: _ }
3783 - { id: 6, class: _ }
3786 liveins: $xmm0, $xmm1
3788 ; FAST-LABEL: name: fcmp_double_une
3789 ; FAST: liveins: $xmm0, $xmm1
3790 ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3791 ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3792 ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3793 ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3794 ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s64), [[TRUNC1]]
3795 ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3796 ; FAST: $al = COPY [[COPY2]](s8)
3797 ; FAST: RET 0, implicit $al
3798 ; GREEDY-LABEL: name: fcmp_double_une
3799 ; GREEDY: liveins: $xmm0, $xmm1
3800 ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3801 ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3802 ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3803 ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3804 ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s64), [[TRUNC1]]
3805 ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3806 ; GREEDY: $al = COPY [[COPY2]](s8)
3807 ; GREEDY: RET 0, implicit $al
3808 %2:_(s128) = COPY $xmm0
3809 %0:_(s64) = G_TRUNC %2(s128)
3810 %3:_(s128) = COPY $xmm1
3811 %1:_(s64) = G_TRUNC %3(s128)
3812 %6:_(s8) = G_FCMP floatpred(une), %0(s64), %1
3813 %5:_(s8) = COPY %6(s8)