@@ -1622,17 +1622,16 @@ entry:
16221622define i1 @ctpop32_eq_one_nonzero (i32 %x ) {
16231623; RV64I-LABEL: ctpop32_eq_one_nonzero:
16241624; RV64I: # %bb.0: # %entry
1625- ; RV64I-NEXT: addiw a1, a0, -1
1626- ; RV64I-NEXT: xor a0, a0, a1
1625+ ; RV64I-NEXT: addi a1, a0, -1
1626+ ; RV64I-NEXT: and a0, a0, a1
16271627; RV64I-NEXT: sext.w a0, a0
1628- ; RV64I-NEXT: sltu a0, a1 , a0
1628+ ; RV64I-NEXT: seqz a0, a0
16291629; RV64I-NEXT: ret
16301630;
16311631; RV64ZBB-LABEL: ctpop32_eq_one_nonzero:
16321632; RV64ZBB: # %bb.0: # %entry
16331633; RV64ZBB-NEXT: cpopw a0, a0
1634- ; RV64ZBB-NEXT: addi a0, a0, -1
1635- ; RV64ZBB-NEXT: seqz a0, a0
1634+ ; RV64ZBB-NEXT: sltiu a0, a0, 2
16361635; RV64ZBB-NEXT: ret
16371636entry:
16381637 %popcnt = call range(i32 1 , 33 ) i32 @llvm.ctpop.i32 (i32 %x )
@@ -1643,18 +1642,17 @@ entry:
16431642define i1 @ctpop32_ne_one_nonzero (i32 %x ) {
16441643; RV64I-LABEL: ctpop32_ne_one_nonzero:
16451644; RV64I: # %bb.0: # %entry
1646- ; RV64I-NEXT: addiw a1, a0, -1
1647- ; RV64I-NEXT: xor a0, a0, a1
1645+ ; RV64I-NEXT: addi a1, a0, -1
1646+ ; RV64I-NEXT: and a0, a0, a1
16481647; RV64I-NEXT: sext.w a0, a0
1649- ; RV64I-NEXT: sltu a0, a1, a0
1650- ; RV64I-NEXT: xori a0, a0, 1
1648+ ; RV64I-NEXT: snez a0, a0
16511649; RV64I-NEXT: ret
16521650;
16531651; RV64ZBB-LABEL: ctpop32_ne_one_nonzero:
16541652; RV64ZBB: # %bb.0: # %entry
16551653; RV64ZBB-NEXT: cpopw a0, a0
1656- ; RV64ZBB-NEXT: addi a0, a0, -1
1657- ; RV64ZBB-NEXT: snez a0, a0
1654+ ; RV64ZBB-NEXT: sltiu a0, a0, 2
1655+ ; RV64ZBB-NEXT: xori a0, a0, 1
16581656; RV64ZBB-NEXT: ret
16591657entry:
16601658 %popcnt = tail call range(i32 1 , 33 ) i32 @llvm.ctpop.i32 (i32 %x )
@@ -1666,15 +1664,14 @@ define i1 @ctpop64_eq_one_nonzero(i64 %x) {
16661664; RV64I-LABEL: ctpop64_eq_one_nonzero:
16671665; RV64I: # %bb.0: # %entry
16681666; RV64I-NEXT: addi a1, a0, -1
1669- ; RV64I-NEXT: xor a0, a0, a1
1670- ; RV64I-NEXT: sltu a0, a1 , a0
1667+ ; RV64I-NEXT: and a0, a0, a1
1668+ ; RV64I-NEXT: seqz a0, a0
16711669; RV64I-NEXT: ret
16721670;
16731671; RV64ZBB-LABEL: ctpop64_eq_one_nonzero:
16741672; RV64ZBB: # %bb.0: # %entry
16751673; RV64ZBB-NEXT: cpop a0, a0
1676- ; RV64ZBB-NEXT: addi a0, a0, -1
1677- ; RV64ZBB-NEXT: seqz a0, a0
1674+ ; RV64ZBB-NEXT: sltiu a0, a0, 2
16781675; RV64ZBB-NEXT: ret
16791676entry:
16801677 %popcnt = call range(i64 1 , 65 ) i64 @llvm.ctpop.i64 (i64 %x )
0 commit comments