ret i1 %cmp
}
+declare i11 @llvm.ctpop.i11(i11)
+declare i73 @llvm.ctpop.i73(i73)
+declare <2 x i13> @llvm.ctpop.v2i13(<2 x i13>)
+
+define i1 @ctpop_sgt_bitwidth(i11 %x) {
+; CHECK-LABEL: @ctpop_sgt_bitwidth(
+; CHECK-NEXT: [[POP:%.*]] = call i11 @llvm.ctpop.i11(i11 [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i11 [[POP]], 11
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %pop = call i11 @llvm.ctpop.i11(i11 %x)
+ %cmp = icmp sgt i11 %pop, 11
+ ret i1 %cmp
+}
+
+define i1 @ctpop_sle_minus1(i11 %x) {
+; CHECK-LABEL: @ctpop_sle_minus1(
+; CHECK-NEXT: [[POP:%.*]] = call i11 @llvm.ctpop.i11(i11 [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp sle i11 [[POP]], -1
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %pop = call i11 @llvm.ctpop.i11(i11 %x)
+ %cmp = icmp sle i11 %pop, -1
+ ret i1 %cmp
+}
+
+define i1 @ctpop_ugt_bitwidth(i73 %x) {
+; CHECK-LABEL: @ctpop_ugt_bitwidth(
+; CHECK-NEXT: [[POP:%.*]] = call i73 @llvm.ctpop.i73(i73 [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i73 [[POP]], 73
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %pop = call i73 @llvm.ctpop.i73(i73 %x)
+ %cmp = icmp ugt i73 %pop, 73
+ ret i1 %cmp
+}
+
+define i1 @ctpop_ugt_bitwidth_minus1(i73 %x) {
+; CHECK-LABEL: @ctpop_ugt_bitwidth_minus1(
+; CHECK-NEXT: [[POP:%.*]] = call i73 @llvm.ctpop.i73(i73 [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i73 [[POP]], 72
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %pop = call i73 @llvm.ctpop.i73(i73 %x)
+ %cmp = icmp ugt i73 %pop, 72
+ ret i1 %cmp
+}
+
+define <2 x i1> @ctpop_sgt_bitwidth_splat(<2 x i13> %x) {
+; CHECK-LABEL: @ctpop_sgt_bitwidth_splat(
+; CHECK-NEXT: [[POP:%.*]] = call <2 x i13> @llvm.ctpop.v2i13(<2 x i13> [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i13> [[POP]], <i13 13, i13 13>
+; CHECK-NEXT: ret <2 x i1> [[CMP]]
+;
+ %pop = call <2 x i13> @llvm.ctpop.v2i13(<2 x i13> %x)
+ %cmp = icmp sgt <2 x i13> %pop, <i13 13, i13 13>
+ ret <2 x i1> %cmp
+}
+
+define i1 @ctpop_ult_plus1_bitwidth(i11 %x) {
+; CHECK-LABEL: @ctpop_ult_plus1_bitwidth(
+; CHECK-NEXT: [[POP:%.*]] = call i11 @llvm.ctpop.i11(i11 [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i11 [[POP]], 12
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %pop = call i11 @llvm.ctpop.i11(i11 %x)
+ %cmp = icmp ult i11 %pop, 12
+ ret i1 %cmp
+}
+
+define i1 @ctpop_ne_big_bitwidth(i73 %x) {
+; CHECK-LABEL: @ctpop_ne_big_bitwidth(
+; CHECK-NEXT: [[POP:%.*]] = call i73 @llvm.ctpop.i73(i73 [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp ne i73 [[POP]], 75
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %pop = call i73 @llvm.ctpop.i73(i73 %x)
+ %cmp = icmp ne i73 %pop, 75
+ ret i1 %cmp
+}
+
+define <2 x i1> @ctpop_slt_bitwidth_plus1_splat(<2 x i13> %x) {
+; CHECK-LABEL: @ctpop_slt_bitwidth_plus1_splat(
+; CHECK-NEXT: [[POP:%.*]] = call <2 x i13> @llvm.ctpop.v2i13(<2 x i13> [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i13> [[POP]], <i13 14, i13 14>
+; CHECK-NEXT: ret <2 x i1> [[CMP]]
+;
+ %pop = call <2 x i13> @llvm.ctpop.v2i13(<2 x i13> %x)
+ %cmp = icmp slt <2 x i13> %pop, <i13 14, i13 14>
+ ret <2 x i1> %cmp
+}
+
+define <2 x i1> @ctpop_slt_bitwidth_splat(<2 x i13> %x) {
+; CHECK-LABEL: @ctpop_slt_bitwidth_splat(
+; CHECK-NEXT: [[POP:%.*]] = call <2 x i13> @llvm.ctpop.v2i13(<2 x i13> [[X:%.*]])
+; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i13> [[POP]], <i13 13, i13 13>
+; CHECK-NEXT: ret <2 x i1> [[CMP]]
+;
+ %pop = call <2 x i13> @llvm.ctpop.v2i13(<2 x i13> %x)
+ %cmp = icmp slt <2 x i13> %pop, <i13 13, i13 13>
+ ret <2 x i1> %cmp
+}
+
attributes #0 = { null_pointer_is_valid }