@@ -645,8 +645,8 @@ define i8 @sdiv8_constant_add_srai(i8 %a) nounwind {
645
645
; RV32IMZB-NEXT: add a0, a1, a0
646
646
; RV32IMZB-NEXT: andi a1, a0, 128
647
647
; RV32IMZB-NEXT: srli a1, a1, 7
648
- ; RV32IMZB-NEXT: sext.b a0, a0
649
- ; RV32IMZB-NEXT: srai a0, a0, 2
648
+ ; RV32IMZB-NEXT: slli a0, a0, 24
649
+ ; RV32IMZB-NEXT: srai a0, a0, 26
650
650
; RV32IMZB-NEXT: add a0, a0, a1
651
651
; RV32IMZB-NEXT: ret
652
652
;
@@ -674,8 +674,8 @@ define i8 @sdiv8_constant_add_srai(i8 %a) nounwind {
674
674
; RV64IMZB-NEXT: addw a0, a1, a0
675
675
; RV64IMZB-NEXT: andi a1, a0, 128
676
676
; RV64IMZB-NEXT: srli a1, a1, 7
677
- ; RV64IMZB-NEXT: sext.b a0, a0
678
- ; RV64IMZB-NEXT: srai a0, a0, 2
677
+ ; RV64IMZB-NEXT: slli a0, a0, 56
678
+ ; RV64IMZB-NEXT: srai a0, a0, 58
679
679
; RV64IMZB-NEXT: add a0, a0, a1
680
680
; RV64IMZB-NEXT: ret
681
681
%1 = sdiv i8 %a , 7
@@ -709,8 +709,8 @@ define i8 @sdiv8_constant_sub_srai(i8 %a) nounwind {
709
709
; RV32IMZB-NEXT: sub a0, a1, a0
710
710
; RV32IMZB-NEXT: andi a1, a0, 128
711
711
; RV32IMZB-NEXT: srli a1, a1, 7
712
- ; RV32IMZB-NEXT: sext.b a0, a0
713
- ; RV32IMZB-NEXT: srai a0, a0, 2
712
+ ; RV32IMZB-NEXT: slli a0, a0, 24
713
+ ; RV32IMZB-NEXT: srai a0, a0, 26
714
714
; RV32IMZB-NEXT: add a0, a0, a1
715
715
; RV32IMZB-NEXT: ret
716
716
;
@@ -738,8 +738,8 @@ define i8 @sdiv8_constant_sub_srai(i8 %a) nounwind {
738
738
; RV64IMZB-NEXT: subw a0, a1, a0
739
739
; RV64IMZB-NEXT: andi a1, a0, 128
740
740
; RV64IMZB-NEXT: srli a1, a1, 7
741
- ; RV64IMZB-NEXT: sext.b a0, a0
742
- ; RV64IMZB-NEXT: srai a0, a0, 2
741
+ ; RV64IMZB-NEXT: slli a0, a0, 56
742
+ ; RV64IMZB-NEXT: srai a0, a0, 58
743
743
; RV64IMZB-NEXT: add a0, a0, a1
744
744
; RV64IMZB-NEXT: ret
745
745
%1 = sdiv i8 %a , -7
@@ -846,8 +846,6 @@ define i16 @sdiv16_constant_srai(i16 %a) nounwind {
846
846
ret i16 %1
847
847
}
848
848
849
- ; FIXME: The Zbb test code has 1 more instruction after the mul because we don't
850
- ; share a slli.
851
849
define i16 @sdiv16_constant_add_srai (i16 %a ) nounwind {
852
850
; RV32IM-LABEL: sdiv16_constant_add_srai:
853
851
; RV32IM: # %bb.0:
@@ -872,10 +870,9 @@ define i16 @sdiv16_constant_add_srai(i16 %a) nounwind {
872
870
; RV32IMZB-NEXT: mul a1, a1, a2
873
871
; RV32IMZB-NEXT: srli a1, a1, 16
874
872
; RV32IMZB-NEXT: add a0, a1, a0
875
- ; RV32IMZB-NEXT: slli a1, a0, 16
876
- ; RV32IMZB-NEXT: srli a1, a1, 31
877
- ; RV32IMZB-NEXT: sext.h a0, a0
878
- ; RV32IMZB-NEXT: srai a0, a0, 3
873
+ ; RV32IMZB-NEXT: slli a0, a0, 16
874
+ ; RV32IMZB-NEXT: srli a1, a0, 31
875
+ ; RV32IMZB-NEXT: srai a0, a0, 19
879
876
; RV32IMZB-NEXT: add a0, a0, a1
880
877
; RV32IMZB-NEXT: ret
881
878
;
@@ -902,18 +899,15 @@ define i16 @sdiv16_constant_add_srai(i16 %a) nounwind {
902
899
; RV64IMZB-NEXT: mul a1, a1, a2
903
900
; RV64IMZB-NEXT: srli a1, a1, 16
904
901
; RV64IMZB-NEXT: addw a0, a1, a0
905
- ; RV64IMZB-NEXT: slli a1, a0, 48
906
- ; RV64IMZB-NEXT: srli a1, a1, 63
907
- ; RV64IMZB-NEXT: sext.h a0, a0
908
- ; RV64IMZB-NEXT: srai a0, a0, 3
902
+ ; RV64IMZB-NEXT: slli a0, a0, 48
903
+ ; RV64IMZB-NEXT: srli a1, a0, 63
904
+ ; RV64IMZB-NEXT: srai a0, a0, 51
909
905
; RV64IMZB-NEXT: add a0, a0, a1
910
906
; RV64IMZB-NEXT: ret
911
907
%1 = sdiv i16 %a , 15
912
908
ret i16 %1
913
909
}
914
910
915
- ; FIXME: The Zbb test code has 1 more instruction after the mul because we don't
916
- ; share a slli.
917
911
define i16 @sdiv16_constant_sub_srai (i16 %a ) nounwind {
918
912
; RV32IM-LABEL: sdiv16_constant_sub_srai:
919
913
; RV32IM: # %bb.0:
@@ -938,10 +932,9 @@ define i16 @sdiv16_constant_sub_srai(i16 %a) nounwind {
938
932
; RV32IMZB-NEXT: mul a1, a1, a2
939
933
; RV32IMZB-NEXT: srli a1, a1, 16
940
934
; RV32IMZB-NEXT: sub a0, a1, a0
941
- ; RV32IMZB-NEXT: slli a1, a0, 16
942
- ; RV32IMZB-NEXT: srli a1, a1, 31
943
- ; RV32IMZB-NEXT: sext.h a0, a0
944
- ; RV32IMZB-NEXT: srai a0, a0, 3
935
+ ; RV32IMZB-NEXT: slli a0, a0, 16
936
+ ; RV32IMZB-NEXT: srli a1, a0, 31
937
+ ; RV32IMZB-NEXT: srai a0, a0, 19
945
938
; RV32IMZB-NEXT: add a0, a0, a1
946
939
; RV32IMZB-NEXT: ret
947
940
;
@@ -968,10 +961,9 @@ define i16 @sdiv16_constant_sub_srai(i16 %a) nounwind {
968
961
; RV64IMZB-NEXT: mul a1, a1, a2
969
962
; RV64IMZB-NEXT: srli a1, a1, 16
970
963
; RV64IMZB-NEXT: subw a0, a1, a0
971
- ; RV64IMZB-NEXT: slli a1, a0, 48
972
- ; RV64IMZB-NEXT: srli a1, a1, 63
973
- ; RV64IMZB-NEXT: sext.h a0, a0
974
- ; RV64IMZB-NEXT: srai a0, a0, 3
964
+ ; RV64IMZB-NEXT: slli a0, a0, 48
965
+ ; RV64IMZB-NEXT: srli a1, a0, 63
966
+ ; RV64IMZB-NEXT: srai a0, a0, 51
975
967
; RV64IMZB-NEXT: add a0, a0, a1
976
968
; RV64IMZB-NEXT: ret
977
969
%1 = sdiv i16 %a , -15
0 commit comments