brintos

brintos / llvm-project-archived public Read only

0
0
Text · 88.6 KiB · 76c8790 Raw
2689 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=+avx512f | FileCheck %s --check-prefixes=ALL,NOVL,NODQ,NOVLDQ,KNL3; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq | FileCheck %s --check-prefixes=ALL,VL,VLDQ,VLBW4; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=avx512vl  | FileCheck %s --check-prefixes=ALL,NODQ,VL,VLNODQ,VLNOBW5; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=avx512dq  | FileCheck %s --check-prefixes=ALL,NOVL,DQNOVL6; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=avx512bw  | FileCheck %s --check-prefixes=ALL,NOVL,NODQ,NOVLDQ,AVX512BW7; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=avx512vl,avx512dq  | FileCheck %s --check-prefixes=ALL,VL,VLDQ,VLNOBW8; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=avx512vl,avx512bw  | FileCheck %s --check-prefixes=ALL,NODQ,VL,VLNODQ,VLBW9 10 11define <16 x float> @sitof32(<16 x i32> %a) nounwind {12; ALL-LABEL: sitof32:13; ALL:       # %bb.0:14; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm015; ALL-NEXT:    retq16  %b = sitofp <16 x i32> %a to <16 x float>17  ret <16 x float> %b18}19 20define <8 x double> @sltof864(<8 x i64> %a) {21; NODQ-LABEL: sltof864:22; NODQ:       # %bb.0:23; NODQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm124; NODQ-NEXT:    vpextrq $1, %xmm1, %rax25; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm226; NODQ-NEXT:    vmovq %xmm1, %rax27; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm128; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]29; NODQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm230; NODQ-NEXT:    vpextrq $1, %xmm2, %rax31; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm332; NODQ-NEXT:    vmovq %xmm2, %rax33; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm234; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]35; NODQ-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm136; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm237; NODQ-NEXT:    vpextrq $1, %xmm2, %rax38; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm339; NODQ-NEXT:    vmovq %xmm2, %rax40; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm241; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]42; NODQ-NEXT:    vpextrq $1, %xmm0, %rax43; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm344; NODQ-NEXT:    vmovq %xmm0, %rax45; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm046; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0]47; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm048; NODQ-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm049; NODQ-NEXT:    retq50;51; VLDQ-LABEL: sltof864:52; VLDQ:       # %bb.0:53; VLDQ-NEXT:    vcvtqq2pd %zmm0, %zmm054; VLDQ-NEXT:    retq55;56; DQNOVL-LABEL: sltof864:57; DQNOVL:       # %bb.0:58; DQNOVL-NEXT:    vcvtqq2pd %zmm0, %zmm059; DQNOVL-NEXT:    retq60  %b = sitofp <8 x i64> %a to <8 x double>61  ret <8 x double> %b62}63 64define <4 x double> @slto4f64(<4 x i64> %a) {65; NODQ-LABEL: slto4f64:66; NODQ:       # %bb.0:67; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm168; NODQ-NEXT:    vpextrq $1, %xmm1, %rax69; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm270; NODQ-NEXT:    vmovq %xmm1, %rax71; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm172; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]73; NODQ-NEXT:    vpextrq $1, %xmm0, %rax74; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm275; NODQ-NEXT:    vmovq %xmm0, %rax76; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm077; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]78; NODQ-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm079; NODQ-NEXT:    retq80;81; VLDQ-LABEL: slto4f64:82; VLDQ:       # %bb.0:83; VLDQ-NEXT:    vcvtqq2pd %ymm0, %ymm084; VLDQ-NEXT:    retq85;86; DQNOVL-LABEL: slto4f64:87; DQNOVL:       # %bb.0:88; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm089; DQNOVL-NEXT:    vcvtqq2pd %zmm0, %zmm090; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm091; DQNOVL-NEXT:    retq92  %b = sitofp <4 x i64> %a to <4 x double>93  ret <4 x double> %b94}95 96define <2 x double> @slto2f64(<2 x i64> %a) {97; NODQ-LABEL: slto2f64:98; NODQ:       # %bb.0:99; NODQ-NEXT:    vpextrq $1, %xmm0, %rax100; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1101; NODQ-NEXT:    vmovq %xmm0, %rax102; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0103; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]104; NODQ-NEXT:    retq105;106; VLDQ-LABEL: slto2f64:107; VLDQ:       # %bb.0:108; VLDQ-NEXT:    vcvtqq2pd %xmm0, %xmm0109; VLDQ-NEXT:    retq110;111; DQNOVL-LABEL: slto2f64:112; DQNOVL:       # %bb.0:113; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0114; DQNOVL-NEXT:    vcvtqq2pd %zmm0, %zmm0115; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0116; DQNOVL-NEXT:    vzeroupper117; DQNOVL-NEXT:    retq118  %b = sitofp <2 x i64> %a to <2 x double>119  ret <2 x double> %b120}121 122define <2 x float> @sltof2f32(<2 x i64> %a) {123; NODQ-LABEL: sltof2f32:124; NODQ:       # %bb.0:125; NODQ-NEXT:    vpextrq $1, %xmm0, %rax126; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm1127; NODQ-NEXT:    vmovq %xmm0, %rax128; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm0129; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero130; NODQ-NEXT:    retq131;132; VLDQ-LABEL: sltof2f32:133; VLDQ:       # %bb.0:134; VLDQ-NEXT:    vcvtqq2ps %xmm0, %xmm0135; VLDQ-NEXT:    retq136;137; DQNOVL-LABEL: sltof2f32:138; DQNOVL:       # %bb.0:139; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0140; DQNOVL-NEXT:    vcvtqq2ps %zmm0, %ymm0141; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0142; DQNOVL-NEXT:    vzeroupper143; DQNOVL-NEXT:    retq144  %b = sitofp <2 x i64> %a to <2 x float>145  ret <2 x float>%b146}147 148define <4 x float> @slto4f32_mem(ptr %a) {149; NODQ-LABEL: slto4f32_mem:150; NODQ:       # %bb.0:151; NODQ-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm0152; NODQ-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm1153; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]154; NODQ-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm1155; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]156; NODQ-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm1157; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]158; NODQ-NEXT:    retq159;160; VLDQ-LABEL: slto4f32_mem:161; VLDQ:       # %bb.0:162; VLDQ-NEXT:    vcvtqq2psy (%rdi), %xmm0163; VLDQ-NEXT:    retq164;165; DQNOVL-LABEL: slto4f32_mem:166; DQNOVL:       # %bb.0:167; DQNOVL-NEXT:    vmovups (%rdi), %ymm0168; DQNOVL-NEXT:    vcvtqq2ps %zmm0, %ymm0169; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0170; DQNOVL-NEXT:    vzeroupper171; DQNOVL-NEXT:    retq172  %a1 = load <4 x i64>, ptr %a, align 8173  %b = sitofp <4 x i64> %a1 to <4 x float>174  ret <4 x float>%b175}176 177define <4 x i64> @f64to4sl(<4 x double> %a) {178; NODQ-LABEL: f64to4sl:179; NODQ:       # %bb.0:180; NODQ-NEXT:    vextractf128 $1, %ymm0, %xmm1181; NODQ-NEXT:    vcvttsd2si %xmm1, %rax182; NODQ-NEXT:    vmovq %rax, %xmm2183; NODQ-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1,0]184; NODQ-NEXT:    vcvttsd2si %xmm1, %rax185; NODQ-NEXT:    vmovq %rax, %xmm1186; NODQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]187; NODQ-NEXT:    vcvttsd2si %xmm0, %rax188; NODQ-NEXT:    vmovq %rax, %xmm2189; NODQ-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,0]190; NODQ-NEXT:    vcvttsd2si %xmm0, %rax191; NODQ-NEXT:    vmovq %rax, %xmm0192; NODQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]193; NODQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0194; NODQ-NEXT:    retq195;196; VLDQ-LABEL: f64to4sl:197; VLDQ:       # %bb.0:198; VLDQ-NEXT:    vcvttpd2qq %ymm0, %ymm0199; VLDQ-NEXT:    retq200;201; DQNOVL-LABEL: f64to4sl:202; DQNOVL:       # %bb.0:203; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0204; DQNOVL-NEXT:    vcvttpd2qq %zmm0, %zmm0205; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0206; DQNOVL-NEXT:    retq207  %b = fptosi <4 x double> %a to <4 x i64>208  ret <4 x i64> %b209}210 211define <4 x i64> @f32to4sl(<4 x float> %a) {212; NODQ-LABEL: f32to4sl:213; NODQ:       # %bb.0:214; NODQ-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]215; NODQ-NEXT:    vcvttss2si %xmm1, %rax216; NODQ-NEXT:    vmovq %rax, %xmm1217; NODQ-NEXT:    vshufpd {{.*#+}} xmm2 = xmm0[1,0]218; NODQ-NEXT:    vcvttss2si %xmm2, %rax219; NODQ-NEXT:    vmovq %rax, %xmm2220; NODQ-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]221; NODQ-NEXT:    vcvttss2si %xmm0, %rax222; NODQ-NEXT:    vmovq %rax, %xmm2223; NODQ-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]224; NODQ-NEXT:    vcvttss2si %xmm0, %rax225; NODQ-NEXT:    vmovq %rax, %xmm0226; NODQ-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]227; NODQ-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0228; NODQ-NEXT:    retq229;230; VLDQ-LABEL: f32to4sl:231; VLDQ:       # %bb.0:232; VLDQ-NEXT:    vcvttps2qq %xmm0, %ymm0233; VLDQ-NEXT:    retq234;235; DQNOVL-LABEL: f32to4sl:236; DQNOVL:       # %bb.0:237; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0238; DQNOVL-NEXT:    vcvttps2qq %ymm0, %zmm0239; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0240; DQNOVL-NEXT:    retq241  %b = fptosi <4 x float> %a to <4 x i64>242  ret <4 x i64> %b243}244 245define <4 x float> @slto4f32(<4 x i64> %a) {246; NODQ-LABEL: slto4f32:247; NODQ:       # %bb.0:248; NODQ-NEXT:    vpextrq $1, %xmm0, %rax249; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm1250; NODQ-NEXT:    vmovq %xmm0, %rax251; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm2252; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]253; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm0254; NODQ-NEXT:    vmovq %xmm0, %rax255; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm2256; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]257; NODQ-NEXT:    vpextrq $1, %xmm0, %rax258; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm0259; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]260; NODQ-NEXT:    vzeroupper261; NODQ-NEXT:    retq262;263; VLDQ-LABEL: slto4f32:264; VLDQ:       # %bb.0:265; VLDQ-NEXT:    vcvtqq2ps %ymm0, %xmm0266; VLDQ-NEXT:    vzeroupper267; VLDQ-NEXT:    retq268;269; DQNOVL-LABEL: slto4f32:270; DQNOVL:       # %bb.0:271; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0272; DQNOVL-NEXT:    vcvtqq2ps %zmm0, %ymm0273; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0274; DQNOVL-NEXT:    vzeroupper275; DQNOVL-NEXT:    retq276  %b = sitofp <4 x i64> %a to <4 x float>277  ret <4 x float> %b278}279 280define <4 x float> @ulto4f32(<4 x i64> %a) {281; NODQ-LABEL: ulto4f32:282; NODQ:       # %bb.0:283; NODQ-NEXT:    vpextrq $1, %xmm0, %rax284; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm1285; NODQ-NEXT:    vmovq %xmm0, %rax286; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm2287; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]288; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm0289; NODQ-NEXT:    vmovq %xmm0, %rax290; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm2291; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]292; NODQ-NEXT:    vpextrq $1, %xmm0, %rax293; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm0294; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]295; NODQ-NEXT:    vzeroupper296; NODQ-NEXT:    retq297;298; VLDQ-LABEL: ulto4f32:299; VLDQ:       # %bb.0:300; VLDQ-NEXT:    vcvtuqq2ps %ymm0, %xmm0301; VLDQ-NEXT:    vzeroupper302; VLDQ-NEXT:    retq303;304; DQNOVL-LABEL: ulto4f32:305; DQNOVL:       # %bb.0:306; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0307; DQNOVL-NEXT:    vcvtuqq2ps %zmm0, %ymm0308; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0309; DQNOVL-NEXT:    vzeroupper310; DQNOVL-NEXT:    retq311  %b = uitofp <4 x i64> %a to <4 x float>312  ret <4 x float> %b313}314 315define <4 x float> @ulto4f32_nneg(<4 x i64> %a) {316; NODQ-LABEL: ulto4f32_nneg:317; NODQ:       # %bb.0:318; NODQ-NEXT:    vpextrq $1, %xmm0, %rax319; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm1320; NODQ-NEXT:    vmovq %xmm0, %rax321; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm2322; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]323; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm0324; NODQ-NEXT:    vmovq %xmm0, %rax325; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm2326; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]327; NODQ-NEXT:    vpextrq $1, %xmm0, %rax328; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm0329; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]330; NODQ-NEXT:    vzeroupper331; NODQ-NEXT:    retq332;333; VLDQ-LABEL: ulto4f32_nneg:334; VLDQ:       # %bb.0:335; VLDQ-NEXT:    vcvtqq2ps %ymm0, %xmm0336; VLDQ-NEXT:    vzeroupper337; VLDQ-NEXT:    retq338;339; DQNOVL-LABEL: ulto4f32_nneg:340; DQNOVL:       # %bb.0:341; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0342; DQNOVL-NEXT:    vcvtqq2ps %zmm0, %ymm0343; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0344; DQNOVL-NEXT:    vzeroupper345; DQNOVL-NEXT:    retq346  %b = uitofp nneg <4 x i64> %a to <4 x float>347  ret <4 x float> %b348}349 350define <8 x double> @ulto8f64(<8 x i64> %a) {351; NODQ-LABEL: ulto8f64:352; NODQ:       # %bb.0:353; NODQ-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200]354; NODQ-NEXT:    vpternlogq {{.*#+}} zmm1 = zmm1 | (zmm0 & m64bcst)355; NODQ-NEXT:    vpsrlq $32, %zmm0, %zmm0356; NODQ-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0357; NODQ-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0358; NODQ-NEXT:    vaddpd %zmm0, %zmm1, %zmm0359; NODQ-NEXT:    retq360;361; VLDQ-LABEL: ulto8f64:362; VLDQ:       # %bb.0:363; VLDQ-NEXT:    vcvtuqq2pd %zmm0, %zmm0364; VLDQ-NEXT:    retq365;366; DQNOVL-LABEL: ulto8f64:367; DQNOVL:       # %bb.0:368; DQNOVL-NEXT:    vcvtuqq2pd %zmm0, %zmm0369; DQNOVL-NEXT:    retq370  %b = uitofp <8 x i64> %a to <8 x double>371  ret <8 x double> %b372}373 374define <16 x double> @ulto16f64(<16 x i64> %a) {375; NODQ-LABEL: ulto16f64:376; NODQ:       # %bb.0:377; NODQ-NEXT:    vpbroadcastq {{.*#+}} zmm2 = [4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295]378; NODQ-NEXT:    vpbroadcastq {{.*#+}} zmm3 = [4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200]379; NODQ-NEXT:    vmovdqa64 %zmm3, %zmm4380; NODQ-NEXT:    vpternlogq {{.*#+}} zmm4 = zmm4 | (zmm0 & zmm2)381; NODQ-NEXT:    vpsrlq $32, %zmm0, %zmm0382; NODQ-NEXT:    vpbroadcastq {{.*#+}} zmm5 = [4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072]383; NODQ-NEXT:    vporq %zmm5, %zmm0, %zmm0384; NODQ-NEXT:    vbroadcastsd {{.*#+}} zmm6 = [1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25]385; NODQ-NEXT:    vsubpd %zmm6, %zmm0, %zmm0386; NODQ-NEXT:    vaddpd %zmm0, %zmm4, %zmm0387; NODQ-NEXT:    vpternlogq {{.*#+}} zmm3 = zmm3 | (zmm1 & zmm2)388; NODQ-NEXT:    vpsrlq $32, %zmm1, %zmm1389; NODQ-NEXT:    vporq %zmm5, %zmm1, %zmm1390; NODQ-NEXT:    vsubpd %zmm6, %zmm1, %zmm1391; NODQ-NEXT:    vaddpd %zmm1, %zmm3, %zmm1392; NODQ-NEXT:    retq393;394; VLDQ-LABEL: ulto16f64:395; VLDQ:       # %bb.0:396; VLDQ-NEXT:    vcvtuqq2pd %zmm0, %zmm0397; VLDQ-NEXT:    vcvtuqq2pd %zmm1, %zmm1398; VLDQ-NEXT:    retq399;400; DQNOVL-LABEL: ulto16f64:401; DQNOVL:       # %bb.0:402; DQNOVL-NEXT:    vcvtuqq2pd %zmm0, %zmm0403; DQNOVL-NEXT:    vcvtuqq2pd %zmm1, %zmm1404; DQNOVL-NEXT:    retq405  %b = uitofp <16 x i64> %a to <16 x double>406  ret <16 x double> %b407}408 409define <16 x i32> @f64to16si(<16 x float> %a) nounwind {410; ALL-LABEL: f64to16si:411; ALL:       # %bb.0:412; ALL-NEXT:    vcvttps2dq %zmm0, %zmm0413; ALL-NEXT:    retq414  %b = fptosi <16 x float> %a to <16 x i32>415  ret <16 x i32> %b416}417 418define <16 x i8> @f32to16sc(<16 x float> %f) {419; ALL-LABEL: f32to16sc:420; ALL:       # %bb.0:421; ALL-NEXT:    vcvttps2dq %zmm0, %zmm0422; ALL-NEXT:    vpmovdb %zmm0, %xmm0423; ALL-NEXT:    vzeroupper424; ALL-NEXT:    retq425  %res = fptosi <16 x float> %f to <16 x i8>426  ret <16 x i8> %res427}428 429define <16 x i16> @f32to16ss(<16 x float> %f) {430; ALL-LABEL: f32to16ss:431; ALL:       # %bb.0:432; ALL-NEXT:    vcvttps2dq %zmm0, %zmm0433; ALL-NEXT:    vpmovdw %zmm0, %ymm0434; ALL-NEXT:    retq435  %res = fptosi <16 x float> %f to <16 x i16>436  ret <16 x i16> %res437}438 439define <16 x i32> @f32to16ui(<16 x float> %a) nounwind {440; ALL-LABEL: f32to16ui:441; ALL:       # %bb.0:442; ALL-NEXT:    vcvttps2udq %zmm0, %zmm0443; ALL-NEXT:    retq444  %b = fptoui <16 x float> %a to <16 x i32>445  ret <16 x i32> %b446}447 448define <16 x i8> @f32to16uc(<16 x float> %f) {449; ALL-LABEL: f32to16uc:450; ALL:       # %bb.0:451; ALL-NEXT:    vcvttps2dq %zmm0, %zmm0452; ALL-NEXT:    vpmovdb %zmm0, %xmm0453; ALL-NEXT:    vzeroupper454; ALL-NEXT:    retq455  %res = fptoui <16 x float> %f to <16 x i8>456  ret <16 x i8> %res457}458 459define <16 x i16> @f32to16us(<16 x float> %f) {460; ALL-LABEL: f32to16us:461; ALL:       # %bb.0:462; ALL-NEXT:    vcvttps2udq %zmm0, %zmm0463; ALL-NEXT:    vpmovdw %zmm0, %ymm0464; ALL-NEXT:    retq465  %res = fptoui <16 x float> %f to <16 x i16>466  ret <16 x i16> %res467}468 469define <8 x i32> @f32to8ui(<8 x float> %a) nounwind {470; NOVL-LABEL: f32to8ui:471; NOVL:       # %bb.0:472; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0473; NOVL-NEXT:    vcvttps2udq %zmm0, %zmm0474; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0475; NOVL-NEXT:    retq476;477; VL-LABEL: f32to8ui:478; VL:       # %bb.0:479; VL-NEXT:    vcvttps2udq %ymm0, %ymm0480; VL-NEXT:    retq481  %b = fptoui <8 x float> %a to <8 x i32>482  ret <8 x i32> %b483}484 485define <4 x i32> @f32to4ui(<4 x float> %a) nounwind {486; NOVL-LABEL: f32to4ui:487; NOVL:       # %bb.0:488; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0489; NOVL-NEXT:    vcvttps2udq %zmm0, %zmm0490; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0491; NOVL-NEXT:    vzeroupper492; NOVL-NEXT:    retq493;494; VL-LABEL: f32to4ui:495; VL:       # %bb.0:496; VL-NEXT:    vcvttps2udq %xmm0, %xmm0497; VL-NEXT:    retq498  %b = fptoui <4 x float> %a to <4 x i32>499  ret <4 x i32> %b500}501 502define <8 x i32> @f64to8ui(<8 x double> %a) nounwind {503; ALL-LABEL: f64to8ui:504; ALL:       # %bb.0:505; ALL-NEXT:    vcvttpd2udq %zmm0, %ymm0506; ALL-NEXT:    retq507  %b = fptoui <8 x double> %a to <8 x i32>508  ret <8 x i32> %b509}510 511define <8 x i16> @f64to8us(<8 x double> %f) {512; NOVL-LABEL: f64to8us:513; NOVL:       # %bb.0:514; NOVL-NEXT:    vcvttpd2dq %zmm0, %ymm0515; NOVL-NEXT:    vpmovdw %zmm0, %ymm0516; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0517; NOVL-NEXT:    vzeroupper518; NOVL-NEXT:    retq519;520; VL-LABEL: f64to8us:521; VL:       # %bb.0:522; VL-NEXT:    vcvttpd2dq %zmm0, %ymm0523; VL-NEXT:    vpmovdw %ymm0, %xmm0524; VL-NEXT:    vzeroupper525; VL-NEXT:    retq526  %res = fptoui <8 x double> %f to <8 x i16>527  ret <8 x i16> %res528}529 530define <8 x i8> @f64to8uc(<8 x double> %f) {531; NOVL-LABEL: f64to8uc:532; NOVL:       # %bb.0:533; NOVL-NEXT:    vcvttpd2dq %zmm0, %ymm0534; NOVL-NEXT:    vpmovdb %zmm0, %xmm0535; NOVL-NEXT:    vzeroupper536; NOVL-NEXT:    retq537;538; VL-LABEL: f64to8uc:539; VL:       # %bb.0:540; VL-NEXT:    vcvttpd2dq %zmm0, %ymm0541; VL-NEXT:    vpmovdb %ymm0, %xmm0542; VL-NEXT:    vzeroupper543; VL-NEXT:    retq544  %res = fptoui <8 x double> %f to <8 x i8>545  ret <8 x i8> %res546}547 548define <4 x i32> @f64to4ui(<4 x double> %a) nounwind {549; NOVL-LABEL: f64to4ui:550; NOVL:       # %bb.0:551; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0552; NOVL-NEXT:    vcvttpd2udq %zmm0, %ymm0553; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0554; NOVL-NEXT:    vzeroupper555; NOVL-NEXT:    retq556;557; VL-LABEL: f64to4ui:558; VL:       # %bb.0:559; VL-NEXT:    vcvttpd2udq %ymm0, %xmm0560; VL-NEXT:    vzeroupper561; VL-NEXT:    retq562  %b = fptoui <4 x double> %a to <4 x i32>563  ret <4 x i32> %b564}565 566define <8 x double> @sito8f64(<8 x i32> %a) {567; ALL-LABEL: sito8f64:568; ALL:       # %bb.0:569; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm0570; ALL-NEXT:    retq571  %b = sitofp <8 x i32> %a to <8 x double>572  ret <8 x double> %b573}574define <8 x double> @i32to8f64_mask(<8 x double> %a, <8 x i32> %b, i8 %c) nounwind {575; KNL-LABEL: i32to8f64_mask:576; KNL:       # %bb.0:577; KNL-NEXT:    kmovw %edi, %k1578; KNL-NEXT:    vcvtdq2pd %ymm1, %zmm0 {%k1}579; KNL-NEXT:    retq580;581; VLBW-LABEL: i32to8f64_mask:582; VLBW:       # %bb.0:583; VLBW-NEXT:    kmovd %edi, %k1584; VLBW-NEXT:    vcvtdq2pd %ymm1, %zmm0 {%k1}585; VLBW-NEXT:    retq586;587; VLNOBW-LABEL: i32to8f64_mask:588; VLNOBW:       # %bb.0:589; VLNOBW-NEXT:    kmovw %edi, %k1590; VLNOBW-NEXT:    vcvtdq2pd %ymm1, %zmm0 {%k1}591; VLNOBW-NEXT:    retq592;593; DQNOVL-LABEL: i32to8f64_mask:594; DQNOVL:       # %bb.0:595; DQNOVL-NEXT:    kmovw %edi, %k1596; DQNOVL-NEXT:    vcvtdq2pd %ymm1, %zmm0 {%k1}597; DQNOVL-NEXT:    retq598;599; AVX512BW-LABEL: i32to8f64_mask:600; AVX512BW:       # %bb.0:601; AVX512BW-NEXT:    kmovd %edi, %k1602; AVX512BW-NEXT:    vcvtdq2pd %ymm1, %zmm0 {%k1}603; AVX512BW-NEXT:    retq604  %1 = bitcast i8 %c to <8 x i1>605  %2 = sitofp <8 x i32> %b to <8 x double>606  %3 = select <8 x i1> %1, <8 x double> %2, <8 x double> %a607  ret <8 x double> %3608}609define <8 x double> @sito8f64_maskz(<8 x i32> %a, i8 %b) nounwind {610; KNL-LABEL: sito8f64_maskz:611; KNL:       # %bb.0:612; KNL-NEXT:    kmovw %edi, %k1613; KNL-NEXT:    vcvtdq2pd %ymm0, %zmm0 {%k1} {z}614; KNL-NEXT:    retq615;616; VLBW-LABEL: sito8f64_maskz:617; VLBW:       # %bb.0:618; VLBW-NEXT:    kmovd %edi, %k1619; VLBW-NEXT:    vcvtdq2pd %ymm0, %zmm0 {%k1} {z}620; VLBW-NEXT:    retq621;622; VLNOBW-LABEL: sito8f64_maskz:623; VLNOBW:       # %bb.0:624; VLNOBW-NEXT:    kmovw %edi, %k1625; VLNOBW-NEXT:    vcvtdq2pd %ymm0, %zmm0 {%k1} {z}626; VLNOBW-NEXT:    retq627;628; DQNOVL-LABEL: sito8f64_maskz:629; DQNOVL:       # %bb.0:630; DQNOVL-NEXT:    kmovw %edi, %k1631; DQNOVL-NEXT:    vcvtdq2pd %ymm0, %zmm0 {%k1} {z}632; DQNOVL-NEXT:    retq633;634; AVX512BW-LABEL: sito8f64_maskz:635; AVX512BW:       # %bb.0:636; AVX512BW-NEXT:    kmovd %edi, %k1637; AVX512BW-NEXT:    vcvtdq2pd %ymm0, %zmm0 {%k1} {z}638; AVX512BW-NEXT:    retq639  %1 = bitcast i8 %b to <8 x i1>640  %2 = sitofp <8 x i32> %a to <8 x double>641  %3 = select <8 x i1> %1, <8 x double> %2, <8 x double> zeroinitializer642  ret <8 x double> %3643}644 645define <8 x i32> @f64to8si(<8 x double> %a) {646; ALL-LABEL: f64to8si:647; ALL:       # %bb.0:648; ALL-NEXT:    vcvttpd2dq %zmm0, %ymm0649; ALL-NEXT:    retq650  %b = fptosi <8 x double> %a to <8 x i32>651  ret <8 x i32> %b652}653 654define <8 x i16> @f64to8ss(<8 x double> %f) {655; NOVL-LABEL: f64to8ss:656; NOVL:       # %bb.0:657; NOVL-NEXT:    vcvttpd2dq %zmm0, %ymm0658; NOVL-NEXT:    vpmovdw %zmm0, %ymm0659; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0660; NOVL-NEXT:    vzeroupper661; NOVL-NEXT:    retq662;663; VL-LABEL: f64to8ss:664; VL:       # %bb.0:665; VL-NEXT:    vcvttpd2dq %zmm0, %ymm0666; VL-NEXT:    vpmovdw %ymm0, %xmm0667; VL-NEXT:    vzeroupper668; VL-NEXT:    retq669  %res = fptosi <8 x double> %f to <8 x i16>670  ret <8 x i16> %res671}672 673define <8 x i8> @f64to8sc(<8 x double> %f) {674; NOVL-LABEL: f64to8sc:675; NOVL:       # %bb.0:676; NOVL-NEXT:    vcvttpd2dq %zmm0, %ymm0677; NOVL-NEXT:    vpmovdb %zmm0, %xmm0678; NOVL-NEXT:    vzeroupper679; NOVL-NEXT:    retq680;681; VL-LABEL: f64to8sc:682; VL:       # %bb.0:683; VL-NEXT:    vcvttpd2dq %zmm0, %ymm0684; VL-NEXT:    vpmovdb %ymm0, %xmm0685; VL-NEXT:    vzeroupper686; VL-NEXT:    retq687  %res = fptosi <8 x double> %f to <8 x i8>688  ret <8 x i8> %res689}690 691define <4 x i32> @f64to4si(<4 x double> %a) {692; ALL-LABEL: f64to4si:693; ALL:       # %bb.0:694; ALL-NEXT:    vcvttpd2dq %ymm0, %xmm0695; ALL-NEXT:    vzeroupper696; ALL-NEXT:    retq697  %b = fptosi <4 x double> %a to <4 x i32>698  ret <4 x i32> %b699}700 701define <16 x float> @f64to16f32(<16 x double> %b) nounwind {702; ALL-LABEL: f64to16f32:703; ALL:       # %bb.0:704; ALL-NEXT:    vcvtpd2ps %zmm0, %ymm0705; ALL-NEXT:    vcvtpd2ps %zmm1, %ymm1706; ALL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm0707; ALL-NEXT:    retq708  %a = fptrunc <16 x double> %b to <16 x float>709  ret <16 x float> %a710}711 712define <4 x float> @f64to4f32(<4 x double> %b) {713; ALL-LABEL: f64to4f32:714; ALL:       # %bb.0:715; ALL-NEXT:    vcvtpd2ps %ymm0, %xmm0716; ALL-NEXT:    vzeroupper717; ALL-NEXT:    retq718  %a = fptrunc <4 x double> %b to <4 x float>719  ret <4 x float> %a720}721 722define <4 x float> @f64to4f32_mask(<4 x double> %b, <4 x i1> %mask) {723; NOVLDQ-LABEL: f64to4f32_mask:724; NOVLDQ:       # %bb.0:725; NOVLDQ-NEXT:    vpslld $31, %xmm1, %xmm1726; NOVLDQ-NEXT:    vptestmd %zmm1, %zmm1, %k1727; NOVLDQ-NEXT:    vcvtpd2ps %ymm0, %xmm0728; NOVLDQ-NEXT:    vmovaps %zmm0, %zmm0 {%k1} {z}729; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0730; NOVLDQ-NEXT:    vzeroupper731; NOVLDQ-NEXT:    retq732;733; VLDQ-LABEL: f64to4f32_mask:734; VLDQ:       # %bb.0:735; VLDQ-NEXT:    vpslld $31, %xmm1, %xmm1736; VLDQ-NEXT:    vpmovd2m %xmm1, %k1737; VLDQ-NEXT:    vcvtpd2ps %ymm0, %xmm0 {%k1} {z}738; VLDQ-NEXT:    vzeroupper739; VLDQ-NEXT:    retq740;741; VLNODQ-LABEL: f64to4f32_mask:742; VLNODQ:       # %bb.0:743; VLNODQ-NEXT:    vpslld $31, %xmm1, %xmm1744; VLNODQ-NEXT:    vptestmd %xmm1, %xmm1, %k1745; VLNODQ-NEXT:    vcvtpd2ps %ymm0, %xmm0 {%k1} {z}746; VLNODQ-NEXT:    vzeroupper747; VLNODQ-NEXT:    retq748;749; DQNOVL-LABEL: f64to4f32_mask:750; DQNOVL:       # %bb.0:751; DQNOVL-NEXT:    vpslld $31, %xmm1, %xmm1752; DQNOVL-NEXT:    vpmovd2m %zmm1, %k1753; DQNOVL-NEXT:    vcvtpd2ps %ymm0, %xmm0754; DQNOVL-NEXT:    vmovaps %zmm0, %zmm0 {%k1} {z}755; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0756; DQNOVL-NEXT:    vzeroupper757; DQNOVL-NEXT:    retq758  %a = fptrunc <4 x double> %b to <4 x float>759  %c = select <4 x i1>%mask, <4 x float>%a, <4 x float> zeroinitializer760  ret <4 x float> %c761}762 763define <4 x float> @f64tof32_inreg(<2 x double> %a0, <4 x float> %a1) nounwind {764; ALL-LABEL: f64tof32_inreg:765; ALL:       # %bb.0:766; ALL-NEXT:    vcvtsd2ss %xmm0, %xmm1, %xmm0767; ALL-NEXT:    retq768  %ext = extractelement <2 x double> %a0, i32 0769  %cvt = fptrunc double %ext to float770  %res = insertelement <4 x float> %a1, float %cvt, i32 0771  ret <4 x float> %res772}773 774define <8 x double> @f32to8f64(<8 x float> %b) nounwind {775; ALL-LABEL: f32to8f64:776; ALL:       # %bb.0:777; ALL-NEXT:    vcvtps2pd %ymm0, %zmm0778; ALL-NEXT:    retq779  %a = fpext <8 x float> %b to <8 x double>780  ret <8 x double> %a781}782 783define <4 x double> @f32to4f64_mask(<4 x float> %b, <4 x double> %b1, <4 x double> %a1) {784; NOVL-LABEL: f32to4f64_mask:785; NOVL:       # %bb.0:786; NOVL-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2787; NOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1788; NOVL-NEXT:    vcvtps2pd %xmm0, %ymm0789; NOVL-NEXT:    vcmpltpd %zmm2, %zmm1, %k1790; NOVL-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}791; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0792; NOVL-NEXT:    retq793;794; VL-LABEL: f32to4f64_mask:795; VL:       # %bb.0:796; VL-NEXT:    vcmpltpd %ymm2, %ymm1, %k1797; VL-NEXT:    vcvtps2pd %xmm0, %ymm0 {%k1} {z}798; VL-NEXT:    retq799  %a = fpext <4 x float> %b to <4 x double>800  %mask = fcmp ogt <4 x double> %a1, %b1801  %c = select <4 x i1> %mask, <4 x double> %a, <4 x double> zeroinitializer802  ret <4 x double> %c803}804 805define <4 x double> @f32to4f64_mask_load(ptr %p, <4 x double> %b1, <4 x double> %a1, <4 x double> %passthru) {806; NOVL-LABEL: f32to4f64_mask_load:807; NOVL:       # %bb.0:808; NOVL-NEXT:    # kill: def $ymm2 killed $ymm2 def $zmm2809; NOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1810; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0811; NOVL-NEXT:    vcvtps2pd (%rdi), %ymm3812; NOVL-NEXT:    vcmpltpd %zmm1, %zmm0, %k1813; NOVL-NEXT:    vblendmpd %zmm3, %zmm2, %zmm0 {%k1}814; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0815; NOVL-NEXT:    retq816;817; VL-LABEL: f32to4f64_mask_load:818; VL:       # %bb.0:819; VL-NEXT:    vcmpltpd %ymm1, %ymm0, %k1820; VL-NEXT:    vcvtps2pd (%rdi), %ymm2 {%k1}821; VL-NEXT:    vmovaps %ymm2, %ymm0822; VL-NEXT:    retq823  %b = load <4 x float>, ptr %p824  %a = fpext <4 x float> %b to <4 x double>825  %mask = fcmp ogt <4 x double> %a1, %b1826  %c = select <4 x i1> %mask, <4 x double> %a, <4 x double> %passthru827  ret <4 x double> %c828}829 830define <4 x double> @f32to4f64_maskz_load(ptr %p, <4 x double> %b1, <4 x double> %a1) {831; NOVL-LABEL: f32to4f64_maskz_load:832; NOVL:       # %bb.0:833; NOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1834; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0835; NOVL-NEXT:    vcvtps2pd (%rdi), %ymm2836; NOVL-NEXT:    vcmpltpd %zmm1, %zmm0, %k1837; NOVL-NEXT:    vmovapd %zmm2, %zmm0 {%k1} {z}838; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0839; NOVL-NEXT:    retq840;841; VL-LABEL: f32to4f64_maskz_load:842; VL:       # %bb.0:843; VL-NEXT:    vcmpltpd %ymm1, %ymm0, %k1844; VL-NEXT:    vcvtps2pd (%rdi), %ymm0 {%k1} {z}845; VL-NEXT:    retq846  %b = load <4 x float>, ptr %p847  %a = fpext <4 x float> %b to <4 x double>848  %mask = fcmp ogt <4 x double> %a1, %b1849  %c = select <4 x i1> %mask, <4 x double> %a, <4 x double> zeroinitializer850  ret <4 x double> %c851}852 853define <2 x double> @f32tof64_inreg(<2 x double> %a0, <4 x float> %a1) nounwind {854; ALL-LABEL: f32tof64_inreg:855; ALL:       # %bb.0:856; ALL-NEXT:    vcvtss2sd %xmm1, %xmm0, %xmm0857; ALL-NEXT:    retq858  %ext = extractelement <4 x float> %a1, i32 0859  %cvt = fpext float %ext to double860  %res = insertelement <2 x double> %a0, double %cvt, i32 0861  ret <2 x double> %res862}863 864define double @sltof64_load(ptr nocapture %e) {865; ALL-LABEL: sltof64_load:866; ALL:       # %bb.0: # %entry867; ALL-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm0868; ALL-NEXT:    retq869entry:870  %tmp1 = load i64, ptr %e, align 8871  %conv = sitofp i64 %tmp1 to double872  ret double %conv873}874 875define double @sitof64_load(ptr %e) {876; ALL-LABEL: sitof64_load:877; ALL:       # %bb.0: # %entry878; ALL-NEXT:    vcvtsi2sdl (%rdi), %xmm15, %xmm0879; ALL-NEXT:    retq880entry:881  %tmp1 = load i32, ptr %e, align 4882  %conv = sitofp i32 %tmp1 to double883  ret double %conv884}885 886define float @sitof32_load(ptr %e) {887; ALL-LABEL: sitof32_load:888; ALL:       # %bb.0: # %entry889; ALL-NEXT:    vcvtsi2ssl (%rdi), %xmm15, %xmm0890; ALL-NEXT:    retq891entry:892  %tmp1 = load i32, ptr %e, align 4893  %conv = sitofp i32 %tmp1 to float894  ret float %conv895}896 897define float @sltof32_load(ptr %e) {898; ALL-LABEL: sltof32_load:899; ALL:       # %bb.0: # %entry900; ALL-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm0901; ALL-NEXT:    retq902entry:903  %tmp1 = load i64, ptr %e, align 8904  %conv = sitofp i64 %tmp1 to float905  ret float %conv906}907 908define void @f32tof64_loadstore() {909; ALL-LABEL: f32tof64_loadstore:910; ALL:       # %bb.0: # %entry911; ALL-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero912; ALL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0913; ALL-NEXT:    vmovsd %xmm0, -{{[0-9]+}}(%rsp)914; ALL-NEXT:    retq915entry:916  %f = alloca float, align 4917  %d = alloca double, align 8918  %tmp = load float, ptr %f, align 4919  %conv = fpext float %tmp to double920  store double %conv, ptr %d, align 8921  ret void922}923 924define void @f64tof32_loadstore() nounwind uwtable {925; ALL-LABEL: f64tof32_loadstore:926; ALL:       # %bb.0: # %entry927; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero928; ALL-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0929; ALL-NEXT:    vmovss %xmm0, -{{[0-9]+}}(%rsp)930; ALL-NEXT:    retq931entry:932  %f = alloca float, align 4933  %d = alloca double, align 8934  %tmp = load double, ptr %d, align 8935  %conv = fptrunc double %tmp to float936  store float %conv, ptr %f, align 4937  ret void938}939 940define double @long_to_double(i64 %x) {941; ALL-LABEL: long_to_double:942; ALL:       # %bb.0:943; ALL-NEXT:    vmovq %rdi, %xmm0944; ALL-NEXT:    retq945   %res = bitcast i64 %x to double946   ret double %res947}948 949define i64 @double_to_long(double %x) {950; ALL-LABEL: double_to_long:951; ALL:       # %bb.0:952; ALL-NEXT:    vmovq %xmm0, %rax953; ALL-NEXT:    retq954   %res = bitcast double %x to i64955   ret i64 %res956}957 958define float @int_to_float(i32 %x) {959; ALL-LABEL: int_to_float:960; ALL:       # %bb.0:961; ALL-NEXT:    vmovd %edi, %xmm0962; ALL-NEXT:    retq963   %res = bitcast i32 %x to float964   ret float %res965}966 967define i32 @float_to_int(float %x) {968; ALL-LABEL: float_to_int:969; ALL:       # %bb.0:970; ALL-NEXT:    vmovd %xmm0, %eax971; ALL-NEXT:    retq972   %res = bitcast float %x to i32973   ret i32 %res974}975 976define <16 x double> @uito16f64(<16 x i32> %a) nounwind {977; ALL-LABEL: uito16f64:978; ALL:       # %bb.0:979; ALL-NEXT:    vcvtudq2pd %ymm0, %zmm2980; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm0981; ALL-NEXT:    vcvtudq2pd %ymm0, %zmm1982; ALL-NEXT:    vmovaps %zmm2, %zmm0983; ALL-NEXT:    retq984  %b = uitofp <16 x i32> %a to <16 x double>985  ret <16 x double> %b986}987 988define <8 x float> @slto8f32(<8 x i64> %a) {989; NODQ-LABEL: slto8f32:990; NODQ:       # %bb.0:991; NODQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm1992; NODQ-NEXT:    vpextrq $1, %xmm1, %rax993; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm2994; NODQ-NEXT:    vmovq %xmm1, %rax995; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm1996; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]997; NODQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm2998; NODQ-NEXT:    vmovq %xmm2, %rax999; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31000; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0],xmm1[3]1001; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1002; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21003; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]1004; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1005; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21006; NODQ-NEXT:    vmovq %xmm0, %rax1007; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31008; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]1009; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm01010; NODQ-NEXT:    vmovq %xmm0, %rax1011; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31012; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]1013; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1014; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01015; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0]1016; NODQ-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01017; NODQ-NEXT:    retq1018;1019; VLDQ-LABEL: slto8f32:1020; VLDQ:       # %bb.0:1021; VLDQ-NEXT:    vcvtqq2ps %zmm0, %ymm01022; VLDQ-NEXT:    retq1023;1024; DQNOVL-LABEL: slto8f32:1025; DQNOVL:       # %bb.0:1026; DQNOVL-NEXT:    vcvtqq2ps %zmm0, %ymm01027; DQNOVL-NEXT:    retq1028  %b = sitofp <8 x i64> %a to <8 x float>1029  ret <8 x float> %b1030}1031 1032define <16 x float> @slto16f32(<16 x i64> %a) {1033; NODQ-LABEL: slto16f32:1034; NODQ:       # %bb.0:1035; NODQ-NEXT:    vextracti32x4 $2, %zmm1, %xmm21036; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1037; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31038; NODQ-NEXT:    vmovq %xmm2, %rax1039; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21040; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]1041; NODQ-NEXT:    vextracti32x4 $3, %zmm1, %xmm31042; NODQ-NEXT:    vmovq %xmm3, %rax1043; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm41044; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm4[0],xmm2[3]1045; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1046; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31047; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[0]1048; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1049; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31050; NODQ-NEXT:    vmovq %xmm1, %rax1051; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm41052; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]1053; NODQ-NEXT:    vextracti128 $1, %ymm1, %xmm11054; NODQ-NEXT:    vmovq %xmm1, %rax1055; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm41056; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]1057; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1058; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11059; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm3[0,1,2],xmm1[0]1060; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11061; NODQ-NEXT:    vextractf32x4 $2, %zmm0, %xmm21062; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1063; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31064; NODQ-NEXT:    vmovq %xmm2, %rax1065; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21066; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]1067; NODQ-NEXT:    vextractf32x4 $3, %zmm0, %xmm31068; NODQ-NEXT:    vmovq %xmm3, %rax1069; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm41070; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm4[0],xmm2[3]1071; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1072; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31073; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[0]1074; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1075; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm31076; NODQ-NEXT:    vmovq %xmm0, %rax1077; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm41078; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]1079; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm01080; NODQ-NEXT:    vmovq %xmm0, %rax1081; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm41082; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]1083; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1084; NODQ-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01085; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm3[0,1,2],xmm0[0]1086; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01087; NODQ-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01088; NODQ-NEXT:    retq1089;1090; VLDQ-LABEL: slto16f32:1091; VLDQ:       # %bb.0:1092; VLDQ-NEXT:    vcvtqq2ps %zmm0, %ymm01093; VLDQ-NEXT:    vcvtqq2ps %zmm1, %ymm11094; VLDQ-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01095; VLDQ-NEXT:    retq1096;1097; DQNOVL-LABEL: slto16f32:1098; DQNOVL:       # %bb.0:1099; DQNOVL-NEXT:    vcvtqq2ps %zmm0, %ymm01100; DQNOVL-NEXT:    vcvtqq2ps %zmm1, %ymm11101; DQNOVL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01102; DQNOVL-NEXT:    retq1103  %b = sitofp <16 x i64> %a to <16 x float>1104  ret <16 x float> %b1105}1106 1107define <8 x double> @slto8f64(<8 x i64> %a) {1108; NODQ-LABEL: slto8f64:1109; NODQ:       # %bb.0:1110; NODQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm11111; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1112; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm21113; NODQ-NEXT:    vmovq %xmm1, %rax1114; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm11115; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]1116; NODQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm21117; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1118; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31119; NODQ-NEXT:    vmovq %xmm2, %rax1120; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm21121; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]1122; NODQ-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11123; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm21124; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1125; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31126; NODQ-NEXT:    vmovq %xmm2, %rax1127; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm21128; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]1129; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1130; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31131; NODQ-NEXT:    vmovq %xmm0, %rax1132; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm01133; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm3[0]1134; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01135; NODQ-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01136; NODQ-NEXT:    retq1137;1138; VLDQ-LABEL: slto8f64:1139; VLDQ:       # %bb.0:1140; VLDQ-NEXT:    vcvtqq2pd %zmm0, %zmm01141; VLDQ-NEXT:    retq1142;1143; DQNOVL-LABEL: slto8f64:1144; DQNOVL:       # %bb.0:1145; DQNOVL-NEXT:    vcvtqq2pd %zmm0, %zmm01146; DQNOVL-NEXT:    retq1147  %b = sitofp <8 x i64> %a to <8 x double>1148  ret <8 x double> %b1149}1150 1151define <16 x double> @slto16f64(<16 x i64> %a) {1152; NODQ-LABEL: slto16f64:1153; NODQ:       # %bb.0:1154; NODQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm21155; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1156; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31157; NODQ-NEXT:    vmovq %xmm2, %rax1158; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm21159; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]1160; NODQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm31161; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1162; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm41163; NODQ-NEXT:    vmovq %xmm3, %rax1164; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31165; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]1166; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm21167; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm31168; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1169; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm41170; NODQ-NEXT:    vmovq %xmm3, %rax1171; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31172; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]1173; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1174; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm41175; NODQ-NEXT:    vmovq %xmm0, %rax1176; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm01177; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm4[0]1178; NODQ-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm01179; NODQ-NEXT:    vinsertf64x4 $1, %ymm2, %zmm0, %zmm01180; NODQ-NEXT:    vextracti32x4 $3, %zmm1, %xmm21181; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1182; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31183; NODQ-NEXT:    vmovq %xmm2, %rax1184; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm21185; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]1186; NODQ-NEXT:    vextracti32x4 $2, %zmm1, %xmm31187; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1188; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm41189; NODQ-NEXT:    vmovq %xmm3, %rax1190; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31191; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]1192; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm21193; NODQ-NEXT:    vextracti128 $1, %ymm1, %xmm31194; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1195; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm41196; NODQ-NEXT:    vmovq %xmm3, %rax1197; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm31198; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]1199; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1200; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm41201; NODQ-NEXT:    vmovq %xmm1, %rax1202; NODQ-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm11203; NODQ-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm4[0]1204; NODQ-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm11205; NODQ-NEXT:    vinsertf64x4 $1, %ymm2, %zmm1, %zmm11206; NODQ-NEXT:    retq1207;1208; VLDQ-LABEL: slto16f64:1209; VLDQ:       # %bb.0:1210; VLDQ-NEXT:    vcvtqq2pd %zmm0, %zmm01211; VLDQ-NEXT:    vcvtqq2pd %zmm1, %zmm11212; VLDQ-NEXT:    retq1213;1214; DQNOVL-LABEL: slto16f64:1215; DQNOVL:       # %bb.0:1216; DQNOVL-NEXT:    vcvtqq2pd %zmm0, %zmm01217; DQNOVL-NEXT:    vcvtqq2pd %zmm1, %zmm11218; DQNOVL-NEXT:    retq1219  %b = sitofp <16 x i64> %a to <16 x double>1220  ret <16 x double> %b1221}1222 1223define <8 x float> @ulto8f32(<8 x i64> %a) {1224; NODQ-LABEL: ulto8f32:1225; NODQ:       # %bb.0:1226; NODQ-NEXT:    vextracti32x4 $2, %zmm0, %xmm11227; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1228; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm21229; NODQ-NEXT:    vmovq %xmm1, %rax1230; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm11231; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]1232; NODQ-NEXT:    vextracti32x4 $3, %zmm0, %xmm21233; NODQ-NEXT:    vmovq %xmm2, %rax1234; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31235; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0],xmm1[3]1236; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1237; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm21238; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]1239; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1240; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm21241; NODQ-NEXT:    vmovq %xmm0, %rax1242; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31243; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]1244; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm01245; NODQ-NEXT:    vmovq %xmm0, %rax1246; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31247; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]1248; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1249; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm01250; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[0]1251; NODQ-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01252; NODQ-NEXT:    retq1253;1254; VLDQ-LABEL: ulto8f32:1255; VLDQ:       # %bb.0:1256; VLDQ-NEXT:    vcvtuqq2ps %zmm0, %ymm01257; VLDQ-NEXT:    retq1258;1259; DQNOVL-LABEL: ulto8f32:1260; DQNOVL:       # %bb.0:1261; DQNOVL-NEXT:    vcvtuqq2ps %zmm0, %ymm01262; DQNOVL-NEXT:    retq1263  %b = uitofp <8 x i64> %a to <8 x float>1264  ret <8 x float> %b1265}1266 1267define <16 x float> @ulto16f32(<16 x i64> %a) {1268; NODQ-LABEL: ulto16f32:1269; NODQ:       # %bb.0:1270; NODQ-NEXT:    vextracti32x4 $2, %zmm1, %xmm21271; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1272; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31273; NODQ-NEXT:    vmovq %xmm2, %rax1274; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm21275; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]1276; NODQ-NEXT:    vextracti32x4 $3, %zmm1, %xmm31277; NODQ-NEXT:    vmovq %xmm3, %rax1278; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm41279; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm4[0],xmm2[3]1280; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1281; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31282; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[0]1283; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1284; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31285; NODQ-NEXT:    vmovq %xmm1, %rax1286; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm41287; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]1288; NODQ-NEXT:    vextracti128 $1, %ymm1, %xmm11289; NODQ-NEXT:    vmovq %xmm1, %rax1290; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm41291; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]1292; NODQ-NEXT:    vpextrq $1, %xmm1, %rax1293; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm11294; NODQ-NEXT:    vinsertps {{.*#+}} xmm1 = xmm3[0,1,2],xmm1[0]1295; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11296; NODQ-NEXT:    vextractf32x4 $2, %zmm0, %xmm21297; NODQ-NEXT:    vpextrq $1, %xmm2, %rax1298; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31299; NODQ-NEXT:    vmovq %xmm2, %rax1300; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm21301; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[2,3]1302; NODQ-NEXT:    vextractf32x4 $3, %zmm0, %xmm31303; NODQ-NEXT:    vmovq %xmm3, %rax1304; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm41305; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm4[0],xmm2[3]1306; NODQ-NEXT:    vpextrq $1, %xmm3, %rax1307; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31308; NODQ-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[0]1309; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1310; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm31311; NODQ-NEXT:    vmovq %xmm0, %rax1312; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm41313; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]1314; NODQ-NEXT:    vextracti128 $1, %ymm0, %xmm01315; NODQ-NEXT:    vmovq %xmm0, %rax1316; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm41317; NODQ-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]1318; NODQ-NEXT:    vpextrq $1, %xmm0, %rax1319; NODQ-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm01320; NODQ-NEXT:    vinsertps {{.*#+}} xmm0 = xmm3[0,1,2],xmm0[0]1321; NODQ-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01322; NODQ-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01323; NODQ-NEXT:    retq1324;1325; VLDQ-LABEL: ulto16f32:1326; VLDQ:       # %bb.0:1327; VLDQ-NEXT:    vcvtuqq2ps %zmm0, %ymm01328; VLDQ-NEXT:    vcvtuqq2ps %zmm1, %ymm11329; VLDQ-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01330; VLDQ-NEXT:    retq1331;1332; DQNOVL-LABEL: ulto16f32:1333; DQNOVL:       # %bb.0:1334; DQNOVL-NEXT:    vcvtuqq2ps %zmm0, %ymm01335; DQNOVL-NEXT:    vcvtuqq2ps %zmm1, %ymm11336; DQNOVL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm0, %zmm01337; DQNOVL-NEXT:    retq1338  %b = uitofp <16 x i64> %a to <16 x float>1339  ret <16 x float> %b1340}1341 1342define <8 x double> @uito8f64_mask(<8 x double> %a, <8 x i32> %b, i8 %c) nounwind {1343; KNL-LABEL: uito8f64_mask:1344; KNL:       # %bb.0:1345; KNL-NEXT:    kmovw %edi, %k11346; KNL-NEXT:    vcvtudq2pd %ymm1, %zmm0 {%k1}1347; KNL-NEXT:    retq1348;1349; VLBW-LABEL: uito8f64_mask:1350; VLBW:       # %bb.0:1351; VLBW-NEXT:    kmovd %edi, %k11352; VLBW-NEXT:    vcvtudq2pd %ymm1, %zmm0 {%k1}1353; VLBW-NEXT:    retq1354;1355; VLNOBW-LABEL: uito8f64_mask:1356; VLNOBW:       # %bb.0:1357; VLNOBW-NEXT:    kmovw %edi, %k11358; VLNOBW-NEXT:    vcvtudq2pd %ymm1, %zmm0 {%k1}1359; VLNOBW-NEXT:    retq1360;1361; DQNOVL-LABEL: uito8f64_mask:1362; DQNOVL:       # %bb.0:1363; DQNOVL-NEXT:    kmovw %edi, %k11364; DQNOVL-NEXT:    vcvtudq2pd %ymm1, %zmm0 {%k1}1365; DQNOVL-NEXT:    retq1366;1367; AVX512BW-LABEL: uito8f64_mask:1368; AVX512BW:       # %bb.0:1369; AVX512BW-NEXT:    kmovd %edi, %k11370; AVX512BW-NEXT:    vcvtudq2pd %ymm1, %zmm0 {%k1}1371; AVX512BW-NEXT:    retq1372  %1 = bitcast i8 %c to <8 x i1>1373  %2 = uitofp <8 x i32> %b to <8 x double>1374  %3 = select <8 x i1> %1, <8 x double> %2, <8 x double> %a1375  ret <8 x double> %31376}1377define <8 x double> @uito8f64_maskz(<8 x i32> %a, i8 %b) nounwind {1378; KNL-LABEL: uito8f64_maskz:1379; KNL:       # %bb.0:1380; KNL-NEXT:    kmovw %edi, %k11381; KNL-NEXT:    vcvtudq2pd %ymm0, %zmm0 {%k1} {z}1382; KNL-NEXT:    retq1383;1384; VLBW-LABEL: uito8f64_maskz:1385; VLBW:       # %bb.0:1386; VLBW-NEXT:    kmovd %edi, %k11387; VLBW-NEXT:    vcvtudq2pd %ymm0, %zmm0 {%k1} {z}1388; VLBW-NEXT:    retq1389;1390; VLNOBW-LABEL: uito8f64_maskz:1391; VLNOBW:       # %bb.0:1392; VLNOBW-NEXT:    kmovw %edi, %k11393; VLNOBW-NEXT:    vcvtudq2pd %ymm0, %zmm0 {%k1} {z}1394; VLNOBW-NEXT:    retq1395;1396; DQNOVL-LABEL: uito8f64_maskz:1397; DQNOVL:       # %bb.0:1398; DQNOVL-NEXT:    kmovw %edi, %k11399; DQNOVL-NEXT:    vcvtudq2pd %ymm0, %zmm0 {%k1} {z}1400; DQNOVL-NEXT:    retq1401;1402; AVX512BW-LABEL: uito8f64_maskz:1403; AVX512BW:       # %bb.0:1404; AVX512BW-NEXT:    kmovd %edi, %k11405; AVX512BW-NEXT:    vcvtudq2pd %ymm0, %zmm0 {%k1} {z}1406; AVX512BW-NEXT:    retq1407  %1 = bitcast i8 %b to <8 x i1>1408  %2 = uitofp <8 x i32> %a to <8 x double>1409  %3 = select <8 x i1> %1, <8 x double> %2, <8 x double> zeroinitializer1410  ret <8 x double> %31411}1412 1413define <4 x double> @uito4f64(<4 x i32> %a) nounwind {1414; NOVL-LABEL: uito4f64:1415; NOVL:       # %bb.0:1416; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01417; NOVL-NEXT:    vcvtudq2pd %ymm0, %zmm01418; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01419; NOVL-NEXT:    retq1420;1421; VL-LABEL: uito4f64:1422; VL:       # %bb.0:1423; VL-NEXT:    vcvtudq2pd %xmm0, %ymm01424; VL-NEXT:    retq1425  %b = uitofp <4 x i32> %a to <4 x double>1426  ret <4 x double> %b1427}1428 1429define <16 x float> @uito16f32(<16 x i32> %a) nounwind {1430; ALL-LABEL: uito16f32:1431; ALL:       # %bb.0:1432; ALL-NEXT:    vcvtudq2ps %zmm0, %zmm01433; ALL-NEXT:    retq1434  %b = uitofp <16 x i32> %a to <16 x float>1435  ret <16 x float> %b1436}1437 1438define <8 x double> @uito8f64(<8 x i32> %a) {1439; ALL-LABEL: uito8f64:1440; ALL:       # %bb.0:1441; ALL-NEXT:    vcvtudq2pd %ymm0, %zmm01442; ALL-NEXT:    retq1443  %b = uitofp <8 x i32> %a to <8 x double>1444  ret <8 x double> %b1445}1446 1447define <8 x float> @uito8f32(<8 x i32> %a) nounwind {1448; NOVL-LABEL: uito8f32:1449; NOVL:       # %bb.0:1450; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01451; NOVL-NEXT:    vcvtudq2ps %zmm0, %zmm01452; NOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01453; NOVL-NEXT:    retq1454;1455; VL-LABEL: uito8f32:1456; VL:       # %bb.0:1457; VL-NEXT:    vcvtudq2ps %ymm0, %ymm01458; VL-NEXT:    retq1459  %b = uitofp <8 x i32> %a to <8 x float>1460  ret <8 x float> %b1461}1462 1463define <4 x float> @uito4f32(<4 x i32> %a) nounwind {1464; NOVL-LABEL: uito4f32:1465; NOVL:       # %bb.0:1466; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01467; NOVL-NEXT:    vcvtudq2ps %zmm0, %zmm01468; NOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm01469; NOVL-NEXT:    vzeroupper1470; NOVL-NEXT:    retq1471;1472; VL-LABEL: uito4f32:1473; VL:       # %bb.0:1474; VL-NEXT:    vcvtudq2ps %xmm0, %xmm01475; VL-NEXT:    retq1476  %b = uitofp <4 x i32> %a to <4 x float>1477  ret <4 x float> %b1478}1479 1480define i32 @fptosi(float %a) nounwind {1481; ALL-LABEL: fptosi:1482; ALL:       # %bb.0:1483; ALL-NEXT:    vcvttss2si %xmm0, %eax1484; ALL-NEXT:    retq1485  %b = fptosi float %a to i321486  ret i32 %b1487}1488 1489define i32 @fptoui(float %a) nounwind {1490; ALL-LABEL: fptoui:1491; ALL:       # %bb.0:1492; ALL-NEXT:    vcvttss2usi %xmm0, %eax1493; ALL-NEXT:    retq1494  %b = fptoui float %a to i321495  ret i32 %b1496}1497 1498define float @uitof32(i32 %a) nounwind {1499; ALL-LABEL: uitof32:1500; ALL:       # %bb.0:1501; ALL-NEXT:    vcvtusi2ss %edi, %xmm15, %xmm01502; ALL-NEXT:    retq1503  %b = uitofp i32 %a to float1504  ret float %b1505}1506 1507define double @uitof64(i32 %a) nounwind {1508; ALL-LABEL: uitof64:1509; ALL:       # %bb.0:1510; ALL-NEXT:    vcvtusi2sd %edi, %xmm15, %xmm01511; ALL-NEXT:    retq1512  %b = uitofp i32 %a to double1513  ret double %b1514}1515 1516define <16 x float> @sbto16f32(<16 x i32> %a) {1517; NODQ-LABEL: sbto16f32:1518; NODQ:       # %bb.0:1519; NODQ-NEXT:    vpxor %xmm1, %xmm1, %xmm11520; NODQ-NEXT:    vpcmpgtd %zmm0, %zmm1, %k11521; NODQ-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11522; NODQ-NEXT:    vcvtdq2ps %zmm0, %zmm01523; NODQ-NEXT:    retq1524;1525; VLDQ-LABEL: sbto16f32:1526; VLDQ:       # %bb.0:1527; VLDQ-NEXT:    vpmovd2m %zmm0, %k01528; VLDQ-NEXT:    vpmovm2d %k0, %zmm01529; VLDQ-NEXT:    vcvtdq2ps %zmm0, %zmm01530; VLDQ-NEXT:    retq1531;1532; DQNOVL-LABEL: sbto16f32:1533; DQNOVL:       # %bb.0:1534; DQNOVL-NEXT:    vpmovd2m %zmm0, %k01535; DQNOVL-NEXT:    vpmovm2d %k0, %zmm01536; DQNOVL-NEXT:    vcvtdq2ps %zmm0, %zmm01537; DQNOVL-NEXT:    retq1538  %mask = icmp slt <16 x i32> %a, zeroinitializer1539  %1 = sitofp <16 x i1> %mask to <16 x float>1540  ret <16 x float> %11541}1542 1543define <16 x float> @scto16f32(<16 x i8> %a) {1544; ALL-LABEL: scto16f32:1545; ALL:       # %bb.0:1546; ALL-NEXT:    vpmovsxbd %xmm0, %zmm01547; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01548; ALL-NEXT:    retq1549  %1 = sitofp <16 x i8> %a to <16 x float>1550  ret <16 x float> %11551}1552 1553define <16 x float> @ssto16f32(<16 x i16> %a) {1554; ALL-LABEL: ssto16f32:1555; ALL:       # %bb.0:1556; ALL-NEXT:    vpmovsxwd %ymm0, %zmm01557; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01558; ALL-NEXT:    retq1559  %1 = sitofp <16 x i16> %a to <16 x float>1560  ret <16 x float> %11561}1562 1563define <8 x double> @ssto16f64(<8 x i16> %a) {1564; ALL-LABEL: ssto16f64:1565; ALL:       # %bb.0:1566; ALL-NEXT:    vpmovsxwd %xmm0, %ymm01567; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm01568; ALL-NEXT:    retq1569  %1 = sitofp <8 x i16> %a to <8 x double>1570  ret <8 x double> %11571}1572 1573define <8 x double> @scto8f64(<8 x i8> %a) {1574; ALL-LABEL: scto8f64:1575; ALL:       # %bb.0:1576; ALL-NEXT:    vpmovsxbd %xmm0, %ymm01577; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm01578; ALL-NEXT:    retq1579  %1 = sitofp <8 x i8> %a to <8 x double>1580  ret <8 x double> %11581}1582 1583define <16 x double> @scto16f64(<16 x i8> %a) {1584; ALL-LABEL: scto16f64:1585; ALL:       # %bb.0:1586; ALL-NEXT:    vpmovsxbd %xmm0, %zmm11587; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm01588; ALL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11589; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm11590; ALL-NEXT:    retq1591  %b = sitofp <16 x i8> %a to <16 x double>1592  ret <16 x double> %b1593}1594 1595define <16 x double> @sbto16f64(<16 x double> %a) {1596; NODQ-LABEL: sbto16f64:1597; NODQ:       # %bb.0:1598; NODQ-NEXT:    vxorpd %xmm2, %xmm2, %xmm21599; NODQ-NEXT:    vcmpltpd %zmm0, %zmm2, %k01600; NODQ-NEXT:    vcmpltpd %zmm1, %zmm2, %k11601; NODQ-NEXT:    kunpckbw %k0, %k1, %k11602; NODQ-NEXT:    vpternlogd {{.*#+}} zmm1 {%k1} {z} = -11603; NODQ-NEXT:    vcvtdq2pd %ymm1, %zmm01604; NODQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm11605; NODQ-NEXT:    vcvtdq2pd %ymm1, %zmm11606; NODQ-NEXT:    retq1607;1608; VLDQ-LABEL: sbto16f64:1609; VLDQ:       # %bb.0:1610; VLDQ-NEXT:    vxorpd %xmm2, %xmm2, %xmm21611; VLDQ-NEXT:    vcmpltpd %zmm0, %zmm2, %k01612; VLDQ-NEXT:    vcmpltpd %zmm1, %zmm2, %k11613; VLDQ-NEXT:    kunpckbw %k0, %k1, %k01614; VLDQ-NEXT:    vpmovm2d %k0, %zmm11615; VLDQ-NEXT:    vcvtdq2pd %ymm1, %zmm01616; VLDQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm11617; VLDQ-NEXT:    vcvtdq2pd %ymm1, %zmm11618; VLDQ-NEXT:    retq1619;1620; DQNOVL-LABEL: sbto16f64:1621; DQNOVL:       # %bb.0:1622; DQNOVL-NEXT:    vxorpd %xmm2, %xmm2, %xmm21623; DQNOVL-NEXT:    vcmpltpd %zmm0, %zmm2, %k01624; DQNOVL-NEXT:    vcmpltpd %zmm1, %zmm2, %k11625; DQNOVL-NEXT:    kunpckbw %k0, %k1, %k01626; DQNOVL-NEXT:    vpmovm2d %k0, %zmm11627; DQNOVL-NEXT:    vcvtdq2pd %ymm1, %zmm01628; DQNOVL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11629; DQNOVL-NEXT:    vcvtdq2pd %ymm1, %zmm11630; DQNOVL-NEXT:    retq1631  %cmpres = fcmp ogt <16 x double> %a, zeroinitializer1632  %1 = sitofp <16 x i1> %cmpres to <16 x double>1633  ret <16 x double> %11634}1635 1636define <8 x double> @sbto8f64(<8 x double> %a) {1637; NOVLDQ-LABEL: sbto8f64:1638; NOVLDQ:       # %bb.0:1639; NOVLDQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11640; NOVLDQ-NEXT:    vcmpltpd %zmm0, %zmm1, %k11641; NOVLDQ-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11642; NOVLDQ-NEXT:    vcvtdq2pd %ymm0, %zmm01643; NOVLDQ-NEXT:    retq1644;1645; VLDQ-LABEL: sbto8f64:1646; VLDQ:       # %bb.0:1647; VLDQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11648; VLDQ-NEXT:    vcmpltpd %zmm0, %zmm1, %k01649; VLDQ-NEXT:    vpmovm2d %k0, %ymm01650; VLDQ-NEXT:    vcvtdq2pd %ymm0, %zmm01651; VLDQ-NEXT:    retq1652;1653; VLNODQ-LABEL: sbto8f64:1654; VLNODQ:       # %bb.0:1655; VLNODQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11656; VLNODQ-NEXT:    vcmpltpd %zmm0, %zmm1, %k11657; VLNODQ-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm01658; VLNODQ-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}1659; VLNODQ-NEXT:    vcvtdq2pd %ymm0, %zmm01660; VLNODQ-NEXT:    retq1661;1662; DQNOVL-LABEL: sbto8f64:1663; DQNOVL:       # %bb.0:1664; DQNOVL-NEXT:    vxorpd %xmm1, %xmm1, %xmm11665; DQNOVL-NEXT:    vcmpltpd %zmm0, %zmm1, %k01666; DQNOVL-NEXT:    vpmovm2d %k0, %zmm01667; DQNOVL-NEXT:    vcvtdq2pd %ymm0, %zmm01668; DQNOVL-NEXT:    retq1669  %cmpres = fcmp ogt <8 x double> %a, zeroinitializer1670  %1 = sitofp <8 x i1> %cmpres to <8 x double>1671  ret <8 x double> %11672}1673 1674define <8 x float> @sbto8f32(<8 x float> %a) {1675; ALL-LABEL: sbto8f32:1676; ALL:       # %bb.0:1677; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm11678; ALL-NEXT:    vcmpltps %ymm0, %ymm1, %ymm01679; ALL-NEXT:    vcvtdq2ps %ymm0, %ymm01680; ALL-NEXT:    retq1681  %cmpres = fcmp ogt <8 x float> %a, zeroinitializer1682  %1 = sitofp <8 x i1> %cmpres to <8 x float>1683  ret <8 x float> %11684}1685 1686define <4 x float> @sbto4f32(<4 x float> %a) {1687; ALL-LABEL: sbto4f32:1688; ALL:       # %bb.0:1689; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm11690; ALL-NEXT:    vcmpltps %xmm0, %xmm1, %xmm01691; ALL-NEXT:    vcvtdq2ps %xmm0, %xmm01692; ALL-NEXT:    retq1693  %cmpres = fcmp ogt <4 x float> %a, zeroinitializer1694  %1 = sitofp <4 x i1> %cmpres to <4 x float>1695  ret <4 x float> %11696}1697 1698define <4 x double> @sbto4f64(<4 x double> %a) {1699; NOVL-LABEL: sbto4f64:1700; NOVL:       # %bb.0:1701; NOVL-NEXT:    vxorpd %xmm1, %xmm1, %xmm11702; NOVL-NEXT:    vcmpltpd %ymm0, %ymm1, %ymm01703; NOVL-NEXT:    vpmovqd %zmm0, %ymm01704; NOVL-NEXT:    vcvtdq2pd %xmm0, %ymm01705; NOVL-NEXT:    retq1706;1707; VLDQ-LABEL: sbto4f64:1708; VLDQ:       # %bb.0:1709; VLDQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11710; VLDQ-NEXT:    vcmpltpd %ymm0, %ymm1, %k01711; VLDQ-NEXT:    vpmovm2d %k0, %xmm01712; VLDQ-NEXT:    vcvtdq2pd %xmm0, %ymm01713; VLDQ-NEXT:    retq1714;1715; VLNODQ-LABEL: sbto4f64:1716; VLNODQ:       # %bb.0:1717; VLNODQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11718; VLNODQ-NEXT:    vcmpltpd %ymm0, %ymm1, %k11719; VLNODQ-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm01720; VLNODQ-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}1721; VLNODQ-NEXT:    vcvtdq2pd %xmm0, %ymm01722; VLNODQ-NEXT:    retq1723  %cmpres = fcmp ogt <4 x double> %a, zeroinitializer1724  %1 = sitofp <4 x i1> %cmpres to <4 x double>1725  ret <4 x double> %11726}1727 1728define <2 x float> @sbto2f32(<2 x float> %a) {1729; ALL-LABEL: sbto2f32:1730; ALL:       # %bb.0:1731; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm11732; ALL-NEXT:    vcmpltps %xmm0, %xmm1, %xmm01733; ALL-NEXT:    vcvtdq2ps %xmm0, %xmm01734; ALL-NEXT:    retq1735  %cmpres = fcmp ogt <2 x float> %a, zeroinitializer1736  %1 = sitofp <2 x i1> %cmpres to <2 x float>1737  ret <2 x float> %11738}1739 1740define <2 x double> @sbto2f64(<2 x double> %a) {1741; NOVL-LABEL: sbto2f64:1742; NOVL:       # %bb.0:1743; NOVL-NEXT:    vxorpd %xmm1, %xmm1, %xmm11744; NOVL-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm01745; NOVL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2,2,3]1746; NOVL-NEXT:    vcvtdq2pd %xmm0, %xmm01747; NOVL-NEXT:    retq1748;1749; VLDQ-LABEL: sbto2f64:1750; VLDQ:       # %bb.0:1751; VLDQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11752; VLDQ-NEXT:    vcmpltpd %xmm0, %xmm1, %k01753; VLDQ-NEXT:    vpmovm2d %k0, %xmm01754; VLDQ-NEXT:    vcvtdq2pd %xmm0, %xmm01755; VLDQ-NEXT:    retq1756;1757; VLNODQ-LABEL: sbto2f64:1758; VLNODQ:       # %bb.0:1759; VLNODQ-NEXT:    vxorpd %xmm1, %xmm1, %xmm11760; VLNODQ-NEXT:    vcmpltpd %xmm0, %xmm1, %k11761; VLNODQ-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm01762; VLNODQ-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}1763; VLNODQ-NEXT:    vcvtdq2pd %xmm0, %xmm01764; VLNODQ-NEXT:    retq1765  %cmpres = fcmp ogt <2 x double> %a, zeroinitializer1766  %1 = sitofp <2 x i1> %cmpres to <2 x double>1767  ret <2 x double> %11768}1769 1770define <16 x float> @ucto16f32(<16 x i8> %a) {1771; ALL-LABEL: ucto16f32:1772; ALL:       # %bb.0:1773; ALL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1774; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01775; ALL-NEXT:    retq1776  %b = uitofp <16 x i8> %a to <16 x float>1777  ret <16 x float>%b1778}1779 1780define <8 x double> @ucto8f64(<8 x i8> %a) {1781; ALL-LABEL: ucto8f64:1782; ALL:       # %bb.0:1783; ALL-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero1784; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm01785; ALL-NEXT:    retq1786  %b = uitofp <8 x i8> %a to <8 x double>1787  ret <8 x double> %b1788}1789 1790define <16 x float> @swto16f32(<16 x i16> %a) {1791; ALL-LABEL: swto16f32:1792; ALL:       # %bb.0:1793; ALL-NEXT:    vpmovsxwd %ymm0, %zmm01794; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01795; ALL-NEXT:    retq1796  %b = sitofp <16 x i16> %a to <16 x float>1797  ret <16 x float> %b1798}1799 1800define <8 x double> @swto8f64(<8 x i16> %a) {1801; ALL-LABEL: swto8f64:1802; ALL:       # %bb.0:1803; ALL-NEXT:    vpmovsxwd %xmm0, %ymm01804; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm01805; ALL-NEXT:    retq1806  %b = sitofp <8 x i16> %a to <8 x double>1807  ret <8 x double> %b1808}1809 1810define <16 x double> @swto16f64(<16 x i16> %a) {1811; ALL-LABEL: swto16f64:1812; ALL:       # %bb.0:1813; ALL-NEXT:    vpmovsxwd %ymm0, %zmm11814; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm01815; ALL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11816; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm11817; ALL-NEXT:    retq1818  %b = sitofp <16 x i16> %a to <16 x double>1819  ret <16 x double> %b1820}1821 1822define <16 x double> @ucto16f64(<16 x i8> %a) {1823; ALL-LABEL: ucto16f64:1824; ALL:       # %bb.0:1825; ALL-NEXT:    vpmovzxbd {{.*#+}} zmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero1826; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm01827; ALL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11828; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm11829; ALL-NEXT:    retq1830  %b = uitofp <16 x i8> %a to <16 x double>1831  ret <16 x double> %b1832}1833 1834define <16 x float> @uwto16f32(<16 x i16> %a) {1835; ALL-LABEL: uwto16f32:1836; ALL:       # %bb.0:1837; ALL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1838; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01839; ALL-NEXT:    retq1840  %b = uitofp <16 x i16> %a to <16 x float>1841  ret <16 x float> %b1842}1843 1844define <8 x double> @uwto8f64(<8 x i16> %a) {1845; ALL-LABEL: uwto8f64:1846; ALL:       # %bb.0:1847; ALL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1848; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm01849; ALL-NEXT:    retq1850  %b = uitofp <8 x i16> %a to <8 x double>1851  ret <8 x double> %b1852}1853 1854define <16 x double> @uwto16f64(<16 x i16> %a) {1855; ALL-LABEL: uwto16f64:1856; ALL:       # %bb.0:1857; ALL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1858; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm01859; ALL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11860; ALL-NEXT:    vcvtdq2pd %ymm1, %zmm11861; ALL-NEXT:    retq1862  %b = uitofp <16 x i16> %a to <16 x double>1863  ret <16 x double> %b1864}1865 1866define <16 x float> @sito16f32(<16 x i32> %a) {1867; ALL-LABEL: sito16f32:1868; ALL:       # %bb.0:1869; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01870; ALL-NEXT:    retq1871  %b = sitofp <16 x i32> %a to <16 x float>1872  ret <16 x float> %b1873}1874 1875define <16 x double> @sito16f64(<16 x i32> %a) {1876; ALL-LABEL: sito16f64:1877; ALL:       # %bb.0:1878; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm21879; ALL-NEXT:    vextractf64x4 $1, %zmm0, %ymm01880; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm11881; ALL-NEXT:    vmovaps %zmm2, %zmm01882; ALL-NEXT:    retq1883  %b = sitofp <16 x i32> %a to <16 x double>1884  ret <16 x double> %b1885}1886 1887define <16 x float> @usto16f32(<16 x i16> %a) {1888; ALL-LABEL: usto16f32:1889; ALL:       # %bb.0:1890; ALL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero1891; ALL-NEXT:    vcvtdq2ps %zmm0, %zmm01892; ALL-NEXT:    retq1893  %b = uitofp <16 x i16> %a to <16 x float>1894  ret <16 x float> %b1895}1896 1897define <16 x float> @ubto16f32(<16 x i32> %a) {1898; NODQ-LABEL: ubto16f32:1899; NODQ:       # %bb.0:1900; NODQ-NEXT:    vpxor %xmm1, %xmm1, %xmm11901; NODQ-NEXT:    vpcmpgtd %zmm0, %zmm1, %k11902; NODQ-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11903; NODQ-NEXT:    vpsrld $31, %zmm0, %zmm01904; NODQ-NEXT:    vcvtdq2ps %zmm0, %zmm01905; NODQ-NEXT:    retq1906;1907; VLDQ-LABEL: ubto16f32:1908; VLDQ:       # %bb.0:1909; VLDQ-NEXT:    vpmovd2m %zmm0, %k01910; VLDQ-NEXT:    vpmovm2d %k0, %zmm01911; VLDQ-NEXT:    vpsrld $31, %zmm0, %zmm01912; VLDQ-NEXT:    vcvtdq2ps %zmm0, %zmm01913; VLDQ-NEXT:    retq1914;1915; DQNOVL-LABEL: ubto16f32:1916; DQNOVL:       # %bb.0:1917; DQNOVL-NEXT:    vpmovd2m %zmm0, %k01918; DQNOVL-NEXT:    vpmovm2d %k0, %zmm01919; DQNOVL-NEXT:    vpsrld $31, %zmm0, %zmm01920; DQNOVL-NEXT:    vcvtdq2ps %zmm0, %zmm01921; DQNOVL-NEXT:    retq1922  %mask = icmp slt <16 x i32> %a, zeroinitializer1923  %1 = uitofp <16 x i1> %mask to <16 x float>1924  ret <16 x float> %11925}1926 1927define <16 x double> @ubto16f64(<16 x i32> %a) {1928; NODQ-LABEL: ubto16f64:1929; NODQ:       # %bb.0:1930; NODQ-NEXT:    vpxor %xmm1, %xmm1, %xmm11931; NODQ-NEXT:    vpcmpgtd %zmm0, %zmm1, %k11932; NODQ-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -11933; NODQ-NEXT:    vpsrld $31, %zmm0, %zmm11934; NODQ-NEXT:    vcvtdq2pd %ymm1, %zmm01935; NODQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm11936; NODQ-NEXT:    vcvtdq2pd %ymm1, %zmm11937; NODQ-NEXT:    retq1938;1939; VLDQ-LABEL: ubto16f64:1940; VLDQ:       # %bb.0:1941; VLDQ-NEXT:    vpmovd2m %zmm0, %k01942; VLDQ-NEXT:    vpmovm2d %k0, %zmm01943; VLDQ-NEXT:    vpsrld $31, %zmm0, %zmm11944; VLDQ-NEXT:    vcvtdq2pd %ymm1, %zmm01945; VLDQ-NEXT:    vextracti64x4 $1, %zmm1, %ymm11946; VLDQ-NEXT:    vcvtdq2pd %ymm1, %zmm11947; VLDQ-NEXT:    retq1948;1949; DQNOVL-LABEL: ubto16f64:1950; DQNOVL:       # %bb.0:1951; DQNOVL-NEXT:    vpmovd2m %zmm0, %k01952; DQNOVL-NEXT:    vpmovm2d %k0, %zmm01953; DQNOVL-NEXT:    vpsrld $31, %zmm0, %zmm11954; DQNOVL-NEXT:    vcvtdq2pd %ymm1, %zmm01955; DQNOVL-NEXT:    vextracti64x4 $1, %zmm1, %ymm11956; DQNOVL-NEXT:    vcvtdq2pd %ymm1, %zmm11957; DQNOVL-NEXT:    retq1958  %mask = icmp slt <16 x i32> %a, zeroinitializer1959  %1 = uitofp <16 x i1> %mask to <16 x double>1960  ret <16 x double> %11961}1962 1963define <8 x float> @ubto8f32(<8 x i32> %a) {1964; NOVL-LABEL: ubto8f32:1965; NOVL:       # %bb.0:1966; NOVL-NEXT:    vpxor %xmm1, %xmm1, %xmm11967; NOVL-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm01968; NOVL-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1065353216,1065353216,1065353216,1065353216,1065353216,1065353216,1065353216,1065353216]1969; NOVL-NEXT:    vpand %ymm1, %ymm0, %ymm01970; NOVL-NEXT:    retq1971;1972; VL-LABEL: ubto8f32:1973; VL:       # %bb.0:1974; VL-NEXT:    vpxor %xmm1, %xmm1, %xmm11975; VL-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm01976; VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm01977; VL-NEXT:    retq1978  %mask = icmp slt <8 x i32> %a, zeroinitializer1979  %1 = uitofp <8 x i1> %mask to <8 x float>1980  ret <8 x float> %11981}1982 1983define <8 x double> @ubto8f64(<8 x i32> %a) {1984; ALL-LABEL: ubto8f64:1985; ALL:       # %bb.0:1986; ALL-NEXT:    vpsrld $31, %ymm0, %ymm01987; ALL-NEXT:    vcvtdq2pd %ymm0, %zmm01988; ALL-NEXT:    retq1989  %mask = icmp slt <8 x i32> %a, zeroinitializer1990  %1 = uitofp <8 x i1> %mask to <8 x double>1991  ret <8 x double> %11992}1993 1994define <4 x float> @ubto4f32(<4 x i32> %a) {1995; NOVL-LABEL: ubto4f32:1996; NOVL:       # %bb.0:1997; NOVL-NEXT:    vpxor %xmm1, %xmm1, %xmm11998; NOVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm01999; NOVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1065353216,1065353216,1065353216,1065353216]2000; NOVL-NEXT:    vpand %xmm1, %xmm0, %xmm02001; NOVL-NEXT:    retq2002;2003; VL-LABEL: ubto4f32:2004; VL:       # %bb.0:2005; VL-NEXT:    vpxor %xmm1, %xmm1, %xmm12006; VL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm02007; VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm02008; VL-NEXT:    retq2009  %mask = icmp slt <4 x i32> %a, zeroinitializer2010  %1 = uitofp <4 x i1> %mask to <4 x float>2011  ret <4 x float> %12012}2013 2014define <4 x double> @ubto4f64(<4 x i32> %a) {2015; ALL-LABEL: ubto4f64:2016; ALL:       # %bb.0:2017; ALL-NEXT:    vpsrld $31, %xmm0, %xmm02018; ALL-NEXT:    vcvtdq2pd %xmm0, %ymm02019; ALL-NEXT:    retq2020  %mask = icmp slt <4 x i32> %a, zeroinitializer2021  %1 = uitofp <4 x i1> %mask to <4 x double>2022  ret <4 x double> %12023}2024 2025define <2 x float> @ubto2f32(<2 x i32> %a) {2026; NOVL-LABEL: ubto2f32:2027; NOVL:       # %bb.0:2028; NOVL-NEXT:    vpxor %xmm1, %xmm1, %xmm12029; NOVL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm02030; NOVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1065353216,1065353216,1065353216,1065353216]2031; NOVL-NEXT:    vpandn %xmm1, %xmm0, %xmm02032; NOVL-NEXT:    retq2033;2034; VL-LABEL: ubto2f32:2035; VL:       # %bb.0:2036; VL-NEXT:    vpxor %xmm1, %xmm1, %xmm12037; VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm02038; VL-NEXT:    vpandnd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm02039; VL-NEXT:    retq2040  %mask = icmp ne <2 x i32> %a, zeroinitializer2041  %1 = uitofp <2 x i1> %mask to <2 x float>2042  ret <2 x float> %12043}2044 2045define <2 x double> @ubto2f64(<2 x i32> %a) {2046; NOVL-LABEL: ubto2f64:2047; NOVL:       # %bb.0:2048; NOVL-NEXT:    vpxor %xmm1, %xmm1, %xmm12049; NOVL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm02050; NOVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]2051; NOVL-NEXT:    vpandn %xmm1, %xmm0, %xmm02052; NOVL-NEXT:    vcvtdq2pd %xmm0, %xmm02053; NOVL-NEXT:    retq2054;2055; VL-LABEL: ubto2f64:2056; VL:       # %bb.0:2057; VL-NEXT:    vpxor %xmm1, %xmm1, %xmm12058; VL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm02059; VL-NEXT:    vpandnd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm02060; VL-NEXT:    vcvtdq2pd %xmm0, %xmm02061; VL-NEXT:    retq2062  %mask = icmp ne <2 x i32> %a, zeroinitializer2063  %1 = uitofp <2 x i1> %mask to <2 x double>2064  ret <2 x double> %12065}2066 2067define <2 x i64> @test_2f64toub(<2 x double> %a, <2 x i64> %passthru) {2068; NOVLDQ-LABEL: test_2f64toub:2069; NOVLDQ:       # %bb.0:2070; NOVLDQ-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12071; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02072; NOVLDQ-NEXT:    vcvttpd2udq %zmm0, %ymm02073; NOVLDQ-NEXT:    vpslld $31, %ymm0, %ymm02074; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12075; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2076; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02077; NOVLDQ-NEXT:    vzeroupper2078; NOVLDQ-NEXT:    retq2079;2080; VLDQ-LABEL: test_2f64toub:2081; VLDQ:       # %bb.0:2082; VLDQ-NEXT:    vcvttpd2udq %xmm0, %xmm02083; VLDQ-NEXT:    vpslld $31, %xmm0, %xmm02084; VLDQ-NEXT:    vpmovd2m %xmm0, %k12085; VLDQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2086; VLDQ-NEXT:    retq2087;2088; VLNODQ-LABEL: test_2f64toub:2089; VLNODQ:       # %bb.0:2090; VLNODQ-NEXT:    vcvttpd2udq %xmm0, %xmm02091; VLNODQ-NEXT:    vpslld $31, %xmm0, %xmm02092; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12093; VLNODQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2094; VLNODQ-NEXT:    retq2095;2096; DQNOVL-LABEL: test_2f64toub:2097; DQNOVL:       # %bb.0:2098; DQNOVL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12099; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02100; DQNOVL-NEXT:    vcvttpd2udq %zmm0, %ymm02101; DQNOVL-NEXT:    vpslld $31, %ymm0, %ymm02102; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12103; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2104; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02105; DQNOVL-NEXT:    vzeroupper2106; DQNOVL-NEXT:    retq2107  %mask = fptoui <2 x double> %a to <2 x i1>2108  %select = select <2 x i1> %mask, <2 x i64> %passthru, <2 x i64> zeroinitializer2109  ret <2 x i64> %select2110}2111 2112define <4 x i64> @test_4f64toub(<4 x double> %a, <4 x i64> %passthru) {2113; NOVLDQ-LABEL: test_4f64toub:2114; NOVLDQ:       # %bb.0:2115; NOVLDQ-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12116; NOVLDQ-NEXT:    vcvttpd2dq %ymm0, %xmm02117; NOVLDQ-NEXT:    vpslld $31, %xmm0, %xmm02118; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12119; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2120; NOVLDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02121; NOVLDQ-NEXT:    retq2122;2123; VLDQ-LABEL: test_4f64toub:2124; VLDQ:       # %bb.0:2125; VLDQ-NEXT:    vcvttpd2dq %ymm0, %xmm02126; VLDQ-NEXT:    vpslld $31, %xmm0, %xmm02127; VLDQ-NEXT:    vpmovd2m %xmm0, %k12128; VLDQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2129; VLDQ-NEXT:    retq2130;2131; VLNODQ-LABEL: test_4f64toub:2132; VLNODQ:       # %bb.0:2133; VLNODQ-NEXT:    vcvttpd2dq %ymm0, %xmm02134; VLNODQ-NEXT:    vpslld $31, %xmm0, %xmm02135; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12136; VLNODQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2137; VLNODQ-NEXT:    retq2138;2139; DQNOVL-LABEL: test_4f64toub:2140; DQNOVL:       # %bb.0:2141; DQNOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12142; DQNOVL-NEXT:    vcvttpd2dq %ymm0, %xmm02143; DQNOVL-NEXT:    vpslld $31, %xmm0, %xmm02144; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12145; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2146; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02147; DQNOVL-NEXT:    retq2148  %mask = fptoui <4 x double> %a to <4 x i1>2149  %select = select <4 x i1> %mask, <4 x i64> %passthru, <4 x i64> zeroinitializer2150  ret <4 x i64> %select2151}2152 2153define <8 x i64> @test_8f64toub(<8 x double> %a, <8 x i64> %passthru) {2154; NOVLDQ-LABEL: test_8f64toub:2155; NOVLDQ:       # %bb.0:2156; NOVLDQ-NEXT:    vcvttpd2dq %zmm0, %ymm02157; NOVLDQ-NEXT:    vpslld $31, %ymm0, %ymm02158; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12159; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2160; NOVLDQ-NEXT:    retq2161;2162; VLDQ-LABEL: test_8f64toub:2163; VLDQ:       # %bb.0:2164; VLDQ-NEXT:    vcvttpd2dq %zmm0, %ymm02165; VLDQ-NEXT:    vpslld $31, %ymm0, %ymm02166; VLDQ-NEXT:    vpmovd2m %ymm0, %k12167; VLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2168; VLDQ-NEXT:    retq2169;2170; VLNODQ-LABEL: test_8f64toub:2171; VLNODQ:       # %bb.0:2172; VLNODQ-NEXT:    vcvttpd2dq %zmm0, %ymm02173; VLNODQ-NEXT:    vpslld $31, %ymm0, %ymm02174; VLNODQ-NEXT:    vptestmd %ymm0, %ymm0, %k12175; VLNODQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2176; VLNODQ-NEXT:    retq2177;2178; DQNOVL-LABEL: test_8f64toub:2179; DQNOVL:       # %bb.0:2180; DQNOVL-NEXT:    vcvttpd2dq %zmm0, %ymm02181; DQNOVL-NEXT:    vpslld $31, %ymm0, %ymm02182; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12183; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2184; DQNOVL-NEXT:    retq2185  %mask = fptoui <8 x double> %a to <8 x i1>2186  %select = select <8 x i1> %mask, <8 x i64> %passthru, <8 x i64> zeroinitializer2187  ret <8 x i64> %select2188}2189 2190define <2 x i64> @test_2f32toub(<2 x float> %a, <2 x i64> %passthru) {2191; NOVLDQ-LABEL: test_2f32toub:2192; NOVLDQ:       # %bb.0:2193; NOVLDQ-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12194; NOVLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02195; NOVLDQ-NEXT:    vpslld $31, %xmm0, %xmm02196; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12197; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2198; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02199; NOVLDQ-NEXT:    vzeroupper2200; NOVLDQ-NEXT:    retq2201;2202; VLDQ-LABEL: test_2f32toub:2203; VLDQ:       # %bb.0:2204; VLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02205; VLDQ-NEXT:    vpslld $31, %xmm0, %xmm02206; VLDQ-NEXT:    vpmovd2m %xmm0, %k12207; VLDQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2208; VLDQ-NEXT:    retq2209;2210; VLNODQ-LABEL: test_2f32toub:2211; VLNODQ:       # %bb.0:2212; VLNODQ-NEXT:    vcvttps2dq %xmm0, %xmm02213; VLNODQ-NEXT:    vpslld $31, %xmm0, %xmm02214; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12215; VLNODQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2216; VLNODQ-NEXT:    retq2217;2218; DQNOVL-LABEL: test_2f32toub:2219; DQNOVL:       # %bb.0:2220; DQNOVL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12221; DQNOVL-NEXT:    vcvttps2dq %xmm0, %xmm02222; DQNOVL-NEXT:    vpslld $31, %xmm0, %xmm02223; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12224; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2225; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02226; DQNOVL-NEXT:    vzeroupper2227; DQNOVL-NEXT:    retq2228  %mask = fptoui <2 x float> %a to <2 x i1>2229  %select = select <2 x i1> %mask, <2 x i64> %passthru, <2 x i64> zeroinitializer2230  ret <2 x i64> %select2231}2232 2233define <4 x i64> @test_4f32toub(<4 x float> %a, <4 x i64> %passthru) {2234; NOVLDQ-LABEL: test_4f32toub:2235; NOVLDQ:       # %bb.0:2236; NOVLDQ-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12237; NOVLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02238; NOVLDQ-NEXT:    vpslld $31, %xmm0, %xmm02239; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12240; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2241; NOVLDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02242; NOVLDQ-NEXT:    retq2243;2244; VLDQ-LABEL: test_4f32toub:2245; VLDQ:       # %bb.0:2246; VLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02247; VLDQ-NEXT:    vpslld $31, %xmm0, %xmm02248; VLDQ-NEXT:    vpmovd2m %xmm0, %k12249; VLDQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2250; VLDQ-NEXT:    retq2251;2252; VLNODQ-LABEL: test_4f32toub:2253; VLNODQ:       # %bb.0:2254; VLNODQ-NEXT:    vcvttps2dq %xmm0, %xmm02255; VLNODQ-NEXT:    vpslld $31, %xmm0, %xmm02256; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12257; VLNODQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2258; VLNODQ-NEXT:    retq2259;2260; DQNOVL-LABEL: test_4f32toub:2261; DQNOVL:       # %bb.0:2262; DQNOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12263; DQNOVL-NEXT:    vcvttps2dq %xmm0, %xmm02264; DQNOVL-NEXT:    vpslld $31, %xmm0, %xmm02265; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12266; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2267; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02268; DQNOVL-NEXT:    retq2269  %mask = fptoui <4 x float> %a to <4 x i1>2270  %select = select <4 x i1> %mask, <4 x i64> %passthru, <4 x i64> zeroinitializer2271  ret <4 x i64> %select2272}2273 2274define <8 x i64> @test_8f32toub(<8 x float> %a, <8 x i64> %passthru) {2275; NOVLDQ-LABEL: test_8f32toub:2276; NOVLDQ:       # %bb.0:2277; NOVLDQ-NEXT:    vcvttps2dq %ymm0, %ymm02278; NOVLDQ-NEXT:    vpslld $31, %ymm0, %ymm02279; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12280; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2281; NOVLDQ-NEXT:    retq2282;2283; VLDQ-LABEL: test_8f32toub:2284; VLDQ:       # %bb.0:2285; VLDQ-NEXT:    vcvttps2dq %ymm0, %ymm02286; VLDQ-NEXT:    vpslld $31, %ymm0, %ymm02287; VLDQ-NEXT:    vpmovd2m %ymm0, %k12288; VLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2289; VLDQ-NEXT:    retq2290;2291; VLNODQ-LABEL: test_8f32toub:2292; VLNODQ:       # %bb.0:2293; VLNODQ-NEXT:    vcvttps2dq %ymm0, %ymm02294; VLNODQ-NEXT:    vpslld $31, %ymm0, %ymm02295; VLNODQ-NEXT:    vptestmd %ymm0, %ymm0, %k12296; VLNODQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2297; VLNODQ-NEXT:    retq2298;2299; DQNOVL-LABEL: test_8f32toub:2300; DQNOVL:       # %bb.0:2301; DQNOVL-NEXT:    vcvttps2dq %ymm0, %ymm02302; DQNOVL-NEXT:    vpslld $31, %ymm0, %ymm02303; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12304; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2305; DQNOVL-NEXT:    retq2306  %mask = fptoui <8 x float> %a to <8 x i1>2307  %select = select <8 x i1> %mask, <8 x i64> %passthru, <8 x i64> zeroinitializer2308  ret <8 x i64> %select2309}2310 2311define <16 x i32> @test_16f32toub(<16 x float> %a, <16 x i32> %passthru) {2312; NODQ-LABEL: test_16f32toub:2313; NODQ:       # %bb.0:2314; NODQ-NEXT:    vcvttps2dq %zmm0, %zmm02315; NODQ-NEXT:    vpslld $31, %zmm0, %zmm02316; NODQ-NEXT:    vptestmd %zmm0, %zmm0, %k12317; NODQ-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1} {z}2318; NODQ-NEXT:    retq2319;2320; VLDQ-LABEL: test_16f32toub:2321; VLDQ:       # %bb.0:2322; VLDQ-NEXT:    vcvttps2dq %zmm0, %zmm02323; VLDQ-NEXT:    vpslld $31, %zmm0, %zmm02324; VLDQ-NEXT:    vpmovd2m %zmm0, %k12325; VLDQ-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1} {z}2326; VLDQ-NEXT:    retq2327;2328; DQNOVL-LABEL: test_16f32toub:2329; DQNOVL:       # %bb.0:2330; DQNOVL-NEXT:    vcvttps2dq %zmm0, %zmm02331; DQNOVL-NEXT:    vpslld $31, %zmm0, %zmm02332; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12333; DQNOVL-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1} {z}2334; DQNOVL-NEXT:    retq2335  %mask = fptoui <16 x float> %a to <16 x i1>2336  %select = select <16 x i1> %mask, <16 x i32> %passthru, <16 x i32> zeroinitializer2337  ret <16 x i32> %select2338}2339 2340define <2 x i64> @test_2f64tosb(<2 x double> %a, <2 x i64> %passthru) {2341; NOVLDQ-LABEL: test_2f64tosb:2342; NOVLDQ:       # %bb.0:2343; NOVLDQ-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12344; NOVLDQ-NEXT:    vcvttpd2dq %xmm0, %xmm02345; NOVLDQ-NEXT:    vpslld $31, %xmm0, %xmm02346; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12347; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2348; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02349; NOVLDQ-NEXT:    vzeroupper2350; NOVLDQ-NEXT:    retq2351;2352; VLDQ-LABEL: test_2f64tosb:2353; VLDQ:       # %bb.0:2354; VLDQ-NEXT:    vcvttpd2dq %xmm0, %xmm02355; VLDQ-NEXT:    vpslld $31, %xmm0, %xmm02356; VLDQ-NEXT:    vpmovd2m %xmm0, %k12357; VLDQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2358; VLDQ-NEXT:    retq2359;2360; VLNODQ-LABEL: test_2f64tosb:2361; VLNODQ:       # %bb.0:2362; VLNODQ-NEXT:    vcvttpd2dq %xmm0, %xmm02363; VLNODQ-NEXT:    vpslld $31, %xmm0, %xmm02364; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12365; VLNODQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2366; VLNODQ-NEXT:    retq2367;2368; DQNOVL-LABEL: test_2f64tosb:2369; DQNOVL:       # %bb.0:2370; DQNOVL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12371; DQNOVL-NEXT:    vcvttpd2dq %xmm0, %xmm02372; DQNOVL-NEXT:    vpslld $31, %xmm0, %xmm02373; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12374; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2375; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02376; DQNOVL-NEXT:    vzeroupper2377; DQNOVL-NEXT:    retq2378  %mask = fptosi <2 x double> %a to <2 x i1>2379  %select = select <2 x i1> %mask, <2 x i64> %passthru, <2 x i64> zeroinitializer2380  ret <2 x i64> %select2381}2382 2383define <4 x i64> @test_4f64tosb(<4 x double> %a, <4 x i64> %passthru) {2384; NOVLDQ-LABEL: test_4f64tosb:2385; NOVLDQ:       # %bb.0:2386; NOVLDQ-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12387; NOVLDQ-NEXT:    vcvttpd2dq %ymm0, %xmm02388; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12389; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2390; NOVLDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02391; NOVLDQ-NEXT:    retq2392;2393; VLDQ-LABEL: test_4f64tosb:2394; VLDQ:       # %bb.0:2395; VLDQ-NEXT:    vcvttpd2dq %ymm0, %xmm02396; VLDQ-NEXT:    vpmovd2m %xmm0, %k12397; VLDQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2398; VLDQ-NEXT:    retq2399;2400; VLNODQ-LABEL: test_4f64tosb:2401; VLNODQ:       # %bb.0:2402; VLNODQ-NEXT:    vcvttpd2dq %ymm0, %xmm02403; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12404; VLNODQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2405; VLNODQ-NEXT:    retq2406;2407; DQNOVL-LABEL: test_4f64tosb:2408; DQNOVL:       # %bb.0:2409; DQNOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12410; DQNOVL-NEXT:    vcvttpd2dq %ymm0, %xmm02411; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12412; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2413; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02414; DQNOVL-NEXT:    retq2415  %mask = fptosi <4 x double> %a to <4 x i1>2416  %select = select <4 x i1> %mask, <4 x i64> %passthru, <4 x i64> zeroinitializer2417  ret <4 x i64> %select2418}2419 2420define <8 x i64> @test_8f64tosb(<8 x double> %a, <8 x i64> %passthru) {2421; NOVLDQ-LABEL: test_8f64tosb:2422; NOVLDQ:       # %bb.0:2423; NOVLDQ-NEXT:    vcvttpd2dq %zmm0, %ymm02424; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12425; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2426; NOVLDQ-NEXT:    retq2427;2428; VLDQ-LABEL: test_8f64tosb:2429; VLDQ:       # %bb.0:2430; VLDQ-NEXT:    vcvttpd2dq %zmm0, %ymm02431; VLDQ-NEXT:    vpmovd2m %ymm0, %k12432; VLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2433; VLDQ-NEXT:    retq2434;2435; VLNODQ-LABEL: test_8f64tosb:2436; VLNODQ:       # %bb.0:2437; VLNODQ-NEXT:    vcvttpd2dq %zmm0, %ymm02438; VLNODQ-NEXT:    vptestmd %ymm0, %ymm0, %k12439; VLNODQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2440; VLNODQ-NEXT:    retq2441;2442; DQNOVL-LABEL: test_8f64tosb:2443; DQNOVL:       # %bb.0:2444; DQNOVL-NEXT:    vcvttpd2dq %zmm0, %ymm02445; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12446; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2447; DQNOVL-NEXT:    retq2448  %mask = fptosi <8 x double> %a to <8 x i1>2449  %select = select <8 x i1> %mask, <8 x i64> %passthru, <8 x i64> zeroinitializer2450  ret <8 x i64> %select2451}2452 2453define <2 x i64> @test_2f32tosb(<2 x float> %a, <2 x i64> %passthru) {2454; NOVLDQ-LABEL: test_2f32tosb:2455; NOVLDQ:       # %bb.0:2456; NOVLDQ-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12457; NOVLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02458; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12459; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2460; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02461; NOVLDQ-NEXT:    vzeroupper2462; NOVLDQ-NEXT:    retq2463;2464; VLDQ-LABEL: test_2f32tosb:2465; VLDQ:       # %bb.0:2466; VLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02467; VLDQ-NEXT:    vpmovd2m %xmm0, %k12468; VLDQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2469; VLDQ-NEXT:    retq2470;2471; VLNODQ-LABEL: test_2f32tosb:2472; VLNODQ:       # %bb.0:2473; VLNODQ-NEXT:    vcvttps2dq %xmm0, %xmm02474; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12475; VLNODQ-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}2476; VLNODQ-NEXT:    retq2477;2478; DQNOVL-LABEL: test_2f32tosb:2479; DQNOVL:       # %bb.0:2480; DQNOVL-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm12481; DQNOVL-NEXT:    vcvttps2dq %xmm0, %xmm02482; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12483; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2484; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02485; DQNOVL-NEXT:    vzeroupper2486; DQNOVL-NEXT:    retq2487  %mask = fptosi <2 x float> %a to <2 x i1>2488  %select = select <2 x i1> %mask, <2 x i64> %passthru, <2 x i64> zeroinitializer2489  ret <2 x i64> %select2490}2491 2492define <4 x i64> @test_4f32tosb(<4 x float> %a, <4 x i64> %passthru) {2493; NOVLDQ-LABEL: test_4f32tosb:2494; NOVLDQ:       # %bb.0:2495; NOVLDQ-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12496; NOVLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02497; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12498; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2499; NOVLDQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02500; NOVLDQ-NEXT:    retq2501;2502; VLDQ-LABEL: test_4f32tosb:2503; VLDQ:       # %bb.0:2504; VLDQ-NEXT:    vcvttps2dq %xmm0, %xmm02505; VLDQ-NEXT:    vpmovd2m %xmm0, %k12506; VLDQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2507; VLDQ-NEXT:    retq2508;2509; VLNODQ-LABEL: test_4f32tosb:2510; VLNODQ:       # %bb.0:2511; VLNODQ-NEXT:    vcvttps2dq %xmm0, %xmm02512; VLNODQ-NEXT:    vptestmd %xmm0, %xmm0, %k12513; VLNODQ-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1} {z}2514; VLNODQ-NEXT:    retq2515;2516; DQNOVL-LABEL: test_4f32tosb:2517; DQNOVL:       # %bb.0:2518; DQNOVL-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm12519; DQNOVL-NEXT:    vcvttps2dq %xmm0, %xmm02520; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12521; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2522; DQNOVL-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02523; DQNOVL-NEXT:    retq2524  %mask = fptosi <4 x float> %a to <4 x i1>2525  %select = select <4 x i1> %mask, <4 x i64> %passthru, <4 x i64> zeroinitializer2526  ret <4 x i64> %select2527}2528 2529define <8 x i64> @test_8f32tosb(<8 x float> %a, <8 x i64> %passthru) {2530; NOVLDQ-LABEL: test_8f32tosb:2531; NOVLDQ:       # %bb.0:2532; NOVLDQ-NEXT:    vcvttps2dq %ymm0, %ymm02533; NOVLDQ-NEXT:    vptestmd %zmm0, %zmm0, %k12534; NOVLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2535; NOVLDQ-NEXT:    retq2536;2537; VLDQ-LABEL: test_8f32tosb:2538; VLDQ:       # %bb.0:2539; VLDQ-NEXT:    vcvttps2dq %ymm0, %ymm02540; VLDQ-NEXT:    vpmovd2m %ymm0, %k12541; VLDQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2542; VLDQ-NEXT:    retq2543;2544; VLNODQ-LABEL: test_8f32tosb:2545; VLNODQ:       # %bb.0:2546; VLNODQ-NEXT:    vcvttps2dq %ymm0, %ymm02547; VLNODQ-NEXT:    vptestmd %ymm0, %ymm0, %k12548; VLNODQ-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2549; VLNODQ-NEXT:    retq2550;2551; DQNOVL-LABEL: test_8f32tosb:2552; DQNOVL:       # %bb.0:2553; DQNOVL-NEXT:    vcvttps2dq %ymm0, %ymm02554; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12555; DQNOVL-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1} {z}2556; DQNOVL-NEXT:    retq2557  %mask = fptosi <8 x float> %a to <8 x i1>2558  %select = select <8 x i1> %mask, <8 x i64> %passthru, <8 x i64> zeroinitializer2559  ret <8 x i64> %select2560}2561 2562define <16 x i32> @test_16f32tosb(<16 x float> %a, <16 x i32> %passthru) {2563; NODQ-LABEL: test_16f32tosb:2564; NODQ:       # %bb.0:2565; NODQ-NEXT:    vcvttps2dq %zmm0, %zmm02566; NODQ-NEXT:    vptestmd %zmm0, %zmm0, %k12567; NODQ-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1} {z}2568; NODQ-NEXT:    retq2569;2570; VLDQ-LABEL: test_16f32tosb:2571; VLDQ:       # %bb.0:2572; VLDQ-NEXT:    vcvttps2dq %zmm0, %zmm02573; VLDQ-NEXT:    vpmovd2m %zmm0, %k12574; VLDQ-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1} {z}2575; VLDQ-NEXT:    retq2576;2577; DQNOVL-LABEL: test_16f32tosb:2578; DQNOVL:       # %bb.0:2579; DQNOVL-NEXT:    vcvttps2dq %zmm0, %zmm02580; DQNOVL-NEXT:    vpmovd2m %zmm0, %k12581; DQNOVL-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1} {z}2582; DQNOVL-NEXT:    retq2583  %mask = fptosi <16 x float> %a to <16 x i1>2584  %select = select <16 x i1> %mask, <16 x i32> %passthru, <16 x i32> zeroinitializer2585  ret <16 x i32> %select2586}2587 2588define <2 x double> @test_sito2f64_mask_load(ptr%a, <2 x i64> %c) {2589; SSE-LABEL: sitofp_load_2i32_to_2f64:2590; SSE:       # %bb.0:2591; SSE-NEXT:    cvtdq2pd (%rdi), %xmm02592; SSE-NEXT:    retq2593;2594; AVX-LABEL: sitofp_load_2i32_to_2f64:2595; AVX:       # %bb.0:2596; AVX-NEXT:    vcvtdq2pd (%rdi), %xmm02597; AVX-NEXT:    retq2598; NOVLDQ-LABEL: test_sito2f64_mask_load:2599; NOVLDQ:       # %bb.0:2600; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02601; NOVLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm12602; NOVLDQ-NEXT:    vpcmpgtq %zmm0, %zmm1, %k12603; NOVLDQ-NEXT:    vcvtdq2pd (%rdi), %xmm02604; NOVLDQ-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}2605; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02606; NOVLDQ-NEXT:    vzeroupper2607; NOVLDQ-NEXT:    retq2608;2609; VLDQ-LABEL: test_sito2f64_mask_load:2610; VLDQ:       # %bb.0:2611; VLDQ-NEXT:    vpmovq2m %xmm0, %k12612; VLDQ-NEXT:    vcvtdq2pd (%rdi), %xmm0 {%k1} {z}2613; VLDQ-NEXT:    retq2614;2615; VLNODQ-LABEL: test_sito2f64_mask_load:2616; VLNODQ:       # %bb.0:2617; VLNODQ-NEXT:    vpxor %xmm1, %xmm1, %xmm12618; VLNODQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %k12619; VLNODQ-NEXT:    vcvtdq2pd (%rdi), %xmm0 {%k1} {z}2620; VLNODQ-NEXT:    retq2621;2622; DQNOVL-LABEL: test_sito2f64_mask_load:2623; DQNOVL:       # %bb.0:2624; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02625; DQNOVL-NEXT:    vpmovq2m %zmm0, %k12626; DQNOVL-NEXT:    vcvtdq2pd (%rdi), %xmm02627; DQNOVL-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}2628; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02629; DQNOVL-NEXT:    vzeroupper2630; DQNOVL-NEXT:    retq2631  %mask = icmp slt <2 x i64> %c, zeroinitializer2632  %ld = load <2 x i32>, ptr%a2633  %cvt = sitofp <2 x i32> %ld to <2 x double>2634  %sel = select <2 x i1> %mask, <2 x double> %cvt, <2 x double> zeroinitializer2635  ret <2 x double> %sel2636}2637 2638define <2 x double> @test_uito2f64_mask_load(ptr%a, <2 x i64> %c) {2639; SSE-LABEL: sitofp_load_2i32_to_2f64:2640; SSE:       # %bb.0:2641; SSE-NEXT:    cvtdq2pd (%rdi), %xmm02642; SSE-NEXT:    retq2643;2644; AVX-LABEL: sitofp_load_2i32_to_2f64:2645; AVX:       # %bb.0:2646; AVX-NEXT:    vcvtdq2pd (%rdi), %xmm02647; AVX-NEXT:    retq2648; NOVLDQ-LABEL: test_uito2f64_mask_load:2649; NOVLDQ:       # %bb.0:2650; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02651; NOVLDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm12652; NOVLDQ-NEXT:    vpcmpgtq %zmm0, %zmm1, %k12653; NOVLDQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2654; NOVLDQ-NEXT:    vcvtudq2pd %ymm0, %zmm02655; NOVLDQ-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}2656; NOVLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02657; NOVLDQ-NEXT:    vzeroupper2658; NOVLDQ-NEXT:    retq2659;2660; VLDQ-LABEL: test_uito2f64_mask_load:2661; VLDQ:       # %bb.0:2662; VLDQ-NEXT:    vpmovq2m %xmm0, %k12663; VLDQ-NEXT:    vcvtudq2pd (%rdi), %xmm0 {%k1} {z}2664; VLDQ-NEXT:    retq2665;2666; VLNODQ-LABEL: test_uito2f64_mask_load:2667; VLNODQ:       # %bb.0:2668; VLNODQ-NEXT:    vpxor %xmm1, %xmm1, %xmm12669; VLNODQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %k12670; VLNODQ-NEXT:    vcvtudq2pd (%rdi), %xmm0 {%k1} {z}2671; VLNODQ-NEXT:    retq2672;2673; DQNOVL-LABEL: test_uito2f64_mask_load:2674; DQNOVL:       # %bb.0:2675; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02676; DQNOVL-NEXT:    vpmovq2m %zmm0, %k12677; DQNOVL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2678; DQNOVL-NEXT:    vcvtudq2pd %ymm0, %zmm02679; DQNOVL-NEXT:    vmovapd %zmm0, %zmm0 {%k1} {z}2680; DQNOVL-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02681; DQNOVL-NEXT:    vzeroupper2682; DQNOVL-NEXT:    retq2683  %mask = icmp slt <2 x i64> %c, zeroinitializer2684  %ld = load <2 x i32>, ptr%a2685  %cvt = uitofp <2 x i32> %ld to <2 x double>2686  %sel = select <2 x i1> %mask, <2 x double> %cvt, <2 x double> zeroinitializer2687  ret <2 x double> %sel2688}2689