@@ -635,6 +635,27 @@ 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: not a0, a0
651+ ; RV64XTHEADBB-NEXT: th.ext a0, a0, 0, 0
652+ ; RV64XTHEADBB-NEXT: zext.b a0, a0
653+ ; RV64XTHEADBB-NEXT: ret
654+ %icmp = icmp sgt i32 %a , -1
655+ %sext = sext i1 %icmp to i8
656+ ret i8 %sext
657+ }
658+
638659define i64 @sexti1_i64 (i64 %a ) nounwind {
639660; RV64I-LABEL: sexti1_i64:
640661; RV64I: # %bb.0:
@@ -666,6 +687,27 @@ define i64 @sexti1_i64_2(i1 %a) nounwind {
666687 ret i64 %sext
667688}
668689
690+ ; Make sure we don't use not+th.ext
691+ define zeroext i8 @sexti1_i64_setcc (i64 %a ) {
692+ ; RV64I-LABEL: sexti1_i64_setcc:
693+ ; RV64I: # %bb.0:
694+ ; RV64I-NEXT: srli a0, a0, 63
695+ ; RV64I-NEXT: addi a0, a0, -1
696+ ; RV64I-NEXT: zext.b a0, a0
697+ ; RV64I-NEXT: ret
698+ ;
699+ ; RV64XTHEADBB-LABEL: sexti1_i64_setcc:
700+ ; RV64XTHEADBB: # %bb.0:
701+ ; RV64XTHEADBB-NEXT: srli a0, a0, 63
702+ ; RV64XTHEADBB-NEXT: not a0, a0
703+ ; RV64XTHEADBB-NEXT: th.ext a0, a0, 0, 0
704+ ; RV64XTHEADBB-NEXT: zext.b a0, a0
705+ ; RV64XTHEADBB-NEXT: ret
706+ %icmp = icmp sgt i64 %a , -1
707+ %sext = sext i1 %icmp to i8
708+ ret i8 %sext
709+ }
710+
669711define signext i32 @sextb_i32 (i32 signext %a ) nounwind {
670712; RV64I-LABEL: sextb_i32:
671713; RV64I: # %bb.0:
0 commit comments