%d = bitcast <64 x i1> %c to i64
ret i64 %d
}
+
+define <16 x i1> @PR52500(<16 x i1> %msk, i32 %in) {
+; AVX512F-LABEL: PR52500:
+; AVX512F: # %bb.0:
+; AVX512F-NEXT: vpmovsxbd %xmm0, %zmm0
+; AVX512F-NEXT: vpslld $31, %zmm0, %zmm0
+; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k1
+; AVX512F-NEXT: vmovd %edi, %xmm0
+; AVX512F-NEXT: movl $789, %eax # imm = 0x315
+; AVX512F-NEXT: vmovd %eax, %xmm1
+; AVX512F-NEXT: vpmulld %xmm1, %xmm0, %xmm0
+; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k2
+; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
+; AVX512F-NEXT: vpbroadcastd %xmm0, %zmm0
+; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k1 {%k1}
+; AVX512F-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
+; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
+; AVX512F-NEXT: vzeroupper
+; AVX512F-NEXT: retq
+;
+; AVX512VL-LABEL: PR52500:
+; AVX512VL: # %bb.0:
+; AVX512VL-NEXT: vpmovsxbd %xmm0, %zmm0
+; AVX512VL-NEXT: vpslld $31, %zmm0, %zmm0
+; AVX512VL-NEXT: vptestmd %zmm0, %zmm0, %k1
+; AVX512VL-NEXT: vmovd %edi, %xmm0
+; AVX512VL-NEXT: movl $789, %eax # imm = 0x315
+; AVX512VL-NEXT: vmovd %eax, %xmm1
+; AVX512VL-NEXT: vpmulld %xmm1, %xmm0, %xmm0
+; AVX512VL-NEXT: vptestnmd %zmm0, %zmm0, %k2
+; AVX512VL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k2} {z}
+; AVX512VL-NEXT: vpbroadcastd %xmm0, %zmm0
+; AVX512VL-NEXT: vptestmd %zmm0, %zmm0, %k1 {%k1}
+; AVX512VL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
+; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0
+; AVX512VL-NEXT: vzeroupper
+; AVX512VL-NEXT: retq
+;
+; VL_BW_DQ-LABEL: PR52500:
+; VL_BW_DQ: # %bb.0:
+; VL_BW_DQ-NEXT: vpsllw $7, %xmm0, %xmm0
+; VL_BW_DQ-NEXT: vpxor %xmm1, %xmm1, %xmm1
+; VL_BW_DQ-NEXT: vmovd %edi, %xmm2
+; VL_BW_DQ-NEXT: movl $789, %eax # imm = 0x315
+; VL_BW_DQ-NEXT: vmovd %eax, %xmm3
+; VL_BW_DQ-NEXT: vpmulld %xmm3, %xmm2, %xmm2
+; VL_BW_DQ-NEXT: vptestnmd %zmm2, %zmm2, %k0
+; VL_BW_DQ-NEXT: vpmovm2d %k0, %zmm2
+; VL_BW_DQ-NEXT: vpbroadcastd %xmm2, %zmm2
+; VL_BW_DQ-NEXT: vpmovd2m %zmm2, %k1
+; VL_BW_DQ-NEXT: vpcmpgtb %xmm0, %xmm1, %k0 {%k1}
+; VL_BW_DQ-NEXT: vpmovm2b %k0, %xmm0
+; VL_BW_DQ-NEXT: vzeroupper
+; VL_BW_DQ-NEXT: retq
+ %insrt = insertelement <16 x i32> undef, i32 %in, i32 0
+ %mul = mul <16 x i32> %insrt, <i32 789, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
+ %eq = icmp eq <16 x i32> %mul, zeroinitializer
+ %cmp1 = shufflevector <16 x i1> %eq, <16 x i1> poison, <16 x i32> zeroinitializer
+ %and = and <16 x i1> %cmp1, %msk
+ ret <16 x i1> %and
+}