@@ -169,8 +169,8 @@ define <2 x i32> @_parity_of_not_poison(<2 x i32> %x) {
169
169
170
170
define <2 x i32 > @_parity_of_not_poison2 (<2 x i32 > %x ) {
171
171
; CHECK-LABEL: @_parity_of_not_poison2(
172
- ; CHECK-NEXT: [[CNT :%.*]] = call range(i32 0, 33) <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[X:%.*]])
173
- ; CHECK-NEXT: [[R:%.*]] = and <2 x i32> [[CNT ]], <i32 1, i32 poison>
172
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call range(i32 0, 33) <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[X:%.*]])
173
+ ; CHECK-NEXT: [[R:%.*]] = and <2 x i32> [[TMP1 ]], <i32 1, i32 poison>
174
174
; CHECK-NEXT: ret <2 x i32> [[R]]
175
175
;
176
176
%neg = xor <2 x i32 > %x , <i32 -1 ,i32 -1 >
@@ -485,3 +485,21 @@ define i32 @select_ctpop_zero(i32 %x) {
485
485
%res = select i1 %cmp , i32 0 , i32 %ctpop
486
486
ret i32 %res
487
487
}
488
+
489
+ define i32 @ctpop_non_zero (i32 range(i32 1 , 255 ) %x ) {
490
+ ; CHECK-LABEL: @ctpop_non_zero(
491
+ ; CHECK-NEXT: [[CTPOP:%.*]] = call range(i32 0, 9) i32 @llvm.ctpop.i32(i32 [[X:%.*]])
492
+ ; CHECK-NEXT: ret i32 [[CTPOP]]
493
+ ;
494
+ %ctpop = call i32 @llvm.ctpop.i32 (i32 %x )
495
+ ret i32 %ctpop
496
+ }
497
+
498
+ define i32 @ctpop_non_zero_with_existing_range_attr (i32 range(i32 1 , 255 ) %x ) {
499
+ ; CHECK-LABEL: @ctpop_non_zero_with_existing_range_attr(
500
+ ; CHECK-NEXT: [[CTPOP:%.*]] = call range(i32 0, 9) i32 @llvm.ctpop.i32(i32 [[X:%.*]])
501
+ ; CHECK-NEXT: ret i32 [[CTPOP]]
502
+ ;
503
+ %ctpop = call range(i32 0 , 9 ) i32 @llvm.ctpop.i32 (i32 %x )
504
+ ret i32 %ctpop
505
+ }
0 commit comments