@@ -309,29 +309,27 @@ define i32 @fcvt_wu_d_sat(double %a) nounwind {
309
309
; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill
310
310
; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill
311
311
; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill
312
- ; RV32I-NEXT: mv s2 , a1
313
- ; RV32I-NEXT: mv s3 , a0
312
+ ; RV32I-NEXT: mv s0 , a1
313
+ ; RV32I-NEXT: mv s1 , a0
314
314
; RV32I-NEXT: lui a0, 270080
315
315
; RV32I-NEXT: addi a3, a0, -1
316
316
; RV32I-NEXT: lui a2, 1048064
317
- ; RV32I-NEXT: mv a0, s3
317
+ ; RV32I-NEXT: mv a0, s1
318
318
; RV32I-NEXT: call __gtdf2@plt
319
319
; RV32I-NEXT: sgtz a0, a0
320
- ; RV32I-NEXT: neg s0, a0
321
- ; RV32I-NEXT: mv a0, s3
322
- ; RV32I-NEXT: mv a1, s2
323
- ; RV32I-NEXT: call __fixunsdfsi@plt
324
- ; RV32I-NEXT: mv s1, a0
325
- ; RV32I-NEXT: mv a0, s3
326
- ; RV32I-NEXT: mv a1, s2
320
+ ; RV32I-NEXT: neg s2, a0
321
+ ; RV32I-NEXT: mv a0, s1
322
+ ; RV32I-NEXT: mv a1, s0
327
323
; RV32I-NEXT: li a2, 0
328
324
; RV32I-NEXT: li a3, 0
329
325
; RV32I-NEXT: call __gedf2@plt
330
- ; RV32I-NEXT: bltz a0, .LBB6_2
331
- ; RV32I-NEXT: # %bb.1: # %start
332
- ; RV32I-NEXT: or s0, s0, s1
333
- ; RV32I-NEXT: .LBB6_2: # %start
334
- ; RV32I-NEXT: mv a0, s0
326
+ ; RV32I-NEXT: slti a0, a0, 0
327
+ ; RV32I-NEXT: addi s3, a0, -1
328
+ ; RV32I-NEXT: mv a0, s1
329
+ ; RV32I-NEXT: mv a1, s0
330
+ ; RV32I-NEXT: call __fixunsdfsi@plt
331
+ ; RV32I-NEXT: and a0, s3, a0
332
+ ; RV32I-NEXT: or a0, s2, a0
335
333
; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
336
334
; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
337
335
; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
@@ -570,11 +568,9 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
570
568
; RV32IFD-NEXT: seqz a3, a3
571
569
; RV32IFD-NEXT: addi a3, a3, -1
572
570
; RV32IFD-NEXT: and a1, a3, a1
573
- ; RV32IFD-NEXT: seqz a4, s0
574
- ; RV32IFD-NEXT: addi a4, a4, -1
571
+ ; RV32IFD-NEXT: neg a2, a2
572
+ ; RV32IFD-NEXT: neg a4, s0
575
573
; RV32IFD-NEXT: and a0, a4, a0
576
- ; RV32IFD-NEXT: seqz a2, a2
577
- ; RV32IFD-NEXT: addi a2, a2, -1
578
574
; RV32IFD-NEXT: or a0, a2, a0
579
575
; RV32IFD-NEXT: and a0, a3, a0
580
576
; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
@@ -594,25 +590,24 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
594
590
;
595
591
; RV32I-LABEL: fcvt_l_d_sat:
596
592
; RV32I: # %bb.0: # %start
597
- ; RV32I-NEXT: addi sp, sp, -48
598
- ; RV32I-NEXT: sw ra, 44(sp) # 4-byte Folded Spill
599
- ; RV32I-NEXT: sw s0, 40(sp) # 4-byte Folded Spill
600
- ; RV32I-NEXT: sw s1, 36(sp) # 4-byte Folded Spill
601
- ; RV32I-NEXT: sw s2, 32(sp) # 4-byte Folded Spill
602
- ; RV32I-NEXT: sw s3, 28(sp) # 4-byte Folded Spill
603
- ; RV32I-NEXT: sw s4, 24(sp) # 4-byte Folded Spill
604
- ; RV32I-NEXT: sw s5, 20(sp) # 4-byte Folded Spill
605
- ; RV32I-NEXT: sw s6, 16(sp) # 4-byte Folded Spill
606
- ; RV32I-NEXT: sw s7, 12(sp) # 4-byte Folded Spill
593
+ ; RV32I-NEXT: addi sp, sp, -32
594
+ ; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
595
+ ; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill
596
+ ; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill
597
+ ; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill
598
+ ; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill
599
+ ; RV32I-NEXT: sw s4, 8(sp) # 4-byte Folded Spill
600
+ ; RV32I-NEXT: sw s5, 4(sp) # 4-byte Folded Spill
601
+ ; RV32I-NEXT: sw s6, 0(sp) # 4-byte Folded Spill
607
602
; RV32I-NEXT: mv s0, a1
608
603
; RV32I-NEXT: mv s1, a0
609
604
; RV32I-NEXT: lui a0, 278016
610
- ; RV32I-NEXT: addi s3 , a0, -1
605
+ ; RV32I-NEXT: addi s2 , a0, -1
611
606
; RV32I-NEXT: li a2, -1
612
607
; RV32I-NEXT: mv a0, s1
613
- ; RV32I-NEXT: mv a3, s3
608
+ ; RV32I-NEXT: mv a3, s2
614
609
; RV32I-NEXT: call __gtdf2@plt
615
- ; RV32I-NEXT: mv s7 , a0
610
+ ; RV32I-NEXT: mv s4 , a0
616
611
; RV32I-NEXT: lui a3, 802304
617
612
; RV32I-NEXT: mv a0, s1
618
613
; RV32I-NEXT: mv a1, s0
@@ -622,62 +617,59 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
622
617
; RV32I-NEXT: mv a0, s1
623
618
; RV32I-NEXT: mv a1, s0
624
619
; RV32I-NEXT: call __fixdfdi@plt
625
- ; RV32I-NEXT: mv s6, a0
626
- ; RV32I-NEXT: mv s4, a1
620
+ ; RV32I-NEXT: mv s3, a0
621
+ ; RV32I-NEXT: lui a0, 524288
622
+ ; RV32I-NEXT: lui s6, 524288
623
+ ; RV32I-NEXT: bltz s5, .LBB12_2
624
+ ; RV32I-NEXT: # %bb.1: # %start
625
+ ; RV32I-NEXT: mv s6, a1
626
+ ; RV32I-NEXT: .LBB12_2: # %start
627
+ ; RV32I-NEXT: blez s4, .LBB12_4
628
+ ; RV32I-NEXT: # %bb.3:
629
+ ; RV32I-NEXT: addi s6, a0, -1
630
+ ; RV32I-NEXT: .LBB12_4: # %start
627
631
; RV32I-NEXT: mv a0, s1
628
632
; RV32I-NEXT: mv a1, s0
629
633
; RV32I-NEXT: mv a2, s1
630
634
; RV32I-NEXT: mv a3, s0
631
635
; RV32I-NEXT: call __unorddf2@plt
632
636
; RV32I-NEXT: snez a0, a0
633
- ; RV32I-NEXT: addi s2, a0, -1
634
- ; RV32I-NEXT: bgtz s7, .LBB12_2
635
- ; RV32I-NEXT: # %bb.1: # %start
636
- ; RV32I-NEXT: slti a0, s5, 0
637
637
; RV32I-NEXT: addi a0, a0, -1
638
- ; RV32I-NEXT: and a0, a0, s6
639
- ; RV32I-NEXT: and s2, s2, a0
640
- ; RV32I-NEXT: .LBB12_2: # %start
641
- ; RV32I-NEXT: li a2, -1
642
- ; RV32I-NEXT: mv a0, s1
643
- ; RV32I-NEXT: mv a1, s0
644
- ; RV32I-NEXT: mv a3, s3
645
- ; RV32I-NEXT: call __gtdf2@plt
646
- ; RV32I-NEXT: mv s3, a0
638
+ ; RV32I-NEXT: and s4, a0, s6
647
639
; RV32I-NEXT: lui a3, 802304
648
640
; RV32I-NEXT: mv a0, s1
649
641
; RV32I-NEXT: mv a1, s0
650
642
; RV32I-NEXT: li a2, 0
651
643
; RV32I-NEXT: call __gedf2@plt
652
- ; RV32I-NEXT: lui a1, 524288
653
- ; RV32I-NEXT: lui s5, 524288
654
- ; RV32I-NEXT: bltz a0, .LBB12_4
655
- ; RV32I-NEXT: # %bb.3: # %start
656
- ; RV32I-NEXT: mv s5, s4
657
- ; RV32I-NEXT: .LBB12_4: # %start
658
- ; RV32I-NEXT: blez s3, .LBB12_6
659
- ; RV32I-NEXT: # %bb.5:
660
- ; RV32I-NEXT: addi s5, a1, -1
661
- ; RV32I-NEXT: .LBB12_6: # %start
644
+ ; RV32I-NEXT: slti a0, a0, 0
645
+ ; RV32I-NEXT: addi a0, a0, -1
646
+ ; RV32I-NEXT: and s3, a0, s3
647
+ ; RV32I-NEXT: li a2, -1
648
+ ; RV32I-NEXT: mv a0, s1
649
+ ; RV32I-NEXT: mv a1, s0
650
+ ; RV32I-NEXT: mv a3, s2
651
+ ; RV32I-NEXT: call __gtdf2@plt
652
+ ; RV32I-NEXT: sgtz a0, a0
653
+ ; RV32I-NEXT: neg a0, a0
654
+ ; RV32I-NEXT: or s2, a0, s3
662
655
; RV32I-NEXT: mv a0, s1
663
656
; RV32I-NEXT: mv a1, s0
664
657
; RV32I-NEXT: mv a2, s1
665
658
; RV32I-NEXT: mv a3, s0
666
659
; RV32I-NEXT: call __unorddf2@plt
667
660
; RV32I-NEXT: snez a0, a0
668
661
; RV32I-NEXT: addi a0, a0, -1
669
- ; RV32I-NEXT: and a1, a0, s5
670
- ; RV32I-NEXT: mv a0, s2
671
- ; RV32I-NEXT: lw ra, 44(sp) # 4-byte Folded Reload
672
- ; RV32I-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
673
- ; RV32I-NEXT: lw s1, 36(sp) # 4-byte Folded Reload
674
- ; RV32I-NEXT: lw s2, 32(sp) # 4-byte Folded Reload
675
- ; RV32I-NEXT: lw s3, 28(sp) # 4-byte Folded Reload
676
- ; RV32I-NEXT: lw s4, 24(sp) # 4-byte Folded Reload
677
- ; RV32I-NEXT: lw s5, 20(sp) # 4-byte Folded Reload
678
- ; RV32I-NEXT: lw s6, 16(sp) # 4-byte Folded Reload
679
- ; RV32I-NEXT: lw s7, 12(sp) # 4-byte Folded Reload
680
- ; RV32I-NEXT: addi sp, sp, 48
662
+ ; RV32I-NEXT: and a0, a0, s2
663
+ ; RV32I-NEXT: mv a1, s4
664
+ ; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
665
+ ; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
666
+ ; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
667
+ ; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload
668
+ ; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload
669
+ ; RV32I-NEXT: lw s4, 8(sp) # 4-byte Folded Reload
670
+ ; RV32I-NEXT: lw s5, 4(sp) # 4-byte Folded Reload
671
+ ; RV32I-NEXT: lw s6, 0(sp) # 4-byte Folded Reload
672
+ ; RV32I-NEXT: addi sp, sp, 32
681
673
; RV32I-NEXT: ret
682
674
;
683
675
; RV64I-LABEL: fcvt_l_d_sat:
@@ -778,15 +770,13 @@ define i64 @fcvt_lu_d_sat(double %a) nounwind {
778
770
; RV32IFD-NEXT: fmv.d fs0, fa0
779
771
; RV32IFD-NEXT: fcvt.d.w ft0, zero
780
772
; RV32IFD-NEXT: fle.d a0, ft0, fa0
781
- ; RV32IFD-NEXT: seqz a0, a0
782
- ; RV32IFD-NEXT: addi s0, a0, -1
773
+ ; RV32IFD-NEXT: neg s0, a0
783
774
; RV32IFD-NEXT: call __fixunsdfdi@plt
784
775
; RV32IFD-NEXT: lui a2, %hi(.LCPI14_0)
785
776
; RV32IFD-NEXT: fld ft0, %lo(.LCPI14_0)(a2)
786
777
; RV32IFD-NEXT: and a0, s0, a0
787
778
; RV32IFD-NEXT: flt.d a2, ft0, fs0
788
- ; RV32IFD-NEXT: seqz a2, a2
789
- ; RV32IFD-NEXT: addi a2, a2, -1
779
+ ; RV32IFD-NEXT: neg a2, a2
790
780
; RV32IFD-NEXT: or a0, a2, a0
791
781
; RV32IFD-NEXT: and a1, s0, a1
792
782
; RV32IFD-NEXT: or a1, a2, a1
@@ -816,47 +806,45 @@ define i64 @fcvt_lu_d_sat(double %a) nounwind {
816
806
; RV32I-NEXT: sw s4, 8(sp) # 4-byte Folded Spill
817
807
; RV32I-NEXT: sw s5, 4(sp) # 4-byte Folded Spill
818
808
; RV32I-NEXT: mv s0, a1
819
- ; RV32I-NEXT: mv s2 , a0
809
+ ; RV32I-NEXT: mv s1 , a0
820
810
; RV32I-NEXT: lui a0, 278272
821
- ; RV32I-NEXT: addi s3 , a0, -1
811
+ ; RV32I-NEXT: addi s2 , a0, -1
822
812
; RV32I-NEXT: li a2, -1
823
- ; RV32I-NEXT: mv a0, s2
824
- ; RV32I-NEXT: mv a3, s3
813
+ ; RV32I-NEXT: mv a0, s1
814
+ ; RV32I-NEXT: mv a3, s2
825
815
; RV32I-NEXT: call __gtdf2@plt
826
816
; RV32I-NEXT: sgtz a0, a0
827
- ; RV32I-NEXT: neg s1, a0
828
- ; RV32I-NEXT: mv a0, s2
829
- ; RV32I-NEXT: mv a1, s0
830
- ; RV32I-NEXT: call __fixunsdfdi@plt
831
- ; RV32I-NEXT: mv s5, a0
832
- ; RV32I-NEXT: mv s4, a1
833
- ; RV32I-NEXT: mv a0, s2
817
+ ; RV32I-NEXT: neg s4, a0
818
+ ; RV32I-NEXT: mv a0, s1
834
819
; RV32I-NEXT: mv a1, s0
835
820
; RV32I-NEXT: li a2, 0
836
821
; RV32I-NEXT: li a3, 0
837
822
; RV32I-NEXT: call __gedf2@plt
838
- ; RV32I-NEXT: bltz a0, .LBB14_2
839
- ; RV32I-NEXT: # %bb.1: # %start
840
- ; RV32I-NEXT: or s1, s1, s5
841
- ; RV32I-NEXT: .LBB14_2: # %start
823
+ ; RV32I-NEXT: slti a0, a0, 0
824
+ ; RV32I-NEXT: addi s5, a0, -1
825
+ ; RV32I-NEXT: mv a0, s1
826
+ ; RV32I-NEXT: mv a1, s0
827
+ ; RV32I-NEXT: call __fixunsdfdi@plt
828
+ ; RV32I-NEXT: mv s3, a1
829
+ ; RV32I-NEXT: and a0, s5, a0
830
+ ; RV32I-NEXT: or s4, s4, a0
842
831
; RV32I-NEXT: li a2, -1
843
- ; RV32I-NEXT: mv a0, s2
832
+ ; RV32I-NEXT: mv a0, s1
844
833
; RV32I-NEXT: mv a1, s0
845
- ; RV32I-NEXT: mv a3, s3
834
+ ; RV32I-NEXT: mv a3, s2
846
835
; RV32I-NEXT: call __gtdf2@plt
847
836
; RV32I-NEXT: sgtz a0, a0
848
- ; RV32I-NEXT: neg s3 , a0
849
- ; RV32I-NEXT: mv a0, s2
837
+ ; RV32I-NEXT: neg s2 , a0
838
+ ; RV32I-NEXT: mv a0, s1
850
839
; RV32I-NEXT: mv a1, s0
851
840
; RV32I-NEXT: li a2, 0
852
841
; RV32I-NEXT: li a3, 0
853
842
; RV32I-NEXT: call __gedf2@plt
854
- ; RV32I-NEXT: bltz a0, .LBB14_4
855
- ; RV32I-NEXT: # %bb.3: # %start
856
- ; RV32I-NEXT: or s3, s3, s4
857
- ; RV32I-NEXT: .LBB14_4: # %start
858
- ; RV32I-NEXT: mv a0, s1
859
- ; RV32I-NEXT: mv a1, s3
843
+ ; RV32I-NEXT: slti a0, a0, 0
844
+ ; RV32I-NEXT: addi a0, a0, -1
845
+ ; RV32I-NEXT: and a0, a0, s3
846
+ ; RV32I-NEXT: or a1, s2, a0
847
+ ; RV32I-NEXT: mv a0, s4
860
848
; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
861
849
; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
862
850
; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
@@ -873,30 +861,25 @@ define i64 @fcvt_lu_d_sat(double %a) nounwind {
873
861
; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
874
862
; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
875
863
; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
876
- ; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
877
- ; RV64I-NEXT: mv s2, a0
864
+ ; RV64I-NEXT: mv s0, a0
865
+ ; RV64I-NEXT: li a1, 0
866
+ ; RV64I-NEXT: call __gedf2@plt
867
+ ; RV64I-NEXT: slti a0, a0, 0
868
+ ; RV64I-NEXT: addi s1, a0, -1
869
+ ; RV64I-NEXT: mv a0, s0
870
+ ; RV64I-NEXT: call __fixunsdfdi@plt
871
+ ; RV64I-NEXT: and s1, s1, a0
878
872
; RV64I-NEXT: li a0, 1087
879
873
; RV64I-NEXT: slli a0, a0, 52
880
874
; RV64I-NEXT: addi a1, a0, -1
881
- ; RV64I-NEXT: mv a0, s2
875
+ ; RV64I-NEXT: mv a0, s0
882
876
; RV64I-NEXT: call __gtdf2@plt
883
877
; RV64I-NEXT: sgtz a0, a0
884
- ; RV64I-NEXT: neg s0, a0
885
- ; RV64I-NEXT: mv a0, s2
886
- ; RV64I-NEXT: call __fixunsdfdi@plt
887
- ; RV64I-NEXT: mv s1, a0
888
- ; RV64I-NEXT: mv a0, s2
889
- ; RV64I-NEXT: li a1, 0
890
- ; RV64I-NEXT: call __gedf2@plt
891
- ; RV64I-NEXT: bltz a0, .LBB14_2
892
- ; RV64I-NEXT: # %bb.1: # %start
893
- ; RV64I-NEXT: or s0, s0, s1
894
- ; RV64I-NEXT: .LBB14_2: # %start
895
- ; RV64I-NEXT: mv a0, s0
878
+ ; RV64I-NEXT: neg a0, a0
879
+ ; RV64I-NEXT: or a0, a0, s1
896
880
; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
897
881
; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
898
882
; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
899
- ; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
900
883
; RV64I-NEXT: addi sp, sp, 32
901
884
; RV64I-NEXT: ret
902
885
start:
@@ -1916,29 +1899,27 @@ define zeroext i32 @fcvt_wu_d_sat_zext(double %a) nounwind {
1916
1899
; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill
1917
1900
; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill
1918
1901
; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill
1919
- ; RV32I-NEXT: mv s2 , a1
1920
- ; RV32I-NEXT: mv s3 , a0
1902
+ ; RV32I-NEXT: mv s0 , a1
1903
+ ; RV32I-NEXT: mv s1 , a0
1921
1904
; RV32I-NEXT: lui a0, 270080
1922
1905
; RV32I-NEXT: addi a3, a0, -1
1923
1906
; RV32I-NEXT: lui a2, 1048064
1924
- ; RV32I-NEXT: mv a0, s3
1907
+ ; RV32I-NEXT: mv a0, s1
1925
1908
; RV32I-NEXT: call __gtdf2@plt
1926
1909
; RV32I-NEXT: sgtz a0, a0
1927
- ; RV32I-NEXT: neg s0, a0
1928
- ; RV32I-NEXT: mv a0, s3
1929
- ; RV32I-NEXT: mv a1, s2
1930
- ; RV32I-NEXT: call __fixunsdfsi@plt
1931
- ; RV32I-NEXT: mv s1, a0
1932
- ; RV32I-NEXT: mv a0, s3
1933
- ; RV32I-NEXT: mv a1, s2
1910
+ ; RV32I-NEXT: neg s2, a0
1911
+ ; RV32I-NEXT: mv a0, s1
1912
+ ; RV32I-NEXT: mv a1, s0
1934
1913
; RV32I-NEXT: li a2, 0
1935
1914
; RV32I-NEXT: li a3, 0
1936
1915
; RV32I-NEXT: call __gedf2@plt
1937
- ; RV32I-NEXT: bltz a0, .LBB33_2
1938
- ; RV32I-NEXT: # %bb.1: # %start
1939
- ; RV32I-NEXT: or s0, s0, s1
1940
- ; RV32I-NEXT: .LBB33_2: # %start
1941
- ; RV32I-NEXT: mv a0, s0
1916
+ ; RV32I-NEXT: slti a0, a0, 0
1917
+ ; RV32I-NEXT: addi s3, a0, -1
1918
+ ; RV32I-NEXT: mv a0, s1
1919
+ ; RV32I-NEXT: mv a1, s0
1920
+ ; RV32I-NEXT: call __fixunsdfsi@plt
1921
+ ; RV32I-NEXT: and a0, s3, a0
1922
+ ; RV32I-NEXT: or a0, s2, a0
1942
1923
; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
1943
1924
; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
1944
1925
; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
0 commit comments