@@ -193,8 +193,8 @@ define i1 @is_pow2_ctpop(i32 %x) {
193193}
194194
195195; tests from PR57328
196- define i1 @is_pow2_non_zero (i32 %x ) {
197- ; CHECK-LABEL: @is_pow2_non_zero (
196+ define i1 @is_pow2_non_zero_ult_2 (i32 %x ) {
197+ ; CHECK-LABEL: @is_pow2_non_zero_ult_2 (
198198; CHECK-NEXT: [[NOTZERO:%.*]] = icmp ne i32 [[X:%.*]], 0
199199; CHECK-NEXT: call void @llvm.assume(i1 [[NOTZERO]])
200200; CHECK-NEXT: [[T0:%.*]] = tail call i32 @llvm.ctpop.i32(i32 [[X]]), !range [[RNG0]]
@@ -208,6 +208,21 @@ define i1 @is_pow2_non_zero(i32 %x) {
208208 ret i1 %cmp
209209}
210210
211+ define i1 @is_pow2_non_zero_eq_1 (i32 %x ) {
212+ ; CHECK-LABEL: @is_pow2_non_zero_eq_1(
213+ ; CHECK-NEXT: [[NOTZERO:%.*]] = icmp ne i32 [[X:%.*]], 0
214+ ; CHECK-NEXT: call void @llvm.assume(i1 [[NOTZERO]])
215+ ; CHECK-NEXT: [[T0:%.*]] = tail call i32 @llvm.ctpop.i32(i32 [[X]]), !range [[RNG0]]
216+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[T0]], 1
217+ ; CHECK-NEXT: ret i1 [[CMP]]
218+ ;
219+ %notzero = icmp ne i32 %x , 0
220+ call void @llvm.assume (i1 %notzero )
221+ %t0 = tail call i32 @llvm.ctpop.i32 (i32 %x )
222+ %cmp = icmp eq i32 %t0 , 1
223+ ret i1 %cmp
224+ }
225+
211226define i1 @is_pow2_ctpop_logical (i32 %x ) {
212227; CHECK-LABEL: @is_pow2_ctpop_logical(
213228; CHECK-NEXT: [[T0:%.*]] = tail call i32 @llvm.ctpop.i32(i32 [[X:%.*]]), !range [[RNG0]]
0 commit comments