blob: 905ddef1db7878d7fb6e639ed92b0ec644d6ebfb [file]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-- -mcpu=knl | FileCheck %s --check-prefixes=CHECK,AVX512F
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=CHECK,AVX512
;
; 32-bit float to unsigned integer
;
define <16 x i1> @test_unsigned_v16i1_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v16i1_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
; AVX512F-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vmaxss %xmm2, %xmm1, %xmm3
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm3
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm3
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512F-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vcvttss2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm3, %xmm0
; AVX512F-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
; AVX512F-NEXT: vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k1
; AVX512F-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1
; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v16i1_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]
; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vmaxss %xmm3, %xmm1, %xmm3
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %eax
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm3
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm3
; AVX512-NEXT: vpinsrb $1, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vcvttss2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm3, %xmm0
; AVX512-NEXT: vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k0
; AVX512-NEXT: vpmovm2b %k0, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x = call <16 x i1> @llvm.fptoui.sat.v16i1.v16f32(<16 x float> %f)
ret <16 x i1> %x
}
define <16 x i1> @test_freeze_unsigned_v16i1_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_freeze_unsigned_v16i1_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
; AVX512F-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vmaxss %xmm2, %xmm1, %xmm3
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm3
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm3
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512F-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vcvttss2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm3, %xmm0
; AVX512F-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
; AVX512F-NEXT: vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k1
; AVX512F-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1
; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_freeze_unsigned_v16i1_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]
; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vmaxss %xmm3, %xmm1, %xmm3
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %eax
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm3
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm3
; AVX512-NEXT: vpinsrb $1, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vcvttss2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm3, %xmm0
; AVX512-NEXT: vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k0
; AVX512-NEXT: vpmovm2b %k0, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x = call <16 x i1> @llvm.fptoui.sat.v16i1.v16f32(<16 x float> %f)
%y = freeze <16 x i1> %x
ret <16 x i1> %y
}
define <16 x i8> @test_unsigned_v16i8_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v16i8_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
; AVX512F-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vmaxss %xmm2, %xmm1, %xmm3
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm3
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm3
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512F-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vcvttss2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm3, %xmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v16i8_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vmaxss %xmm2, %xmm1, %xmm3
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %eax
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm3
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm3
; AVX512-NEXT: vpinsrb $1, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vcvttss2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm3, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x = call <16 x i8> @llvm.fptoui.sat.v16i8.v16f32(<16 x float> %f)
ret <16 x i8> %x
}
define <16 x i16> @test_unsigned_v16i16_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v16i16_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm3[1,1,3,3]
; AVX512F-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vmaxss %xmm2, %xmm1, %xmm4
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vmaxss %xmm3, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm4
; AVX512F-NEXT: vpinsrw $1, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $2, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm3 = xmm3[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm3, %xmm1, %xmm3
; AVX512F-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vpinsrw $3, %eax, %xmm4, %xmm3
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $6, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vpinsrw $7, %eax, %xmm3, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512F-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm4
; AVX512F-NEXT: vpinsrw $1, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $2, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $3, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $4, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $5, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512F-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $6, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512F-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512F-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vcvttss2si %xmm0, %eax
; AVX512F-NEXT: vpinsrw $7, %eax, %xmm4, %xmm0
; AVX512F-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v16i16_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vmaxss %xmm3, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm4
; AVX512-NEXT: vpinsrw $1, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $2, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm3 = xmm3[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm3, %xmm1, %xmm3
; AVX512-NEXT: vminss %xmm3, %xmm2, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %eax
; AVX512-NEXT: vpinsrw $3, %eax, %xmm4, %xmm3
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm4
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $4, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $5, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $6, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrw $7, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm4, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm4
; AVX512-NEXT: vminss %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm4
; AVX512-NEXT: vpinsrw $1, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $2, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $3, %eax, %xmm4, %xmm4
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $4, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $5, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vmaxss %xmm5, %xmm1, %xmm5
; AVX512-NEXT: vminss %xmm5, %xmm2, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $6, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512-NEXT: vmaxss %xmm0, %xmm1, %xmm0
; AVX512-NEXT: vminss %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vcvttss2si %xmm0, %eax
; AVX512-NEXT: vpinsrw $7, %eax, %xmm4, %xmm0
; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
; AVX512-NEXT: retq
%x = call <16 x i16> @llvm.fptoui.sat.v16i16.v16f32(<16 x float> %f)
ret <16 x i16> %x
}
define <16 x i32> @test_unsigned_v16i32_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v16i32_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm3
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvttss2si %xmm4, %rdx
; AVX512F-NEXT: xorl %eax, %eax
; AVX512F-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [4.29496704E+9,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: movl $-1, %ecx
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vcvttss2si %xmm3, %rsi
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm3[1,0]
; AVX512F-NEXT: vcvttss2si %xmm4, %rdi
; AVX512F-NEXT: vmovd %esi, %xmm5
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %edi
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmoval %ecx, %edi
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm5, %xmm4
; AVX512F-NEXT: vpinsrd $2, %edi, %xmm4, %xmm5
; AVX512F-NEXT: vshufps {{.*#+}} xmm3 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvttss2si %xmm3, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm3 = xmm4[1,1,3,3]
; AVX512F-NEXT: vcvttss2si %xmm3, %rsi
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm5, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm4, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512F-NEXT: vcvttss2si %xmm5, %rdi
; AVX512F-NEXT: vmovd %edx, %xmm6
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edi
; AVX512F-NEXT: vpinsrd $1, %esi, %xmm6, %xmm5
; AVX512F-NEXT: vpinsrd $2, %edi, %xmm5, %xmm6
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512F-NEXT: vcvttss2si %xmm4, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm5
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm4 = xmm5[1,1,3,3]
; AVX512F-NEXT: vcvttss2si %xmm4, %rsi
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm6, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm5, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm6 = xmm5[1,0]
; AVX512F-NEXT: vcvttss2si %xmm6, %rdi
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %edi
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: vmovd %edx, %xmm6
; AVX512F-NEXT: cmoval %ecx, %edi
; AVX512F-NEXT: vpinsrd $1, %esi, %xmm6, %xmm6
; AVX512F-NEXT: vpinsrd $2, %edi, %xmm6, %xmm6
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm5[3,3,3,3]
; AVX512F-NEXT: vcvttss2si %xmm5, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvttss2si %xmm5, %rsi
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm6, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm0, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm6 = xmm0[1,0]
; AVX512F-NEXT: vcvttss2si %xmm6, %rdi
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %edi
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: vmovd %edx, %xmm6
; AVX512F-NEXT: cmoval %ecx, %edi
; AVX512F-NEXT: vpinsrd $1, %esi, %xmm6, %xmm6
; AVX512F-NEXT: vpinsrd $2, %edi, %xmm6, %xmm6
; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvttss2si %xmm0, %rdx
; AVX512F-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm3
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm6, %xmm0
; AVX512F-NEXT: vinserti128 $1, %xmm5, %ymm0, %ymm0
; AVX512F-NEXT: vinserti64x4 $1, %ymm3, %zmm0, %zmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v16i32_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm3[1,1,3,3]
; AVX512-NEXT: vcvttss2si %xmm4, %rdx
; AVX512-NEXT: xorl %eax, %eax
; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [4.29496704E+9,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vucomiss %xmm2, %xmm4
; AVX512-NEXT: movl $-1, %ecx
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvttss2si %xmm3, %rsi
; AVX512-NEXT: vucomiss %xmm1, %xmm3
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm3
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm4
; AVX512-NEXT: vpinsrd $1, %edx, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512-NEXT: vcvttss2si %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm3 = xmm3[3,3,3,3]
; AVX512-NEXT: vcvttss2si %xmm3, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm3
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm3
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm4, %xmm3
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vcvttss2si %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvttss2si %xmm4, %rsi
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm4
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm5
; AVX512-NEXT: vpinsrd $1, %edx, %xmm5, %xmm5
; AVX512-NEXT: vshufpd {{.*#+}} xmm6 = xmm4[1,0]
; AVX512-NEXT: vcvttss2si %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm5, %xmm5
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm4[3,3,3,3]
; AVX512-NEXT: vcvttss2si %xmm4, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm4
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm5, %xmm4
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm5
; AVX512-NEXT: vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
; AVX512-NEXT: vcvttss2si %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvttss2si %xmm5, %rsi
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vshufpd {{.*#+}} xmm6 = xmm5[1,0]
; AVX512-NEXT: vcvttss2si %xmm6, %rdi
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edi
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: vmovd %esi, %xmm6
; AVX512-NEXT: vpinsrd $1, %edx, %xmm6, %xmm6
; AVX512-NEXT: cmoval %ecx, %edi
; AVX512-NEXT: vpinsrd $2, %edi, %xmm6, %xmm6
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm5[3,3,3,3]
; AVX512-NEXT: vcvttss2si %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm6, %xmm5
; AVX512-NEXT: vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvttss2si %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm3
; AVX512-NEXT: vcvttss2si %xmm0, %rsi
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm4
; AVX512-NEXT: vpinsrd $1, %edx, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm6 = xmm0[1,0]
; AVX512-NEXT: vcvttss2si %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvttss2si %xmm0, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm4, %xmm0
; AVX512-NEXT: vinserti128 $1, %xmm5, %ymm0, %ymm0
; AVX512-NEXT: vinserti64x4 $1, %ymm3, %zmm0, %zmm0
; AVX512-NEXT: retq
%x = call <16 x i32> @llvm.fptoui.sat.v16i32.v16f32(<16 x float> %f)
ret <16 x i32> %x
}
define <16 x i64> @test_unsigned_v16i64_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v16i64_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm4 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm4, %rdx
; AVX512F-NEXT: xorl %eax, %eax
; AVX512F-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [1.8446743E+19,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: movq $-1, %rcx
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm3[1,0]
; AVX512F-NEXT: vcvttss2usi %xmm4, %rdi
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vcvttss2usi %xmm3, %rsi
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm3, %r8
; AVX512F-NEXT: vmovq %rdx, %xmm4
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %r8
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %r8
; AVX512F-NEXT: vmovq %rdi, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm5, %rdi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vmovq %rsi, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512F-NEXT: vmovq %r8, %xmm6
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm6[0]
; AVX512F-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm4
; AVX512F-NEXT: vcvttss2usi %xmm0, %rdx
; AVX512F-NEXT: vmovq %rdi, %xmm6
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovq %rsi, %xmm7
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm3, %rsi
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vextractf64x4 $1, %zmm0, %ymm3
; AVX512F-NEXT: vextractf128 $1, %ymm3, %xmm5
; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm5[3,3,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm0, %rdi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm7[0],xmm6[0]
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vmovq %rdx, %xmm0
; AVX512F-NEXT: vshufpd {{.*#+}} xmm7 = xmm5[1,0]
; AVX512F-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512F-NEXT: vucomiss %xmm1, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm2, %xmm7
; AVX512F-NEXT: vmovq %rsi, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm7[0]
; AVX512F-NEXT: vinserti128 $1, %xmm6, %ymm0, %ymm0
; AVX512F-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512F-NEXT: vinserti64x4 $1, %ymm4, %zmm0, %zmm0
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rdi, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm5[1,1,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm5, %rdi
; AVX512F-NEXT: vmovq %rdx, %xmm6
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vmovq %rsi, %xmm5
; AVX512F-NEXT: vshufps {{.*#+}} xmm7 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
; AVX512F-NEXT: vucomiss %xmm1, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm2, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovq %rdi, %xmm6
; AVX512F-NEXT: vshufpd {{.*#+}} xmm7 = xmm3[1,0]
; AVX512F-NEXT: vcvttss2usi %xmm7, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512F-NEXT: vucomiss %xmm1, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm2, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vinserti128 $1, %xmm4, %ymm5, %ymm4
; AVX512F-NEXT: vmovq %rdx, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm3, %rdx
; AVX512F-NEXT: vmovq %rsi, %xmm6
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm6[0],xmm5[0]
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm3 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvttss2usi %xmm3, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm6
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rsi, %xmm1
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm6[0],xmm1[0]
; AVX512F-NEXT: vinserti128 $1, %xmm5, %ymm1, %ymm1
; AVX512F-NEXT: vinserti64x4 $1, %ymm4, %zmm1, %zmm1
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v16i64_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm2
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm2[3,3,3,3]
; AVX512-NEXT: vcvttss2usi %xmm4, %rdx
; AVX512-NEXT: xorl %eax, %eax
; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: vmovss {{.*#+}} xmm3 = [1.8446743E+19,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm4
; AVX512-NEXT: movq $-1, %rcx
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm2[1,0]
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vcvttss2usi %xmm2, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vucomiss %xmm1, %xmm2
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm3, %xmm2
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm5[0],xmm4[0]
; AVX512-NEXT: vmovq %rsi, %xmm5
; AVX512-NEXT: vmovshdup {{.*#+}} xmm2 = xmm2[1,1,3,3]
; AVX512-NEXT: vcvttss2usi %xmm2, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm2
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm2
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm2
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm5[0],xmm2[0]
; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm2, %ymm2
; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvttss2usi %xmm4, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vcvttss2usi %xmm0, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm3, %xmm0
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm5[0],xmm4[0]
; AVX512-NEXT: vmovq %rsi, %xmm5
; AVX512-NEXT: vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm5, %ymm4
; AVX512-NEXT: vinserti64x4 $1, %ymm2, %zmm4, %zmm2
; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm0
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm4[3,3,3,3]
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rsi, %xmm5
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512-NEXT: vcvttss2usi %xmm4, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm4[1,1,3,3]
; AVX512-NEXT: vcvttss2usi %xmm4, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm4
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]
; AVX512-NEXT: vinserti128 $1, %xmm5, %ymm4, %ymm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rsi, %xmm5
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512-NEXT: vcvttss2usi %xmm0, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm0
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvttss2usi %xmm0, %rdx
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm0
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm0
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm6[0],xmm0[0]
; AVX512-NEXT: vinserti128 $1, %xmm5, %ymm0, %ymm0
; AVX512-NEXT: vinserti64x4 $1, %ymm4, %zmm0, %zmm1
; AVX512-NEXT: vmovdqa64 %zmm2, %zmm0
; AVX512-NEXT: retq
%x = call <16 x i64> @llvm.fptoui.sat.v16i64.v16f32(<16 x float> %f)
ret <16 x i64> %x
}
define <16 x i128> @test_unsigned_v16i128_v16f32(<16 x float> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v16i128_v16f32:
; AVX512F: # %bb.0:
; AVX512F-NEXT: pushq %rbp
; AVX512F-NEXT: pushq %r15
; AVX512F-NEXT: pushq %r14
; AVX512F-NEXT: pushq %r13
; AVX512F-NEXT: pushq %r12
; AVX512F-NEXT: pushq %rbx
; AVX512F-NEXT: subq $360, %rsp # imm = 0x168
; AVX512F-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
; AVX512F-NEXT: movq %rdi, %rbx
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: xorl %r13d, %r13d
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rbp
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vextractf64x4 $1, %zmm0, %ymm0
; AVX512F-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %rdx
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: movq %rdx, %r14
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %r14
; AVX512F-NEXT: cmovbq %r13, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %rbp, %r14
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: movq %rax, %r15
; AVX512F-NEXT: movq %rdx, %r12
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r13, %r12
; AVX512F-NEXT: cmovbq %r13, %r15
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %rbp, %r15
; AVX512F-NEXT: cmovaq %rbp, %r12
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: movq %rax, %r13
; AVX512F-NEXT: movq %rdx, %rbp
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: movl $0, %eax
; AVX512F-NEXT: cmovbq %rax, %rbp
; AVX512F-NEXT: cmovbq %rax, %r13
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rax
; AVX512F-NEXT: cmovaq %rax, %r13
; AVX512F-NEXT: cmovaq %rax, %rbp
; AVX512F-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: movl $0, %ecx
; AVX512F-NEXT: cmovbq %rcx, %rdx
; AVX512F-NEXT: cmovbq %rcx, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rcx
; AVX512F-NEXT: cmovaq %rcx, %rax
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: movq %rdx, 200(%rbx)
; AVX512F-NEXT: movq %rax, 192(%rbx)
; AVX512F-NEXT: movq %rbp, 136(%rbx)
; AVX512F-NEXT: movq %r13, 128(%rbx)
; AVX512F-NEXT: movq %r12, 72(%rbx)
; AVX512F-NEXT: movq %r15, 64(%rbx)
; AVX512F-NEXT: movq %r14, 8(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, (%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 248(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 240(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 232(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 224(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 216(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 208(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 184(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 176(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 168(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 160(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 152(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 144(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 120(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 112(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 104(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 96(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 88(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 80(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 56(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 48(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 40(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 32(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 24(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 16(%rbx)
; AVX512F-NEXT: movq %rbx, %rax
; AVX512F-NEXT: addq $360, %rsp # imm = 0x168
; AVX512F-NEXT: popq %rbx
; AVX512F-NEXT: popq %r12
; AVX512F-NEXT: popq %r13
; AVX512F-NEXT: popq %r14
; AVX512F-NEXT: popq %r15
; AVX512F-NEXT: popq %rbp
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v16i128_v16f32:
; AVX512: # %bb.0:
; AVX512-NEXT: pushq %rbp
; AVX512-NEXT: pushq %r15
; AVX512-NEXT: pushq %r14
; AVX512-NEXT: pushq %r13
; AVX512-NEXT: pushq %r12
; AVX512-NEXT: pushq %rbx
; AVX512-NEXT: subq $360, %rsp # imm = 0x168
; AVX512-NEXT: vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
; AVX512-NEXT: movq %rdi, %rbx
; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: xorl %r13d, %r13d
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rbp
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm0
; AVX512-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %rdx
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: movq %rdx, %r14
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %r14
; AVX512-NEXT: cmovbq %r13, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %rbp, %r14
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: movq %rax, %r15
; AVX512-NEXT: movq %rdx, %r12
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r13, %r12
; AVX512-NEXT: cmovbq %r13, %r15
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %rbp, %r15
; AVX512-NEXT: cmovaq %rbp, %r12
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: movq %rax, %r13
; AVX512-NEXT: movq %rdx, %rbp
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: movl $0, %eax
; AVX512-NEXT: cmovbq %rax, %rbp
; AVX512-NEXT: cmovbq %rax, %r13
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rax
; AVX512-NEXT: cmovaq %rax, %r13
; AVX512-NEXT: cmovaq %rax, %rbp
; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: movl $0, %ecx
; AVX512-NEXT: cmovbq %rcx, %rdx
; AVX512-NEXT: cmovbq %rcx, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rcx
; AVX512-NEXT: cmovaq %rcx, %rax
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: movq %rdx, 200(%rbx)
; AVX512-NEXT: movq %rax, 192(%rbx)
; AVX512-NEXT: movq %rbp, 136(%rbx)
; AVX512-NEXT: movq %r13, 128(%rbx)
; AVX512-NEXT: movq %r12, 72(%rbx)
; AVX512-NEXT: movq %r15, 64(%rbx)
; AVX512-NEXT: movq %r14, 8(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, (%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 248(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 240(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 232(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 224(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 216(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 208(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 184(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 176(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 168(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 160(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 152(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 144(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 120(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 112(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 104(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 96(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 88(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 80(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 56(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 48(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 40(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 32(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 24(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 16(%rbx)
; AVX512-NEXT: movq %rbx, %rax
; AVX512-NEXT: addq $360, %rsp # imm = 0x168
; AVX512-NEXT: popq %rbx
; AVX512-NEXT: popq %r12
; AVX512-NEXT: popq %r13
; AVX512-NEXT: popq %r14
; AVX512-NEXT: popq %r15
; AVX512-NEXT: popq %rbp
; AVX512-NEXT: retq
%x = call <16 x i128> @llvm.fptoui.sat.v16i128.v16f32(<16 x float> %f)
ret <16 x i128> %x
}
;
; 64-bit float to unsigned integer
;
define <8 x i1> @test_unsigned_v8i1_v8f64(<8 x double> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v8i1_v8f64:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]
; AVX512F-NEXT: vxorpd %xmm2, %xmm2, %xmm2
; AVX512F-NEXT: vmaxsd %xmm1, %xmm2, %xmm1
; AVX512F-NEXT: vmovsd {{.*#+}} xmm3 = [1.0E+0,0.0E+0]
; AVX512F-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %eax
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm1
; AVX512F-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm1
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vminsd %xmm0, %xmm3, %xmm0
; AVX512F-NEXT: vcvttsd2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm1, %xmm0
; AVX512F-NEXT: vpmovzxbq {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero,xmm0[4],zero,zero,zero,zero,zero,zero,zero,xmm0[5],zero,zero,zero,zero,zero,zero,zero,xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k1
; AVX512F-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1
; AVX512F-NEXT: vpmovdw %zmm0, %ymm0
; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v8i1_v8f64:
; AVX512: # %bb.0:
; AVX512-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]
; AVX512-NEXT: vxorpd %xmm2, %xmm2, %xmm2
; AVX512-NEXT: vmovsd {{.*#+}} xmm3 = [1.0E+0,0.0E+0]
; AVX512-NEXT: vmaxsd %xmm1, %xmm2, %xmm1
; AVX512-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %eax
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm1
; AVX512-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm1
; AVX512-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vminsd %xmm0, %xmm3, %xmm0
; AVX512-NEXT: vcvttsd2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm1, %xmm0
; AVX512-NEXT: vpmovzxbq {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero,xmm0[4],zero,zero,zero,zero,zero,zero,zero,xmm0[5],zero,zero,zero,zero,zero,zero,zero,xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vptestmq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %k0
; AVX512-NEXT: vpmovm2w %k0, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x = call <8 x i1> @llvm.fptoui.sat.v8i1.v8f64(<8 x double> %f)
ret <8 x i1> %x
}
define <8 x i8> @test_unsigned_v8i8_v8f64(<8 x double> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v8i8_v8f64:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]
; AVX512F-NEXT: vxorpd %xmm2, %xmm2, %xmm2
; AVX512F-NEXT: vmaxsd %xmm1, %xmm2, %xmm1
; AVX512F-NEXT: vmovsd {{.*#+}} xmm3 = [2.55E+2,0.0E+0]
; AVX512F-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %eax
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm1
; AVX512F-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm1
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vminsd %xmm0, %xmm3, %xmm0
; AVX512F-NEXT: vcvttsd2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm1, %xmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v8i8_v8f64:
; AVX512: # %bb.0:
; AVX512-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]
; AVX512-NEXT: vxorpd %xmm2, %xmm2, %xmm2
; AVX512-NEXT: vmaxsd %xmm1, %xmm2, %xmm1
; AVX512-NEXT: vmovsd {{.*#+}} xmm3 = [2.55E+2,0.0E+0]
; AVX512-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %eax
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm1
; AVX512-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm1
; AVX512-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vminsd %xmm0, %xmm3, %xmm0
; AVX512-NEXT: vcvttsd2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm1, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x = call <8 x i8> @llvm.fptoui.sat.v8i8.v8f64(<8 x double> %f)
ret <8 x i8> %x
}
define <8 x i16> @test_unsigned_v8i16_v8f64(<8 x double> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v8i16_v8f64:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]
; AVX512F-NEXT: vxorpd %xmm2, %xmm2, %xmm2
; AVX512F-NEXT: vmaxsd %xmm1, %xmm2, %xmm1
; AVX512F-NEXT: vmovsd {{.*#+}} xmm3 = [6.5535E+4,0.0E+0]
; AVX512F-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %eax
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm1
; AVX512F-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm1
; AVX512F-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %eax
; AVX512F-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512F-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm4
; AVX512F-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512F-NEXT: vcvttsd2si %xmm4, %eax
; AVX512F-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmaxsd %xmm0, %xmm2, %xmm0
; AVX512F-NEXT: vminsd %xmm0, %xmm3, %xmm0
; AVX512F-NEXT: vcvttsd2si %xmm0, %eax
; AVX512F-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v8i16_v8f64:
; AVX512: # %bb.0:
; AVX512-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1,0]
; AVX512-NEXT: vxorpd %xmm2, %xmm2, %xmm2
; AVX512-NEXT: vmaxsd %xmm1, %xmm2, %xmm1
; AVX512-NEXT: vmovsd {{.*#+}} xmm3 = [6.5535E+4,0.0E+0]
; AVX512-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %eax
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm1
; AVX512-NEXT: vminsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm1
; AVX512-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrw $3, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm3, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %eax
; AVX512-NEXT: vpinsrw $4, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vmaxsd %xmm4, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrw $5, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm4
; AVX512-NEXT: vminsd %xmm4, %xmm3, %xmm4
; AVX512-NEXT: vcvttsd2si %xmm4, %eax
; AVX512-NEXT: vpinsrw $6, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmaxsd %xmm0, %xmm2, %xmm0
; AVX512-NEXT: vminsd %xmm0, %xmm3, %xmm0
; AVX512-NEXT: vcvttsd2si %xmm0, %eax
; AVX512-NEXT: vpinsrw $7, %eax, %xmm1, %xmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%x = call <8 x i16> @llvm.fptoui.sat.v8i16.v8f64(<8 x double> %f)
ret <8 x i16> %x
}
define <8 x i32> @test_unsigned_v8i32_v8f64(<8 x double> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v8i32_v8f64:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm2 = xmm1[1,0]
; AVX512F-NEXT: vxorpd %xmm3, %xmm3, %xmm3
; AVX512F-NEXT: vmaxsd %xmm2, %xmm3, %xmm2
; AVX512F-NEXT: vmovsd {{.*#+}} xmm4 = [4.294967295E+9,0.0E+0]
; AVX512F-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512F-NEXT: vcvttsd2si %xmm2, %rax
; AVX512F-NEXT: vmaxsd %xmm1, %xmm3, %xmm1
; AVX512F-NEXT: vminsd %xmm1, %xmm4, %xmm1
; AVX512F-NEXT: vcvttsd2si %xmm1, %rcx
; AVX512F-NEXT: vmovd %ecx, %xmm1
; AVX512F-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm2
; AVX512F-NEXT: vmaxsd %xmm2, %xmm3, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm4, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %rax
; AVX512F-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]
; AVX512F-NEXT: vmaxsd %xmm2, %xmm3, %xmm2
; AVX512F-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512F-NEXT: vcvttsd2si %xmm2, %rax
; AVX512F-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
; AVX512F-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]
; AVX512F-NEXT: vmaxsd %xmm2, %xmm3, %xmm2
; AVX512F-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512F-NEXT: vcvttsd2si %xmm2, %rax
; AVX512F-NEXT: vmaxsd %xmm0, %xmm3, %xmm2
; AVX512F-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512F-NEXT: vcvttsd2si %xmm2, %rcx
; AVX512F-NEXT: vmovd %ecx, %xmm2
; AVX512F-NEXT: vpinsrd $1, %eax, %xmm2, %xmm2
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmaxsd %xmm0, %xmm3, %xmm5
; AVX512F-NEXT: vminsd %xmm5, %xmm4, %xmm5
; AVX512F-NEXT: vcvttsd2si %xmm5, %rax
; AVX512F-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmaxsd %xmm0, %xmm3, %xmm0
; AVX512F-NEXT: vminsd %xmm0, %xmm4, %xmm0
; AVX512F-NEXT: vcvttsd2si %xmm0, %rax
; AVX512F-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0
; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v8i32_v8f64:
; AVX512: # %bb.0:
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm1[1,0]
; AVX512-NEXT: vxorpd %xmm3, %xmm3, %xmm3
; AVX512-NEXT: vmovsd {{.*#+}} xmm4 = [4.294967295E+9,0.0E+0]
; AVX512-NEXT: vmaxsd %xmm2, %xmm3, %xmm2
; AVX512-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512-NEXT: vcvttsd2si %xmm2, %rax
; AVX512-NEXT: vmaxsd %xmm1, %xmm3, %xmm1
; AVX512-NEXT: vminsd %xmm1, %xmm4, %xmm1
; AVX512-NEXT: vcvttsd2si %xmm1, %rcx
; AVX512-NEXT: vmovd %ecx, %xmm1
; AVX512-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm2
; AVX512-NEXT: vmaxsd %xmm2, %xmm3, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm4, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %rax
; AVX512-NEXT: vpinsrd $2, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]
; AVX512-NEXT: vmaxsd %xmm2, %xmm3, %xmm2
; AVX512-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512-NEXT: vcvttsd2si %xmm2, %rax
; AVX512-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]
; AVX512-NEXT: vmaxsd %xmm2, %xmm3, %xmm2
; AVX512-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512-NEXT: vcvttsd2si %xmm2, %rax
; AVX512-NEXT: vmaxsd %xmm0, %xmm3, %xmm2
; AVX512-NEXT: vminsd %xmm2, %xmm4, %xmm2
; AVX512-NEXT: vcvttsd2si %xmm2, %rcx
; AVX512-NEXT: vmovd %ecx, %xmm2
; AVX512-NEXT: vpinsrd $1, %eax, %xmm2, %xmm2
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmaxsd %xmm0, %xmm3, %xmm5
; AVX512-NEXT: vminsd %xmm5, %xmm4, %xmm5
; AVX512-NEXT: vcvttsd2si %xmm5, %rax
; AVX512-NEXT: vpinsrd $2, %eax, %xmm2, %xmm2
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmaxsd %xmm0, %xmm3, %xmm0
; AVX512-NEXT: vminsd %xmm0, %xmm4, %xmm0
; AVX512-NEXT: vcvttsd2si %xmm0, %rax
; AVX512-NEXT: vpinsrd $3, %eax, %xmm2, %xmm0
; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
; AVX512-NEXT: retq
%x = call <8 x i32> @llvm.fptoui.sat.v8i32.v8f64(<8 x double> %f)
ret <8 x i32> %x
}
define <8 x i64> @test_unsigned_v8i64_v8f64(<8 x double> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v8i64_v8f64:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextractf32x4 $3, %zmm0, %xmm3
; AVX512F-NEXT: vcvttsd2usi %xmm3, %rdx
; AVX512F-NEXT: xorl %eax, %eax
; AVX512F-NEXT: vxorpd %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vucomisd %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vmovsd {{.*#+}} xmm2 = [1.844674407370955E+19,0.0E+0]
; AVX512F-NEXT: vucomisd %xmm2, %xmm3
; AVX512F-NEXT: movq $-1, %rcx
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm3 = xmm3[1,0]
; AVX512F-NEXT: vcvttsd2usi %xmm3, %rsi
; AVX512F-NEXT: vucomisd %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomisd %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm3
; AVX512F-NEXT: vcvttsd2usi %xmm3, %rdi
; AVX512F-NEXT: vucomisd %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomisd %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vmovq %rdx, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm3 = xmm3[1,0]
; AVX512F-NEXT: vcvttsd2usi %xmm3, %rdx
; AVX512F-NEXT: vmovq %rsi, %xmm5
; AVX512F-NEXT: vucomisd %xmm1, %xmm3
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomisd %xmm2, %xmm3
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovq %rdi, %xmm3
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm6
; AVX512F-NEXT: vcvttsd2usi %xmm6, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
; AVX512F-NEXT: vucomisd %xmm1, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomisd %xmm2, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm5
; AVX512F-NEXT: vshufpd {{.*#+}} xmm6 = xmm6[1,0]
; AVX512F-NEXT: vcvttsd2usi %xmm6, %rdx
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
; AVX512F-NEXT: vucomisd %xmm1, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomisd %xmm2, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vinserti128 $1, %xmm4, %ymm3, %ymm3
; AVX512F-NEXT: vmovq %rsi, %xmm4
; AVX512F-NEXT: vcvttsd2usi %xmm0, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm5
; AVX512F-NEXT: vucomisd %xmm1, %xmm0
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomisd %xmm2, %xmm0
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vcvttsd2usi %xmm0, %rdx
; AVX512F-NEXT: vmovq %rsi, %xmm5
; AVX512F-NEXT: vucomisd %xmm1, %xmm0
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomisd %xmm2, %xmm0
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovq %rdx, %xmm0
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm5[0],xmm0[0]
; AVX512F-NEXT: vinserti128 $1, %xmm4, %ymm0, %ymm0
; AVX512F-NEXT: vinserti64x4 $1, %ymm3, %zmm0, %zmm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v8i64_v8f64:
; AVX512: # %bb.0:
; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm3
; AVX512-NEXT: vcvttsd2usi %xmm3, %rdx
; AVX512-NEXT: xorl %eax, %eax
; AVX512-NEXT: vxorpd %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vucomisd %xmm1, %xmm3
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vmovsd {{.*#+}} xmm2 = [1.844674407370955E+19,0.0E+0]
; AVX512-NEXT: vucomisd %xmm2, %xmm3
; AVX512-NEXT: movq $-1, %rcx
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm3 = xmm3[1,0]
; AVX512-NEXT: vcvttsd2usi %xmm3, %rdx
; AVX512-NEXT: vucomisd %xmm1, %xmm3
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomisd %xmm2, %xmm3
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm3
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm4
; AVX512-NEXT: vcvttsd2usi %xmm4, %rdx
; AVX512-NEXT: vucomisd %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomisd %xmm2, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vcvttsd2usi %xmm4, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vucomisd %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomisd %xmm2, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rsi, %xmm4
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm5[0],xmm4[0]
; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm3
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vcvttsd2usi %xmm4, %rdx
; AVX512-NEXT: vucomisd %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomisd %xmm2, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm4[1,0]
; AVX512-NEXT: vcvttsd2usi %xmm4, %rdx
; AVX512-NEXT: vucomisd %xmm1, %xmm4
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomisd %xmm2, %xmm4
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm4
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm5[0],xmm4[0]
; AVX512-NEXT: vcvttsd2usi %xmm0, %rdx
; AVX512-NEXT: vucomisd %xmm1, %xmm0
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomisd %xmm2, %xmm0
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vcvttsd2usi %xmm0, %rdx
; AVX512-NEXT: vucomisd %xmm1, %xmm0
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomisd %xmm2, %xmm0
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm0
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm5[0],xmm0[0]
; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm0, %ymm0
; AVX512-NEXT: vinserti64x4 $1, %ymm3, %zmm0, %zmm0
; AVX512-NEXT: retq
%x = call <8 x i64> @llvm.fptoui.sat.v8i64.v8f64(<8 x double> %f)
ret <8 x i64> %x
}
define <8 x i128> @test_unsigned_v8i128_v8f64(<8 x double> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v8i128_v8f64:
; AVX512F: # %bb.0:
; AVX512F-NEXT: pushq %rbp
; AVX512F-NEXT: pushq %r15
; AVX512F-NEXT: pushq %r14
; AVX512F-NEXT: pushq %r13
; AVX512F-NEXT: pushq %r12
; AVX512F-NEXT: pushq %rbx
; AVX512F-NEXT: subq $216, %rsp
; AVX512F-NEXT: vmovupd %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
; AVX512F-NEXT: movq %rdi, %rbx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: xorl %r12d, %r12d
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r12, %rdx
; AVX512F-NEXT: cmovbq %r12, %rax
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %r13
; AVX512F-NEXT: cmovaq %r13, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r13, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r12, %rdx
; AVX512F-NEXT: cmovbq %r12, %rax
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r13, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r13, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vextractf64x4 $1, %zmm0, %ymm0
; AVX512F-NEXT: vmovupd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r12, %rdx
; AVX512F-NEXT: cmovbq %r12, %rax
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r13, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r13, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512F-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r12, %rdx
; AVX512F-NEXT: cmovbq %r12, %rax
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r13, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r13, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: movq %rdx, %rbp
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r12, %rbp
; AVX512F-NEXT: cmovbq %r12, %rax
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r13, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r13, %rbp
; AVX512F-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: movq %rax, %r14
; AVX512F-NEXT: movq %rdx, %r15
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r12, %r15
; AVX512F-NEXT: cmovbq %r12, %r14
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r13, %r14
; AVX512F-NEXT: cmovaq %r13, %r15
; AVX512F-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: movq %rax, %r12
; AVX512F-NEXT: movq %rdx, %r13
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: movl $0, %eax
; AVX512F-NEXT: cmovbq %rax, %r13
; AVX512F-NEXT: cmovbq %rax, %r12
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rax
; AVX512F-NEXT: cmovaq %rax, %r12
; AVX512F-NEXT: cmovaq %rax, %r13
; AVX512F-NEXT: vmovapd (%rsp), %xmm0 # 16-byte Reload
; AVX512F-NEXT: callq __fixunsdfti@PLT
; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomisd %xmm0, %xmm1
; AVX512F-NEXT: movl $0, %ecx
; AVX512F-NEXT: cmovbq %rcx, %rdx
; AVX512F-NEXT: cmovbq %rcx, %rax
; AVX512F-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rcx
; AVX512F-NEXT: cmovaq %rcx, %rax
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: movq %rdx, 104(%rbx)
; AVX512F-NEXT: movq %rax, 96(%rbx)
; AVX512F-NEXT: movq %r13, 72(%rbx)
; AVX512F-NEXT: movq %r12, 64(%rbx)
; AVX512F-NEXT: movq %r15, 40(%rbx)
; AVX512F-NEXT: movq %r14, 32(%rbx)
; AVX512F-NEXT: movq %rbp, 8(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, (%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 120(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 112(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 88(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 80(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 56(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 48(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 24(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 16(%rbx)
; AVX512F-NEXT: movq %rbx, %rax
; AVX512F-NEXT: addq $216, %rsp
; AVX512F-NEXT: popq %rbx
; AVX512F-NEXT: popq %r12
; AVX512F-NEXT: popq %r13
; AVX512F-NEXT: popq %r14
; AVX512F-NEXT: popq %r15
; AVX512F-NEXT: popq %rbp
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v8i128_v8f64:
; AVX512: # %bb.0:
; AVX512-NEXT: pushq %rbp
; AVX512-NEXT: pushq %r15
; AVX512-NEXT: pushq %r14
; AVX512-NEXT: pushq %r13
; AVX512-NEXT: pushq %r12
; AVX512-NEXT: pushq %rbx
; AVX512-NEXT: subq $216, %rsp
; AVX512-NEXT: vmovupd %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
; AVX512-NEXT: movq %rdi, %rbx
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: xorl %r12d, %r12d
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r12, %rdx
; AVX512-NEXT: cmovbq %r12, %rax
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %r13
; AVX512-NEXT: cmovaq %r13, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r13, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r12, %rdx
; AVX512-NEXT: cmovbq %r12, %rax
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r13, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r13, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm0
; AVX512-NEXT: vmovupd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r12, %rdx
; AVX512-NEXT: cmovbq %r12, %rax
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r13, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r13, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
; AVX512-NEXT: vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r12, %rdx
; AVX512-NEXT: cmovbq %r12, %rax
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r13, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r13, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: movq %rdx, %rbp
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r12, %rbp
; AVX512-NEXT: cmovbq %r12, %rax
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r13, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r13, %rbp
; AVX512-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: movq %rax, %r14
; AVX512-NEXT: movq %rdx, %r15
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r12, %r15
; AVX512-NEXT: cmovbq %r12, %r14
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r13, %r14
; AVX512-NEXT: cmovaq %r13, %r15
; AVX512-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: movq %rax, %r12
; AVX512-NEXT: movq %rdx, %r13
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovupd {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: movl $0, %eax
; AVX512-NEXT: cmovbq %rax, %r13
; AVX512-NEXT: cmovbq %rax, %r12
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rax
; AVX512-NEXT: cmovaq %rax, %r12
; AVX512-NEXT: cmovaq %rax, %r13
; AVX512-NEXT: vmovapd (%rsp), %xmm0 # 16-byte Reload
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunsdfti@PLT
; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovapd (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomisd %xmm0, %xmm1
; AVX512-NEXT: movl $0, %ecx
; AVX512-NEXT: cmovbq %rcx, %rdx
; AVX512-NEXT: cmovbq %rcx, %rax
; AVX512-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rcx
; AVX512-NEXT: cmovaq %rcx, %rax
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: movq %rdx, 104(%rbx)
; AVX512-NEXT: movq %rax, 96(%rbx)
; AVX512-NEXT: movq %r13, 72(%rbx)
; AVX512-NEXT: movq %r12, 64(%rbx)
; AVX512-NEXT: movq %r15, 40(%rbx)
; AVX512-NEXT: movq %r14, 32(%rbx)
; AVX512-NEXT: movq %rbp, 8(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, (%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 120(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 112(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 88(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 80(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 56(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 48(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 24(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 16(%rbx)
; AVX512-NEXT: movq %rbx, %rax
; AVX512-NEXT: addq $216, %rsp
; AVX512-NEXT: popq %rbx
; AVX512-NEXT: popq %r12
; AVX512-NEXT: popq %r13
; AVX512-NEXT: popq %r14
; AVX512-NEXT: popq %r15
; AVX512-NEXT: popq %rbp
; AVX512-NEXT: retq
%x = call <8 x i128> @llvm.fptoui.sat.v8i128.v8f64(<8 x double> %f)
ret <8 x i128> %x
}
;
; 16-bit float to unsigned integer
;
define <32 x i1> @test_unsigned_v32i1_v32f16(<32 x half> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v32i1_v32f16:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm3
; AVX512F-NEXT: vpsrld $16, %xmm3, %xmm1
; AVX512F-NEXT: vcvtph2ps %xmm1, %xmm2
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vmaxss %xmm1, %xmm2, %xmm4
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm4
; AVX512F-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm4
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm3, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vextracti128 $1, %ymm3, %xmm3
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrld $16, %xmm3, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm3, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $14, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm3 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512F-NEXT: vmaxss %xmm1, %xmm3, %xmm3
; AVX512F-NEXT: vminss %xmm2, %xmm3, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm4, %xmm3
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm4
; AVX512F-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512F-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm4
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %ecx
; AVX512F-NEXT: vpbroadcastd {{.*#+}} zmm5 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpmovzxbd {{.*#+}} zmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero,xmm3[4],zero,zero,zero,xmm3[5],zero,zero,zero,xmm3[6],zero,zero,zero,xmm3[7],zero,zero,zero,xmm3[8],zero,zero,zero,xmm3[9],zero,zero,zero,xmm3[10],zero,zero,zero,xmm3[11],zero,zero,zero,xmm3[12],zero,zero,zero,xmm3[13],zero,zero,zero,xmm3[14],zero,zero,zero,xmm3[15],zero,zero,zero
; AVX512F-NEXT: vpinsrb $14, %ecx, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmaxss %xmm1, %xmm0, %xmm0
; AVX512F-NEXT: vminss %xmm2, %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm4, %xmm0
; AVX512F-NEXT: vptestmd %zmm5, %zmm3, %k1
; AVX512F-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
; AVX512F-NEXT: vptestmd %zmm5, %zmm0, %k2
; AVX512F-NEXT: vpternlogd {{.*#+}} zmm0 {%k2} {z} = -1
; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
; AVX512F-NEXT: vpternlogd {{.*#+}} zmm1 {%k1} {z} = -1
; AVX512F-NEXT: vpmovdb %zmm1, %xmm1
; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v32i1_v32f16:
; AVX512: # %bb.0:
; AVX512-NEXT: vextracti32x4 $2, %zmm0, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm3, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm4
; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm4
; AVX512-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrlq $48, %xmm3, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm3 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512-NEXT: vmaxss %xmm1, %xmm3, %xmm3
; AVX512-NEXT: vminss %xmm2, %xmm3, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm4, %xmm3
; AVX512-NEXT: vextracti32x4 $3, %zmm0, %xmm4
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm4, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrlq $48, %xmm4, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm4[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm4[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrldq {{.*#+}} xmm4 = xmm4[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm4
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm4
; AVX512-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm4, %xmm4
; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmaxss %xmm1, %xmm0, %xmm0
; AVX512-NEXT: vminss %xmm2, %xmm0, %xmm0
; AVX512-NEXT: vcvttss2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm4, %xmm0
; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
; AVX512-NEXT: vptestmb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %k0
; AVX512-NEXT: vpmovm2b %k0, %ymm0
; AVX512-NEXT: retq
%x = call <32 x i1> @llvm.fptoui.sat.v32i1.v32f16(<32 x half> %f)
ret <32 x i1> %x
}
define <32 x i8> @test_unsigned_v32i8_v32f16(<32 x half> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v32i8_v32f16:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextracti32x4 $2, %zmm0, %xmm3
; AVX512F-NEXT: vpsrld $16, %xmm3, %xmm1
; AVX512F-NEXT: vcvtph2ps %xmm1, %xmm2
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vmaxss %xmm1, %xmm2, %xmm4
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm4
; AVX512F-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm4
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm3, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm3 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512F-NEXT: vmaxss %xmm1, %xmm3, %xmm3
; AVX512F-NEXT: vminss %xmm2, %xmm3, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vextracti32x4 $3, %zmm0, %xmm3
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrld $16, %xmm3, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm3, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $14, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm3 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512F-NEXT: vmaxss %xmm1, %xmm3, %xmm3
; AVX512F-NEXT: vminss %xmm2, %xmm3, %xmm3
; AVX512F-NEXT: vcvttss2si %xmm3, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm4, %xmm3
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm4
; AVX512F-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512F-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %eax
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm4
; AVX512F-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512F-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2si %xmm4, %ecx
; AVX512F-NEXT: vmovd %ecx, %xmm4
; AVX512F-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $7, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $8, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $9, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $10, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $11, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $12, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $13, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512F-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2si %xmm5, %eax
; AVX512F-NEXT: vpinsrb $14, %eax, %xmm4, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmaxss %xmm1, %xmm0, %xmm0
; AVX512F-NEXT: vminss %xmm2, %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2si %xmm0, %eax
; AVX512F-NEXT: vpinsrb $15, %eax, %xmm4, %xmm0
; AVX512F-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v32i8_v32f16:
; AVX512: # %bb.0:
; AVX512-NEXT: vextracti32x4 $2, %zmm0, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm3, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm2
; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vmaxss %xmm1, %xmm2, %xmm4
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [2.55E+2,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm4
; AVX512-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrlq $48, %xmm3, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm3 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512-NEXT: vmaxss %xmm1, %xmm3, %xmm3
; AVX512-NEXT: vminss %xmm2, %xmm3, %xmm3
; AVX512-NEXT: vcvttss2si %xmm3, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm4, %xmm3
; AVX512-NEXT: vextracti32x4 $3, %zmm0, %xmm4
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm4, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm3, %xmm3
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm4[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrlq $48, %xmm4, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm4[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm4[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm4[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrldq {{.*#+}} xmm4 = xmm4[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm3, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm4
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %eax
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm4
; AVX512-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; AVX512-NEXT: vminss %xmm2, %xmm4, %xmm4
; AVX512-NEXT: vcvttss2si %xmm4, %ecx
; AVX512-NEXT: vmovd %ecx, %xmm4
; AVX512-NEXT: vpinsrb $1, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $2, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $3, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $4, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $5, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $6, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $7, %eax, %xmm4, %xmm4
; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $8, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $9, %eax, %xmm4, %xmm4
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $10, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $11, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $12, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $13, %eax, %xmm4, %xmm4
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; AVX512-NEXT: vminss %xmm2, %xmm5, %xmm5
; AVX512-NEXT: vcvttss2si %xmm5, %eax
; AVX512-NEXT: vpinsrb $14, %eax, %xmm4, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmaxss %xmm1, %xmm0, %xmm0
; AVX512-NEXT: vminss %xmm2, %xmm0, %xmm0
; AVX512-NEXT: vcvttss2si %xmm0, %eax
; AVX512-NEXT: vpinsrb $15, %eax, %xmm4, %xmm0
; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
; AVX512-NEXT: retq
%x = call <32 x i8> @llvm.fptoui.sat.v32i8.v32f16(<32 x half> %f)
ret <32 x i8> %x
}
define <32 x i16> @test_unsigned_v32i16_v32f16(<32 x half> %f) nounwind {
; CHECK-LABEL: test_unsigned_v32i16_v32f16:
; CHECK: # %bb.0:
; CHECK-NEXT: vextracti32x4 $3, %zmm0, %xmm3
; CHECK-NEXT: vpsrld $16, %xmm3, %xmm1
; CHECK-NEXT: vcvtph2ps %xmm1, %xmm2
; CHECK-NEXT: vpxor %xmm1, %xmm1, %xmm1
; CHECK-NEXT: vmaxss %xmm1, %xmm2, %xmm4
; CHECK-NEXT: vmovss {{.*#+}} xmm2 = [6.5535E+4,0.0E+0,0.0E+0,0.0E+0]
; CHECK-NEXT: vminss %xmm2, %xmm4, %xmm4
; CHECK-NEXT: vcvttss2si %xmm4, %eax
; CHECK-NEXT: vcvtph2ps %xmm3, %xmm4
; CHECK-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; CHECK-NEXT: vminss %xmm2, %xmm4, %xmm4
; CHECK-NEXT: vcvttss2si %xmm4, %ecx
; CHECK-NEXT: vmovd %ecx, %xmm4
; CHECK-NEXT: vpinsrw $1, %eax, %xmm4, %xmm4
; CHECK-NEXT: vmovshdup {{.*#+}} xmm5 = xmm3[1,1,3,3]
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vpinsrw $2, %eax, %xmm4, %xmm4
; CHECK-NEXT: vpsrlq $48, %xmm3, %xmm5
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vpinsrw $3, %eax, %xmm4, %xmm4
; CHECK-NEXT: vshufpd {{.*#+}} xmm5 = xmm3[1,0]
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vpinsrw $4, %eax, %xmm4, %xmm4
; CHECK-NEXT: vpsrldq {{.*#+}} xmm5 = xmm3[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vpinsrw $5, %eax, %xmm4, %xmm4
; CHECK-NEXT: vshufps {{.*#+}} xmm5 = xmm3[3,3,3,3]
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vpinsrw $6, %eax, %xmm4, %xmm4
; CHECK-NEXT: vpsrldq {{.*#+}} xmm3 = xmm3[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm3, %xmm3
; CHECK-NEXT: vmaxss %xmm1, %xmm3, %xmm3
; CHECK-NEXT: vminss %xmm2, %xmm3, %xmm3
; CHECK-NEXT: vcvttss2si %xmm3, %eax
; CHECK-NEXT: vpinsrw $7, %eax, %xmm4, %xmm3
; CHECK-NEXT: vextracti32x4 $2, %zmm0, %xmm4
; CHECK-NEXT: vpsrld $16, %xmm4, %xmm5
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %ecx
; CHECK-NEXT: vmovd %ecx, %xmm5
; CHECK-NEXT: vpinsrw $1, %eax, %xmm5, %xmm5
; CHECK-NEXT: vmovshdup {{.*#+}} xmm6 = xmm4[1,1,3,3]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vpinsrw $2, %eax, %xmm5, %xmm5
; CHECK-NEXT: vpsrlq $48, %xmm4, %xmm6
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vpinsrw $3, %eax, %xmm5, %xmm5
; CHECK-NEXT: vshufpd {{.*#+}} xmm6 = xmm4[1,0]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vpinsrw $4, %eax, %xmm5, %xmm5
; CHECK-NEXT: vpsrldq {{.*#+}} xmm6 = xmm4[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vpinsrw $5, %eax, %xmm5, %xmm5
; CHECK-NEXT: vshufps {{.*#+}} xmm6 = xmm4[3,3,3,3]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vpinsrw $6, %eax, %xmm5, %xmm5
; CHECK-NEXT: vpsrldq {{.*#+}} xmm4 = xmm4[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm4
; CHECK-NEXT: vmaxss %xmm1, %xmm4, %xmm4
; CHECK-NEXT: vminss %xmm2, %xmm4, %xmm4
; CHECK-NEXT: vcvttss2si %xmm4, %eax
; CHECK-NEXT: vpinsrw $7, %eax, %xmm5, %xmm4
; CHECK-NEXT: vextracti128 $1, %ymm0, %xmm5
; CHECK-NEXT: vpsrld $16, %xmm5, %xmm6
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %ecx
; CHECK-NEXT: vmovshdup {{.*#+}} xmm6 = xmm5[1,1,3,3]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %edx
; CHECK-NEXT: vpsrlq $48, %xmm5, %xmm6
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %esi
; CHECK-NEXT: vshufpd {{.*#+}} xmm6 = xmm5[1,0]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %edi
; CHECK-NEXT: vpsrldq {{.*#+}} xmm6 = xmm5[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %r8d
; CHECK-NEXT: vshufps {{.*#+}} xmm6 = xmm5[3,3,3,3]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %r9d
; CHECK-NEXT: vmovd %ecx, %xmm6
; CHECK-NEXT: vpinsrw $1, %eax, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $2, %edx, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $3, %esi, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $4, %edi, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $5, %r8d, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $6, %r9d, %xmm6, %xmm6
; CHECK-NEXT: vpsrldq {{.*#+}} xmm5 = xmm5[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
; CHECK-NEXT: vmaxss %xmm1, %xmm5, %xmm5
; CHECK-NEXT: vminss %xmm2, %xmm5, %xmm5
; CHECK-NEXT: vcvttss2si %xmm5, %eax
; CHECK-NEXT: vpinsrw $7, %eax, %xmm6, %xmm5
; CHECK-NEXT: vpsrld $16, %xmm0, %xmm6
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %eax
; CHECK-NEXT: vcvtph2ps %xmm0, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %ecx
; CHECK-NEXT: vmovshdup {{.*#+}} xmm6 = xmm0[1,1,3,3]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %edx
; CHECK-NEXT: vpsrlq $48, %xmm0, %xmm6
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %esi
; CHECK-NEXT: vshufpd {{.*#+}} xmm6 = xmm0[1,0]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %edi
; CHECK-NEXT: vpsrldq {{.*#+}} xmm6 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %r8d
; CHECK-NEXT: vshufps {{.*#+}} xmm6 = xmm0[3,3,3,3]
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm6
; CHECK-NEXT: vmaxss %xmm1, %xmm6, %xmm6
; CHECK-NEXT: vminss %xmm2, %xmm6, %xmm6
; CHECK-NEXT: vcvttss2si %xmm6, %r9d
; CHECK-NEXT: vmovd %ecx, %xmm6
; CHECK-NEXT: vpinsrw $1, %eax, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $2, %edx, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $3, %esi, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $4, %edi, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $5, %r8d, %xmm6, %xmm6
; CHECK-NEXT: vpinsrw $6, %r9d, %xmm6, %xmm6
; CHECK-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm3
; CHECK-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; CHECK-NEXT: vcvtph2ps %xmm0, %xmm0
; CHECK-NEXT: vmaxss %xmm1, %xmm0, %xmm0
; CHECK-NEXT: vminss %xmm2, %xmm0, %xmm0
; CHECK-NEXT: vcvttss2si %xmm0, %eax
; CHECK-NEXT: vpinsrw $7, %eax, %xmm6, %xmm0
; CHECK-NEXT: vinserti128 $1, %xmm5, %ymm0, %ymm0
; CHECK-NEXT: vinserti64x4 $1, %ymm3, %zmm0, %zmm0
; CHECK-NEXT: retq
%x = call <32 x i16> @llvm.fptoui.sat.v32i16.v32f16(<32 x half> %f)
ret <32 x i16> %x
}
define <32 x i32> @test_unsigned_v32i32_v32f16(<32 x half> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v32i32_v32f16:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm1 = xmm4[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm1, %xmm3
; AVX512F-NEXT: vcvttss2usi %xmm3, %edx
; AVX512F-NEXT: xorl %eax, %eax
; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vmovss {{.*#+}} xmm2 = [4.29496704E+9,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: movl $-1, %ecx
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm3 = xmm4[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512F-NEXT: vcvttss2usi %xmm3, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm3
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm3
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm3
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm3, %xmm3
; AVX512F-NEXT: vshufps {{.*#+}} xmm5 = xmm4[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm3, %xmm3
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm4[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm3, %xmm3
; AVX512F-NEXT: vpsrld $16, %xmm4, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vcvtph2ps %xmm4, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm5
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm5, %xmm5
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm6 = xmm4[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm5, %xmm5
; AVX512F-NEXT: vpsrlq $48, %xmm4, %xmm4
; AVX512F-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2usi %xmm4, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm5, %xmm4
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm5
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm5
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm5
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm5, %xmm5
; AVX512F-NEXT: vshufps {{.*#+}} xmm6 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm5, %xmm5
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm6 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm5, %xmm5
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm6
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm6
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm6
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm6
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm6, %xmm6
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm7 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm7
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm7
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm7
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm7
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm7
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm6, %xmm6
; AVX512F-NEXT: vpinsrd $3, %esi, %xmm6, %xmm7
; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm6
; AVX512F-NEXT: vextracti128 $1, %ymm6, %xmm0
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm8 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512F-NEXT: vcvttss2usi %xmm8, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm8
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm8
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm8 = xmm0[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512F-NEXT: vcvttss2usi %xmm8, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm8
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm8
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm8
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm8, %xmm8
; AVX512F-NEXT: vshufps {{.*#+}} xmm9 = xmm0[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512F-NEXT: vcvttss2usi %xmm9, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm9
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm9
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm8, %xmm8
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm9 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512F-NEXT: vcvttss2usi %xmm9, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm9
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm9
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm8, %xmm8
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm9
; AVX512F-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512F-NEXT: vcvttss2usi %xmm9, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm9
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm9
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm9
; AVX512F-NEXT: vcvttss2usi %xmm9, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm9
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm9
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm9
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm9, %xmm9
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm10 = xmm0[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm10, %xmm10
; AVX512F-NEXT: vcvttss2usi %xmm10, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm10
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm10
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm9, %xmm9
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm9, %xmm9
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm6[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm0 = xmm6[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %esi
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm0
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm0, %xmm0
; AVX512F-NEXT: vshufps {{.*#+}} xmm10 = xmm6[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm10, %xmm10
; AVX512F-NEXT: vcvttss2usi %xmm10, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm10
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm10
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm0, %xmm0
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm10 = xmm6[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm10, %xmm10
; AVX512F-NEXT: vcvttss2usi %xmm10, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm10
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm10
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm0, %xmm10
; AVX512F-NEXT: vpsrld $16, %xmm6, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %edx
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %esi
; AVX512F-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm3
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %esi
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %esi
; AVX512F-NEXT: vmovd %esi, %xmm0
; AVX512F-NEXT: vpinsrd $1, %edx, %xmm0, %xmm4
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm6[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %edx
; AVX512F-NEXT: vinserti128 $1, %xmm5, %ymm7, %ymm5
; AVX512F-NEXT: vucomiss %xmm1, %xmm0
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm0
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vinserti64x4 $1, %ymm3, %zmm5, %zmm0
; AVX512F-NEXT: vpinsrd $2, %edx, %xmm4, %xmm3
; AVX512F-NEXT: vpsrlq $48, %xmm6, %xmm4
; AVX512F-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512F-NEXT: vcvttss2usi %xmm4, %edx
; AVX512F-NEXT: vinserti128 $1, %xmm8, %ymm9, %ymm5
; AVX512F-NEXT: vucomiss %xmm1, %xmm4
; AVX512F-NEXT: cmovbl %eax, %edx
; AVX512F-NEXT: vucomiss %xmm2, %xmm4
; AVX512F-NEXT: cmoval %ecx, %edx
; AVX512F-NEXT: vpinsrd $3, %edx, %xmm3, %xmm1
; AVX512F-NEXT: vinserti128 $1, %xmm10, %ymm1, %ymm1
; AVX512F-NEXT: vinserti64x4 $1, %ymm5, %zmm1, %zmm1
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v32i32_v32f16:
; AVX512: # %bb.0:
; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm1 = xmm4[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm3
; AVX512-NEXT: vcvttss2usi %xmm3, %edx
; AVX512-NEXT: xorl %eax, %eax
; AVX512-NEXT: vxorpd %xmm1, %xmm1, %xmm1
; AVX512-NEXT: vucomiss %xmm1, %xmm3
; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [4.29496704E+9,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm3
; AVX512-NEXT: movl $-1, %ecx
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vshufpd {{.*#+}} xmm3 = xmm4[1,0]
; AVX512-NEXT: vcvtph2ps %xmm3, %xmm3
; AVX512-NEXT: vcvttss2usi %xmm3, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm3
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm3
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm3
; AVX512-NEXT: vpinsrd $1, %edx, %xmm3, %xmm3
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm4[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm3, %xmm3
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm4[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm3, %xmm3
; AVX512-NEXT: vpsrld $16, %xmm4, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm5
; AVX512-NEXT: vpinsrd $1, %edx, %xmm5, %xmm5
; AVX512-NEXT: vmovshdup {{.*#+}} xmm6 = xmm4[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm5, %xmm5
; AVX512-NEXT: vpsrlq $48, %xmm4, %xmm4
; AVX512-NEXT: vcvtph2ps %xmm4, %xmm4
; AVX512-NEXT: vcvttss2usi %xmm4, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm4
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm4
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm5, %xmm4
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vshufpd {{.*#+}} xmm5 = xmm0[1,0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm5
; AVX512-NEXT: vpinsrd $1, %edx, %xmm5, %xmm5
; AVX512-NEXT: vshufps {{.*#+}} xmm6 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm5, %xmm5
; AVX512-NEXT: vpsrldq {{.*#+}} xmm6 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm5, %xmm5
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm6
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm6
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm6
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm6
; AVX512-NEXT: vpinsrd $1, %edx, %xmm6, %xmm6
; AVX512-NEXT: vmovshdup {{.*#+}} xmm7 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm7
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm7
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm6, %xmm6
; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm7
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm7
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm7
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm6, %xmm7
; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm6
; AVX512-NEXT: vextractf128 $1, %ymm6, %xmm0
; AVX512-NEXT: vpsrldq {{.*#+}} xmm8 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm8
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm8
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vshufpd {{.*#+}} xmm8 = xmm0[1,0]
; AVX512-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm8
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm8
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovd %esi, %xmm8
; AVX512-NEXT: vpinsrd $1, %edx, %xmm8, %xmm8
; AVX512-NEXT: vshufps {{.*#+}} xmm9 = xmm0[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512-NEXT: vcvttss2usi %xmm9, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm9
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm9
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $2, %edx, %xmm8, %xmm8
; AVX512-NEXT: vpsrldq {{.*#+}} xmm9 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512-NEXT: vcvttss2usi %xmm9, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm9
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm9
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm8, %xmm8
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm9
; AVX512-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512-NEXT: vcvttss2usi %xmm9, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm9
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm9
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm9
; AVX512-NEXT: vcvttss2usi %xmm9, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm9
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm9
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovshdup {{.*#+}} xmm9 = xmm0[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512-NEXT: vcvttss2usi %xmm9, %edi
; AVX512-NEXT: vucomiss %xmm1, %xmm9
; AVX512-NEXT: cmovbl %eax, %edi
; AVX512-NEXT: vucomiss %xmm2, %xmm9
; AVX512-NEXT: vmovd %esi, %xmm9
; AVX512-NEXT: vpinsrd $1, %edx, %xmm9, %xmm9
; AVX512-NEXT: cmoval %ecx, %edi
; AVX512-NEXT: vpinsrd $2, %edi, %xmm9, %xmm9
; AVX512-NEXT: vpsrlq $48, %xmm0, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm9, %xmm9
; AVX512-NEXT: vpsrldq {{.*#+}} xmm0 = xmm6[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm6[1,0]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm6[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %edi
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %edi
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %edi
; AVX512-NEXT: vpsrldq {{.*#+}} xmm0 = xmm6[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %r8d
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %r8d
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: vmovd %esi, %xmm0
; AVX512-NEXT: vpinsrd $1, %edx, %xmm0, %xmm0
; AVX512-NEXT: vpinsrd $2, %edi, %xmm0, %xmm0
; AVX512-NEXT: cmoval %ecx, %r8d
; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm4, %ymm3
; AVX512-NEXT: vpinsrd $3, %r8d, %xmm0, %xmm4
; AVX512-NEXT: vpsrld $16, %xmm6, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vinserti128 $1, %xmm5, %ymm7, %ymm5
; AVX512-NEXT: vcvttss2usi %xmm0, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %esi
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %esi
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: cmoval %ecx, %esi
; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm6[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %edi
; AVX512-NEXT: vucomiss %xmm1, %xmm0
; AVX512-NEXT: cmovbl %eax, %edi
; AVX512-NEXT: vucomiss %xmm2, %xmm0
; AVX512-NEXT: vmovd %esi, %xmm0
; AVX512-NEXT: vpinsrd $1, %edx, %xmm0, %xmm7
; AVX512-NEXT: cmoval %ecx, %edi
; AVX512-NEXT: vinserti64x4 $1, %ymm3, %zmm5, %zmm0
; AVX512-NEXT: vpinsrd $2, %edi, %xmm7, %xmm3
; AVX512-NEXT: vpsrlq $48, %xmm6, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vinserti128 $1, %xmm8, %ymm9, %ymm6
; AVX512-NEXT: vcvttss2usi %xmm5, %edx
; AVX512-NEXT: vucomiss %xmm1, %xmm5
; AVX512-NEXT: cmovbl %eax, %edx
; AVX512-NEXT: vucomiss %xmm2, %xmm5
; AVX512-NEXT: cmoval %ecx, %edx
; AVX512-NEXT: vpinsrd $3, %edx, %xmm3, %xmm1
; AVX512-NEXT: vinserti128 $1, %xmm4, %ymm1, %ymm1
; AVX512-NEXT: vinserti64x4 $1, %ymm6, %zmm1, %zmm1
; AVX512-NEXT: retq
%x = call <32 x i32> @llvm.fptoui.sat.v32i32.v32f16(<32 x half> %f)
ret <32 x i32> %x
}
define <32 x i64> @test_unsigned_v32i64_v32f16(<32 x half> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v32i64_v32f16:
; AVX512F: # %bb.0:
; AVX512F-NEXT: vmovdqa64 %zmm0, %zmm2
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %rdx
; AVX512F-NEXT: xorl %eax, %eax
; AVX512F-NEXT: vxorps %xmm3, %xmm3, %xmm3
; AVX512F-NEXT: vucomiss %xmm3, %xmm0
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vmovss {{.*#+}} xmm4 = [1.8446743E+19,0.0E+0,0.0E+0,0.0E+0]
; AVX512F-NEXT: vucomiss %xmm4, %xmm0
; AVX512F-NEXT: movq $-1, %rcx
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vcvttss2usi %xmm0, %rsi
; AVX512F-NEXT: vucomiss %xmm3, %xmm0
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm0
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm0
; AVX512F-NEXT: vmovq %rsi, %xmm1
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm5 = xmm2[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm1
; AVX512F-NEXT: vmovq %rsi, %xmm5
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
; AVX512F-NEXT: vpsrlq $48, %xmm2, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vcvtph2ps %xmm2, %xmm1
; AVX512F-NEXT: vcvttss2usi %xmm1, %rdi
; AVX512F-NEXT: vmovq %rdx, %xmm5
; AVX512F-NEXT: vucomiss %xmm3, %xmm1
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm4, %xmm1
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vmovq %rsi, %xmm1
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
; AVX512F-NEXT: vmovq %rdi, %xmm5
; AVX512F-NEXT: vpsrld $16, %xmm2, %xmm6
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovq %rdx, %xmm6
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm5, %ymm5
; AVX512F-NEXT: vextracti128 $1, %ymm2, %xmm1
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm6 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpshufd {{.*#+}} xmm6 = xmm1[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rsi
; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm5, %zmm0
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm5
; AVX512F-NEXT: vmovq %rsi, %xmm6
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm6[0],xmm5[0]
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm6 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vshufpd {{.*#+}} xmm6 = xmm1[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm7
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rsi, %xmm6
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
; AVX512F-NEXT: vinserti128 $1, %xmm5, %ymm6, %ymm5
; AVX512F-NEXT: vpsrlq $48, %xmm1, %xmm6
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm6 = xmm1[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm7
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vcvtph2ps %xmm1, %xmm6
; AVX512F-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm6
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm6
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpsrld $16, %xmm1, %xmm1
; AVX512F-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512F-NEXT: vcvttss2usi %xmm1, %rdi
; AVX512F-NEXT: vmovq %rsi, %xmm6
; AVX512F-NEXT: vucomiss %xmm3, %xmm1
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm4, %xmm1
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm6[0],xmm7[0]
; AVX512F-NEXT: vmovq %rdx, %xmm6
; AVX512F-NEXT: vmovq %rdi, %xmm7
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm6, %ymm1
; AVX512F-NEXT: vinserti64x4 $1, %ymm5, %zmm1, %zmm1
; AVX512F-NEXT: vextracti64x4 $1, %zmm2, %ymm2
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpshufd {{.*#+}} xmm5 = xmm2[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm5 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rdi
; AVX512F-NEXT: vmovq %rdx, %xmm6
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vmovq %rsi, %xmm5
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512F-NEXT: vmovq %rdi, %xmm6
; AVX512F-NEXT: vshufpd {{.*#+}} xmm7 = xmm2[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpsrlq $48, %xmm2, %xmm7
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm8
; AVX512F-NEXT: vucomiss %xmm3, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm8[0],xmm6[0]
; AVX512F-NEXT: vinserti128 $1, %xmm5, %ymm6, %ymm6
; AVX512F-NEXT: vmovq %rsi, %xmm5
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm7 = xmm2[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovq %rdx, %xmm7
; AVX512F-NEXT: vcvtph2ps %xmm2, %xmm8
; AVX512F-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm8
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm8
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpsrld $16, %xmm2, %xmm8
; AVX512F-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512F-NEXT: vcvttss2usi %xmm8, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm5[0]
; AVX512F-NEXT: vucomiss %xmm3, %xmm8
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm8
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm8
; AVX512F-NEXT: vmovq %rsi, %xmm9
; AVX512F-NEXT: vextracti128 $1, %ymm2, %xmm5
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm2 = xmm5[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm2, %xmm2
; AVX512F-NEXT: vcvttss2usi %xmm2, %rdx
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm8 = xmm8[0],xmm9[0]
; AVX512F-NEXT: vucomiss %xmm3, %xmm2
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm2
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vinserti128 $1, %xmm7, %ymm8, %ymm2
; AVX512F-NEXT: vinserti64x4 $1, %ymm6, %zmm2, %zmm2
; AVX512F-NEXT: vmovq %rdx, %xmm6
; AVX512F-NEXT: vpshufd {{.*#+}} xmm7 = xmm5[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm7 = xmm5[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %rsi
; AVX512F-NEXT: vucomiss %xmm3, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vshufpd {{.*#+}} xmm7 = xmm5[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512F-NEXT: vcvttss2usi %xmm7, %rdi
; AVX512F-NEXT: vmovq %rdx, %xmm8
; AVX512F-NEXT: vucomiss %xmm3, %xmm7
; AVX512F-NEXT: cmovbq %rax, %rdi
; AVX512F-NEXT: vucomiss %xmm4, %xmm7
; AVX512F-NEXT: cmovaq %rcx, %rdi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm8[0],xmm6[0]
; AVX512F-NEXT: vmovq %rsi, %xmm7
; AVX512F-NEXT: vmovq %rdi, %xmm8
; AVX512F-NEXT: vpsrlq $48, %xmm5, %xmm9
; AVX512F-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512F-NEXT: vcvttss2usi %xmm9, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm9
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm9
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vmovshdup {{.*#+}} xmm9 = xmm5[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm9, %xmm9
; AVX512F-NEXT: vcvttss2usi %xmm9, %rsi
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm8[0],xmm7[0]
; AVX512F-NEXT: vucomiss %xmm3, %xmm9
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm9
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vinserti128 $1, %xmm6, %ymm7, %ymm6
; AVX512F-NEXT: vmovq %rdx, %xmm7
; AVX512F-NEXT: vmovq %rsi, %xmm8
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm8[0],xmm7[0]
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm8
; AVX512F-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512F-NEXT: vucomiss %xmm3, %xmm8
; AVX512F-NEXT: cmovbq %rax, %rdx
; AVX512F-NEXT: vucomiss %xmm4, %xmm8
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: vpsrld $16, %xmm5, %xmm5
; AVX512F-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512F-NEXT: vcvttss2usi %xmm5, %rsi
; AVX512F-NEXT: vmovq %rdx, %xmm8
; AVX512F-NEXT: vucomiss %xmm3, %xmm5
; AVX512F-NEXT: cmovbq %rax, %rsi
; AVX512F-NEXT: vucomiss %xmm4, %xmm5
; AVX512F-NEXT: cmovaq %rcx, %rsi
; AVX512F-NEXT: vmovq %rsi, %xmm3
; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm8[0],xmm3[0]
; AVX512F-NEXT: vinserti128 $1, %xmm7, %ymm3, %ymm3
; AVX512F-NEXT: vinserti64x4 $1, %ymm6, %zmm3, %zmm3
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v32i64_v32f16:
; AVX512: # %bb.0:
; AVX512-NEXT: vmovapd %zmm0, %zmm2
; AVX512-NEXT: vpsrldq {{.*#+}} xmm0 = xmm2[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vcvttss2usi %xmm0, %rdx
; AVX512-NEXT: xorl %eax, %eax
; AVX512-NEXT: vxorps %xmm3, %xmm3, %xmm3
; AVX512-NEXT: vucomiss %xmm3, %xmm0
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vmovss {{.*#+}} xmm4 = [1.8446743E+19,0.0E+0,0.0E+0,0.0E+0]
; AVX512-NEXT: vucomiss %xmm4, %xmm0
; AVX512-NEXT: movq $-1, %rcx
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm0
; AVX512-NEXT: vshufps {{.*#+}} xmm1 = xmm2[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512-NEXT: vcvttss2usi %xmm1, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm1
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm1
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm1
; AVX512-NEXT: vpsrldq {{.*#+}} xmm5 = xmm2[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vshufpd {{.*#+}} xmm1 = xmm2[1,0]
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm1, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm1
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm1
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm1
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm5[0]
; AVX512-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
; AVX512-NEXT: vpsrlq $48, %xmm2, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512-NEXT: vcvttss2usi %xmm1, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm1
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm1
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm1
; AVX512-NEXT: vmovshdup {{.*#+}} xmm5 = xmm2[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]
; AVX512-NEXT: vcvtph2ps %xmm2, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vpsrld $16, %xmm2, %xmm6
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm5, %ymm5
; AVX512-NEXT: vextractf128 $1, %ymm2, %xmm1
; AVX512-NEXT: vpsrldq {{.*#+}} xmm6 = xmm1[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vinserti64x4 $1, %ymm0, %zmm5, %zmm0
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vshufps {{.*#+}} xmm5 = xmm1[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm5
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]
; AVX512-NEXT: vpsrldq {{.*#+}} xmm6 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vshufpd {{.*#+}} xmm7 = xmm1[1,0]
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm7[0],xmm6[0]
; AVX512-NEXT: vpsrlq $48, %xmm1, %xmm7
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512-NEXT: vinserti128 $1, %xmm5, %ymm6, %ymm5
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovshdup {{.*#+}} xmm6 = xmm1[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rsi, %xmm6
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]
; AVX512-NEXT: vucomiss %xmm3, %xmm8
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm8
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vpsrld $16, %xmm1, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm1
; AVX512-NEXT: vcvttss2usi %xmm1, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vucomiss %xmm3, %xmm1
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm4, %xmm1
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rsi, %xmm1
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm7[0],xmm1[0]
; AVX512-NEXT: vinserti128 $1, %xmm6, %ymm1, %ymm1
; AVX512-NEXT: vinserti64x4 $1, %ymm5, %zmm1, %zmm1
; AVX512-NEXT: vextractf64x4 $1, %zmm2, %ymm5
; AVX512-NEXT: vpsrldq {{.*#+}} xmm2 = xmm5[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm2, %xmm2
; AVX512-NEXT: vcvttss2usi %xmm2, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm2
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm2
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm2
; AVX512-NEXT: vshufps {{.*#+}} xmm6 = xmm5[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm6[0],xmm2[0]
; AVX512-NEXT: vpsrldq {{.*#+}} xmm6 = xmm5[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vshufpd {{.*#+}} xmm7 = xmm5[1,0]
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vpsrlq $48, %xmm5, %xmm8
; AVX512-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm7[0],xmm6[0]
; AVX512-NEXT: vucomiss %xmm3, %xmm8
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm8
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovshdup {{.*#+}} xmm7 = xmm5[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rsi
; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm6, %ymm2
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512-NEXT: vmovq %rsi, %xmm8
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vpsrld $16, %xmm5, %xmm7
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rsi
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm8[0],xmm6[0]
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vmovq %rsi, %xmm8
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm8[0]
; AVX512-NEXT: vinserti128 $1, %xmm6, %ymm7, %ymm6
; AVX512-NEXT: vinserti64x4 $1, %ymm2, %zmm6, %zmm2
; AVX512-NEXT: vextractf128 $1, %ymm5, %xmm5
; AVX512-NEXT: vpsrldq {{.*#+}} xmm6 = xmm5[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm6, %xmm6
; AVX512-NEXT: vcvttss2usi %xmm6, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm6
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm6
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm6
; AVX512-NEXT: vshufps {{.*#+}} xmm7 = xmm5[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vpsrldq {{.*#+}} xmm8 = xmm5[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm6 = xmm7[0],xmm6[0]
; AVX512-NEXT: vucomiss %xmm3, %xmm8
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm8
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vshufpd {{.*#+}} xmm7 = xmm5[1,0]
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rsi
; AVX512-NEXT: vmovq %rdx, %xmm8
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rsi
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rsi
; AVX512-NEXT: vmovq %rsi, %xmm7
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm8[0]
; AVX512-NEXT: vinserti128 $1, %xmm6, %ymm7, %ymm6
; AVX512-NEXT: vpsrlq $48, %xmm5, %xmm7
; AVX512-NEXT: vcvtph2ps %xmm7, %xmm7
; AVX512-NEXT: vcvttss2usi %xmm7, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm7
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm7
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm7
; AVX512-NEXT: vmovshdup {{.*#+}} xmm8 = xmm5[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm8, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm8
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm8
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm8
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm7 = xmm8[0],xmm7[0]
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm8
; AVX512-NEXT: vcvttss2usi %xmm8, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm8
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm8
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm8
; AVX512-NEXT: vpsrld $16, %xmm5, %xmm5
; AVX512-NEXT: vcvtph2ps %xmm5, %xmm5
; AVX512-NEXT: vcvttss2usi %xmm5, %rdx
; AVX512-NEXT: vucomiss %xmm3, %xmm5
; AVX512-NEXT: cmovbq %rax, %rdx
; AVX512-NEXT: vucomiss %xmm4, %xmm5
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: vmovq %rdx, %xmm3
; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm8[0],xmm3[0]
; AVX512-NEXT: vinserti128 $1, %xmm7, %ymm3, %ymm3
; AVX512-NEXT: vinserti64x4 $1, %ymm6, %zmm3, %zmm3
; AVX512-NEXT: retq
%x = call <32 x i64> @llvm.fptoui.sat.v32i64.v32f16(<32 x half> %f)
ret <32 x i64> %x
}
define <32 x i128> @test_unsigned_v32i128_v32f16(<32 x half> %f) nounwind {
; AVX512F-LABEL: test_unsigned_v32i128_v32f16:
; AVX512F: # %bb.0:
; AVX512F-NEXT: pushq %rbp
; AVX512F-NEXT: pushq %r15
; AVX512F-NEXT: pushq %r14
; AVX512F-NEXT: pushq %r13
; AVX512F-NEXT: pushq %r12
; AVX512F-NEXT: pushq %rbx
; AVX512F-NEXT: subq $648, %rsp # imm = 0x288
; AVX512F-NEXT: vmovdqu64 %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
; AVX512F-NEXT: movq %rdi, %rbx
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm1
; AVX512F-NEXT: vcvtph2ps %xmm1, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: xorl %r14d, %r14d
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %r15
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm0
; AVX512F-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512F-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill
; AVX512F-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
; AVX512F-NEXT: vpsrlq $48, %xmm0, %xmm0
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[1,0]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
; AVX512F-NEXT: vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512F-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rdx
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %rdx
; AVX512F-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: movq %rdx, %r12
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %r12
; AVX512F-NEXT: cmovbq %r14, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %rax
; AVX512F-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512F-NEXT: cmovaq %r15, %r12
; AVX512F-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: movq %rax, %r13
; AVX512F-NEXT: movq %rdx, %rbp
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: cmovbq %r14, %rbp
; AVX512F-NEXT: cmovbq %r14, %r13
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: cmovaq %r15, %r13
; AVX512F-NEXT: cmovaq %r15, %rbp
; AVX512F-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: movq %rax, %r14
; AVX512F-NEXT: movq %rdx, %r15
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: movl $0, %eax
; AVX512F-NEXT: cmovbq %rax, %r15
; AVX512F-NEXT: cmovbq %rax, %r14
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rax
; AVX512F-NEXT: cmovaq %rax, %r14
; AVX512F-NEXT: cmovaq %rax, %r15
; AVX512F-NEXT: vcvtph2ps (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512F-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512F-NEXT: callq __fixunssfti@PLT
; AVX512F-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512F-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512F-NEXT: vucomiss %xmm0, %xmm1
; AVX512F-NEXT: movl $0, %ecx
; AVX512F-NEXT: cmovbq %rcx, %rdx
; AVX512F-NEXT: cmovbq %rcx, %rax
; AVX512F-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512F-NEXT: movq $-1, %rcx
; AVX512F-NEXT: cmovaq %rcx, %rax
; AVX512F-NEXT: cmovaq %rcx, %rdx
; AVX512F-NEXT: movq %rdx, 392(%rbx)
; AVX512F-NEXT: movq %rax, 384(%rbx)
; AVX512F-NEXT: movq %r15, 264(%rbx)
; AVX512F-NEXT: movq %r14, 256(%rbx)
; AVX512F-NEXT: movq %rbp, 136(%rbx)
; AVX512F-NEXT: movq %r13, 128(%rbx)
; AVX512F-NEXT: movq %r12, 8(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, (%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 504(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 496(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 488(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 480(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 472(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 464(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 456(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 448(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 440(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 432(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 424(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 416(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 408(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 400(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 376(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 368(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 360(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 352(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 344(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 336(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 328(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 320(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 312(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 304(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 296(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 288(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 280(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 272(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 248(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 240(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 232(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 224(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 216(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 208(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 200(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 192(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 184(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 176(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 168(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 160(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 152(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 144(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 120(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 112(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 104(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 96(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 88(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 80(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 72(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 64(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 56(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 48(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 40(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 32(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 24(%rbx)
; AVX512F-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512F-NEXT: movq %rax, 16(%rbx)
; AVX512F-NEXT: movq %rbx, %rax
; AVX512F-NEXT: addq $648, %rsp # imm = 0x288
; AVX512F-NEXT: popq %rbx
; AVX512F-NEXT: popq %r12
; AVX512F-NEXT: popq %r13
; AVX512F-NEXT: popq %r14
; AVX512F-NEXT: popq %r15
; AVX512F-NEXT: popq %rbp
; AVX512F-NEXT: retq
;
; AVX512-LABEL: test_unsigned_v32i128_v32f16:
; AVX512: # %bb.0:
; AVX512-NEXT: pushq %rbp
; AVX512-NEXT: pushq %r15
; AVX512-NEXT: pushq %r14
; AVX512-NEXT: pushq %r13
; AVX512-NEXT: pushq %r12
; AVX512-NEXT: pushq %rbx
; AVX512-NEXT: subq $648, %rsp # imm = 0x288
; AVX512-NEXT: vmovdqu64 %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
; AVX512-NEXT: movq %rdi, %rbx
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm1
; AVX512-NEXT: vcvtph2ps %xmm1, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: xorl %r14d, %r14d
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %r15
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
; AVX512-NEXT: vextracti64x4 $1, %zmm0, %ymm0
; AVX512-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrlq $48, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $10, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $14, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps (%rsp), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0
; AVX512-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill
; AVX512-NEXT: vpsrld $16, %xmm0, %xmm0
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: vzeroupper
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vmovshdup (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,1,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrlq $48, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[1,0]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $10, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[3,3,3,3]
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vpsrldq $14, (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: # xmm0 = mem[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
; AVX512-NEXT: vcvtph2ps %xmm0, %xmm0
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rdx
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %rdx
; AVX512-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: movq %rdx, %r12
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %r12
; AVX512-NEXT: cmovbq %r14, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %rax
; AVX512-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX512-NEXT: cmovaq %r15, %r12
; AVX512-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: movq %rax, %r13
; AVX512-NEXT: movq %rdx, %rbp
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: cmovbq %r14, %rbp
; AVX512-NEXT: cmovbq %r14, %r13
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: cmovaq %r15, %r13
; AVX512-NEXT: cmovaq %r15, %rbp
; AVX512-NEXT: vcvtph2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: movq %rax, %r14
; AVX512-NEXT: movq %rdx, %r15
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: movl $0, %eax
; AVX512-NEXT: cmovbq %rax, %r15
; AVX512-NEXT: cmovbq %rax, %r14
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rax
; AVX512-NEXT: cmovaq %rax, %r14
; AVX512-NEXT: cmovaq %rax, %r15
; AVX512-NEXT: vcvtph2ps (%rsp), %xmm0 # 16-byte Folded Reload
; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; AVX512-NEXT: callq __fixunssfti@PLT
; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
; AVX512-NEXT: vucomiss %xmm0, %xmm1
; AVX512-NEXT: movl $0, %ecx
; AVX512-NEXT: cmovbq %rcx, %rdx
; AVX512-NEXT: cmovbq %rcx, %rax
; AVX512-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; AVX512-NEXT: movq $-1, %rcx
; AVX512-NEXT: cmovaq %rcx, %rax
; AVX512-NEXT: cmovaq %rcx, %rdx
; AVX512-NEXT: movq %rdx, 392(%rbx)
; AVX512-NEXT: movq %rax, 384(%rbx)
; AVX512-NEXT: movq %r15, 264(%rbx)
; AVX512-NEXT: movq %r14, 256(%rbx)
; AVX512-NEXT: movq %rbp, 136(%rbx)
; AVX512-NEXT: movq %r13, 128(%rbx)
; AVX512-NEXT: movq %r12, 8(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, (%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 504(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 496(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 488(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 480(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 472(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 464(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 456(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 448(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 440(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 432(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 424(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 416(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 408(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 400(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 376(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 368(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 360(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 352(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 344(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 336(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 328(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 320(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 312(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 304(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 296(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 288(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 280(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 272(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 248(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 240(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 232(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 224(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 216(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 208(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 200(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 192(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 184(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 176(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 168(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 160(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 152(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 144(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 120(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 112(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 104(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 96(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 88(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 80(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 72(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 64(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 56(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 48(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 40(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 32(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 24(%rbx)
; AVX512-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
; AVX512-NEXT: movq %rax, 16(%rbx)
; AVX512-NEXT: movq %rbx, %rax
; AVX512-NEXT: addq $648, %rsp # imm = 0x288
; AVX512-NEXT: popq %rbx
; AVX512-NEXT: popq %r12
; AVX512-NEXT: popq %r13
; AVX512-NEXT: popq %r14
; AVX512-NEXT: popq %r15
; AVX512-NEXT: popq %rbp
; AVX512-NEXT: retq
%x = call <32 x i128> @llvm.fptoui.sat.v32i128.v32f16(<32 x half> %f)
ret <32 x i128> %x
}