brintos

brintos / llvm-project-archived public Read only

0
0
Text · 249.4 KiB · 01159d4 Raw
5180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx -verify-machineinstrs | FileCheck %s --check-prefixes=AVX,AVX13; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx2 -verify-machineinstrs | FileCheck %s --check-prefixes=AVX,AVX24; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+f16c -verify-machineinstrs | FileCheck %s --check-prefixes=F16C5; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+f16c -verify-machineinstrs | FileCheck %s --check-prefixes=F16C6; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+f16c,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=F16C7; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+f16c,+fast-variable-perlane-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=F16C8; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f -verify-machineinstrs | FileCheck %s --check-prefixes=AVX512,AVX512F9; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=AVX512,AVX512-FASTLANE10; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+fast-variable-perlane-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=AVX512,AVX512-FASTLANE11 12;13; Half to Float14;15 16define float @cvt_i16_to_f32(i16 %a0) nounwind {17; AVX-LABEL: cvt_i16_to_f32:18; AVX:       # %bb.0:19; AVX-NEXT:    vpinsrw $0, %edi, %xmm0, %xmm020; AVX-NEXT:    jmp __extendhfsf2@PLT # TAILCALL21;22; F16C-LABEL: cvt_i16_to_f32:23; F16C:       # %bb.0:24; F16C-NEXT:    vmovd %edi, %xmm025; F16C-NEXT:    vcvtph2ps %xmm0, %xmm026; F16C-NEXT:    retq27;28; AVX512-LABEL: cvt_i16_to_f32:29; AVX512:       # %bb.0:30; AVX512-NEXT:    vmovd %edi, %xmm031; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm032; AVX512-NEXT:    retq33  %1 = bitcast i16 %a0 to half34  %2 = fpext half %1 to float35  ret float %236}37 38define <4 x float> @cvt_4i16_to_4f32(<4 x i16> %a0) nounwind {39; AVX-LABEL: cvt_4i16_to_4f32:40; AVX:       # %bb.0:41; AVX-NEXT:    subq $72, %rsp42; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill43; AVX-NEXT:    vmovq %xmm0, %rax44; AVX-NEXT:    movl %eax, %ecx45; AVX-NEXT:    shrl $16, %ecx46; AVX-NEXT:    movq %rax, %rdx47; AVX-NEXT:    shrq $32, %rdx48; AVX-NEXT:    shrq $48, %rax49; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm050; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill51; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm052; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill53; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm054; AVX-NEXT:    callq __extendhfsf2@PLT55; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill56; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload57; AVX-NEXT:    callq __extendhfsf2@PLT58; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload59; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]60; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill61; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload62; AVX-NEXT:    callq __extendhfsf2@PLT63; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload64; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]65; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill66; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload67; AVX-NEXT:    callq __extendhfsf2@PLT68; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload69; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]70; AVX-NEXT:    addq $72, %rsp71; AVX-NEXT:    retq72;73; F16C-LABEL: cvt_4i16_to_4f32:74; F16C:       # %bb.0:75; F16C-NEXT:    vcvtph2ps %xmm0, %xmm076; F16C-NEXT:    retq77;78; AVX512-LABEL: cvt_4i16_to_4f32:79; AVX512:       # %bb.0:80; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm081; AVX512-NEXT:    retq82  %1 = bitcast <4 x i16> %a0 to <4 x half>83  %2 = fpext <4 x half> %1 to <4 x float>84  ret <4 x float> %285}86 87define <4 x float> @cvt_8i16_to_4f32(<8 x i16> %a0) nounwind {88; AVX-LABEL: cvt_8i16_to_4f32:89; AVX:       # %bb.0:90; AVX-NEXT:    subq $72, %rsp91; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill92; AVX-NEXT:    vmovq %xmm0, %rax93; AVX-NEXT:    movl %eax, %ecx94; AVX-NEXT:    shrl $16, %ecx95; AVX-NEXT:    movq %rax, %rdx96; AVX-NEXT:    shrq $32, %rdx97; AVX-NEXT:    shrq $48, %rax98; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm099; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill100; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm0101; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill102; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0103; AVX-NEXT:    callq __extendhfsf2@PLT104; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill105; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload106; AVX-NEXT:    callq __extendhfsf2@PLT107; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload108; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]109; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill110; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload111; AVX-NEXT:    callq __extendhfsf2@PLT112; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload113; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]114; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill115; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload116; AVX-NEXT:    callq __extendhfsf2@PLT117; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload118; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]119; AVX-NEXT:    addq $72, %rsp120; AVX-NEXT:    retq121;122; F16C-LABEL: cvt_8i16_to_4f32:123; F16C:       # %bb.0:124; F16C-NEXT:    vcvtph2ps %xmm0, %xmm0125; F16C-NEXT:    retq126;127; AVX512-LABEL: cvt_8i16_to_4f32:128; AVX512:       # %bb.0:129; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0130; AVX512-NEXT:    retq131  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>132  %2 = bitcast <4 x i16> %1 to <4 x half>133  %3 = fpext <4 x half> %2 to <4 x float>134  ret <4 x float> %3135}136 137define <8 x float> @cvt_8i16_to_8f32(<8 x i16> %a0) nounwind {138; AVX-LABEL: cvt_8i16_to_8f32:139; AVX:       # %bb.0:140; AVX-NEXT:    subq $56, %rsp141; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill142; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero143; AVX-NEXT:    callq __extendhfsf2@PLT144; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill145; AVX-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload146; AVX-NEXT:    # xmm0 = mem[2,3,0,1]147; AVX-NEXT:    callq __extendhfsf2@PLT148; AVX-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload149; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]150; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill151; AVX-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload152; AVX-NEXT:    # xmm0 = mem[3,3,3,3]153; AVX-NEXT:    callq __extendhfsf2@PLT154; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload155; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]156; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill157; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload158; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero159; AVX-NEXT:    callq __extendhfsf2@PLT160; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload161; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]162; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill163; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload164; AVX-NEXT:    callq __extendhfsf2@PLT165; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill166; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload167; AVX-NEXT:    vpsrld $16, %xmm0, %xmm0168; AVX-NEXT:    callq __extendhfsf2@PLT169; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload170; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]171; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill172; AVX-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload173; AVX-NEXT:    # xmm0 = mem[1,1,3,3]174; AVX-NEXT:    callq __extendhfsf2@PLT175; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload176; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]177; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill178; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload179; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm0180; AVX-NEXT:    callq __extendhfsf2@PLT181; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload182; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]183; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload184; AVX-NEXT:    addq $56, %rsp185; AVX-NEXT:    retq186;187; F16C-LABEL: cvt_8i16_to_8f32:188; F16C:       # %bb.0:189; F16C-NEXT:    vcvtph2ps %xmm0, %ymm0190; F16C-NEXT:    retq191;192; AVX512-LABEL: cvt_8i16_to_8f32:193; AVX512:       # %bb.0:194; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm0195; AVX512-NEXT:    retq196  %1 = bitcast <8 x i16> %a0 to <8 x half>197  %2 = fpext <8 x half> %1 to <8 x float>198  ret <8 x float> %2199}200 201define <16 x float> @cvt_16i16_to_16f32(<16 x i16> %a0) nounwind {202; AVX1-LABEL: cvt_16i16_to_16f32:203; AVX1:       # %bb.0:204; AVX1-NEXT:    subq $104, %rsp205; AVX1-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill206; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero207; AVX1-NEXT:    vzeroupper208; AVX1-NEXT:    callq __extendhfsf2@PLT209; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill210; AVX1-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload211; AVX1-NEXT:    # xmm0 = mem[2,3,0,1]212; AVX1-NEXT:    callq __extendhfsf2@PLT213; AVX1-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload214; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]215; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill216; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload217; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]218; AVX1-NEXT:    callq __extendhfsf2@PLT219; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload220; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]221; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill222; AVX1-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload223; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero224; AVX1-NEXT:    vzeroupper225; AVX1-NEXT:    callq __extendhfsf2@PLT226; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload227; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]228; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill229; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload230; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0231; AVX1-NEXT:    vzeroupper232; AVX1-NEXT:    callq __extendhfsf2@PLT233; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill234; AVX1-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload235; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0236; AVX1-NEXT:    vzeroupper237; AVX1-NEXT:    callq __extendhfsf2@PLT238; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload239; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]240; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill241; AVX1-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload242; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]243; AVX1-NEXT:    callq __extendhfsf2@PLT244; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload245; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]246; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill247; AVX1-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload248; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm0249; AVX1-NEXT:    vzeroupper250; AVX1-NEXT:    callq __extendhfsf2@PLT251; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload252; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]253; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload254; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill255; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload256; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0257; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill258; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero259; AVX1-NEXT:    vzeroupper260; AVX1-NEXT:    callq __extendhfsf2@PLT261; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill262; AVX1-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload263; AVX1-NEXT:    # xmm0 = mem[2,3,0,1]264; AVX1-NEXT:    callq __extendhfsf2@PLT265; AVX1-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload266; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]267; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill268; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload269; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]270; AVX1-NEXT:    callq __extendhfsf2@PLT271; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload272; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]273; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill274; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload275; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero276; AVX1-NEXT:    callq __extendhfsf2@PLT277; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload278; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]279; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill280; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload281; AVX1-NEXT:    callq __extendhfsf2@PLT282; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill283; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload284; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0285; AVX1-NEXT:    callq __extendhfsf2@PLT286; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload287; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]288; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill289; AVX1-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload290; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]291; AVX1-NEXT:    callq __extendhfsf2@PLT292; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload293; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]294; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill295; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload296; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm0297; AVX1-NEXT:    callq __extendhfsf2@PLT298; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload299; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]300; AVX1-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload301; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload302; AVX1-NEXT:    addq $104, %rsp303; AVX1-NEXT:    retq304;305; AVX2-LABEL: cvt_16i16_to_16f32:306; AVX2:       # %bb.0:307; AVX2-NEXT:    subq $104, %rsp308; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill309; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero310; AVX2-NEXT:    vzeroupper311; AVX2-NEXT:    callq __extendhfsf2@PLT312; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill313; AVX2-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload314; AVX2-NEXT:    # xmm0 = mem[2,3,0,1]315; AVX2-NEXT:    callq __extendhfsf2@PLT316; AVX2-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload317; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]318; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill319; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload320; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]321; AVX2-NEXT:    callq __extendhfsf2@PLT322; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload323; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]324; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill325; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload326; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero327; AVX2-NEXT:    vzeroupper328; AVX2-NEXT:    callq __extendhfsf2@PLT329; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload330; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]331; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill332; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload333; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0334; AVX2-NEXT:    vzeroupper335; AVX2-NEXT:    callq __extendhfsf2@PLT336; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill337; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload338; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0339; AVX2-NEXT:    vzeroupper340; AVX2-NEXT:    callq __extendhfsf2@PLT341; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload342; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]343; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill344; AVX2-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload345; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]346; AVX2-NEXT:    callq __extendhfsf2@PLT347; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload348; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]349; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill350; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload351; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm0352; AVX2-NEXT:    vzeroupper353; AVX2-NEXT:    callq __extendhfsf2@PLT354; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload355; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]356; AVX2-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload357; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill358; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload359; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0360; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill361; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero362; AVX2-NEXT:    vzeroupper363; AVX2-NEXT:    callq __extendhfsf2@PLT364; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill365; AVX2-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload366; AVX2-NEXT:    # xmm0 = mem[2,3,0,1]367; AVX2-NEXT:    callq __extendhfsf2@PLT368; AVX2-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload369; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]370; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill371; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload372; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]373; AVX2-NEXT:    callq __extendhfsf2@PLT374; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload375; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]376; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill377; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload378; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero379; AVX2-NEXT:    callq __extendhfsf2@PLT380; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload381; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]382; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill383; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload384; AVX2-NEXT:    callq __extendhfsf2@PLT385; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill386; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload387; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0388; AVX2-NEXT:    callq __extendhfsf2@PLT389; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload390; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]391; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill392; AVX2-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload393; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]394; AVX2-NEXT:    callq __extendhfsf2@PLT395; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload396; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]397; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill398; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload399; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm0400; AVX2-NEXT:    callq __extendhfsf2@PLT401; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload402; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]403; AVX2-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload404; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload405; AVX2-NEXT:    addq $104, %rsp406; AVX2-NEXT:    retq407;408; F16C-LABEL: cvt_16i16_to_16f32:409; F16C:       # %bb.0:410; F16C-NEXT:    vcvtph2ps %xmm0, %ymm2411; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm0412; F16C-NEXT:    vcvtph2ps %xmm0, %ymm1413; F16C-NEXT:    vmovaps %ymm2, %ymm0414; F16C-NEXT:    retq415;416; AVX512-LABEL: cvt_16i16_to_16f32:417; AVX512:       # %bb.0:418; AVX512-NEXT:    vcvtph2ps %ymm0, %zmm0419; AVX512-NEXT:    retq420  %1 = bitcast <16 x i16> %a0 to <16 x half>421  %2 = fpext <16 x half> %1 to <16 x float>422  ret <16 x float> %2423}424 425define <2 x float> @cvt_2i16_to_2f32_constrained(<2 x i16> %a0) nounwind strictfp {426; AVX-LABEL: cvt_2i16_to_2f32_constrained:427; AVX:       # %bb.0:428; AVX-NEXT:    subq $40, %rsp429; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill430; AVX-NEXT:    vpextrw $1, %xmm0, %eax431; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0432; AVX-NEXT:    callq __extendhfsf2@PLT433; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill434; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload435; AVX-NEXT:    callq __extendhfsf2@PLT436; AVX-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload437; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]438; AVX-NEXT:    addq $40, %rsp439; AVX-NEXT:    retq440;441; F16C-LABEL: cvt_2i16_to_2f32_constrained:442; F16C:       # %bb.0:443; F16C-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero444; F16C-NEXT:    vcvtph2ps %xmm0, %xmm0445; F16C-NEXT:    retq446;447; AVX512-LABEL: cvt_2i16_to_2f32_constrained:448; AVX512:       # %bb.0:449; AVX512-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero450; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0451; AVX512-NEXT:    retq452  %1 = bitcast <2 x i16> %a0 to <2 x half>453  %2 = call <2 x float> @llvm.experimental.constrained.fpext.v2f32.v2f16(<2 x half> %1, metadata !"fpexcept.strict") strictfp454  ret <2 x float> %2455}456declare <2 x float> @llvm.experimental.constrained.fpext.v2f32.v2f16(<2 x half>, metadata) strictfp457 458define <4 x float> @cvt_4i16_to_4f32_constrained(<4 x i16> %a0) nounwind strictfp {459; AVX-LABEL: cvt_4i16_to_4f32_constrained:460; AVX:       # %bb.0:461; AVX-NEXT:    subq $72, %rsp462; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill463; AVX-NEXT:    vmovq %xmm0, %rax464; AVX-NEXT:    movl %eax, %ecx465; AVX-NEXT:    shrl $16, %ecx466; AVX-NEXT:    movq %rax, %rdx467; AVX-NEXT:    shrq $32, %rdx468; AVX-NEXT:    shrq $48, %rax469; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0470; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill471; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm0472; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill473; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0474; AVX-NEXT:    callq __extendhfsf2@PLT475; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill476; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload477; AVX-NEXT:    callq __extendhfsf2@PLT478; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload479; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]480; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill481; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload482; AVX-NEXT:    callq __extendhfsf2@PLT483; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload484; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]485; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill486; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload487; AVX-NEXT:    callq __extendhfsf2@PLT488; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload489; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]490; AVX-NEXT:    addq $72, %rsp491; AVX-NEXT:    retq492;493; F16C-LABEL: cvt_4i16_to_4f32_constrained:494; F16C:       # %bb.0:495; F16C-NEXT:    vcvtph2ps %xmm0, %xmm0496; F16C-NEXT:    retq497;498; AVX512-LABEL: cvt_4i16_to_4f32_constrained:499; AVX512:       # %bb.0:500; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0501; AVX512-NEXT:    retq502  %1 = bitcast <4 x i16> %a0 to <4 x half>503  %2 = call <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half> %1, metadata !"fpexcept.strict") strictfp504  ret <4 x float> %2505}506declare <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half>, metadata) strictfp507 508define <8 x float> @cvt_8i16_to_8f32_constrained(<8 x i16> %a0) nounwind strictfp {509; AVX-LABEL: cvt_8i16_to_8f32_constrained:510; AVX:       # %bb.0:511; AVX-NEXT:    subq $56, %rsp512; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill513; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero514; AVX-NEXT:    callq __extendhfsf2@PLT515; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill516; AVX-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload517; AVX-NEXT:    # xmm0 = mem[2,3,0,1]518; AVX-NEXT:    callq __extendhfsf2@PLT519; AVX-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload520; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]521; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill522; AVX-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload523; AVX-NEXT:    # xmm0 = mem[3,3,3,3]524; AVX-NEXT:    callq __extendhfsf2@PLT525; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload526; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]527; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill528; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload529; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero530; AVX-NEXT:    callq __extendhfsf2@PLT531; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload532; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]533; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill534; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload535; AVX-NEXT:    callq __extendhfsf2@PLT536; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill537; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload538; AVX-NEXT:    vpsrld $16, %xmm0, %xmm0539; AVX-NEXT:    callq __extendhfsf2@PLT540; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload541; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]542; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill543; AVX-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload544; AVX-NEXT:    # xmm0 = mem[1,1,3,3]545; AVX-NEXT:    callq __extendhfsf2@PLT546; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload547; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]548; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill549; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload550; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm0551; AVX-NEXT:    callq __extendhfsf2@PLT552; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload553; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]554; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload555; AVX-NEXT:    addq $56, %rsp556; AVX-NEXT:    retq557;558; F16C-LABEL: cvt_8i16_to_8f32_constrained:559; F16C:       # %bb.0:560; F16C-NEXT:    vcvtph2ps %xmm0, %ymm0561; F16C-NEXT:    retq562;563; AVX512-LABEL: cvt_8i16_to_8f32_constrained:564; AVX512:       # %bb.0:565; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm0566; AVX512-NEXT:    retq567  %1 = bitcast <8 x i16> %a0 to <8 x half>568  %2 = call <8 x float> @llvm.experimental.constrained.fpext.v8f32.v8f16(<8 x half> %1, metadata !"fpexcept.strict") strictfp569  ret <8 x float> %2570}571declare <8 x float> @llvm.experimental.constrained.fpext.v8f32.v8f16(<8 x half>, metadata) strictfp572 573define <16 x float> @cvt_16i16_to_16f32_constrained(<16 x i16> %a0) nounwind strictfp {574; AVX1-LABEL: cvt_16i16_to_16f32_constrained:575; AVX1:       # %bb.0:576; AVX1-NEXT:    subq $104, %rsp577; AVX1-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill578; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero579; AVX1-NEXT:    vzeroupper580; AVX1-NEXT:    callq __extendhfsf2@PLT581; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill582; AVX1-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload583; AVX1-NEXT:    # xmm0 = mem[2,3,0,1]584; AVX1-NEXT:    callq __extendhfsf2@PLT585; AVX1-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload586; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]587; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill588; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload589; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]590; AVX1-NEXT:    callq __extendhfsf2@PLT591; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload592; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]593; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill594; AVX1-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload595; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero596; AVX1-NEXT:    vzeroupper597; AVX1-NEXT:    callq __extendhfsf2@PLT598; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload599; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]600; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill601; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload602; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0603; AVX1-NEXT:    vzeroupper604; AVX1-NEXT:    callq __extendhfsf2@PLT605; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill606; AVX1-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload607; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0608; AVX1-NEXT:    vzeroupper609; AVX1-NEXT:    callq __extendhfsf2@PLT610; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload611; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]612; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill613; AVX1-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload614; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]615; AVX1-NEXT:    callq __extendhfsf2@PLT616; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload617; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]618; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill619; AVX1-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload620; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm0621; AVX1-NEXT:    vzeroupper622; AVX1-NEXT:    callq __extendhfsf2@PLT623; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload624; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]625; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload626; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill627; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload628; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0629; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill630; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero631; AVX1-NEXT:    vzeroupper632; AVX1-NEXT:    callq __extendhfsf2@PLT633; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill634; AVX1-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload635; AVX1-NEXT:    # xmm0 = mem[2,3,0,1]636; AVX1-NEXT:    callq __extendhfsf2@PLT637; AVX1-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload638; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]639; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill640; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload641; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]642; AVX1-NEXT:    callq __extendhfsf2@PLT643; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload644; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]645; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill646; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload647; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero648; AVX1-NEXT:    callq __extendhfsf2@PLT649; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload650; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]651; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill652; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload653; AVX1-NEXT:    callq __extendhfsf2@PLT654; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill655; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload656; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0657; AVX1-NEXT:    callq __extendhfsf2@PLT658; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload659; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]660; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill661; AVX1-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload662; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]663; AVX1-NEXT:    callq __extendhfsf2@PLT664; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload665; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]666; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill667; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload668; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm0669; AVX1-NEXT:    callq __extendhfsf2@PLT670; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload671; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]672; AVX1-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload673; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload674; AVX1-NEXT:    addq $104, %rsp675; AVX1-NEXT:    retq676;677; AVX2-LABEL: cvt_16i16_to_16f32_constrained:678; AVX2:       # %bb.0:679; AVX2-NEXT:    subq $104, %rsp680; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill681; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero682; AVX2-NEXT:    vzeroupper683; AVX2-NEXT:    callq __extendhfsf2@PLT684; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill685; AVX2-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload686; AVX2-NEXT:    # xmm0 = mem[2,3,0,1]687; AVX2-NEXT:    callq __extendhfsf2@PLT688; AVX2-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload689; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]690; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill691; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload692; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]693; AVX2-NEXT:    callq __extendhfsf2@PLT694; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload695; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]696; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill697; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload698; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero699; AVX2-NEXT:    vzeroupper700; AVX2-NEXT:    callq __extendhfsf2@PLT701; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload702; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]703; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill704; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload705; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0706; AVX2-NEXT:    vzeroupper707; AVX2-NEXT:    callq __extendhfsf2@PLT708; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill709; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload710; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0711; AVX2-NEXT:    vzeroupper712; AVX2-NEXT:    callq __extendhfsf2@PLT713; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload714; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]715; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill716; AVX2-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload717; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]718; AVX2-NEXT:    callq __extendhfsf2@PLT719; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload720; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]721; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill722; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload723; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm0724; AVX2-NEXT:    vzeroupper725; AVX2-NEXT:    callq __extendhfsf2@PLT726; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload727; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]728; AVX2-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload729; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill730; AVX2-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload731; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0732; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill733; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero734; AVX2-NEXT:    vzeroupper735; AVX2-NEXT:    callq __extendhfsf2@PLT736; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill737; AVX2-NEXT:    vpermilps $78, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload738; AVX2-NEXT:    # xmm0 = mem[2,3,0,1]739; AVX2-NEXT:    callq __extendhfsf2@PLT740; AVX2-NEXT:    vinsertps $16, (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload741; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]742; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill743; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload744; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]745; AVX2-NEXT:    callq __extendhfsf2@PLT746; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload747; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]748; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill749; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload750; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero751; AVX2-NEXT:    callq __extendhfsf2@PLT752; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload753; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]754; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill755; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload756; AVX2-NEXT:    callq __extendhfsf2@PLT757; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill758; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload759; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0760; AVX2-NEXT:    callq __extendhfsf2@PLT761; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload762; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]763; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill764; AVX2-NEXT:    vpermilps $245, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload765; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]766; AVX2-NEXT:    callq __extendhfsf2@PLT767; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload768; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]769; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill770; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload771; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm0772; AVX2-NEXT:    callq __extendhfsf2@PLT773; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload774; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]775; AVX2-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload776; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload777; AVX2-NEXT:    addq $104, %rsp778; AVX2-NEXT:    retq779;780; F16C-LABEL: cvt_16i16_to_16f32_constrained:781; F16C:       # %bb.0:782; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm1783; F16C-NEXT:    vcvtph2ps %xmm1, %ymm1784; F16C-NEXT:    vcvtph2ps %xmm0, %ymm0785; F16C-NEXT:    retq786;787; AVX512-LABEL: cvt_16i16_to_16f32_constrained:788; AVX512:       # %bb.0:789; AVX512-NEXT:    vcvtph2ps %ymm0, %zmm0790; AVX512-NEXT:    retq791  %1 = bitcast <16 x i16> %a0 to <16 x half>792  %2 = call <16 x float> @llvm.experimental.constrained.fpext.v16f32.v16f16(<16 x half> %1, metadata !"fpexcept.strict") strictfp793  ret <16 x float> %2794}795declare <16 x float> @llvm.experimental.constrained.fpext.v16f32.v16f16(<16 x half>, metadata) strictfp796 797;798; Half to Float (Load)799;800 801define float @load_cvt_i16_to_f32(ptr %a0) nounwind {802; AVX-LABEL: load_cvt_i16_to_f32:803; AVX:       # %bb.0:804; AVX-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0805; AVX-NEXT:    jmp __extendhfsf2@PLT # TAILCALL806;807; F16C-LABEL: load_cvt_i16_to_f32:808; F16C:       # %bb.0:809; F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0810; F16C-NEXT:    vcvtph2ps %xmm0, %xmm0811; F16C-NEXT:    retq812;813; AVX512-LABEL: load_cvt_i16_to_f32:814; AVX512:       # %bb.0:815; AVX512-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0816; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm0817; AVX512-NEXT:    retq818  %1 = load i16, ptr %a0819  %2 = bitcast i16 %1 to half820  %3 = fpext half %2 to float821  ret float %3822}823 824define <4 x float> @load_cvt_4i16_to_4f32(ptr %a0) nounwind {825; AVX-LABEL: load_cvt_4i16_to_4f32:826; AVX:       # %bb.0:827; AVX-NEXT:    subq $72, %rsp828; AVX-NEXT:    vpinsrw $0, 6(%rdi), %xmm0, %xmm0829; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill830; AVX-NEXT:    vpinsrw $0, 4(%rdi), %xmm0, %xmm0831; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill832; AVX-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0833; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill834; AVX-NEXT:    vpinsrw $0, 2(%rdi), %xmm0, %xmm0835; AVX-NEXT:    callq __extendhfsf2@PLT836; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill837; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload838; AVX-NEXT:    callq __extendhfsf2@PLT839; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload840; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]841; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill842; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload843; AVX-NEXT:    callq __extendhfsf2@PLT844; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload845; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]846; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill847; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload848; AVX-NEXT:    callq __extendhfsf2@PLT849; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload850; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]851; AVX-NEXT:    addq $72, %rsp852; AVX-NEXT:    retq853;854; F16C-LABEL: load_cvt_4i16_to_4f32:855; F16C:       # %bb.0:856; F16C-NEXT:    vcvtph2ps (%rdi), %xmm0857; F16C-NEXT:    retq858;859; AVX512-LABEL: load_cvt_4i16_to_4f32:860; AVX512:       # %bb.0:861; AVX512-NEXT:    vcvtph2ps (%rdi), %xmm0862; AVX512-NEXT:    retq863  %1 = load <4 x i16>, ptr %a0864  %2 = bitcast <4 x i16> %1 to <4 x half>865  %3 = fpext <4 x half> %2 to <4 x float>866  ret <4 x float> %3867}868 869define <4 x float> @load_cvt_8i16_to_4f32(ptr %a0) nounwind {870; AVX-LABEL: load_cvt_8i16_to_4f32:871; AVX:       # %bb.0:872; AVX-NEXT:    subq $72, %rsp873; AVX-NEXT:    vmovdqa (%rdi), %xmm0874; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill875; AVX-NEXT:    vmovq %xmm0, %rax876; AVX-NEXT:    movl %eax, %ecx877; AVX-NEXT:    shrl $16, %ecx878; AVX-NEXT:    movq %rax, %rdx879; AVX-NEXT:    shrq $32, %rdx880; AVX-NEXT:    shrq $48, %rax881; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0882; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill883; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm0884; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill885; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0886; AVX-NEXT:    callq __extendhfsf2@PLT887; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill888; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload889; AVX-NEXT:    callq __extendhfsf2@PLT890; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload891; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]892; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill893; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload894; AVX-NEXT:    callq __extendhfsf2@PLT895; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload896; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]897; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill898; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload899; AVX-NEXT:    callq __extendhfsf2@PLT900; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload901; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]902; AVX-NEXT:    addq $72, %rsp903; AVX-NEXT:    retq904;905; F16C-LABEL: load_cvt_8i16_to_4f32:906; F16C:       # %bb.0:907; F16C-NEXT:    vcvtph2ps (%rdi), %xmm0908; F16C-NEXT:    retq909;910; AVX512-LABEL: load_cvt_8i16_to_4f32:911; AVX512:       # %bb.0:912; AVX512-NEXT:    vcvtph2ps (%rdi), %xmm0913; AVX512-NEXT:    retq914  %1 = load <8 x i16>, ptr %a0915  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>916  %3 = bitcast <4 x i16> %2 to <4 x half>917  %4 = fpext <4 x half> %3 to <4 x float>918  ret <4 x float> %4919}920 921define <8 x float> @load_cvt_8i16_to_8f32(ptr %a0) nounwind {922; AVX1-LABEL: load_cvt_8i16_to_8f32:923; AVX1:       # %bb.0:924; AVX1-NEXT:    pushq %rbx925; AVX1-NEXT:    subq $48, %rsp926; AVX1-NEXT:    movq %rdi, %rbx927; AVX1-NEXT:    vmovaps (%rdi), %xmm0928; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill929; AVX1-NEXT:    vbroadcastss 8(%rdi), %xmm0930; AVX1-NEXT:    callq __extendhfsf2@PLT931; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill932; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload933; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero934; AVX1-NEXT:    callq __extendhfsf2@PLT935; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload936; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]937; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill938; AVX1-NEXT:    vbroadcastss 12(%rbx), %xmm0939; AVX1-NEXT:    callq __extendhfsf2@PLT940; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload941; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]942; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill943; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload944; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero945; AVX1-NEXT:    callq __extendhfsf2@PLT946; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload947; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]948; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill949; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload950; AVX1-NEXT:    callq __extendhfsf2@PLT951; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill952; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload953; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0954; AVX1-NEXT:    callq __extendhfsf2@PLT955; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload956; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]957; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill958; AVX1-NEXT:    vbroadcastss 4(%rbx), %xmm0959; AVX1-NEXT:    callq __extendhfsf2@PLT960; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload961; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]962; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill963; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload964; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm0965; AVX1-NEXT:    callq __extendhfsf2@PLT966; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload967; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]968; AVX1-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload969; AVX1-NEXT:    addq $48, %rsp970; AVX1-NEXT:    popq %rbx971; AVX1-NEXT:    retq972;973; AVX2-LABEL: load_cvt_8i16_to_8f32:974; AVX2:       # %bb.0:975; AVX2-NEXT:    pushq %rbx976; AVX2-NEXT:    subq $48, %rsp977; AVX2-NEXT:    movq %rdi, %rbx978; AVX2-NEXT:    vmovdqa (%rdi), %xmm0979; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill980; AVX2-NEXT:    vpinsrw $0, 8(%rdi), %xmm0, %xmm0981; AVX2-NEXT:    callq __extendhfsf2@PLT982; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill983; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload984; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero985; AVX2-NEXT:    callq __extendhfsf2@PLT986; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload987; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]988; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill989; AVX2-NEXT:    vpinsrw $0, 12(%rbx), %xmm0, %xmm0990; AVX2-NEXT:    callq __extendhfsf2@PLT991; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload992; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]993; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill994; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload995; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero996; AVX2-NEXT:    callq __extendhfsf2@PLT997; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload998; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]999; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1000; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1001; AVX2-NEXT:    callq __extendhfsf2@PLT1002; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1003; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1004; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm01005; AVX2-NEXT:    callq __extendhfsf2@PLT1006; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1007; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1008; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1009; AVX2-NEXT:    vpinsrw $0, 4(%rbx), %xmm0, %xmm01010; AVX2-NEXT:    callq __extendhfsf2@PLT1011; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1012; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1013; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1014; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1015; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm01016; AVX2-NEXT:    callq __extendhfsf2@PLT1017; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1018; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1019; AVX2-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1020; AVX2-NEXT:    addq $48, %rsp1021; AVX2-NEXT:    popq %rbx1022; AVX2-NEXT:    retq1023;1024; F16C-LABEL: load_cvt_8i16_to_8f32:1025; F16C:       # %bb.0:1026; F16C-NEXT:    vcvtph2ps (%rdi), %ymm01027; F16C-NEXT:    retq1028;1029; AVX512-LABEL: load_cvt_8i16_to_8f32:1030; AVX512:       # %bb.0:1031; AVX512-NEXT:    vcvtph2ps (%rdi), %ymm01032; AVX512-NEXT:    retq1033  %1 = load <8 x i16>, ptr %a01034  %2 = bitcast <8 x i16> %1 to <8 x half>1035  %3 = fpext <8 x half> %2 to <8 x float>1036  ret <8 x float> %31037}1038 1039define <16 x float> @load_cvt_16i16_to_16f32(ptr %a0) nounwind {1040; AVX1-LABEL: load_cvt_16i16_to_16f32:1041; AVX1:       # %bb.0:1042; AVX1-NEXT:    pushq %rbx1043; AVX1-NEXT:    subq $80, %rsp1044; AVX1-NEXT:    movq %rdi, %rbx1045; AVX1-NEXT:    vbroadcastss 8(%rdi), %xmm01046; AVX1-NEXT:    callq __extendhfsf2@PLT1047; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1048; AVX1-NEXT:    vmovdqa (%rbx), %xmm11049; AVX1-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1050; AVX1-NEXT:    vmovaps 16(%rbx), %xmm01051; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1052; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1053; AVX1-NEXT:    callq __extendhfsf2@PLT1054; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1055; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1056; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1057; AVX1-NEXT:    vbroadcastss 12(%rbx), %xmm01058; AVX1-NEXT:    callq __extendhfsf2@PLT1059; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1060; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1061; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1062; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1063; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1064; AVX1-NEXT:    callq __extendhfsf2@PLT1065; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1066; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1067; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1068; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1069; AVX1-NEXT:    callq __extendhfsf2@PLT1070; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1071; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1072; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm01073; AVX1-NEXT:    callq __extendhfsf2@PLT1074; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1075; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1076; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1077; AVX1-NEXT:    vbroadcastss 4(%rbx), %xmm01078; AVX1-NEXT:    callq __extendhfsf2@PLT1079; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1080; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1081; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1082; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1083; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm01084; AVX1-NEXT:    callq __extendhfsf2@PLT1085; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1086; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1087; AVX1-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1088; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1089; AVX1-NEXT:    vbroadcastss 24(%rbx), %xmm01090; AVX1-NEXT:    vzeroupper1091; AVX1-NEXT:    callq __extendhfsf2@PLT1092; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1093; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1094; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1095; AVX1-NEXT:    callq __extendhfsf2@PLT1096; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1097; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1098; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1099; AVX1-NEXT:    vbroadcastss 28(%rbx), %xmm01100; AVX1-NEXT:    callq __extendhfsf2@PLT1101; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1102; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1103; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1104; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1105; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1106; AVX1-NEXT:    callq __extendhfsf2@PLT1107; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1108; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1109; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1110; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1111; AVX1-NEXT:    callq __extendhfsf2@PLT1112; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1113; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1114; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm01115; AVX1-NEXT:    callq __extendhfsf2@PLT1116; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1117; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1118; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1119; AVX1-NEXT:    vbroadcastss 20(%rbx), %xmm01120; AVX1-NEXT:    callq __extendhfsf2@PLT1121; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1122; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1123; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1124; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1125; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm01126; AVX1-NEXT:    callq __extendhfsf2@PLT1127; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1128; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1129; AVX1-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload1130; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1131; AVX1-NEXT:    addq $80, %rsp1132; AVX1-NEXT:    popq %rbx1133; AVX1-NEXT:    retq1134;1135; AVX2-LABEL: load_cvt_16i16_to_16f32:1136; AVX2:       # %bb.0:1137; AVX2-NEXT:    pushq %rbx1138; AVX2-NEXT:    subq $80, %rsp1139; AVX2-NEXT:    movq %rdi, %rbx1140; AVX2-NEXT:    vpinsrw $0, 8(%rdi), %xmm0, %xmm01141; AVX2-NEXT:    callq __extendhfsf2@PLT1142; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1143; AVX2-NEXT:    vmovdqa (%rbx), %xmm11144; AVX2-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1145; AVX2-NEXT:    vmovaps 16(%rbx), %xmm01146; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1147; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1148; AVX2-NEXT:    callq __extendhfsf2@PLT1149; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1150; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1151; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1152; AVX2-NEXT:    vpinsrw $0, 12(%rbx), %xmm0, %xmm01153; AVX2-NEXT:    callq __extendhfsf2@PLT1154; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1155; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1156; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1157; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1158; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1159; AVX2-NEXT:    callq __extendhfsf2@PLT1160; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1161; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1162; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1163; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1164; AVX2-NEXT:    callq __extendhfsf2@PLT1165; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1166; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1167; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm01168; AVX2-NEXT:    callq __extendhfsf2@PLT1169; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1170; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1171; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1172; AVX2-NEXT:    vpinsrw $0, 4(%rbx), %xmm0, %xmm01173; AVX2-NEXT:    callq __extendhfsf2@PLT1174; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1175; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1176; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1177; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1178; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm01179; AVX2-NEXT:    callq __extendhfsf2@PLT1180; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1181; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1182; AVX2-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1183; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1184; AVX2-NEXT:    vpinsrw $0, 24(%rbx), %xmm0, %xmm01185; AVX2-NEXT:    vzeroupper1186; AVX2-NEXT:    callq __extendhfsf2@PLT1187; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1188; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1189; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1190; AVX2-NEXT:    callq __extendhfsf2@PLT1191; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1192; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1193; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1194; AVX2-NEXT:    vpinsrw $0, 28(%rbx), %xmm0, %xmm01195; AVX2-NEXT:    callq __extendhfsf2@PLT1196; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1197; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1198; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1199; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1200; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1201; AVX2-NEXT:    callq __extendhfsf2@PLT1202; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1203; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1204; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1205; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1206; AVX2-NEXT:    callq __extendhfsf2@PLT1207; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1208; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1209; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm01210; AVX2-NEXT:    callq __extendhfsf2@PLT1211; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1212; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]1213; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1214; AVX2-NEXT:    vpinsrw $0, 20(%rbx), %xmm0, %xmm01215; AVX2-NEXT:    callq __extendhfsf2@PLT1216; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1217; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1218; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1219; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1220; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm01221; AVX2-NEXT:    callq __extendhfsf2@PLT1222; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1223; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1224; AVX2-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload1225; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1226; AVX2-NEXT:    addq $80, %rsp1227; AVX2-NEXT:    popq %rbx1228; AVX2-NEXT:    retq1229;1230; F16C-LABEL: load_cvt_16i16_to_16f32:1231; F16C:       # %bb.0:1232; F16C-NEXT:    vcvtph2ps (%rdi), %ymm01233; F16C-NEXT:    vcvtph2ps 16(%rdi), %ymm11234; F16C-NEXT:    retq1235;1236; AVX512-LABEL: load_cvt_16i16_to_16f32:1237; AVX512:       # %bb.0:1238; AVX512-NEXT:    vcvtph2ps (%rdi), %zmm01239; AVX512-NEXT:    retq1240  %1 = load <16 x i16>, ptr %a01241  %2 = bitcast <16 x i16> %1 to <16 x half>1242  %3 = fpext <16 x half> %2 to <16 x float>1243  ret <16 x float> %31244}1245 1246define <4 x float> @load_cvt_4i16_to_4f32_constrained(ptr %a0) nounwind strictfp {1247; AVX-LABEL: load_cvt_4i16_to_4f32_constrained:1248; AVX:       # %bb.0:1249; AVX-NEXT:    subq $72, %rsp1250; AVX-NEXT:    vpinsrw $0, 6(%rdi), %xmm0, %xmm01251; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1252; AVX-NEXT:    vpinsrw $0, 4(%rdi), %xmm0, %xmm01253; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1254; AVX-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm01255; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1256; AVX-NEXT:    vpinsrw $0, 2(%rdi), %xmm0, %xmm01257; AVX-NEXT:    callq __extendhfsf2@PLT1258; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1259; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1260; AVX-NEXT:    callq __extendhfsf2@PLT1261; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1262; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]1263; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1264; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1265; AVX-NEXT:    callq __extendhfsf2@PLT1266; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1267; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1268; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1269; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1270; AVX-NEXT:    callq __extendhfsf2@PLT1271; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1272; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1273; AVX-NEXT:    addq $72, %rsp1274; AVX-NEXT:    retq1275;1276; F16C-LABEL: load_cvt_4i16_to_4f32_constrained:1277; F16C:       # %bb.0:1278; F16C-NEXT:    vcvtph2ps (%rdi), %xmm01279; F16C-NEXT:    retq1280;1281; AVX512-LABEL: load_cvt_4i16_to_4f32_constrained:1282; AVX512:       # %bb.0:1283; AVX512-NEXT:    vcvtph2ps (%rdi), %xmm01284; AVX512-NEXT:    retq1285  %1 = load <4 x i16>, ptr %a01286  %2 = bitcast <4 x i16> %1 to <4 x half>1287  %3 = call <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half> %2, metadata !"fpexcept.strict") strictfp1288  ret <4 x float> %31289}1290 1291define <4 x float> @load_cvt_8i16_to_4f32_constrained(ptr %a0) nounwind strictfp {1292; AVX-LABEL: load_cvt_8i16_to_4f32_constrained:1293; AVX:       # %bb.0:1294; AVX-NEXT:    subq $72, %rsp1295; AVX-NEXT:    vmovdqa (%rdi), %xmm01296; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1297; AVX-NEXT:    vmovq %xmm0, %rax1298; AVX-NEXT:    movl %eax, %ecx1299; AVX-NEXT:    shrl $16, %ecx1300; AVX-NEXT:    movq %rax, %rdx1301; AVX-NEXT:    shrq $32, %rdx1302; AVX-NEXT:    shrq $48, %rax1303; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm01304; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1305; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm01306; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1307; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm01308; AVX-NEXT:    callq __extendhfsf2@PLT1309; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1310; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1311; AVX-NEXT:    callq __extendhfsf2@PLT1312; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1313; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]1314; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1315; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1316; AVX-NEXT:    callq __extendhfsf2@PLT1317; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1318; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3]1319; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1320; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1321; AVX-NEXT:    callq __extendhfsf2@PLT1322; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1323; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1324; AVX-NEXT:    addq $72, %rsp1325; AVX-NEXT:    retq1326;1327; F16C-LABEL: load_cvt_8i16_to_4f32_constrained:1328; F16C:       # %bb.0:1329; F16C-NEXT:    vcvtph2ps (%rdi), %xmm01330; F16C-NEXT:    retq1331;1332; AVX512-LABEL: load_cvt_8i16_to_4f32_constrained:1333; AVX512:       # %bb.0:1334; AVX512-NEXT:    vcvtph2ps (%rdi), %xmm01335; AVX512-NEXT:    retq1336  %1 = load <8 x i16>, ptr %a01337  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1338  %3 = bitcast <4 x i16> %2 to <4 x half>1339  %4 = call <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half> %3, metadata !"fpexcept.strict") strictfp1340  ret <4 x float> %41341}1342 1343;1344; Half to Double1345;1346 1347define double @cvt_i16_to_f64(i16 %a0) nounwind {1348; AVX-LABEL: cvt_i16_to_f64:1349; AVX:       # %bb.0:1350; AVX-NEXT:    pushq %rax1351; AVX-NEXT:    vpinsrw $0, %edi, %xmm0, %xmm01352; AVX-NEXT:    callq __extendhfsf2@PLT1353; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01354; AVX-NEXT:    popq %rax1355; AVX-NEXT:    retq1356;1357; F16C-LABEL: cvt_i16_to_f64:1358; F16C:       # %bb.0:1359; F16C-NEXT:    vmovd %edi, %xmm01360; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01361; F16C-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01362; F16C-NEXT:    retq1363;1364; AVX512-LABEL: cvt_i16_to_f64:1365; AVX512:       # %bb.0:1366; AVX512-NEXT:    vmovd %edi, %xmm01367; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01368; AVX512-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01369; AVX512-NEXT:    retq1370  %1 = bitcast i16 %a0 to half1371  %2 = fpext half %1 to double1372  ret double %21373}1374 1375define <2 x double> @cvt_2i16_to_2f64(<2 x i16> %a0) nounwind {1376; AVX-LABEL: cvt_2i16_to_2f64:1377; AVX:       # %bb.0:1378; AVX-NEXT:    subq $40, %rsp1379; AVX-NEXT:    vpextrw $1, %xmm0, %eax1380; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm11381; AVX-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1382; AVX-NEXT:    callq __extendhfsf2@PLT1383; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01384; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1385; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1386; AVX-NEXT:    callq __extendhfsf2@PLT1387; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01388; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1389; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1390; AVX-NEXT:    addq $40, %rsp1391; AVX-NEXT:    retq1392;1393; F16C-LABEL: cvt_2i16_to_2f64:1394; F16C:       # %bb.0:1395; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01396; F16C-NEXT:    vcvtps2pd %xmm0, %xmm01397; F16C-NEXT:    retq1398;1399; AVX512-LABEL: cvt_2i16_to_2f64:1400; AVX512:       # %bb.0:1401; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01402; AVX512-NEXT:    vcvtps2pd %xmm0, %xmm01403; AVX512-NEXT:    retq1404  %1 = bitcast <2 x i16> %a0 to <2 x half>1405  %2 = fpext <2 x half> %1 to <2 x double>1406  ret <2 x double> %21407}1408 1409define <4 x double> @cvt_4i16_to_4f64(<4 x i16> %a0) nounwind {1410; AVX-LABEL: cvt_4i16_to_4f64:1411; AVX:       # %bb.0:1412; AVX-NEXT:    subq $72, %rsp1413; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1414; AVX-NEXT:    vmovq %xmm0, %rax1415; AVX-NEXT:    movq %rax, %rcx1416; AVX-NEXT:    shrq $48, %rcx1417; AVX-NEXT:    movq %rax, %rdx1418; AVX-NEXT:    shrq $32, %rdx1419; AVX-NEXT:    shrl $16, %eax1420; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm01421; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1422; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm01423; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1424; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm01425; AVX-NEXT:    callq __extendhfsf2@PLT1426; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01427; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1428; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1429; AVX-NEXT:    callq __extendhfsf2@PLT1430; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01431; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1432; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1433; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1434; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1435; AVX-NEXT:    callq __extendhfsf2@PLT1436; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01437; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1438; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1439; AVX-NEXT:    callq __extendhfsf2@PLT1440; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01441; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1442; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1443; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1444; AVX-NEXT:    addq $72, %rsp1445; AVX-NEXT:    retq1446;1447; F16C-LABEL: cvt_4i16_to_4f64:1448; F16C:       # %bb.0:1449; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01450; F16C-NEXT:    vcvtps2pd %xmm0, %ymm01451; F16C-NEXT:    retq1452;1453; AVX512-LABEL: cvt_4i16_to_4f64:1454; AVX512:       # %bb.0:1455; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01456; AVX512-NEXT:    vcvtps2pd %xmm0, %ymm01457; AVX512-NEXT:    retq1458  %1 = bitcast <4 x i16> %a0 to <4 x half>1459  %2 = fpext <4 x half> %1 to <4 x double>1460  ret <4 x double> %21461}1462 1463define <2 x double> @cvt_8i16_to_2f64(<8 x i16> %a0) nounwind {1464; AVX-LABEL: cvt_8i16_to_2f64:1465; AVX:       # %bb.0:1466; AVX-NEXT:    subq $40, %rsp1467; AVX-NEXT:    vpextrw $1, %xmm0, %eax1468; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm11469; AVX-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1470; AVX-NEXT:    callq __extendhfsf2@PLT1471; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01472; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1473; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1474; AVX-NEXT:    callq __extendhfsf2@PLT1475; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01476; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1477; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1478; AVX-NEXT:    addq $40, %rsp1479; AVX-NEXT:    retq1480;1481; F16C-LABEL: cvt_8i16_to_2f64:1482; F16C:       # %bb.0:1483; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01484; F16C-NEXT:    vcvtps2pd %xmm0, %xmm01485; F16C-NEXT:    retq1486;1487; AVX512-LABEL: cvt_8i16_to_2f64:1488; AVX512:       # %bb.0:1489; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01490; AVX512-NEXT:    vcvtps2pd %xmm0, %xmm01491; AVX512-NEXT:    retq1492  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <2 x i32> <i32 0, i32 1>1493  %2 = bitcast <2 x i16> %1 to <2 x half>1494  %3 = fpext <2 x half> %2 to <2 x double>1495  ret <2 x double> %31496}1497 1498define <4 x double> @cvt_8i16_to_4f64(<8 x i16> %a0) nounwind {1499; AVX-LABEL: cvt_8i16_to_4f64:1500; AVX:       # %bb.0:1501; AVX-NEXT:    subq $72, %rsp1502; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1503; AVX-NEXT:    vmovq %xmm0, %rax1504; AVX-NEXT:    movq %rax, %rcx1505; AVX-NEXT:    shrq $48, %rcx1506; AVX-NEXT:    movq %rax, %rdx1507; AVX-NEXT:    shrq $32, %rdx1508; AVX-NEXT:    shrl $16, %eax1509; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm01510; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1511; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm01512; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1513; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm01514; AVX-NEXT:    callq __extendhfsf2@PLT1515; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01516; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1517; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1518; AVX-NEXT:    callq __extendhfsf2@PLT1519; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01520; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1521; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1522; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1523; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1524; AVX-NEXT:    callq __extendhfsf2@PLT1525; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01526; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1527; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1528; AVX-NEXT:    callq __extendhfsf2@PLT1529; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01530; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1531; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1532; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1533; AVX-NEXT:    addq $72, %rsp1534; AVX-NEXT:    retq1535;1536; F16C-LABEL: cvt_8i16_to_4f64:1537; F16C:       # %bb.0:1538; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01539; F16C-NEXT:    vcvtps2pd %xmm0, %ymm01540; F16C-NEXT:    retq1541;1542; AVX512-LABEL: cvt_8i16_to_4f64:1543; AVX512:       # %bb.0:1544; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01545; AVX512-NEXT:    vcvtps2pd %xmm0, %ymm01546; AVX512-NEXT:    retq1547  %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1548  %2 = bitcast <4 x i16> %1 to <4 x half>1549  %3 = fpext <4 x half> %2 to <4 x double>1550  ret <4 x double> %31551}1552 1553define <8 x double> @cvt_8i16_to_8f64(<8 x i16> %a0) nounwind {1554; AVX-LABEL: cvt_8i16_to_8f64:1555; AVX:       # %bb.0:1556; AVX-NEXT:    subq $88, %rsp1557; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1558; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm01559; AVX-NEXT:    callq __extendhfsf2@PLT1560; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01561; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1562; AVX-NEXT:    vpermilps $245, (%rsp), %xmm0 # 16-byte Folded Reload1563; AVX-NEXT:    # xmm0 = mem[1,1,3,3]1564; AVX-NEXT:    callq __extendhfsf2@PLT1565; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01566; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1567; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1568; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1569; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1570; AVX-NEXT:    callq __extendhfsf2@PLT1571; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01572; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1573; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1574; AVX-NEXT:    vpsrld $16, %xmm0, %xmm01575; AVX-NEXT:    callq __extendhfsf2@PLT1576; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01577; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1578; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1579; AVX-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1580; AVX-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1581; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1582; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1583; AVX-NEXT:    vzeroupper1584; AVX-NEXT:    callq __extendhfsf2@PLT1585; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01586; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1587; AVX-NEXT:    vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload1588; AVX-NEXT:    # xmm0 = mem[3,3,3,3]1589; AVX-NEXT:    callq __extendhfsf2@PLT1590; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01591; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1592; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1593; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1594; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1595; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1596; AVX-NEXT:    callq __extendhfsf2@PLT1597; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01598; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1599; AVX-NEXT:    vpermilps $78, (%rsp), %xmm0 # 16-byte Folded Reload1600; AVX-NEXT:    # xmm0 = mem[2,3,0,1]1601; AVX-NEXT:    callq __extendhfsf2@PLT1602; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01603; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1604; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1605; AVX-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm1 # 16-byte Folded Reload1606; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1607; AVX-NEXT:    addq $88, %rsp1608; AVX-NEXT:    retq1609;1610; F16C-LABEL: cvt_8i16_to_8f64:1611; F16C:       # %bb.0:1612; F16C-NEXT:    vcvtph2ps %xmm0, %ymm11613; F16C-NEXT:    vcvtps2pd %xmm1, %ymm01614; F16C-NEXT:    vextractf128 $1, %ymm1, %xmm11615; F16C-NEXT:    vcvtps2pd %xmm1, %ymm11616; F16C-NEXT:    retq1617;1618; AVX512-LABEL: cvt_8i16_to_8f64:1619; AVX512:       # %bb.0:1620; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm01621; AVX512-NEXT:    vcvtps2pd %ymm0, %zmm01622; AVX512-NEXT:    retq1623  %1 = bitcast <8 x i16> %a0 to <8 x half>1624  %2 = fpext <8 x half> %1 to <8 x double>1625  ret <8 x double> %21626}1627 1628define <2 x double> @cvt_2i16_to_2f64_constrained(<2 x i16> %a0) nounwind strictfp {1629; AVX-LABEL: cvt_2i16_to_2f64_constrained:1630; AVX:       # %bb.0:1631; AVX-NEXT:    subq $40, %rsp1632; AVX-NEXT:    vpextrw $1, %xmm0, %eax1633; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm11634; AVX-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1635; AVX-NEXT:    callq __extendhfsf2@PLT1636; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01637; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1638; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1639; AVX-NEXT:    callq __extendhfsf2@PLT1640; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01641; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload1642; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1643; AVX-NEXT:    addq $40, %rsp1644; AVX-NEXT:    retq1645;1646; F16C-LABEL: cvt_2i16_to_2f64_constrained:1647; F16C:       # %bb.0:1648; F16C-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero1649; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01650; F16C-NEXT:    vcvtps2pd %xmm0, %xmm01651; F16C-NEXT:    retq1652;1653; AVX512-LABEL: cvt_2i16_to_2f64_constrained:1654; AVX512:       # %bb.0:1655; AVX512-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero1656; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01657; AVX512-NEXT:    vcvtps2pd %xmm0, %xmm01658; AVX512-NEXT:    retq1659  %1 = bitcast <2 x i16> %a0 to <2 x half>1660  %2 = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f16(<2 x half> %1, metadata !"fpexcept.strict") strictfp1661  ret <2 x double> %21662}1663declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f16(<2 x half>, metadata) strictfp1664 1665define <4 x double> @cvt_4i16_to_4f64_constrained(<4 x i16> %a0) nounwind strictfp {1666; AVX-LABEL: cvt_4i16_to_4f64_constrained:1667; AVX:       # %bb.0:1668; AVX-NEXT:    subq $72, %rsp1669; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1670; AVX-NEXT:    vmovq %xmm0, %rax1671; AVX-NEXT:    movq %rax, %rcx1672; AVX-NEXT:    shrq $48, %rcx1673; AVX-NEXT:    movq %rax, %rdx1674; AVX-NEXT:    shrq $32, %rdx1675; AVX-NEXT:    shrl $16, %eax1676; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm01677; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1678; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm01679; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1680; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm01681; AVX-NEXT:    callq __extendhfsf2@PLT1682; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01683; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1684; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1685; AVX-NEXT:    callq __extendhfsf2@PLT1686; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01687; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1688; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1689; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1690; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1691; AVX-NEXT:    callq __extendhfsf2@PLT1692; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01693; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1694; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1695; AVX-NEXT:    callq __extendhfsf2@PLT1696; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01697; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1698; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1699; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1700; AVX-NEXT:    addq $72, %rsp1701; AVX-NEXT:    retq1702;1703; F16C-LABEL: cvt_4i16_to_4f64_constrained:1704; F16C:       # %bb.0:1705; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01706; F16C-NEXT:    vcvtps2pd %xmm0, %ymm01707; F16C-NEXT:    retq1708;1709; AVX512-LABEL: cvt_4i16_to_4f64_constrained:1710; AVX512:       # %bb.0:1711; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01712; AVX512-NEXT:    vcvtps2pd %xmm0, %ymm01713; AVX512-NEXT:    retq1714  %1 = bitcast <4 x i16> %a0 to <4 x half>1715  %2 = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f16(<4 x half> %1, metadata !"fpexcept.strict") strictfp1716  ret <4 x double> %21717}1718declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f16(<4 x half>, metadata) strictfp1719 1720define <8 x double> @cvt_8i16_to_8f64_constrained(<8 x i16> %a0) nounwind strictfp {1721; AVX-LABEL: cvt_8i16_to_8f64_constrained:1722; AVX:       # %bb.0:1723; AVX-NEXT:    subq $88, %rsp1724; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1725; AVX-NEXT:    vpsrlq $48, %xmm0, %xmm01726; AVX-NEXT:    callq __extendhfsf2@PLT1727; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01728; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1729; AVX-NEXT:    vpermilps $245, (%rsp), %xmm0 # 16-byte Folded Reload1730; AVX-NEXT:    # xmm0 = mem[1,1,3,3]1731; AVX-NEXT:    callq __extendhfsf2@PLT1732; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01733; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1734; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1735; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1736; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1737; AVX-NEXT:    callq __extendhfsf2@PLT1738; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01739; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1740; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1741; AVX-NEXT:    vpsrld $16, %xmm0, %xmm01742; AVX-NEXT:    callq __extendhfsf2@PLT1743; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01744; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1745; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1746; AVX-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1747; AVX-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1748; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1749; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1750; AVX-NEXT:    vzeroupper1751; AVX-NEXT:    callq __extendhfsf2@PLT1752; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01753; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1754; AVX-NEXT:    vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload1755; AVX-NEXT:    # xmm0 = mem[3,3,3,3]1756; AVX-NEXT:    callq __extendhfsf2@PLT1757; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01758; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1759; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1760; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1761; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload1762; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1763; AVX-NEXT:    callq __extendhfsf2@PLT1764; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01765; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1766; AVX-NEXT:    vpermilps $78, (%rsp), %xmm0 # 16-byte Folded Reload1767; AVX-NEXT:    # xmm0 = mem[2,3,0,1]1768; AVX-NEXT:    callq __extendhfsf2@PLT1769; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01770; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1771; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1772; AVX-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm1 # 16-byte Folded Reload1773; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1774; AVX-NEXT:    addq $88, %rsp1775; AVX-NEXT:    retq1776;1777; F16C-LABEL: cvt_8i16_to_8f64_constrained:1778; F16C:       # %bb.0:1779; F16C-NEXT:    vcvtph2ps %xmm0, %ymm01780; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm11781; F16C-NEXT:    vcvtps2pd %xmm1, %ymm11782; F16C-NEXT:    vcvtps2pd %xmm0, %ymm01783; F16C-NEXT:    retq1784;1785; AVX512-LABEL: cvt_8i16_to_8f64_constrained:1786; AVX512:       # %bb.0:1787; AVX512-NEXT:    vcvtph2ps %xmm0, %ymm01788; AVX512-NEXT:    vcvtps2pd %ymm0, %zmm01789; AVX512-NEXT:    retq1790  %1 = bitcast <8 x i16> %a0 to <8 x half>1791  %2 = call <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8f16(<8 x half> %1, metadata !"fpexcept.strict") strictfp1792  ret <8 x double> %21793}1794declare <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8f16(<8 x half>, metadata) strictfp1795 1796;1797; Half to Double (Load)1798;1799 1800define double @load_cvt_i16_to_f64(ptr %a0) nounwind {1801; AVX-LABEL: load_cvt_i16_to_f64:1802; AVX:       # %bb.0:1803; AVX-NEXT:    pushq %rax1804; AVX-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm01805; AVX-NEXT:    callq __extendhfsf2@PLT1806; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01807; AVX-NEXT:    popq %rax1808; AVX-NEXT:    retq1809;1810; F16C-LABEL: load_cvt_i16_to_f64:1811; F16C:       # %bb.0:1812; F16C-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm01813; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01814; F16C-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01815; F16C-NEXT:    retq1816;1817; AVX512-LABEL: load_cvt_i16_to_f64:1818; AVX512:       # %bb.0:1819; AVX512-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm01820; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01821; AVX512-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01822; AVX512-NEXT:    retq1823  %1 = load i16, ptr %a01824  %2 = bitcast i16 %1 to half1825  %3 = fpext half %2 to double1826  ret double %31827}1828 1829define <2 x double> @load_cvt_2i16_to_2f64(ptr %a0) nounwind {1830; AVX-LABEL: load_cvt_2i16_to_2f64:1831; AVX:       # %bb.0:1832; AVX-NEXT:    subq $40, %rsp1833; AVX-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm01834; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1835; AVX-NEXT:    vpinsrw $0, 2(%rdi), %xmm0, %xmm01836; AVX-NEXT:    callq __extendhfsf2@PLT1837; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01838; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1839; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1840; AVX-NEXT:    callq __extendhfsf2@PLT1841; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01842; AVX-NEXT:    vunpcklpd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1843; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1844; AVX-NEXT:    addq $40, %rsp1845; AVX-NEXT:    retq1846;1847; F16C-LABEL: load_cvt_2i16_to_2f64:1848; F16C:       # %bb.0:1849; F16C-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1850; F16C-NEXT:    vcvtph2ps %xmm0, %xmm01851; F16C-NEXT:    vcvtps2pd %xmm0, %xmm01852; F16C-NEXT:    retq1853;1854; AVX512-LABEL: load_cvt_2i16_to_2f64:1855; AVX512:       # %bb.0:1856; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1857; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm01858; AVX512-NEXT:    vcvtps2pd %xmm0, %xmm01859; AVX512-NEXT:    retq1860  %1 = load <2 x i16>, ptr %a01861  %2 = bitcast <2 x i16> %1 to <2 x half>1862  %3 = fpext <2 x half> %2 to <2 x double>1863  ret <2 x double> %31864}1865 1866define <4 x double> @load_cvt_4i16_to_4f64(ptr %a0) nounwind {1867; AVX-LABEL: load_cvt_4i16_to_4f64:1868; AVX:       # %bb.0:1869; AVX-NEXT:    subq $72, %rsp1870; AVX-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm01871; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1872; AVX-NEXT:    vpinsrw $0, 2(%rdi), %xmm0, %xmm01873; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1874; AVX-NEXT:    vpinsrw $0, 4(%rdi), %xmm0, %xmm01875; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1876; AVX-NEXT:    vpinsrw $0, 6(%rdi), %xmm0, %xmm01877; AVX-NEXT:    callq __extendhfsf2@PLT1878; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01879; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1880; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1881; AVX-NEXT:    callq __extendhfsf2@PLT1882; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01883; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1884; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1885; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1886; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1887; AVX-NEXT:    callq __extendhfsf2@PLT1888; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01889; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1890; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1891; AVX-NEXT:    callq __extendhfsf2@PLT1892; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01893; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1894; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1895; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1896; AVX-NEXT:    addq $72, %rsp1897; AVX-NEXT:    retq1898;1899; F16C-LABEL: load_cvt_4i16_to_4f64:1900; F16C:       # %bb.0:1901; F16C-NEXT:    vcvtph2ps (%rdi), %xmm01902; F16C-NEXT:    vcvtps2pd %xmm0, %ymm01903; F16C-NEXT:    retq1904;1905; AVX512-LABEL: load_cvt_4i16_to_4f64:1906; AVX512:       # %bb.0:1907; AVX512-NEXT:    vcvtph2ps (%rdi), %xmm01908; AVX512-NEXT:    vcvtps2pd %xmm0, %ymm01909; AVX512-NEXT:    retq1910  %1 = load <4 x i16>, ptr %a01911  %2 = bitcast <4 x i16> %1 to <4 x half>1912  %3 = fpext <4 x half> %2 to <4 x double>1913  ret <4 x double> %31914}1915 1916define <4 x double> @load_cvt_8i16_to_4f64(ptr %a0) nounwind {1917; AVX-LABEL: load_cvt_8i16_to_4f64:1918; AVX:       # %bb.0:1919; AVX-NEXT:    subq $72, %rsp1920; AVX-NEXT:    vmovdqa (%rdi), %xmm01921; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1922; AVX-NEXT:    vmovq %xmm0, %rax1923; AVX-NEXT:    movq %rax, %rcx1924; AVX-NEXT:    shrq $48, %rcx1925; AVX-NEXT:    movq %rax, %rdx1926; AVX-NEXT:    shrq $32, %rdx1927; AVX-NEXT:    shrl $16, %eax1928; AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm01929; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1930; AVX-NEXT:    vpinsrw $0, %edx, %xmm0, %xmm01931; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill1932; AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm01933; AVX-NEXT:    callq __extendhfsf2@PLT1934; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01935; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1936; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload1937; AVX-NEXT:    callq __extendhfsf2@PLT1938; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01939; AVX-NEXT:    vunpcklpd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1940; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]1941; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1942; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1943; AVX-NEXT:    callq __extendhfsf2@PLT1944; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01945; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1946; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1947; AVX-NEXT:    callq __extendhfsf2@PLT1948; AVX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01949; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1950; AVX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1951; AVX-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1952; AVX-NEXT:    addq $72, %rsp1953; AVX-NEXT:    retq1954;1955; F16C-LABEL: load_cvt_8i16_to_4f64:1956; F16C:       # %bb.0:1957; F16C-NEXT:    vcvtph2ps (%rdi), %xmm01958; F16C-NEXT:    vcvtps2pd %xmm0, %ymm01959; F16C-NEXT:    retq1960;1961; AVX512-LABEL: load_cvt_8i16_to_4f64:1962; AVX512:       # %bb.0:1963; AVX512-NEXT:    vcvtph2ps (%rdi), %xmm01964; AVX512-NEXT:    vcvtps2pd %xmm0, %ymm01965; AVX512-NEXT:    retq1966  %1 = load <8 x i16>, ptr %a01967  %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1968  %3 = bitcast <4 x i16> %2 to <4 x half>1969  %4 = fpext <4 x half> %3 to <4 x double>1970  ret <4 x double> %41971}1972 1973define <8 x double> @load_cvt_8i16_to_8f64(ptr %a0) nounwind {1974; AVX1-LABEL: load_cvt_8i16_to_8f64:1975; AVX1:       # %bb.0:1976; AVX1-NEXT:    pushq %rbx1977; AVX1-NEXT:    subq $80, %rsp1978; AVX1-NEXT:    movq %rdi, %rbx1979; AVX1-NEXT:    vmovaps (%rdi), %xmm01980; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1981; AVX1-NEXT:    vbroadcastss 4(%rdi), %xmm01982; AVX1-NEXT:    callq __extendhfsf2@PLT1983; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01984; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1985; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1986; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm01987; AVX1-NEXT:    callq __extendhfsf2@PLT1988; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01989; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1990; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1991; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1992; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1993; AVX1-NEXT:    callq __extendhfsf2@PLT1994; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm01995; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill1996; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1997; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm01998; AVX1-NEXT:    callq __extendhfsf2@PLT1999; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02000; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload2001; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2002; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2003; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2004; AVX1-NEXT:    vbroadcastss 12(%rbx), %xmm02005; AVX1-NEXT:    vzeroupper2006; AVX1-NEXT:    callq __extendhfsf2@PLT2007; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02008; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2009; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2010; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2011; AVX1-NEXT:    callq __extendhfsf2@PLT2012; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02013; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload2014; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2015; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2016; AVX1-NEXT:    vbroadcastss 8(%rbx), %xmm02017; AVX1-NEXT:    callq __extendhfsf2@PLT2018; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02019; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2020; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2021; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2022; AVX1-NEXT:    callq __extendhfsf2@PLT2023; AVX1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02024; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2025; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2026; AVX1-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload2027; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2028; AVX1-NEXT:    addq $80, %rsp2029; AVX1-NEXT:    popq %rbx2030; AVX1-NEXT:    retq2031;2032; AVX2-LABEL: load_cvt_8i16_to_8f64:2033; AVX2:       # %bb.0:2034; AVX2-NEXT:    pushq %rbx2035; AVX2-NEXT:    subq $80, %rsp2036; AVX2-NEXT:    movq %rdi, %rbx2037; AVX2-NEXT:    vmovdqa (%rdi), %xmm02038; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2039; AVX2-NEXT:    vpinsrw $0, 4(%rdi), %xmm0, %xmm02040; AVX2-NEXT:    callq __extendhfsf2@PLT2041; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02042; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2043; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2044; AVX2-NEXT:    vpsrlq $48, %xmm0, %xmm02045; AVX2-NEXT:    callq __extendhfsf2@PLT2046; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02047; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2048; AVX2-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2049; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2050; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2051; AVX2-NEXT:    callq __extendhfsf2@PLT2052; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02053; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2054; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2055; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm02056; AVX2-NEXT:    callq __extendhfsf2@PLT2057; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02058; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload2059; AVX2-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2060; AVX2-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2061; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2062; AVX2-NEXT:    vpinsrw $0, 12(%rbx), %xmm0, %xmm02063; AVX2-NEXT:    vzeroupper2064; AVX2-NEXT:    callq __extendhfsf2@PLT2065; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02066; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2067; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2068; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2069; AVX2-NEXT:    callq __extendhfsf2@PLT2070; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02071; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload2072; AVX2-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2073; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2074; AVX2-NEXT:    vpinsrw $0, 8(%rbx), %xmm0, %xmm02075; AVX2-NEXT:    callq __extendhfsf2@PLT2076; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02077; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2078; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2079; AVX2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2080; AVX2-NEXT:    callq __extendhfsf2@PLT2081; AVX2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm02082; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2083; AVX2-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]2084; AVX2-NEXT:    vinsertf128 $1, (%rsp), %ymm0, %ymm1 # 16-byte Folded Reload2085; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2086; AVX2-NEXT:    addq $80, %rsp2087; AVX2-NEXT:    popq %rbx2088; AVX2-NEXT:    retq2089;2090; F16C-LABEL: load_cvt_8i16_to_8f64:2091; F16C:       # %bb.0:2092; F16C-NEXT:    vcvtph2ps (%rdi), %ymm12093; F16C-NEXT:    vcvtps2pd %xmm1, %ymm02094; F16C-NEXT:    vextractf128 $1, %ymm1, %xmm12095; F16C-NEXT:    vcvtps2pd %xmm1, %ymm12096; F16C-NEXT:    retq2097;2098; AVX512-LABEL: load_cvt_8i16_to_8f64:2099; AVX512:       # %bb.0:2100; AVX512-NEXT:    vcvtph2ps (%rdi), %ymm02101; AVX512-NEXT:    vcvtps2pd %ymm0, %zmm02102; AVX512-NEXT:    retq2103  %1 = load <8 x i16>, ptr %a02104  %2 = bitcast <8 x i16> %1 to <8 x half>2105  %3 = fpext <8 x half> %2 to <8 x double>2106  ret <8 x double> %32107}2108 2109;2110; Float to Half2111;2112 2113define i16 @cvt_f32_to_i16(float %a0) nounwind {2114; AVX-LABEL: cvt_f32_to_i16:2115; AVX:       # %bb.0:2116; AVX-NEXT:    pushq %rax2117; AVX-NEXT:    callq __truncsfhf2@PLT2118; AVX-NEXT:    vpextrw $0, %xmm0, %eax2119; AVX-NEXT:    # kill: def $ax killed $ax killed $eax2120; AVX-NEXT:    popq %rcx2121; AVX-NEXT:    retq2122;2123; F16C-LABEL: cvt_f32_to_i16:2124; F16C:       # %bb.0:2125; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02126; F16C-NEXT:    vpextrw $0, %xmm0, %eax2127; F16C-NEXT:    # kill: def $ax killed $ax killed $eax2128; F16C-NEXT:    retq2129;2130; AVX512-LABEL: cvt_f32_to_i16:2131; AVX512:       # %bb.0:2132; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02133; AVX512-NEXT:    vpextrw $0, %xmm0, %eax2134; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax2135; AVX512-NEXT:    retq2136  %1 = fptrunc float %a0 to half2137  %2 = bitcast half %1 to i162138  ret i16 %22139}2140 2141define <4 x i16> @cvt_4f32_to_4i16(<4 x float> %a0) nounwind {2142; AVX-LABEL: cvt_4f32_to_4i16:2143; AVX:       # %bb.0:2144; AVX-NEXT:    subq $72, %rsp2145; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2146; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2147; AVX-NEXT:    callq __truncsfhf2@PLT2148; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2149; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2150; AVX-NEXT:    callq __truncsfhf2@PLT2151; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2152; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload2153; AVX-NEXT:    # xmm0 = mem[1,0]2154; AVX-NEXT:    callq __truncsfhf2@PLT2155; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2156; AVX-NEXT:    vpshufd $255, (%rsp), %xmm0 # 16-byte Folded Reload2157; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2158; AVX-NEXT:    callq __truncsfhf2@PLT2159; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2160; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2161; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2162; AVX-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2163; AVX-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2164; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2165; AVX-NEXT:    addq $72, %rsp2166; AVX-NEXT:    retq2167;2168; F16C-LABEL: cvt_4f32_to_4i16:2169; F16C:       # %bb.0:2170; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02171; F16C-NEXT:    retq2172;2173; AVX512-LABEL: cvt_4f32_to_4i16:2174; AVX512:       # %bb.0:2175; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02176; AVX512-NEXT:    retq2177  %1 = fptrunc <4 x float> %a0 to <4 x half>2178  %2 = bitcast <4 x half> %1 to <4 x i16>2179  ret <4 x i16> %22180}2181 2182define <8 x i16> @cvt_4f32_to_8i16_undef(<4 x float> %a0) nounwind {2183; AVX-LABEL: cvt_4f32_to_8i16_undef:2184; AVX:       # %bb.0:2185; AVX-NEXT:    subq $72, %rsp2186; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2187; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2188; AVX-NEXT:    callq __truncsfhf2@PLT2189; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2190; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2191; AVX-NEXT:    callq __truncsfhf2@PLT2192; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2193; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload2194; AVX-NEXT:    # xmm0 = mem[1,0]2195; AVX-NEXT:    callq __truncsfhf2@PLT2196; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2197; AVX-NEXT:    vpshufd $255, (%rsp), %xmm0 # 16-byte Folded Reload2198; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2199; AVX-NEXT:    callq __truncsfhf2@PLT2200; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2201; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2202; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2203; AVX-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2204; AVX-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2205; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2206; AVX-NEXT:    addq $72, %rsp2207; AVX-NEXT:    retq2208;2209; F16C-LABEL: cvt_4f32_to_8i16_undef:2210; F16C:       # %bb.0:2211; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02212; F16C-NEXT:    retq2213;2214; AVX512-LABEL: cvt_4f32_to_8i16_undef:2215; AVX512:       # %bb.0:2216; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02217; AVX512-NEXT:    retq2218  %1 = fptrunc <4 x float> %a0 to <4 x half>2219  %2 = bitcast <4 x half> %1 to <4 x i16>2220  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2221  ret <8 x i16> %32222}2223 2224define <8 x i16> @cvt_4f32_to_8i16_zero(<4 x float> %a0) nounwind {2225; AVX-LABEL: cvt_4f32_to_8i16_zero:2226; AVX:       # %bb.0:2227; AVX-NEXT:    subq $72, %rsp2228; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2229; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2230; AVX-NEXT:    callq __truncsfhf2@PLT2231; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2232; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2233; AVX-NEXT:    callq __truncsfhf2@PLT2234; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2235; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload2236; AVX-NEXT:    # xmm0 = mem[1,0]2237; AVX-NEXT:    callq __truncsfhf2@PLT2238; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2239; AVX-NEXT:    vpshufd $255, (%rsp), %xmm0 # 16-byte Folded Reload2240; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2241; AVX-NEXT:    callq __truncsfhf2@PLT2242; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2243; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2244; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2245; AVX-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2246; AVX-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2247; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2248; AVX-NEXT:    addq $72, %rsp2249; AVX-NEXT:    retq2250;2251; F16C-LABEL: cvt_4f32_to_8i16_zero:2252; F16C:       # %bb.0:2253; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02254; F16C-NEXT:    retq2255;2256; AVX512-LABEL: cvt_4f32_to_8i16_zero:2257; AVX512:       # %bb.0:2258; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02259; AVX512-NEXT:    retq2260  %1 = fptrunc <4 x float> %a0 to <4 x half>2261  %2 = bitcast <4 x half> %1 to <4 x i16>2262  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2263  ret <8 x i16> %32264}2265 2266define <8 x i16> @cvt_8f32_to_8i16(<8 x float> %a0) nounwind {2267; AVX-LABEL: cvt_8f32_to_8i16:2268; AVX:       # %bb.0:2269; AVX-NEXT:    subq $88, %rsp2270; AVX-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2271; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm02272; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2273; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2274; AVX-NEXT:    vzeroupper2275; AVX-NEXT:    callq __truncsfhf2@PLT2276; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2277; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2278; AVX-NEXT:    # xmm0 = mem[1,0]2279; AVX-NEXT:    callq __truncsfhf2@PLT2280; AVX-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2281; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2282; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2283; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2284; AVX-NEXT:    callq __truncsfhf2@PLT2285; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2286; AVX-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2287; AVX-NEXT:    # xmm0 = mem[1,1,3,3]2288; AVX-NEXT:    callq __truncsfhf2@PLT2289; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2290; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2291; AVX-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2292; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2293; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2294; AVX-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2295; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2296; AVX-NEXT:    callq __truncsfhf2@PLT2297; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2298; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2299; AVX-NEXT:    # xmm0 = mem[1,0]2300; AVX-NEXT:    callq __truncsfhf2@PLT2301; AVX-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2302; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2303; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2304; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2305; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02306; AVX-NEXT:    vzeroupper2307; AVX-NEXT:    callq __truncsfhf2@PLT2308; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2309; AVX-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2310; AVX-NEXT:    # xmm0 = mem[1,1,3,3]2311; AVX-NEXT:    callq __truncsfhf2@PLT2312; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2313; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2314; AVX-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2315; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2316; AVX-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2317; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]2318; AVX-NEXT:    addq $88, %rsp2319; AVX-NEXT:    retq2320;2321; F16C-LABEL: cvt_8f32_to_8i16:2322; F16C:       # %bb.0:2323; F16C-NEXT:    vcvtps2ph $4, %ymm0, %xmm02324; F16C-NEXT:    vzeroupper2325; F16C-NEXT:    retq2326;2327; AVX512-LABEL: cvt_8f32_to_8i16:2328; AVX512:       # %bb.0:2329; AVX512-NEXT:    vcvtps2ph $4, %ymm0, %xmm02330; AVX512-NEXT:    vzeroupper2331; AVX512-NEXT:    retq2332  %1 = fptrunc <8 x float> %a0 to <8 x half>2333  %2 = bitcast <8 x half> %1 to <8 x i16>2334  ret <8 x i16> %22335}2336 2337define <16 x i16> @cvt_16f32_to_16i16(<16 x float> %a0) nounwind {2338; AVX1-LABEL: cvt_16f32_to_16i16:2339; AVX1:       # %bb.0:2340; AVX1-NEXT:    subq $120, %rsp2341; AVX1-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2342; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2343; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm02344; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2345; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2346; AVX1-NEXT:    vzeroupper2347; AVX1-NEXT:    callq __truncsfhf2@PLT2348; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2349; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2350; AVX1-NEXT:    # xmm0 = mem[1,0]2351; AVX1-NEXT:    callq __truncsfhf2@PLT2352; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2353; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2354; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2355; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2356; AVX1-NEXT:    callq __truncsfhf2@PLT2357; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2358; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2359; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2360; AVX1-NEXT:    callq __truncsfhf2@PLT2361; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2362; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2363; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2364; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2365; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2366; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2367; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]2368; AVX1-NEXT:    callq __truncsfhf2@PLT2369; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2370; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2371; AVX1-NEXT:    # xmm0 = mem[1,0]2372; AVX1-NEXT:    callq __truncsfhf2@PLT2373; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2374; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2375; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2376; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2377; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02378; AVX1-NEXT:    vzeroupper2379; AVX1-NEXT:    callq __truncsfhf2@PLT2380; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2381; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2382; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2383; AVX1-NEXT:    callq __truncsfhf2@PLT2384; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2385; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2386; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2387; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2388; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2389; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]2390; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2391; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2392; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02393; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2394; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2395; AVX1-NEXT:    vzeroupper2396; AVX1-NEXT:    callq __truncsfhf2@PLT2397; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2398; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2399; AVX1-NEXT:    # xmm0 = mem[1,0]2400; AVX1-NEXT:    callq __truncsfhf2@PLT2401; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2402; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2403; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2404; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2405; AVX1-NEXT:    callq __truncsfhf2@PLT2406; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2407; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2408; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2409; AVX1-NEXT:    callq __truncsfhf2@PLT2410; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2411; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2412; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2413; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2414; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2415; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2416; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]2417; AVX1-NEXT:    callq __truncsfhf2@PLT2418; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2419; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2420; AVX1-NEXT:    # xmm0 = mem[1,0]2421; AVX1-NEXT:    callq __truncsfhf2@PLT2422; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2423; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2424; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2425; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2426; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02427; AVX1-NEXT:    vzeroupper2428; AVX1-NEXT:    callq __truncsfhf2@PLT2429; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2430; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2431; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2432; AVX1-NEXT:    callq __truncsfhf2@PLT2433; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2434; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2435; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2436; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2437; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2438; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]2439; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2440; AVX1-NEXT:    addq $120, %rsp2441; AVX1-NEXT:    retq2442;2443; AVX2-LABEL: cvt_16f32_to_16i16:2444; AVX2:       # %bb.0:2445; AVX2-NEXT:    subq $152, %rsp2446; AVX2-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2447; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2448; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm02449; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2450; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2451; AVX2-NEXT:    vzeroupper2452; AVX2-NEXT:    callq __truncsfhf2@PLT2453; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2454; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2455; AVX2-NEXT:    # xmm0 = mem[1,0]2456; AVX2-NEXT:    callq __truncsfhf2@PLT2457; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2458; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2459; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2460; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2461; AVX2-NEXT:    callq __truncsfhf2@PLT2462; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2463; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2464; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2465; AVX2-NEXT:    callq __truncsfhf2@PLT2466; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2467; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2468; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2469; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2470; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2471; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2472; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm02473; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2474; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2475; AVX2-NEXT:    vzeroupper2476; AVX2-NEXT:    callq __truncsfhf2@PLT2477; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2478; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2479; AVX2-NEXT:    # xmm0 = mem[1,0]2480; AVX2-NEXT:    callq __truncsfhf2@PLT2481; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2482; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2483; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2484; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2485; AVX2-NEXT:    callq __truncsfhf2@PLT2486; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2487; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2488; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2489; AVX2-NEXT:    callq __truncsfhf2@PLT2490; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2491; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2492; AVX2-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2493; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2494; AVX2-NEXT:    vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload2495; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2496; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2497; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]2498; AVX2-NEXT:    vzeroupper2499; AVX2-NEXT:    callq __truncsfhf2@PLT2500; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2501; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2502; AVX2-NEXT:    # xmm0 = mem[1,0]2503; AVX2-NEXT:    callq __truncsfhf2@PLT2504; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2505; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2506; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2507; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2508; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02509; AVX2-NEXT:    vzeroupper2510; AVX2-NEXT:    callq __truncsfhf2@PLT2511; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2512; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2513; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2514; AVX2-NEXT:    callq __truncsfhf2@PLT2515; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2516; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2517; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2518; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2519; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2520; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2521; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]2522; AVX2-NEXT:    callq __truncsfhf2@PLT2523; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2524; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2525; AVX2-NEXT:    # xmm0 = mem[1,0]2526; AVX2-NEXT:    callq __truncsfhf2@PLT2527; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2528; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2529; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2530; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2531; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02532; AVX2-NEXT:    vzeroupper2533; AVX2-NEXT:    callq __truncsfhf2@PLT2534; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2535; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2536; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2537; AVX2-NEXT:    callq __truncsfhf2@PLT2538; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2539; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2540; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2541; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2542; AVX2-NEXT:    vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2543; AVX2-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload2544; AVX2-NEXT:    # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]2545; AVX2-NEXT:    addq $152, %rsp2546; AVX2-NEXT:    retq2547;2548; F16C-LABEL: cvt_16f32_to_16i16:2549; F16C:       # %bb.0:2550; F16C-NEXT:    vcvtps2ph $4, %ymm0, %xmm02551; F16C-NEXT:    vcvtps2ph $4, %ymm1, %xmm12552; F16C-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02553; F16C-NEXT:    retq2554;2555; AVX512-LABEL: cvt_16f32_to_16i16:2556; AVX512:       # %bb.0:2557; AVX512-NEXT:    vcvtps2ph $4, %zmm0, %ymm02558; AVX512-NEXT:    retq2559  %1 = fptrunc <16 x float> %a0 to <16 x half>2560  %2 = bitcast <16 x half> %1 to <16 x i16>2561  ret <16 x i16> %22562}2563 2564;2565; Float to Half (Store)2566;2567 2568define void @store_cvt_f32_to_i16(float %a0, ptr %a1) nounwind {2569; AVX-LABEL: store_cvt_f32_to_i16:2570; AVX:       # %bb.0:2571; AVX-NEXT:    pushq %rbx2572; AVX-NEXT:    movq %rdi, %rbx2573; AVX-NEXT:    callq __truncsfhf2@PLT2574; AVX-NEXT:    vpextrw $0, %xmm0, (%rbx)2575; AVX-NEXT:    popq %rbx2576; AVX-NEXT:    retq2577;2578; F16C-LABEL: store_cvt_f32_to_i16:2579; F16C:       # %bb.0:2580; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02581; F16C-NEXT:    vpextrw $0, %xmm0, (%rdi)2582; F16C-NEXT:    retq2583;2584; AVX512-LABEL: store_cvt_f32_to_i16:2585; AVX512:       # %bb.0:2586; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02587; AVX512-NEXT:    vpextrw $0, %xmm0, (%rdi)2588; AVX512-NEXT:    retq2589  %1 = fptrunc float %a0 to half2590  %2 = bitcast half %1 to i162591  store i16 %2, ptr %a12592  ret void2593}2594 2595define void @store_cvt_4f32_to_4i16(<4 x float> %a0, ptr %a1) nounwind {2596; AVX-LABEL: store_cvt_4f32_to_4i16:2597; AVX:       # %bb.0:2598; AVX-NEXT:    pushq %rbx2599; AVX-NEXT:    subq $64, %rsp2600; AVX-NEXT:    movq %rdi, %rbx2601; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2602; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2603; AVX-NEXT:    callq __truncsfhf2@PLT2604; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2605; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload2606; AVX-NEXT:    # xmm0 = mem[1,0]2607; AVX-NEXT:    callq __truncsfhf2@PLT2608; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2609; AVX-NEXT:    vpermilps $255, (%rsp), %xmm0 # 16-byte Folded Reload2610; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2611; AVX-NEXT:    callq __truncsfhf2@PLT2612; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2613; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload2614; AVX-NEXT:    callq __truncsfhf2@PLT2615; AVX-NEXT:    vpextrw $0, %xmm0, (%rbx)2616; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2617; AVX-NEXT:    vpextrw $0, %xmm0, 6(%rbx)2618; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2619; AVX-NEXT:    vpextrw $0, %xmm0, 4(%rbx)2620; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2621; AVX-NEXT:    vpextrw $0, %xmm0, 2(%rbx)2622; AVX-NEXT:    addq $64, %rsp2623; AVX-NEXT:    popq %rbx2624; AVX-NEXT:    retq2625;2626; F16C-LABEL: store_cvt_4f32_to_4i16:2627; F16C:       # %bb.0:2628; F16C-NEXT:    vcvtps2ph $4, %xmm0, (%rdi)2629; F16C-NEXT:    retq2630;2631; AVX512-LABEL: store_cvt_4f32_to_4i16:2632; AVX512:       # %bb.0:2633; AVX512-NEXT:    vcvtps2ph $4, %xmm0, (%rdi)2634; AVX512-NEXT:    retq2635  %1 = fptrunc <4 x float> %a0 to <4 x half>2636  %2 = bitcast <4 x half> %1 to <4 x i16>2637  store <4 x i16> %2, ptr %a12638  ret void2639}2640 2641define void @store_cvt_4f32_to_8i16_undef(<4 x float> %a0, ptr %a1) nounwind {2642; AVX-LABEL: store_cvt_4f32_to_8i16_undef:2643; AVX:       # %bb.0:2644; AVX-NEXT:    pushq %rbx2645; AVX-NEXT:    subq $64, %rsp2646; AVX-NEXT:    movq %rdi, %rbx2647; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2648; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2649; AVX-NEXT:    callq __truncsfhf2@PLT2650; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2651; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2652; AVX-NEXT:    callq __truncsfhf2@PLT2653; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2654; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload2655; AVX-NEXT:    # xmm0 = mem[1,0]2656; AVX-NEXT:    callq __truncsfhf2@PLT2657; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2658; AVX-NEXT:    vpshufd $255, (%rsp), %xmm0 # 16-byte Folded Reload2659; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2660; AVX-NEXT:    callq __truncsfhf2@PLT2661; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2662; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2663; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2664; AVX-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2665; AVX-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2666; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2667; AVX-NEXT:    vmovaps %xmm0, (%rbx)2668; AVX-NEXT:    addq $64, %rsp2669; AVX-NEXT:    popq %rbx2670; AVX-NEXT:    retq2671;2672; F16C-LABEL: store_cvt_4f32_to_8i16_undef:2673; F16C:       # %bb.0:2674; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02675; F16C-NEXT:    vmovaps %xmm0, (%rdi)2676; F16C-NEXT:    retq2677;2678; AVX512-LABEL: store_cvt_4f32_to_8i16_undef:2679; AVX512:       # %bb.0:2680; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02681; AVX512-NEXT:    vmovaps %xmm0, (%rdi)2682; AVX512-NEXT:    retq2683  %1 = fptrunc <4 x float> %a0 to <4 x half>2684  %2 = bitcast <4 x half> %1 to <4 x i16>2685  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2686  store <8 x i16> %3, ptr %a12687  ret void2688}2689 2690define void @store_cvt_4f32_to_8i16_zero(<4 x float> %a0, ptr %a1) nounwind {2691; AVX-LABEL: store_cvt_4f32_to_8i16_zero:2692; AVX:       # %bb.0:2693; AVX-NEXT:    pushq %rbx2694; AVX-NEXT:    subq $64, %rsp2695; AVX-NEXT:    movq %rdi, %rbx2696; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2697; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2698; AVX-NEXT:    callq __truncsfhf2@PLT2699; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2700; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload2701; AVX-NEXT:    callq __truncsfhf2@PLT2702; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2703; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload2704; AVX-NEXT:    # xmm0 = mem[1,0]2705; AVX-NEXT:    callq __truncsfhf2@PLT2706; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2707; AVX-NEXT:    vpshufd $255, (%rsp), %xmm0 # 16-byte Folded Reload2708; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2709; AVX-NEXT:    callq __truncsfhf2@PLT2710; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2711; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2712; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2713; AVX-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload2714; AVX-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]2715; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2716; AVX-NEXT:    vmovaps %xmm0, (%rbx)2717; AVX-NEXT:    addq $64, %rsp2718; AVX-NEXT:    popq %rbx2719; AVX-NEXT:    retq2720;2721; F16C-LABEL: store_cvt_4f32_to_8i16_zero:2722; F16C:       # %bb.0:2723; F16C-NEXT:    vcvtps2ph $4, %xmm0, %xmm02724; F16C-NEXT:    vmovaps %xmm0, (%rdi)2725; F16C-NEXT:    retq2726;2727; AVX512-LABEL: store_cvt_4f32_to_8i16_zero:2728; AVX512:       # %bb.0:2729; AVX512-NEXT:    vcvtps2ph $4, %xmm0, %xmm02730; AVX512-NEXT:    vmovaps %xmm0, (%rdi)2731; AVX512-NEXT:    retq2732  %1 = fptrunc <4 x float> %a0 to <4 x half>2733  %2 = bitcast <4 x half> %1 to <4 x i16>2734  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2735  store <8 x i16> %3, ptr %a12736  ret void2737}2738 2739define void @store_cvt_8f32_to_8i16(<8 x float> %a0, ptr %a1) nounwind {2740; AVX-LABEL: store_cvt_8f32_to_8i16:2741; AVX:       # %bb.0:2742; AVX-NEXT:    pushq %rbx2743; AVX-NEXT:    subq $80, %rsp2744; AVX-NEXT:    movq %rdi, %rbx2745; AVX-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2746; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm02747; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2748; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2749; AVX-NEXT:    vzeroupper2750; AVX-NEXT:    callq __truncsfhf2@PLT2751; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2752; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2753; AVX-NEXT:    # xmm0 = mem[1,0]2754; AVX-NEXT:    callq __truncsfhf2@PLT2755; AVX-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2756; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2757; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2758; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2759; AVX-NEXT:    callq __truncsfhf2@PLT2760; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2761; AVX-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2762; AVX-NEXT:    # xmm0 = mem[1,1,3,3]2763; AVX-NEXT:    callq __truncsfhf2@PLT2764; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2765; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2766; AVX-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2767; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2768; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2769; AVX-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2770; AVX-NEXT:    # xmm0 = mem[3,3,3,3]2771; AVX-NEXT:    callq __truncsfhf2@PLT2772; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2773; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2774; AVX-NEXT:    # xmm0 = mem[1,0]2775; AVX-NEXT:    callq __truncsfhf2@PLT2776; AVX-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2777; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2778; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2779; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2780; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02781; AVX-NEXT:    vzeroupper2782; AVX-NEXT:    callq __truncsfhf2@PLT2783; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2784; AVX-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2785; AVX-NEXT:    # xmm0 = mem[1,1,3,3]2786; AVX-NEXT:    callq __truncsfhf2@PLT2787; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2788; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2789; AVX-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2790; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2791; AVX-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2792; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]2793; AVX-NEXT:    vmovdqa %xmm0, (%rbx)2794; AVX-NEXT:    addq $80, %rsp2795; AVX-NEXT:    popq %rbx2796; AVX-NEXT:    retq2797;2798; F16C-LABEL: store_cvt_8f32_to_8i16:2799; F16C:       # %bb.0:2800; F16C-NEXT:    vcvtps2ph $4, %ymm0, (%rdi)2801; F16C-NEXT:    vzeroupper2802; F16C-NEXT:    retq2803;2804; AVX512-LABEL: store_cvt_8f32_to_8i16:2805; AVX512:       # %bb.0:2806; AVX512-NEXT:    vcvtps2ph $4, %ymm0, (%rdi)2807; AVX512-NEXT:    vzeroupper2808; AVX512-NEXT:    retq2809  %1 = fptrunc <8 x float> %a0 to <8 x half>2810  %2 = bitcast <8 x half> %1 to <8 x i16>2811  store <8 x i16> %2, ptr %a12812  ret void2813}2814 2815define void @store_cvt_16f32_to_16i16(<16 x float> %a0, ptr %a1) nounwind {2816; AVX1-LABEL: store_cvt_16f32_to_16i16:2817; AVX1:       # %bb.0:2818; AVX1-NEXT:    pushq %rbx2819; AVX1-NEXT:    subq $112, %rsp2820; AVX1-NEXT:    movq %rdi, %rbx2821; AVX1-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2822; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2823; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm02824; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2825; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2826; AVX1-NEXT:    vzeroupper2827; AVX1-NEXT:    callq __truncsfhf2@PLT2828; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2829; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2830; AVX1-NEXT:    # xmm0 = mem[1,0]2831; AVX1-NEXT:    callq __truncsfhf2@PLT2832; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2833; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2834; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2835; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2836; AVX1-NEXT:    callq __truncsfhf2@PLT2837; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2838; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2839; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2840; AVX1-NEXT:    callq __truncsfhf2@PLT2841; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2842; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2843; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2844; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2845; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2846; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2847; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]2848; AVX1-NEXT:    callq __truncsfhf2@PLT2849; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2850; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2851; AVX1-NEXT:    # xmm0 = mem[1,0]2852; AVX1-NEXT:    callq __truncsfhf2@PLT2853; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2854; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2855; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2856; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2857; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02858; AVX1-NEXT:    vzeroupper2859; AVX1-NEXT:    callq __truncsfhf2@PLT2860; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2861; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2862; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2863; AVX1-NEXT:    callq __truncsfhf2@PLT2864; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2865; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2866; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2867; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2868; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2869; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]2870; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2871; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2872; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02873; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2874; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2875; AVX1-NEXT:    vzeroupper2876; AVX1-NEXT:    callq __truncsfhf2@PLT2877; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2878; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2879; AVX1-NEXT:    # xmm0 = mem[1,0]2880; AVX1-NEXT:    callq __truncsfhf2@PLT2881; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2882; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2883; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2884; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2885; AVX1-NEXT:    callq __truncsfhf2@PLT2886; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2887; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2888; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2889; AVX1-NEXT:    callq __truncsfhf2@PLT2890; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2891; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2892; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2893; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2894; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2895; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2896; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]2897; AVX1-NEXT:    callq __truncsfhf2@PLT2898; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2899; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2900; AVX1-NEXT:    # xmm0 = mem[1,0]2901; AVX1-NEXT:    callq __truncsfhf2@PLT2902; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2903; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2904; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2905; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2906; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02907; AVX1-NEXT:    vzeroupper2908; AVX1-NEXT:    callq __truncsfhf2@PLT2909; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2910; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2911; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]2912; AVX1-NEXT:    callq __truncsfhf2@PLT2913; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2914; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2915; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2916; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2917; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2918; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]2919; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2920; AVX1-NEXT:    vmovaps %ymm0, (%rbx)2921; AVX1-NEXT:    addq $112, %rsp2922; AVX1-NEXT:    popq %rbx2923; AVX1-NEXT:    vzeroupper2924; AVX1-NEXT:    retq2925;2926; AVX2-LABEL: store_cvt_16f32_to_16i16:2927; AVX2:       # %bb.0:2928; AVX2-NEXT:    pushq %rbx2929; AVX2-NEXT:    subq $144, %rsp2930; AVX2-NEXT:    movq %rdi, %rbx2931; AVX2-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2932; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2933; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm02934; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2935; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2936; AVX2-NEXT:    vzeroupper2937; AVX2-NEXT:    callq __truncsfhf2@PLT2938; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2939; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2940; AVX2-NEXT:    # xmm0 = mem[1,0]2941; AVX2-NEXT:    callq __truncsfhf2@PLT2942; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2943; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2944; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2945; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2946; AVX2-NEXT:    callq __truncsfhf2@PLT2947; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2948; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2949; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2950; AVX2-NEXT:    callq __truncsfhf2@PLT2951; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2952; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2953; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2954; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2955; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2956; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2957; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm02958; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2959; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]2960; AVX2-NEXT:    vzeroupper2961; AVX2-NEXT:    callq __truncsfhf2@PLT2962; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2963; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2964; AVX2-NEXT:    # xmm0 = mem[1,0]2965; AVX2-NEXT:    callq __truncsfhf2@PLT2966; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2967; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2968; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2969; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2970; AVX2-NEXT:    callq __truncsfhf2@PLT2971; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2972; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2973; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2974; AVX2-NEXT:    callq __truncsfhf2@PLT2975; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload2976; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]2977; AVX2-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2978; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]2979; AVX2-NEXT:    vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload2980; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2981; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2982; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]2983; AVX2-NEXT:    vzeroupper2984; AVX2-NEXT:    callq __truncsfhf2@PLT2985; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill2986; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2987; AVX2-NEXT:    # xmm0 = mem[1,0]2988; AVX2-NEXT:    callq __truncsfhf2@PLT2989; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload2990; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]2991; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill2992; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2993; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02994; AVX2-NEXT:    vzeroupper2995; AVX2-NEXT:    callq __truncsfhf2@PLT2996; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2997; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload2998; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]2999; AVX2-NEXT:    callq __truncsfhf2@PLT3000; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3001; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3002; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload3003; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3004; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3005; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3006; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]3007; AVX2-NEXT:    callq __truncsfhf2@PLT3008; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3009; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3010; AVX2-NEXT:    # xmm0 = mem[1,0]3011; AVX2-NEXT:    callq __truncsfhf2@PLT3012; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload3013; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3014; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill3015; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3016; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03017; AVX2-NEXT:    vzeroupper3018; AVX2-NEXT:    callq __truncsfhf2@PLT3019; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3020; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3021; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]3022; AVX2-NEXT:    callq __truncsfhf2@PLT3023; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3024; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3025; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload3026; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3027; AVX2-NEXT:    vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload3028; AVX2-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload3029; AVX2-NEXT:    # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]3030; AVX2-NEXT:    vmovdqa %ymm0, (%rbx)3031; AVX2-NEXT:    addq $144, %rsp3032; AVX2-NEXT:    popq %rbx3033; AVX2-NEXT:    vzeroupper3034; AVX2-NEXT:    retq3035;3036; F16C-LABEL: store_cvt_16f32_to_16i16:3037; F16C:       # %bb.0:3038; F16C-NEXT:    vcvtps2ph $4, %ymm1, 16(%rdi)3039; F16C-NEXT:    vcvtps2ph $4, %ymm0, (%rdi)3040; F16C-NEXT:    vzeroupper3041; F16C-NEXT:    retq3042;3043; AVX512-LABEL: store_cvt_16f32_to_16i16:3044; AVX512:       # %bb.0:3045; AVX512-NEXT:    vcvtps2ph $4, %zmm0, (%rdi)3046; AVX512-NEXT:    vzeroupper3047; AVX512-NEXT:    retq3048  %1 = fptrunc <16 x float> %a0 to <16 x half>3049  %2 = bitcast <16 x half> %1 to <16 x i16>3050  store <16 x i16> %2, ptr %a13051  ret void3052}3053 3054;3055; Double to Half3056;3057 3058define i16 @cvt_f64_to_i16(double %a0) nounwind {3059; ALL-LABEL: cvt_f64_to_i16:3060; ALL:       # %bb.0:3061; ALL-NEXT:    pushq %rax3062; ALL-NEXT:    callq __truncdfhf2@PLT3063; ALL-NEXT:    vpextrw $0, %xmm0, %eax3064; ALL-NEXT:    # kill: def $ax killed $ax killed $eax3065; ALL-NEXT:    popq %rcx3066; ALL-NEXT:    retq3067; AVX-LABEL: cvt_f64_to_i16:3068; AVX:       # %bb.0:3069; AVX-NEXT:    pushq %rax3070; AVX-NEXT:    callq __truncdfhf2@PLT3071; AVX-NEXT:    vpextrw $0, %xmm0, %eax3072; AVX-NEXT:    # kill: def $ax killed $ax killed $eax3073; AVX-NEXT:    popq %rcx3074; AVX-NEXT:    retq3075;3076; F16C-LABEL: cvt_f64_to_i16:3077; F16C:       # %bb.0:3078; F16C-NEXT:    pushq %rax3079; F16C-NEXT:    callq __truncdfhf2@PLT3080; F16C-NEXT:    vpextrw $0, %xmm0, %eax3081; F16C-NEXT:    # kill: def $ax killed $ax killed $eax3082; F16C-NEXT:    popq %rcx3083; F16C-NEXT:    retq3084;3085; AVX512-LABEL: cvt_f64_to_i16:3086; AVX512:       # %bb.0:3087; AVX512-NEXT:    pushq %rax3088; AVX512-NEXT:    callq __truncdfhf2@PLT3089; AVX512-NEXT:    vpextrw $0, %xmm0, %eax3090; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax3091; AVX512-NEXT:    popq %rcx3092; AVX512-NEXT:    retq3093  %1 = fptrunc double %a0 to half3094  %2 = bitcast half %1 to i163095  ret i16 %23096}3097 3098define <2 x i16> @cvt_2f64_to_2i16(<2 x double> %a0) nounwind {3099; AVX-LABEL: cvt_2f64_to_2i16:3100; AVX:       # %bb.0:3101; AVX-NEXT:    subq $40, %rsp3102; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3103; AVX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3104; AVX-NEXT:    callq __truncdfhf2@PLT3105; AVX-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3106; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3107; AVX-NEXT:    callq __truncdfhf2@PLT3108; AVX-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload3109; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3110; AVX-NEXT:    addq $40, %rsp3111; AVX-NEXT:    retq3112;3113; F16C-LABEL: cvt_2f64_to_2i16:3114; F16C:       # %bb.0:3115; F16C-NEXT:    subq $40, %rsp3116; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3117; F16C-NEXT:    callq __truncdfhf2@PLT3118; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3119; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3120; F16C-NEXT:    # xmm0 = mem[1,0]3121; F16C-NEXT:    callq __truncdfhf2@PLT3122; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3123; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3124; F16C-NEXT:    addq $40, %rsp3125; F16C-NEXT:    retq3126;3127; AVX512-LABEL: cvt_2f64_to_2i16:3128; AVX512:       # %bb.0:3129; AVX512-NEXT:    subq $40, %rsp3130; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3131; AVX512-NEXT:    callq __truncdfhf2@PLT3132; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3133; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3134; AVX512-NEXT:    # xmm0 = mem[1,0]3135; AVX512-NEXT:    callq __truncdfhf2@PLT3136; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3137; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3138; AVX512-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill3139; AVX512-NEXT:    callq __truncdfhf2@PLT3140; AVX512-NEXT:    vpbroadcastw %xmm0, %xmm03141; AVX512-NEXT:    vpblendd $13, (%rsp), %xmm0, %xmm1 # 16-byte Folded Reload3142; AVX512-NEXT:    # xmm1 = mem[0],xmm0[1],mem[2,3]3143; AVX512-NEXT:    vpbroadcastw %xmm0, %xmm03144; AVX512-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]3145; AVX512-NEXT:    addq $40, %rsp3146; AVX512-NEXT:    retq3147  %1 = fptrunc <2 x double> %a0 to <2 x half>3148  %2 = bitcast <2 x half> %1 to <2 x i16>3149  ret <2 x i16> %23150}3151 3152define <4 x i16> @cvt_4f64_to_4i16(<4 x double> %a0) nounwind {3153; AVX1-LABEL: cvt_4f64_to_4i16:3154; AVX1:       # %bb.0:3155; AVX1-NEXT:    subq $88, %rsp3156; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3157; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3158; AVX1-NEXT:    vzeroupper3159; AVX1-NEXT:    callq __truncdfhf2@PLT3160; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3161; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3162; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03163; AVX1-NEXT:    vzeroupper3164; AVX1-NEXT:    callq __truncdfhf2@PLT3165; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3166; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3167; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03168; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3169; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3170; AVX1-NEXT:    vzeroupper3171; AVX1-NEXT:    callq __truncdfhf2@PLT3172; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3173; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3174; AVX1-NEXT:    callq __truncdfhf2@PLT3175; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3176; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3177; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3178; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload3179; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]3180; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero3181; AVX1-NEXT:    addq $88, %rsp3182; AVX1-NEXT:    retq3183;3184; AVX2-LABEL: cvt_4f64_to_4i16:3185; AVX2:       # %bb.0:3186; AVX2-NEXT:    subq $88, %rsp3187; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3188; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3189; AVX2-NEXT:    vzeroupper3190; AVX2-NEXT:    callq __truncdfhf2@PLT3191; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3192; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3193; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03194; AVX2-NEXT:    vzeroupper3195; AVX2-NEXT:    callq __truncdfhf2@PLT3196; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3197; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload3198; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm03199; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3200; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3201; AVX2-NEXT:    vzeroupper3202; AVX2-NEXT:    callq __truncdfhf2@PLT3203; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3204; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3205; AVX2-NEXT:    callq __truncdfhf2@PLT3206; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3207; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3208; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3209; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload3210; AVX2-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]3211; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero3212; AVX2-NEXT:    addq $88, %rsp3213; AVX2-NEXT:    retq3214;3215; F16C-LABEL: cvt_4f64_to_4i16:3216; F16C:       # %bb.0:3217; F16C-NEXT:    subq $72, %rsp3218; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3219; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm03220; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3221; F16C-NEXT:    vzeroupper3222; F16C-NEXT:    callq __truncdfhf2@PLT3223; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3224; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3225; F16C-NEXT:    # xmm0 = mem[1,0]3226; F16C-NEXT:    callq __truncdfhf2@PLT3227; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3228; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3229; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3230; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3231; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03232; F16C-NEXT:    vzeroupper3233; F16C-NEXT:    callq __truncdfhf2@PLT3234; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3235; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3236; F16C-NEXT:    # xmm0 = mem[1,0]3237; F16C-NEXT:    callq __truncdfhf2@PLT3238; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3239; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3240; F16C-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3241; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero3242; F16C-NEXT:    addq $72, %rsp3243; F16C-NEXT:    retq3244;3245; AVX512-LABEL: cvt_4f64_to_4i16:3246; AVX512:       # %bb.0:3247; AVX512-NEXT:    subq $72, %rsp3248; AVX512-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3249; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm03250; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3251; AVX512-NEXT:    vzeroupper3252; AVX512-NEXT:    callq __truncdfhf2@PLT3253; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3254; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3255; AVX512-NEXT:    # xmm0 = mem[1,0]3256; AVX512-NEXT:    callq __truncdfhf2@PLT3257; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3258; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3259; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3260; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3261; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03262; AVX512-NEXT:    vzeroupper3263; AVX512-NEXT:    callq __truncdfhf2@PLT3264; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3265; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3266; AVX512-NEXT:    # xmm0 = mem[1,0]3267; AVX512-NEXT:    callq __truncdfhf2@PLT3268; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3269; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3270; AVX512-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3271; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3272; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3273; AVX512-NEXT:    callq __truncdfhf2@PLT3274; AVX512-NEXT:    vpbroadcastw %xmm0, %xmm03275; AVX512-NEXT:    vpblendd $3, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3276; AVX512-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]3277; AVX512-NEXT:    addq $72, %rsp3278; AVX512-NEXT:    retq3279  %1 = fptrunc <4 x double> %a0 to <4 x half>3280  %2 = bitcast <4 x half> %1 to <4 x i16>3281  ret <4 x i16> %23282}3283 3284define <8 x i16> @cvt_4f64_to_8i16_undef(<4 x double> %a0) nounwind {3285; AVX1-LABEL: cvt_4f64_to_8i16_undef:3286; AVX1:       # %bb.0:3287; AVX1-NEXT:    subq $88, %rsp3288; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3289; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3290; AVX1-NEXT:    vzeroupper3291; AVX1-NEXT:    callq __truncdfhf2@PLT3292; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3293; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3294; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03295; AVX1-NEXT:    vzeroupper3296; AVX1-NEXT:    callq __truncdfhf2@PLT3297; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3298; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3299; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03300; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3301; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3302; AVX1-NEXT:    vzeroupper3303; AVX1-NEXT:    callq __truncdfhf2@PLT3304; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3305; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3306; AVX1-NEXT:    callq __truncdfhf2@PLT3307; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3308; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3309; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3310; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload3311; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]3312; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero3313; AVX1-NEXT:    addq $88, %rsp3314; AVX1-NEXT:    retq3315;3316; AVX2-LABEL: cvt_4f64_to_8i16_undef:3317; AVX2:       # %bb.0:3318; AVX2-NEXT:    subq $88, %rsp3319; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3320; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3321; AVX2-NEXT:    vzeroupper3322; AVX2-NEXT:    callq __truncdfhf2@PLT3323; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3324; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3325; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03326; AVX2-NEXT:    vzeroupper3327; AVX2-NEXT:    callq __truncdfhf2@PLT3328; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3329; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload3330; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm03331; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3332; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3333; AVX2-NEXT:    vzeroupper3334; AVX2-NEXT:    callq __truncdfhf2@PLT3335; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3336; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3337; AVX2-NEXT:    callq __truncdfhf2@PLT3338; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3339; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3340; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3341; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload3342; AVX2-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]3343; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero3344; AVX2-NEXT:    addq $88, %rsp3345; AVX2-NEXT:    retq3346;3347; F16C-LABEL: cvt_4f64_to_8i16_undef:3348; F16C:       # %bb.0:3349; F16C-NEXT:    subq $72, %rsp3350; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3351; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm03352; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3353; F16C-NEXT:    vzeroupper3354; F16C-NEXT:    callq __truncdfhf2@PLT3355; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3356; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3357; F16C-NEXT:    # xmm0 = mem[1,0]3358; F16C-NEXT:    callq __truncdfhf2@PLT3359; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3360; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3361; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3362; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3363; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03364; F16C-NEXT:    vzeroupper3365; F16C-NEXT:    callq __truncdfhf2@PLT3366; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3367; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3368; F16C-NEXT:    # xmm0 = mem[1,0]3369; F16C-NEXT:    callq __truncdfhf2@PLT3370; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3371; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3372; F16C-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3373; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero3374; F16C-NEXT:    addq $72, %rsp3375; F16C-NEXT:    retq3376;3377; AVX512-LABEL: cvt_4f64_to_8i16_undef:3378; AVX512:       # %bb.0:3379; AVX512-NEXT:    subq $72, %rsp3380; AVX512-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3381; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm03382; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3383; AVX512-NEXT:    vzeroupper3384; AVX512-NEXT:    callq __truncdfhf2@PLT3385; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3386; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3387; AVX512-NEXT:    # xmm0 = mem[1,0]3388; AVX512-NEXT:    callq __truncdfhf2@PLT3389; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3390; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3391; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3392; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3393; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03394; AVX512-NEXT:    vzeroupper3395; AVX512-NEXT:    callq __truncdfhf2@PLT3396; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3397; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3398; AVX512-NEXT:    # xmm0 = mem[1,0]3399; AVX512-NEXT:    callq __truncdfhf2@PLT3400; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3401; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3402; AVX512-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3403; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3404; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3405; AVX512-NEXT:    callq __truncdfhf2@PLT3406; AVX512-NEXT:    vpbroadcastw %xmm0, %xmm03407; AVX512-NEXT:    vpblendd $3, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3408; AVX512-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]3409; AVX512-NEXT:    addq $72, %rsp3410; AVX512-NEXT:    retq3411  %1 = fptrunc <4 x double> %a0 to <4 x half>3412  %2 = bitcast <4 x half> %1 to <4 x i16>3413  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3414  ret <8 x i16> %33415}3416 3417define <8 x i16> @cvt_4f64_to_8i16_zero(<4 x double> %a0) nounwind {3418; AVX1-LABEL: cvt_4f64_to_8i16_zero:3419; AVX1:       # %bb.0:3420; AVX1-NEXT:    subq $88, %rsp3421; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3422; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3423; AVX1-NEXT:    vzeroupper3424; AVX1-NEXT:    callq __truncdfhf2@PLT3425; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3426; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3427; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03428; AVX1-NEXT:    vzeroupper3429; AVX1-NEXT:    callq __truncdfhf2@PLT3430; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3431; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3432; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03433; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3434; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3435; AVX1-NEXT:    vzeroupper3436; AVX1-NEXT:    callq __truncdfhf2@PLT3437; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3438; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3439; AVX1-NEXT:    callq __truncdfhf2@PLT3440; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3441; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3442; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3443; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload3444; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]3445; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero3446; AVX1-NEXT:    addq $88, %rsp3447; AVX1-NEXT:    retq3448;3449; AVX2-LABEL: cvt_4f64_to_8i16_zero:3450; AVX2:       # %bb.0:3451; AVX2-NEXT:    subq $88, %rsp3452; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3453; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3454; AVX2-NEXT:    vzeroupper3455; AVX2-NEXT:    callq __truncdfhf2@PLT3456; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3457; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3458; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03459; AVX2-NEXT:    vzeroupper3460; AVX2-NEXT:    callq __truncdfhf2@PLT3461; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3462; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload3463; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm03464; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3465; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3466; AVX2-NEXT:    vzeroupper3467; AVX2-NEXT:    callq __truncdfhf2@PLT3468; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3469; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3470; AVX2-NEXT:    callq __truncdfhf2@PLT3471; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3472; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]3473; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3474; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload3475; AVX2-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]3476; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero3477; AVX2-NEXT:    addq $88, %rsp3478; AVX2-NEXT:    retq3479;3480; F16C-LABEL: cvt_4f64_to_8i16_zero:3481; F16C:       # %bb.0:3482; F16C-NEXT:    subq $72, %rsp3483; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3484; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm03485; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3486; F16C-NEXT:    vzeroupper3487; F16C-NEXT:    callq __truncdfhf2@PLT3488; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3489; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3490; F16C-NEXT:    # xmm0 = mem[1,0]3491; F16C-NEXT:    callq __truncdfhf2@PLT3492; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3493; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3494; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3495; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3496; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03497; F16C-NEXT:    vzeroupper3498; F16C-NEXT:    callq __truncdfhf2@PLT3499; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3500; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3501; F16C-NEXT:    # xmm0 = mem[1,0]3502; F16C-NEXT:    callq __truncdfhf2@PLT3503; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3504; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3505; F16C-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3506; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero3507; F16C-NEXT:    addq $72, %rsp3508; F16C-NEXT:    retq3509;3510; AVX512-LABEL: cvt_4f64_to_8i16_zero:3511; AVX512:       # %bb.0:3512; AVX512-NEXT:    subq $72, %rsp3513; AVX512-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3514; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm03515; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3516; AVX512-NEXT:    vzeroupper3517; AVX512-NEXT:    callq __truncdfhf2@PLT3518; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3519; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3520; AVX512-NEXT:    # xmm0 = mem[1,0]3521; AVX512-NEXT:    callq __truncdfhf2@PLT3522; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3523; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3524; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3525; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3526; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03527; AVX512-NEXT:    vzeroupper3528; AVX512-NEXT:    callq __truncdfhf2@PLT3529; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3530; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3531; AVX512-NEXT:    # xmm0 = mem[1,0]3532; AVX512-NEXT:    callq __truncdfhf2@PLT3533; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3534; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3535; AVX512-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3536; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero3537; AVX512-NEXT:    addq $72, %rsp3538; AVX512-NEXT:    retq3539  %1 = fptrunc <4 x double> %a0 to <4 x half>3540  %2 = bitcast <4 x half> %1 to <4 x i16>3541  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3542  ret <8 x i16> %33543}3544 3545define <8 x i16> @cvt_8f64_to_8i16(<8 x double> %a0) nounwind {3546; AVX-LABEL: cvt_8f64_to_8i16:3547; AVX:       # %bb.0:3548; AVX-NEXT:    subq $104, %rsp3549; AVX-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3550; AVX-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3551; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm03552; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3553; AVX-NEXT:    vzeroupper3554; AVX-NEXT:    callq __truncdfhf2@PLT3555; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3556; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3557; AVX-NEXT:    # xmm0 = mem[1,0]3558; AVX-NEXT:    callq __truncdfhf2@PLT3559; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3560; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3561; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3562; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3563; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03564; AVX-NEXT:    vzeroupper3565; AVX-NEXT:    callq __truncdfhf2@PLT3566; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3567; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3568; AVX-NEXT:    # xmm0 = mem[1,0]3569; AVX-NEXT:    callq __truncdfhf2@PLT3570; AVX-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3571; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3572; AVX-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3573; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3574; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3575; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3576; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm03577; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3578; AVX-NEXT:    vzeroupper3579; AVX-NEXT:    callq __truncdfhf2@PLT3580; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3581; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3582; AVX-NEXT:    # xmm0 = mem[1,0]3583; AVX-NEXT:    callq __truncdfhf2@PLT3584; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3585; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3586; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3587; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3588; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03589; AVX-NEXT:    vzeroupper3590; AVX-NEXT:    callq __truncdfhf2@PLT3591; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3592; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3593; AVX-NEXT:    # xmm0 = mem[1,0]3594; AVX-NEXT:    callq __truncdfhf2@PLT3595; AVX-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3596; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3597; AVX-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3598; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3599; AVX-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3600; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]3601; AVX-NEXT:    addq $104, %rsp3602; AVX-NEXT:    retq3603;3604; F16C-LABEL: cvt_8f64_to_8i16:3605; F16C:       # %bb.0:3606; F16C-NEXT:    subq $104, %rsp3607; F16C-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3608; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3609; F16C-NEXT:    vextractf128 $1, %ymm1, %xmm03610; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3611; F16C-NEXT:    vzeroupper3612; F16C-NEXT:    callq __truncdfhf2@PLT3613; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3614; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3615; F16C-NEXT:    # xmm0 = mem[1,0]3616; F16C-NEXT:    callq __truncdfhf2@PLT3617; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3618; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3619; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3620; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3621; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03622; F16C-NEXT:    vzeroupper3623; F16C-NEXT:    callq __truncdfhf2@PLT3624; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3625; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3626; F16C-NEXT:    # xmm0 = mem[1,0]3627; F16C-NEXT:    callq __truncdfhf2@PLT3628; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3629; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3630; F16C-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3631; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3632; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3633; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3634; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm03635; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3636; F16C-NEXT:    vzeroupper3637; F16C-NEXT:    callq __truncdfhf2@PLT3638; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3639; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3640; F16C-NEXT:    # xmm0 = mem[1,0]3641; F16C-NEXT:    callq __truncdfhf2@PLT3642; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3643; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3644; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3645; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3646; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03647; F16C-NEXT:    vzeroupper3648; F16C-NEXT:    callq __truncdfhf2@PLT3649; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3650; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3651; F16C-NEXT:    # xmm0 = mem[1,0]3652; F16C-NEXT:    callq __truncdfhf2@PLT3653; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3654; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3655; F16C-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3656; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3657; F16C-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3658; F16C-NEXT:    # xmm0 = xmm0[0],mem[0]3659; F16C-NEXT:    addq $104, %rsp3660; F16C-NEXT:    retq3661;3662; AVX512-LABEL: cvt_8f64_to_8i16:3663; AVX512:       # %bb.0:3664; AVX512-NEXT:    subq $120, %rsp3665; AVX512-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill3666; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm03667; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3668; AVX512-NEXT:    vzeroupper3669; AVX512-NEXT:    callq __truncdfhf2@PLT3670; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3671; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3672; AVX512-NEXT:    # xmm0 = mem[1,0]3673; AVX512-NEXT:    callq __truncdfhf2@PLT3674; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3675; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3676; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3677; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload3678; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm03679; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3680; AVX512-NEXT:    vzeroupper3681; AVX512-NEXT:    callq __truncdfhf2@PLT3682; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3683; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3684; AVX512-NEXT:    # xmm0 = mem[1,0]3685; AVX512-NEXT:    callq __truncdfhf2@PLT3686; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3687; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3688; AVX512-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3689; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3690; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3691; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload3692; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03693; AVX512-NEXT:    vzeroupper3694; AVX512-NEXT:    callq __truncdfhf2@PLT3695; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3696; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3697; AVX512-NEXT:    # xmm0 = mem[1,0]3698; AVX512-NEXT:    callq __truncdfhf2@PLT3699; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3700; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3701; AVX512-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill3702; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload3703; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm03704; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3705; AVX512-NEXT:    vzeroupper3706; AVX512-NEXT:    callq __truncdfhf2@PLT3707; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3708; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3709; AVX512-NEXT:    # xmm0 = mem[1,0]3710; AVX512-NEXT:    callq __truncdfhf2@PLT3711; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3712; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3713; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3714; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]3715; AVX512-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3716; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0]3717; AVX512-NEXT:    addq $120, %rsp3718; AVX512-NEXT:    retq3719  %1 = fptrunc <8 x double> %a0 to <8 x half>3720  %2 = bitcast <8 x half> %1 to <8 x i16>3721  ret <8 x i16> %23722}3723 3724;3725; Double to Half (Store)3726;3727 3728define void @store_cvt_f64_to_i16(double %a0, ptr %a1) nounwind {3729; ALL-LABEL: store_cvt_f64_to_i16:3730; ALL:       # %bb.0:3731; ALL-NEXT:    pushq %rbx3732; ALL-NEXT:    movq %rdi, %rbx3733; ALL-NEXT:    callq __truncdfhf2@PLT3734; ALL-NEXT:    vpextrw $0, %xmm0, (%rbx)3735; ALL-NEXT:    popq %rbx3736; ALL-NEXT:    retq3737; AVX-LABEL: store_cvt_f64_to_i16:3738; AVX:       # %bb.0:3739; AVX-NEXT:    pushq %rbx3740; AVX-NEXT:    movq %rdi, %rbx3741; AVX-NEXT:    callq __truncdfhf2@PLT3742; AVX-NEXT:    vpextrw $0, %xmm0, (%rbx)3743; AVX-NEXT:    popq %rbx3744; AVX-NEXT:    retq3745;3746; F16C-LABEL: store_cvt_f64_to_i16:3747; F16C:       # %bb.0:3748; F16C-NEXT:    pushq %rbx3749; F16C-NEXT:    movq %rdi, %rbx3750; F16C-NEXT:    callq __truncdfhf2@PLT3751; F16C-NEXT:    vpextrw $0, %xmm0, (%rbx)3752; F16C-NEXT:    popq %rbx3753; F16C-NEXT:    retq3754;3755; AVX512-LABEL: store_cvt_f64_to_i16:3756; AVX512:       # %bb.0:3757; AVX512-NEXT:    pushq %rbx3758; AVX512-NEXT:    movq %rdi, %rbx3759; AVX512-NEXT:    callq __truncdfhf2@PLT3760; AVX512-NEXT:    vpextrw $0, %xmm0, (%rbx)3761; AVX512-NEXT:    popq %rbx3762; AVX512-NEXT:    retq3763  %1 = fptrunc double %a0 to half3764  %2 = bitcast half %1 to i163765  store i16 %2, ptr %a13766  ret void3767}3768 3769define void @store_cvt_2f64_to_2i16(<2 x double> %a0, ptr %a1) nounwind {3770; AVX-LABEL: store_cvt_2f64_to_2i16:3771; AVX:       # %bb.0:3772; AVX-NEXT:    pushq %rbx3773; AVX-NEXT:    subq $32, %rsp3774; AVX-NEXT:    movq %rdi, %rbx3775; AVX-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3776; AVX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3777; AVX-NEXT:    callq __truncdfhf2@PLT3778; AVX-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3779; AVX-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3780; AVX-NEXT:    callq __truncdfhf2@PLT3781; AVX-NEXT:    vpextrw $0, %xmm0, (%rbx)3782; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3783; AVX-NEXT:    vpextrw $0, %xmm0, 2(%rbx)3784; AVX-NEXT:    addq $32, %rsp3785; AVX-NEXT:    popq %rbx3786; AVX-NEXT:    retq3787;3788; F16C-LABEL: store_cvt_2f64_to_2i16:3789; F16C:       # %bb.0:3790; F16C-NEXT:    pushq %rbx3791; F16C-NEXT:    subq $32, %rsp3792; F16C-NEXT:    movq %rdi, %rbx3793; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3794; F16C-NEXT:    callq __truncdfhf2@PLT3795; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3796; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3797; F16C-NEXT:    # xmm0 = mem[1,0]3798; F16C-NEXT:    callq __truncdfhf2@PLT3799; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3800; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3801; F16C-NEXT:    vmovd %xmm0, (%rbx)3802; F16C-NEXT:    addq $32, %rsp3803; F16C-NEXT:    popq %rbx3804; F16C-NEXT:    retq3805;3806; AVX512-LABEL: store_cvt_2f64_to_2i16:3807; AVX512:       # %bb.0:3808; AVX512-NEXT:    pushq %rbx3809; AVX512-NEXT:    subq $32, %rsp3810; AVX512-NEXT:    movq %rdi, %rbx3811; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3812; AVX512-NEXT:    callq __truncdfhf2@PLT3813; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3814; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3815; AVX512-NEXT:    # xmm0 = mem[1,0]3816; AVX512-NEXT:    callq __truncdfhf2@PLT3817; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3818; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3819; AVX512-NEXT:    vmovd %xmm0, (%rbx)3820; AVX512-NEXT:    addq $32, %rsp3821; AVX512-NEXT:    popq %rbx3822; AVX512-NEXT:    retq3823  %1 = fptrunc <2 x double> %a0 to <2 x half>3824  %2 = bitcast <2 x half> %1 to <2 x i16>3825  store <2 x i16> %2, ptr %a13826  ret void3827}3828 3829define void @store_cvt_4f64_to_4i16(<4 x double> %a0, ptr %a1) nounwind {3830; AVX1-LABEL: store_cvt_4f64_to_4i16:3831; AVX1:       # %bb.0:3832; AVX1-NEXT:    pushq %rbx3833; AVX1-NEXT:    subq $80, %rsp3834; AVX1-NEXT:    movq %rdi, %rbx3835; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3836; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3837; AVX1-NEXT:    vzeroupper3838; AVX1-NEXT:    callq __truncdfhf2@PLT3839; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3840; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3841; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03842; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3843; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3844; AVX1-NEXT:    vzeroupper3845; AVX1-NEXT:    callq __truncdfhf2@PLT3846; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3847; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3848; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03849; AVX1-NEXT:    vzeroupper3850; AVX1-NEXT:    callq __truncdfhf2@PLT3851; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3852; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3853; AVX1-NEXT:    callq __truncdfhf2@PLT3854; AVX1-NEXT:    vpextrw $0, %xmm0, 4(%rbx)3855; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3856; AVX1-NEXT:    vpextrw $0, %xmm0, (%rbx)3857; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3858; AVX1-NEXT:    vpextrw $0, %xmm0, 6(%rbx)3859; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3860; AVX1-NEXT:    vpextrw $0, %xmm0, 2(%rbx)3861; AVX1-NEXT:    addq $80, %rsp3862; AVX1-NEXT:    popq %rbx3863; AVX1-NEXT:    retq3864;3865; AVX2-LABEL: store_cvt_4f64_to_4i16:3866; AVX2:       # %bb.0:3867; AVX2-NEXT:    pushq %rbx3868; AVX2-NEXT:    subq $80, %rsp3869; AVX2-NEXT:    movq %rdi, %rbx3870; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3871; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3872; AVX2-NEXT:    vzeroupper3873; AVX2-NEXT:    callq __truncdfhf2@PLT3874; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3875; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload3876; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm03877; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3878; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3879; AVX2-NEXT:    vzeroupper3880; AVX2-NEXT:    callq __truncdfhf2@PLT3881; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3882; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3883; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03884; AVX2-NEXT:    vzeroupper3885; AVX2-NEXT:    callq __truncdfhf2@PLT3886; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3887; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3888; AVX2-NEXT:    callq __truncdfhf2@PLT3889; AVX2-NEXT:    vpextrw $0, %xmm0, 4(%rbx)3890; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3891; AVX2-NEXT:    vpextrw $0, %xmm0, (%rbx)3892; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3893; AVX2-NEXT:    vpextrw $0, %xmm0, 6(%rbx)3894; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3895; AVX2-NEXT:    vpextrw $0, %xmm0, 2(%rbx)3896; AVX2-NEXT:    addq $80, %rsp3897; AVX2-NEXT:    popq %rbx3898; AVX2-NEXT:    retq3899;3900; F16C-LABEL: store_cvt_4f64_to_4i16:3901; F16C:       # %bb.0:3902; F16C-NEXT:    pushq %rbx3903; F16C-NEXT:    subq $64, %rsp3904; F16C-NEXT:    movq %rdi, %rbx3905; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3906; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm03907; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3908; F16C-NEXT:    vzeroupper3909; F16C-NEXT:    callq __truncdfhf2@PLT3910; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3911; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3912; F16C-NEXT:    # xmm0 = mem[1,0]3913; F16C-NEXT:    callq __truncdfhf2@PLT3914; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3915; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3916; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3917; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3918; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03919; F16C-NEXT:    vzeroupper3920; F16C-NEXT:    callq __truncdfhf2@PLT3921; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3922; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3923; F16C-NEXT:    # xmm0 = mem[1,0]3924; F16C-NEXT:    callq __truncdfhf2@PLT3925; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3926; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3927; F16C-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3928; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3929; F16C-NEXT:    vmovq %xmm0, (%rbx)3930; F16C-NEXT:    addq $64, %rsp3931; F16C-NEXT:    popq %rbx3932; F16C-NEXT:    retq3933;3934; AVX512-LABEL: store_cvt_4f64_to_4i16:3935; AVX512:       # %bb.0:3936; AVX512-NEXT:    pushq %rbx3937; AVX512-NEXT:    subq $64, %rsp3938; AVX512-NEXT:    movq %rdi, %rbx3939; AVX512-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3940; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm03941; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3942; AVX512-NEXT:    vzeroupper3943; AVX512-NEXT:    callq __truncdfhf2@PLT3944; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3945; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload3946; AVX512-NEXT:    # xmm0 = mem[1,0]3947; AVX512-NEXT:    callq __truncdfhf2@PLT3948; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload3949; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3950; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3951; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3952; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03953; AVX512-NEXT:    vzeroupper3954; AVX512-NEXT:    callq __truncdfhf2@PLT3955; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill3956; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload3957; AVX512-NEXT:    # xmm0 = mem[1,0]3958; AVX512-NEXT:    callq __truncdfhf2@PLT3959; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload3960; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3961; AVX512-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3962; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]3963; AVX512-NEXT:    vmovq %xmm0, (%rbx)3964; AVX512-NEXT:    addq $64, %rsp3965; AVX512-NEXT:    popq %rbx3966; AVX512-NEXT:    retq3967  %1 = fptrunc <4 x double> %a0 to <4 x half>3968  %2 = bitcast <4 x half> %1 to <4 x i16>3969  store <4 x i16> %2, ptr %a13970  ret void3971}3972 3973define void @store_cvt_4f64_to_8i16_undef(<4 x double> %a0, ptr %a1) nounwind {3974; AVX1-LABEL: store_cvt_4f64_to_8i16_undef:3975; AVX1:       # %bb.0:3976; AVX1-NEXT:    pushq %rbx3977; AVX1-NEXT:    subq $80, %rsp3978; AVX1-NEXT:    movq %rdi, %rbx3979; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill3980; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3981; AVX1-NEXT:    vzeroupper3982; AVX1-NEXT:    callq __truncdfhf2@PLT3983; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3984; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3985; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03986; AVX1-NEXT:    vzeroupper3987; AVX1-NEXT:    callq __truncdfhf2@PLT3988; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3989; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload3990; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03991; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill3992; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]3993; AVX1-NEXT:    vzeroupper3994; AVX1-NEXT:    callq __truncdfhf2@PLT3995; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3996; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload3997; AVX1-NEXT:    callq __truncdfhf2@PLT3998; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload3999; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4000; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4001; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload4002; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]4003; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero4004; AVX1-NEXT:    vmovaps %xmm0, (%rbx)4005; AVX1-NEXT:    addq $80, %rsp4006; AVX1-NEXT:    popq %rbx4007; AVX1-NEXT:    retq4008;4009; AVX2-LABEL: store_cvt_4f64_to_8i16_undef:4010; AVX2:       # %bb.0:4011; AVX2-NEXT:    pushq %rbx4012; AVX2-NEXT:    subq $80, %rsp4013; AVX2-NEXT:    movq %rdi, %rbx4014; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill4015; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4016; AVX2-NEXT:    vzeroupper4017; AVX2-NEXT:    callq __truncdfhf2@PLT4018; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4019; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload4020; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04021; AVX2-NEXT:    vzeroupper4022; AVX2-NEXT:    callq __truncdfhf2@PLT4023; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4024; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload4025; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm04026; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill4027; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4028; AVX2-NEXT:    vzeroupper4029; AVX2-NEXT:    callq __truncdfhf2@PLT4030; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4031; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload4032; AVX2-NEXT:    callq __truncdfhf2@PLT4033; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4034; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4035; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4036; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload4037; AVX2-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]4038; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero4039; AVX2-NEXT:    vmovaps %xmm0, (%rbx)4040; AVX2-NEXT:    addq $80, %rsp4041; AVX2-NEXT:    popq %rbx4042; AVX2-NEXT:    retq4043;4044; F16C-LABEL: store_cvt_4f64_to_8i16_undef:4045; F16C:       # %bb.0:4046; F16C-NEXT:    pushq %rbx4047; F16C-NEXT:    subq $64, %rsp4048; F16C-NEXT:    movq %rdi, %rbx4049; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4050; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm04051; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4052; F16C-NEXT:    vzeroupper4053; F16C-NEXT:    callq __truncdfhf2@PLT4054; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4055; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4056; F16C-NEXT:    # xmm0 = mem[1,0]4057; F16C-NEXT:    callq __truncdfhf2@PLT4058; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4059; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4060; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4061; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4062; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04063; F16C-NEXT:    vzeroupper4064; F16C-NEXT:    callq __truncdfhf2@PLT4065; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4066; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4067; F16C-NEXT:    # xmm0 = mem[1,0]4068; F16C-NEXT:    callq __truncdfhf2@PLT4069; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4070; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4071; F16C-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4072; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero4073; F16C-NEXT:    vmovaps %xmm0, (%rbx)4074; F16C-NEXT:    addq $64, %rsp4075; F16C-NEXT:    popq %rbx4076; F16C-NEXT:    retq4077;4078; AVX512-LABEL: store_cvt_4f64_to_8i16_undef:4079; AVX512:       # %bb.0:4080; AVX512-NEXT:    pushq %rbx4081; AVX512-NEXT:    subq $64, %rsp4082; AVX512-NEXT:    movq %rdi, %rbx4083; AVX512-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4084; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm04085; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4086; AVX512-NEXT:    vzeroupper4087; AVX512-NEXT:    callq __truncdfhf2@PLT4088; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4089; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4090; AVX512-NEXT:    # xmm0 = mem[1,0]4091; AVX512-NEXT:    callq __truncdfhf2@PLT4092; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4093; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4094; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4095; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4096; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04097; AVX512-NEXT:    vzeroupper4098; AVX512-NEXT:    callq __truncdfhf2@PLT4099; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4100; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4101; AVX512-NEXT:    # xmm0 = mem[1,0]4102; AVX512-NEXT:    callq __truncdfhf2@PLT4103; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4104; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4105; AVX512-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4106; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4107; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4108; AVX512-NEXT:    callq __truncdfhf2@PLT4109; AVX512-NEXT:    vpbroadcastw %xmm0, %xmm04110; AVX512-NEXT:    vpblendd $3, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4111; AVX512-NEXT:    # xmm0 = mem[0,1],xmm0[2,3]4112; AVX512-NEXT:    vmovdqa %xmm0, (%rbx)4113; AVX512-NEXT:    addq $64, %rsp4114; AVX512-NEXT:    popq %rbx4115; AVX512-NEXT:    retq4116  %1 = fptrunc <4 x double> %a0 to <4 x half>4117  %2 = bitcast <4 x half> %1 to <4 x i16>4118  %3 = shufflevector <4 x i16> %2, <4 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>4119  store <8 x i16> %3, ptr %a14120  ret void4121}4122 4123define void @store_cvt_4f64_to_8i16_zero(<4 x double> %a0, ptr %a1) nounwind {4124; AVX1-LABEL: store_cvt_4f64_to_8i16_zero:4125; AVX1:       # %bb.0:4126; AVX1-NEXT:    pushq %rbx4127; AVX1-NEXT:    subq $80, %rsp4128; AVX1-NEXT:    movq %rdi, %rbx4129; AVX1-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill4130; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4131; AVX1-NEXT:    vzeroupper4132; AVX1-NEXT:    callq __truncdfhf2@PLT4133; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4134; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload4135; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04136; AVX1-NEXT:    vzeroupper4137; AVX1-NEXT:    callq __truncdfhf2@PLT4138; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4139; AVX1-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload4140; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm04141; AVX1-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill4142; AVX1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4143; AVX1-NEXT:    vzeroupper4144; AVX1-NEXT:    callq __truncdfhf2@PLT4145; AVX1-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4146; AVX1-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload4147; AVX1-NEXT:    callq __truncdfhf2@PLT4148; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4149; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4150; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4151; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload4152; AVX1-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]4153; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero4154; AVX1-NEXT:    vmovaps %xmm0, (%rbx)4155; AVX1-NEXT:    addq $80, %rsp4156; AVX1-NEXT:    popq %rbx4157; AVX1-NEXT:    retq4158;4159; AVX2-LABEL: store_cvt_4f64_to_8i16_zero:4160; AVX2:       # %bb.0:4161; AVX2-NEXT:    pushq %rbx4162; AVX2-NEXT:    subq $80, %rsp4163; AVX2-NEXT:    movq %rdi, %rbx4164; AVX2-NEXT:    vmovupd %ymm0, (%rsp) # 32-byte Spill4165; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4166; AVX2-NEXT:    vzeroupper4167; AVX2-NEXT:    callq __truncdfhf2@PLT4168; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4169; AVX2-NEXT:    vmovups (%rsp), %ymm0 # 32-byte Reload4170; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04171; AVX2-NEXT:    vzeroupper4172; AVX2-NEXT:    callq __truncdfhf2@PLT4173; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4174; AVX2-NEXT:    vmovupd (%rsp), %ymm0 # 32-byte Reload4175; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm04176; AVX2-NEXT:    vmovapd %xmm0, (%rsp) # 16-byte Spill4177; AVX2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]4178; AVX2-NEXT:    vzeroupper4179; AVX2-NEXT:    callq __truncdfhf2@PLT4180; AVX2-NEXT:    vmovapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4181; AVX2-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload4182; AVX2-NEXT:    callq __truncdfhf2@PLT4183; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4184; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4185; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4186; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm1 # 16-byte Folded Reload4187; AVX2-NEXT:    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1],xmm1[2],mem[2],xmm1[3],mem[3]4188; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero4189; AVX2-NEXT:    vmovaps %xmm0, (%rbx)4190; AVX2-NEXT:    addq $80, %rsp4191; AVX2-NEXT:    popq %rbx4192; AVX2-NEXT:    retq4193;4194; F16C-LABEL: store_cvt_4f64_to_8i16_zero:4195; F16C:       # %bb.0:4196; F16C-NEXT:    pushq %rbx4197; F16C-NEXT:    subq $64, %rsp4198; F16C-NEXT:    movq %rdi, %rbx4199; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4200; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm04201; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4202; F16C-NEXT:    vzeroupper4203; F16C-NEXT:    callq __truncdfhf2@PLT4204; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4205; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4206; F16C-NEXT:    # xmm0 = mem[1,0]4207; F16C-NEXT:    callq __truncdfhf2@PLT4208; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4209; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4210; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4211; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4212; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04213; F16C-NEXT:    vzeroupper4214; F16C-NEXT:    callq __truncdfhf2@PLT4215; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4216; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4217; F16C-NEXT:    # xmm0 = mem[1,0]4218; F16C-NEXT:    callq __truncdfhf2@PLT4219; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4220; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4221; F16C-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4222; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero4223; F16C-NEXT:    vmovaps %xmm0, (%rbx)4224; F16C-NEXT:    addq $64, %rsp4225; F16C-NEXT:    popq %rbx4226; F16C-NEXT:    retq4227;4228; AVX512-LABEL: store_cvt_4f64_to_8i16_zero:4229; AVX512:       # %bb.0:4230; AVX512-NEXT:    pushq %rbx4231; AVX512-NEXT:    subq $64, %rsp4232; AVX512-NEXT:    movq %rdi, %rbx4233; AVX512-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4234; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm04235; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4236; AVX512-NEXT:    vzeroupper4237; AVX512-NEXT:    callq __truncdfhf2@PLT4238; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4239; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4240; AVX512-NEXT:    # xmm0 = mem[1,0]4241; AVX512-NEXT:    callq __truncdfhf2@PLT4242; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4243; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4244; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4245; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4246; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04247; AVX512-NEXT:    vzeroupper4248; AVX512-NEXT:    callq __truncdfhf2@PLT4249; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4250; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4251; AVX512-NEXT:    # xmm0 = mem[1,0]4252; AVX512-NEXT:    callq __truncdfhf2@PLT4253; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4254; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4255; AVX512-NEXT:    vinsertps $28, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4256; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],zero,zero4257; AVX512-NEXT:    vmovaps %xmm0, (%rbx)4258; AVX512-NEXT:    addq $64, %rsp4259; AVX512-NEXT:    popq %rbx4260; AVX512-NEXT:    retq4261  %1 = fptrunc <4 x double> %a0 to <4 x half>4262  %2 = bitcast <4 x half> %1 to <4 x i16>4263  %3 = shufflevector <4 x i16> %2, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>4264  store <8 x i16> %3, ptr %a14265  ret void4266}4267 4268define void @store_cvt_8f64_to_8i16(<8 x double> %a0, ptr %a1) nounwind {4269; AVX-LABEL: store_cvt_8f64_to_8i16:4270; AVX:       # %bb.0:4271; AVX-NEXT:    pushq %rbx4272; AVX-NEXT:    subq $96, %rsp4273; AVX-NEXT:    movq %rdi, %rbx4274; AVX-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4275; AVX-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4276; AVX-NEXT:    vextractf128 $1, %ymm1, %xmm04277; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4278; AVX-NEXT:    vzeroupper4279; AVX-NEXT:    callq __truncdfhf2@PLT4280; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4281; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4282; AVX-NEXT:    # xmm0 = mem[1,0]4283; AVX-NEXT:    callq __truncdfhf2@PLT4284; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4285; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4286; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4287; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4288; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04289; AVX-NEXT:    vzeroupper4290; AVX-NEXT:    callq __truncdfhf2@PLT4291; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4292; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4293; AVX-NEXT:    # xmm0 = mem[1,0]4294; AVX-NEXT:    callq __truncdfhf2@PLT4295; AVX-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4296; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4297; AVX-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4298; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4299; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4300; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4301; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm04302; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4303; AVX-NEXT:    vzeroupper4304; AVX-NEXT:    callq __truncdfhf2@PLT4305; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4306; AVX-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4307; AVX-NEXT:    # xmm0 = mem[1,0]4308; AVX-NEXT:    callq __truncdfhf2@PLT4309; AVX-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4310; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4311; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4312; AVX-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4313; AVX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04314; AVX-NEXT:    vzeroupper4315; AVX-NEXT:    callq __truncdfhf2@PLT4316; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4317; AVX-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4318; AVX-NEXT:    # xmm0 = mem[1,0]4319; AVX-NEXT:    callq __truncdfhf2@PLT4320; AVX-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4321; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4322; AVX-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4323; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4324; AVX-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4325; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]4326; AVX-NEXT:    vmovdqa %xmm0, (%rbx)4327; AVX-NEXT:    addq $96, %rsp4328; AVX-NEXT:    popq %rbx4329; AVX-NEXT:    retq4330;4331; F16C-LABEL: store_cvt_8f64_to_8i16:4332; F16C:       # %bb.0:4333; F16C-NEXT:    pushq %rbx4334; F16C-NEXT:    subq $96, %rsp4335; F16C-NEXT:    movq %rdi, %rbx4336; F16C-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4337; F16C-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4338; F16C-NEXT:    vextractf128 $1, %ymm1, %xmm04339; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4340; F16C-NEXT:    vzeroupper4341; F16C-NEXT:    callq __truncdfhf2@PLT4342; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4343; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4344; F16C-NEXT:    # xmm0 = mem[1,0]4345; F16C-NEXT:    callq __truncdfhf2@PLT4346; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4347; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4348; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4349; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4350; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04351; F16C-NEXT:    vzeroupper4352; F16C-NEXT:    callq __truncdfhf2@PLT4353; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4354; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4355; F16C-NEXT:    # xmm0 = mem[1,0]4356; F16C-NEXT:    callq __truncdfhf2@PLT4357; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4358; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4359; F16C-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4360; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4361; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4362; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4363; F16C-NEXT:    vextractf128 $1, %ymm0, %xmm04364; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4365; F16C-NEXT:    vzeroupper4366; F16C-NEXT:    callq __truncdfhf2@PLT4367; F16C-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4368; F16C-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4369; F16C-NEXT:    # xmm0 = mem[1,0]4370; F16C-NEXT:    callq __truncdfhf2@PLT4371; F16C-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4372; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4373; F16C-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4374; F16C-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4375; F16C-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04376; F16C-NEXT:    vzeroupper4377; F16C-NEXT:    callq __truncdfhf2@PLT4378; F16C-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4379; F16C-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4380; F16C-NEXT:    # xmm0 = mem[1,0]4381; F16C-NEXT:    callq __truncdfhf2@PLT4382; F16C-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4383; F16C-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4384; F16C-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4385; F16C-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4386; F16C-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4387; F16C-NEXT:    # xmm0 = xmm0[0],mem[0]4388; F16C-NEXT:    vmovdqa %xmm0, (%rbx)4389; F16C-NEXT:    addq $96, %rsp4390; F16C-NEXT:    popq %rbx4391; F16C-NEXT:    retq4392;4393; AVX512-LABEL: store_cvt_8f64_to_8i16:4394; AVX512:       # %bb.0:4395; AVX512-NEXT:    pushq %rbx4396; AVX512-NEXT:    subq $112, %rsp4397; AVX512-NEXT:    movq %rdi, %rbx4398; AVX512-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill4399; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm04400; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4401; AVX512-NEXT:    vzeroupper4402; AVX512-NEXT:    callq __truncdfhf2@PLT4403; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4404; AVX512-NEXT:    vpermilpd $1, (%rsp), %xmm0 # 16-byte Folded Reload4405; AVX512-NEXT:    # xmm0 = mem[1,0]4406; AVX512-NEXT:    callq __truncdfhf2@PLT4407; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4408; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4409; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4410; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload4411; AVX512-NEXT:    vextractf32x4 $2, %zmm0, %xmm04412; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4413; AVX512-NEXT:    vzeroupper4414; AVX512-NEXT:    callq __truncdfhf2@PLT4415; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4416; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4417; AVX512-NEXT:    # xmm0 = mem[1,0]4418; AVX512-NEXT:    callq __truncdfhf2@PLT4419; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4420; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4421; AVX512-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4422; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4423; AVX512-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4424; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload4425; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm04426; AVX512-NEXT:    vzeroupper4427; AVX512-NEXT:    callq __truncdfhf2@PLT4428; AVX512-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4429; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4430; AVX512-NEXT:    # xmm0 = mem[1,0]4431; AVX512-NEXT:    callq __truncdfhf2@PLT4432; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4433; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4434; AVX512-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4435; AVX512-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload4436; AVX512-NEXT:    vextractf128 $1, %ymm0, %xmm04437; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4438; AVX512-NEXT:    vzeroupper4439; AVX512-NEXT:    callq __truncdfhf2@PLT4440; AVX512-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4441; AVX512-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4442; AVX512-NEXT:    # xmm0 = mem[1,0]4443; AVX512-NEXT:    callq __truncdfhf2@PLT4444; AVX512-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4445; AVX512-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4446; AVX512-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4447; AVX512-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]4448; AVX512-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4449; AVX512-NEXT:    # xmm0 = xmm0[0],mem[0]4450; AVX512-NEXT:    vmovdqa %xmm0, (%rbx)4451; AVX512-NEXT:    addq $112, %rsp4452; AVX512-NEXT:    popq %rbx4453; AVX512-NEXT:    retq4454  %1 = fptrunc <8 x double> %a0 to <8 x half>4455  %2 = bitcast <8 x half> %1 to <8 x i16>4456  store <8 x i16> %2, ptr %a14457  ret void4458}4459 4460define void @store_cvt_32f32_to_32f16(<32 x float> %a0, ptr %a1) nounwind {4461; AVX1-LABEL: store_cvt_32f32_to_32f16:4462; AVX1:       # %bb.0:4463; AVX1-NEXT:    pushq %rbx4464; AVX1-NEXT:    subq $176, %rsp4465; AVX1-NEXT:    movq %rdi, %rbx4466; AVX1-NEXT:    vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4467; AVX1-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4468; AVX1-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4469; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4470; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm04471; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4472; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4473; AVX1-NEXT:    vzeroupper4474; AVX1-NEXT:    callq __truncsfhf2@PLT4475; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4476; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4477; AVX1-NEXT:    # xmm0 = mem[1,0]4478; AVX1-NEXT:    callq __truncsfhf2@PLT4479; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4480; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4481; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4482; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4483; AVX1-NEXT:    callq __truncsfhf2@PLT4484; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4485; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4486; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4487; AVX1-NEXT:    callq __truncsfhf2@PLT4488; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4489; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4490; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4491; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4492; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4493; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4494; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]4495; AVX1-NEXT:    callq __truncsfhf2@PLT4496; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4497; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4498; AVX1-NEXT:    # xmm0 = mem[1,0]4499; AVX1-NEXT:    callq __truncsfhf2@PLT4500; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4501; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4502; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4503; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4504; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04505; AVX1-NEXT:    vzeroupper4506; AVX1-NEXT:    callq __truncsfhf2@PLT4507; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4508; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4509; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4510; AVX1-NEXT:    callq __truncsfhf2@PLT4511; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4512; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4513; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4514; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4515; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4516; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]4517; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4518; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4519; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm04520; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4521; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4522; AVX1-NEXT:    vzeroupper4523; AVX1-NEXT:    callq __truncsfhf2@PLT4524; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4525; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4526; AVX1-NEXT:    # xmm0 = mem[1,0]4527; AVX1-NEXT:    callq __truncsfhf2@PLT4528; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4529; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4530; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4531; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4532; AVX1-NEXT:    callq __truncsfhf2@PLT4533; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4534; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4535; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4536; AVX1-NEXT:    callq __truncsfhf2@PLT4537; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4538; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4539; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4540; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4541; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4542; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4543; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]4544; AVX1-NEXT:    callq __truncsfhf2@PLT4545; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4546; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4547; AVX1-NEXT:    # xmm0 = mem[1,0]4548; AVX1-NEXT:    callq __truncsfhf2@PLT4549; AVX1-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4550; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4551; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4552; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4553; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04554; AVX1-NEXT:    vzeroupper4555; AVX1-NEXT:    callq __truncsfhf2@PLT4556; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4557; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4558; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4559; AVX1-NEXT:    callq __truncsfhf2@PLT4560; AVX1-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4561; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4562; AVX1-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4563; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4564; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4565; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]4566; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload4567; AVX1-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4568; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4569; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm04570; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4571; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4572; AVX1-NEXT:    vzeroupper4573; AVX1-NEXT:    callq __truncsfhf2@PLT4574; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4575; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4576; AVX1-NEXT:    # xmm0 = mem[1,0]4577; AVX1-NEXT:    callq __truncsfhf2@PLT4578; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4579; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4580; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4581; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4582; AVX1-NEXT:    callq __truncsfhf2@PLT4583; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4584; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4585; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4586; AVX1-NEXT:    callq __truncsfhf2@PLT4587; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4588; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4589; AVX1-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4590; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4591; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4592; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4593; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]4594; AVX1-NEXT:    callq __truncsfhf2@PLT4595; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4596; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4597; AVX1-NEXT:    # xmm0 = mem[1,0]4598; AVX1-NEXT:    callq __truncsfhf2@PLT4599; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4600; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4601; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4602; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4603; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04604; AVX1-NEXT:    vzeroupper4605; AVX1-NEXT:    callq __truncsfhf2@PLT4606; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4607; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4608; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4609; AVX1-NEXT:    callq __truncsfhf2@PLT4610; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4611; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4612; AVX1-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4613; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4614; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4615; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]4616; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4617; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4618; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm04619; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4620; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4621; AVX1-NEXT:    vzeroupper4622; AVX1-NEXT:    callq __truncsfhf2@PLT4623; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4624; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4625; AVX1-NEXT:    # xmm0 = mem[1,0]4626; AVX1-NEXT:    callq __truncsfhf2@PLT4627; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4628; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4629; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4630; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4631; AVX1-NEXT:    callq __truncsfhf2@PLT4632; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4633; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4634; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4635; AVX1-NEXT:    callq __truncsfhf2@PLT4636; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4637; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4638; AVX1-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4639; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4640; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4641; AVX1-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4642; AVX1-NEXT:    # xmm0 = mem[3,3,3,3]4643; AVX1-NEXT:    callq __truncsfhf2@PLT4644; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4645; AVX1-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4646; AVX1-NEXT:    # xmm0 = mem[1,0]4647; AVX1-NEXT:    callq __truncsfhf2@PLT4648; AVX1-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4649; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4650; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4651; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4652; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04653; AVX1-NEXT:    vzeroupper4654; AVX1-NEXT:    callq __truncsfhf2@PLT4655; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4656; AVX1-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4657; AVX1-NEXT:    # xmm0 = mem[1,1,3,3]4658; AVX1-NEXT:    callq __truncsfhf2@PLT4659; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4660; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4661; AVX1-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4662; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4663; AVX1-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4664; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]4665; AVX1-NEXT:    vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload4666; AVX1-NEXT:    vmovaps %ymm0, 32(%rbx)4667; AVX1-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4668; AVX1-NEXT:    vmovaps %ymm0, (%rbx)4669; AVX1-NEXT:    addq $176, %rsp4670; AVX1-NEXT:    popq %rbx4671; AVX1-NEXT:    vzeroupper4672; AVX1-NEXT:    retq4673;4674; AVX2-LABEL: store_cvt_32f32_to_32f16:4675; AVX2:       # %bb.0:4676; AVX2-NEXT:    pushq %rbx4677; AVX2-NEXT:    subq $208, %rsp4678; AVX2-NEXT:    movq %rdi, %rbx4679; AVX2-NEXT:    vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4680; AVX2-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4681; AVX2-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4682; AVX2-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4683; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm04684; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4685; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4686; AVX2-NEXT:    vzeroupper4687; AVX2-NEXT:    callq __truncsfhf2@PLT4688; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4689; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4690; AVX2-NEXT:    # xmm0 = mem[1,0]4691; AVX2-NEXT:    callq __truncsfhf2@PLT4692; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4693; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4694; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4695; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4696; AVX2-NEXT:    callq __truncsfhf2@PLT4697; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4698; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4699; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4700; AVX2-NEXT:    callq __truncsfhf2@PLT4701; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4702; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4703; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4704; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4705; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4706; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4707; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm04708; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4709; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4710; AVX2-NEXT:    vzeroupper4711; AVX2-NEXT:    callq __truncsfhf2@PLT4712; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4713; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4714; AVX2-NEXT:    # xmm0 = mem[1,0]4715; AVX2-NEXT:    callq __truncsfhf2@PLT4716; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4717; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4718; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4719; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4720; AVX2-NEXT:    callq __truncsfhf2@PLT4721; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4722; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4723; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4724; AVX2-NEXT:    callq __truncsfhf2@PLT4725; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4726; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4727; AVX2-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4728; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4729; AVX2-NEXT:    vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload4730; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4731; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4732; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]4733; AVX2-NEXT:    vzeroupper4734; AVX2-NEXT:    callq __truncsfhf2@PLT4735; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4736; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4737; AVX2-NEXT:    # xmm0 = mem[1,0]4738; AVX2-NEXT:    callq __truncsfhf2@PLT4739; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4740; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4741; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4742; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4743; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04744; AVX2-NEXT:    vzeroupper4745; AVX2-NEXT:    callq __truncsfhf2@PLT4746; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4747; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4748; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4749; AVX2-NEXT:    callq __truncsfhf2@PLT4750; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4751; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4752; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4753; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4754; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4755; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4756; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]4757; AVX2-NEXT:    callq __truncsfhf2@PLT4758; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4759; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4760; AVX2-NEXT:    # xmm0 = mem[1,0]4761; AVX2-NEXT:    callq __truncsfhf2@PLT4762; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4763; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4764; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4765; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4766; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04767; AVX2-NEXT:    vzeroupper4768; AVX2-NEXT:    callq __truncsfhf2@PLT4769; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4770; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4771; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4772; AVX2-NEXT:    callq __truncsfhf2@PLT4773; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4774; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4775; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4776; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4777; AVX2-NEXT:    vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload4778; AVX2-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload4779; AVX2-NEXT:    # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]4780; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4781; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4782; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm04783; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4784; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4785; AVX2-NEXT:    vzeroupper4786; AVX2-NEXT:    callq __truncsfhf2@PLT4787; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4788; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4789; AVX2-NEXT:    # xmm0 = mem[1,0]4790; AVX2-NEXT:    callq __truncsfhf2@PLT4791; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4792; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4793; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4794; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4795; AVX2-NEXT:    callq __truncsfhf2@PLT4796; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4797; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4798; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4799; AVX2-NEXT:    callq __truncsfhf2@PLT4800; AVX2-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4801; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4802; AVX2-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4803; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4804; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4805; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4806; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm04807; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4808; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]4809; AVX2-NEXT:    vzeroupper4810; AVX2-NEXT:    callq __truncsfhf2@PLT4811; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4812; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4813; AVX2-NEXT:    # xmm0 = mem[1,0]4814; AVX2-NEXT:    callq __truncsfhf2@PLT4815; AVX2-NEXT:    vpunpcklwd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4816; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4817; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4818; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4819; AVX2-NEXT:    callq __truncsfhf2@PLT4820; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4821; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4822; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4823; AVX2-NEXT:    callq __truncsfhf2@PLT4824; AVX2-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4825; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4826; AVX2-NEXT:    vpunpckldq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4827; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4828; AVX2-NEXT:    vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload4829; AVX2-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill4830; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4831; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]4832; AVX2-NEXT:    vzeroupper4833; AVX2-NEXT:    callq __truncsfhf2@PLT4834; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4835; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4836; AVX2-NEXT:    # xmm0 = mem[1,0]4837; AVX2-NEXT:    callq __truncsfhf2@PLT4838; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4839; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4840; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4841; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4842; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04843; AVX2-NEXT:    vzeroupper4844; AVX2-NEXT:    callq __truncsfhf2@PLT4845; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4846; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4847; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4848; AVX2-NEXT:    callq __truncsfhf2@PLT4849; AVX2-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4850; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4851; AVX2-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4852; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4853; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4854; AVX2-NEXT:    vpermilps $255, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4855; AVX2-NEXT:    # xmm0 = mem[3,3,3,3]4856; AVX2-NEXT:    callq __truncsfhf2@PLT4857; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4858; AVX2-NEXT:    vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4859; AVX2-NEXT:    # xmm0 = mem[1,0]4860; AVX2-NEXT:    callq __truncsfhf2@PLT4861; AVX2-NEXT:    vpunpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4862; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]4863; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4864; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4865; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04866; AVX2-NEXT:    vzeroupper4867; AVX2-NEXT:    callq __truncsfhf2@PLT4868; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4869; AVX2-NEXT:    vmovshdup {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload4870; AVX2-NEXT:    # xmm0 = mem[1,1,3,3]4871; AVX2-NEXT:    callq __truncsfhf2@PLT4872; AVX2-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload4873; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]4874; AVX2-NEXT:    vpunpckldq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4875; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]4876; AVX2-NEXT:    vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload4877; AVX2-NEXT:    vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload4878; AVX2-NEXT:    # ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]4879; AVX2-NEXT:    vmovdqa %ymm0, 32(%rbx)4880; AVX2-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload4881; AVX2-NEXT:    vmovaps %ymm0, (%rbx)4882; AVX2-NEXT:    addq $208, %rsp4883; AVX2-NEXT:    popq %rbx4884; AVX2-NEXT:    vzeroupper4885; AVX2-NEXT:    retq4886;4887; F16C-LABEL: store_cvt_32f32_to_32f16:4888; F16C:       # %bb.0:4889; F16C-NEXT:    vcvtps2ph $4, %ymm3, 48(%rdi)4890; F16C-NEXT:    vcvtps2ph $4, %ymm2, 32(%rdi)4891; F16C-NEXT:    vcvtps2ph $4, %ymm1, 16(%rdi)4892; F16C-NEXT:    vcvtps2ph $4, %ymm0, (%rdi)4893; F16C-NEXT:    vzeroupper4894; F16C-NEXT:    retq4895;4896; AVX512-LABEL: store_cvt_32f32_to_32f16:4897; AVX512:       # %bb.0:4898; AVX512-NEXT:    vcvtps2ph $4, %zmm1, 32(%rdi)4899; AVX512-NEXT:    vcvtps2ph $4, %zmm0, (%rdi)4900; AVX512-NEXT:    vzeroupper4901; AVX512-NEXT:    retq4902  %1 = fptrunc <32 x float> %a0 to <32 x half>4903  store <32 x half> %1, ptr %a14904  ret void4905}4906 4907define <4 x i32> @fptosi_2f16_to_4i32(<2 x half> %a) nounwind {4908; AVX-LABEL: fptosi_2f16_to_4i32:4909; AVX:       # %bb.0:4910; AVX-NEXT:    subq $40, %rsp4911; AVX-NEXT:    vpsrld $16, %xmm0, %xmm14912; AVX-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4913; AVX-NEXT:    callq __extendhfsf2@PLT4914; AVX-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4915; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4916; AVX-NEXT:    callq __extendhfsf2@PLT4917; AVX-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload4918; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]4919; AVX-NEXT:    vcvttps2dq %xmm0, %xmm04920; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero4921; AVX-NEXT:    addq $40, %rsp4922; AVX-NEXT:    retq4923;4924; F16C-LABEL: fptosi_2f16_to_4i32:4925; F16C:       # %bb.0:4926; F16C-NEXT:    vcvtph2ps %xmm0, %xmm04927; F16C-NEXT:    vcvttps2dq %xmm0, %xmm04928; F16C-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero4929; F16C-NEXT:    retq4930;4931; AVX512-LABEL: fptosi_2f16_to_4i32:4932; AVX512:       # %bb.0:4933; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm04934; AVX512-NEXT:    vcvttps2dq %xmm0, %xmm04935; AVX512-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero4936; AVX512-NEXT:    retq4937  %cvt = fptosi <2 x half> %a to <2 x i32>4938  %ext = shufflevector <2 x i32> %cvt, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4939  ret <4 x i32> %ext4940}4941 4942; PR834024943define <4 x i32> @fptosi_4f16_to_4i32(<4 x half> %a) nounwind {4944; AVX-LABEL: fptosi_4f16_to_4i32:4945; AVX:       # %bb.0:4946; AVX-NEXT:    subq $72, %rsp4947; AVX-NEXT:    vmovdqa %xmm0, %xmm14948; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4949; AVX-NEXT:    vpsrld $16, %xmm0, %xmm04950; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4951; AVX-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]4952; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4953; AVX-NEXT:    vpsrlq $48, %xmm1, %xmm04954; AVX-NEXT:    callq __extendhfsf2@PLT4955; AVX-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4956; AVX-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload4957; AVX-NEXT:    callq __extendhfsf2@PLT4958; AVX-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload4959; AVX-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]4960; AVX-NEXT:    vcvttps2dq %xmm0, %xmm04961; AVX-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill4962; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4963; AVX-NEXT:    callq __extendhfsf2@PLT4964; AVX-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4965; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4966; AVX-NEXT:    callq __extendhfsf2@PLT4967; AVX-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload4968; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]4969; AVX-NEXT:    vcvttps2dq %xmm0, %xmm04970; AVX-NEXT:    vunpcklpd (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload4971; AVX-NEXT:    # xmm0 = xmm0[0],mem[0]4972; AVX-NEXT:    addq $72, %rsp4973; AVX-NEXT:    retq4974;4975; F16C-LABEL: fptosi_4f16_to_4i32:4976; F16C:       # %bb.0:4977; F16C-NEXT:    vcvtph2ps %xmm0, %xmm04978; F16C-NEXT:    vcvttps2dq %xmm0, %xmm04979; F16C-NEXT:    retq4980;4981; AVX512-LABEL: fptosi_4f16_to_4i32:4982; AVX512:       # %bb.0:4983; AVX512-NEXT:    vcvtph2ps %xmm0, %xmm04984; AVX512-NEXT:    vcvttps2dq %xmm0, %xmm04985; AVX512-NEXT:    retq4986  %cvt = fptosi <4 x half> %a to <4 x i32>4987  ret <4 x i32> %cvt4988}4989 4990define <4 x i32> @fptoui_2f16_to_4i32(<2 x half> %a) nounwind {4991; AVX1-LABEL: fptoui_2f16_to_4i32:4992; AVX1:       # %bb.0:4993; AVX1-NEXT:    subq $40, %rsp4994; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm14995; AVX1-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill4996; AVX1-NEXT:    callq __extendhfsf2@PLT4997; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill4998; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload4999; AVX1-NEXT:    callq __extendhfsf2@PLT5000; AVX1-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload5001; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]5002; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm15003; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm25004; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05005; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm05006; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm05007; AVX1-NEXT:    vpor %xmm0, %xmm1, %xmm05008; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero5009; AVX1-NEXT:    addq $40, %rsp5010; AVX1-NEXT:    retq5011;5012; AVX2-LABEL: fptoui_2f16_to_4i32:5013; AVX2:       # %bb.0:5014; AVX2-NEXT:    subq $40, %rsp5015; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm15016; AVX2-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5017; AVX2-NEXT:    callq __extendhfsf2@PLT5018; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill5019; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5020; AVX2-NEXT:    callq __extendhfsf2@PLT5021; AVX2-NEXT:    vmovaps (%rsp), %xmm1 # 16-byte Reload5022; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]5023; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm15024; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm25025; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]5026; AVX2-NEXT:    vsubps %xmm3, %xmm0, %xmm05027; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm05028; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm05029; AVX2-NEXT:    vpor %xmm0, %xmm1, %xmm05030; AVX2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero5031; AVX2-NEXT:    addq $40, %rsp5032; AVX2-NEXT:    retq5033;5034; F16C-LABEL: fptoui_2f16_to_4i32:5035; F16C:       # %bb.0:5036; F16C-NEXT:    vxorps %xmm1, %xmm1, %xmm15037; F16C-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]5038; F16C-NEXT:    vcvtph2ps %xmm0, %xmm05039; F16C-NEXT:    vcvttps2dq %xmm0, %xmm15040; F16C-NEXT:    vpsrad $31, %xmm1, %xmm25041; F16C-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05042; F16C-NEXT:    vcvttps2dq %xmm0, %xmm05043; F16C-NEXT:    vpand %xmm2, %xmm0, %xmm05044; F16C-NEXT:    vpor %xmm0, %xmm1, %xmm05045; F16C-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero5046; F16C-NEXT:    retq5047;5048; AVX512F-LABEL: fptoui_2f16_to_4i32:5049; AVX512F:       # %bb.0:5050; AVX512F-NEXT:    vxorps %xmm1, %xmm1, %xmm15051; AVX512F-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]5052; AVX512F-NEXT:    vcvtph2ps %xmm0, %xmm05053; AVX512F-NEXT:    vcvttps2udq %zmm0, %zmm05054; AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero5055; AVX512F-NEXT:    vzeroupper5056; AVX512F-NEXT:    retq5057;5058; AVX512-FASTLANE-LABEL: fptoui_2f16_to_4i32:5059; AVX512-FASTLANE:       # %bb.0:5060; AVX512-FASTLANE-NEXT:    vcvtph2ps %xmm0, %xmm05061; AVX512-FASTLANE-NEXT:    vcvttps2udq %xmm0, %xmm05062; AVX512-FASTLANE-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero5063; AVX512-FASTLANE-NEXT:    retq5064  %cvt = fptoui <2 x half> %a to <2 x i32>5065  %ext = shufflevector <2 x i32> %cvt, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5066  ret <4 x i32> %ext5067}5068 5069define <4 x i32> @fptoui_4f16_to_4i32(<4 x half> %a) nounwind {5070; AVX1-LABEL: fptoui_4f16_to_4i32:5071; AVX1:       # %bb.0:5072; AVX1-NEXT:    subq $72, %rsp5073; AVX1-NEXT:    vmovdqa %xmm0, %xmm15074; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5075; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm05076; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5077; AVX1-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]5078; AVX1-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill5079; AVX1-NEXT:    vpsrlq $48, %xmm1, %xmm05080; AVX1-NEXT:    callq __extendhfsf2@PLT5081; AVX1-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5082; AVX1-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload5083; AVX1-NEXT:    callq __extendhfsf2@PLT5084; AVX1-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload5085; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]5086; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm15087; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm25088; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05089; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm05090; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm05091; AVX1-NEXT:    vpor %xmm0, %xmm1, %xmm05092; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill5093; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5094; AVX1-NEXT:    callq __extendhfsf2@PLT5095; AVX1-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5096; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5097; AVX1-NEXT:    callq __extendhfsf2@PLT5098; AVX1-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload5099; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]5100; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm15101; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm25102; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05103; AVX1-NEXT:    vcvttps2dq %xmm0, %xmm05104; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm05105; AVX1-NEXT:    vpor %xmm0, %xmm1, %xmm05106; AVX1-NEXT:    vpunpcklqdq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload5107; AVX1-NEXT:    # xmm0 = xmm0[0],mem[0]5108; AVX1-NEXT:    addq $72, %rsp5109; AVX1-NEXT:    retq5110;5111; AVX2-LABEL: fptoui_4f16_to_4i32:5112; AVX2:       # %bb.0:5113; AVX2-NEXT:    subq $72, %rsp5114; AVX2-NEXT:    vmovdqa %xmm0, %xmm15115; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5116; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm05117; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5118; AVX2-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm1[1,1,3,3]5119; AVX2-NEXT:    vmovaps %xmm0, (%rsp) # 16-byte Spill5120; AVX2-NEXT:    vpsrlq $48, %xmm1, %xmm05121; AVX2-NEXT:    callq __extendhfsf2@PLT5122; AVX2-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5123; AVX2-NEXT:    vmovaps (%rsp), %xmm0 # 16-byte Reload5124; AVX2-NEXT:    callq __extendhfsf2@PLT5125; AVX2-NEXT:    vinsertps $16, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload5126; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0],xmm0[2,3]5127; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm15128; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm25129; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]5130; AVX2-NEXT:    vsubps %xmm3, %xmm0, %xmm05131; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm05132; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm05133; AVX2-NEXT:    vpor %xmm0, %xmm1, %xmm05134; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill5135; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5136; AVX2-NEXT:    callq __extendhfsf2@PLT5137; AVX2-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill5138; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload5139; AVX2-NEXT:    callq __extendhfsf2@PLT5140; AVX2-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload5141; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]5142; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm15143; AVX2-NEXT:    vpsrad $31, %xmm1, %xmm25144; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9]5145; AVX2-NEXT:    vsubps %xmm3, %xmm0, %xmm05146; AVX2-NEXT:    vcvttps2dq %xmm0, %xmm05147; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm05148; AVX2-NEXT:    vpor %xmm0, %xmm1, %xmm05149; AVX2-NEXT:    vpunpcklqdq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload5150; AVX2-NEXT:    # xmm0 = xmm0[0],mem[0]5151; AVX2-NEXT:    addq $72, %rsp5152; AVX2-NEXT:    retq5153;5154; F16C-LABEL: fptoui_4f16_to_4i32:5155; F16C:       # %bb.0:5156; F16C-NEXT:    vcvtph2ps %xmm0, %xmm05157; F16C-NEXT:    vcvttps2dq %xmm0, %xmm15158; F16C-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm05159; F16C-NEXT:    vcvttps2dq %xmm0, %xmm05160; F16C-NEXT:    vorps %xmm0, %xmm1, %xmm05161; F16C-NEXT:    vblendvps %xmm1, %xmm0, %xmm1, %xmm05162; F16C-NEXT:    retq5163;5164; AVX512F-LABEL: fptoui_4f16_to_4i32:5165; AVX512F:       # %bb.0:5166; AVX512F-NEXT:    vcvtph2ps %xmm0, %xmm05167; AVX512F-NEXT:    vcvttps2udq %zmm0, %zmm05168; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05169; AVX512F-NEXT:    vzeroupper5170; AVX512F-NEXT:    retq5171;5172; AVX512-FASTLANE-LABEL: fptoui_4f16_to_4i32:5173; AVX512-FASTLANE:       # %bb.0:5174; AVX512-FASTLANE-NEXT:    vcvtph2ps %xmm0, %xmm05175; AVX512-FASTLANE-NEXT:    vcvttps2udq %xmm0, %xmm05176; AVX512-FASTLANE-NEXT:    retq5177  %cvt = fptoui <4 x half> %a to <4 x i32>5178  ret <4 x i32> %cvt5179}5180