%5 = add i64 %3, %4
ret i64 %5
}
+
+define [2 x i8] @PR58546(<16 x float> %a0) {
+; SSE2-SSSE3-LABEL: PR58546:
+; SSE2-SSSE3: # %bb.0:
+; SSE2-SSSE3-NEXT: xorps %xmm4, %xmm4
+; SSE2-SSSE3-NEXT: cmpunordps %xmm4, %xmm3
+; SSE2-SSSE3-NEXT: cmpunordps %xmm4, %xmm2
+; SSE2-SSSE3-NEXT: packssdw %xmm3, %xmm2
+; SSE2-SSSE3-NEXT: cmpunordps %xmm4, %xmm1
+; SSE2-SSSE3-NEXT: cmpunordps %xmm4, %xmm0
+; SSE2-SSSE3-NEXT: packssdw %xmm1, %xmm0
+; SSE2-SSSE3-NEXT: packsswb %xmm2, %xmm0
+; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax
+; SSE2-SSSE3-NEXT: movl %eax, %edx
+; SSE2-SSSE3-NEXT: shrl $8, %edx
+; SSE2-SSSE3-NEXT: # kill: def $al killed $al killed $eax
+; SSE2-SSSE3-NEXT: # kill: def $dl killed $dl killed $edx
+; SSE2-SSSE3-NEXT: retq
+;
+; AVX1-LABEL: PR58546:
+; AVX1: # %bb.0:
+; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2
+; AVX1-NEXT: vcmpunordps %ymm2, %ymm1, %ymm1
+; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
+; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
+; AVX1-NEXT: vcmpunordps %ymm2, %ymm0, %ymm0
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
+; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
+; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
+; AVX1-NEXT: vpmovmskb %xmm0, %eax
+; AVX1-NEXT: movl %eax, %edx
+; AVX1-NEXT: shrl $8, %edx
+; AVX1-NEXT: # kill: def $al killed $al killed $eax
+; AVX1-NEXT: # kill: def $dl killed $dl killed $edx
+; AVX1-NEXT: vzeroupper
+; AVX1-NEXT: retq
+;
+; AVX2-LABEL: PR58546:
+; AVX2: # %bb.0:
+; AVX2-NEXT: vxorps %xmm2, %xmm2, %xmm2
+; AVX2-NEXT: vcmpunordps %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vcmpunordps %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
+; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
+; AVX2-NEXT: vpmovmskb %xmm0, %eax
+; AVX2-NEXT: movl %eax, %edx
+; AVX2-NEXT: shrl $8, %edx
+; AVX2-NEXT: # kill: def $al killed $al killed $eax
+; AVX2-NEXT: # kill: def $dl killed $dl killed $edx
+; AVX2-NEXT: vzeroupper
+; AVX2-NEXT: retq
+;
+; AVX512-LABEL: PR58546:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
+; AVX512-NEXT: vcmpunordps %zmm1, %zmm0, %k0
+; AVX512-NEXT: kmovw %k0, -{{[0-9]+}}(%rsp)
+; AVX512-NEXT: vmovdqa -{{[0-9]+}}(%rsp), %xmm0
+; AVX512-NEXT: vmovd %xmm0, %eax
+; AVX512-NEXT: vpextrb $1, %xmm0, %edx
+; AVX512-NEXT: # kill: def $al killed $al killed $eax
+; AVX512-NEXT: # kill: def $dl killed $dl killed $edx
+; AVX512-NEXT: vzeroupper
+; AVX512-NEXT: retq
+ %1 = fcmp uno <16 x float> %a0, zeroinitializer
+ %2 = bitcast <16 x i1> %1 to <2 x i8>
+ %3 = extractelement <2 x i8> %2, i64 0
+ %4 = extractelement <2 x i8> %2, i64 1
+ %5 = insertvalue [2 x i8] poison, i8 %3, 0
+ %6 = insertvalue [2 x i8] %5, i8 %4, 1
+ ret [2 x i8] %6
+}