@@ -522,23 +522,25 @@ define i128 @abd_ext_i128_undef(i128 %a, i128 %b) nounwind {
522
522
define i8 @abd_minmax_i8 (i8 %a , i8 %b ) nounwind {
523
523
; X86-LABEL: abd_minmax_i8:
524
524
; X86: # %bb.0:
525
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
526
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
527
- ; X86-NEXT: cmpb %cl , %dl
525
+ ; X86-NEXT: movsbl {{[0-9]+}}(%esp), %eax
526
+ ; X86-NEXT: movsbl {{[0-9]+}}(%esp), %ecx
527
+ ; X86-NEXT: subl %eax , %ecx
528
528
; X86-NEXT: movl %ecx, %eax
529
- ; X86-NEXT: cmovll %edx, %eax
530
- ; X86-NEXT: cmovgl %edx , %ecx
531
- ; X86-NEXT: subb %cl, %al
529
+ ; X86-NEXT: negl %eax
530
+ ; X86-NEXT: cmovsl %ecx , %eax
531
+ ; X86-NEXT: negb %al
532
532
; X86-NEXT: # kill: def $al killed $al killed $eax
533
533
; X86-NEXT: retl
534
534
;
535
535
; X64-LABEL: abd_minmax_i8:
536
536
; X64: # %bb.0:
537
- ; X64-NEXT: cmpb %sil, %dil
538
- ; X64-NEXT: movl %esi, %eax
539
- ; X64-NEXT: cmovll %edi, %eax
540
- ; X64-NEXT: cmovgl %edi, %esi
541
- ; X64-NEXT: subb %sil, %al
537
+ ; X64-NEXT: movsbl %sil, %eax
538
+ ; X64-NEXT: movsbl %dil, %ecx
539
+ ; X64-NEXT: subl %eax, %ecx
540
+ ; X64-NEXT: movl %ecx, %eax
541
+ ; X64-NEXT: negl %eax
542
+ ; X64-NEXT: cmovsl %ecx, %eax
543
+ ; X64-NEXT: negb %al
542
544
; X64-NEXT: # kill: def $al killed $al killed $eax
543
545
; X64-NEXT: retq
544
546
%min = call i8 @llvm.smin.i8 (i8 %a , i8 %b )
@@ -550,23 +552,23 @@ define i8 @abd_minmax_i8(i8 %a, i8 %b) nounwind {
550
552
define i16 @abd_minmax_i16 (i16 %a , i16 %b ) nounwind {
551
553
; X86-LABEL: abd_minmax_i16:
552
554
; X86: # %bb.0:
553
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
554
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
555
- ; X86-NEXT: cmpw %cx , %dx
555
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax
556
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
557
+ ; X86-NEXT: subl %eax , %ecx
556
558
; X86-NEXT: movl %ecx, %eax
557
- ; X86-NEXT: cmovll %edx, %eax
558
- ; X86-NEXT: cmovgl %edx, %ecx
559
- ; X86-NEXT: subl %ecx, %eax
559
+ ; X86-NEXT: negl %eax
560
+ ; X86-NEXT: cmovnsl %ecx, %eax
560
561
; X86-NEXT: # kill: def $ax killed $ax killed $eax
561
562
; X86-NEXT: retl
562
563
;
563
564
; X64-LABEL: abd_minmax_i16:
564
565
; X64: # %bb.0:
565
- ; X64-NEXT: cmpw %si, %di
566
- ; X64-NEXT: movl %esi, %eax
567
- ; X64-NEXT: cmovll %edi, %eax
568
- ; X64-NEXT: cmovgl %edi, %esi
569
- ; X64-NEXT: subl %esi, %eax
566
+ ; X64-NEXT: movswl %si, %eax
567
+ ; X64-NEXT: movswl %di, %ecx
568
+ ; X64-NEXT: subl %eax, %ecx
569
+ ; X64-NEXT: movl %ecx, %eax
570
+ ; X64-NEXT: negl %eax
571
+ ; X64-NEXT: cmovnsl %ecx, %eax
570
572
; X64-NEXT: # kill: def $ax killed $ax killed $eax
571
573
; X64-NEXT: retq
572
574
%min = call i16 @llvm.smin.i16 (i16 %a , i16 %b )
@@ -578,22 +580,22 @@ define i16 @abd_minmax_i16(i16 %a, i16 %b) nounwind {
578
580
define i32 @abd_minmax_i32 (i32 %a , i32 %b ) nounwind {
579
581
; X86-LABEL: abd_minmax_i32:
580
582
; X86: # %bb.0:
583
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
581
584
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
582
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
583
- ; X86-NEXT: cmpl %ecx, %edx
584
- ; X86-NEXT: movl %ecx, %eax
585
- ; X86-NEXT: cmovll %edx, %eax
586
- ; X86-NEXT: cmovgl %edx, %ecx
585
+ ; X86-NEXT: movl %ecx, %edx
586
+ ; X86-NEXT: subl %eax, %edx
587
587
; X86-NEXT: subl %ecx, %eax
588
+ ; X86-NEXT: cmovll %edx, %eax
589
+ ; X86-NEXT: negl %eax
588
590
; X86-NEXT: retl
589
591
;
590
592
; X64-LABEL: abd_minmax_i32:
591
593
; X64: # %bb.0:
592
- ; X64-NEXT: cmpl %esi, %edi
593
- ; X64-NEXT: movl %esi, %eax
594
- ; X64-NEXT: cmovll %edi, %eax
595
- ; X64-NEXT: cmovgl %edi, %esi
594
+ ; X64-NEXT: movl %edi, %eax
596
595
; X64-NEXT: subl %esi, %eax
596
+ ; X64-NEXT: subl %edi, %esi
597
+ ; X64-NEXT: cmovgel %esi, %eax
598
+ ; X64-NEXT: negl %eax
597
599
; X64-NEXT: retq
598
600
%min = call i32 @llvm.smin.i32 (i32 %a , i32 %b )
599
601
%max = call i32 @llvm.smax.i32 (i32 %a , i32 %b )
@@ -634,11 +636,11 @@ define i64 @abd_minmax_i64(i64 %a, i64 %b) nounwind {
634
636
;
635
637
; X64-LABEL: abd_minmax_i64:
636
638
; X64: # %bb.0:
637
- ; X64-NEXT: cmpq %rsi, %rdi
638
- ; X64-NEXT: movq %rsi, %rax
639
- ; X64-NEXT: cmovlq %rdi, %rax
640
- ; X64-NEXT: cmovgq %rdi, %rsi
639
+ ; X64-NEXT: movq %rdi, %rax
641
640
; X64-NEXT: subq %rsi, %rax
641
+ ; X64-NEXT: subq %rdi, %rsi
642
+ ; X64-NEXT: cmovgeq %rsi, %rax
643
+ ; X64-NEXT: negq %rax
642
644
; X64-NEXT: retq
643
645
%min = call i64 @llvm.smin.i64 (i64 %a , i64 %b )
644
646
%max = call i64 @llvm.smax.i64 (i64 %a , i64 %b )
@@ -736,27 +738,25 @@ define i128 @abd_minmax_i128(i128 %a, i128 %b) nounwind {
736
738
define i8 @abd_cmp_i8 (i8 %a , i8 %b ) nounwind {
737
739
; X86-LABEL: abd_cmp_i8:
738
740
; X86: # %bb.0:
739
- ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
740
- ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
741
- ; X86-NEXT: movl %eax, %edx
742
- ; X86-NEXT: subb %cl, %dl
743
- ; X86-NEXT: negb %dl
744
- ; X86-NEXT: subb %cl, %al
745
- ; X86-NEXT: movzbl %al, %ecx
746
- ; X86-NEXT: movzbl %dl, %eax
747
- ; X86-NEXT: cmovlel %ecx, %eax
741
+ ; X86-NEXT: movsbl {{[0-9]+}}(%esp), %eax
742
+ ; X86-NEXT: movsbl {{[0-9]+}}(%esp), %ecx
743
+ ; X86-NEXT: subl %eax, %ecx
744
+ ; X86-NEXT: movl %ecx, %eax
745
+ ; X86-NEXT: negl %eax
746
+ ; X86-NEXT: cmovsl %ecx, %eax
747
+ ; X86-NEXT: negb %al
748
748
; X86-NEXT: # kill: def $al killed $al killed $eax
749
749
; X86-NEXT: retl
750
750
;
751
751
; X64-LABEL: abd_cmp_i8:
752
752
; X64: # %bb.0:
753
- ; X64-NEXT: movl %edi, %eax
754
- ; X64-NEXT: subb %sil, %al
753
+ ; X64-NEXT: movsbl %sil, %eax
754
+ ; X64-NEXT: movsbl %dil, %ecx
755
+ ; X64-NEXT: subl %eax, %ecx
756
+ ; X64-NEXT: movl %ecx, %eax
757
+ ; X64-NEXT: negl %eax
758
+ ; X64-NEXT: cmovsl %ecx, %eax
755
759
; X64-NEXT: negb %al
756
- ; X64-NEXT: subb %sil, %dil
757
- ; X64-NEXT: movzbl %dil, %ecx
758
- ; X64-NEXT: movzbl %al, %eax
759
- ; X64-NEXT: cmovlel %ecx, %eax
760
760
; X64-NEXT: # kill: def $al killed $al killed $eax
761
761
; X64-NEXT: retq
762
762
%cmp = icmp sle i8 %a , %b
@@ -769,27 +769,23 @@ define i8 @abd_cmp_i8(i8 %a, i8 %b) nounwind {
769
769
define i16 @abd_cmp_i16 (i16 %a , i16 %b ) nounwind {
770
770
; X86-LABEL: abd_cmp_i16:
771
771
; X86: # %bb.0:
772
- ; X86-NEXT: pushl %esi
773
- ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
774
- ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %edx
775
- ; X86-NEXT: movl %ecx, %esi
776
- ; X86-NEXT: subw %dx, %si
777
- ; X86-NEXT: movl %esi, %eax
772
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax
773
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
774
+ ; X86-NEXT: subl %eax, %ecx
775
+ ; X86-NEXT: movl %ecx, %eax
778
776
; X86-NEXT: negl %eax
779
- ; X86-NEXT: cmpw %dx, %cx
780
- ; X86-NEXT: cmovll %esi, %eax
777
+ ; X86-NEXT: cmovnsl %ecx, %eax
781
778
; X86-NEXT: # kill: def $ax killed $ax killed $eax
782
- ; X86-NEXT: popl %esi
783
779
; X86-NEXT: retl
784
780
;
785
781
; X64-LABEL: abd_cmp_i16:
786
782
; X64: # %bb.0:
787
- ; X64-NEXT: movl %edi, %ecx
788
- ; X64-NEXT: subw %si, %cx
783
+ ; X64-NEXT: movswl %si, %eax
784
+ ; X64-NEXT: movswl %di, %ecx
785
+ ; X64-NEXT: subl %eax, %ecx
789
786
; X64-NEXT: movl %ecx, %eax
790
787
; X64-NEXT: negl %eax
791
- ; X64-NEXT: cmpw %si, %di
792
- ; X64-NEXT: cmovll %ecx, %eax
788
+ ; X64-NEXT: cmovnsl %ecx, %eax
793
789
; X64-NEXT: # kill: def $ax killed $ax killed $eax
794
790
; X64-NEXT: retq
795
791
%cmp = icmp slt i16 %a , %b
@@ -804,20 +800,20 @@ define i32 @abd_cmp_i32(i32 %a, i32 %b) nounwind {
804
800
; X86: # %bb.0:
805
801
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
806
802
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
807
- ; X86-NEXT: movl %eax, %edx
808
- ; X86-NEXT: subl %ecx, %edx
809
- ; X86-NEXT: negl %edx
803
+ ; X86-NEXT: movl %ecx, %edx
804
+ ; X86-NEXT: subl %eax, %edx
810
805
; X86-NEXT: subl %ecx, %eax
811
- ; X86-NEXT: cmovgel %edx, %eax
806
+ ; X86-NEXT: cmovll %edx, %eax
807
+ ; X86-NEXT: negl %eax
812
808
; X86-NEXT: retl
813
809
;
814
810
; X64-LABEL: abd_cmp_i32:
815
811
; X64: # %bb.0:
816
812
; X64-NEXT: movl %edi, %eax
817
813
; X64-NEXT: subl %esi, %eax
814
+ ; X64-NEXT: subl %edi, %esi
815
+ ; X64-NEXT: cmovgel %esi, %eax
818
816
; X64-NEXT: negl %eax
819
- ; X64-NEXT: subl %esi, %edi
820
- ; X64-NEXT: cmovll %edi, %eax
821
817
; X64-NEXT: retq
822
818
%cmp = icmp sge i32 %a , %b
823
819
%ab = sub i32 %a , %b
@@ -853,9 +849,9 @@ define i64 @abd_cmp_i64(i64 %a, i64 %b) nounwind {
853
849
; X64: # %bb.0:
854
850
; X64-NEXT: movq %rdi, %rax
855
851
; X64-NEXT: subq %rsi, %rax
852
+ ; X64-NEXT: subq %rdi, %rsi
853
+ ; X64-NEXT: cmovgeq %rsi, %rax
856
854
; X64-NEXT: negq %rax
857
- ; X64-NEXT: subq %rsi, %rdi
858
- ; X64-NEXT: cmovlq %rdi, %rax
859
855
; X64-NEXT: retq
860
856
%cmp = icmp slt i64 %a , %b
861
857
%ab = sub i64 %a , %b
0 commit comments