brintos

brintos / llvm-project-archived public Read only

0
0
Text · 213.9 KiB · 5954e34 Raw
5646 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=+sse2 | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE414; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,VEX,AVX15; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,VEX,AVX26; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F7; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL8; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefixes=AVX,AVX512,AVX512DQ9; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VLDQ10;11; 32-bit tests to make sure we're not doing anything stupid.12; RUN: llc < %s -disable-peephole -mtriple=i686-unknown-unknown13; RUN: llc < %s -disable-peephole -mtriple=i686-unknown-unknown -mattr=+sse14; RUN: llc < %s -disable-peephole -mtriple=i686-unknown-unknown -mattr=+sse215; RUN: llc < %s -disable-peephole -mtriple=i686-unknown-unknown -mattr=+sse4.116 17;18; Signed Integer to Double19;20 21define <2 x float> @sitofp_2i32_to_2f32(<2 x i32> %a) {22; SSE-LABEL: sitofp_2i32_to_2f32:23; SSE:       # %bb.0:24; SSE-NEXT:    cvtdq2ps %xmm0, %xmm025; SSE-NEXT:    retq26;27; AVX-LABEL: sitofp_2i32_to_2f32:28; AVX:       # %bb.0:29; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm030; AVX-NEXT:    retq31  %cvt = sitofp <2 x i32> %a to <2 x float>32  ret <2 x float> %cvt33}34 35define <2 x float> @uitofp_2i32_to_2f32(<2 x i32> %a) {36; SSE2-LABEL: uitofp_2i32_to_2f32:37; SSE2:       # %bb.0:38; SSE2-NEXT:    xorpd %xmm1, %xmm139; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]40; SSE2-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]41; SSE2-NEXT:    orpd %xmm1, %xmm042; SSE2-NEXT:    subpd %xmm1, %xmm043; SSE2-NEXT:    cvtpd2ps %xmm0, %xmm044; SSE2-NEXT:    retq45;46; SSE41-LABEL: uitofp_2i32_to_2f32:47; SSE41:       # %bb.0:48; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero49; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]50; SSE41-NEXT:    por %xmm1, %xmm051; SSE41-NEXT:    subpd %xmm1, %xmm052; SSE41-NEXT:    cvtpd2ps %xmm0, %xmm053; SSE41-NEXT:    retq54;55; AVX1-LABEL: uitofp_2i32_to_2f32:56; AVX1:       # %bb.0:57; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero58; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]59; AVX1-NEXT:    # xmm1 = mem[0,0]60; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm061; AVX1-NEXT:    vsubpd %xmm1, %xmm0, %xmm062; AVX1-NEXT:    vcvtpd2ps %xmm0, %xmm063; AVX1-NEXT:    retq64;65; AVX2-LABEL: uitofp_2i32_to_2f32:66; AVX2:       # %bb.0:67; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero68; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]69; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm070; AVX2-NEXT:    vsubpd %xmm1, %xmm0, %xmm071; AVX2-NEXT:    vcvtpd2ps %xmm0, %xmm072; AVX2-NEXT:    retq73;74; AVX512F-LABEL: uitofp_2i32_to_2f32:75; AVX512F:       # %bb.0:76; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm077; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm078; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm079; AVX512F-NEXT:    vzeroupper80; AVX512F-NEXT:    retq81;82; AVX512VL-LABEL: uitofp_2i32_to_2f32:83; AVX512VL:       # %bb.0:84; AVX512VL-NEXT:    vcvtudq2ps %xmm0, %xmm085; AVX512VL-NEXT:    retq86;87; AVX512DQ-LABEL: uitofp_2i32_to_2f32:88; AVX512DQ:       # %bb.0:89; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm090; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm091; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm092; AVX512DQ-NEXT:    vzeroupper93; AVX512DQ-NEXT:    retq94;95; AVX512VLDQ-LABEL: uitofp_2i32_to_2f32:96; AVX512VLDQ:       # %bb.0:97; AVX512VLDQ-NEXT:    vcvtudq2ps %xmm0, %xmm098; AVX512VLDQ-NEXT:    retq99  %cvt = uitofp <2 x i32> %a to <2 x float>100  ret <2 x float> %cvt101}102 103define <2 x double> @sitofp_2i64_to_2f64(<2 x i64> %a) {104; SSE2-LABEL: sitofp_2i64_to_2f64:105; SSE2:       # %bb.0:106; SSE2-NEXT:    movq %xmm0, %rax107; SSE2-NEXT:    cvtsi2sd %rax, %xmm1108; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]109; SSE2-NEXT:    movq %xmm0, %rax110; SSE2-NEXT:    xorps %xmm0, %xmm0111; SSE2-NEXT:    cvtsi2sd %rax, %xmm0112; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]113; SSE2-NEXT:    movapd %xmm1, %xmm0114; SSE2-NEXT:    retq115;116; SSE41-LABEL: sitofp_2i64_to_2f64:117; SSE41:       # %bb.0:118; SSE41-NEXT:    pextrq $1, %xmm0, %rax119; SSE41-NEXT:    cvtsi2sd %rax, %xmm1120; SSE41-NEXT:    movq %xmm0, %rax121; SSE41-NEXT:    xorps %xmm0, %xmm0122; SSE41-NEXT:    cvtsi2sd %rax, %xmm0123; SSE41-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]124; SSE41-NEXT:    retq125;126; VEX-LABEL: sitofp_2i64_to_2f64:127; VEX:       # %bb.0:128; VEX-NEXT:    vpextrq $1, %xmm0, %rax129; VEX-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1130; VEX-NEXT:    vmovq %xmm0, %rax131; VEX-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0132; VEX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]133; VEX-NEXT:    retq134;135; AVX512F-LABEL: sitofp_2i64_to_2f64:136; AVX512F:       # %bb.0:137; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax138; AVX512F-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1139; AVX512F-NEXT:    vmovq %xmm0, %rax140; AVX512F-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0141; AVX512F-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]142; AVX512F-NEXT:    retq143;144; AVX512VL-LABEL: sitofp_2i64_to_2f64:145; AVX512VL:       # %bb.0:146; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax147; AVX512VL-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1148; AVX512VL-NEXT:    vmovq %xmm0, %rax149; AVX512VL-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0150; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]151; AVX512VL-NEXT:    retq152;153; AVX512DQ-LABEL: sitofp_2i64_to_2f64:154; AVX512DQ:       # %bb.0:155; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0156; AVX512DQ-NEXT:    vcvtqq2pd %zmm0, %zmm0157; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0158; AVX512DQ-NEXT:    vzeroupper159; AVX512DQ-NEXT:    retq160;161; AVX512VLDQ-LABEL: sitofp_2i64_to_2f64:162; AVX512VLDQ:       # %bb.0:163; AVX512VLDQ-NEXT:    vcvtqq2pd %xmm0, %xmm0164; AVX512VLDQ-NEXT:    retq165  %cvt = sitofp <2 x i64> %a to <2 x double>166  ret <2 x double> %cvt167}168 169define <2 x double> @sitofp_2i32_to_2f64(<4 x i32> %a) {170; SSE-LABEL: sitofp_2i32_to_2f64:171; SSE:       # %bb.0:172; SSE-NEXT:    cvtdq2pd %xmm0, %xmm0173; SSE-NEXT:    retq174;175; AVX-LABEL: sitofp_2i32_to_2f64:176; AVX:       # %bb.0:177; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm0178; AVX-NEXT:    retq179  %shuf = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 0, i32 1>180  %cvt = sitofp <2 x i32> %shuf to <2 x double>181  ret <2 x double> %cvt182}183 184define <2 x double> @sitofp_4i32_to_2f64(<4 x i32> %a) {185; SSE-LABEL: sitofp_4i32_to_2f64:186; SSE:       # %bb.0:187; SSE-NEXT:    cvtdq2pd %xmm0, %xmm0188; SSE-NEXT:    retq189;190; AVX-LABEL: sitofp_4i32_to_2f64:191; AVX:       # %bb.0:192; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm0193; AVX-NEXT:    retq194  %cvt = sitofp <4 x i32> %a to <4 x double>195  %shuf = shufflevector <4 x double> %cvt, <4 x double> undef, <2 x i32> <i32 0, i32 1>196  ret <2 x double> %shuf197}198 199define <2 x double> @sitofp_2i16_to_2f64(<8 x i16> %a) {200; SSE2-LABEL: sitofp_2i16_to_2f64:201; SSE2:       # %bb.0:202; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]203; SSE2-NEXT:    psrad $16, %xmm0204; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0205; SSE2-NEXT:    retq206;207; SSE41-LABEL: sitofp_2i16_to_2f64:208; SSE41:       # %bb.0:209; SSE41-NEXT:    pmovsxwd %xmm0, %xmm0210; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0211; SSE41-NEXT:    retq212;213; AVX-LABEL: sitofp_2i16_to_2f64:214; AVX:       # %bb.0:215; AVX-NEXT:    vpmovsxwd %xmm0, %xmm0216; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm0217; AVX-NEXT:    retq218  %shuf = shufflevector <8 x i16> %a, <8 x i16> undef, <2 x i32> <i32 0, i32 1>219  %cvt = sitofp <2 x i16> %shuf to <2 x double>220  ret <2 x double> %cvt221}222 223define <2 x double> @sitofp_8i16_to_2f64(<8 x i16> %a) {224; SSE2-LABEL: sitofp_8i16_to_2f64:225; SSE2:       # %bb.0:226; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]227; SSE2-NEXT:    psrad $16, %xmm0228; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0229; SSE2-NEXT:    retq230;231; SSE41-LABEL: sitofp_8i16_to_2f64:232; SSE41:       # %bb.0:233; SSE41-NEXT:    pmovsxwd %xmm0, %xmm0234; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0235; SSE41-NEXT:    retq236;237; VEX-LABEL: sitofp_8i16_to_2f64:238; VEX:       # %bb.0:239; VEX-NEXT:    vpmovsxwd %xmm0, %xmm0240; VEX-NEXT:    vcvtdq2pd %xmm0, %xmm0241; VEX-NEXT:    retq242;243; AVX512-LABEL: sitofp_8i16_to_2f64:244; AVX512:       # %bb.0:245; AVX512-NEXT:    vpmovsxwd %xmm0, %ymm0246; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm0247; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0248; AVX512-NEXT:    vzeroupper249; AVX512-NEXT:    retq250  %cvt = sitofp <8 x i16> %a to <8 x double>251  %shuf = shufflevector <8 x double> %cvt, <8 x double> undef, <2 x i32> <i32 0, i32 1>252  ret <2 x double> %shuf253}254 255define <2 x double> @sitofp_2i8_to_2f64(<16 x i8> %a) {256; SSE2-LABEL: sitofp_2i8_to_2f64:257; SSE2:       # %bb.0:258; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]259; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]260; SSE2-NEXT:    psrad $24, %xmm0261; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0262; SSE2-NEXT:    retq263;264; SSE41-LABEL: sitofp_2i8_to_2f64:265; SSE41:       # %bb.0:266; SSE41-NEXT:    pmovsxbd %xmm0, %xmm0267; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0268; SSE41-NEXT:    retq269;270; AVX-LABEL: sitofp_2i8_to_2f64:271; AVX:       # %bb.0:272; AVX-NEXT:    vpmovsxbd %xmm0, %xmm0273; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm0274; AVX-NEXT:    retq275  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <2 x i32> <i32 0, i32 1>276  %cvt = sitofp <2 x i8> %shuf to <2 x double>277  ret <2 x double> %cvt278}279 280define <2 x double> @sitofp_16i8_to_2f64(<16 x i8> %a) {281; SSE2-LABEL: sitofp_16i8_to_2f64:282; SSE2:       # %bb.0:283; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]284; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]285; SSE2-NEXT:    psrad $24, %xmm0286; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0287; SSE2-NEXT:    retq288;289; SSE41-LABEL: sitofp_16i8_to_2f64:290; SSE41:       # %bb.0:291; SSE41-NEXT:    pmovsxbd %xmm0, %xmm0292; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0293; SSE41-NEXT:    retq294;295; VEX-LABEL: sitofp_16i8_to_2f64:296; VEX:       # %bb.0:297; VEX-NEXT:    vpmovsxbd %xmm0, %xmm0298; VEX-NEXT:    vcvtdq2pd %xmm0, %xmm0299; VEX-NEXT:    retq300;301; AVX512-LABEL: sitofp_16i8_to_2f64:302; AVX512:       # %bb.0:303; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0304; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm0305; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0306; AVX512-NEXT:    vzeroupper307; AVX512-NEXT:    retq308  %cvt = sitofp <16 x i8> %a to <16 x double>309  %shuf = shufflevector <16 x double> %cvt, <16 x double> undef, <2 x i32> <i32 0, i32 1>310  ret <2 x double> %shuf311}312 313define <4 x double> @sitofp_4i64_to_4f64(<4 x i64> %a) {314; SSE2-LABEL: sitofp_4i64_to_4f64:315; SSE2:       # %bb.0:316; SSE2-NEXT:    movq %xmm0, %rax317; SSE2-NEXT:    cvtsi2sd %rax, %xmm2318; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]319; SSE2-NEXT:    movq %xmm0, %rax320; SSE2-NEXT:    xorps %xmm0, %xmm0321; SSE2-NEXT:    cvtsi2sd %rax, %xmm0322; SSE2-NEXT:    unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm0[0]323; SSE2-NEXT:    movq %xmm1, %rax324; SSE2-NEXT:    cvtsi2sd %rax, %xmm3325; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]326; SSE2-NEXT:    movq %xmm0, %rax327; SSE2-NEXT:    xorps %xmm0, %xmm0328; SSE2-NEXT:    cvtsi2sd %rax, %xmm0329; SSE2-NEXT:    unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm0[0]330; SSE2-NEXT:    movapd %xmm2, %xmm0331; SSE2-NEXT:    movapd %xmm3, %xmm1332; SSE2-NEXT:    retq333;334; SSE41-LABEL: sitofp_4i64_to_4f64:335; SSE41:       # %bb.0:336; SSE41-NEXT:    pextrq $1, %xmm0, %rax337; SSE41-NEXT:    cvtsi2sd %rax, %xmm2338; SSE41-NEXT:    movq %xmm0, %rax339; SSE41-NEXT:    xorps %xmm0, %xmm0340; SSE41-NEXT:    cvtsi2sd %rax, %xmm0341; SSE41-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]342; SSE41-NEXT:    pextrq $1, %xmm1, %rax343; SSE41-NEXT:    xorps %xmm2, %xmm2344; SSE41-NEXT:    cvtsi2sd %rax, %xmm2345; SSE41-NEXT:    movq %xmm1, %rax346; SSE41-NEXT:    xorps %xmm1, %xmm1347; SSE41-NEXT:    cvtsi2sd %rax, %xmm1348; SSE41-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]349; SSE41-NEXT:    retq350;351; AVX1-LABEL: sitofp_4i64_to_4f64:352; AVX1:       # %bb.0:353; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1354; AVX1-NEXT:    vpextrq $1, %xmm1, %rax355; AVX1-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2356; AVX1-NEXT:    vmovq %xmm1, %rax357; AVX1-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1358; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]359; AVX1-NEXT:    vpextrq $1, %xmm0, %rax360; AVX1-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2361; AVX1-NEXT:    vmovq %xmm0, %rax362; AVX1-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0363; AVX1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]364; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0365; AVX1-NEXT:    retq366;367; AVX2-LABEL: sitofp_4i64_to_4f64:368; AVX2:       # %bb.0:369; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1370; AVX2-NEXT:    vpextrq $1, %xmm1, %rax371; AVX2-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2372; AVX2-NEXT:    vmovq %xmm1, %rax373; AVX2-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1374; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]375; AVX2-NEXT:    vpextrq $1, %xmm0, %rax376; AVX2-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2377; AVX2-NEXT:    vmovq %xmm0, %rax378; AVX2-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0379; AVX2-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]380; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0381; AVX2-NEXT:    retq382;383; AVX512F-LABEL: sitofp_4i64_to_4f64:384; AVX512F:       # %bb.0:385; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1386; AVX512F-NEXT:    vpextrq $1, %xmm1, %rax387; AVX512F-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2388; AVX512F-NEXT:    vmovq %xmm1, %rax389; AVX512F-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1390; AVX512F-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]391; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax392; AVX512F-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2393; AVX512F-NEXT:    vmovq %xmm0, %rax394; AVX512F-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0395; AVX512F-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]396; AVX512F-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0397; AVX512F-NEXT:    retq398;399; AVX512VL-LABEL: sitofp_4i64_to_4f64:400; AVX512VL:       # %bb.0:401; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1402; AVX512VL-NEXT:    vpextrq $1, %xmm1, %rax403; AVX512VL-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2404; AVX512VL-NEXT:    vmovq %xmm1, %rax405; AVX512VL-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm1406; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]407; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax408; AVX512VL-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm2409; AVX512VL-NEXT:    vmovq %xmm0, %rax410; AVX512VL-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm0411; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]412; AVX512VL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0413; AVX512VL-NEXT:    retq414;415; AVX512DQ-LABEL: sitofp_4i64_to_4f64:416; AVX512DQ:       # %bb.0:417; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0418; AVX512DQ-NEXT:    vcvtqq2pd %zmm0, %zmm0419; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0420; AVX512DQ-NEXT:    retq421;422; AVX512VLDQ-LABEL: sitofp_4i64_to_4f64:423; AVX512VLDQ:       # %bb.0:424; AVX512VLDQ-NEXT:    vcvtqq2pd %ymm0, %ymm0425; AVX512VLDQ-NEXT:    retq426  %cvt = sitofp <4 x i64> %a to <4 x double>427  ret <4 x double> %cvt428}429 430define <4 x double> @sitofp_4i32_to_4f64(<4 x i32> %a) {431; SSE-LABEL: sitofp_4i32_to_4f64:432; SSE:       # %bb.0:433; SSE-NEXT:    cvtdq2pd %xmm0, %xmm2434; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]435; SSE-NEXT:    cvtdq2pd %xmm0, %xmm1436; SSE-NEXT:    movaps %xmm2, %xmm0437; SSE-NEXT:    retq438;439; AVX-LABEL: sitofp_4i32_to_4f64:440; AVX:       # %bb.0:441; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm0442; AVX-NEXT:    retq443  %cvt = sitofp <4 x i32> %a to <4 x double>444  ret <4 x double> %cvt445}446 447define <4 x double> @sitofp_4i16_to_4f64(<8 x i16> %a) {448; SSE2-LABEL: sitofp_4i16_to_4f64:449; SSE2:       # %bb.0:450; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]451; SSE2-NEXT:    psrad $16, %xmm1452; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm0453; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]454; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm1455; SSE2-NEXT:    retq456;457; SSE41-LABEL: sitofp_4i16_to_4f64:458; SSE41:       # %bb.0:459; SSE41-NEXT:    pmovsxwd %xmm0, %xmm1460; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm0461; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]462; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm1463; SSE41-NEXT:    retq464;465; AVX-LABEL: sitofp_4i16_to_4f64:466; AVX:       # %bb.0:467; AVX-NEXT:    vpmovsxwd %xmm0, %xmm0468; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm0469; AVX-NEXT:    retq470  %shuf = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>471  %cvt = sitofp <4 x i16> %shuf to <4 x double>472  ret <4 x double> %cvt473}474 475define <4 x double> @sitofp_8i16_to_4f64(<8 x i16> %a) {476; SSE2-LABEL: sitofp_8i16_to_4f64:477; SSE2:       # %bb.0:478; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]479; SSE2-NEXT:    psrad $16, %xmm1480; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm0481; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]482; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm1483; SSE2-NEXT:    retq484;485; SSE41-LABEL: sitofp_8i16_to_4f64:486; SSE41:       # %bb.0:487; SSE41-NEXT:    pmovsxwd %xmm0, %xmm1488; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm0489; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]490; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm1491; SSE41-NEXT:    retq492;493; VEX-LABEL: sitofp_8i16_to_4f64:494; VEX:       # %bb.0:495; VEX-NEXT:    vpmovsxwd %xmm0, %xmm0496; VEX-NEXT:    vcvtdq2pd %xmm0, %ymm0497; VEX-NEXT:    retq498;499; AVX512-LABEL: sitofp_8i16_to_4f64:500; AVX512:       # %bb.0:501; AVX512-NEXT:    vpmovsxwd %xmm0, %ymm0502; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm0503; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0504; AVX512-NEXT:    retq505  %cvt = sitofp <8 x i16> %a to <8 x double>506  %shuf = shufflevector <8 x double> %cvt, <8 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>507  ret <4 x double> %shuf508}509 510define <4 x double> @sitofp_4i8_to_4f64(<16 x i8> %a) {511; SSE2-LABEL: sitofp_4i8_to_4f64:512; SSE2:       # %bb.0:513; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]514; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]515; SSE2-NEXT:    psrad $24, %xmm1516; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm0517; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]518; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm1519; SSE2-NEXT:    retq520;521; SSE41-LABEL: sitofp_4i8_to_4f64:522; SSE41:       # %bb.0:523; SSE41-NEXT:    pmovsxbd %xmm0, %xmm1524; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm0525; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]526; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm1527; SSE41-NEXT:    retq528;529; AVX-LABEL: sitofp_4i8_to_4f64:530; AVX:       # %bb.0:531; AVX-NEXT:    vpmovsxbd %xmm0, %xmm0532; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm0533; AVX-NEXT:    retq534  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>535  %cvt = sitofp <4 x i8> %shuf to <4 x double>536  ret <4 x double> %cvt537}538 539define <4 x double> @sitofp_16i8_to_4f64(<16 x i8> %a) {540; SSE2-LABEL: sitofp_16i8_to_4f64:541; SSE2:       # %bb.0:542; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]543; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]544; SSE2-NEXT:    psrad $24, %xmm1545; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm0546; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]547; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm1548; SSE2-NEXT:    retq549;550; SSE41-LABEL: sitofp_16i8_to_4f64:551; SSE41:       # %bb.0:552; SSE41-NEXT:    pmovsxbd %xmm0, %xmm1553; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm0554; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]555; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm1556; SSE41-NEXT:    retq557;558; VEX-LABEL: sitofp_16i8_to_4f64:559; VEX:       # %bb.0:560; VEX-NEXT:    vpmovsxbd %xmm0, %xmm0561; VEX-NEXT:    vcvtdq2pd %xmm0, %ymm0562; VEX-NEXT:    retq563;564; AVX512-LABEL: sitofp_16i8_to_4f64:565; AVX512:       # %bb.0:566; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0567; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm0568; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0569; AVX512-NEXT:    retq570  %cvt = sitofp <16 x i8> %a to <16 x double>571  %shuf = shufflevector <16 x double> %cvt, <16 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>572  ret <4 x double> %shuf573}574 575;576; Unsigned Integer to Double577;578 579define <2 x double> @uitofp_2i64_to_2f64(<2 x i64> %a) {580; SSE2-LABEL: uitofp_2i64_to_2f64:581; SSE2:       # %bb.0:582; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [4294967295,4294967295]583; SSE2-NEXT:    pand %xmm0, %xmm1584; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1585; SSE2-NEXT:    psrlq $32, %xmm0586; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0587; SSE2-NEXT:    subpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0588; SSE2-NEXT:    addpd %xmm1, %xmm0589; SSE2-NEXT:    retq590;591; SSE41-LABEL: uitofp_2i64_to_2f64:592; SSE41:       # %bb.0:593; SSE41-NEXT:    pxor %xmm1, %xmm1594; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]595; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1596; SSE41-NEXT:    psrlq $32, %xmm0597; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0598; SSE41-NEXT:    subpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0599; SSE41-NEXT:    addpd %xmm1, %xmm0600; SSE41-NEXT:    retq601;602; AVX1-LABEL: uitofp_2i64_to_2f64:603; AVX1:       # %bb.0:604; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1605; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]606; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1607; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0608; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0609; AVX1-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0610; AVX1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0611; AVX1-NEXT:    retq612;613; AVX2-LABEL: uitofp_2i64_to_2f64:614; AVX2:       # %bb.0:615; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1616; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]617; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1618; AVX2-NEXT:    vpsrlq $32, %xmm0, %xmm0619; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0620; AVX2-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0621; AVX2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0622; AVX2-NEXT:    retq623;624; AVX512F-LABEL: uitofp_2i64_to_2f64:625; AVX512F:       # %bb.0:626; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1627; AVX512F-NEXT:    vpblendd {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]628; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1629; AVX512F-NEXT:    vpsrlq $32, %xmm0, %xmm0630; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0631; AVX512F-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0632; AVX512F-NEXT:    vaddpd %xmm0, %xmm1, %xmm0633; AVX512F-NEXT:    retq634;635; AVX512VL-LABEL: uitofp_2i64_to_2f64:636; AVX512VL:       # %bb.0:637; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1638; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]639; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm1640; AVX512VL-NEXT:    vpsrlq $32, %xmm0, %xmm0641; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0642; AVX512VL-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0643; AVX512VL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0644; AVX512VL-NEXT:    retq645;646; AVX512DQ-LABEL: uitofp_2i64_to_2f64:647; AVX512DQ:       # %bb.0:648; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0649; AVX512DQ-NEXT:    vcvtuqq2pd %zmm0, %zmm0650; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0651; AVX512DQ-NEXT:    vzeroupper652; AVX512DQ-NEXT:    retq653;654; AVX512VLDQ-LABEL: uitofp_2i64_to_2f64:655; AVX512VLDQ:       # %bb.0:656; AVX512VLDQ-NEXT:    vcvtuqq2pd %xmm0, %xmm0657; AVX512VLDQ-NEXT:    retq658  %cvt = uitofp <2 x i64> %a to <2 x double>659  ret <2 x double> %cvt660}661 662define <2 x double> @uitofp_2i32_to_2f64(<4 x i32> %a) {663; SSE2-LABEL: uitofp_2i32_to_2f64:664; SSE2:       # %bb.0:665; SSE2-NEXT:    xorpd %xmm1, %xmm1666; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]667; SSE2-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]668; SSE2-NEXT:    orpd %xmm1, %xmm0669; SSE2-NEXT:    subpd %xmm1, %xmm0670; SSE2-NEXT:    retq671;672; SSE41-LABEL: uitofp_2i32_to_2f64:673; SSE41:       # %bb.0:674; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero675; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]676; SSE41-NEXT:    por %xmm1, %xmm0677; SSE41-NEXT:    subpd %xmm1, %xmm0678; SSE41-NEXT:    retq679;680; AVX1-LABEL: uitofp_2i32_to_2f64:681; AVX1:       # %bb.0:682; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero683; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]684; AVX1-NEXT:    # xmm1 = mem[0,0]685; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0686; AVX1-NEXT:    vsubpd %xmm1, %xmm0, %xmm0687; AVX1-NEXT:    retq688;689; AVX2-LABEL: uitofp_2i32_to_2f64:690; AVX2:       # %bb.0:691; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero692; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]693; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0694; AVX2-NEXT:    vsubpd %xmm1, %xmm0, %xmm0695; AVX2-NEXT:    retq696;697; AVX512F-LABEL: uitofp_2i32_to_2f64:698; AVX512F:       # %bb.0:699; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0700; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm0701; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0702; AVX512F-NEXT:    vzeroupper703; AVX512F-NEXT:    retq704;705; AVX512VL-LABEL: uitofp_2i32_to_2f64:706; AVX512VL:       # %bb.0:707; AVX512VL-NEXT:    vcvtudq2pd %xmm0, %xmm0708; AVX512VL-NEXT:    retq709;710; AVX512DQ-LABEL: uitofp_2i32_to_2f64:711; AVX512DQ:       # %bb.0:712; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0713; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm0714; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0715; AVX512DQ-NEXT:    vzeroupper716; AVX512DQ-NEXT:    retq717;718; AVX512VLDQ-LABEL: uitofp_2i32_to_2f64:719; AVX512VLDQ:       # %bb.0:720; AVX512VLDQ-NEXT:    vcvtudq2pd %xmm0, %xmm0721; AVX512VLDQ-NEXT:    retq722  %shuf = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 0, i32 1>723  %cvt = uitofp <2 x i32> %shuf to <2 x double>724  ret <2 x double> %cvt725}726 727define <2 x double> @uitofp_4i32_to_2f64(<4 x i32> %a) {728; SSE2-LABEL: uitofp_4i32_to_2f64:729; SSE2:       # %bb.0:730; SSE2-NEXT:    xorpd %xmm1, %xmm1731; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]732; SSE2-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]733; SSE2-NEXT:    orpd %xmm1, %xmm0734; SSE2-NEXT:    subpd %xmm1, %xmm0735; SSE2-NEXT:    retq736;737; SSE41-LABEL: uitofp_4i32_to_2f64:738; SSE41:       # %bb.0:739; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero740; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]741; SSE41-NEXT:    por %xmm1, %xmm0742; SSE41-NEXT:    subpd %xmm1, %xmm0743; SSE41-NEXT:    retq744;745; AVX1-LABEL: uitofp_4i32_to_2f64:746; AVX1:       # %bb.0:747; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero748; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]749; AVX1-NEXT:    # xmm1 = mem[0,0]750; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0751; AVX1-NEXT:    vsubpd %xmm1, %xmm0, %xmm0752; AVX1-NEXT:    retq753;754; AVX2-LABEL: uitofp_4i32_to_2f64:755; AVX2:       # %bb.0:756; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]757; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero758; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0759; AVX2-NEXT:    vsubpd %xmm1, %xmm0, %xmm0760; AVX2-NEXT:    retq761;762; AVX512F-LABEL: uitofp_4i32_to_2f64:763; AVX512F:       # %bb.0:764; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0765; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm0766; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0767; AVX512F-NEXT:    vzeroupper768; AVX512F-NEXT:    retq769;770; AVX512VL-LABEL: uitofp_4i32_to_2f64:771; AVX512VL:       # %bb.0:772; AVX512VL-NEXT:    vcvtudq2pd %xmm0, %xmm0773; AVX512VL-NEXT:    retq774;775; AVX512DQ-LABEL: uitofp_4i32_to_2f64:776; AVX512DQ:       # %bb.0:777; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0778; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm0779; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0780; AVX512DQ-NEXT:    vzeroupper781; AVX512DQ-NEXT:    retq782;783; AVX512VLDQ-LABEL: uitofp_4i32_to_2f64:784; AVX512VLDQ:       # %bb.0:785; AVX512VLDQ-NEXT:    vcvtudq2pd %xmm0, %xmm0786; AVX512VLDQ-NEXT:    retq787  %cvt = uitofp <4 x i32> %a to <4 x double>788  %shuf = shufflevector <4 x double> %cvt, <4 x double> undef, <2 x i32> <i32 0, i32 1>789  ret <2 x double> %shuf790}791 792define <2 x double> @uitofp_2i16_to_2f64(<8 x i16> %a) {793; SSE2-LABEL: uitofp_2i16_to_2f64:794; SSE2:       # %bb.0:795; SSE2-NEXT:    pxor %xmm1, %xmm1796; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]797; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0798; SSE2-NEXT:    retq799;800; SSE41-LABEL: uitofp_2i16_to_2f64:801; SSE41:       # %bb.0:802; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero803; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0804; SSE41-NEXT:    retq805;806; AVX-LABEL: uitofp_2i16_to_2f64:807; AVX:       # %bb.0:808; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero809; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm0810; AVX-NEXT:    retq811  %shuf = shufflevector <8 x i16> %a, <8 x i16> undef, <2 x i32> <i32 0, i32 1>812  %cvt = uitofp <2 x i16> %shuf to <2 x double>813  ret <2 x double> %cvt814}815 816define <2 x double> @uitofp_8i16_to_2f64(<8 x i16> %a) {817; SSE2-LABEL: uitofp_8i16_to_2f64:818; SSE2:       # %bb.0:819; SSE2-NEXT:    pxor %xmm1, %xmm1820; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]821; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0822; SSE2-NEXT:    retq823;824; SSE41-LABEL: uitofp_8i16_to_2f64:825; SSE41:       # %bb.0:826; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero827; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0828; SSE41-NEXT:    retq829;830; VEX-LABEL: uitofp_8i16_to_2f64:831; VEX:       # %bb.0:832; VEX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero833; VEX-NEXT:    vcvtdq2pd %xmm0, %xmm0834; VEX-NEXT:    retq835;836; AVX512-LABEL: uitofp_8i16_to_2f64:837; AVX512:       # %bb.0:838; AVX512-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],zero839; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm0840; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0841; AVX512-NEXT:    vzeroupper842; AVX512-NEXT:    retq843  %cvt = uitofp <8 x i16> %a to <8 x double>844  %shuf = shufflevector <8 x double> %cvt, <8 x double> undef, <2 x i32> <i32 0, i32 1>845  ret <2 x double> %shuf846}847 848define <2 x double> @uitofp_2i8_to_2f64(<16 x i8> %a) {849; SSE2-LABEL: uitofp_2i8_to_2f64:850; SSE2:       # %bb.0:851; SSE2-NEXT:    pxor %xmm1, %xmm1852; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]853; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]854; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0855; SSE2-NEXT:    retq856;857; SSE41-LABEL: uitofp_2i8_to_2f64:858; SSE41:       # %bb.0:859; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero860; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0861; SSE41-NEXT:    retq862;863; AVX-LABEL: uitofp_2i8_to_2f64:864; AVX:       # %bb.0:865; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero866; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm0867; AVX-NEXT:    retq868  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <2 x i32> <i32 0, i32 1>869  %cvt = uitofp <2 x i8> %shuf to <2 x double>870  ret <2 x double> %cvt871}872 873define <2 x double> @uitofp_16i8_to_2f64(<16 x i8> %a) {874; SSE2-LABEL: uitofp_16i8_to_2f64:875; SSE2:       # %bb.0:876; SSE2-NEXT:    pxor %xmm1, %xmm1877; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]878; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]879; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm0880; SSE2-NEXT:    retq881;882; SSE41-LABEL: uitofp_16i8_to_2f64:883; SSE41:       # %bb.0:884; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero885; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm0886; SSE41-NEXT:    retq887;888; VEX-LABEL: uitofp_16i8_to_2f64:889; VEX:       # %bb.0:890; VEX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero891; VEX-NEXT:    vcvtdq2pd %xmm0, %xmm0892; VEX-NEXT:    retq893;894; AVX512-LABEL: uitofp_16i8_to_2f64:895; AVX512:       # %bb.0:896; AVX512-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,zero897; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm0898; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0899; AVX512-NEXT:    vzeroupper900; AVX512-NEXT:    retq901  %cvt = uitofp <16 x i8> %a to <16 x double>902  %shuf = shufflevector <16 x double> %cvt, <16 x double> undef, <2 x i32> <i32 0, i32 1>903  ret <2 x double> %shuf904}905 906define <4 x double> @uitofp_4i64_to_4f64(<4 x i64> %a) {907; SSE2-LABEL: uitofp_4i64_to_4f64:908; SSE2:       # %bb.0:909; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [4294967295,4294967295]910; SSE2-NEXT:    movdqa %xmm0, %xmm3911; SSE2-NEXT:    pand %xmm2, %xmm3912; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]913; SSE2-NEXT:    por %xmm4, %xmm3914; SSE2-NEXT:    psrlq $32, %xmm0915; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]916; SSE2-NEXT:    por %xmm5, %xmm0917; SSE2-NEXT:    movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]918; SSE2-NEXT:    subpd %xmm6, %xmm0919; SSE2-NEXT:    addpd %xmm3, %xmm0920; SSE2-NEXT:    pand %xmm1, %xmm2921; SSE2-NEXT:    por %xmm4, %xmm2922; SSE2-NEXT:    psrlq $32, %xmm1923; SSE2-NEXT:    por %xmm5, %xmm1924; SSE2-NEXT:    subpd %xmm6, %xmm1925; SSE2-NEXT:    addpd %xmm2, %xmm1926; SSE2-NEXT:    retq927;928; SSE41-LABEL: uitofp_4i64_to_4f64:929; SSE41:       # %bb.0:930; SSE41-NEXT:    pxor %xmm2, %xmm2931; SSE41-NEXT:    movdqa %xmm0, %xmm3932; SSE41-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm2[2,3],xmm3[4,5],xmm2[6,7]933; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]934; SSE41-NEXT:    por %xmm4, %xmm3935; SSE41-NEXT:    psrlq $32, %xmm0936; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]937; SSE41-NEXT:    por %xmm5, %xmm0938; SSE41-NEXT:    movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]939; SSE41-NEXT:    subpd %xmm6, %xmm0940; SSE41-NEXT:    addpd %xmm3, %xmm0941; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]942; SSE41-NEXT:    por %xmm4, %xmm2943; SSE41-NEXT:    psrlq $32, %xmm1944; SSE41-NEXT:    por %xmm5, %xmm1945; SSE41-NEXT:    subpd %xmm6, %xmm1946; SSE41-NEXT:    addpd %xmm2, %xmm1947; SSE41-NEXT:    retq948;949; AVX1-LABEL: uitofp_4i64_to_4f64:950; AVX1:       # %bb.0:951; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1952; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]953; AVX1-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2954; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]955; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]956; AVX1-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0957; AVX1-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0958; AVX1-NEXT:    vaddpd %ymm0, %ymm2, %ymm0959; AVX1-NEXT:    retq960;961; AVX2-LABEL: uitofp_4i64_to_4f64:962; AVX2:       # %bb.0:963; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1964; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]965; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200]966; AVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1967; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0968; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072]969; AVX2-NEXT:    vpor %ymm2, %ymm0, %ymm0970; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25]971; AVX2-NEXT:    vsubpd %ymm2, %ymm0, %ymm0972; AVX2-NEXT:    vaddpd %ymm0, %ymm1, %ymm0973; AVX2-NEXT:    retq974;975; AVX512F-LABEL: uitofp_4i64_to_4f64:976; AVX512F:       # %bb.0:977; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1978; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]979; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200]980; AVX512F-NEXT:    vpor %ymm2, %ymm1, %ymm1981; AVX512F-NEXT:    vpsrlq $32, %ymm0, %ymm0982; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072]983; AVX512F-NEXT:    vpor %ymm2, %ymm0, %ymm0984; AVX512F-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25]985; AVX512F-NEXT:    vsubpd %ymm2, %ymm0, %ymm0986; AVX512F-NEXT:    vaddpd %ymm0, %ymm1, %ymm0987; AVX512F-NEXT:    retq988;989; AVX512VL-LABEL: uitofp_4i64_to_4f64:990; AVX512VL:       # %bb.0:991; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1992; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]993; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm1994; AVX512VL-NEXT:    vpsrlq $32, %ymm0, %ymm0995; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0996; AVX512VL-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0997; AVX512VL-NEXT:    vaddpd %ymm0, %ymm1, %ymm0998; AVX512VL-NEXT:    retq999;1000; AVX512DQ-LABEL: uitofp_4i64_to_4f64:1001; AVX512DQ:       # %bb.0:1002; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01003; AVX512DQ-NEXT:    vcvtuqq2pd %zmm0, %zmm01004; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01005; AVX512DQ-NEXT:    retq1006;1007; AVX512VLDQ-LABEL: uitofp_4i64_to_4f64:1008; AVX512VLDQ:       # %bb.0:1009; AVX512VLDQ-NEXT:    vcvtuqq2pd %ymm0, %ymm01010; AVX512VLDQ-NEXT:    retq1011  %cvt = uitofp <4 x i64> %a to <4 x double>1012  ret <4 x double> %cvt1013}1014 1015define <4 x double> @uitofp_4i32_to_4f64(<4 x i32> %a) {1016; SSE2-LABEL: uitofp_4i32_to_4f64:1017; SSE2:       # %bb.0:1018; SSE2-NEXT:    movapd %xmm0, %xmm11019; SSE2-NEXT:    xorpd %xmm2, %xmm21020; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]1021; SSE2-NEXT:    movapd {{.*#+}} xmm3 = [4.503599627370496E+15,4.503599627370496E+15]1022; SSE2-NEXT:    orpd %xmm3, %xmm01023; SSE2-NEXT:    subpd %xmm3, %xmm01024; SSE2-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]1025; SSE2-NEXT:    orpd %xmm3, %xmm11026; SSE2-NEXT:    subpd %xmm3, %xmm11027; SSE2-NEXT:    retq1028;1029; SSE41-LABEL: uitofp_4i32_to_4f64:1030; SSE41:       # %bb.0:1031; SSE41-NEXT:    movdqa %xmm0, %xmm11032; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero1033; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [4.503599627370496E+15,4.503599627370496E+15]1034; SSE41-NEXT:    por %xmm2, %xmm01035; SSE41-NEXT:    subpd %xmm2, %xmm01036; SSE41-NEXT:    pxor %xmm3, %xmm31037; SSE41-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]1038; SSE41-NEXT:    por %xmm2, %xmm11039; SSE41-NEXT:    subpd %xmm2, %xmm11040; SSE41-NEXT:    retq1041;1042; AVX1-LABEL: uitofp_4i32_to_4f64:1043; AVX1:       # %bb.0:1044; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm11045; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1046; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero1047; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01048; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15]1049; AVX1-NEXT:    vorpd %ymm1, %ymm0, %ymm01050; AVX1-NEXT:    vsubpd %ymm1, %ymm0, %ymm01051; AVX1-NEXT:    retq1052;1053; AVX2-LABEL: uitofp_4i32_to_4f64:1054; AVX2:       # %bb.0:1055; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1056; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15]1057; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm01058; AVX2-NEXT:    vsubpd %ymm1, %ymm0, %ymm01059; AVX2-NEXT:    retq1060;1061; AVX512F-LABEL: uitofp_4i32_to_4f64:1062; AVX512F:       # %bb.0:1063; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01064; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm01065; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01066; AVX512F-NEXT:    retq1067;1068; AVX512VL-LABEL: uitofp_4i32_to_4f64:1069; AVX512VL:       # %bb.0:1070; AVX512VL-NEXT:    vcvtudq2pd %xmm0, %ymm01071; AVX512VL-NEXT:    retq1072;1073; AVX512DQ-LABEL: uitofp_4i32_to_4f64:1074; AVX512DQ:       # %bb.0:1075; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01076; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm01077; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01078; AVX512DQ-NEXT:    retq1079;1080; AVX512VLDQ-LABEL: uitofp_4i32_to_4f64:1081; AVX512VLDQ:       # %bb.0:1082; AVX512VLDQ-NEXT:    vcvtudq2pd %xmm0, %ymm01083; AVX512VLDQ-NEXT:    retq1084  %cvt = uitofp <4 x i32> %a to <4 x double>1085  ret <4 x double> %cvt1086}1087 1088define <4 x double> @uitofp_4i16_to_4f64(<8 x i16> %a) {1089; SSE2-LABEL: uitofp_4i16_to_4f64:1090; SSE2:       # %bb.0:1091; SSE2-NEXT:    pxor %xmm1, %xmm11092; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1093; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm21094; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1095; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm11096; SSE2-NEXT:    movaps %xmm2, %xmm01097; SSE2-NEXT:    retq1098;1099; SSE41-LABEL: uitofp_4i16_to_4f64:1100; SSE41:       # %bb.0:1101; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1102; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm01103; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1104; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm11105; SSE41-NEXT:    retq1106;1107; AVX-LABEL: uitofp_4i16_to_4f64:1108; AVX:       # %bb.0:1109; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1110; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm01111; AVX-NEXT:    retq1112  %shuf = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1113  %cvt = uitofp <4 x i16> %shuf to <4 x double>1114  ret <4 x double> %cvt1115}1116 1117define <4 x double> @uitofp_8i16_to_4f64(<8 x i16> %a) {1118; SSE2-LABEL: uitofp_8i16_to_4f64:1119; SSE2:       # %bb.0:1120; SSE2-NEXT:    pxor %xmm1, %xmm11121; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1122; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm21123; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1124; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm11125; SSE2-NEXT:    movaps %xmm2, %xmm01126; SSE2-NEXT:    retq1127;1128; SSE41-LABEL: uitofp_8i16_to_4f64:1129; SSE41:       # %bb.0:1130; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1131; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm01132; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1133; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm11134; SSE41-NEXT:    retq1135;1136; VEX-LABEL: uitofp_8i16_to_4f64:1137; VEX:       # %bb.0:1138; VEX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1139; VEX-NEXT:    vcvtdq2pd %xmm0, %ymm01140; VEX-NEXT:    retq1141;1142; AVX512-LABEL: uitofp_8i16_to_4f64:1143; AVX512:       # %bb.0:1144; AVX512-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],zero1145; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm01146; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01147; AVX512-NEXT:    retq1148  %cvt = uitofp <8 x i16> %a to <8 x double>1149  %shuf = shufflevector <8 x double> %cvt, <8 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1150  ret <4 x double> %shuf1151}1152 1153define <4 x double> @uitofp_4i8_to_4f64(<16 x i8> %a) {1154; SSE2-LABEL: uitofp_4i8_to_4f64:1155; SSE2:       # %bb.0:1156; SSE2-NEXT:    pxor %xmm1, %xmm11157; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1158; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1159; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm21160; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1161; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm11162; SSE2-NEXT:    movaps %xmm2, %xmm01163; SSE2-NEXT:    retq1164;1165; SSE41-LABEL: uitofp_4i8_to_4f64:1166; SSE41:       # %bb.0:1167; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1168; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm01169; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1170; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm11171; SSE41-NEXT:    retq1172;1173; AVX-LABEL: uitofp_4i8_to_4f64:1174; AVX:       # %bb.0:1175; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1176; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm01177; AVX-NEXT:    retq1178  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1179  %cvt = uitofp <4 x i8> %shuf to <4 x double>1180  ret <4 x double> %cvt1181}1182 1183define <4 x double> @uitofp_16i8_to_4f64(<16 x i8> %a) {1184; SSE2-LABEL: uitofp_16i8_to_4f64:1185; SSE2:       # %bb.0:1186; SSE2-NEXT:    pxor %xmm1, %xmm11187; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1188; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1189; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm21190; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1191; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm11192; SSE2-NEXT:    movaps %xmm2, %xmm01193; SSE2-NEXT:    retq1194;1195; SSE41-LABEL: uitofp_16i8_to_4f64:1196; SSE41:       # %bb.0:1197; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1198; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm01199; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1200; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm11201; SSE41-NEXT:    retq1202;1203; VEX-LABEL: uitofp_16i8_to_4f64:1204; VEX:       # %bb.0:1205; VEX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1206; VEX-NEXT:    vcvtdq2pd %xmm0, %ymm01207; VEX-NEXT:    retq1208;1209; AVX512-LABEL: uitofp_16i8_to_4f64:1210; AVX512:       # %bb.0:1211; AVX512-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,zero1212; AVX512-NEXT:    vcvtdq2pd %ymm0, %zmm01213; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01214; AVX512-NEXT:    retq1215  %cvt = uitofp <16 x i8> %a to <16 x double>1216  %shuf = shufflevector <16 x double> %cvt, <16 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1217  ret <4 x double> %shuf1218}1219 1220;1221; Signed Integer to Float1222;1223 1224define <4 x float> @sitofp_2i64_to_4f32(<2 x i64> %a) {1225; SSE2-LABEL: sitofp_2i64_to_4f32:1226; SSE2:       # %bb.0:1227; SSE2-NEXT:    movq %xmm0, %rax1228; SSE2-NEXT:    cvtsi2ss %rax, %xmm11229; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1230; SSE2-NEXT:    movq %xmm0, %rax1231; SSE2-NEXT:    xorps %xmm0, %xmm01232; SSE2-NEXT:    cvtsi2ss %rax, %xmm01233; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1234; SSE2-NEXT:    movaps %xmm1, %xmm01235; SSE2-NEXT:    retq1236;1237; SSE41-LABEL: sitofp_2i64_to_4f32:1238; SSE41:       # %bb.0:1239; SSE41-NEXT:    pextrq $1, %xmm0, %rax1240; SSE41-NEXT:    cvtsi2ss %rax, %xmm11241; SSE41-NEXT:    movq %xmm0, %rax1242; SSE41-NEXT:    xorps %xmm0, %xmm01243; SSE41-NEXT:    cvtsi2ss %rax, %xmm01244; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]1245; SSE41-NEXT:    retq1246;1247; VEX-LABEL: sitofp_2i64_to_4f32:1248; VEX:       # %bb.0:1249; VEX-NEXT:    vpextrq $1, %xmm0, %rax1250; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11251; VEX-NEXT:    vmovq %xmm0, %rax1252; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01253; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1254; VEX-NEXT:    retq1255;1256; AVX512F-LABEL: sitofp_2i64_to_4f32:1257; AVX512F:       # %bb.0:1258; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax1259; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11260; AVX512F-NEXT:    vmovq %xmm0, %rax1261; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01262; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1263; AVX512F-NEXT:    retq1264;1265; AVX512VL-LABEL: sitofp_2i64_to_4f32:1266; AVX512VL:       # %bb.0:1267; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax1268; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11269; AVX512VL-NEXT:    vmovq %xmm0, %rax1270; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01271; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1272; AVX512VL-NEXT:    retq1273;1274; AVX512DQ-LABEL: sitofp_2i64_to_4f32:1275; AVX512DQ:       # %bb.0:1276; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01277; AVX512DQ-NEXT:    vcvtqq2ps %zmm0, %ymm01278; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01279; AVX512DQ-NEXT:    vzeroupper1280; AVX512DQ-NEXT:    retq1281;1282; AVX512VLDQ-LABEL: sitofp_2i64_to_4f32:1283; AVX512VLDQ:       # %bb.0:1284; AVX512VLDQ-NEXT:    vcvtqq2ps %xmm0, %xmm01285; AVX512VLDQ-NEXT:    retq1286  %cvt = sitofp <2 x i64> %a to <2 x float>1287  %ext = shufflevector <2 x float> %cvt, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>1288  ret <4 x float> %ext1289}1290 1291define <4 x float> @sitofp_2i64_to_4f32_zero(<2 x i64> %a) {1292; SSE2-LABEL: sitofp_2i64_to_4f32_zero:1293; SSE2:       # %bb.0:1294; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1295; SSE2-NEXT:    movq %xmm1, %rax1296; SSE2-NEXT:    xorps %xmm1, %xmm11297; SSE2-NEXT:    cvtsi2ss %rax, %xmm11298; SSE2-NEXT:    movq %xmm0, %rax1299; SSE2-NEXT:    xorps %xmm0, %xmm01300; SSE2-NEXT:    cvtsi2ss %rax, %xmm01301; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1302; SSE2-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero1303; SSE2-NEXT:    retq1304;1305; SSE41-LABEL: sitofp_2i64_to_4f32_zero:1306; SSE41:       # %bb.0:1307; SSE41-NEXT:    movq %xmm0, %rax1308; SSE41-NEXT:    cvtsi2ss %rax, %xmm11309; SSE41-NEXT:    pextrq $1, %xmm0, %rax1310; SSE41-NEXT:    xorps %xmm0, %xmm01311; SSE41-NEXT:    cvtsi2ss %rax, %xmm01312; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],xmm0[0],zero,zero1313; SSE41-NEXT:    movaps %xmm1, %xmm01314; SSE41-NEXT:    retq1315;1316; VEX-LABEL: sitofp_2i64_to_4f32_zero:1317; VEX:       # %bb.0:1318; VEX-NEXT:    vmovq %xmm0, %rax1319; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11320; VEX-NEXT:    vpextrq $1, %xmm0, %rax1321; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01322; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero1323; VEX-NEXT:    retq1324;1325; AVX512F-LABEL: sitofp_2i64_to_4f32_zero:1326; AVX512F:       # %bb.0:1327; AVX512F-NEXT:    vmovq %xmm0, %rax1328; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11329; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax1330; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01331; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero1332; AVX512F-NEXT:    retq1333;1334; AVX512VL-LABEL: sitofp_2i64_to_4f32_zero:1335; AVX512VL:       # %bb.0:1336; AVX512VL-NEXT:    vmovq %xmm0, %rax1337; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11338; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax1339; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01340; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero1341; AVX512VL-NEXT:    retq1342;1343; AVX512DQ-LABEL: sitofp_2i64_to_4f32_zero:1344; AVX512DQ:       # %bb.0:1345; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01346; AVX512DQ-NEXT:    vcvtqq2ps %zmm0, %ymm01347; AVX512DQ-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero1348; AVX512DQ-NEXT:    vzeroupper1349; AVX512DQ-NEXT:    retq1350;1351; AVX512VLDQ-LABEL: sitofp_2i64_to_4f32_zero:1352; AVX512VLDQ:       # %bb.0:1353; AVX512VLDQ-NEXT:    vcvtqq2ps %xmm0, %xmm01354; AVX512VLDQ-NEXT:    retq1355  %cvt = sitofp <2 x i64> %a to <2 x float>1356  %ext = shufflevector <2 x float> %cvt, <2 x float> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1357  ret <4 x float> %ext1358}1359 1360define <4 x float> @sitofp_4i64_to_4f32_undef(<2 x i64> %a) {1361; SSE2-LABEL: sitofp_4i64_to_4f32_undef:1362; SSE2:       # %bb.0:1363; SSE2-NEXT:    movq %xmm0, %rax1364; SSE2-NEXT:    cvtsi2ss %rax, %xmm11365; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1366; SSE2-NEXT:    movq %xmm0, %rax1367; SSE2-NEXT:    xorps %xmm0, %xmm01368; SSE2-NEXT:    cvtsi2ss %rax, %xmm01369; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1370; SSE2-NEXT:    movq {{.*#+}} xmm0 = xmm1[0],zero1371; SSE2-NEXT:    retq1372;1373; SSE41-LABEL: sitofp_4i64_to_4f32_undef:1374; SSE41:       # %bb.0:1375; SSE41-NEXT:    pextrq $1, %xmm0, %rax1376; SSE41-NEXT:    cvtsi2ss %rax, %xmm11377; SSE41-NEXT:    movq %xmm0, %rax1378; SSE41-NEXT:    xorps %xmm0, %xmm01379; SSE41-NEXT:    cvtsi2ss %rax, %xmm01380; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1381; SSE41-NEXT:    retq1382;1383; VEX-LABEL: sitofp_4i64_to_4f32_undef:1384; VEX:       # %bb.0:1385; VEX-NEXT:    vpextrq $1, %xmm0, %rax1386; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11387; VEX-NEXT:    vmovq %xmm0, %rax1388; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01389; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1390; VEX-NEXT:    retq1391;1392; AVX512F-LABEL: sitofp_4i64_to_4f32_undef:1393; AVX512F:       # %bb.0:1394; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax1395; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11396; AVX512F-NEXT:    vmovq %xmm0, %rax1397; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01398; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1399; AVX512F-NEXT:    retq1400;1401; AVX512VL-LABEL: sitofp_4i64_to_4f32_undef:1402; AVX512VL:       # %bb.0:1403; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax1404; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11405; AVX512VL-NEXT:    vmovq %xmm0, %rax1406; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01407; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1408; AVX512VL-NEXT:    retq1409;1410; AVX512DQ-LABEL: sitofp_4i64_to_4f32_undef:1411; AVX512DQ:       # %bb.0:1412; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01413; AVX512DQ-NEXT:    vcvtqq2ps %zmm0, %ymm01414; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01415; AVX512DQ-NEXT:    vzeroupper1416; AVX512DQ-NEXT:    retq1417;1418; AVX512VLDQ-LABEL: sitofp_4i64_to_4f32_undef:1419; AVX512VLDQ:       # %bb.0:1420; AVX512VLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01421; AVX512VLDQ-NEXT:    vcvtqq2ps %ymm0, %xmm01422; AVX512VLDQ-NEXT:    vzeroupper1423; AVX512VLDQ-NEXT:    retq1424  %ext = shufflevector <2 x i64> %a, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>1425  %cvt = sitofp <4 x i64> %ext to <4 x float>1426  ret <4 x float> %cvt1427}1428 1429define <4 x float> @sitofp_4i32_to_4f32(<4 x i32> %a) {1430; SSE-LABEL: sitofp_4i32_to_4f32:1431; SSE:       # %bb.0:1432; SSE-NEXT:    cvtdq2ps %xmm0, %xmm01433; SSE-NEXT:    retq1434;1435; AVX-LABEL: sitofp_4i32_to_4f32:1436; AVX:       # %bb.0:1437; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm01438; AVX-NEXT:    retq1439  %cvt = sitofp <4 x i32> %a to <4 x float>1440  ret <4 x float> %cvt1441}1442 1443define <4 x float> @sitofp_4i16_to_4f32(<8 x i16> %a) {1444; SSE2-LABEL: sitofp_4i16_to_4f32:1445; SSE2:       # %bb.0:1446; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1447; SSE2-NEXT:    psrad $16, %xmm01448; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm01449; SSE2-NEXT:    retq1450;1451; SSE41-LABEL: sitofp_4i16_to_4f32:1452; SSE41:       # %bb.0:1453; SSE41-NEXT:    pmovsxwd %xmm0, %xmm01454; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm01455; SSE41-NEXT:    retq1456;1457; AVX-LABEL: sitofp_4i16_to_4f32:1458; AVX:       # %bb.0:1459; AVX-NEXT:    vpmovsxwd %xmm0, %xmm01460; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm01461; AVX-NEXT:    retq1462  %shuf = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1463  %cvt = sitofp <4 x i16> %shuf to <4 x float>1464  ret <4 x float> %cvt1465}1466 1467define <4 x float> @sitofp_8i16_to_4f32(<8 x i16> %a) {1468; SSE2-LABEL: sitofp_8i16_to_4f32:1469; SSE2:       # %bb.0:1470; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1471; SSE2-NEXT:    psrad $16, %xmm01472; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm01473; SSE2-NEXT:    retq1474;1475; SSE41-LABEL: sitofp_8i16_to_4f32:1476; SSE41:       # %bb.0:1477; SSE41-NEXT:    pmovsxwd %xmm0, %xmm01478; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm01479; SSE41-NEXT:    retq1480;1481; AVX-LABEL: sitofp_8i16_to_4f32:1482; AVX:       # %bb.0:1483; AVX-NEXT:    vpmovsxwd %xmm0, %xmm01484; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm01485; AVX-NEXT:    retq1486  %cvt = sitofp <8 x i16> %a to <8 x float>1487  %shuf = shufflevector <8 x float> %cvt, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1488  ret <4 x float> %shuf1489}1490 1491define <4 x float> @sitofp_4i8_to_4f32(<16 x i8> %a) {1492; SSE2-LABEL: sitofp_4i8_to_4f32:1493; SSE2:       # %bb.0:1494; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1495; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1496; SSE2-NEXT:    psrad $24, %xmm01497; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm01498; SSE2-NEXT:    retq1499;1500; SSE41-LABEL: sitofp_4i8_to_4f32:1501; SSE41:       # %bb.0:1502; SSE41-NEXT:    pmovsxbd %xmm0, %xmm01503; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm01504; SSE41-NEXT:    retq1505;1506; AVX-LABEL: sitofp_4i8_to_4f32:1507; AVX:       # %bb.0:1508; AVX-NEXT:    vpmovsxbd %xmm0, %xmm01509; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm01510; AVX-NEXT:    retq1511  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1512  %cvt = sitofp <4 x i8> %shuf to <4 x float>1513  ret <4 x float> %cvt1514}1515 1516define <4 x float> @sitofp_16i8_to_4f32(<16 x i8> %a) {1517; SSE2-LABEL: sitofp_16i8_to_4f32:1518; SSE2:       # %bb.0:1519; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1520; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1521; SSE2-NEXT:    psrad $24, %xmm01522; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm01523; SSE2-NEXT:    retq1524;1525; SSE41-LABEL: sitofp_16i8_to_4f32:1526; SSE41:       # %bb.0:1527; SSE41-NEXT:    pmovsxbd %xmm0, %xmm01528; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm01529; SSE41-NEXT:    retq1530;1531; AVX-LABEL: sitofp_16i8_to_4f32:1532; AVX:       # %bb.0:1533; AVX-NEXT:    vpmovsxbd %xmm0, %xmm01534; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm01535; AVX-NEXT:    retq1536  %cvt = sitofp <16 x i8> %a to <16 x float>1537  %shuf = shufflevector <16 x float> %cvt, <16 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1538  ret <4 x float> %shuf1539}1540 1541define <4 x float> @sitofp_4i64_to_4f32(<4 x i64> %a) {1542; SSE2-LABEL: sitofp_4i64_to_4f32:1543; SSE2:       # %bb.0:1544; SSE2-NEXT:    movq %xmm1, %rax1545; SSE2-NEXT:    cvtsi2ss %rax, %xmm21546; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1547; SSE2-NEXT:    movq %xmm1, %rax1548; SSE2-NEXT:    xorps %xmm1, %xmm11549; SSE2-NEXT:    cvtsi2ss %rax, %xmm11550; SSE2-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]1551; SSE2-NEXT:    movq %xmm0, %rax1552; SSE2-NEXT:    xorps %xmm1, %xmm11553; SSE2-NEXT:    cvtsi2ss %rax, %xmm11554; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1555; SSE2-NEXT:    movq %xmm0, %rax1556; SSE2-NEXT:    xorps %xmm0, %xmm01557; SSE2-NEXT:    cvtsi2ss %rax, %xmm01558; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1559; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]1560; SSE2-NEXT:    movaps %xmm1, %xmm01561; SSE2-NEXT:    retq1562;1563; SSE41-LABEL: sitofp_4i64_to_4f32:1564; SSE41:       # %bb.0:1565; SSE41-NEXT:    pextrq $1, %xmm0, %rax1566; SSE41-NEXT:    cvtsi2ss %rax, %xmm21567; SSE41-NEXT:    movq %xmm0, %rax1568; SSE41-NEXT:    xorps %xmm0, %xmm01569; SSE41-NEXT:    cvtsi2ss %rax, %xmm01570; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]1571; SSE41-NEXT:    movq %xmm1, %rax1572; SSE41-NEXT:    xorps %xmm2, %xmm21573; SSE41-NEXT:    cvtsi2ss %rax, %xmm21574; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]1575; SSE41-NEXT:    pextrq $1, %xmm1, %rax1576; SSE41-NEXT:    xorps %xmm1, %xmm11577; SSE41-NEXT:    cvtsi2ss %rax, %xmm11578; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]1579; SSE41-NEXT:    retq1580;1581; AVX1-LABEL: sitofp_4i64_to_4f32:1582; AVX1:       # %bb.0:1583; AVX1-NEXT:    vpextrq $1, %xmm0, %rax1584; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11585; AVX1-NEXT:    vmovq %xmm0, %rax1586; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21587; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]1588; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01589; AVX1-NEXT:    vmovq %xmm0, %rax1590; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21591; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]1592; AVX1-NEXT:    vpextrq $1, %xmm0, %rax1593; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01594; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1595; AVX1-NEXT:    vzeroupper1596; AVX1-NEXT:    retq1597;1598; AVX2-LABEL: sitofp_4i64_to_4f32:1599; AVX2:       # %bb.0:1600; AVX2-NEXT:    vpextrq $1, %xmm0, %rax1601; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11602; AVX2-NEXT:    vmovq %xmm0, %rax1603; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21604; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]1605; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm01606; AVX2-NEXT:    vmovq %xmm0, %rax1607; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21608; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]1609; AVX2-NEXT:    vpextrq $1, %xmm0, %rax1610; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01611; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1612; AVX2-NEXT:    vzeroupper1613; AVX2-NEXT:    retq1614;1615; AVX512F-LABEL: sitofp_4i64_to_4f32:1616; AVX512F:       # %bb.0:1617; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax1618; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11619; AVX512F-NEXT:    vmovq %xmm0, %rax1620; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21621; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]1622; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm01623; AVX512F-NEXT:    vmovq %xmm0, %rax1624; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21625; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]1626; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax1627; AVX512F-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01628; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1629; AVX512F-NEXT:    vzeroupper1630; AVX512F-NEXT:    retq1631;1632; AVX512VL-LABEL: sitofp_4i64_to_4f32:1633; AVX512VL:       # %bb.0:1634; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax1635; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11636; AVX512VL-NEXT:    vmovq %xmm0, %rax1637; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21638; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]1639; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm01640; AVX512VL-NEXT:    vmovq %xmm0, %rax1641; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21642; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]1643; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax1644; AVX512VL-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm01645; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]1646; AVX512VL-NEXT:    vzeroupper1647; AVX512VL-NEXT:    retq1648;1649; AVX512DQ-LABEL: sitofp_4i64_to_4f32:1650; AVX512DQ:       # %bb.0:1651; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm01652; AVX512DQ-NEXT:    vcvtqq2ps %zmm0, %ymm01653; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01654; AVX512DQ-NEXT:    vzeroupper1655; AVX512DQ-NEXT:    retq1656;1657; AVX512VLDQ-LABEL: sitofp_4i64_to_4f32:1658; AVX512VLDQ:       # %bb.0:1659; AVX512VLDQ-NEXT:    vcvtqq2ps %ymm0, %xmm01660; AVX512VLDQ-NEXT:    vzeroupper1661; AVX512VLDQ-NEXT:    retq1662  %cvt = sitofp <4 x i64> %a to <4 x float>1663  ret <4 x float> %cvt1664}1665 1666define <8 x float> @sitofp_8i32_to_8f32(<8 x i32> %a) {1667; SSE-LABEL: sitofp_8i32_to_8f32:1668; SSE:       # %bb.0:1669; SSE-NEXT:    cvtdq2ps %xmm0, %xmm01670; SSE-NEXT:    cvtdq2ps %xmm1, %xmm11671; SSE-NEXT:    retq1672;1673; AVX-LABEL: sitofp_8i32_to_8f32:1674; AVX:       # %bb.0:1675; AVX-NEXT:    vcvtdq2ps %ymm0, %ymm01676; AVX-NEXT:    retq1677  %cvt = sitofp <8 x i32> %a to <8 x float>1678  ret <8 x float> %cvt1679}1680 1681define <8 x float> @sitofp_8i16_to_8f32(<8 x i16> %a) {1682; SSE2-LABEL: sitofp_8i16_to_8f32:1683; SSE2:       # %bb.0:1684; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1685; SSE2-NEXT:    psrad $16, %xmm11686; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm21687; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]1688; SSE2-NEXT:    psrad $16, %xmm01689; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm11690; SSE2-NEXT:    movaps %xmm2, %xmm01691; SSE2-NEXT:    retq1692;1693; SSE41-LABEL: sitofp_8i16_to_8f32:1694; SSE41:       # %bb.0:1695; SSE41-NEXT:    pmovsxwd %xmm0, %xmm11696; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm21697; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1698; SSE41-NEXT:    pmovsxwd %xmm0, %xmm01699; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm11700; SSE41-NEXT:    movaps %xmm2, %xmm01701; SSE41-NEXT:    retq1702;1703; AVX1-LABEL: sitofp_8i16_to_8f32:1704; AVX1:       # %bb.0:1705; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm11706; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]1707; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm01708; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01709; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm01710; AVX1-NEXT:    retq1711;1712; AVX2-LABEL: sitofp_8i16_to_8f32:1713; AVX2:       # %bb.0:1714; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm01715; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm01716; AVX2-NEXT:    retq1717;1718; AVX512-LABEL: sitofp_8i16_to_8f32:1719; AVX512:       # %bb.0:1720; AVX512-NEXT:    vpmovsxwd %xmm0, %ymm01721; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm01722; AVX512-NEXT:    retq1723  %cvt = sitofp <8 x i16> %a to <8 x float>1724  ret <8 x float> %cvt1725}1726 1727define <8 x float> @sitofp_8i8_to_8f32(<16 x i8> %a) {1728; SSE2-LABEL: sitofp_8i8_to_8f32:1729; SSE2:       # %bb.0:1730; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1731; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1732; SSE2-NEXT:    psrad $24, %xmm01733; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm01734; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]1735; SSE2-NEXT:    psrad $24, %xmm11736; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm11737; SSE2-NEXT:    retq1738;1739; SSE41-LABEL: sitofp_8i8_to_8f32:1740; SSE41:       # %bb.0:1741; SSE41-NEXT:    pmovsxbd %xmm0, %xmm11742; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm21743; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1744; SSE41-NEXT:    pmovsxbd %xmm0, %xmm01745; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm11746; SSE41-NEXT:    movaps %xmm2, %xmm01747; SSE41-NEXT:    retq1748;1749; AVX1-LABEL: sitofp_8i8_to_8f32:1750; AVX1:       # %bb.0:1751; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm11752; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1753; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm01754; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01755; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm01756; AVX1-NEXT:    retq1757;1758; AVX2-LABEL: sitofp_8i8_to_8f32:1759; AVX2:       # %bb.0:1760; AVX2-NEXT:    vpmovsxbd %xmm0, %ymm01761; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm01762; AVX2-NEXT:    retq1763;1764; AVX512-LABEL: sitofp_8i8_to_8f32:1765; AVX512:       # %bb.0:1766; AVX512-NEXT:    vpmovsxbd %xmm0, %ymm01767; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm01768; AVX512-NEXT:    retq1769  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1770  %cvt = sitofp <8 x i8> %shuf to <8 x float>1771  ret <8 x float> %cvt1772}1773 1774define <8 x float> @sitofp_16i8_to_8f32(<16 x i8> %a) {1775; SSE2-LABEL: sitofp_16i8_to_8f32:1776; SSE2:       # %bb.0:1777; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]1778; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1779; SSE2-NEXT:    psrad $24, %xmm01780; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm01781; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]1782; SSE2-NEXT:    psrad $24, %xmm11783; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm11784; SSE2-NEXT:    retq1785;1786; SSE41-LABEL: sitofp_16i8_to_8f32:1787; SSE41:       # %bb.0:1788; SSE41-NEXT:    pmovsxbd %xmm0, %xmm11789; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm21790; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1791; SSE41-NEXT:    pmovsxbd %xmm0, %xmm01792; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm11793; SSE41-NEXT:    movaps %xmm2, %xmm01794; SSE41-NEXT:    retq1795;1796; AVX1-LABEL: sitofp_16i8_to_8f32:1797; AVX1:       # %bb.0:1798; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm11799; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1800; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm01801; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01802; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm01803; AVX1-NEXT:    retq1804;1805; AVX2-LABEL: sitofp_16i8_to_8f32:1806; AVX2:       # %bb.0:1807; AVX2-NEXT:    vpmovsxbd %xmm0, %ymm01808; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm01809; AVX2-NEXT:    retq1810;1811; AVX512-LABEL: sitofp_16i8_to_8f32:1812; AVX512:       # %bb.0:1813; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm01814; AVX512-NEXT:    vcvtdq2ps %zmm0, %zmm01815; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm01816; AVX512-NEXT:    retq1817  %cvt = sitofp <16 x i8> %a to <16 x float>1818  %shuf = shufflevector <16 x float> %cvt, <16 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1819  ret <8 x float> %shuf1820}1821 1822;1823; Unsigned Integer to Float1824;1825 1826define <4 x float> @uitofp_2i64_to_4f32(<2 x i64> %a) {1827; SSE2-LABEL: uitofp_2i64_to_4f32:1828; SSE2:       # %bb.0:1829; SSE2-NEXT:    movdqa %xmm0, %xmm11830; SSE2-NEXT:    movq %xmm0, %rax1831; SSE2-NEXT:    testq %rax, %rax1832; SSE2-NEXT:    js .LBB41_11833; SSE2-NEXT:  # %bb.2:1834; SSE2-NEXT:    xorps %xmm0, %xmm01835; SSE2-NEXT:    cvtsi2ss %rax, %xmm01836; SSE2-NEXT:    jmp .LBB41_31837; SSE2-NEXT:  .LBB41_1:1838; SSE2-NEXT:    movq %rax, %rcx1839; SSE2-NEXT:    shrq %rcx1840; SSE2-NEXT:    andl $1, %eax1841; SSE2-NEXT:    orq %rcx, %rax1842; SSE2-NEXT:    xorps %xmm0, %xmm01843; SSE2-NEXT:    cvtsi2ss %rax, %xmm01844; SSE2-NEXT:    addss %xmm0, %xmm01845; SSE2-NEXT:  .LBB41_3:1846; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1847; SSE2-NEXT:    movq %xmm1, %rax1848; SSE2-NEXT:    testq %rax, %rax1849; SSE2-NEXT:    js .LBB41_41850; SSE2-NEXT:  # %bb.5:1851; SSE2-NEXT:    xorps %xmm1, %xmm11852; SSE2-NEXT:    cvtsi2ss %rax, %xmm11853; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1854; SSE2-NEXT:    retq1855; SSE2-NEXT:  .LBB41_4:1856; SSE2-NEXT:    movq %rax, %rcx1857; SSE2-NEXT:    shrq %rcx1858; SSE2-NEXT:    andl $1, %eax1859; SSE2-NEXT:    orq %rcx, %rax1860; SSE2-NEXT:    xorps %xmm1, %xmm11861; SSE2-NEXT:    cvtsi2ss %rax, %xmm11862; SSE2-NEXT:    addss %xmm1, %xmm11863; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1864; SSE2-NEXT:    retq1865;1866; SSE41-LABEL: uitofp_2i64_to_4f32:1867; SSE41:       # %bb.0:1868; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [1,1]1869; SSE41-NEXT:    pand %xmm0, %xmm11870; SSE41-NEXT:    movdqa %xmm0, %xmm21871; SSE41-NEXT:    psrlq $1, %xmm21872; SSE41-NEXT:    por %xmm1, %xmm21873; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,3,2,3]1874; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm01875; SSE41-NEXT:    pextrq $1, %xmm0, %rax1876; SSE41-NEXT:    cvtsi2ss %rax, %xmm31877; SSE41-NEXT:    movq %xmm0, %rax1878; SSE41-NEXT:    xorps %xmm2, %xmm21879; SSE41-NEXT:    cvtsi2ss %rax, %xmm21880; SSE41-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],zero,zero1881; SSE41-NEXT:    movaps %xmm2, %xmm31882; SSE41-NEXT:    addps %xmm2, %xmm31883; SSE41-NEXT:    movdqa %xmm1, %xmm01884; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm21885; SSE41-NEXT:    movaps %xmm2, %xmm01886; SSE41-NEXT:    retq1887;1888; VEX-LABEL: uitofp_2i64_to_4f32:1889; VEX:       # %bb.0:1890; VEX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm11891; VEX-NEXT:    vpsrlq $1, %xmm0, %xmm21892; VEX-NEXT:    vpor %xmm1, %xmm2, %xmm11893; VEX-NEXT:    vblendvpd %xmm0, %xmm1, %xmm0, %xmm11894; VEX-NEXT:    vpextrq $1, %xmm1, %rax1895; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm21896; VEX-NEXT:    vmovq %xmm1, %rax1897; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm11898; VEX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],zero,zero1899; VEX-NEXT:    vaddps %xmm1, %xmm1, %xmm21900; VEX-NEXT:    vpxor %xmm3, %xmm3, %xmm31901; VEX-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm01902; VEX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]1903; VEX-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm01904; VEX-NEXT:    retq1905;1906; AVX512F-LABEL: uitofp_2i64_to_4f32:1907; AVX512F:       # %bb.0:1908; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax1909; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm11910; AVX512F-NEXT:    vmovq %xmm0, %rax1911; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm01912; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1913; AVX512F-NEXT:    retq1914;1915; AVX512VL-LABEL: uitofp_2i64_to_4f32:1916; AVX512VL:       # %bb.0:1917; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax1918; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm11919; AVX512VL-NEXT:    vmovq %xmm0, %rax1920; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm01921; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero1922; AVX512VL-NEXT:    retq1923;1924; AVX512DQ-LABEL: uitofp_2i64_to_4f32:1925; AVX512DQ:       # %bb.0:1926; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm01927; AVX512DQ-NEXT:    vcvtuqq2ps %zmm0, %ymm01928; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm01929; AVX512DQ-NEXT:    vzeroupper1930; AVX512DQ-NEXT:    retq1931;1932; AVX512VLDQ-LABEL: uitofp_2i64_to_4f32:1933; AVX512VLDQ:       # %bb.0:1934; AVX512VLDQ-NEXT:    vcvtuqq2ps %xmm0, %xmm01935; AVX512VLDQ-NEXT:    retq1936  %cvt = uitofp <2 x i64> %a to <2 x float>1937  %ext = shufflevector <2 x float> %cvt, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>1938  ret <4 x float> %ext1939}1940 1941define <4 x float> @uitofp_2i64_to_2f32(<2 x i64> %a) {1942; SSE2-LABEL: uitofp_2i64_to_2f32:1943; SSE2:       # %bb.0:1944; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]1945; SSE2-NEXT:    movq %xmm1, %rax1946; SSE2-NEXT:    testq %rax, %rax1947; SSE2-NEXT:    js .LBB42_11948; SSE2-NEXT:  # %bb.2:1949; SSE2-NEXT:    xorps %xmm1, %xmm11950; SSE2-NEXT:    cvtsi2ss %rax, %xmm11951; SSE2-NEXT:    jmp .LBB42_31952; SSE2-NEXT:  .LBB42_1:1953; SSE2-NEXT:    movq %rax, %rcx1954; SSE2-NEXT:    shrq %rcx1955; SSE2-NEXT:    andl $1, %eax1956; SSE2-NEXT:    orq %rcx, %rax1957; SSE2-NEXT:    xorps %xmm1, %xmm11958; SSE2-NEXT:    cvtsi2ss %rax, %xmm11959; SSE2-NEXT:    addss %xmm1, %xmm11960; SSE2-NEXT:  .LBB42_3:1961; SSE2-NEXT:    movq %xmm0, %rax1962; SSE2-NEXT:    testq %rax, %rax1963; SSE2-NEXT:    js .LBB42_41964; SSE2-NEXT:  # %bb.5:1965; SSE2-NEXT:    xorps %xmm0, %xmm01966; SSE2-NEXT:    cvtsi2ss %rax, %xmm01967; SSE2-NEXT:    jmp .LBB42_61968; SSE2-NEXT:  .LBB42_4:1969; SSE2-NEXT:    movq %rax, %rcx1970; SSE2-NEXT:    shrq %rcx1971; SSE2-NEXT:    andl $1, %eax1972; SSE2-NEXT:    orq %rcx, %rax1973; SSE2-NEXT:    xorps %xmm0, %xmm01974; SSE2-NEXT:    cvtsi2ss %rax, %xmm01975; SSE2-NEXT:    addss %xmm0, %xmm01976; SSE2-NEXT:  .LBB42_6:1977; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1978; SSE2-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero1979; SSE2-NEXT:    retq1980;1981; SSE41-LABEL: uitofp_2i64_to_2f32:1982; SSE41:       # %bb.0:1983; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [1,1]1984; SSE41-NEXT:    pand %xmm0, %xmm11985; SSE41-NEXT:    movdqa %xmm0, %xmm21986; SSE41-NEXT:    psrlq $1, %xmm21987; SSE41-NEXT:    por %xmm1, %xmm21988; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,3,2,3]1989; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm01990; SSE41-NEXT:    pextrq $1, %xmm0, %rax1991; SSE41-NEXT:    xorps %xmm2, %xmm21992; SSE41-NEXT:    cvtsi2ss %rax, %xmm21993; SSE41-NEXT:    movq %xmm0, %rax1994; SSE41-NEXT:    cvtsi2ss %rax, %xmm31995; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],xmm2[0],zero,zero1996; SSE41-NEXT:    movaps %xmm3, %xmm21997; SSE41-NEXT:    addps %xmm3, %xmm21998; SSE41-NEXT:    movdqa %xmm1, %xmm01999; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm32000; SSE41-NEXT:    movq {{.*#+}} xmm0 = xmm3[0],zero2001; SSE41-NEXT:    retq2002;2003; VEX-LABEL: uitofp_2i64_to_2f32:2004; VEX:       # %bb.0:2005; VEX-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm12006; VEX-NEXT:    vpsrlq $1, %xmm0, %xmm22007; VEX-NEXT:    vpor %xmm1, %xmm2, %xmm12008; VEX-NEXT:    vblendvpd %xmm0, %xmm1, %xmm0, %xmm12009; VEX-NEXT:    vpextrq $1, %xmm1, %rax2010; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm22011; VEX-NEXT:    vmovq %xmm1, %rax2012; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm12013; VEX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],zero,zero2014; VEX-NEXT:    vaddps %xmm1, %xmm1, %xmm22015; VEX-NEXT:    vpxor %xmm3, %xmm3, %xmm32016; VEX-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm02017; VEX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]2018; VEX-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm02019; VEX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2020; VEX-NEXT:    retq2021;2022; AVX512F-LABEL: uitofp_2i64_to_2f32:2023; AVX512F:       # %bb.0:2024; AVX512F-NEXT:    vmovq %xmm0, %rax2025; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm12026; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax2027; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm02028; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2029; AVX512F-NEXT:    retq2030;2031; AVX512VL-LABEL: uitofp_2i64_to_2f32:2032; AVX512VL:       # %bb.0:2033; AVX512VL-NEXT:    vmovq %xmm0, %rax2034; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm12035; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax2036; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm02037; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],zero,zero2038; AVX512VL-NEXT:    retq2039;2040; AVX512DQ-LABEL: uitofp_2i64_to_2f32:2041; AVX512DQ:       # %bb.0:2042; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02043; AVX512DQ-NEXT:    vcvtuqq2ps %zmm0, %ymm02044; AVX512DQ-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2045; AVX512DQ-NEXT:    vzeroupper2046; AVX512DQ-NEXT:    retq2047;2048; AVX512VLDQ-LABEL: uitofp_2i64_to_2f32:2049; AVX512VLDQ:       # %bb.0:2050; AVX512VLDQ-NEXT:    vcvtuqq2ps %xmm0, %xmm02051; AVX512VLDQ-NEXT:    retq2052  %cvt = uitofp <2 x i64> %a to <2 x float>2053  %ext = shufflevector <2 x float> %cvt, <2 x float> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2054  ret <4 x float> %ext2055}2056 2057define <4 x float> @uitofp_4i64_to_4f32_undef(<2 x i64> %a) {2058; SSE2-LABEL: uitofp_4i64_to_4f32_undef:2059; SSE2:       # %bb.0:2060; SSE2-NEXT:    movq %xmm0, %rax2061; SSE2-NEXT:    testq %rax, %rax2062; SSE2-NEXT:    js .LBB43_12063; SSE2-NEXT:  # %bb.2:2064; SSE2-NEXT:    cvtsi2ss %rax, %xmm12065; SSE2-NEXT:    jmp .LBB43_32066; SSE2-NEXT:  .LBB43_1:2067; SSE2-NEXT:    movq %rax, %rcx2068; SSE2-NEXT:    shrq %rcx2069; SSE2-NEXT:    andl $1, %eax2070; SSE2-NEXT:    orq %rcx, %rax2071; SSE2-NEXT:    cvtsi2ss %rax, %xmm12072; SSE2-NEXT:    addss %xmm1, %xmm12073; SSE2-NEXT:  .LBB43_3:2074; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2075; SSE2-NEXT:    movq %xmm0, %rax2076; SSE2-NEXT:    testq %rax, %rax2077; SSE2-NEXT:    js .LBB43_42078; SSE2-NEXT:  # %bb.5:2079; SSE2-NEXT:    xorps %xmm0, %xmm02080; SSE2-NEXT:    cvtsi2ss %rax, %xmm02081; SSE2-NEXT:    jmp .LBB43_62082; SSE2-NEXT:  .LBB43_4:2083; SSE2-NEXT:    movq %rax, %rcx2084; SSE2-NEXT:    shrq %rcx2085; SSE2-NEXT:    andl $1, %eax2086; SSE2-NEXT:    orq %rcx, %rax2087; SSE2-NEXT:    xorps %xmm0, %xmm02088; SSE2-NEXT:    cvtsi2ss %rax, %xmm02089; SSE2-NEXT:    addss %xmm0, %xmm02090; SSE2-NEXT:  .LBB43_6:2091; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2092; SSE2-NEXT:    movq {{.*#+}} xmm0 = xmm1[0],zero2093; SSE2-NEXT:    retq2094;2095; SSE41-LABEL: uitofp_4i64_to_4f32_undef:2096; SSE41:       # %bb.0:2097; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [1,1]2098; SSE41-NEXT:    pand %xmm0, %xmm12099; SSE41-NEXT:    movdqa %xmm0, %xmm22100; SSE41-NEXT:    psrlq $1, %xmm22101; SSE41-NEXT:    por %xmm1, %xmm22102; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,3,2,3]2103; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm02104; SSE41-NEXT:    pextrq $1, %xmm0, %rax2105; SSE41-NEXT:    cvtsi2ss %rax, %xmm32106; SSE41-NEXT:    movq %xmm0, %rax2107; SSE41-NEXT:    xorps %xmm2, %xmm22108; SSE41-NEXT:    cvtsi2ss %rax, %xmm22109; SSE41-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0],xmm3[0],zero,zero2110; SSE41-NEXT:    movaps %xmm2, %xmm32111; SSE41-NEXT:    addps %xmm2, %xmm32112; SSE41-NEXT:    movdqa %xmm1, %xmm02113; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm22114; SSE41-NEXT:    movaps %xmm2, %xmm02115; SSE41-NEXT:    retq2116;2117; AVX1-LABEL: uitofp_4i64_to_4f32_undef:2118; AVX1:       # %bb.0:2119; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm02120; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm12121; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm22122; AVX1-NEXT:    vorps %ymm1, %ymm2, %ymm12123; AVX1-NEXT:    vmovaps %xmm0, %xmm22124; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm12125; AVX1-NEXT:    vpextrq $1, %xmm1, %rax2126; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm22127; AVX1-NEXT:    vmovq %xmm1, %rax2128; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm12129; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]2130; AVX1-NEXT:    vxorps %xmm2, %xmm2, %xmm22131; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]2132; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]2133; AVX1-NEXT:    vaddps %xmm1, %xmm1, %xmm22134; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm32135; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm02136; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm02137; AVX1-NEXT:    vzeroupper2138; AVX1-NEXT:    retq2139;2140; AVX2-LABEL: uitofp_4i64_to_4f32_undef:2141; AVX2:       # %bb.0:2142; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm02143; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]2144; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm12145; AVX2-NEXT:    vpsrlq $1, %ymm0, %ymm22146; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm12147; AVX2-NEXT:    vblendvpd %ymm0, %ymm1, %ymm0, %ymm12148; AVX2-NEXT:    vpextrq $1, %xmm1, %rax2149; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm22150; AVX2-NEXT:    vmovq %xmm1, %rax2151; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm32152; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]2153; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm12154; AVX2-NEXT:    vmovq %xmm1, %rax2155; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm32156; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]2157; AVX2-NEXT:    vpextrq $1, %xmm1, %rax2158; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm12159; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1,2],xmm1[0]2160; AVX2-NEXT:    vaddps %xmm1, %xmm1, %xmm22161; AVX2-NEXT:    vpackssdw %xmm0, %xmm0, %xmm02162; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm02163; AVX2-NEXT:    vzeroupper2164; AVX2-NEXT:    retq2165;2166; AVX512F-LABEL: uitofp_4i64_to_4f32_undef:2167; AVX512F:       # %bb.0:2168; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax2169; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm12170; AVX512F-NEXT:    vmovq %xmm0, %rax2171; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm02172; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero2173; AVX512F-NEXT:    retq2174;2175; AVX512VL-LABEL: uitofp_4i64_to_4f32_undef:2176; AVX512VL:       # %bb.0:2177; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax2178; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm12179; AVX512VL-NEXT:    vmovq %xmm0, %rax2180; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm02181; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],zero,zero2182; AVX512VL-NEXT:    retq2183;2184; AVX512DQ-LABEL: uitofp_4i64_to_4f32_undef:2185; AVX512DQ:       # %bb.0:2186; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02187; AVX512DQ-NEXT:    vcvtuqq2ps %zmm0, %ymm02188; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02189; AVX512DQ-NEXT:    vzeroupper2190; AVX512DQ-NEXT:    retq2191;2192; AVX512VLDQ-LABEL: uitofp_4i64_to_4f32_undef:2193; AVX512VLDQ:       # %bb.0:2194; AVX512VLDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm02195; AVX512VLDQ-NEXT:    vcvtuqq2ps %ymm0, %xmm02196; AVX512VLDQ-NEXT:    vzeroupper2197; AVX512VLDQ-NEXT:    retq2198  %ext = shufflevector <2 x i64> %a, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>2199  %cvt = uitofp <4 x i64> %ext to <4 x float>2200  ret <4 x float> %cvt2201}2202 2203define <4 x float> @uitofp_4i32_to_4f32(<4 x i32> %a) {2204; SSE2-LABEL: uitofp_4i32_to_4f32:2205; SSE2:       # %bb.0:2206; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]2207; SSE2-NEXT:    pand %xmm0, %xmm12208; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm12209; SSE2-NEXT:    psrld $16, %xmm02210; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02211; SSE2-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02212; SSE2-NEXT:    addps %xmm1, %xmm02213; SSE2-NEXT:    retq2214;2215; SSE41-LABEL: uitofp_4i32_to_4f32:2216; SSE41:       # %bb.0:2217; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [1258291200,1258291200,1258291200,1258291200]2218; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]2219; SSE41-NEXT:    psrld $16, %xmm02220; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7]2221; SSE41-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm02222; SSE41-NEXT:    addps %xmm1, %xmm02223; SSE41-NEXT:    retq2224;2225; AVX1-LABEL: uitofp_4i32_to_4f32:2226; AVX1:       # %bb.0:2227; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7]2228; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm02229; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7]2230; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm02231; AVX1-NEXT:    vaddps %xmm0, %xmm1, %xmm02232; AVX1-NEXT:    retq2233;2234; AVX2-LABEL: uitofp_4i32_to_4f32:2235; AVX2:       # %bb.0:2236; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1258291200,1258291200,1258291200,1258291200]2237; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]2238; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm02239; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [1392508928,1392508928,1392508928,1392508928]2240; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]2241; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm2 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]2242; AVX2-NEXT:    vsubps %xmm2, %xmm0, %xmm02243; AVX2-NEXT:    vaddps %xmm0, %xmm1, %xmm02244; AVX2-NEXT:    retq2245;2246; AVX512F-LABEL: uitofp_4i32_to_4f32:2247; AVX512F:       # %bb.0:2248; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02249; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm02250; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02251; AVX512F-NEXT:    vzeroupper2252; AVX512F-NEXT:    retq2253;2254; AVX512VL-LABEL: uitofp_4i32_to_4f32:2255; AVX512VL:       # %bb.0:2256; AVX512VL-NEXT:    vcvtudq2ps %xmm0, %xmm02257; AVX512VL-NEXT:    retq2258;2259; AVX512DQ-LABEL: uitofp_4i32_to_4f32:2260; AVX512DQ:       # %bb.0:2261; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm02262; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm02263; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02264; AVX512DQ-NEXT:    vzeroupper2265; AVX512DQ-NEXT:    retq2266;2267; AVX512VLDQ-LABEL: uitofp_4i32_to_4f32:2268; AVX512VLDQ:       # %bb.0:2269; AVX512VLDQ-NEXT:    vcvtudq2ps %xmm0, %xmm02270; AVX512VLDQ-NEXT:    retq2271  %cvt = uitofp <4 x i32> %a to <4 x float>2272  ret <4 x float> %cvt2273}2274 2275define <4 x float> @uitofp_4i16_to_4f32(<8 x i16> %a) {2276; SSE2-LABEL: uitofp_4i16_to_4f32:2277; SSE2:       # %bb.0:2278; SSE2-NEXT:    pxor %xmm1, %xmm12279; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2280; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm02281; SSE2-NEXT:    retq2282;2283; SSE41-LABEL: uitofp_4i16_to_4f32:2284; SSE41:       # %bb.0:2285; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2286; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm02287; SSE41-NEXT:    retq2288;2289; AVX-LABEL: uitofp_4i16_to_4f32:2290; AVX:       # %bb.0:2291; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2292; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm02293; AVX-NEXT:    retq2294  %shuf = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2295  %cvt = uitofp <4 x i16> %shuf to <4 x float>2296  ret <4 x float> %cvt2297}2298 2299define <4 x float> @uitofp_8i16_to_4f32(<8 x i16> %a) {2300; SSE2-LABEL: uitofp_8i16_to_4f32:2301; SSE2:       # %bb.0:2302; SSE2-NEXT:    pxor %xmm1, %xmm12303; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2304; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm02305; SSE2-NEXT:    retq2306;2307; SSE41-LABEL: uitofp_8i16_to_4f32:2308; SSE41:       # %bb.0:2309; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2310; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm02311; SSE41-NEXT:    retq2312;2313; AVX-LABEL: uitofp_8i16_to_4f32:2314; AVX:       # %bb.0:2315; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2316; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm02317; AVX-NEXT:    retq2318  %cvt = uitofp <8 x i16> %a to <8 x float>2319  %shuf = shufflevector <8 x float> %cvt, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2320  ret <4 x float> %shuf2321}2322 2323define <4 x float> @uitofp_4i8_to_4f32(<16 x i8> %a) {2324; SSE2-LABEL: uitofp_4i8_to_4f32:2325; SSE2:       # %bb.0:2326; SSE2-NEXT:    pxor %xmm1, %xmm12327; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2328; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2329; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm02330; SSE2-NEXT:    retq2331;2332; SSE41-LABEL: uitofp_4i8_to_4f32:2333; SSE41:       # %bb.0:2334; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2335; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm02336; SSE41-NEXT:    retq2337;2338; AVX-LABEL: uitofp_4i8_to_4f32:2339; AVX:       # %bb.0:2340; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2341; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm02342; AVX-NEXT:    retq2343  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2344  %cvt = uitofp <4 x i8> %shuf to <4 x float>2345  ret <4 x float> %cvt2346}2347 2348define <4 x float> @uitofp_16i8_to_4f32(<16 x i8> %a) {2349; SSE2-LABEL: uitofp_16i8_to_4f32:2350; SSE2:       # %bb.0:2351; SSE2-NEXT:    pxor %xmm1, %xmm12352; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2353; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2354; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm02355; SSE2-NEXT:    retq2356;2357; SSE41-LABEL: uitofp_16i8_to_4f32:2358; SSE41:       # %bb.0:2359; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2360; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm02361; SSE41-NEXT:    retq2362;2363; AVX-LABEL: uitofp_16i8_to_4f32:2364; AVX:       # %bb.0:2365; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2366; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm02367; AVX-NEXT:    retq2368  %cvt = uitofp <16 x i8> %a to <16 x float>2369  %shuf = shufflevector <16 x float> %cvt, <16 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2370  ret <4 x float> %shuf2371}2372 2373define <4 x float> @uitofp_4i64_to_4f32(<4 x i64> %a) {2374; SSE2-LABEL: uitofp_4i64_to_4f32:2375; SSE2:       # %bb.0:2376; SSE2-NEXT:    movq %xmm1, %rax2377; SSE2-NEXT:    testq %rax, %rax2378; SSE2-NEXT:    js .LBB49_12379; SSE2-NEXT:  # %bb.2:2380; SSE2-NEXT:    cvtsi2ss %rax, %xmm22381; SSE2-NEXT:    jmp .LBB49_32382; SSE2-NEXT:  .LBB49_1:2383; SSE2-NEXT:    movq %rax, %rcx2384; SSE2-NEXT:    shrq %rcx2385; SSE2-NEXT:    andl $1, %eax2386; SSE2-NEXT:    orq %rcx, %rax2387; SSE2-NEXT:    cvtsi2ss %rax, %xmm22388; SSE2-NEXT:    addss %xmm2, %xmm22389; SSE2-NEXT:  .LBB49_3:2390; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]2391; SSE2-NEXT:    movq %xmm1, %rax2392; SSE2-NEXT:    testq %rax, %rax2393; SSE2-NEXT:    js .LBB49_42394; SSE2-NEXT:  # %bb.5:2395; SSE2-NEXT:    cvtsi2ss %rax, %xmm32396; SSE2-NEXT:    jmp .LBB49_62397; SSE2-NEXT:  .LBB49_4:2398; SSE2-NEXT:    movq %rax, %rcx2399; SSE2-NEXT:    shrq %rcx2400; SSE2-NEXT:    andl $1, %eax2401; SSE2-NEXT:    orq %rcx, %rax2402; SSE2-NEXT:    cvtsi2ss %rax, %xmm32403; SSE2-NEXT:    addss %xmm3, %xmm32404; SSE2-NEXT:  .LBB49_6:2405; SSE2-NEXT:    movq %xmm0, %rax2406; SSE2-NEXT:    testq %rax, %rax2407; SSE2-NEXT:    js .LBB49_72408; SSE2-NEXT:  # %bb.8:2409; SSE2-NEXT:    xorps %xmm1, %xmm12410; SSE2-NEXT:    cvtsi2ss %rax, %xmm12411; SSE2-NEXT:    jmp .LBB49_92412; SSE2-NEXT:  .LBB49_7:2413; SSE2-NEXT:    movq %rax, %rcx2414; SSE2-NEXT:    shrq %rcx2415; SSE2-NEXT:    andl $1, %eax2416; SSE2-NEXT:    orq %rcx, %rax2417; SSE2-NEXT:    xorps %xmm1, %xmm12418; SSE2-NEXT:    cvtsi2ss %rax, %xmm12419; SSE2-NEXT:    addss %xmm1, %xmm12420; SSE2-NEXT:  .LBB49_9:2421; SSE2-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]2422; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]2423; SSE2-NEXT:    movq %xmm0, %rax2424; SSE2-NEXT:    testq %rax, %rax2425; SSE2-NEXT:    js .LBB49_102426; SSE2-NEXT:  # %bb.11:2427; SSE2-NEXT:    xorps %xmm0, %xmm02428; SSE2-NEXT:    cvtsi2ss %rax, %xmm02429; SSE2-NEXT:    jmp .LBB49_122430; SSE2-NEXT:  .LBB49_10:2431; SSE2-NEXT:    movq %rax, %rcx2432; SSE2-NEXT:    shrq %rcx2433; SSE2-NEXT:    andl $1, %eax2434; SSE2-NEXT:    orq %rcx, %rax2435; SSE2-NEXT:    xorps %xmm0, %xmm02436; SSE2-NEXT:    cvtsi2ss %rax, %xmm02437; SSE2-NEXT:    addss %xmm0, %xmm02438; SSE2-NEXT:  .LBB49_12:2439; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]2440; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]2441; SSE2-NEXT:    movaps %xmm1, %xmm02442; SSE2-NEXT:    retq2443;2444; SSE41-LABEL: uitofp_4i64_to_4f32:2445; SSE41:       # %bb.0:2446; SSE41-NEXT:    movdqa %xmm1, %xmm22447; SSE41-NEXT:    movdqa %xmm0, %xmm12448; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm4 = [1,1]2449; SSE41-NEXT:    pand %xmm4, %xmm02450; SSE41-NEXT:    movdqa %xmm1, %xmm32451; SSE41-NEXT:    psrlq $1, %xmm32452; SSE41-NEXT:    por %xmm0, %xmm32453; SSE41-NEXT:    movdqa %xmm1, %xmm52454; SSE41-NEXT:    movdqa %xmm1, %xmm02455; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm52456; SSE41-NEXT:    pextrq $1, %xmm5, %rax2457; SSE41-NEXT:    xorps %xmm0, %xmm02458; SSE41-NEXT:    cvtsi2ss %rax, %xmm02459; SSE41-NEXT:    movq %xmm5, %rax2460; SSE41-NEXT:    xorps %xmm3, %xmm32461; SSE41-NEXT:    cvtsi2ss %rax, %xmm32462; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[2,3]2463; SSE41-NEXT:    pand %xmm2, %xmm42464; SSE41-NEXT:    movdqa %xmm2, %xmm52465; SSE41-NEXT:    psrlq $1, %xmm52466; SSE41-NEXT:    por %xmm4, %xmm52467; SSE41-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,3],xmm2[1,3]2468; SSE41-NEXT:    movaps %xmm2, %xmm02469; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm22470; SSE41-NEXT:    movq %xmm2, %rax2471; SSE41-NEXT:    xorps %xmm0, %xmm02472; SSE41-NEXT:    cvtsi2ss %rax, %xmm02473; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1],xmm0[0],xmm3[3]2474; SSE41-NEXT:    pextrq $1, %xmm2, %rax2475; SSE41-NEXT:    xorps %xmm0, %xmm02476; SSE41-NEXT:    cvtsi2ss %rax, %xmm02477; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1,2],xmm0[0]2478; SSE41-NEXT:    movaps %xmm3, %xmm22479; SSE41-NEXT:    addps %xmm3, %xmm22480; SSE41-NEXT:    movaps %xmm1, %xmm02481; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm32482; SSE41-NEXT:    movaps %xmm3, %xmm02483; SSE41-NEXT:    retq2484;2485; AVX1-LABEL: uitofp_4i64_to_4f32:2486; AVX1:       # %bb.0:2487; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm12488; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22489; AVX1-NEXT:    vpsrlq $1, %xmm2, %xmm32490; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm12491; AVX1-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm32492; AVX1-NEXT:    vorpd %ymm3, %ymm1, %ymm12493; AVX1-NEXT:    vblendvpd %ymm0, %ymm1, %ymm0, %ymm12494; AVX1-NEXT:    vpextrq $1, %xmm1, %rax2495; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm32496; AVX1-NEXT:    vmovq %xmm1, %rax2497; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm42498; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]2499; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12500; AVX1-NEXT:    vmovq %xmm1, %rax2501; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm42502; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]2503; AVX1-NEXT:    vpextrq $1, %xmm1, %rax2504; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm12505; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm3[0,1,2],xmm1[0]2506; AVX1-NEXT:    vaddps %xmm1, %xmm1, %xmm32507; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm02508; AVX1-NEXT:    vblendvps %xmm0, %xmm3, %xmm1, %xmm02509; AVX1-NEXT:    vzeroupper2510; AVX1-NEXT:    retq2511;2512; AVX2-LABEL: uitofp_4i64_to_4f32:2513; AVX2:       # %bb.0:2514; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]2515; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm12516; AVX2-NEXT:    vpsrlq $1, %ymm0, %ymm22517; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm12518; AVX2-NEXT:    vblendvpd %ymm0, %ymm1, %ymm0, %ymm12519; AVX2-NEXT:    vpextrq $1, %xmm1, %rax2520; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm22521; AVX2-NEXT:    vmovq %xmm1, %rax2522; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm32523; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]2524; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm12525; AVX2-NEXT:    vmovq %xmm1, %rax2526; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm32527; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]2528; AVX2-NEXT:    vpextrq $1, %xmm1, %rax2529; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm12530; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1,2],xmm1[0]2531; AVX2-NEXT:    vaddps %xmm1, %xmm1, %xmm22532; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm32533; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm02534; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm02535; AVX2-NEXT:    vzeroupper2536; AVX2-NEXT:    retq2537;2538; AVX512F-LABEL: uitofp_4i64_to_4f32:2539; AVX512F:       # %bb.0:2540; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax2541; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm12542; AVX512F-NEXT:    vmovq %xmm0, %rax2543; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm22544; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]2545; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm02546; AVX512F-NEXT:    vmovq %xmm0, %rax2547; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm22548; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]2549; AVX512F-NEXT:    vpextrq $1, %xmm0, %rax2550; AVX512F-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm02551; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]2552; AVX512F-NEXT:    vzeroupper2553; AVX512F-NEXT:    retq2554;2555; AVX512VL-LABEL: uitofp_4i64_to_4f32:2556; AVX512VL:       # %bb.0:2557; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax2558; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm12559; AVX512VL-NEXT:    vmovq %xmm0, %rax2560; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm22561; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]2562; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm02563; AVX512VL-NEXT:    vmovq %xmm0, %rax2564; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm22565; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]2566; AVX512VL-NEXT:    vpextrq $1, %xmm0, %rax2567; AVX512VL-NEXT:    vcvtusi2ss %rax, %xmm15, %xmm02568; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[0]2569; AVX512VL-NEXT:    vzeroupper2570; AVX512VL-NEXT:    retq2571;2572; AVX512DQ-LABEL: uitofp_4i64_to_4f32:2573; AVX512DQ:       # %bb.0:2574; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02575; AVX512DQ-NEXT:    vcvtuqq2ps %zmm0, %ymm02576; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm02577; AVX512DQ-NEXT:    vzeroupper2578; AVX512DQ-NEXT:    retq2579;2580; AVX512VLDQ-LABEL: uitofp_4i64_to_4f32:2581; AVX512VLDQ:       # %bb.0:2582; AVX512VLDQ-NEXT:    vcvtuqq2ps %ymm0, %xmm02583; AVX512VLDQ-NEXT:    vzeroupper2584; AVX512VLDQ-NEXT:    retq2585  %cvt = uitofp <4 x i64> %a to <4 x float>2586  ret <4 x float> %cvt2587}2588 2589define <8 x float> @uitofp_8i32_to_8f32(<8 x i32> %a) {2590; SSE2-LABEL: uitofp_8i32_to_8f32:2591; SSE2:       # %bb.0:2592; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535]2593; SSE2-NEXT:    movdqa %xmm0, %xmm32594; SSE2-NEXT:    pand %xmm2, %xmm32595; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1258291200,1258291200,1258291200,1258291200]2596; SSE2-NEXT:    por %xmm4, %xmm32597; SSE2-NEXT:    psrld $16, %xmm02598; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1392508928,1392508928,1392508928,1392508928]2599; SSE2-NEXT:    por %xmm5, %xmm02600; SSE2-NEXT:    movaps {{.*#+}} xmm6 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]2601; SSE2-NEXT:    subps %xmm6, %xmm02602; SSE2-NEXT:    addps %xmm3, %xmm02603; SSE2-NEXT:    pand %xmm1, %xmm22604; SSE2-NEXT:    por %xmm4, %xmm22605; SSE2-NEXT:    psrld $16, %xmm12606; SSE2-NEXT:    por %xmm5, %xmm12607; SSE2-NEXT:    subps %xmm6, %xmm12608; SSE2-NEXT:    addps %xmm2, %xmm12609; SSE2-NEXT:    retq2610;2611; SSE41-LABEL: uitofp_8i32_to_8f32:2612; SSE41:       # %bb.0:2613; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [1258291200,1258291200,1258291200,1258291200]2614; SSE41-NEXT:    movdqa %xmm0, %xmm32615; SSE41-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm2[1],xmm3[2],xmm2[3],xmm3[4],xmm2[5],xmm3[6],xmm2[7]2616; SSE41-NEXT:    psrld $16, %xmm02617; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [1392508928,1392508928,1392508928,1392508928]2618; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1],xmm0[2],xmm4[3],xmm0[4],xmm4[5],xmm0[6],xmm4[7]2619; SSE41-NEXT:    movaps {{.*#+}} xmm5 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]2620; SSE41-NEXT:    subps %xmm5, %xmm02621; SSE41-NEXT:    addps %xmm3, %xmm02622; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]2623; SSE41-NEXT:    psrld $16, %xmm12624; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1],xmm1[2],xmm4[3],xmm1[4],xmm4[5],xmm1[6],xmm4[7]2625; SSE41-NEXT:    subps %xmm5, %xmm12626; SSE41-NEXT:    addps %xmm2, %xmm12627; SSE41-NEXT:    retq2628;2629; AVX1-LABEL: uitofp_8i32_to_8f32:2630; AVX1:       # %bb.0:2631; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm12632; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22633; AVX1-NEXT:    vpsrld $16, %xmm2, %xmm22634; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm12635; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm12636; AVX1-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm12637; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm02638; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm02639; AVX1-NEXT:    vaddps %ymm0, %ymm1, %ymm02640; AVX1-NEXT:    retq2641;2642; AVX2-LABEL: uitofp_8i32_to_8f32:2643; AVX2:       # %bb.0:2644; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200]2645; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15]2646; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm02647; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928]2648; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15]2649; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm2 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]2650; AVX2-NEXT:    vsubps %ymm2, %ymm0, %ymm02651; AVX2-NEXT:    vaddps %ymm0, %ymm1, %ymm02652; AVX2-NEXT:    retq2653;2654; AVX512F-LABEL: uitofp_8i32_to_8f32:2655; AVX512F:       # %bb.0:2656; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02657; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm02658; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02659; AVX512F-NEXT:    retq2660;2661; AVX512VL-LABEL: uitofp_8i32_to_8f32:2662; AVX512VL:       # %bb.0:2663; AVX512VL-NEXT:    vcvtudq2ps %ymm0, %ymm02664; AVX512VL-NEXT:    retq2665;2666; AVX512DQ-LABEL: uitofp_8i32_to_8f32:2667; AVX512DQ:       # %bb.0:2668; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm02669; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm02670; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02671; AVX512DQ-NEXT:    retq2672;2673; AVX512VLDQ-LABEL: uitofp_8i32_to_8f32:2674; AVX512VLDQ:       # %bb.0:2675; AVX512VLDQ-NEXT:    vcvtudq2ps %ymm0, %ymm02676; AVX512VLDQ-NEXT:    retq2677  %cvt = uitofp <8 x i32> %a to <8 x float>2678  ret <8 x float> %cvt2679}2680 2681define <8 x float> @uitofp_8i16_to_8f32(<8 x i16> %a) {2682; SSE2-LABEL: uitofp_8i16_to_8f32:2683; SSE2:       # %bb.0:2684; SSE2-NEXT:    pxor %xmm1, %xmm12685; SSE2-NEXT:    movdqa %xmm0, %xmm22686; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]2687; SSE2-NEXT:    cvtdq2ps %xmm2, %xmm22688; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2689; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm12690; SSE2-NEXT:    movaps %xmm2, %xmm02691; SSE2-NEXT:    retq2692;2693; SSE41-LABEL: uitofp_8i16_to_8f32:2694; SSE41:       # %bb.0:2695; SSE41-NEXT:    pxor %xmm1, %xmm12696; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2697; SSE41-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2698; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm12699; SSE41-NEXT:    cvtdq2ps %xmm2, %xmm02700; SSE41-NEXT:    retq2701;2702; AVX1-LABEL: uitofp_8i16_to_8f32:2703; AVX1:       # %bb.0:2704; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12705; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2706; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2707; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02708; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm02709; AVX1-NEXT:    retq2710;2711; AVX2-LABEL: uitofp_8i16_to_8f32:2712; AVX2:       # %bb.0:2713; AVX2-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],zero2714; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm02715; AVX2-NEXT:    retq2716;2717; AVX512-LABEL: uitofp_8i16_to_8f32:2718; AVX512:       # %bb.0:2719; AVX512-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],zero2720; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm02721; AVX512-NEXT:    retq2722  %cvt = uitofp <8 x i16> %a to <8 x float>2723  ret <8 x float> %cvt2724}2725 2726define <8 x float> @uitofp_8i8_to_8f32(<16 x i8> %a) {2727; SSE2-LABEL: uitofp_8i8_to_8f32:2728; SSE2:       # %bb.0:2729; SSE2-NEXT:    pxor %xmm1, %xmm12730; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2731; SSE2-NEXT:    movdqa %xmm0, %xmm22732; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]2733; SSE2-NEXT:    cvtdq2ps %xmm2, %xmm22734; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2735; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm12736; SSE2-NEXT:    movaps %xmm2, %xmm02737; SSE2-NEXT:    retq2738;2739; SSE41-LABEL: uitofp_8i8_to_8f32:2740; SSE41:       # %bb.0:2741; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2742; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm22743; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]2744; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2745; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm12746; SSE41-NEXT:    movaps %xmm2, %xmm02747; SSE41-NEXT:    retq2748;2749; AVX1-LABEL: uitofp_8i8_to_8f32:2750; AVX1:       # %bb.0:2751; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2752; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]2753; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2754; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02755; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm02756; AVX1-NEXT:    retq2757;2758; AVX2-LABEL: uitofp_8i8_to_8f32:2759; AVX2:       # %bb.0:2760; AVX2-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,zero2761; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm02762; AVX2-NEXT:    retq2763;2764; AVX512-LABEL: uitofp_8i8_to_8f32:2765; AVX512:       # %bb.0:2766; AVX512-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,zero2767; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm02768; AVX512-NEXT:    retq2769  %shuf = shufflevector <16 x i8> %a, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2770  %cvt = uitofp <8 x i8> %shuf to <8 x float>2771  ret <8 x float> %cvt2772}2773 2774define <8 x float> @uitofp_16i8_to_8f32(<16 x i8> %a) {2775; SSE2-LABEL: uitofp_16i8_to_8f32:2776; SSE2:       # %bb.0:2777; SSE2-NEXT:    pxor %xmm1, %xmm12778; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2779; SSE2-NEXT:    movdqa %xmm0, %xmm22780; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]2781; SSE2-NEXT:    cvtdq2ps %xmm2, %xmm22782; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2783; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm12784; SSE2-NEXT:    movaps %xmm2, %xmm02785; SSE2-NEXT:    retq2786;2787; SSE41-LABEL: uitofp_16i8_to_8f32:2788; SSE41:       # %bb.0:2789; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2790; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm22791; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]2792; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2793; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm12794; SSE41-NEXT:    movaps %xmm2, %xmm02795; SSE41-NEXT:    retq2796;2797; AVX1-LABEL: uitofp_16i8_to_8f32:2798; AVX1:       # %bb.0:2799; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2800; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]2801; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero2802; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02803; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm02804; AVX1-NEXT:    retq2805;2806; AVX2-LABEL: uitofp_16i8_to_8f32:2807; AVX2:       # %bb.0:2808; AVX2-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,zero2809; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm02810; AVX2-NEXT:    retq2811;2812; AVX512-LABEL: uitofp_16i8_to_8f32:2813; AVX512:       # %bb.0:2814; AVX512-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,zero2815; AVX512-NEXT:    vcvtdq2ps %zmm0, %zmm02816; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm02817; AVX512-NEXT:    retq2818  %cvt = uitofp <16 x i8> %a to <16 x float>2819  %shuf = shufflevector <16 x float> %cvt, <16 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2820  ret <8 x float> %shuf2821}2822 2823;2824; Load Signed Integer to Double2825;2826 2827define <2 x double> @sitofp_load_2i64_to_2f64(ptr%a) {2828; SSE-LABEL: sitofp_load_2i64_to_2f64:2829; SSE:       # %bb.0:2830; SSE-NEXT:    cvtsi2sdq 8(%rdi), %xmm12831; SSE-NEXT:    cvtsi2sdq (%rdi), %xmm02832; SSE-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2833; SSE-NEXT:    retq2834;2835; VEX-LABEL: sitofp_load_2i64_to_2f64:2836; VEX:       # %bb.0:2837; VEX-NEXT:    vcvtsi2sdq 8(%rdi), %xmm15, %xmm02838; VEX-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm12839; VEX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]2840; VEX-NEXT:    retq2841;2842; AVX512F-LABEL: sitofp_load_2i64_to_2f64:2843; AVX512F:       # %bb.0:2844; AVX512F-NEXT:    vcvtsi2sdq 8(%rdi), %xmm15, %xmm02845; AVX512F-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm12846; AVX512F-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]2847; AVX512F-NEXT:    retq2848;2849; AVX512VL-LABEL: sitofp_load_2i64_to_2f64:2850; AVX512VL:       # %bb.0:2851; AVX512VL-NEXT:    vcvtsi2sdq 8(%rdi), %xmm15, %xmm02852; AVX512VL-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm12853; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]2854; AVX512VL-NEXT:    retq2855;2856; AVX512DQ-LABEL: sitofp_load_2i64_to_2f64:2857; AVX512DQ:       # %bb.0:2858; AVX512DQ-NEXT:    vmovaps (%rdi), %xmm02859; AVX512DQ-NEXT:    vcvtqq2pd %zmm0, %zmm02860; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm02861; AVX512DQ-NEXT:    vzeroupper2862; AVX512DQ-NEXT:    retq2863;2864; AVX512VLDQ-LABEL: sitofp_load_2i64_to_2f64:2865; AVX512VLDQ:       # %bb.0:2866; AVX512VLDQ-NEXT:    vcvtqq2pd (%rdi), %xmm02867; AVX512VLDQ-NEXT:    retq2868  %ld = load <2 x i64>, ptr%a2869  %cvt = sitofp <2 x i64> %ld to <2 x double>2870  ret <2 x double> %cvt2871}2872 2873define <2 x double> @sitofp_load_2i32_to_2f64(ptr%a) {2874; SSE-LABEL: sitofp_load_2i32_to_2f64:2875; SSE:       # %bb.0:2876; SSE-NEXT:    cvtdq2pd (%rdi), %xmm02877; SSE-NEXT:    retq2878;2879; AVX-LABEL: sitofp_load_2i32_to_2f64:2880; AVX:       # %bb.0:2881; AVX-NEXT:    vcvtdq2pd (%rdi), %xmm02882; AVX-NEXT:    retq2883  %ld = load <2 x i32>, ptr%a2884  %cvt = sitofp <2 x i32> %ld to <2 x double>2885  ret <2 x double> %cvt2886}2887 2888define <2 x double> @sitofp_volatile_load_4i32_to_2f64(ptr%a) {2889; SSE-LABEL: sitofp_volatile_load_4i32_to_2f64:2890; SSE:       # %bb.0:2891; SSE-NEXT:    movaps (%rdi), %xmm02892; SSE-NEXT:    cvtdq2pd %xmm0, %xmm02893; SSE-NEXT:    retq2894;2895; AVX-LABEL: sitofp_volatile_load_4i32_to_2f64:2896; AVX:       # %bb.0:2897; AVX-NEXT:    vmovaps (%rdi), %xmm02898; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm02899; AVX-NEXT:    retq2900  %ld = load volatile <4 x i32>, ptr%a2901  %b = shufflevector <4 x i32> %ld, <4 x i32> undef, <2 x i32> <i32 0, i32 1>2902  %cvt = sitofp <2 x i32> %b to <2 x double>2903  ret <2 x double> %cvt2904}2905 2906define <2 x double> @sitofp_load_4i32_to_2f64_2(ptr %x) {2907; SSE-LABEL: sitofp_load_4i32_to_2f64_2:2908; SSE:       # %bb.0:2909; SSE-NEXT:    cvtdq2pd (%rdi), %xmm02910; SSE-NEXT:    retq2911;2912; AVX-LABEL: sitofp_load_4i32_to_2f64_2:2913; AVX:       # %bb.0:2914; AVX-NEXT:    vcvtdq2pd (%rdi), %xmm02915; AVX-NEXT:    retq2916  %a = load <4 x i32>, ptr %x2917  %b = sitofp <4 x i32> %a to <4 x double>2918  %c = shufflevector <4 x double> %b, <4 x double> undef, <2 x i32> <i32 0, i32 1>2919  ret <2 x double> %c2920}2921 2922define <2 x double> @sitofp_volatile_load_4i32_to_2f64_2(ptr %x) {2923; SSE-LABEL: sitofp_volatile_load_4i32_to_2f64_2:2924; SSE:       # %bb.0:2925; SSE-NEXT:    movaps (%rdi), %xmm02926; SSE-NEXT:    cvtdq2pd %xmm0, %xmm02927; SSE-NEXT:    retq2928;2929; AVX-LABEL: sitofp_volatile_load_4i32_to_2f64_2:2930; AVX:       # %bb.0:2931; AVX-NEXT:    vmovaps (%rdi), %xmm02932; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm02933; AVX-NEXT:    retq2934  %a = load volatile <4 x i32>, ptr %x2935  %b = sitofp <4 x i32> %a to <4 x double>2936  %c = shufflevector <4 x double> %b, <4 x double> undef, <2 x i32> <i32 0, i32 1>2937  ret <2 x double> %c2938}2939 2940define <2 x double> @sitofp_load_2i16_to_2f64(ptr%a) {2941; SSE2-LABEL: sitofp_load_2i16_to_2f64:2942; SSE2:       # %bb.0:2943; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2944; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]2945; SSE2-NEXT:    psrad $16, %xmm02946; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm02947; SSE2-NEXT:    retq2948;2949; SSE41-LABEL: sitofp_load_2i16_to_2f64:2950; SSE41:       # %bb.0:2951; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2952; SSE41-NEXT:    pmovsxwd %xmm0, %xmm02953; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm02954; SSE41-NEXT:    retq2955;2956; AVX-LABEL: sitofp_load_2i16_to_2f64:2957; AVX:       # %bb.0:2958; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2959; AVX-NEXT:    vpmovsxwd %xmm0, %xmm02960; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm02961; AVX-NEXT:    retq2962  %ld = load <2 x i16>, ptr%a2963  %cvt = sitofp <2 x i16> %ld to <2 x double>2964  ret <2 x double> %cvt2965}2966 2967define <2 x double> @sitofp_load_2i8_to_2f64(ptr%a) {2968; SSE2-LABEL: sitofp_load_2i8_to_2f64:2969; SSE2:       # %bb.0:2970; SSE2-NEXT:    movzwl (%rdi), %eax2971; SSE2-NEXT:    movd %eax, %xmm02972; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2973; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]2974; SSE2-NEXT:    psrad $24, %xmm02975; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm02976; SSE2-NEXT:    retq2977;2978; SSE41-LABEL: sitofp_load_2i8_to_2f64:2979; SSE41:       # %bb.0:2980; SSE41-NEXT:    movzwl (%rdi), %eax2981; SSE41-NEXT:    movd %eax, %xmm02982; SSE41-NEXT:    pmovsxbd %xmm0, %xmm02983; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm02984; SSE41-NEXT:    retq2985;2986; AVX-LABEL: sitofp_load_2i8_to_2f64:2987; AVX:       # %bb.0:2988; AVX-NEXT:    movzwl (%rdi), %eax2989; AVX-NEXT:    vmovd %eax, %xmm02990; AVX-NEXT:    vpmovsxbd %xmm0, %xmm02991; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm02992; AVX-NEXT:    retq2993  %ld = load <2 x i8>, ptr%a2994  %cvt = sitofp <2 x i8> %ld to <2 x double>2995  ret <2 x double> %cvt2996}2997 2998define <4 x double> @sitofp_load_4i64_to_4f64(ptr%a) {2999; SSE-LABEL: sitofp_load_4i64_to_4f64:3000; SSE:       # %bb.0:3001; SSE-NEXT:    cvtsi2sdq 8(%rdi), %xmm13002; SSE-NEXT:    cvtsi2sdq (%rdi), %xmm03003; SSE-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]3004; SSE-NEXT:    cvtsi2sdq 24(%rdi), %xmm23005; SSE-NEXT:    xorps %xmm1, %xmm13006; SSE-NEXT:    cvtsi2sdq 16(%rdi), %xmm13007; SSE-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm2[0]3008; SSE-NEXT:    retq3009;3010; VEX-LABEL: sitofp_load_4i64_to_4f64:3011; VEX:       # %bb.0:3012; VEX-NEXT:    vcvtsi2sdq 24(%rdi), %xmm15, %xmm03013; VEX-NEXT:    vcvtsi2sdq 16(%rdi), %xmm15, %xmm13014; VEX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]3015; VEX-NEXT:    vcvtsi2sdq 8(%rdi), %xmm15, %xmm13016; VEX-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm23017; VEX-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0]3018; VEX-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03019; VEX-NEXT:    retq3020;3021; AVX512F-LABEL: sitofp_load_4i64_to_4f64:3022; AVX512F:       # %bb.0:3023; AVX512F-NEXT:    vcvtsi2sdq 24(%rdi), %xmm15, %xmm03024; AVX512F-NEXT:    vcvtsi2sdq 16(%rdi), %xmm15, %xmm13025; AVX512F-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]3026; AVX512F-NEXT:    vcvtsi2sdq 8(%rdi), %xmm15, %xmm13027; AVX512F-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm23028; AVX512F-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0]3029; AVX512F-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03030; AVX512F-NEXT:    retq3031;3032; AVX512VL-LABEL: sitofp_load_4i64_to_4f64:3033; AVX512VL:       # %bb.0:3034; AVX512VL-NEXT:    vcvtsi2sdq 24(%rdi), %xmm15, %xmm03035; AVX512VL-NEXT:    vcvtsi2sdq 16(%rdi), %xmm15, %xmm13036; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0]3037; AVX512VL-NEXT:    vcvtsi2sdq 8(%rdi), %xmm15, %xmm13038; AVX512VL-NEXT:    vcvtsi2sdq (%rdi), %xmm15, %xmm23039; AVX512VL-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0]3040; AVX512VL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03041; AVX512VL-NEXT:    retq3042;3043; AVX512DQ-LABEL: sitofp_load_4i64_to_4f64:3044; AVX512DQ:       # %bb.0:3045; AVX512DQ-NEXT:    vmovaps (%rdi), %ymm03046; AVX512DQ-NEXT:    vcvtqq2pd %zmm0, %zmm03047; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm03048; AVX512DQ-NEXT:    retq3049;3050; AVX512VLDQ-LABEL: sitofp_load_4i64_to_4f64:3051; AVX512VLDQ:       # %bb.0:3052; AVX512VLDQ-NEXT:    vcvtqq2pd (%rdi), %ymm03053; AVX512VLDQ-NEXT:    retq3054  %ld = load <4 x i64>, ptr%a3055  %cvt = sitofp <4 x i64> %ld to <4 x double>3056  ret <4 x double> %cvt3057}3058 3059define <4 x double> @sitofp_load_4i32_to_4f64(ptr%a) {3060; SSE-LABEL: sitofp_load_4i32_to_4f64:3061; SSE:       # %bb.0:3062; SSE-NEXT:    movdqa (%rdi), %xmm13063; SSE-NEXT:    cvtdq2pd %xmm1, %xmm03064; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3065; SSE-NEXT:    cvtdq2pd %xmm1, %xmm13066; SSE-NEXT:    retq3067;3068; AVX-LABEL: sitofp_load_4i32_to_4f64:3069; AVX:       # %bb.0:3070; AVX-NEXT:    vcvtdq2pd (%rdi), %ymm03071; AVX-NEXT:    retq3072  %ld = load <4 x i32>, ptr%a3073  %cvt = sitofp <4 x i32> %ld to <4 x double>3074  ret <4 x double> %cvt3075}3076 3077define <4 x double> @sitofp_load_4i16_to_4f64(ptr%a) {3078; SSE2-LABEL: sitofp_load_4i16_to_4f64:3079; SSE2:       # %bb.0:3080; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero3081; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3082; SSE2-NEXT:    psrad $16, %xmm13083; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm03084; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3085; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm13086; SSE2-NEXT:    retq3087;3088; SSE41-LABEL: sitofp_load_4i16_to_4f64:3089; SSE41:       # %bb.0:3090; SSE41-NEXT:    pmovsxwd (%rdi), %xmm13091; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm03092; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3093; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm13094; SSE41-NEXT:    retq3095;3096; AVX-LABEL: sitofp_load_4i16_to_4f64:3097; AVX:       # %bb.0:3098; AVX-NEXT:    vpmovsxwd (%rdi), %xmm03099; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm03100; AVX-NEXT:    retq3101  %ld = load <4 x i16>, ptr%a3102  %cvt = sitofp <4 x i16> %ld to <4 x double>3103  ret <4 x double> %cvt3104}3105 3106define <4 x double> @sitofp_load_4i8_to_4f64(ptr%a) {3107; SSE2-LABEL: sitofp_load_4i8_to_4f64:3108; SSE2:       # %bb.0:3109; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3110; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3111; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3112; SSE2-NEXT:    psrad $24, %xmm13113; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm03114; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3115; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm13116; SSE2-NEXT:    retq3117;3118; SSE41-LABEL: sitofp_load_4i8_to_4f64:3119; SSE41:       # %bb.0:3120; SSE41-NEXT:    pmovsxbd (%rdi), %xmm13121; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm03122; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3123; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm13124; SSE41-NEXT:    retq3125;3126; AVX-LABEL: sitofp_load_4i8_to_4f64:3127; AVX:       # %bb.0:3128; AVX-NEXT:    vpmovsxbd (%rdi), %xmm03129; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm03130; AVX-NEXT:    retq3131  %ld = load <4 x i8>, ptr%a3132  %cvt = sitofp <4 x i8> %ld to <4 x double>3133  ret <4 x double> %cvt3134}3135 3136;3137; Load Unsigned Integer to Double3138;3139 3140define <2 x double> @uitofp_load_2i64_to_2f64(ptr%a) {3141; SSE2-LABEL: uitofp_load_2i64_to_2f64:3142; SSE2:       # %bb.0:3143; SSE2-NEXT:    movdqa (%rdi), %xmm03144; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [4294967295,4294967295]3145; SSE2-NEXT:    pand %xmm0, %xmm13146; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13147; SSE2-NEXT:    psrlq $32, %xmm03148; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03149; SSE2-NEXT:    subpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03150; SSE2-NEXT:    addpd %xmm1, %xmm03151; SSE2-NEXT:    retq3152;3153; SSE41-LABEL: uitofp_load_2i64_to_2f64:3154; SSE41:       # %bb.0:3155; SSE41-NEXT:    movdqa (%rdi), %xmm03156; SSE41-NEXT:    pxor %xmm1, %xmm13157; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]3158; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm13159; SSE41-NEXT:    psrlq $32, %xmm03160; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03161; SSE41-NEXT:    subpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm03162; SSE41-NEXT:    addpd %xmm1, %xmm03163; SSE41-NEXT:    retq3164;3165; AVX1-LABEL: uitofp_load_2i64_to_2f64:3166; AVX1:       # %bb.0:3167; AVX1-NEXT:    vmovdqa (%rdi), %xmm03168; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm13169; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]3170; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13171; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm03172; AVX1-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03173; AVX1-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03174; AVX1-NEXT:    vaddpd %xmm0, %xmm1, %xmm03175; AVX1-NEXT:    retq3176;3177; AVX2-LABEL: uitofp_load_2i64_to_2f64:3178; AVX2:       # %bb.0:3179; AVX2-NEXT:    vmovdqa (%rdi), %xmm03180; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm13181; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]3182; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13183; AVX2-NEXT:    vpsrlq $32, %xmm0, %xmm03184; AVX2-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03185; AVX2-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03186; AVX2-NEXT:    vaddpd %xmm0, %xmm1, %xmm03187; AVX2-NEXT:    retq3188;3189; AVX512F-LABEL: uitofp_load_2i64_to_2f64:3190; AVX512F:       # %bb.0:3191; AVX512F-NEXT:    vmovdqa (%rdi), %xmm03192; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm13193; AVX512F-NEXT:    vpblendd {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]3194; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm13195; AVX512F-NEXT:    vpsrlq $32, %xmm0, %xmm03196; AVX512F-NEXT:    vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03197; AVX512F-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm03198; AVX512F-NEXT:    vaddpd %xmm0, %xmm1, %xmm03199; AVX512F-NEXT:    retq3200;3201; AVX512VL-LABEL: uitofp_load_2i64_to_2f64:3202; AVX512VL:       # %bb.0:3203; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm03204; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm13205; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]3206; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm1, %xmm13207; AVX512VL-NEXT:    vpsrlq $32, %xmm0, %xmm03208; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm03209; AVX512VL-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm03210; AVX512VL-NEXT:    vaddpd %xmm0, %xmm1, %xmm03211; AVX512VL-NEXT:    retq3212;3213; AVX512DQ-LABEL: uitofp_load_2i64_to_2f64:3214; AVX512DQ:       # %bb.0:3215; AVX512DQ-NEXT:    vmovaps (%rdi), %xmm03216; AVX512DQ-NEXT:    vcvtuqq2pd %zmm0, %zmm03217; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03218; AVX512DQ-NEXT:    vzeroupper3219; AVX512DQ-NEXT:    retq3220;3221; AVX512VLDQ-LABEL: uitofp_load_2i64_to_2f64:3222; AVX512VLDQ:       # %bb.0:3223; AVX512VLDQ-NEXT:    vcvtuqq2pd (%rdi), %xmm03224; AVX512VLDQ-NEXT:    retq3225  %ld = load <2 x i64>, ptr%a3226  %cvt = uitofp <2 x i64> %ld to <2 x double>3227  ret <2 x double> %cvt3228}3229 3230define <2 x double> @uitofp_load_2i32_to_2f64(ptr%a) {3231; SSE2-LABEL: uitofp_load_2i32_to_2f64:3232; SSE2:       # %bb.0:3233; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero3234; SSE2-NEXT:    xorpd %xmm1, %xmm13235; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3236; SSE2-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3237; SSE2-NEXT:    orpd %xmm1, %xmm03238; SSE2-NEXT:    subpd %xmm1, %xmm03239; SSE2-NEXT:    retq3240;3241; SSE41-LABEL: uitofp_load_2i32_to_2f64:3242; SSE41:       # %bb.0:3243; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3244; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3245; SSE41-NEXT:    por %xmm1, %xmm03246; SSE41-NEXT:    subpd %xmm1, %xmm03247; SSE41-NEXT:    retq3248;3249; AVX1-LABEL: uitofp_load_2i32_to_2f64:3250; AVX1:       # %bb.0:3251; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3252; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3253; AVX1-NEXT:    # xmm1 = mem[0,0]3254; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm03255; AVX1-NEXT:    vsubpd %xmm1, %xmm0, %xmm03256; AVX1-NEXT:    retq3257;3258; AVX2-LABEL: uitofp_load_2i32_to_2f64:3259; AVX2:       # %bb.0:3260; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3261; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3262; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm03263; AVX2-NEXT:    vsubpd %xmm1, %xmm0, %xmm03264; AVX2-NEXT:    retq3265;3266; AVX512F-LABEL: uitofp_load_2i32_to_2f64:3267; AVX512F:       # %bb.0:3268; AVX512F-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3269; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm03270; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03271; AVX512F-NEXT:    vzeroupper3272; AVX512F-NEXT:    retq3273;3274; AVX512VL-LABEL: uitofp_load_2i32_to_2f64:3275; AVX512VL:       # %bb.0:3276; AVX512VL-NEXT:    vcvtudq2pd (%rdi), %xmm03277; AVX512VL-NEXT:    retq3278;3279; AVX512DQ-LABEL: uitofp_load_2i32_to_2f64:3280; AVX512DQ:       # %bb.0:3281; AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero3282; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm03283; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03284; AVX512DQ-NEXT:    vzeroupper3285; AVX512DQ-NEXT:    retq3286;3287; AVX512VLDQ-LABEL: uitofp_load_2i32_to_2f64:3288; AVX512VLDQ:       # %bb.0:3289; AVX512VLDQ-NEXT:    vcvtudq2pd (%rdi), %xmm03290; AVX512VLDQ-NEXT:    retq3291  %ld = load <2 x i32>, ptr%a3292  %cvt = uitofp <2 x i32> %ld to <2 x double>3293  ret <2 x double> %cvt3294}3295 3296define <2 x double> @uitofp_load_4i32_to_2f64_2(ptr %x) {3297; SSE2-LABEL: uitofp_load_4i32_to_2f64_2:3298; SSE2:       # %bb.0:3299; SSE2-NEXT:    movapd (%rdi), %xmm03300; SSE2-NEXT:    xorpd %xmm1, %xmm13301; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3302; SSE2-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3303; SSE2-NEXT:    orpd %xmm1, %xmm03304; SSE2-NEXT:    subpd %xmm1, %xmm03305; SSE2-NEXT:    retq3306;3307; SSE41-LABEL: uitofp_load_4i32_to_2f64_2:3308; SSE41:       # %bb.0:3309; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3310; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3311; SSE41-NEXT:    por %xmm1, %xmm03312; SSE41-NEXT:    subpd %xmm1, %xmm03313; SSE41-NEXT:    retq3314;3315; AVX1-LABEL: uitofp_load_4i32_to_2f64_2:3316; AVX1:       # %bb.0:3317; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3318; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3319; AVX1-NEXT:    # xmm1 = mem[0,0]3320; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm03321; AVX1-NEXT:    vsubpd %xmm1, %xmm0, %xmm03322; AVX1-NEXT:    retq3323;3324; AVX2-LABEL: uitofp_load_4i32_to_2f64_2:3325; AVX2:       # %bb.0:3326; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero3327; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3328; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm03329; AVX2-NEXT:    vsubpd %xmm1, %xmm0, %xmm03330; AVX2-NEXT:    vzeroupper3331; AVX2-NEXT:    retq3332;3333; AVX512F-LABEL: uitofp_load_4i32_to_2f64_2:3334; AVX512F:       # %bb.0:3335; AVX512F-NEXT:    vmovaps (%rdi), %xmm03336; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm03337; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03338; AVX512F-NEXT:    vzeroupper3339; AVX512F-NEXT:    retq3340;3341; AVX512VL-LABEL: uitofp_load_4i32_to_2f64_2:3342; AVX512VL:       # %bb.0:3343; AVX512VL-NEXT:    vcvtudq2pd (%rdi), %xmm03344; AVX512VL-NEXT:    retq3345;3346; AVX512DQ-LABEL: uitofp_load_4i32_to_2f64_2:3347; AVX512DQ:       # %bb.0:3348; AVX512DQ-NEXT:    vmovaps (%rdi), %xmm03349; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm03350; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03351; AVX512DQ-NEXT:    vzeroupper3352; AVX512DQ-NEXT:    retq3353;3354; AVX512VLDQ-LABEL: uitofp_load_4i32_to_2f64_2:3355; AVX512VLDQ:       # %bb.0:3356; AVX512VLDQ-NEXT:    vcvtudq2pd (%rdi), %xmm03357; AVX512VLDQ-NEXT:    retq3358  %a = load <4 x i32>, ptr %x3359  %b = uitofp <4 x i32> %a to <4 x double>3360  %c = shufflevector <4 x double> %b, <4 x double> undef, <2 x i32> <i32 0, i32 1>3361  ret <2 x double> %c3362}3363 3364define <2 x double> @uitofp_volatile_load_4i32_to_2f64_2(ptr %x) {3365; SSE2-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3366; SSE2:       # %bb.0:3367; SSE2-NEXT:    movapd (%rdi), %xmm03368; SSE2-NEXT:    xorpd %xmm1, %xmm13369; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]3370; SSE2-NEXT:    movapd {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3371; SSE2-NEXT:    orpd %xmm1, %xmm03372; SSE2-NEXT:    subpd %xmm1, %xmm03373; SSE2-NEXT:    retq3374;3375; SSE41-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3376; SSE41:       # %bb.0:3377; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3378; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3379; SSE41-NEXT:    por %xmm1, %xmm03380; SSE41-NEXT:    subpd %xmm1, %xmm03381; SSE41-NEXT:    retq3382;3383; AVX1-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3384; AVX1:       # %bb.0:3385; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = mem[0],zero,mem[1],zero3386; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3387; AVX1-NEXT:    # xmm1 = mem[0,0]3388; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm03389; AVX1-NEXT:    vsubpd %xmm1, %xmm0, %xmm03390; AVX1-NEXT:    retq3391;3392; AVX2-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3393; AVX2:       # %bb.0:3394; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero3395; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]3396; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm03397; AVX2-NEXT:    vsubpd %xmm1, %xmm0, %xmm03398; AVX2-NEXT:    vzeroupper3399; AVX2-NEXT:    retq3400;3401; AVX512F-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3402; AVX512F:       # %bb.0:3403; AVX512F-NEXT:    vmovaps (%rdi), %xmm03404; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm03405; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03406; AVX512F-NEXT:    vzeroupper3407; AVX512F-NEXT:    retq3408;3409; AVX512VL-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3410; AVX512VL:       # %bb.0:3411; AVX512VL-NEXT:    vmovaps (%rdi), %xmm03412; AVX512VL-NEXT:    vcvtudq2pd %xmm0, %xmm03413; AVX512VL-NEXT:    retq3414;3415; AVX512DQ-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3416; AVX512DQ:       # %bb.0:3417; AVX512DQ-NEXT:    vmovaps (%rdi), %xmm03418; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm03419; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm03420; AVX512DQ-NEXT:    vzeroupper3421; AVX512DQ-NEXT:    retq3422;3423; AVX512VLDQ-LABEL: uitofp_volatile_load_4i32_to_2f64_2:3424; AVX512VLDQ:       # %bb.0:3425; AVX512VLDQ-NEXT:    vmovaps (%rdi), %xmm03426; AVX512VLDQ-NEXT:    vcvtudq2pd %xmm0, %xmm03427; AVX512VLDQ-NEXT:    retq3428  %a = load volatile <4 x i32>, ptr %x3429  %b = uitofp <4 x i32> %a to <4 x double>3430  %c = shufflevector <4 x double> %b, <4 x double> undef, <2 x i32> <i32 0, i32 1>3431  ret <2 x double> %c3432}3433 3434define <2 x double> @uitofp_load_2i16_to_2f64(ptr%a) {3435; SSE2-LABEL: uitofp_load_2i16_to_2f64:3436; SSE2:       # %bb.0:3437; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3438; SSE2-NEXT:    pxor %xmm1, %xmm13439; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]3440; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm03441; SSE2-NEXT:    retq3442;3443; SSE41-LABEL: uitofp_load_2i16_to_2f64:3444; SSE41:       # %bb.0:3445; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3446; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero3447; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm03448; SSE41-NEXT:    retq3449;3450; AVX-LABEL: uitofp_load_2i16_to_2f64:3451; AVX:       # %bb.0:3452; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero3453; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero3454; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm03455; AVX-NEXT:    retq3456  %ld = load <2 x i16>, ptr%a3457  %cvt = uitofp <2 x i16> %ld to <2 x double>3458  ret <2 x double> %cvt3459}3460 3461define <2 x double> @uitofp_load_2i8_to_2f64(ptr%a) {3462; SSE2-LABEL: uitofp_load_2i8_to_2f64:3463; SSE2:       # %bb.0:3464; SSE2-NEXT:    movzwl (%rdi), %eax3465; SSE2-NEXT:    movd %eax, %xmm03466; SSE2-NEXT:    pxor %xmm1, %xmm13467; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]3468; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]3469; SSE2-NEXT:    cvtdq2pd %xmm0, %xmm03470; SSE2-NEXT:    retq3471;3472; SSE41-LABEL: uitofp_load_2i8_to_2f64:3473; SSE41:       # %bb.0:3474; SSE41-NEXT:    movzwl (%rdi), %eax3475; SSE41-NEXT:    movd %eax, %xmm03476; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3477; SSE41-NEXT:    cvtdq2pd %xmm0, %xmm03478; SSE41-NEXT:    retq3479;3480; AVX-LABEL: uitofp_load_2i8_to_2f64:3481; AVX:       # %bb.0:3482; AVX-NEXT:    movzwl (%rdi), %eax3483; AVX-NEXT:    vmovd %eax, %xmm03484; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3485; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm03486; AVX-NEXT:    retq3487  %ld = load <2 x i8>, ptr%a3488  %cvt = uitofp <2 x i8> %ld to <2 x double>3489  ret <2 x double> %cvt3490}3491 3492define <4 x double> @uitofp_load_4i64_to_4f64(ptr%a) {3493; SSE2-LABEL: uitofp_load_4i64_to_4f64:3494; SSE2:       # %bb.0:3495; SSE2-NEXT:    movdqa (%rdi), %xmm03496; SSE2-NEXT:    movdqa 16(%rdi), %xmm13497; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [4294967295,4294967295]3498; SSE2-NEXT:    movdqa %xmm0, %xmm33499; SSE2-NEXT:    pand %xmm2, %xmm33500; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]3501; SSE2-NEXT:    por %xmm4, %xmm33502; SSE2-NEXT:    psrlq $32, %xmm03503; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]3504; SSE2-NEXT:    por %xmm5, %xmm03505; SSE2-NEXT:    movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]3506; SSE2-NEXT:    subpd %xmm6, %xmm03507; SSE2-NEXT:    addpd %xmm3, %xmm03508; SSE2-NEXT:    pand %xmm1, %xmm23509; SSE2-NEXT:    por %xmm4, %xmm23510; SSE2-NEXT:    psrlq $32, %xmm13511; SSE2-NEXT:    por %xmm5, %xmm13512; SSE2-NEXT:    subpd %xmm6, %xmm13513; SSE2-NEXT:    addpd %xmm2, %xmm13514; SSE2-NEXT:    retq3515;3516; SSE41-LABEL: uitofp_load_4i64_to_4f64:3517; SSE41:       # %bb.0:3518; SSE41-NEXT:    movdqa (%rdi), %xmm03519; SSE41-NEXT:    movdqa 16(%rdi), %xmm13520; SSE41-NEXT:    pxor %xmm2, %xmm23521; SSE41-NEXT:    movdqa %xmm0, %xmm33522; SSE41-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm2[2,3],xmm3[4,5],xmm2[6,7]3523; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]3524; SSE41-NEXT:    por %xmm4, %xmm33525; SSE41-NEXT:    psrlq $32, %xmm03526; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]3527; SSE41-NEXT:    por %xmm5, %xmm03528; SSE41-NEXT:    movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]3529; SSE41-NEXT:    subpd %xmm6, %xmm03530; SSE41-NEXT:    addpd %xmm3, %xmm03531; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]3532; SSE41-NEXT:    por %xmm4, %xmm23533; SSE41-NEXT:    psrlq $32, %xmm13534; SSE41-NEXT:    por %xmm5, %xmm13535; SSE41-NEXT:    subpd %xmm6, %xmm13536; SSE41-NEXT:    addpd %xmm2, %xmm13537; SSE41-NEXT:    retq3538;3539; AVX1-LABEL: uitofp_load_4i64_to_4f64:3540; AVX1:       # %bb.0:3541; AVX1-NEXT:    vmovaps (%rdi), %ymm03542; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm13543; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]3544; AVX1-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm23545; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[1,3],ymm0[1,3],ymm1[5,7],ymm0[5,7]3546; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5]3547; AVX1-NEXT:    vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03548; AVX1-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm03549; AVX1-NEXT:    vaddpd %ymm0, %ymm2, %ymm03550; AVX1-NEXT:    retq3551;3552; AVX2-LABEL: uitofp_load_4i64_to_4f64:3553; AVX2:       # %bb.0:3554; AVX2-NEXT:    vmovdqa (%rdi), %ymm03555; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm13556; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]3557; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200]3558; AVX2-NEXT:    vpor %ymm2, %ymm1, %ymm13559; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm03560; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072]3561; AVX2-NEXT:    vpor %ymm2, %ymm0, %ymm03562; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25]3563; AVX2-NEXT:    vsubpd %ymm2, %ymm0, %ymm03564; AVX2-NEXT:    vaddpd %ymm0, %ymm1, %ymm03565; AVX2-NEXT:    retq3566;3567; AVX512F-LABEL: uitofp_load_4i64_to_4f64:3568; AVX512F:       # %bb.0:3569; AVX512F-NEXT:    vmovdqa (%rdi), %ymm03570; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm13571; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]3572; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4841369599423283200,4841369599423283200,4841369599423283200,4841369599423283200]3573; AVX512F-NEXT:    vpor %ymm2, %ymm1, %ymm13574; AVX512F-NEXT:    vpsrlq $32, %ymm0, %ymm03575; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4985484787499139072,4985484787499139072,4985484787499139072,4985484787499139072]3576; AVX512F-NEXT:    vpor %ymm2, %ymm0, %ymm03577; AVX512F-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25,1.9342813118337666E+25]3578; AVX512F-NEXT:    vsubpd %ymm2, %ymm0, %ymm03579; AVX512F-NEXT:    vaddpd %ymm0, %ymm1, %ymm03580; AVX512F-NEXT:    retq3581;3582; AVX512VL-LABEL: uitofp_load_4i64_to_4f64:3583; AVX512VL:       # %bb.0:3584; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm03585; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm13586; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]3587; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm1, %ymm13588; AVX512VL-NEXT:    vpsrlq $32, %ymm0, %ymm03589; AVX512VL-NEXT:    vporq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm03590; AVX512VL-NEXT:    vsubpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm03591; AVX512VL-NEXT:    vaddpd %ymm0, %ymm1, %ymm03592; AVX512VL-NEXT:    retq3593;3594; AVX512DQ-LABEL: uitofp_load_4i64_to_4f64:3595; AVX512DQ:       # %bb.0:3596; AVX512DQ-NEXT:    vmovaps (%rdi), %ymm03597; AVX512DQ-NEXT:    vcvtuqq2pd %zmm0, %zmm03598; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm03599; AVX512DQ-NEXT:    retq3600;3601; AVX512VLDQ-LABEL: uitofp_load_4i64_to_4f64:3602; AVX512VLDQ:       # %bb.0:3603; AVX512VLDQ-NEXT:    vcvtuqq2pd (%rdi), %ymm03604; AVX512VLDQ-NEXT:    retq3605  %ld = load <4 x i64>, ptr%a3606  %cvt = uitofp <4 x i64> %ld to <4 x double>3607  ret <4 x double> %cvt3608}3609 3610define <4 x double> @uitofp_load_4i32_to_4f64(ptr%a) {3611; SSE2-LABEL: uitofp_load_4i32_to_4f64:3612; SSE2:       # %bb.0:3613; SSE2-NEXT:    movapd (%rdi), %xmm13614; SSE2-NEXT:    xorpd %xmm2, %xmm23615; SSE2-NEXT:    movapd %xmm1, %xmm03616; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]3617; SSE2-NEXT:    movapd {{.*#+}} xmm3 = [4.503599627370496E+15,4.503599627370496E+15]3618; SSE2-NEXT:    orpd %xmm3, %xmm03619; SSE2-NEXT:    subpd %xmm3, %xmm03620; SSE2-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]3621; SSE2-NEXT:    orpd %xmm3, %xmm13622; SSE2-NEXT:    subpd %xmm3, %xmm13623; SSE2-NEXT:    retq3624;3625; SSE41-LABEL: uitofp_load_4i32_to_4f64:3626; SSE41:       # %bb.0:3627; SSE41-NEXT:    movdqa (%rdi), %xmm13628; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero3629; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [4.503599627370496E+15,4.503599627370496E+15]3630; SSE41-NEXT:    por %xmm2, %xmm03631; SSE41-NEXT:    subpd %xmm2, %xmm03632; SSE41-NEXT:    pxor %xmm3, %xmm33633; SSE41-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]3634; SSE41-NEXT:    por %xmm2, %xmm13635; SSE41-NEXT:    subpd %xmm2, %xmm13636; SSE41-NEXT:    retq3637;3638; AVX1-LABEL: uitofp_load_4i32_to_4f64:3639; AVX1:       # %bb.0:3640; AVX1-NEXT:    vmovdqa (%rdi), %xmm03641; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm13642; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3643; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero3644; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03645; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm1 = [4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15]3646; AVX1-NEXT:    vorpd %ymm1, %ymm0, %ymm03647; AVX1-NEXT:    vsubpd %ymm1, %ymm0, %ymm03648; AVX1-NEXT:    retq3649;3650; AVX2-LABEL: uitofp_load_4i32_to_4f64:3651; AVX2:       # %bb.0:3652; AVX2-NEXT:    vpmovzxdq {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero3653; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15,4.503599627370496E+15]3654; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm03655; AVX2-NEXT:    vsubpd %ymm1, %ymm0, %ymm03656; AVX2-NEXT:    retq3657;3658; AVX512F-LABEL: uitofp_load_4i32_to_4f64:3659; AVX512F:       # %bb.0:3660; AVX512F-NEXT:    vmovaps (%rdi), %xmm03661; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm03662; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm03663; AVX512F-NEXT:    retq3664;3665; AVX512VL-LABEL: uitofp_load_4i32_to_4f64:3666; AVX512VL:       # %bb.0:3667; AVX512VL-NEXT:    vcvtudq2pd (%rdi), %ymm03668; AVX512VL-NEXT:    retq3669;3670; AVX512DQ-LABEL: uitofp_load_4i32_to_4f64:3671; AVX512DQ:       # %bb.0:3672; AVX512DQ-NEXT:    vmovaps (%rdi), %xmm03673; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm03674; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm03675; AVX512DQ-NEXT:    retq3676;3677; AVX512VLDQ-LABEL: uitofp_load_4i32_to_4f64:3678; AVX512VLDQ:       # %bb.0:3679; AVX512VLDQ-NEXT:    vcvtudq2pd (%rdi), %ymm03680; AVX512VLDQ-NEXT:    retq3681  %ld = load <4 x i32>, ptr%a3682  %cvt = uitofp <4 x i32> %ld to <4 x double>3683  ret <4 x double> %cvt3684}3685 3686define <4 x double> @uitofp_load_4i16_to_4f64(ptr%a) {3687; SSE2-LABEL: uitofp_load_4i16_to_4f64:3688; SSE2:       # %bb.0:3689; SSE2-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero3690; SSE2-NEXT:    pxor %xmm0, %xmm03691; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3692; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm03693; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3694; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm13695; SSE2-NEXT:    retq3696;3697; SSE41-LABEL: uitofp_load_4i16_to_4f64:3698; SSE41:       # %bb.0:3699; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero3700; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm03701; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3702; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm13703; SSE41-NEXT:    retq3704;3705; AVX-LABEL: uitofp_load_4i16_to_4f64:3706; AVX:       # %bb.0:3707; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero3708; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm03709; AVX-NEXT:    retq3710  %ld = load <4 x i16>, ptr%a3711  %cvt = uitofp <4 x i16> %ld to <4 x double>3712  ret <4 x double> %cvt3713}3714 3715define <4 x double> @uitofp_load_4i8_to_4f64(ptr%a) {3716; SSE2-LABEL: uitofp_load_4i8_to_4f64:3717; SSE2:       # %bb.0:3718; SSE2-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero3719; SSE2-NEXT:    pxor %xmm0, %xmm03720; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]3721; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]3722; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm03723; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3724; SSE2-NEXT:    cvtdq2pd %xmm1, %xmm13725; SSE2-NEXT:    retq3726;3727; SSE41-LABEL: uitofp_load_4i8_to_4f64:3728; SSE41:       # %bb.0:3729; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero3730; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm03731; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]3732; SSE41-NEXT:    cvtdq2pd %xmm1, %xmm13733; SSE41-NEXT:    retq3734;3735; AVX-LABEL: uitofp_load_4i8_to_4f64:3736; AVX:       # %bb.0:3737; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero3738; AVX-NEXT:    vcvtdq2pd %xmm0, %ymm03739; AVX-NEXT:    retq3740  %ld = load <4 x i8>, ptr%a3741  %cvt = uitofp <4 x i8> %ld to <4 x double>3742  ret <4 x double> %cvt3743}3744 3745;3746; Load Signed Integer to Float3747;3748 3749define <4 x float> @sitofp_load_4i64_to_4f32(ptr%a) {3750; SSE2-LABEL: sitofp_load_4i64_to_4f32:3751; SSE2:       # %bb.0:3752; SSE2-NEXT:    cvtsi2ssq 24(%rdi), %xmm03753; SSE2-NEXT:    cvtsi2ssq 16(%rdi), %xmm13754; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]3755; SSE2-NEXT:    cvtsi2ssq 8(%rdi), %xmm23756; SSE2-NEXT:    xorps %xmm0, %xmm03757; SSE2-NEXT:    cvtsi2ssq (%rdi), %xmm03758; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]3759; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]3760; SSE2-NEXT:    retq3761;3762; SSE41-LABEL: sitofp_load_4i64_to_4f32:3763; SSE41:       # %bb.0:3764; SSE41-NEXT:    cvtsi2ssq 8(%rdi), %xmm13765; SSE41-NEXT:    cvtsi2ssq (%rdi), %xmm03766; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]3767; SSE41-NEXT:    xorps %xmm1, %xmm13768; SSE41-NEXT:    cvtsi2ssq 16(%rdi), %xmm13769; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3770; SSE41-NEXT:    xorps %xmm1, %xmm13771; SSE41-NEXT:    cvtsi2ssq 24(%rdi), %xmm13772; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3773; SSE41-NEXT:    retq3774;3775; VEX-LABEL: sitofp_load_4i64_to_4f32:3776; VEX:       # %bb.0:3777; VEX-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm03778; VEX-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm13779; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]3780; VEX-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm13781; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3782; VEX-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm13783; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3784; VEX-NEXT:    retq3785;3786; AVX512F-LABEL: sitofp_load_4i64_to_4f32:3787; AVX512F:       # %bb.0:3788; AVX512F-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm03789; AVX512F-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm13790; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]3791; AVX512F-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm13792; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3793; AVX512F-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm13794; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3795; AVX512F-NEXT:    retq3796;3797; AVX512VL-LABEL: sitofp_load_4i64_to_4f32:3798; AVX512VL:       # %bb.0:3799; AVX512VL-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm03800; AVX512VL-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm13801; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]3802; AVX512VL-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm13803; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3804; AVX512VL-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm13805; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3806; AVX512VL-NEXT:    retq3807;3808; AVX512DQ-LABEL: sitofp_load_4i64_to_4f32:3809; AVX512DQ:       # %bb.0:3810; AVX512DQ-NEXT:    vmovaps (%rdi), %ymm03811; AVX512DQ-NEXT:    vcvtqq2ps %zmm0, %ymm03812; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm03813; AVX512DQ-NEXT:    vzeroupper3814; AVX512DQ-NEXT:    retq3815;3816; AVX512VLDQ-LABEL: sitofp_load_4i64_to_4f32:3817; AVX512VLDQ:       # %bb.0:3818; AVX512VLDQ-NEXT:    vcvtqq2psy (%rdi), %xmm03819; AVX512VLDQ-NEXT:    retq3820  %ld = load <4 x i64>, ptr%a3821  %cvt = sitofp <4 x i64> %ld to <4 x float>3822  ret <4 x float> %cvt3823}3824 3825define <4 x float> @sitofp_load_4i32_to_4f32(ptr%a) {3826; SSE-LABEL: sitofp_load_4i32_to_4f32:3827; SSE:       # %bb.0:3828; SSE-NEXT:    cvtdq2ps (%rdi), %xmm03829; SSE-NEXT:    retq3830;3831; AVX-LABEL: sitofp_load_4i32_to_4f32:3832; AVX:       # %bb.0:3833; AVX-NEXT:    vcvtdq2ps (%rdi), %xmm03834; AVX-NEXT:    retq3835  %ld = load <4 x i32>, ptr%a3836  %cvt = sitofp <4 x i32> %ld to <4 x float>3837  ret <4 x float> %cvt3838}3839 3840define <4 x float> @sitofp_load_4i16_to_4f32(ptr%a) {3841; SSE2-LABEL: sitofp_load_4i16_to_4f32:3842; SSE2:       # %bb.0:3843; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero3844; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]3845; SSE2-NEXT:    psrad $16, %xmm03846; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm03847; SSE2-NEXT:    retq3848;3849; SSE41-LABEL: sitofp_load_4i16_to_4f32:3850; SSE41:       # %bb.0:3851; SSE41-NEXT:    pmovsxwd (%rdi), %xmm03852; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm03853; SSE41-NEXT:    retq3854;3855; AVX-LABEL: sitofp_load_4i16_to_4f32:3856; AVX:       # %bb.0:3857; AVX-NEXT:    vpmovsxwd (%rdi), %xmm03858; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm03859; AVX-NEXT:    retq3860  %ld = load <4 x i16>, ptr%a3861  %cvt = sitofp <4 x i16> %ld to <4 x float>3862  ret <4 x float> %cvt3863}3864 3865define <4 x float> @sitofp_load_4i8_to_4f32(ptr%a) {3866; SSE2-LABEL: sitofp_load_4i8_to_4f32:3867; SSE2:       # %bb.0:3868; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero3869; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]3870; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]3871; SSE2-NEXT:    psrad $24, %xmm03872; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm03873; SSE2-NEXT:    retq3874;3875; SSE41-LABEL: sitofp_load_4i8_to_4f32:3876; SSE41:       # %bb.0:3877; SSE41-NEXT:    pmovsxbd (%rdi), %xmm03878; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm03879; SSE41-NEXT:    retq3880;3881; AVX-LABEL: sitofp_load_4i8_to_4f32:3882; AVX:       # %bb.0:3883; AVX-NEXT:    vpmovsxbd (%rdi), %xmm03884; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm03885; AVX-NEXT:    retq3886  %ld = load <4 x i8>, ptr%a3887  %cvt = sitofp <4 x i8> %ld to <4 x float>3888  ret <4 x float> %cvt3889}3890 3891define <8 x float> @sitofp_load_8i64_to_8f32(ptr%a) {3892; SSE2-LABEL: sitofp_load_8i64_to_8f32:3893; SSE2:       # %bb.0:3894; SSE2-NEXT:    cvtsi2ssq 24(%rdi), %xmm03895; SSE2-NEXT:    cvtsi2ssq 16(%rdi), %xmm13896; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]3897; SSE2-NEXT:    cvtsi2ssq 8(%rdi), %xmm23898; SSE2-NEXT:    xorps %xmm0, %xmm03899; SSE2-NEXT:    cvtsi2ssq (%rdi), %xmm03900; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]3901; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]3902; SSE2-NEXT:    xorps %xmm1, %xmm13903; SSE2-NEXT:    cvtsi2ssq 56(%rdi), %xmm13904; SSE2-NEXT:    xorps %xmm2, %xmm23905; SSE2-NEXT:    cvtsi2ssq 48(%rdi), %xmm23906; SSE2-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]3907; SSE2-NEXT:    cvtsi2ssq 40(%rdi), %xmm33908; SSE2-NEXT:    xorps %xmm1, %xmm13909; SSE2-NEXT:    cvtsi2ssq 32(%rdi), %xmm13910; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]3911; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]3912; SSE2-NEXT:    retq3913;3914; SSE41-LABEL: sitofp_load_8i64_to_8f32:3915; SSE41:       # %bb.0:3916; SSE41-NEXT:    cvtsi2ssq 8(%rdi), %xmm13917; SSE41-NEXT:    cvtsi2ssq (%rdi), %xmm03918; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]3919; SSE41-NEXT:    xorps %xmm1, %xmm13920; SSE41-NEXT:    cvtsi2ssq 16(%rdi), %xmm13921; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3922; SSE41-NEXT:    xorps %xmm1, %xmm13923; SSE41-NEXT:    cvtsi2ssq 24(%rdi), %xmm13924; SSE41-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3925; SSE41-NEXT:    cvtsi2ssq 40(%rdi), %xmm23926; SSE41-NEXT:    xorps %xmm1, %xmm13927; SSE41-NEXT:    cvtsi2ssq 32(%rdi), %xmm13928; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]3929; SSE41-NEXT:    xorps %xmm2, %xmm23930; SSE41-NEXT:    cvtsi2ssq 48(%rdi), %xmm23931; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]3932; SSE41-NEXT:    xorps %xmm2, %xmm23933; SSE41-NEXT:    cvtsi2ssq 56(%rdi), %xmm23934; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]3935; SSE41-NEXT:    retq3936;3937; VEX-LABEL: sitofp_load_8i64_to_8f32:3938; VEX:       # %bb.0:3939; VEX-NEXT:    vcvtsi2ssq 40(%rdi), %xmm15, %xmm03940; VEX-NEXT:    vcvtsi2ssq 32(%rdi), %xmm15, %xmm13941; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]3942; VEX-NEXT:    vcvtsi2ssq 48(%rdi), %xmm15, %xmm13943; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3944; VEX-NEXT:    vcvtsi2ssq 56(%rdi), %xmm15, %xmm13945; VEX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3946; VEX-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm13947; VEX-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm23948; VEX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]3949; VEX-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm23950; VEX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]3951; VEX-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm23952; VEX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]3953; VEX-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03954; VEX-NEXT:    retq3955;3956; AVX512F-LABEL: sitofp_load_8i64_to_8f32:3957; AVX512F:       # %bb.0:3958; AVX512F-NEXT:    vcvtsi2ssq 40(%rdi), %xmm15, %xmm03959; AVX512F-NEXT:    vcvtsi2ssq 32(%rdi), %xmm15, %xmm13960; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]3961; AVX512F-NEXT:    vcvtsi2ssq 48(%rdi), %xmm15, %xmm13962; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3963; AVX512F-NEXT:    vcvtsi2ssq 56(%rdi), %xmm15, %xmm13964; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3965; AVX512F-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm13966; AVX512F-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm23967; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]3968; AVX512F-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm23969; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]3970; AVX512F-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm23971; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]3972; AVX512F-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03973; AVX512F-NEXT:    retq3974;3975; AVX512VL-LABEL: sitofp_load_8i64_to_8f32:3976; AVX512VL:       # %bb.0:3977; AVX512VL-NEXT:    vcvtsi2ssq 40(%rdi), %xmm15, %xmm03978; AVX512VL-NEXT:    vcvtsi2ssq 32(%rdi), %xmm15, %xmm13979; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]3980; AVX512VL-NEXT:    vcvtsi2ssq 48(%rdi), %xmm15, %xmm13981; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]3982; AVX512VL-NEXT:    vcvtsi2ssq 56(%rdi), %xmm15, %xmm13983; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]3984; AVX512VL-NEXT:    vcvtsi2ssq 8(%rdi), %xmm15, %xmm13985; AVX512VL-NEXT:    vcvtsi2ssq (%rdi), %xmm15, %xmm23986; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]3987; AVX512VL-NEXT:    vcvtsi2ssq 16(%rdi), %xmm15, %xmm23988; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]3989; AVX512VL-NEXT:    vcvtsi2ssq 24(%rdi), %xmm15, %xmm23990; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]3991; AVX512VL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03992; AVX512VL-NEXT:    retq3993;3994; AVX512DQ-LABEL: sitofp_load_8i64_to_8f32:3995; AVX512DQ:       # %bb.0:3996; AVX512DQ-NEXT:    vcvtqq2ps (%rdi), %ymm03997; AVX512DQ-NEXT:    retq3998;3999; AVX512VLDQ-LABEL: sitofp_load_8i64_to_8f32:4000; AVX512VLDQ:       # %bb.0:4001; AVX512VLDQ-NEXT:    vcvtqq2ps (%rdi), %ymm04002; AVX512VLDQ-NEXT:    retq4003  %ld = load <8 x i64>, ptr%a4004  %cvt = sitofp <8 x i64> %ld to <8 x float>4005  ret <8 x float> %cvt4006}4007 4008define <8 x float> @sitofp_load_8i32_to_8f32(ptr%a) {4009; SSE-LABEL: sitofp_load_8i32_to_8f32:4010; SSE:       # %bb.0:4011; SSE-NEXT:    cvtdq2ps (%rdi), %xmm04012; SSE-NEXT:    cvtdq2ps 16(%rdi), %xmm14013; SSE-NEXT:    retq4014;4015; AVX-LABEL: sitofp_load_8i32_to_8f32:4016; AVX:       # %bb.0:4017; AVX-NEXT:    vcvtdq2ps (%rdi), %ymm04018; AVX-NEXT:    retq4019  %ld = load <8 x i32>, ptr%a4020  %cvt = sitofp <8 x i32> %ld to <8 x float>4021  ret <8 x float> %cvt4022}4023 4024define <8 x float> @sitofp_load_8i16_to_8f32(ptr%a) {4025; SSE2-LABEL: sitofp_load_8i16_to_8f32:4026; SSE2:       # %bb.0:4027; SSE2-NEXT:    movdqa (%rdi), %xmm14028; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]4029; SSE2-NEXT:    psrad $16, %xmm04030; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm04031; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]4032; SSE2-NEXT:    psrad $16, %xmm14033; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm14034; SSE2-NEXT:    retq4035;4036; SSE41-LABEL: sitofp_load_8i16_to_8f32:4037; SSE41:       # %bb.0:4038; SSE41-NEXT:    pmovsxwd 8(%rdi), %xmm14039; SSE41-NEXT:    pmovsxwd (%rdi), %xmm04040; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm04041; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm14042; SSE41-NEXT:    retq4043;4044; AVX1-LABEL: sitofp_load_8i16_to_8f32:4045; AVX1:       # %bb.0:4046; AVX1-NEXT:    vpmovsxwd 8(%rdi), %xmm04047; AVX1-NEXT:    vpmovsxwd (%rdi), %xmm14048; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm04049; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm04050; AVX1-NEXT:    retq4051;4052; AVX2-LABEL: sitofp_load_8i16_to_8f32:4053; AVX2:       # %bb.0:4054; AVX2-NEXT:    vpmovsxwd (%rdi), %ymm04055; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm04056; AVX2-NEXT:    retq4057;4058; AVX512-LABEL: sitofp_load_8i16_to_8f32:4059; AVX512:       # %bb.0:4060; AVX512-NEXT:    vpmovsxwd (%rdi), %ymm04061; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm04062; AVX512-NEXT:    retq4063  %ld = load <8 x i16>, ptr%a4064  %cvt = sitofp <8 x i16> %ld to <8 x float>4065  ret <8 x float> %cvt4066}4067 4068define <8 x float> @sitofp_load_8i8_to_8f32(ptr%a) {4069; SSE2-LABEL: sitofp_load_8i8_to_8f32:4070; SSE2:       # %bb.0:4071; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero4072; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]4073; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]4074; SSE2-NEXT:    psrad $24, %xmm04075; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm04076; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]4077; SSE2-NEXT:    psrad $24, %xmm14078; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm14079; SSE2-NEXT:    retq4080;4081; SSE41-LABEL: sitofp_load_8i8_to_8f32:4082; SSE41:       # %bb.0:4083; SSE41-NEXT:    pmovsxbd 4(%rdi), %xmm14084; SSE41-NEXT:    pmovsxbd (%rdi), %xmm04085; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm04086; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm14087; SSE41-NEXT:    retq4088;4089; AVX1-LABEL: sitofp_load_8i8_to_8f32:4090; AVX1:       # %bb.0:4091; AVX1-NEXT:    vpmovsxbd 4(%rdi), %xmm04092; AVX1-NEXT:    vpmovsxbd (%rdi), %xmm14093; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm04094; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm04095; AVX1-NEXT:    retq4096;4097; AVX2-LABEL: sitofp_load_8i8_to_8f32:4098; AVX2:       # %bb.0:4099; AVX2-NEXT:    vpmovsxbd (%rdi), %ymm04100; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm04101; AVX2-NEXT:    retq4102;4103; AVX512-LABEL: sitofp_load_8i8_to_8f32:4104; AVX512:       # %bb.0:4105; AVX512-NEXT:    vpmovsxbd (%rdi), %ymm04106; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm04107; AVX512-NEXT:    retq4108  %ld = load <8 x i8>, ptr%a4109  %cvt = sitofp <8 x i8> %ld to <8 x float>4110  ret <8 x float> %cvt4111}4112 4113;4114; Load Unsigned Integer to Float4115;4116 4117define <4 x float> @uitofp_load_4i64_to_4f32(ptr%a) {4118; SSE2-LABEL: uitofp_load_4i64_to_4f32:4119; SSE2:       # %bb.0:4120; SSE2-NEXT:    movq 24(%rdi), %rax4121; SSE2-NEXT:    testq %rax, %rax4122; SSE2-NEXT:    js .LBB83_14123; SSE2-NEXT:  # %bb.2:4124; SSE2-NEXT:    cvtsi2ss %rax, %xmm04125; SSE2-NEXT:    jmp .LBB83_34126; SSE2-NEXT:  .LBB83_1:4127; SSE2-NEXT:    movq %rax, %rcx4128; SSE2-NEXT:    shrq %rcx4129; SSE2-NEXT:    andl $1, %eax4130; SSE2-NEXT:    orq %rcx, %rax4131; SSE2-NEXT:    cvtsi2ss %rax, %xmm04132; SSE2-NEXT:    addss %xmm0, %xmm04133; SSE2-NEXT:  .LBB83_3:4134; SSE2-NEXT:    movq 16(%rdi), %rax4135; SSE2-NEXT:    testq %rax, %rax4136; SSE2-NEXT:    js .LBB83_44137; SSE2-NEXT:  # %bb.5:4138; SSE2-NEXT:    cvtsi2ss %rax, %xmm14139; SSE2-NEXT:    jmp .LBB83_64140; SSE2-NEXT:  .LBB83_4:4141; SSE2-NEXT:    movq %rax, %rcx4142; SSE2-NEXT:    shrq %rcx4143; SSE2-NEXT:    andl $1, %eax4144; SSE2-NEXT:    orq %rcx, %rax4145; SSE2-NEXT:    cvtsi2ss %rax, %xmm14146; SSE2-NEXT:    addss %xmm1, %xmm14147; SSE2-NEXT:  .LBB83_6:4148; SSE2-NEXT:    movq (%rdi), %rax4149; SSE2-NEXT:    movq 8(%rdi), %rcx4150; SSE2-NEXT:    testq %rcx, %rcx4151; SSE2-NEXT:    js .LBB83_74152; SSE2-NEXT:  # %bb.8:4153; SSE2-NEXT:    cvtsi2ss %rcx, %xmm24154; SSE2-NEXT:    jmp .LBB83_94155; SSE2-NEXT:  .LBB83_7:4156; SSE2-NEXT:    movq %rcx, %rdx4157; SSE2-NEXT:    shrq %rdx4158; SSE2-NEXT:    andl $1, %ecx4159; SSE2-NEXT:    orq %rdx, %rcx4160; SSE2-NEXT:    cvtsi2ss %rcx, %xmm24161; SSE2-NEXT:    addss %xmm2, %xmm24162; SSE2-NEXT:  .LBB83_9:4163; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]4164; SSE2-NEXT:    testq %rax, %rax4165; SSE2-NEXT:    js .LBB83_104166; SSE2-NEXT:  # %bb.11:4167; SSE2-NEXT:    xorps %xmm0, %xmm04168; SSE2-NEXT:    cvtsi2ss %rax, %xmm04169; SSE2-NEXT:    jmp .LBB83_124170; SSE2-NEXT:  .LBB83_10:4171; SSE2-NEXT:    movq %rax, %rcx4172; SSE2-NEXT:    shrq %rcx4173; SSE2-NEXT:    andl $1, %eax4174; SSE2-NEXT:    orq %rcx, %rax4175; SSE2-NEXT:    xorps %xmm0, %xmm04176; SSE2-NEXT:    cvtsi2ss %rax, %xmm04177; SSE2-NEXT:    addss %xmm0, %xmm04178; SSE2-NEXT:  .LBB83_12:4179; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]4180; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]4181; SSE2-NEXT:    retq4182;4183; SSE41-LABEL: uitofp_load_4i64_to_4f32:4184; SSE41:       # %bb.0:4185; SSE41-NEXT:    movdqa (%rdi), %xmm14186; SSE41-NEXT:    movdqa 16(%rdi), %xmm24187; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm4 = [1,1]4188; SSE41-NEXT:    movdqa %xmm1, %xmm04189; SSE41-NEXT:    pand %xmm4, %xmm04190; SSE41-NEXT:    movdqa %xmm1, %xmm34191; SSE41-NEXT:    psrlq $1, %xmm34192; SSE41-NEXT:    por %xmm0, %xmm34193; SSE41-NEXT:    movdqa %xmm1, %xmm54194; SSE41-NEXT:    movdqa %xmm1, %xmm04195; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm54196; SSE41-NEXT:    pextrq $1, %xmm5, %rax4197; SSE41-NEXT:    xorps %xmm0, %xmm04198; SSE41-NEXT:    cvtsi2ss %rax, %xmm04199; SSE41-NEXT:    movq %xmm5, %rax4200; SSE41-NEXT:    xorps %xmm3, %xmm34201; SSE41-NEXT:    cvtsi2ss %rax, %xmm34202; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[2,3]4203; SSE41-NEXT:    pand %xmm2, %xmm44204; SSE41-NEXT:    movdqa %xmm2, %xmm54205; SSE41-NEXT:    psrlq $1, %xmm54206; SSE41-NEXT:    por %xmm4, %xmm54207; SSE41-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,3],xmm2[1,3]4208; SSE41-NEXT:    movaps %xmm2, %xmm04209; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm24210; SSE41-NEXT:    movq %xmm2, %rax4211; SSE41-NEXT:    xorps %xmm0, %xmm04212; SSE41-NEXT:    cvtsi2ss %rax, %xmm04213; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1],xmm0[0],xmm3[3]4214; SSE41-NEXT:    pextrq $1, %xmm2, %rax4215; SSE41-NEXT:    xorps %xmm0, %xmm04216; SSE41-NEXT:    cvtsi2ss %rax, %xmm04217; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1,2],xmm0[0]4218; SSE41-NEXT:    movaps %xmm3, %xmm24219; SSE41-NEXT:    addps %xmm3, %xmm24220; SSE41-NEXT:    movaps %xmm1, %xmm04221; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm34222; SSE41-NEXT:    movaps %xmm3, %xmm04223; SSE41-NEXT:    retq4224;4225; AVX1-LABEL: uitofp_load_4i64_to_4f32:4226; AVX1:       # %bb.0:4227; AVX1-NEXT:    vmovdqa (%rdi), %ymm04228; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm14229; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm24230; AVX1-NEXT:    vpsrlq $1, %xmm2, %xmm34231; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm14232; AVX1-NEXT:    vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm34233; AVX1-NEXT:    vorpd %ymm3, %ymm1, %ymm14234; AVX1-NEXT:    vblendvpd %ymm0, %ymm1, %ymm0, %ymm14235; AVX1-NEXT:    vpextrq $1, %xmm1, %rax4236; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34237; AVX1-NEXT:    vmovq %xmm1, %rax4238; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm44239; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]4240; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm14241; AVX1-NEXT:    vmovq %xmm1, %rax4242; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm44243; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]4244; AVX1-NEXT:    vpextrq $1, %xmm1, %rax4245; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm14246; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm3[0,1,2],xmm1[0]4247; AVX1-NEXT:    vaddps %xmm1, %xmm1, %xmm34248; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm04249; AVX1-NEXT:    vblendvps %xmm0, %xmm3, %xmm1, %xmm04250; AVX1-NEXT:    vzeroupper4251; AVX1-NEXT:    retq4252;4253; AVX2-LABEL: uitofp_load_4i64_to_4f32:4254; AVX2:       # %bb.0:4255; AVX2-NEXT:    vmovdqa (%rdi), %ymm04256; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [1,1,1,1]4257; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm14258; AVX2-NEXT:    vpsrlq $1, %ymm0, %ymm24259; AVX2-NEXT:    vpor %ymm1, %ymm2, %ymm14260; AVX2-NEXT:    vblendvpd %ymm0, %ymm1, %ymm0, %ymm14261; AVX2-NEXT:    vpextrq $1, %xmm1, %rax4262; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm24263; AVX2-NEXT:    vmovq %xmm1, %rax4264; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34265; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]4266; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm14267; AVX2-NEXT:    vmovq %xmm1, %rax4268; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34269; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]4270; AVX2-NEXT:    vpextrq $1, %xmm1, %rax4271; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm14272; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1,2],xmm1[0]4273; AVX2-NEXT:    vaddps %xmm1, %xmm1, %xmm24274; AVX2-NEXT:    vpackssdw 16(%rdi), %xmm0, %xmm04275; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm04276; AVX2-NEXT:    vzeroupper4277; AVX2-NEXT:    retq4278;4279; AVX512F-LABEL: uitofp_load_4i64_to_4f32:4280; AVX512F:       # %bb.0:4281; AVX512F-NEXT:    vcvtusi2ssq 8(%rdi), %xmm15, %xmm04282; AVX512F-NEXT:    vcvtusi2ssq (%rdi), %xmm15, %xmm14283; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]4284; AVX512F-NEXT:    vcvtusi2ssq 16(%rdi), %xmm15, %xmm14285; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]4286; AVX512F-NEXT:    vcvtusi2ssq 24(%rdi), %xmm15, %xmm14287; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]4288; AVX512F-NEXT:    retq4289;4290; AVX512VL-LABEL: uitofp_load_4i64_to_4f32:4291; AVX512VL:       # %bb.0:4292; AVX512VL-NEXT:    vcvtusi2ssq 8(%rdi), %xmm15, %xmm04293; AVX512VL-NEXT:    vcvtusi2ssq (%rdi), %xmm15, %xmm14294; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]4295; AVX512VL-NEXT:    vcvtusi2ssq 16(%rdi), %xmm15, %xmm14296; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]4297; AVX512VL-NEXT:    vcvtusi2ssq 24(%rdi), %xmm15, %xmm14298; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]4299; AVX512VL-NEXT:    retq4300;4301; AVX512DQ-LABEL: uitofp_load_4i64_to_4f32:4302; AVX512DQ:       # %bb.0:4303; AVX512DQ-NEXT:    vmovaps (%rdi), %ymm04304; AVX512DQ-NEXT:    vcvtuqq2ps %zmm0, %ymm04305; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm04306; AVX512DQ-NEXT:    vzeroupper4307; AVX512DQ-NEXT:    retq4308;4309; AVX512VLDQ-LABEL: uitofp_load_4i64_to_4f32:4310; AVX512VLDQ:       # %bb.0:4311; AVX512VLDQ-NEXT:    vcvtuqq2psy (%rdi), %xmm04312; AVX512VLDQ-NEXT:    retq4313  %ld = load <4 x i64>, ptr%a4314  %cvt = uitofp <4 x i64> %ld to <4 x float>4315  ret <4 x float> %cvt4316}4317 4318define <4 x float> @uitofp_load_4i32_to_4f32(ptr%a) {4319; SSE2-LABEL: uitofp_load_4i32_to_4f32:4320; SSE2:       # %bb.0:4321; SSE2-NEXT:    movdqa (%rdi), %xmm04322; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [65535,65535,65535,65535]4323; SSE2-NEXT:    pand %xmm0, %xmm14324; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14325; SSE2-NEXT:    psrld $16, %xmm04326; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm04327; SSE2-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm04328; SSE2-NEXT:    addps %xmm1, %xmm04329; SSE2-NEXT:    retq4330;4331; SSE41-LABEL: uitofp_load_4i32_to_4f32:4332; SSE41:       # %bb.0:4333; SSE41-NEXT:    movdqa (%rdi), %xmm04334; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [1258291200,1258291200,1258291200,1258291200]4335; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]4336; SSE41-NEXT:    psrld $16, %xmm04337; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7]4338; SSE41-NEXT:    subps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm04339; SSE41-NEXT:    addps %xmm1, %xmm04340; SSE41-NEXT:    retq4341;4342; AVX1-LABEL: uitofp_load_4i32_to_4f32:4343; AVX1:       # %bb.0:4344; AVX1-NEXT:    vmovdqa (%rdi), %xmm04345; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7]4346; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm04347; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],mem[1],xmm0[2],mem[3],xmm0[4],mem[5],xmm0[6],mem[7]4348; AVX1-NEXT:    vsubps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm04349; AVX1-NEXT:    vaddps %xmm0, %xmm1, %xmm04350; AVX1-NEXT:    retq4351;4352; AVX2-LABEL: uitofp_load_4i32_to_4f32:4353; AVX2:       # %bb.0:4354; AVX2-NEXT:    vmovdqa (%rdi), %xmm04355; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1258291200,1258291200,1258291200,1258291200]4356; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]4357; AVX2-NEXT:    vpsrld $16, %xmm0, %xmm04358; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [1392508928,1392508928,1392508928,1392508928]4359; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]4360; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm2 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]4361; AVX2-NEXT:    vsubps %xmm2, %xmm0, %xmm04362; AVX2-NEXT:    vaddps %xmm0, %xmm1, %xmm04363; AVX2-NEXT:    retq4364;4365; AVX512F-LABEL: uitofp_load_4i32_to_4f32:4366; AVX512F:       # %bb.0:4367; AVX512F-NEXT:    vmovaps (%rdi), %xmm04368; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm04369; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm04370; AVX512F-NEXT:    vzeroupper4371; AVX512F-NEXT:    retq4372;4373; AVX512VL-LABEL: uitofp_load_4i32_to_4f32:4374; AVX512VL:       # %bb.0:4375; AVX512VL-NEXT:    vcvtudq2ps (%rdi), %xmm04376; AVX512VL-NEXT:    retq4377;4378; AVX512DQ-LABEL: uitofp_load_4i32_to_4f32:4379; AVX512DQ:       # %bb.0:4380; AVX512DQ-NEXT:    vmovaps (%rdi), %xmm04381; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm04382; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm04383; AVX512DQ-NEXT:    vzeroupper4384; AVX512DQ-NEXT:    retq4385;4386; AVX512VLDQ-LABEL: uitofp_load_4i32_to_4f32:4387; AVX512VLDQ:       # %bb.0:4388; AVX512VLDQ-NEXT:    vcvtudq2ps (%rdi), %xmm04389; AVX512VLDQ-NEXT:    retq4390  %ld = load <4 x i32>, ptr%a4391  %cvt = uitofp <4 x i32> %ld to <4 x float>4392  ret <4 x float> %cvt4393}4394 4395define <4 x float> @uitofp_load_4i16_to_4f32(ptr%a) {4396; SSE2-LABEL: uitofp_load_4i16_to_4f32:4397; SSE2:       # %bb.0:4398; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero4399; SSE2-NEXT:    pxor %xmm1, %xmm14400; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]4401; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm04402; SSE2-NEXT:    retq4403;4404; SSE41-LABEL: uitofp_load_4i16_to_4f32:4405; SSE41:       # %bb.0:4406; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero4407; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm04408; SSE41-NEXT:    retq4409;4410; AVX-LABEL: uitofp_load_4i16_to_4f32:4411; AVX:       # %bb.0:4412; AVX-NEXT:    vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero4413; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm04414; AVX-NEXT:    retq4415  %ld = load <4 x i16>, ptr%a4416  %cvt = uitofp <4 x i16> %ld to <4 x float>4417  ret <4 x float> %cvt4418}4419 4420define <4 x float> @uitofp_load_4i8_to_4f32(ptr%a) {4421; SSE2-LABEL: uitofp_load_4i8_to_4f32:4422; SSE2:       # %bb.0:4423; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero4424; SSE2-NEXT:    pxor %xmm1, %xmm14425; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]4426; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]4427; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm04428; SSE2-NEXT:    retq4429;4430; SSE41-LABEL: uitofp_load_4i8_to_4f32:4431; SSE41:       # %bb.0:4432; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero4433; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm04434; SSE41-NEXT:    retq4435;4436; AVX-LABEL: uitofp_load_4i8_to_4f32:4437; AVX:       # %bb.0:4438; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero4439; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm04440; AVX-NEXT:    retq4441  %ld = load <4 x i8>, ptr%a4442  %cvt = uitofp <4 x i8> %ld to <4 x float>4443  ret <4 x float> %cvt4444}4445 4446define <8 x float> @uitofp_load_8i64_to_8f32(ptr%a) {4447; SSE2-LABEL: uitofp_load_8i64_to_8f32:4448; SSE2:       # %bb.0:4449; SSE2-NEXT:    movq 24(%rdi), %rax4450; SSE2-NEXT:    testq %rax, %rax4451; SSE2-NEXT:    js .LBB87_14452; SSE2-NEXT:  # %bb.2:4453; SSE2-NEXT:    cvtsi2ss %rax, %xmm24454; SSE2-NEXT:    jmp .LBB87_34455; SSE2-NEXT:  .LBB87_1:4456; SSE2-NEXT:    movq %rax, %rcx4457; SSE2-NEXT:    shrq %rcx4458; SSE2-NEXT:    andl $1, %eax4459; SSE2-NEXT:    orq %rcx, %rax4460; SSE2-NEXT:    cvtsi2ss %rax, %xmm24461; SSE2-NEXT:    addss %xmm2, %xmm24462; SSE2-NEXT:  .LBB87_3:4463; SSE2-NEXT:    movq 16(%rdi), %rax4464; SSE2-NEXT:    testq %rax, %rax4465; SSE2-NEXT:    js .LBB87_44466; SSE2-NEXT:  # %bb.5:4467; SSE2-NEXT:    cvtsi2ss %rax, %xmm14468; SSE2-NEXT:    jmp .LBB87_64469; SSE2-NEXT:  .LBB87_4:4470; SSE2-NEXT:    movq %rax, %rcx4471; SSE2-NEXT:    shrq %rcx4472; SSE2-NEXT:    andl $1, %eax4473; SSE2-NEXT:    orq %rcx, %rax4474; SSE2-NEXT:    cvtsi2ss %rax, %xmm14475; SSE2-NEXT:    addss %xmm1, %xmm14476; SSE2-NEXT:  .LBB87_6:4477; SSE2-NEXT:    movq (%rdi), %rax4478; SSE2-NEXT:    movq 8(%rdi), %rcx4479; SSE2-NEXT:    testq %rcx, %rcx4480; SSE2-NEXT:    js .LBB87_74481; SSE2-NEXT:  # %bb.8:4482; SSE2-NEXT:    cvtsi2ss %rcx, %xmm34483; SSE2-NEXT:    testq %rax, %rax4484; SSE2-NEXT:    jns .LBB87_114485; SSE2-NEXT:  .LBB87_10:4486; SSE2-NEXT:    movq %rax, %rcx4487; SSE2-NEXT:    shrq %rcx4488; SSE2-NEXT:    andl $1, %eax4489; SSE2-NEXT:    orq %rcx, %rax4490; SSE2-NEXT:    cvtsi2ss %rax, %xmm04491; SSE2-NEXT:    addss %xmm0, %xmm04492; SSE2-NEXT:    jmp .LBB87_124493; SSE2-NEXT:  .LBB87_7:4494; SSE2-NEXT:    movq %rcx, %rdx4495; SSE2-NEXT:    shrq %rdx4496; SSE2-NEXT:    andl $1, %ecx4497; SSE2-NEXT:    orq %rdx, %rcx4498; SSE2-NEXT:    cvtsi2ss %rcx, %xmm34499; SSE2-NEXT:    addss %xmm3, %xmm34500; SSE2-NEXT:    testq %rax, %rax4501; SSE2-NEXT:    js .LBB87_104502; SSE2-NEXT:  .LBB87_11:4503; SSE2-NEXT:    cvtsi2ss %rax, %xmm04504; SSE2-NEXT:  .LBB87_12:4505; SSE2-NEXT:    movq 56(%rdi), %rax4506; SSE2-NEXT:    testq %rax, %rax4507; SSE2-NEXT:    js .LBB87_134508; SSE2-NEXT:  # %bb.14:4509; SSE2-NEXT:    cvtsi2ss %rax, %xmm54510; SSE2-NEXT:    jmp .LBB87_154511; SSE2-NEXT:  .LBB87_13:4512; SSE2-NEXT:    movq %rax, %rcx4513; SSE2-NEXT:    shrq %rcx4514; SSE2-NEXT:    andl $1, %eax4515; SSE2-NEXT:    orq %rcx, %rax4516; SSE2-NEXT:    cvtsi2ss %rax, %xmm54517; SSE2-NEXT:    addss %xmm5, %xmm54518; SSE2-NEXT:  .LBB87_15:4519; SSE2-NEXT:    movq 48(%rdi), %rax4520; SSE2-NEXT:    testq %rax, %rax4521; SSE2-NEXT:    js .LBB87_164522; SSE2-NEXT:  # %bb.17:4523; SSE2-NEXT:    cvtsi2ss %rax, %xmm44524; SSE2-NEXT:    jmp .LBB87_184525; SSE2-NEXT:  .LBB87_16:4526; SSE2-NEXT:    movq %rax, %rcx4527; SSE2-NEXT:    shrq %rcx4528; SSE2-NEXT:    andl $1, %eax4529; SSE2-NEXT:    orq %rcx, %rax4530; SSE2-NEXT:    cvtsi2ss %rax, %xmm44531; SSE2-NEXT:    addss %xmm4, %xmm44532; SSE2-NEXT:  .LBB87_18:4533; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]4534; SSE2-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]4535; SSE2-NEXT:    movq 40(%rdi), %rax4536; SSE2-NEXT:    testq %rax, %rax4537; SSE2-NEXT:    js .LBB87_194538; SSE2-NEXT:  # %bb.20:4539; SSE2-NEXT:    xorps %xmm2, %xmm24540; SSE2-NEXT:    cvtsi2ss %rax, %xmm24541; SSE2-NEXT:    jmp .LBB87_214542; SSE2-NEXT:  .LBB87_19:4543; SSE2-NEXT:    movq %rax, %rcx4544; SSE2-NEXT:    shrq %rcx4545; SSE2-NEXT:    andl $1, %eax4546; SSE2-NEXT:    orq %rcx, %rax4547; SSE2-NEXT:    xorps %xmm2, %xmm24548; SSE2-NEXT:    cvtsi2ss %rax, %xmm24549; SSE2-NEXT:    addss %xmm2, %xmm24550; SSE2-NEXT:  .LBB87_21:4551; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]4552; SSE2-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]4553; SSE2-NEXT:    movq 32(%rdi), %rax4554; SSE2-NEXT:    testq %rax, %rax4555; SSE2-NEXT:    js .LBB87_224556; SSE2-NEXT:  # %bb.23:4557; SSE2-NEXT:    xorps %xmm1, %xmm14558; SSE2-NEXT:    cvtsi2ss %rax, %xmm14559; SSE2-NEXT:    jmp .LBB87_244560; SSE2-NEXT:  .LBB87_22:4561; SSE2-NEXT:    movq %rax, %rcx4562; SSE2-NEXT:    shrq %rcx4563; SSE2-NEXT:    andl $1, %eax4564; SSE2-NEXT:    orq %rcx, %rax4565; SSE2-NEXT:    xorps %xmm1, %xmm14566; SSE2-NEXT:    cvtsi2ss %rax, %xmm14567; SSE2-NEXT:    addss %xmm1, %xmm14568; SSE2-NEXT:  .LBB87_24:4569; SSE2-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]4570; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm4[0]4571; SSE2-NEXT:    retq4572;4573; SSE41-LABEL: uitofp_load_8i64_to_8f32:4574; SSE41:       # %bb.0:4575; SSE41-NEXT:    movdqa (%rdi), %xmm44576; SSE41-NEXT:    movdqa 16(%rdi), %xmm54577; SSE41-NEXT:    movdqa 32(%rdi), %xmm64578; SSE41-NEXT:    movdqa 48(%rdi), %xmm24579; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm7 = [1,1]4580; SSE41-NEXT:    movdqa %xmm4, %xmm04581; SSE41-NEXT:    pand %xmm7, %xmm04582; SSE41-NEXT:    movdqa %xmm4, %xmm14583; SSE41-NEXT:    psrlq $1, %xmm14584; SSE41-NEXT:    por %xmm0, %xmm14585; SSE41-NEXT:    movdqa %xmm4, %xmm34586; SSE41-NEXT:    movdqa %xmm4, %xmm04587; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm34588; SSE41-NEXT:    pextrq $1, %xmm3, %rax4589; SSE41-NEXT:    xorps %xmm0, %xmm04590; SSE41-NEXT:    cvtsi2ss %rax, %xmm04591; SSE41-NEXT:    movq %xmm3, %rax4592; SSE41-NEXT:    xorps %xmm3, %xmm34593; SSE41-NEXT:    cvtsi2ss %rax, %xmm34594; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[2,3]4595; SSE41-NEXT:    movdqa %xmm5, %xmm04596; SSE41-NEXT:    pand %xmm7, %xmm04597; SSE41-NEXT:    movdqa %xmm5, %xmm14598; SSE41-NEXT:    psrlq $1, %xmm14599; SSE41-NEXT:    por %xmm0, %xmm14600; SSE41-NEXT:    shufps {{.*#+}} xmm4 = xmm4[1,3],xmm5[1,3]4601; SSE41-NEXT:    movaps %xmm5, %xmm04602; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm54603; SSE41-NEXT:    movq %xmm5, %rax4604; SSE41-NEXT:    xorps %xmm0, %xmm04605; SSE41-NEXT:    cvtsi2ss %rax, %xmm04606; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1],xmm0[0],xmm3[3]4607; SSE41-NEXT:    pextrq $1, %xmm5, %rax4608; SSE41-NEXT:    xorps %xmm0, %xmm04609; SSE41-NEXT:    cvtsi2ss %rax, %xmm04610; SSE41-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1,2],xmm0[0]4611; SSE41-NEXT:    movaps %xmm3, %xmm14612; SSE41-NEXT:    addps %xmm3, %xmm14613; SSE41-NEXT:    movaps %xmm4, %xmm04614; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm34615; SSE41-NEXT:    movdqa %xmm6, %xmm04616; SSE41-NEXT:    pand %xmm7, %xmm04617; SSE41-NEXT:    movdqa %xmm6, %xmm14618; SSE41-NEXT:    psrlq $1, %xmm14619; SSE41-NEXT:    por %xmm0, %xmm14620; SSE41-NEXT:    movdqa %xmm6, %xmm44621; SSE41-NEXT:    movdqa %xmm6, %xmm04622; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm44623; SSE41-NEXT:    pextrq $1, %xmm4, %rax4624; SSE41-NEXT:    xorps %xmm0, %xmm04625; SSE41-NEXT:    cvtsi2ss %rax, %xmm04626; SSE41-NEXT:    movq %xmm4, %rax4627; SSE41-NEXT:    xorps %xmm1, %xmm14628; SSE41-NEXT:    cvtsi2ss %rax, %xmm14629; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[2,3]4630; SSE41-NEXT:    pand %xmm2, %xmm74631; SSE41-NEXT:    movdqa %xmm2, %xmm44632; SSE41-NEXT:    psrlq $1, %xmm44633; SSE41-NEXT:    por %xmm7, %xmm44634; SSE41-NEXT:    shufps {{.*#+}} xmm6 = xmm6[1,3],xmm2[1,3]4635; SSE41-NEXT:    movaps %xmm2, %xmm04636; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm24637; SSE41-NEXT:    movq %xmm2, %rax4638; SSE41-NEXT:    xorps %xmm0, %xmm04639; SSE41-NEXT:    cvtsi2ss %rax, %xmm04640; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1],xmm0[0],xmm1[3]4641; SSE41-NEXT:    pextrq $1, %xmm2, %rax4642; SSE41-NEXT:    xorps %xmm0, %xmm04643; SSE41-NEXT:    cvtsi2ss %rax, %xmm04644; SSE41-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm0[0]4645; SSE41-NEXT:    movaps %xmm1, %xmm24646; SSE41-NEXT:    addps %xmm1, %xmm24647; SSE41-NEXT:    movaps %xmm6, %xmm04648; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm14649; SSE41-NEXT:    movaps %xmm3, %xmm04650; SSE41-NEXT:    retq4651;4652; AVX1-LABEL: uitofp_load_8i64_to_8f32:4653; AVX1:       # %bb.0:4654; AVX1-NEXT:    vmovaps (%rdi), %ymm04655; AVX1-NEXT:    vmovaps 32(%rdi), %ymm14656; AVX1-NEXT:    vbroadcastsd {{.*#+}} ymm2 = [1,1,1,1]4657; AVX1-NEXT:    vandps %ymm2, %ymm1, %ymm34658; AVX1-NEXT:    vpsrlq $1, %xmm1, %xmm44659; AVX1-NEXT:    vmovdqa 48(%rdi), %xmm54660; AVX1-NEXT:    vpsrlq $1, %xmm5, %xmm64661; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm4, %ymm44662; AVX1-NEXT:    vorps %ymm3, %ymm4, %ymm34663; AVX1-NEXT:    vblendvpd %ymm1, %ymm3, %ymm1, %ymm34664; AVX1-NEXT:    vpextrq $1, %xmm3, %rax4665; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm44666; AVX1-NEXT:    vmovq %xmm3, %rax4667; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm64668; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm6[0],xmm4[0],xmm6[2,3]4669; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm34670; AVX1-NEXT:    vmovq %xmm3, %rax4671; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm64672; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]4673; AVX1-NEXT:    vpextrq $1, %xmm3, %rax4674; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34675; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0,1,2],xmm3[0]4676; AVX1-NEXT:    vaddps %xmm3, %xmm3, %xmm44677; AVX1-NEXT:    vpackssdw %xmm5, %xmm1, %xmm14678; AVX1-NEXT:    vblendvps %xmm1, %xmm4, %xmm3, %xmm14679; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm24680; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm34681; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm44682; AVX1-NEXT:    vpsrlq $1, %xmm4, %xmm54683; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm34684; AVX1-NEXT:    vorps %ymm2, %ymm3, %ymm24685; AVX1-NEXT:    vblendvpd %ymm0, %ymm2, %ymm0, %ymm24686; AVX1-NEXT:    vpextrq $1, %xmm2, %rax4687; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34688; AVX1-NEXT:    vmovq %xmm2, %rax4689; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm54690; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[2,3]4691; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm24692; AVX1-NEXT:    vmovq %xmm2, %rax4693; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm54694; AVX1-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm5[0],xmm3[3]4695; AVX1-NEXT:    vpextrq $1, %xmm2, %rax4696; AVX1-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm24697; AVX1-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0,1,2],xmm2[0]4698; AVX1-NEXT:    vaddps %xmm2, %xmm2, %xmm34699; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm04700; AVX1-NEXT:    vblendvps %xmm0, %xmm3, %xmm2, %xmm04701; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04702; AVX1-NEXT:    retq4703;4704; AVX2-LABEL: uitofp_load_8i64_to_8f32:4705; AVX2:       # %bb.0:4706; AVX2-NEXT:    vmovaps (%rdi), %ymm04707; AVX2-NEXT:    vmovdqa 32(%rdi), %ymm14708; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [1,1,1,1]4709; AVX2-NEXT:    vpand %ymm2, %ymm1, %ymm34710; AVX2-NEXT:    vpsrlq $1, %ymm1, %ymm44711; AVX2-NEXT:    vpor %ymm3, %ymm4, %ymm34712; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm1, %ymm34713; AVX2-NEXT:    vpextrq $1, %xmm3, %rax4714; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm44715; AVX2-NEXT:    vmovq %xmm3, %rax4716; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm54717; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm5[0],xmm4[0],xmm5[2,3]4718; AVX2-NEXT:    vextracti128 $1, %ymm3, %xmm34719; AVX2-NEXT:    vmovq %xmm3, %rax4720; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm54721; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm5[0],xmm4[3]4722; AVX2-NEXT:    vpextrq $1, %xmm3, %rax4723; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34724; AVX2-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0,1,2],xmm3[0]4725; AVX2-NEXT:    vaddps %xmm3, %xmm3, %xmm44726; AVX2-NEXT:    vpackssdw 48(%rdi), %xmm1, %xmm14727; AVX2-NEXT:    vblendvps %xmm1, %xmm4, %xmm3, %xmm14728; AVX2-NEXT:    vandps %ymm2, %ymm0, %ymm24729; AVX2-NEXT:    vpsrlq $1, %ymm0, %ymm34730; AVX2-NEXT:    vpor %ymm2, %ymm3, %ymm24731; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm0, %ymm24732; AVX2-NEXT:    vpextrq $1, %xmm2, %rax4733; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm34734; AVX2-NEXT:    vmovq %xmm2, %rax4735; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm44736; AVX2-NEXT:    vinsertps {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[2,3]4737; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm24738; AVX2-NEXT:    vmovq %xmm2, %rax4739; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm44740; AVX2-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm4[0],xmm3[3]4741; AVX2-NEXT:    vpextrq $1, %xmm2, %rax4742; AVX2-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm24743; AVX2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm3[0,1,2],xmm2[0]4744; AVX2-NEXT:    vaddps %xmm2, %xmm2, %xmm34745; AVX2-NEXT:    vpackssdw 16(%rdi), %xmm0, %xmm04746; AVX2-NEXT:    vblendvps %xmm0, %xmm3, %xmm2, %xmm04747; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04748; AVX2-NEXT:    retq4749;4750; AVX512F-LABEL: uitofp_load_8i64_to_8f32:4751; AVX512F:       # %bb.0:4752; AVX512F-NEXT:    vcvtusi2ssq 40(%rdi), %xmm15, %xmm04753; AVX512F-NEXT:    vcvtusi2ssq 32(%rdi), %xmm15, %xmm14754; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]4755; AVX512F-NEXT:    vcvtusi2ssq 48(%rdi), %xmm15, %xmm14756; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]4757; AVX512F-NEXT:    vcvtusi2ssq 56(%rdi), %xmm15, %xmm14758; AVX512F-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]4759; AVX512F-NEXT:    vcvtusi2ssq 8(%rdi), %xmm15, %xmm14760; AVX512F-NEXT:    vcvtusi2ssq (%rdi), %xmm15, %xmm24761; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]4762; AVX512F-NEXT:    vcvtusi2ssq 16(%rdi), %xmm15, %xmm24763; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]4764; AVX512F-NEXT:    vcvtusi2ssq 24(%rdi), %xmm15, %xmm24765; AVX512F-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]4766; AVX512F-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm04767; AVX512F-NEXT:    retq4768;4769; AVX512VL-LABEL: uitofp_load_8i64_to_8f32:4770; AVX512VL:       # %bb.0:4771; AVX512VL-NEXT:    vcvtusi2ssq 40(%rdi), %xmm15, %xmm04772; AVX512VL-NEXT:    vcvtusi2ssq 32(%rdi), %xmm15, %xmm14773; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3]4774; AVX512VL-NEXT:    vcvtusi2ssq 48(%rdi), %xmm15, %xmm14775; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3]4776; AVX512VL-NEXT:    vcvtusi2ssq 56(%rdi), %xmm15, %xmm14777; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]4778; AVX512VL-NEXT:    vcvtusi2ssq 8(%rdi), %xmm15, %xmm14779; AVX512VL-NEXT:    vcvtusi2ssq (%rdi), %xmm15, %xmm24780; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3]4781; AVX512VL-NEXT:    vcvtusi2ssq 16(%rdi), %xmm15, %xmm24782; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]4783; AVX512VL-NEXT:    vcvtusi2ssq 24(%rdi), %xmm15, %xmm24784; AVX512VL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]4785; AVX512VL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm04786; AVX512VL-NEXT:    retq4787;4788; AVX512DQ-LABEL: uitofp_load_8i64_to_8f32:4789; AVX512DQ:       # %bb.0:4790; AVX512DQ-NEXT:    vcvtuqq2ps (%rdi), %ymm04791; AVX512DQ-NEXT:    retq4792;4793; AVX512VLDQ-LABEL: uitofp_load_8i64_to_8f32:4794; AVX512VLDQ:       # %bb.0:4795; AVX512VLDQ-NEXT:    vcvtuqq2ps (%rdi), %ymm04796; AVX512VLDQ-NEXT:    retq4797  %ld = load <8 x i64>, ptr%a4798  %cvt = uitofp <8 x i64> %ld to <8 x float>4799  ret <8 x float> %cvt4800}4801 4802define <8 x float> @uitofp_load_8i32_to_8f32(ptr%a) {4803; SSE2-LABEL: uitofp_load_8i32_to_8f32:4804; SSE2:       # %bb.0:4805; SSE2-NEXT:    movdqa (%rdi), %xmm04806; SSE2-NEXT:    movdqa 16(%rdi), %xmm14807; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535]4808; SSE2-NEXT:    movdqa %xmm0, %xmm34809; SSE2-NEXT:    pand %xmm2, %xmm34810; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1258291200,1258291200,1258291200,1258291200]4811; SSE2-NEXT:    por %xmm4, %xmm34812; SSE2-NEXT:    psrld $16, %xmm04813; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [1392508928,1392508928,1392508928,1392508928]4814; SSE2-NEXT:    por %xmm5, %xmm04815; SSE2-NEXT:    movaps {{.*#+}} xmm6 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]4816; SSE2-NEXT:    subps %xmm6, %xmm04817; SSE2-NEXT:    addps %xmm3, %xmm04818; SSE2-NEXT:    pand %xmm1, %xmm24819; SSE2-NEXT:    por %xmm4, %xmm24820; SSE2-NEXT:    psrld $16, %xmm14821; SSE2-NEXT:    por %xmm5, %xmm14822; SSE2-NEXT:    subps %xmm6, %xmm14823; SSE2-NEXT:    addps %xmm2, %xmm14824; SSE2-NEXT:    retq4825;4826; SSE41-LABEL: uitofp_load_8i32_to_8f32:4827; SSE41:       # %bb.0:4828; SSE41-NEXT:    movdqa (%rdi), %xmm04829; SSE41-NEXT:    movdqa 16(%rdi), %xmm14830; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [1258291200,1258291200,1258291200,1258291200]4831; SSE41-NEXT:    movdqa %xmm0, %xmm34832; SSE41-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm2[1],xmm3[2],xmm2[3],xmm3[4],xmm2[5],xmm3[6],xmm2[7]4833; SSE41-NEXT:    psrld $16, %xmm04834; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [1392508928,1392508928,1392508928,1392508928]4835; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1],xmm0[2],xmm4[3],xmm0[4],xmm4[5],xmm0[6],xmm4[7]4836; SSE41-NEXT:    movaps {{.*#+}} xmm5 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]4837; SSE41-NEXT:    subps %xmm5, %xmm04838; SSE41-NEXT:    addps %xmm3, %xmm04839; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]4840; SSE41-NEXT:    psrld $16, %xmm14841; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1],xmm1[2],xmm4[3],xmm1[4],xmm4[5],xmm1[6],xmm4[7]4842; SSE41-NEXT:    subps %xmm5, %xmm14843; SSE41-NEXT:    addps %xmm2, %xmm14844; SSE41-NEXT:    retq4845;4846; AVX1-LABEL: uitofp_load_8i32_to_8f32:4847; AVX1:       # %bb.0:4848; AVX1-NEXT:    vmovdqa (%rdi), %ymm04849; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm14850; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm24851; AVX1-NEXT:    vpsrld $16, %xmm2, %xmm24852; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm14853; AVX1-NEXT:    vcvtdq2ps %ymm1, %ymm14854; AVX1-NEXT:    vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm14855; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm04856; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm04857; AVX1-NEXT:    vaddps %ymm0, %ymm1, %ymm04858; AVX1-NEXT:    retq4859;4860; AVX2-LABEL: uitofp_load_8i32_to_8f32:4861; AVX2:       # %bb.0:4862; AVX2-NEXT:    vmovdqa (%rdi), %ymm04863; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200,1258291200]4864; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15]4865; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm04866; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928,1392508928]4867; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15]4868; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm2 = [5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11,5.49764202E+11]4869; AVX2-NEXT:    vsubps %ymm2, %ymm0, %ymm04870; AVX2-NEXT:    vaddps %ymm0, %ymm1, %ymm04871; AVX2-NEXT:    retq4872;4873; AVX512F-LABEL: uitofp_load_8i32_to_8f32:4874; AVX512F:       # %bb.0:4875; AVX512F-NEXT:    vmovaps (%rdi), %ymm04876; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm04877; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm04878; AVX512F-NEXT:    retq4879;4880; AVX512VL-LABEL: uitofp_load_8i32_to_8f32:4881; AVX512VL:       # %bb.0:4882; AVX512VL-NEXT:    vcvtudq2ps (%rdi), %ymm04883; AVX512VL-NEXT:    retq4884;4885; AVX512DQ-LABEL: uitofp_load_8i32_to_8f32:4886; AVX512DQ:       # %bb.0:4887; AVX512DQ-NEXT:    vmovaps (%rdi), %ymm04888; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm04889; AVX512DQ-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm04890; AVX512DQ-NEXT:    retq4891;4892; AVX512VLDQ-LABEL: uitofp_load_8i32_to_8f32:4893; AVX512VLDQ:       # %bb.0:4894; AVX512VLDQ-NEXT:    vcvtudq2ps (%rdi), %ymm04895; AVX512VLDQ-NEXT:    retq4896  %ld = load <8 x i32>, ptr%a4897  %cvt = uitofp <8 x i32> %ld to <8 x float>4898  ret <8 x float> %cvt4899}4900 4901define <8 x float> @uitofp_load_8i16_to_8f32(ptr%a) {4902; SSE2-LABEL: uitofp_load_8i16_to_8f32:4903; SSE2:       # %bb.0:4904; SSE2-NEXT:    movdqa (%rdi), %xmm14905; SSE2-NEXT:    pxor %xmm2, %xmm24906; SSE2-NEXT:    movdqa %xmm1, %xmm04907; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]4908; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm04909; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]4910; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm14911; SSE2-NEXT:    retq4912;4913; SSE41-LABEL: uitofp_load_8i16_to_8f32:4914; SSE41:       # %bb.0:4915; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero4916; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero4917; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm04918; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm14919; SSE41-NEXT:    retq4920;4921; AVX1-LABEL: uitofp_load_8i16_to_8f32:4922; AVX1:       # %bb.0:4923; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero4924; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero4925; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm04926; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm04927; AVX1-NEXT:    retq4928;4929; AVX2-LABEL: uitofp_load_8i16_to_8f32:4930; AVX2:       # %bb.0:4931; AVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero4932; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm04933; AVX2-NEXT:    retq4934;4935; AVX512-LABEL: uitofp_load_8i16_to_8f32:4936; AVX512:       # %bb.0:4937; AVX512-NEXT:    vpmovzxwd {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero4938; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm04939; AVX512-NEXT:    retq4940  %ld = load <8 x i16>, ptr%a4941  %cvt = uitofp <8 x i16> %ld to <8 x float>4942  ret <8 x float> %cvt4943}4944 4945define <8 x float> @uitofp_load_8i8_to_8f32(ptr%a) {4946; SSE2-LABEL: uitofp_load_8i8_to_8f32:4947; SSE2:       # %bb.0:4948; SSE2-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero4949; SSE2-NEXT:    pxor %xmm2, %xmm24950; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]4951; SSE2-NEXT:    movdqa %xmm1, %xmm04952; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]4953; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm04954; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]4955; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm14956; SSE2-NEXT:    retq4957;4958; SSE41-LABEL: uitofp_load_8i8_to_8f32:4959; SSE41:       # %bb.0:4960; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero4961; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero4962; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm04963; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm14964; SSE41-NEXT:    retq4965;4966; AVX1-LABEL: uitofp_load_8i8_to_8f32:4967; AVX1:       # %bb.0:4968; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero4969; AVX1-NEXT:    vpmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero4970; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm04971; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm04972; AVX1-NEXT:    retq4973;4974; AVX2-LABEL: uitofp_load_8i8_to_8f32:4975; AVX2:       # %bb.0:4976; AVX2-NEXT:    vpmovzxbd {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero4977; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm04978; AVX2-NEXT:    retq4979;4980; AVX512-LABEL: uitofp_load_8i8_to_8f32:4981; AVX512:       # %bb.0:4982; AVX512-NEXT:    vpmovzxbd {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero4983; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm04984; AVX512-NEXT:    retq4985  %ld = load <8 x i8>, ptr%a4986  %cvt = uitofp <8 x i8> %ld to <8 x float>4987  ret <8 x float> %cvt4988}4989 4990;4991; Aggregates4992;4993 4994%Arguments = type <{ <8 x i8>, <8 x i16>, ptr }>4995define void @aggregate_sitofp_8i16_to_8f32(ptr nocapture readonly %a0) {4996; SSE2-LABEL: aggregate_sitofp_8i16_to_8f32:4997; SSE2:       # %bb.0:4998; SSE2-NEXT:    movq 24(%rdi), %rax4999; SSE2-NEXT:    movdqu 8(%rdi), %xmm05000; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]5001; SSE2-NEXT:    psrad $16, %xmm15002; SSE2-NEXT:    cvtdq2ps %xmm1, %xmm15003; SSE2-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]5004; SSE2-NEXT:    psrad $16, %xmm05005; SSE2-NEXT:    cvtdq2ps %xmm0, %xmm05006; SSE2-NEXT:    movaps %xmm0, 16(%rax)5007; SSE2-NEXT:    movaps %xmm1, (%rax)5008; SSE2-NEXT:    retq5009;5010; SSE41-LABEL: aggregate_sitofp_8i16_to_8f32:5011; SSE41:       # %bb.0:5012; SSE41-NEXT:    movq 24(%rdi), %rax5013; SSE41-NEXT:    pmovsxwd 16(%rdi), %xmm05014; SSE41-NEXT:    pmovsxwd 8(%rdi), %xmm15015; SSE41-NEXT:    cvtdq2ps %xmm1, %xmm15016; SSE41-NEXT:    cvtdq2ps %xmm0, %xmm05017; SSE41-NEXT:    movaps %xmm0, 16(%rax)5018; SSE41-NEXT:    movaps %xmm1, (%rax)5019; SSE41-NEXT:    retq5020;5021; AVX1-LABEL: aggregate_sitofp_8i16_to_8f32:5022; AVX1:       # %bb.0:5023; AVX1-NEXT:    movq 24(%rdi), %rax5024; AVX1-NEXT:    vpmovsxwd 16(%rdi), %xmm05025; AVX1-NEXT:    vpmovsxwd 8(%rdi), %xmm15026; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm05027; AVX1-NEXT:    vcvtdq2ps %ymm0, %ymm05028; AVX1-NEXT:    vmovaps %ymm0, (%rax)5029; AVX1-NEXT:    vzeroupper5030; AVX1-NEXT:    retq5031;5032; AVX2-LABEL: aggregate_sitofp_8i16_to_8f32:5033; AVX2:       # %bb.0:5034; AVX2-NEXT:    movq 24(%rdi), %rax5035; AVX2-NEXT:    vpmovsxwd 8(%rdi), %ymm05036; AVX2-NEXT:    vcvtdq2ps %ymm0, %ymm05037; AVX2-NEXT:    vmovaps %ymm0, (%rax)5038; AVX2-NEXT:    vzeroupper5039; AVX2-NEXT:    retq5040;5041; AVX512-LABEL: aggregate_sitofp_8i16_to_8f32:5042; AVX512:       # %bb.0:5043; AVX512-NEXT:    movq 24(%rdi), %rax5044; AVX512-NEXT:    vpmovsxwd 8(%rdi), %ymm05045; AVX512-NEXT:    vcvtdq2ps %ymm0, %ymm05046; AVX512-NEXT:    vmovaps %ymm0, (%rax)5047; AVX512-NEXT:    vzeroupper5048; AVX512-NEXT:    retq5049 %1 = load %Arguments, ptr %a0, align 15050 %2 = extractvalue %Arguments %1, 15051 %3 = extractvalue %Arguments %1, 25052 %4 = sitofp <8 x i16> %2 to <8 x float>5053 store <8 x float> %4, ptr %3, align 325054 ret void5055}5056 5057define <2 x double> @sitofp_i32_to_2f64(<2 x double> %a0, i32 %a1) nounwind {5058; SSE-LABEL: sitofp_i32_to_2f64:5059; SSE:       # %bb.0:5060; SSE-NEXT:    cvtsi2sd %edi, %xmm05061; SSE-NEXT:    retq5062;5063; AVX-LABEL: sitofp_i32_to_2f64:5064; AVX:       # %bb.0:5065; AVX-NEXT:    vcvtsi2sd %edi, %xmm0, %xmm05066; AVX-NEXT:    retq5067  %cvt = sitofp i32 %a1 to double5068  %res = insertelement <2 x double> %a0, double %cvt, i32 05069  ret <2 x double> %res5070}5071 5072define <4 x float> @sitofp_i32_to_4f32(<4 x float> %a0, i32 %a1) nounwind {5073; SSE-LABEL: sitofp_i32_to_4f32:5074; SSE:       # %bb.0:5075; SSE-NEXT:    cvtsi2ss %edi, %xmm05076; SSE-NEXT:    retq5077;5078; AVX-LABEL: sitofp_i32_to_4f32:5079; AVX:       # %bb.0:5080; AVX-NEXT:    vcvtsi2ss %edi, %xmm0, %xmm05081; AVX-NEXT:    retq5082  %cvt = sitofp i32 %a1 to float5083  %res = insertelement <4 x float> %a0, float %cvt, i32 05084  ret <4 x float> %res5085}5086 5087define <2 x double> @sitofp_i64_to_2f64(<2 x double> %a0, i64 %a1) nounwind {5088; SSE-LABEL: sitofp_i64_to_2f64:5089; SSE:       # %bb.0:5090; SSE-NEXT:    cvtsi2sd %rdi, %xmm05091; SSE-NEXT:    retq5092;5093; AVX-LABEL: sitofp_i64_to_2f64:5094; AVX:       # %bb.0:5095; AVX-NEXT:    vcvtsi2sd %rdi, %xmm0, %xmm05096; AVX-NEXT:    retq5097  %cvt = sitofp i64 %a1 to double5098  %res = insertelement <2 x double> %a0, double %cvt, i32 05099  ret <2 x double> %res5100}5101 5102define <4 x float> @sitofp_i64_to_4f32(<4 x float> %a0, i64 %a1) nounwind {5103; SSE-LABEL: sitofp_i64_to_4f32:5104; SSE:       # %bb.0:5105; SSE-NEXT:    cvtsi2ss %rdi, %xmm05106; SSE-NEXT:    retq5107;5108; AVX-LABEL: sitofp_i64_to_4f32:5109; AVX:       # %bb.0:5110; AVX-NEXT:    vcvtsi2ss %rdi, %xmm0, %xmm05111; AVX-NEXT:    retq5112  %cvt = sitofp i64 %a1 to float5113  %res = insertelement <4 x float> %a0, float %cvt, i32 05114  ret <4 x float> %res5115}5116 5117; Extract from int vector and convert to FP.5118 5119define float @extract0_sitofp_v4i32_f32(<4 x i32> %x) nounwind {5120; SSE-LABEL: extract0_sitofp_v4i32_f32:5121; SSE:       # %bb.0:5122; SSE-NEXT:    cvtdq2ps %xmm0, %xmm05123; SSE-NEXT:    retq5124;5125; AVX-LABEL: extract0_sitofp_v4i32_f32:5126; AVX:       # %bb.0:5127; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm05128; AVX-NEXT:    retq5129  %e = extractelement <4 x i32> %x, i32 05130  %r = sitofp i32 %e to float5131  ret float %r5132}5133 5134define float @extract0_sitofp_v4i32_f32i_multiuse1(<4 x i32> %x) nounwind {5135; SSE-LABEL: extract0_sitofp_v4i32_f32i_multiuse1:5136; SSE:       # %bb.0:5137; SSE-NEXT:    movd %xmm0, %eax5138; SSE-NEXT:    cvtdq2ps %xmm0, %xmm05139; SSE-NEXT:    incl %eax5140; SSE-NEXT:    cvtsi2ss %eax, %xmm15141; SSE-NEXT:    divss %xmm1, %xmm05142; SSE-NEXT:    retq5143;5144; AVX-LABEL: extract0_sitofp_v4i32_f32i_multiuse1:5145; AVX:       # %bb.0:5146; AVX-NEXT:    vmovd %xmm0, %eax5147; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm05148; AVX-NEXT:    incl %eax5149; AVX-NEXT:    vcvtsi2ss %eax, %xmm15, %xmm15150; AVX-NEXT:    vdivss %xmm1, %xmm0, %xmm05151; AVX-NEXT:    retq5152  %e = extractelement <4 x i32> %x, i32 05153  %f = sitofp i32 %e to float5154  %e1 = add i32 %e, 15155  %f1 = sitofp i32 %e1 to float5156  %r = fdiv float %f, %f15157  ret float %r5158}5159 5160define float @extract0_sitofp_v4i32_f32_multiuse2(<4 x i32> %x, ptr %p) nounwind {5161; SSE-LABEL: extract0_sitofp_v4i32_f32_multiuse2:5162; SSE:       # %bb.0:5163; SSE-NEXT:    cvtdq2ps %xmm0, %xmm15164; SSE-NEXT:    movss %xmm0, (%rdi)5165; SSE-NEXT:    movaps %xmm1, %xmm05166; SSE-NEXT:    retq5167;5168; AVX-LABEL: extract0_sitofp_v4i32_f32_multiuse2:5169; AVX:       # %bb.0:5170; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm15171; AVX-NEXT:    vmovss %xmm0, (%rdi)5172; AVX-NEXT:    vmovaps %xmm1, %xmm05173; AVX-NEXT:    retq5174  %e = extractelement <4 x i32> %x, i32 05175  %r = sitofp i32 %e to float5176  store i32 %e, ptr %p5177  ret float %r5178}5179 5180define double @extract0_sitofp_v4i32_f64(<4 x i32> %x) nounwind {5181; SSE-LABEL: extract0_sitofp_v4i32_f64:5182; SSE:       # %bb.0:5183; SSE-NEXT:    movd %xmm0, %eax5184; SSE-NEXT:    xorps %xmm0, %xmm05185; SSE-NEXT:    cvtsi2sd %eax, %xmm05186; SSE-NEXT:    retq5187;5188; AVX-LABEL: extract0_sitofp_v4i32_f64:5189; AVX:       # %bb.0:5190; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm05191; AVX-NEXT:    retq5192  %e = extractelement <4 x i32> %x, i32 05193  %r = sitofp i32 %e to double5194  ret double %r5195}5196 5197define float @extract0_uitofp_v4i32_f32(<4 x i32> %x) nounwind {5198; SSE-LABEL: extract0_uitofp_v4i32_f32:5199; SSE:       # %bb.0:5200; SSE-NEXT:    movd %xmm0, %eax5201; SSE-NEXT:    xorps %xmm0, %xmm05202; SSE-NEXT:    cvtsi2ss %rax, %xmm05203; SSE-NEXT:    retq5204;5205; VEX-LABEL: extract0_uitofp_v4i32_f32:5206; VEX:       # %bb.0:5207; VEX-NEXT:    vmovd %xmm0, %eax5208; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm05209; VEX-NEXT:    retq5210;5211; AVX512F-LABEL: extract0_uitofp_v4i32_f32:5212; AVX512F:       # %bb.0:5213; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm05214; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm05215; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05216; AVX512F-NEXT:    vzeroupper5217; AVX512F-NEXT:    retq5218;5219; AVX512VL-LABEL: extract0_uitofp_v4i32_f32:5220; AVX512VL:       # %bb.0:5221; AVX512VL-NEXT:    vcvtudq2ps %xmm0, %xmm05222; AVX512VL-NEXT:    retq5223;5224; AVX512DQ-LABEL: extract0_uitofp_v4i32_f32:5225; AVX512DQ:       # %bb.0:5226; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm05227; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm05228; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05229; AVX512DQ-NEXT:    vzeroupper5230; AVX512DQ-NEXT:    retq5231;5232; AVX512VLDQ-LABEL: extract0_uitofp_v4i32_f32:5233; AVX512VLDQ:       # %bb.0:5234; AVX512VLDQ-NEXT:    vcvtudq2ps %xmm0, %xmm05235; AVX512VLDQ-NEXT:    retq5236  %e = extractelement <4 x i32> %x, i32 05237  %r = uitofp i32 %e to float5238  ret float %r5239}5240 5241define double @extract0_uitofp_v4i32_f64(<4 x i32> %x) nounwind {5242; SSE-LABEL: extract0_uitofp_v4i32_f64:5243; SSE:       # %bb.0:5244; SSE-NEXT:    movd %xmm0, %eax5245; SSE-NEXT:    xorps %xmm0, %xmm05246; SSE-NEXT:    cvtsi2sd %rax, %xmm05247; SSE-NEXT:    retq5248;5249; VEX-LABEL: extract0_uitofp_v4i32_f64:5250; VEX:       # %bb.0:5251; VEX-NEXT:    vmovd %xmm0, %eax5252; VEX-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm05253; VEX-NEXT:    retq5254;5255; AVX512F-LABEL: extract0_uitofp_v4i32_f64:5256; AVX512F:       # %bb.0:5257; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm05258; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm05259; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05260; AVX512F-NEXT:    vzeroupper5261; AVX512F-NEXT:    retq5262;5263; AVX512VL-LABEL: extract0_uitofp_v4i32_f64:5264; AVX512VL:       # %bb.0:5265; AVX512VL-NEXT:    vcvtudq2pd %xmm0, %xmm05266; AVX512VL-NEXT:    retq5267;5268; AVX512DQ-LABEL: extract0_uitofp_v4i32_f64:5269; AVX512DQ:       # %bb.0:5270; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm05271; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm05272; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05273; AVX512DQ-NEXT:    vzeroupper5274; AVX512DQ-NEXT:    retq5275;5276; AVX512VLDQ-LABEL: extract0_uitofp_v4i32_f64:5277; AVX512VLDQ:       # %bb.0:5278; AVX512VLDQ-NEXT:    vcvtudq2pd %xmm0, %xmm05279; AVX512VLDQ-NEXT:    retq5280  %e = extractelement <4 x i32> %x, i32 05281  %r = uitofp i32 %e to double5282  ret double %r5283}5284 5285; Extract non-zero element from int vector and convert to FP.5286 5287define float @extract3_sitofp_v4i32_f32(<4 x i32> %x) nounwind {5288; SSE-LABEL: extract3_sitofp_v4i32_f32:5289; SSE:       # %bb.0:5290; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]5291; SSE-NEXT:    cvtdq2ps %xmm0, %xmm05292; SSE-NEXT:    retq5293;5294; AVX-LABEL: extract3_sitofp_v4i32_f32:5295; AVX:       # %bb.0:5296; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5297; AVX-NEXT:    vcvtdq2ps %xmm0, %xmm05298; AVX-NEXT:    retq5299  %e = extractelement <4 x i32> %x, i32 35300  %r = sitofp i32 %e to float5301  ret float %r5302}5303 5304define double @extract3_sitofp_v4i32_f64(<4 x i32> %x) nounwind {5305; SSE2-LABEL: extract3_sitofp_v4i32_f64:5306; SSE2:       # %bb.0:5307; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]5308; SSE2-NEXT:    movd %xmm0, %eax5309; SSE2-NEXT:    xorps %xmm0, %xmm05310; SSE2-NEXT:    cvtsi2sd %eax, %xmm05311; SSE2-NEXT:    retq5312;5313; SSE41-LABEL: extract3_sitofp_v4i32_f64:5314; SSE41:       # %bb.0:5315; SSE41-NEXT:    extractps $3, %xmm0, %eax5316; SSE41-NEXT:    xorps %xmm0, %xmm05317; SSE41-NEXT:    cvtsi2sd %eax, %xmm05318; SSE41-NEXT:    retq5319;5320; AVX-LABEL: extract3_sitofp_v4i32_f64:5321; AVX:       # %bb.0:5322; AVX-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5323; AVX-NEXT:    vcvtdq2pd %xmm0, %xmm05324; AVX-NEXT:    retq5325  %e = extractelement <4 x i32> %x, i32 35326  %r = sitofp i32 %e to double5327  ret double %r5328}5329 5330define float @extract3_uitofp_v4i32_f32(<4 x i32> %x) nounwind {5331; SSE2-LABEL: extract3_uitofp_v4i32_f32:5332; SSE2:       # %bb.0:5333; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]5334; SSE2-NEXT:    movd %xmm0, %eax5335; SSE2-NEXT:    xorps %xmm0, %xmm05336; SSE2-NEXT:    cvtsi2ss %rax, %xmm05337; SSE2-NEXT:    retq5338;5339; SSE41-LABEL: extract3_uitofp_v4i32_f32:5340; SSE41:       # %bb.0:5341; SSE41-NEXT:    extractps $3, %xmm0, %eax5342; SSE41-NEXT:    xorps %xmm0, %xmm05343; SSE41-NEXT:    cvtsi2ss %rax, %xmm05344; SSE41-NEXT:    retq5345;5346; VEX-LABEL: extract3_uitofp_v4i32_f32:5347; VEX:       # %bb.0:5348; VEX-NEXT:    vextractps $3, %xmm0, %eax5349; VEX-NEXT:    vcvtsi2ss %rax, %xmm15, %xmm05350; VEX-NEXT:    retq5351;5352; AVX512F-LABEL: extract3_uitofp_v4i32_f32:5353; AVX512F:       # %bb.0:5354; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5355; AVX512F-NEXT:    vcvtudq2ps %zmm0, %zmm05356; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05357; AVX512F-NEXT:    vzeroupper5358; AVX512F-NEXT:    retq5359;5360; AVX512VL-LABEL: extract3_uitofp_v4i32_f32:5361; AVX512VL:       # %bb.0:5362; AVX512VL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5363; AVX512VL-NEXT:    vcvtudq2ps %xmm0, %xmm05364; AVX512VL-NEXT:    retq5365;5366; AVX512DQ-LABEL: extract3_uitofp_v4i32_f32:5367; AVX512DQ:       # %bb.0:5368; AVX512DQ-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5369; AVX512DQ-NEXT:    vcvtudq2ps %zmm0, %zmm05370; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05371; AVX512DQ-NEXT:    vzeroupper5372; AVX512DQ-NEXT:    retq5373;5374; AVX512VLDQ-LABEL: extract3_uitofp_v4i32_f32:5375; AVX512VLDQ:       # %bb.0:5376; AVX512VLDQ-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5377; AVX512VLDQ-NEXT:    vcvtudq2ps %xmm0, %xmm05378; AVX512VLDQ-NEXT:    retq5379  %e = extractelement <4 x i32> %x, i32 35380  %r = uitofp i32 %e to float5381  ret float %r5382}5383 5384define double @extract3_uitofp_v4i32_f64(<4 x i32> %x) nounwind {5385; SSE2-LABEL: extract3_uitofp_v4i32_f64:5386; SSE2:       # %bb.0:5387; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]5388; SSE2-NEXT:    movd %xmm0, %eax5389; SSE2-NEXT:    xorps %xmm0, %xmm05390; SSE2-NEXT:    cvtsi2sd %rax, %xmm05391; SSE2-NEXT:    retq5392;5393; SSE41-LABEL: extract3_uitofp_v4i32_f64:5394; SSE41:       # %bb.0:5395; SSE41-NEXT:    extractps $3, %xmm0, %eax5396; SSE41-NEXT:    xorps %xmm0, %xmm05397; SSE41-NEXT:    cvtsi2sd %rax, %xmm05398; SSE41-NEXT:    retq5399;5400; VEX-LABEL: extract3_uitofp_v4i32_f64:5401; VEX:       # %bb.0:5402; VEX-NEXT:    vextractps $3, %xmm0, %eax5403; VEX-NEXT:    vcvtsi2sd %rax, %xmm15, %xmm05404; VEX-NEXT:    retq5405;5406; AVX512F-LABEL: extract3_uitofp_v4i32_f64:5407; AVX512F:       # %bb.0:5408; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5409; AVX512F-NEXT:    vcvtudq2pd %ymm0, %zmm05410; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05411; AVX512F-NEXT:    vzeroupper5412; AVX512F-NEXT:    retq5413;5414; AVX512VL-LABEL: extract3_uitofp_v4i32_f64:5415; AVX512VL:       # %bb.0:5416; AVX512VL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5417; AVX512VL-NEXT:    vcvtudq2pd %xmm0, %xmm05418; AVX512VL-NEXT:    retq5419;5420; AVX512DQ-LABEL: extract3_uitofp_v4i32_f64:5421; AVX512DQ:       # %bb.0:5422; AVX512DQ-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5423; AVX512DQ-NEXT:    vcvtudq2pd %ymm0, %zmm05424; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm05425; AVX512DQ-NEXT:    vzeroupper5426; AVX512DQ-NEXT:    retq5427;5428; AVX512VLDQ-LABEL: extract3_uitofp_v4i32_f64:5429; AVX512VLDQ:       # %bb.0:5430; AVX512VLDQ-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]5431; AVX512VLDQ-NEXT:    vcvtudq2pd %xmm0, %xmm05432; AVX512VLDQ-NEXT:    retq5433  %e = extractelement <4 x i32> %x, i32 35434  %r = uitofp i32 %e to double5435  ret double %r5436}5437 5438define void @PR43609(ptr nocapture %x, <2 x i64> %y) {5439; SSE2-LABEL: PR43609:5440; SSE2:       # %bb.0:5441; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [2,2]5442; SSE2-NEXT:    paddq %xmm0, %xmm15443; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [4294967295,4294967295]5444; SSE2-NEXT:    movdqa %xmm0, %xmm35445; SSE2-NEXT:    pand %xmm2, %xmm35446; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]5447; SSE2-NEXT:    por %xmm4, %xmm35448; SSE2-NEXT:    psrlq $32, %xmm05449; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]5450; SSE2-NEXT:    por %xmm5, %xmm05451; SSE2-NEXT:    movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]5452; SSE2-NEXT:    subpd %xmm6, %xmm05453; SSE2-NEXT:    addpd %xmm3, %xmm05454; SSE2-NEXT:    pand %xmm1, %xmm25455; SSE2-NEXT:    por %xmm4, %xmm25456; SSE2-NEXT:    psrlq $32, %xmm15457; SSE2-NEXT:    por %xmm5, %xmm15458; SSE2-NEXT:    subpd %xmm6, %xmm15459; SSE2-NEXT:    addpd %xmm2, %xmm15460; SSE2-NEXT:    movapd {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5461; SSE2-NEXT:    addpd %xmm2, %xmm05462; SSE2-NEXT:    addpd %xmm2, %xmm15463; SSE2-NEXT:    movupd %xmm0, (%rdi)5464; SSE2-NEXT:    movupd %xmm1, 16(%rdi)5465; SSE2-NEXT:    retq5466;5467; SSE41-LABEL: PR43609:5468; SSE41:       # %bb.0:5469; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [2,2]5470; SSE41-NEXT:    paddq %xmm0, %xmm15471; SSE41-NEXT:    pxor %xmm2, %xmm25472; SSE41-NEXT:    movdqa %xmm0, %xmm35473; SSE41-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0,1],xmm2[2,3],xmm3[4,5],xmm2[6,7]5474; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]5475; SSE41-NEXT:    por %xmm4, %xmm35476; SSE41-NEXT:    psrlq $32, %xmm05477; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]5478; SSE41-NEXT:    por %xmm5, %xmm05479; SSE41-NEXT:    movapd {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]5480; SSE41-NEXT:    subpd %xmm6, %xmm05481; SSE41-NEXT:    addpd %xmm3, %xmm05482; SSE41-NEXT:    pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]5483; SSE41-NEXT:    por %xmm4, %xmm25484; SSE41-NEXT:    psrlq $32, %xmm15485; SSE41-NEXT:    por %xmm5, %xmm15486; SSE41-NEXT:    subpd %xmm6, %xmm15487; SSE41-NEXT:    addpd %xmm2, %xmm15488; SSE41-NEXT:    movapd {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5489; SSE41-NEXT:    addpd %xmm2, %xmm05490; SSE41-NEXT:    addpd %xmm2, %xmm15491; SSE41-NEXT:    movupd %xmm0, (%rdi)5492; SSE41-NEXT:    movupd %xmm1, 16(%rdi)5493; SSE41-NEXT:    retq5494;5495; AVX1-LABEL: PR43609:5496; AVX1:       # %bb.0:5497; AVX1-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm15498; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm25499; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]5500; AVX1-NEXT:    vmovddup {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]5501; AVX1-NEXT:    # xmm4 = mem[0,0]5502; AVX1-NEXT:    vpor %xmm4, %xmm3, %xmm35503; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm05504; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]5505; AVX1-NEXT:    # xmm5 = mem[0,0]5506; AVX1-NEXT:    vpor %xmm5, %xmm0, %xmm05507; AVX1-NEXT:    vmovddup {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]5508; AVX1-NEXT:    # xmm6 = mem[0,0]5509; AVX1-NEXT:    vsubpd %xmm6, %xmm0, %xmm05510; AVX1-NEXT:    vaddpd %xmm0, %xmm3, %xmm05511; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]5512; AVX1-NEXT:    vpor %xmm4, %xmm2, %xmm25513; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm15514; AVX1-NEXT:    vpor %xmm5, %xmm1, %xmm15515; AVX1-NEXT:    vsubpd %xmm6, %xmm1, %xmm15516; AVX1-NEXT:    vaddpd %xmm1, %xmm2, %xmm15517; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5518; AVX1-NEXT:    # xmm2 = mem[0,0]5519; AVX1-NEXT:    vaddpd %xmm2, %xmm0, %xmm05520; AVX1-NEXT:    vaddpd %xmm2, %xmm1, %xmm15521; AVX1-NEXT:    vmovupd %xmm0, (%rdi)5522; AVX1-NEXT:    vmovupd %xmm1, 16(%rdi)5523; AVX1-NEXT:    retq5524;5525; AVX2-LABEL: PR43609:5526; AVX2:       # %bb.0:5527; AVX2-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm15528; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm25529; AVX2-NEXT:    vpblendd {{.*#+}} xmm3 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]5530; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]5531; AVX2-NEXT:    vpor %xmm4, %xmm3, %xmm35532; AVX2-NEXT:    vpsrlq $32, %xmm0, %xmm05533; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]5534; AVX2-NEXT:    vpor %xmm5, %xmm0, %xmm05535; AVX2-NEXT:    vmovddup {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]5536; AVX2-NEXT:    # xmm6 = mem[0,0]5537; AVX2-NEXT:    vsubpd %xmm6, %xmm0, %xmm05538; AVX2-NEXT:    vaddpd %xmm0, %xmm3, %xmm05539; AVX2-NEXT:    vpblendd {{.*#+}} xmm2 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]5540; AVX2-NEXT:    vpor %xmm4, %xmm2, %xmm25541; AVX2-NEXT:    vpsrlq $32, %xmm1, %xmm15542; AVX2-NEXT:    vpor %xmm5, %xmm1, %xmm15543; AVX2-NEXT:    vsubpd %xmm6, %xmm1, %xmm15544; AVX2-NEXT:    vaddpd %xmm1, %xmm2, %xmm15545; AVX2-NEXT:    vmovddup {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5546; AVX2-NEXT:    # xmm2 = mem[0,0]5547; AVX2-NEXT:    vaddpd %xmm2, %xmm0, %xmm05548; AVX2-NEXT:    vaddpd %xmm2, %xmm1, %xmm15549; AVX2-NEXT:    vmovupd %xmm0, (%rdi)5550; AVX2-NEXT:    vmovupd %xmm1, 16(%rdi)5551; AVX2-NEXT:    retq5552;5553; AVX512F-LABEL: PR43609:5554; AVX512F:       # %bb.0:5555; AVX512F-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm15556; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm25557; AVX512F-NEXT:    vpblendd {{.*#+}} xmm3 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]5558; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]5559; AVX512F-NEXT:    vpor %xmm4, %xmm3, %xmm35560; AVX512F-NEXT:    vpsrlq $32, %xmm0, %xmm05561; AVX512F-NEXT:    vpbroadcastq {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]5562; AVX512F-NEXT:    vpor %xmm5, %xmm0, %xmm05563; AVX512F-NEXT:    vmovddup {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]5564; AVX512F-NEXT:    # xmm6 = mem[0,0]5565; AVX512F-NEXT:    vsubpd %xmm6, %xmm0, %xmm05566; AVX512F-NEXT:    vaddpd %xmm0, %xmm3, %xmm05567; AVX512F-NEXT:    vpblendd {{.*#+}} xmm2 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]5568; AVX512F-NEXT:    vpor %xmm4, %xmm2, %xmm25569; AVX512F-NEXT:    vpsrlq $32, %xmm1, %xmm15570; AVX512F-NEXT:    vpor %xmm5, %xmm1, %xmm15571; AVX512F-NEXT:    vsubpd %xmm6, %xmm1, %xmm15572; AVX512F-NEXT:    vaddpd %xmm1, %xmm2, %xmm15573; AVX512F-NEXT:    vmovddup {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5574; AVX512F-NEXT:    # xmm2 = mem[0,0]5575; AVX512F-NEXT:    vaddpd %xmm2, %xmm0, %xmm05576; AVX512F-NEXT:    vaddpd %xmm2, %xmm1, %xmm15577; AVX512F-NEXT:    vmovupd %xmm0, (%rdi)5578; AVX512F-NEXT:    vmovupd %xmm1, 16(%rdi)5579; AVX512F-NEXT:    retq5580;5581; AVX512VL-LABEL: PR43609:5582; AVX512VL:       # %bb.0:5583; AVX512VL-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm15584; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm25585; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm3 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]5586; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm4 = [4841369599423283200,4841369599423283200]5587; AVX512VL-NEXT:    vpor %xmm4, %xmm3, %xmm35588; AVX512VL-NEXT:    vpsrlq $32, %xmm0, %xmm05589; AVX512VL-NEXT:    vpbroadcastq {{.*#+}} xmm5 = [4985484787499139072,4985484787499139072]5590; AVX512VL-NEXT:    vpor %xmm5, %xmm0, %xmm05591; AVX512VL-NEXT:    vmovddup {{.*#+}} xmm6 = [1.9342813118337666E+25,1.9342813118337666E+25]5592; AVX512VL-NEXT:    # xmm6 = mem[0,0]5593; AVX512VL-NEXT:    vsubpd %xmm6, %xmm0, %xmm05594; AVX512VL-NEXT:    vaddpd %xmm0, %xmm3, %xmm05595; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm2 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]5596; AVX512VL-NEXT:    vpor %xmm4, %xmm2, %xmm25597; AVX512VL-NEXT:    vpsrlq $32, %xmm1, %xmm15598; AVX512VL-NEXT:    vpor %xmm5, %xmm1, %xmm15599; AVX512VL-NEXT:    vsubpd %xmm6, %xmm1, %xmm15600; AVX512VL-NEXT:    vaddpd %xmm1, %xmm2, %xmm15601; AVX512VL-NEXT:    vmovddup {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5602; AVX512VL-NEXT:    # xmm2 = mem[0,0]5603; AVX512VL-NEXT:    vaddpd %xmm2, %xmm0, %xmm05604; AVX512VL-NEXT:    vaddpd %xmm2, %xmm1, %xmm15605; AVX512VL-NEXT:    vmovupd %xmm0, (%rdi)5606; AVX512VL-NEXT:    vmovupd %xmm1, 16(%rdi)5607; AVX512VL-NEXT:    retq5608;5609; AVX512DQ-LABEL: PR43609:5610; AVX512DQ:       # %bb.0:5611; AVX512DQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm05612; AVX512DQ-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm15613; AVX512DQ-NEXT:    vcvtuqq2pd %zmm0, %zmm05614; AVX512DQ-NEXT:    vcvtuqq2pd %zmm1, %zmm15615; AVX512DQ-NEXT:    vmovddup {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5616; AVX512DQ-NEXT:    # xmm2 = mem[0,0]5617; AVX512DQ-NEXT:    vaddpd %xmm2, %xmm0, %xmm05618; AVX512DQ-NEXT:    vaddpd %xmm2, %xmm1, %xmm15619; AVX512DQ-NEXT:    vmovupd %xmm0, (%rdi)5620; AVX512DQ-NEXT:    vmovupd %xmm1, 16(%rdi)5621; AVX512DQ-NEXT:    vzeroupper5622; AVX512DQ-NEXT:    retq5623;5624; AVX512VLDQ-LABEL: PR43609:5625; AVX512VLDQ:       # %bb.0:5626; AVX512VLDQ-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm15627; AVX512VLDQ-NEXT:    vcvtuqq2pd %xmm0, %xmm05628; AVX512VLDQ-NEXT:    vcvtuqq2pd %xmm1, %xmm15629; AVX512VLDQ-NEXT:    vmovddup {{.*#+}} xmm2 = [5.0E-1,5.0E-1]5630; AVX512VLDQ-NEXT:    # xmm2 = mem[0,0]5631; AVX512VLDQ-NEXT:    vaddpd %xmm2, %xmm0, %xmm05632; AVX512VLDQ-NEXT:    vaddpd %xmm2, %xmm1, %xmm15633; AVX512VLDQ-NEXT:    vmovupd %xmm0, (%rdi)5634; AVX512VLDQ-NEXT:    vmovupd %xmm1, 16(%rdi)5635; AVX512VLDQ-NEXT:    retq5636  %step.add.epil = add <2 x i64> %y, <i64 2, i64 2>5637  %t20 = uitofp <2 x i64> %y to <2 x double>5638  %t21 = uitofp <2 x i64> %step.add.epil to <2 x double>5639  %t22 = fadd fast <2 x double> %t20, <double 5.0e-01, double 5.0e-01>5640  %t23 = fadd fast <2 x double> %t21, <double 5.0e-01, double 5.0e-01>5641  store <2 x double> %t22, ptr %x, align 85642  %t26 = getelementptr inbounds double, ptr %x, i64 25643  store <2 x double> %t23, ptr %t26, align 85644  ret void5645}5646