@@ -750,3 +750,90 @@ define i64 @dec_of_zexted_cmp_i64(i64 %x) {
750
750
%dec = sub i64 %zext , 1
751
751
ret i64 %dec
752
752
}
753
+
754
+ define void @zext_nneg_dominating_icmp_i64 (i16 signext %0 ) {
755
+ ; RV32I-LABEL: zext_nneg_dominating_icmp_i64:
756
+ ; RV32I: # %bb.0:
757
+ ; RV32I-NEXT: bltz a0, .LBB46_2
758
+ ; RV32I-NEXT: # %bb.1:
759
+ ; RV32I-NEXT: slli a0, a0, 16
760
+ ; RV32I-NEXT: srli a0, a0, 16
761
+ ; RV32I-NEXT: li a1, 0
762
+ ; RV32I-NEXT: tail bar_i64
763
+ ; RV32I-NEXT: .LBB46_2:
764
+ ; RV32I-NEXT: ret
765
+ ;
766
+ ; RV64I-LABEL: zext_nneg_dominating_icmp_i64:
767
+ ; RV64I: # %bb.0:
768
+ ; RV64I-NEXT: bltz a0, .LBB46_2
769
+ ; RV64I-NEXT: # %bb.1:
770
+ ; RV64I-NEXT: slli a0, a0, 48
771
+ ; RV64I-NEXT: srli a0, a0, 48
772
+ ; RV64I-NEXT: tail bar_i64
773
+ ; RV64I-NEXT: .LBB46_2:
774
+ ; RV64I-NEXT: ret
775
+ ;
776
+ ; RV64ZBB-LABEL: zext_nneg_dominating_icmp_i64:
777
+ ; RV64ZBB: # %bb.0:
778
+ ; RV64ZBB-NEXT: bltz a0, .LBB46_2
779
+ ; RV64ZBB-NEXT: # %bb.1:
780
+ ; RV64ZBB-NEXT: zext.h a0, a0
781
+ ; RV64ZBB-NEXT: tail bar_i64
782
+ ; RV64ZBB-NEXT: .LBB46_2:
783
+ ; RV64ZBB-NEXT: ret
784
+ %2 = icmp sgt i16 %0 , -1
785
+ br i1 %2 , label %3 , label %5
786
+
787
+ 3 :
788
+ %4 = zext nneg i16 %0 to i64
789
+ tail call void @bar_i64 (i64 %4 )
790
+ br label %5
791
+
792
+ 5 :
793
+ ret void
794
+ }
795
+
796
+ declare void @bar_i64 (i64 )
797
+
798
+ define void @zext_nneg_dominating_icmp_i32 (i16 signext %0 ) {
799
+ ; RV32I-LABEL: zext_nneg_dominating_icmp_i32:
800
+ ; RV32I: # %bb.0:
801
+ ; RV32I-NEXT: bltz a0, .LBB47_2
802
+ ; RV32I-NEXT: # %bb.1:
803
+ ; RV32I-NEXT: slli a0, a0, 16
804
+ ; RV32I-NEXT: srli a0, a0, 16
805
+ ; RV32I-NEXT: tail bar_i32
806
+ ; RV32I-NEXT: .LBB47_2:
807
+ ; RV32I-NEXT: ret
808
+ ;
809
+ ; RV64I-LABEL: zext_nneg_dominating_icmp_i32:
810
+ ; RV64I: # %bb.0:
811
+ ; RV64I-NEXT: bltz a0, .LBB47_2
812
+ ; RV64I-NEXT: # %bb.1:
813
+ ; RV64I-NEXT: slli a0, a0, 48
814
+ ; RV64I-NEXT: srli a0, a0, 48
815
+ ; RV64I-NEXT: tail bar_i32
816
+ ; RV64I-NEXT: .LBB47_2:
817
+ ; RV64I-NEXT: ret
818
+ ;
819
+ ; RV64ZBB-LABEL: zext_nneg_dominating_icmp_i32:
820
+ ; RV64ZBB: # %bb.0:
821
+ ; RV64ZBB-NEXT: bltz a0, .LBB47_2
822
+ ; RV64ZBB-NEXT: # %bb.1:
823
+ ; RV64ZBB-NEXT: zext.h a0, a0
824
+ ; RV64ZBB-NEXT: tail bar_i32
825
+ ; RV64ZBB-NEXT: .LBB47_2:
826
+ ; RV64ZBB-NEXT: ret
827
+ %2 = icmp sgt i16 %0 , -1
828
+ br i1 %2 , label %3 , label %5
829
+
830
+ 3 :
831
+ %4 = zext nneg i16 %0 to i32
832
+ tail call void @bar_i32 (i32 %4 )
833
+ br label %5
834
+
835
+ 5 :
836
+ ret void
837
+ }
838
+
839
+ declare void @bar_i32 (i32 )
0 commit comments