@@ -635,6 +635,26 @@ define signext i32 @sexti1_i32_2(i1 %a) nounwind {
635635 ret i32 %sext
636636}
637637
638+ ; Make sure we don't use not+th.ext
639+ define zeroext i8 @sexti1_i32_setcc (i32 signext %a ) {
640+ ; RV64I-LABEL: sexti1_i32_setcc:
641+ ; RV64I: # %bb.0:
642+ ; RV64I-NEXT: srli a0, a0, 63
643+ ; RV64I-NEXT: addi a0, a0, -1
644+ ; RV64I-NEXT: zext.b a0, a0
645+ ; RV64I-NEXT: ret
646+ ;
647+ ; RV64XTHEADBB-LABEL: sexti1_i32_setcc:
648+ ; RV64XTHEADBB: # %bb.0:
649+ ; RV64XTHEADBB-NEXT: srli a0, a0, 63
650+ ; RV64XTHEADBB-NEXT: addi a0, a0, -1
651+ ; RV64XTHEADBB-NEXT: zext.b a0, a0
652+ ; RV64XTHEADBB-NEXT: ret
653+ %icmp = icmp sgt i32 %a , -1
654+ %sext = sext i1 %icmp to i8
655+ ret i8 %sext
656+ }
657+
638658define i64 @sexti1_i64 (i64 %a ) nounwind {
639659; RV64I-LABEL: sexti1_i64:
640660; RV64I: # %bb.0:
@@ -666,6 +686,26 @@ define i64 @sexti1_i64_2(i1 %a) nounwind {
666686 ret i64 %sext
667687}
668688
689+ ; Make sure we don't use not+th.ext
690+ define zeroext i8 @sexti1_i64_setcc (i64 %a ) {
691+ ; RV64I-LABEL: sexti1_i64_setcc:
692+ ; RV64I: # %bb.0:
693+ ; RV64I-NEXT: srli a0, a0, 63
694+ ; RV64I-NEXT: addi a0, a0, -1
695+ ; RV64I-NEXT: zext.b a0, a0
696+ ; RV64I-NEXT: ret
697+ ;
698+ ; RV64XTHEADBB-LABEL: sexti1_i64_setcc:
699+ ; RV64XTHEADBB: # %bb.0:
700+ ; RV64XTHEADBB-NEXT: srli a0, a0, 63
701+ ; RV64XTHEADBB-NEXT: addi a0, a0, -1
702+ ; RV64XTHEADBB-NEXT: zext.b a0, a0
703+ ; RV64XTHEADBB-NEXT: ret
704+ %icmp = icmp sgt i64 %a , -1
705+ %sext = sext i1 %icmp to i8
706+ ret i8 %sext
707+ }
708+
669709define signext i32 @sextb_i32 (i32 signext %a ) nounwind {
670710; RV64I-LABEL: sextb_i32:
671711; RV64I: # %bb.0:
0 commit comments