@@ -750,3 +750,90 @@ define i64 @dec_of_zexted_cmp_i64(i64 %x) {
750750 %dec = sub i64 %zext , 1
751751 ret i64 %dec
752752}
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