brintos

brintos / llvm-project-archived public Read only

0
0
Text · 98.7 KiB · 94fc982 Raw
2525 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2 --check-prefix=AVX2-SLOW4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2 --check-prefix=AVX2-FAST5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2 --check-prefix=AVX2-FAST6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL --check-prefix=AVX512VL-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST --check-prefix=AVX512VL-FAST-ALL8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST --check-prefix=AVX512VL-FAST-PERLANE9 10define <4 x double> @shuffle_v4f64_0000(<4 x double> %a, <4 x double> %b) {11; AVX1-LABEL: shuffle_v4f64_0000:12; AVX1:       # %bb.0:13; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]14; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm015; AVX1-NEXT:    retq16;17; AVX2-LABEL: shuffle_v4f64_0000:18; AVX2:       # %bb.0:19; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm020; AVX2-NEXT:    retq21;22; AVX512VL-LABEL: shuffle_v4f64_0000:23; AVX512VL:       # %bb.0:24; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm025; AVX512VL-NEXT:    retq26  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 0>27  ret <4 x double> %shuffle28}29 30define <4 x double> @shuffle_v4f64_0001(<4 x double> %a, <4 x double> %b) {31; AVX1-LABEL: shuffle_v4f64_0001:32; AVX1:       # %bb.0:33; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm0[0,0]34; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm035; AVX1-NEXT:    retq36;37; AVX2-LABEL: shuffle_v4f64_0001:38; AVX2:       # %bb.0:39; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]40; AVX2-NEXT:    retq41;42; AVX512VL-LABEL: shuffle_v4f64_0001:43; AVX512VL:       # %bb.0:44; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]45; AVX512VL-NEXT:    retq46  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>47  ret <4 x double> %shuffle48}49 50define <4 x double> @shuffle_v4f64_0020(<4 x double> %a, <4 x double> %b) {51; AVX1-LABEL: shuffle_v4f64_0020:52; AVX1:       # %bb.0:53; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm154; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]55; AVX1-NEXT:    retq56;57; AVX2-LABEL: shuffle_v4f64_0020:58; AVX2:       # %bb.0:59; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]60; AVX2-NEXT:    retq61;62; AVX512VL-LABEL: shuffle_v4f64_0020:63; AVX512VL:       # %bb.0:64; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]65; AVX512VL-NEXT:    retq66  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>67  ret <4 x double> %shuffle68}69 70define <4 x double> @shuffle_v4f64_0300(<4 x double> %a, <4 x double> %b) {71; AVX1-LABEL: shuffle_v4f64_0300:72; AVX1:       # %bb.0:73; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]74; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm075; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[2]76; AVX1-NEXT:    retq77;78; AVX2-LABEL: shuffle_v4f64_0300:79; AVX2:       # %bb.0:80; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]81; AVX2-NEXT:    retq82;83; AVX512VL-LABEL: shuffle_v4f64_0300:84; AVX512VL:       # %bb.0:85; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]86; AVX512VL-NEXT:    retq87  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>88  ret <4 x double> %shuffle89}90 91define <4 x double> @shuffle_v4f64_1000(<4 x double> %a, <4 x double> %b) {92; AVX1-LABEL: shuffle_v4f64_1000:93; AVX1:       # %bb.0:94; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm095; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,2,2]96; AVX1-NEXT:    retq97;98; AVX2-LABEL: shuffle_v4f64_1000:99; AVX2:       # %bb.0:100; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]101; AVX2-NEXT:    retq102;103; AVX512VL-LABEL: shuffle_v4f64_1000:104; AVX512VL:       # %bb.0:105; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]106; AVX512VL-NEXT:    retq107  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>108  ret <4 x double> %shuffle109}110 111define <4 x double> @shuffle_v4f64_2200(<4 x double> %a, <4 x double> %b) {112; AVX1-LABEL: shuffle_v4f64_2200:113; AVX1:       # %bb.0:114; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]115; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]116; AVX1-NEXT:    retq117;118; AVX2-LABEL: shuffle_v4f64_2200:119; AVX2:       # %bb.0:120; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]121; AVX2-NEXT:    retq122;123; AVX512VL-LABEL: shuffle_v4f64_2200:124; AVX512VL:       # %bb.0:125; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]126; AVX512VL-NEXT:    retq127  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>128  ret <4 x double> %shuffle129}130 131define <4 x double> @shuffle_v4f64_2222(<4 x double> %a, <4 x double> %b) {132; AVX1-LABEL: shuffle_v4f64_2222:133; AVX1:       # %bb.0:134; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]135; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]136; AVX1-NEXT:    retq137;138; AVX2-LABEL: shuffle_v4f64_2222:139; AVX2:       # %bb.0:140; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]141; AVX2-NEXT:    retq142;143; AVX512VL-LABEL: shuffle_v4f64_2222:144; AVX512VL:       # %bb.0:145; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]146; AVX512VL-NEXT:    retq147  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 2, i32 2>148  ret <4 x double> %shuffle149}150 151define <4 x double> @shuffle_v4f64_2222_bc(<4 x i64> %a, <4 x i64> %b) {152; AVX1-LABEL: shuffle_v4f64_2222_bc:153; AVX1:       # %bb.0:154; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]155; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]156; AVX1-NEXT:    retq157;158; AVX2-LABEL: shuffle_v4f64_2222_bc:159; AVX2:       # %bb.0:160; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]161; AVX2-NEXT:    retq162;163; AVX512VL-LABEL: shuffle_v4f64_2222_bc:164; AVX512VL:       # %bb.0:165; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]166; AVX512VL-NEXT:    retq167  %tmp0 = bitcast <4 x i64> %a to <4 x double>168  %tmp1 = bitcast <4 x i64> %b to <4 x double>169  %shuffle = shufflevector <4 x double> %tmp0, <4 x double> %tmp1, <4 x i32> <i32 2, i32 2, i32 2, i32 2>170  ret <4 x double> %shuffle171}172 173define <4 x double> @shuffle_v4f64_2233(<4 x double> %a, <4 x double> %b) {174; AVX1-LABEL: shuffle_v4f64_2233:175; AVX1:       # %bb.0:176; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]177; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0,0,3,3]178; AVX1-NEXT:    retq179;180; AVX2-LABEL: shuffle_v4f64_2233:181; AVX2:       # %bb.0:182; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,3,3]183; AVX2-NEXT:    retq184;185; AVX512VL-LABEL: shuffle_v4f64_2233:186; AVX512VL:       # %bb.0:187; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,3,3]188; AVX512VL-NEXT:    retq189  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 3, i32 3>190  ret <4 x double> %shuffle191}192 193define <4 x double> @shuffle_v4f64_3330(<4 x double> %a, <4 x double> %b) {194; AVX1-LABEL: shuffle_v4f64_3330:195; AVX1:       # %bb.0:196; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]197; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]198; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[2]199; AVX1-NEXT:    retq200;201; AVX2-LABEL: shuffle_v4f64_3330:202; AVX2:       # %bb.0:203; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]204; AVX2-NEXT:    retq205;206; AVX512VL-LABEL: shuffle_v4f64_3330:207; AVX512VL:       # %bb.0:208; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]209; AVX512VL-NEXT:    retq210  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>211  ret <4 x double> %shuffle212}213 214define <4 x double> @shuffle_v4f64_3210(<4 x double> %a, <4 x double> %b) {215; AVX1-LABEL: shuffle_v4f64_3210:216; AVX1:       # %bb.0:217; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]218; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]219; AVX1-NEXT:    retq220;221; AVX2-LABEL: shuffle_v4f64_3210:222; AVX2:       # %bb.0:223; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]224; AVX2-NEXT:    retq225;226; AVX512VL-LABEL: shuffle_v4f64_3210:227; AVX512VL:       # %bb.0:228; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]229; AVX512VL-NEXT:    retq230  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>231  ret <4 x double> %shuffle232}233 234define <4 x double> @shuffle_v4f64_0023(<4 x double> %a, <4 x double> %b) {235; ALL-LABEL: shuffle_v4f64_0023:236; ALL:       # %bb.0:237; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0,0,2,3]238; ALL-NEXT:    retq239 240  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 3>241  ret <4 x double> %shuffle242}243 244define <4 x double> @shuffle_v4f64_0022(<4 x double> %a, <4 x double> %b) {245; ALL-LABEL: shuffle_v4f64_0022:246; ALL:       # %bb.0:247; ALL-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]248; ALL-NEXT:    retq249  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>250  ret <4 x double> %shuffle251}252 253define <4 x double> @shuffle_v4f64mem_0022(ptr %ptr, <4 x double> %b) {254; ALL-LABEL: shuffle_v4f64mem_0022:255; ALL:       # %bb.0:256; ALL-NEXT:    vmovddup {{.*#+}} ymm0 = mem[0,0,2,2]257; ALL-NEXT:    retq258  %a = load  <4 x double>,  ptr %ptr259  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>260  ret <4 x double> %shuffle261}262 263define <4 x double> @shuffle_v4f64_1032(<4 x double> %a, <4 x double> %b) {264; ALL-LABEL: shuffle_v4f64_1032:265; ALL:       # %bb.0:266; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]267; ALL-NEXT:    retq268  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 3, i32 2>269  ret <4 x double> %shuffle270}271 272define <4 x double> @shuffle_v4f64_1133(<4 x double> %a, <4 x double> %b) {273; ALL-LABEL: shuffle_v4f64_1133:274; ALL:       # %bb.0:275; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,1,3,3]276; ALL-NEXT:    retq277  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>278  ret <4 x double> %shuffle279}280 281define <4 x double> @shuffle_v4f64_1023(<4 x double> %a, <4 x double> %b) {282; ALL-LABEL: shuffle_v4f64_1023:283; ALL:       # %bb.0:284; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,2,3]285; ALL-NEXT:    retq286  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 3>287  ret <4 x double> %shuffle288}289 290define <4 x double> @shuffle_v4f64_1022(<4 x double> %a, <4 x double> %b) {291; ALL-LABEL: shuffle_v4f64_1022:292; ALL:       # %bb.0:293; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,2,2]294; ALL-NEXT:    retq295  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 2>296  ret <4 x double> %shuffle297}298 299define <4 x double> @shuffle_v4f64_0213(<4 x double> %a, <4 x double> %b) {300; AVX1-LABEL: shuffle_v4f64_0213:301; AVX1:       # %bb.0:302; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,2,3]303; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0304; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]305; AVX1-NEXT:    retq306;307; AVX2-LABEL: shuffle_v4f64_0213:308; AVX2:       # %bb.0:309; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]310; AVX2-NEXT:    retq311;312; AVX512VL-LABEL: shuffle_v4f64_0213:313; AVX512VL:       # %bb.0:314; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]315; AVX512VL-NEXT:    retq316  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 2, i32 1, i32 3>317  ret <4 x double> %shuffle318}319 320define <4 x double> @shuffle_v4f64_0423(<4 x double> %a, <4 x double> %b) {321; AVX1OR2-LABEL: shuffle_v4f64_0423:322; AVX1OR2:       # %bb.0:323; AVX1OR2-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]324; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]325; AVX1OR2-NEXT:    retq326;327; AVX512VL-SLOW-LABEL: shuffle_v4f64_0423:328; AVX512VL-SLOW:       # %bb.0:329; AVX512VL-SLOW-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]330; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]331; AVX512VL-SLOW-NEXT:    retq332;333; AVX512VL-FAST-LABEL: shuffle_v4f64_0423:334; AVX512VL-FAST:       # %bb.0:335; AVX512VL-FAST-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,2,3]336; AVX512VL-FAST-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0337; AVX512VL-FAST-NEXT:    retq338  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 3>339  ret <4 x double> %shuffle340}341 342define <4 x double> @shuffle_v4f64_0462(<4 x double> %a, <4 x double> %b) {343; AVX1OR2-LABEL: shuffle_v4f64_0462:344; AVX1OR2:       # %bb.0:345; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm2 = ymm1[0,1,2,3],ymm0[4,5,6,7]346; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]347; AVX1OR2-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]348; AVX1OR2-NEXT:    retq349;350; AVX512VL-LABEL: shuffle_v4f64_0462:351; AVX512VL:       # %bb.0:352; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,6,2]353; AVX512VL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0354; AVX512VL-NEXT:    retq355  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 6, i32 2>356  ret <4 x double> %shuffle357}358 359define <4 x double> @shuffle_v4f64_0426(<4 x double> %a, <4 x double> %b) {360; ALL-LABEL: shuffle_v4f64_0426:361; ALL:       # %bb.0:362; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]363; ALL-NEXT:    retq364  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>365  ret <4 x double> %shuffle366}367 368define <4 x double> @shuffle_v4f64_1537(<4 x double> %a, <4 x double> %b) {369; ALL-LABEL: shuffle_v4f64_1537:370; ALL:       # %bb.0:371; ALL-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]372; ALL-NEXT:    retq373  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>374  ret <4 x double> %shuffle375}376 377define <4 x double> @shuffle_v4f64_4062(<4 x double> %a, <4 x double> %b) {378; ALL-LABEL: shuffle_v4f64_4062:379; ALL:       # %bb.0:380; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]381; ALL-NEXT:    retq382  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2>383  ret <4 x double> %shuffle384}385 386define <4 x double> @shuffle_v4f64_5173(<4 x double> %a, <4 x double> %b) {387; ALL-LABEL: shuffle_v4f64_5173:388; ALL:       # %bb.0:389; ALL-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]390; ALL-NEXT:    retq391  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 7, i32 3>392  ret <4 x double> %shuffle393}394 395define <4 x double> @shuffle_v4f64_5163(<4 x double> %a, <4 x double> %b) {396; ALL-LABEL: shuffle_v4f64_5163:397; ALL:       # %bb.0:398; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[2],ymm0[3]399; ALL-NEXT:    retq400  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 6, i32 3>401  ret <4 x double> %shuffle402}403 404define <4 x double> @shuffle_v4f64_0527(<4 x double> %a, <4 x double> %b) {405; ALL-LABEL: shuffle_v4f64_0527:406; ALL:       # %bb.0:407; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]408; ALL-NEXT:    retq409  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7>410  ret <4 x double> %shuffle411}412 413define <4 x double> @shuffle_v4f64_4163(<4 x double> %a, <4 x double> %b) {414; ALL-LABEL: shuffle_v4f64_4163:415; ALL:       # %bb.0:416; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]417; ALL-NEXT:    retq418  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3>419  ret <4 x double> %shuffle420}421 422define <4 x double> @shuffle_v4f64_0145(<4 x double> %a, <4 x double> %b) {423; ALL-LABEL: shuffle_v4f64_0145:424; ALL:       # %bb.0:425; ALL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0426; ALL-NEXT:    retq427  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>428  ret <4 x double> %shuffle429}430 431define <4 x double> @shuffle_v4f64_4501(<4 x double> %a, <4 x double> %b) {432; ALL-LABEL: shuffle_v4f64_4501:433; ALL:       # %bb.0:434; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0435; ALL-NEXT:    retq436  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>437  ret <4 x double> %shuffle438}439 440define <4 x double> @shuffle_v4f64_0167(<4 x double> %a, <4 x double> %b) {441; ALL-LABEL: shuffle_v4f64_0167:442; ALL:       # %bb.0:443; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]444; ALL-NEXT:    retq445  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7>446  ret <4 x double> %shuffle447}448 449define <4 x double> @shuffle_v4f64_1054(<4 x double> %a, <4 x double> %b) {450; AVX1OR2-LABEL: shuffle_v4f64_1054:451; AVX1OR2:       # %bb.0:452; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0453; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]454; AVX1OR2-NEXT:    retq455;456; AVX512VL-SLOW-LABEL: shuffle_v4f64_1054:457; AVX512VL-SLOW:       # %bb.0:458; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0459; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]460; AVX512VL-SLOW-NEXT:    retq461;462; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_1054:463; AVX512VL-FAST-ALL:       # %bb.0:464; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,0,5,4]465; AVX512VL-FAST-ALL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0466; AVX512VL-FAST-ALL-NEXT:    retq467;468; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_1054:469; AVX512VL-FAST-PERLANE:       # %bb.0:470; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0471; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]472; AVX512VL-FAST-PERLANE-NEXT:    retq473  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 5, i32 4>474  ret <4 x double> %shuffle475}476 477define <4 x double> @shuffle_v4f64_3254(<4 x double> %a, <4 x double> %b) {478; AVX1OR2-LABEL: shuffle_v4f64_3254:479; AVX1OR2:       # %bb.0:480; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]481; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]482; AVX1OR2-NEXT:    retq483;484; AVX512VL-SLOW-LABEL: shuffle_v4f64_3254:485; AVX512VL-SLOW:       # %bb.0:486; AVX512VL-SLOW-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]487; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]488; AVX512VL-SLOW-NEXT:    retq489;490; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_3254:491; AVX512VL-FAST-ALL:       # %bb.0:492; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [3,2,5,4]493; AVX512VL-FAST-ALL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0494; AVX512VL-FAST-ALL-NEXT:    retq495;496; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_3254:497; AVX512VL-FAST-PERLANE:       # %bb.0:498; AVX512VL-FAST-PERLANE-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]499; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]500; AVX512VL-FAST-PERLANE-NEXT:    retq501  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 5, i32 4>502  ret <4 x double> %shuffle503}504 505define <4 x double> @shuffle_v4f64_3276(<4 x double> %a, <4 x double> %b) {506; AVX1OR2-LABEL: shuffle_v4f64_3276:507; AVX1OR2:       # %bb.0:508; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]509; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]510; AVX1OR2-NEXT:    retq511;512; AVX512VL-SLOW-LABEL: shuffle_v4f64_3276:513; AVX512VL-SLOW:       # %bb.0:514; AVX512VL-SLOW-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]515; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]516; AVX512VL-SLOW-NEXT:    retq517;518; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_3276:519; AVX512VL-FAST-ALL:       # %bb.0:520; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [3,2,7,6]521; AVX512VL-FAST-ALL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0522; AVX512VL-FAST-ALL-NEXT:    retq523;524; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_3276:525; AVX512VL-FAST-PERLANE:       # %bb.0:526; AVX512VL-FAST-PERLANE-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]527; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]528; AVX512VL-FAST-PERLANE-NEXT:    retq529  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 7, i32 6>530  ret <4 x double> %shuffle531}532 533define <4 x double> @shuffle_v4f64_1076(<4 x double> %a, <4 x double> %b) {534; AVX1OR2-LABEL: shuffle_v4f64_1076:535; AVX1OR2:       # %bb.0:536; AVX1OR2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]537; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]538; AVX1OR2-NEXT:    retq539;540; AVX512VL-SLOW-LABEL: shuffle_v4f64_1076:541; AVX512VL-SLOW:       # %bb.0:542; AVX512VL-SLOW-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]543; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]544; AVX512VL-SLOW-NEXT:    retq545;546; AVX512VL-FAST-LABEL: shuffle_v4f64_1076:547; AVX512VL-FAST:       # %bb.0:548; AVX512VL-FAST-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,0,7,6]549; AVX512VL-FAST-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0550; AVX512VL-FAST-NEXT:    retq551  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 7, i32 6>552  ret <4 x double> %shuffle553}554 555define <4 x double> @shuffle_v4f64_0415(<4 x double> %a, <4 x double> %b) {556; AVX1-LABEL: shuffle_v4f64_0415:557; AVX1:       # %bb.0:558; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1]559; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]560; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0561; AVX1-NEXT:    retq562;563; AVX2-LABEL: shuffle_v4f64_0415:564; AVX2:       # %bb.0:565; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1]566; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]567; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]568; AVX2-NEXT:    retq569;570; AVX512VL-LABEL: shuffle_v4f64_0415:571; AVX512VL:       # %bb.0:572; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,1,5]573; AVX512VL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0574; AVX512VL-NEXT:    retq575  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>576  ret <4 x double> %shuffle577}578 579define <4 x double> @shuffle_v4f64_2741(<4 x double> %a, <4 x double> %b) {580; AVX1OR2-LABEL: shuffle_v4f64_2741:581; AVX1OR2:       # %bb.0:582; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3],ymm0[0,1]583; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]584; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm2[2,3],ymm0[4,5],ymm2[6,7]585; AVX1OR2-NEXT:    retq586;587; AVX512VL-LABEL: shuffle_v4f64_2741:588; AVX512VL:       # %bb.0:589; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [2,7,4,1]590; AVX512VL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0591; AVX512VL-NEXT:    retq592  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 7, i32 4, i32 1>593  ret <4 x double> %shuffle594}595 596define <4 x double> @shuffle_v4f64_u062(<4 x double> %a, <4 x double> %b) {597; ALL-LABEL: shuffle_v4f64_u062:598; ALL:       # %bb.0:599; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]600; ALL-NEXT:    retq601  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 poison, i32 0, i32 6, i32 2>602  ret <4 x double> %shuffle603}604 605define <4 x double> @shuffle_v4f64_15uu(<4 x double> %a, <4 x double> %b) {606; ALL-LABEL: shuffle_v4f64_15uu:607; ALL:       # %bb.0:608; ALL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]609; ALL-NEXT:    retq610  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 poison, i32 poison>611  ret <4 x double> %shuffle612}613 614define <4 x double> @shuffle_v4f64_11uu(<4 x double> %a, <4 x double> %b) {615; ALL-LABEL: shuffle_v4f64_11uu:616; ALL:       # %bb.0:617; ALL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1,1]618; ALL-NEXT:    retq619  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 poison, i32 poison>620  ret <4 x double> %shuffle621}622 623define <4 x double> @shuffle_v4f64_22uu(<4 x double> %a, <4 x double> %b) {624; AVX1-LABEL: shuffle_v4f64_22uu:625; AVX1:       # %bb.0:626; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0627; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]628; AVX1-NEXT:    retq629;630; AVX2-LABEL: shuffle_v4f64_22uu:631; AVX2:       # %bb.0:632; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]633; AVX2-NEXT:    retq634;635; AVX512VL-LABEL: shuffle_v4f64_22uu:636; AVX512VL:       # %bb.0:637; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]638; AVX512VL-NEXT:    retq639  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 poison, i32 poison>640  ret <4 x double> %shuffle641}642 643define <4 x double> @shuffle_v4f64_3333(<4 x double> %a, <4 x double> %b) {644; AVX1-LABEL: shuffle_v4f64_3333:645; AVX1:       # %bb.0:646; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]647; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,1,3,3]648; AVX1-NEXT:    retq649;650; AVX2-LABEL: shuffle_v4f64_3333:651; AVX2:       # %bb.0:652; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]653; AVX2-NEXT:    retq654;655; AVX512VL-LABEL: shuffle_v4f64_3333:656; AVX512VL:       # %bb.0:657; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]658; AVX512VL-NEXT:    retq659  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3>660  ret <4 x double> %shuffle661}662 663define <4 x double> @shuffle_v4f64_0456(<4 x double> %a, <4 x double> %b) {664; AVX1OR2-LABEL: shuffle_v4f64_0456:665; AVX1OR2:       # %bb.0:666; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0667; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]668; AVX1OR2-NEXT:    retq669;670; AVX512VL-SLOW-LABEL: shuffle_v4f64_0456:671; AVX512VL-SLOW:       # %bb.0:672; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0673; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]674; AVX512VL-SLOW-NEXT:    retq675;676; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_0456:677; AVX512VL-FAST-ALL:       # %bb.0:678; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [4,0,1,2]679; AVX512VL-FAST-ALL-NEXT:    vpermi2pd %ymm0, %ymm1, %ymm2680; AVX512VL-FAST-ALL-NEXT:    vmovapd %ymm2, %ymm0681; AVX512VL-FAST-ALL-NEXT:    retq682;683; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_0456:684; AVX512VL-FAST-PERLANE:       # %bb.0:685; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0686; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]687; AVX512VL-FAST-PERLANE-NEXT:    retq688  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 6>689  ret <4 x double> %shuffle690}691 692; PR59860693define <4 x double> @shuffle_v4f64_0437(<4 x double> %a, <4 x double> %b) {694; ALL-LABEL: shuffle_v4f64_0437:695; ALL:       # %bb.0:696; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]697; ALL-NEXT:    retq698  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 3, i32 7>699  ret <4 x double> %shuffle700}701 702; PR91433703define <4 x double> @shuffle_v4f64_2303(<4 x double> %a) {704; AVX1-LABEL: shuffle_v4f64_2303:705; AVX1:       # %bb.0:706; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,2,3]707; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]708; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]709; AVX1-NEXT:    retq710;711; AVX2-LABEL: shuffle_v4f64_2303:712; AVX2:       # %bb.0:713; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,3]714; AVX2-NEXT:    retq715;716; AVX512VL-LABEL: shuffle_v4f64_2303:717; AVX512VL:       # %bb.0:718; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,3]719; AVX512VL-NEXT:    retq720  %shuffle = shufflevector <4 x double> %a, <4 x double> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 3>721  ret <4 x double> %shuffle722}723 724define <4 x double> @shuffle_v4f64_0z3z(<4 x double> %a, <4 x double> %b) {725; ALL-LABEL: shuffle_v4f64_0z3z:726; ALL:       # %bb.0:727; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1728; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[3],ymm1[3]729; ALL-NEXT:    retq730  %shuffle = shufflevector <4 x double> %a, <4 x double> <double 0.000000e+00, double poison, double poison, double poison>, <4 x i32> <i32 0, i32 4, i32 3, i32 4>731  ret <4 x double> %shuffle732}733 734define <4 x double> @shuffle_v4f64_1z2z(<4 x double> %a, <4 x double> %b) {735; ALL-LABEL: shuffle_v4f64_1z2z:736; ALL:       # %bb.0:737; ALL-NEXT:    vxorpd %xmm1, %xmm1, %xmm1738; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[2],ymm1[3]739; ALL-NEXT:    retq740  %1 = shufflevector <4 x double> %a, <4 x double> <double 0.000000e+00, double poison, double poison, double poison>, <4 x i32> <i32 1, i32 4, i32 2, i32 4>741  ret <4 x double> %1742}743 744define <4 x double> @shuffle_v4f64_0044(<4 x double> %a, <4 x double> %b) {745; AVX1-LABEL: shuffle_v4f64_0044:746; AVX1:       # %bb.0:747; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0748; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]749; AVX1-NEXT:    retq750;751; AVX2-LABEL: shuffle_v4f64_0044:752; AVX2:       # %bb.0:753; AVX2-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]754; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]755; AVX2-NEXT:    retq756;757; AVX512VL-SLOW-LABEL: shuffle_v4f64_0044:758; AVX512VL-SLOW:       # %bb.0:759; AVX512VL-SLOW-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]760; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]761; AVX512VL-SLOW-NEXT:    retq762;763; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_0044:764; AVX512VL-FAST-ALL:       # %bb.0:765; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,0,4,4]766; AVX512VL-FAST-ALL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0767; AVX512VL-FAST-ALL-NEXT:    retq768;769; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_0044:770; AVX512VL-FAST-PERLANE:       # %bb.0:771; AVX512VL-FAST-PERLANE-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]772; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]773; AVX512VL-FAST-PERLANE-NEXT:    retq774  %1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 4, i32 4>775  ret <4 x double> %1776}777 778define <4 x double> @shuffle_v4f64_0044_v2f64(<2 x double> %a, <2 x double> %b) {779; AVX1OR2-LABEL: shuffle_v4f64_0044_v2f64:780; AVX1OR2:       # %bb.0:781; AVX1OR2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0782; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0783; AVX1OR2-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]784; AVX1OR2-NEXT:    retq785;786; AVX512VL-SLOW-LABEL: shuffle_v4f64_0044_v2f64:787; AVX512VL-SLOW:       # %bb.0:788; AVX512VL-SLOW-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0789; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0790; AVX512VL-SLOW-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]791; AVX512VL-SLOW-NEXT:    retq792;793; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_0044_v2f64:794; AVX512VL-FAST-ALL:       # %bb.0:795; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm1796; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0797; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,0,4,4]798; AVX512VL-FAST-ALL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0799; AVX512VL-FAST-ALL-NEXT:    retq800;801; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_0044_v2f64:802; AVX512VL-FAST-PERLANE:       # %bb.0:803; AVX512VL-FAST-PERLANE-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0804; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0805; AVX512VL-FAST-PERLANE-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]806; AVX512VL-FAST-PERLANE-NEXT:    retq807  %1 = shufflevector <2 x double> %a, <2 x double> poison, <2 x i32> <i32 0, i32 0>808  %2 = shufflevector <2 x double> %b, <2 x double> poison, <2 x i32> <i32 0, i32 0>809  %3 = shufflevector <2 x double> %1, <2 x double> %2, <4 x i32> <i32 0, i32 1, i32 2, i32 3>810  ret <4 x double> %3811}812 813define <4 x double> @shuffle_v4f64_1032_v2f64(<2 x double> %a, <2 x double> %b) {814; AVX1OR2-LABEL: shuffle_v4f64_1032_v2f64:815; AVX1OR2:       # %bb.0:816; AVX1OR2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0817; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0818; AVX1OR2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]819; AVX1OR2-NEXT:    retq820;821; AVX512VL-SLOW-LABEL: shuffle_v4f64_1032_v2f64:822; AVX512VL-SLOW:       # %bb.0:823; AVX512VL-SLOW-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0824; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0825; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]826; AVX512VL-SLOW-NEXT:    retq827;828; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_1032_v2f64:829; AVX512VL-FAST-ALL:       # %bb.0:830; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm1831; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0832; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,0,5,4]833; AVX512VL-FAST-ALL-NEXT:    vpermt2pd %ymm1, %ymm2, %ymm0834; AVX512VL-FAST-ALL-NEXT:    retq835;836; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_1032_v2f64:837; AVX512VL-FAST-PERLANE:       # %bb.0:838; AVX512VL-FAST-PERLANE-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0839; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0840; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]841; AVX512VL-FAST-PERLANE-NEXT:    retq842  %1 = shufflevector <2 x double> %a, <2 x double> poison, <2 x i32> <i32 1, i32 0>843  %2 = shufflevector <2 x double> %b, <2 x double> poison, <2 x i32> <i32 1, i32 0>844  %3 = shufflevector <2 x double> %1, <2 x double> %2, <4 x i32> <i32 0, i32 1, i32 2, i32 3>845  ret <4 x double> %3846}847 848;PR34359849define <4 x double> @shuffle_v4f64_2345_0567_select(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3) {850; ALL-LABEL: shuffle_v4f64_2345_0567_select:851; ALL:       # %bb.0:852; ALL-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]853; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm2[0,1],ymm0[2,3,4,5,6,7]854; ALL-NEXT:    retq855  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 2, i32 3, i32 4, i32 5>856  %res = select <4 x i1> <i1 0, i1 1, i1 1, i1 1>, <4 x double> %shuf, <4 x double> %vec3857  ret <4 x double> %res858}859 860; PR140234861define <4 x double> @shuffle_v4f64_1436_split_load(ptr %px, ptr %py) {862; AVX1-LABEL: shuffle_v4f64_1436_split_load:863; AVX1:       # %bb.0:864; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]865; AVX1-NEXT:    vmovupd (%rdi), %ymm1866; AVX1-NEXT:    vinsertf128 $1, 16(%rsi), %ymm0, %ymm0867; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[2]868; AVX1-NEXT:    retq869;870; AVX2-LABEL: shuffle_v4f64_1436_split_load:871; AVX2:       # %bb.0:872; AVX2-NEXT:    vmovapd (%rsi), %xmm0873; AVX2-NEXT:    vmovupd (%rdi), %ymm1874; AVX2-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[0],ymm1[3],ymm0[3]875; AVX2-NEXT:    vbroadcastsd 16(%rsi), %ymm1876; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3]877; AVX2-NEXT:    retq878;879; AVX512VL-SLOW-LABEL: shuffle_v4f64_1436_split_load:880; AVX512VL-SLOW:       # %bb.0:881; AVX512VL-SLOW-NEXT:    vmovapd (%rsi), %xmm0882; AVX512VL-SLOW-NEXT:    vmovupd (%rdi), %ymm1883; AVX512VL-SLOW-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[0],ymm1[3],ymm0[3]884; AVX512VL-SLOW-NEXT:    vbroadcastsd 16(%rsi), %ymm1885; AVX512VL-SLOW-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3]886; AVX512VL-SLOW-NEXT:    retq887;888; AVX512VL-FAST-ALL-LABEL: shuffle_v4f64_1436_split_load:889; AVX512VL-FAST-ALL:       # %bb.0:890; AVX512VL-FAST-ALL-NEXT:    vmovapd (%rsi), %xmm0891; AVX512VL-FAST-ALL-NEXT:    vmovapd 16(%rsi), %xmm1892; AVX512VL-FAST-ALL-NEXT:    vmovupd (%rdi), %ymm2893; AVX512VL-FAST-ALL-NEXT:    vshufpd {{.*#+}} ymm2 = ymm2[1],ymm0[0],ymm2[3],ymm0[3]894; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm0 = [0,1,2,4]895; AVX512VL-FAST-ALL-NEXT:    vpermi2pd %ymm1, %ymm2, %ymm0896; AVX512VL-FAST-ALL-NEXT:    retq897;898; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4f64_1436_split_load:899; AVX512VL-FAST-PERLANE:       # %bb.0:900; AVX512VL-FAST-PERLANE-NEXT:    vmovapd (%rsi), %xmm0901; AVX512VL-FAST-PERLANE-NEXT:    vmovupd (%rdi), %ymm1902; AVX512VL-FAST-PERLANE-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[0],ymm1[3],ymm0[3]903; AVX512VL-FAST-PERLANE-NEXT:    vbroadcastsd 16(%rsi), %ymm1904; AVX512VL-FAST-PERLANE-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3]905; AVX512VL-FAST-PERLANE-NEXT:    retq906  %pxhi = getelementptr inbounds nuw i8, ptr %px, i64 16907  %pyhi = getelementptr inbounds nuw i8, ptr %py, i64 16908  %x0 = load <2 x double>, ptr %px, align 16909  %y0 = load <2 x double>, ptr %py, align 16910  %x1 = load <2 x double>, ptr %pxhi, align 16911  %y1 = load <2 x double>, ptr %pyhi, align 16912  %shuf0 = shufflevector <2 x double> %x0, <2 x double> %y0, <4 x i32> <i32 1, i32 2, i32 poison, i32 poison>913  %shuf1 = shufflevector <2 x double> %x1, <2 x double> poison, <4 x i32> <i32 poison, i32 1, i32 poison, i32 poison>914  %shuf2 = shufflevector <4 x double> %shuf0, <4 x double> %shuf1, <4 x i32> <i32 0, i32 1, i32 5, i32 poison>915  %shuf3 = shufflevector <2 x double> %y1, <2 x double> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>916  %shuf4 = shufflevector <4 x double> %shuf2, <4 x double> %shuf3, <4 x i32> <i32 0, i32 1, i32 2, i32 4>917  ret <4 x double> %shuf4918}919 920define <4 x i64> @shuffle_v4i64_0000(<4 x i64> %a, <4 x i64> %b) {921; AVX1-LABEL: shuffle_v4i64_0000:922; AVX1:       # %bb.0:923; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,0,1]924; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0925; AVX1-NEXT:    retq926;927; AVX2-LABEL: shuffle_v4i64_0000:928; AVX2:       # %bb.0:929; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm0930; AVX2-NEXT:    retq931;932; AVX512VL-LABEL: shuffle_v4i64_0000:933; AVX512VL:       # %bb.0:934; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm0935; AVX512VL-NEXT:    retq936  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 0>937  ret <4 x i64> %shuffle938}939 940define <4 x i64> @shuffle_v4i64_0001(<4 x i64> %a, <4 x i64> %b) {941; AVX1-LABEL: shuffle_v4i64_0001:942; AVX1:       # %bb.0:943; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm0[0,1,0,1]944; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0945; AVX1-NEXT:    retq946;947; AVX2-LABEL: shuffle_v4i64_0001:948; AVX2:       # %bb.0:949; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]950; AVX2-NEXT:    retq951;952; AVX512VL-LABEL: shuffle_v4i64_0001:953; AVX512VL:       # %bb.0:954; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]955; AVX512VL-NEXT:    retq956  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1>957  ret <4 x i64> %shuffle958}959 960define <4 x i64> @shuffle_v4i64_0020(<4 x i64> %a, <4 x i64> %b) {961; AVX1-LABEL: shuffle_v4i64_0020:962; AVX1:       # %bb.0:963; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm1964; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]965; AVX1-NEXT:    retq966;967; AVX2-LABEL: shuffle_v4i64_0020:968; AVX2:       # %bb.0:969; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]970; AVX2-NEXT:    retq971;972; AVX512VL-LABEL: shuffle_v4i64_0020:973; AVX512VL:       # %bb.0:974; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]975; AVX512VL-NEXT:    retq976  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0>977  ret <4 x i64> %shuffle978}979 980define <4 x i64> @shuffle_v4i64_0112(<4 x i64> %a, <4 x i64> %b) {981; AVX1-LABEL: shuffle_v4i64_0112:982; AVX1:       # %bb.0:983; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm1984; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[3],ymm0[2]985; AVX1-NEXT:    retq986;987; AVX2-LABEL: shuffle_v4i64_0112:988; AVX2:       # %bb.0:989; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,2]990; AVX2-NEXT:    retq991;992; AVX512VL-LABEL: shuffle_v4i64_0112:993; AVX512VL:       # %bb.0:994; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,2]995; AVX512VL-NEXT:    retq996  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 1, i32 2>997  ret <4 x i64> %shuffle998}999 1000define <4 x i64> @shuffle_v4i64_0300(<4 x i64> %a, <4 x i64> %b) {1001; AVX1-LABEL: shuffle_v4i64_0300:1002; AVX1:       # %bb.0:1003; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]1004; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01005; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[2]1006; AVX1-NEXT:    retq1007;1008; AVX2-LABEL: shuffle_v4i64_0300:1009; AVX2:       # %bb.0:1010; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]1011; AVX2-NEXT:    retq1012;1013; AVX512VL-LABEL: shuffle_v4i64_0300:1014; AVX512VL:       # %bb.0:1015; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0]1016; AVX512VL-NEXT:    retq1017  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0>1018  ret <4 x i64> %shuffle1019}1020 1021define <4 x i64> @shuffle_v4i64_1000(<4 x i64> %a, <4 x i64> %b) {1022; AVX1-LABEL: shuffle_v4i64_1000:1023; AVX1:       # %bb.0:1024; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01025; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,2,2]1026; AVX1-NEXT:    retq1027;1028; AVX2-LABEL: shuffle_v4i64_1000:1029; AVX2:       # %bb.0:1030; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]1031; AVX2-NEXT:    retq1032;1033; AVX512VL-LABEL: shuffle_v4i64_1000:1034; AVX512VL:       # %bb.0:1035; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0]1036; AVX512VL-NEXT:    retq1037  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0>1038  ret <4 x i64> %shuffle1039}1040 1041define <4 x i64> @shuffle_v4i64_2200(<4 x i64> %a, <4 x i64> %b) {1042; AVX1-LABEL: shuffle_v4i64_2200:1043; AVX1:       # %bb.0:1044; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]1045; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]1046; AVX1-NEXT:    retq1047;1048; AVX2-LABEL: shuffle_v4i64_2200:1049; AVX2:       # %bb.0:1050; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]1051; AVX2-NEXT:    retq1052;1053; AVX512VL-LABEL: shuffle_v4i64_2200:1054; AVX512VL:       # %bb.0:1055; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0]1056; AVX512VL-NEXT:    retq1057  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0>1058  ret <4 x i64> %shuffle1059}1060 1061define <4 x i64> @shuffle_v4i64_3330(<4 x i64> %a, <4 x i64> %b) {1062; AVX1-LABEL: shuffle_v4i64_3330:1063; AVX1:       # %bb.0:1064; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]1065; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]1066; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[2]1067; AVX1-NEXT:    retq1068;1069; AVX2-LABEL: shuffle_v4i64_3330:1070; AVX2:       # %bb.0:1071; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]1072; AVX2-NEXT:    retq1073;1074; AVX512VL-LABEL: shuffle_v4i64_3330:1075; AVX512VL:       # %bb.0:1076; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0]1077; AVX512VL-NEXT:    retq1078  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0>1079  ret <4 x i64> %shuffle1080}1081 1082define <4 x i64> @shuffle_v4i64_3210(<4 x i64> %a, <4 x i64> %b) {1083; AVX1-LABEL: shuffle_v4i64_3210:1084; AVX1:       # %bb.0:1085; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]1086; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]1087; AVX1-NEXT:    retq1088;1089; AVX2-LABEL: shuffle_v4i64_3210:1090; AVX2:       # %bb.0:1091; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]1092; AVX2-NEXT:    retq1093;1094; AVX512VL-LABEL: shuffle_v4i64_3210:1095; AVX512VL:       # %bb.0:1096; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]1097; AVX512VL-NEXT:    retq1098  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1099  ret <4 x i64> %shuffle1100}1101 1102define <4 x i64> @shuffle_v4i64_0213(<4 x i64> %a, <4 x i64> %b) {1103; AVX1-LABEL: shuffle_v4i64_0213:1104; AVX1:       # %bb.0:1105; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,2,3]1106; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01107; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]1108; AVX1-NEXT:    retq1109;1110; AVX2-LABEL: shuffle_v4i64_0213:1111; AVX2:       # %bb.0:1112; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1113; AVX2-NEXT:    retq1114;1115; AVX512VL-LABEL: shuffle_v4i64_0213:1116; AVX512VL:       # %bb.0:1117; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1118; AVX512VL-NEXT:    retq1119  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 2, i32 1, i32 3>1120  ret <4 x i64> %shuffle1121}1122 1123define <4 x i64> @shuffle_v4i64_0124(<4 x i64> %a, <4 x i64> %b) {1124; AVX1-LABEL: shuffle_v4i64_0124:1125; AVX1:       # %bb.0:1126; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm11127; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[2]1128; AVX1-NEXT:    retq1129;1130; AVX2-LABEL: shuffle_v4i64_0124:1131; AVX2:       # %bb.0:1132; AVX2-NEXT:    vbroadcastsd %xmm1, %ymm11133; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]1134; AVX2-NEXT:    retq1135;1136; AVX512VL-SLOW-LABEL: shuffle_v4i64_0124:1137; AVX512VL-SLOW:       # %bb.0:1138; AVX512VL-SLOW-NEXT:    vbroadcastsd %xmm1, %ymm11139; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]1140; AVX512VL-SLOW-NEXT:    retq1141;1142; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_0124:1143; AVX512VL-FAST-ALL:       # %bb.0:1144; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,1,2,4]1145; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01146; AVX512VL-FAST-ALL-NEXT:    retq1147;1148; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_0124:1149; AVX512VL-FAST-PERLANE:       # %bb.0:1150; AVX512VL-FAST-PERLANE-NEXT:    vbroadcastsd %xmm1, %ymm11151; AVX512VL-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]1152; AVX512VL-FAST-PERLANE-NEXT:    retq1153  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 4>1154  ret <4 x i64> %shuffle1155}1156 1157define <4 x i64> @shuffle_v4i64_0142(<4 x i64> %a, <4 x i64> %b) {1158; AVX1-LABEL: shuffle_v4i64_0142:1159; AVX1:       # %bb.0:1160; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm11161; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[2]1162; AVX1-NEXT:    retq1163;1164; AVX2-LABEL: shuffle_v4i64_0142:1165; AVX2:       # %bb.0:1166; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm11167; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,2,2]1168; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]1169; AVX2-NEXT:    retq1170;1171; AVX512VL-LABEL: shuffle_v4i64_0142:1172; AVX512VL:       # %bb.0:1173; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,1,4,2]1174; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01175; AVX512VL-NEXT:    retq1176  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 2>1177  ret <4 x i64> %shuffle1178}1179 1180define <4 x i64> @shuffle_v4i64_0412(<4 x i64> %a, <4 x i64> %b) {1181; AVX1-LABEL: shuffle_v4i64_0412:1182; AVX1:       # %bb.0:1183; AVX1-NEXT:    vblendpd {{.*#+}} ymm1 = ymm1[0,1],ymm0[2,3]1184; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01185; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]1186; AVX1-NEXT:    retq1187;1188; AVX2-LABEL: shuffle_v4i64_0412:1189; AVX2:       # %bb.0:1190; AVX2-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]1191; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,2]1192; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]1193; AVX2-NEXT:    retq1194;1195; AVX512VL-LABEL: shuffle_v4i64_0412:1196; AVX512VL:       # %bb.0:1197; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,1,2]1198; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01199; AVX512VL-NEXT:    retq1200  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 2>1201  ret <4 x i64> %shuffle1202}1203 1204define <4 x i64> @shuffle_v4i64_4012(<4 x i64> %a, <4 x i64> %b) {1205; AVX1-LABEL: shuffle_v4i64_4012:1206; AVX1:       # %bb.0:1207; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm11208; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[3],ymm0[2]1209; AVX1-NEXT:    retq1210;1211; AVX2-LABEL: shuffle_v4i64_4012:1212; AVX2:       # %bb.0:1213; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,2]1214; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]1215; AVX2-NEXT:    retq1216;1217; AVX512VL-SLOW-LABEL: shuffle_v4i64_4012:1218; AVX512VL-SLOW:       # %bb.0:1219; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,2]1220; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]1221; AVX512VL-SLOW-NEXT:    retq1222;1223; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_4012:1224; AVX512VL-FAST-ALL:       # %bb.0:1225; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [4,0,1,2]1226; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01227; AVX512VL-FAST-ALL-NEXT:    retq1228;1229; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_4012:1230; AVX512VL-FAST-PERLANE:       # %bb.0:1231; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,2]1232; AVX512VL-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]1233; AVX512VL-FAST-PERLANE-NEXT:    retq1234  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 2>1235  ret <4 x i64> %shuffle1236}1237 1238define <4 x i64> @shuffle_v4i64_0145(<4 x i64> %a, <4 x i64> %b) {1239; ALL-LABEL: shuffle_v4i64_0145:1240; ALL:       # %bb.0:1241; ALL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01242; ALL-NEXT:    retq1243  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>1244  ret <4 x i64> %shuffle1245}1246 1247define <4 x i64> @shuffle_v4i64_0451(<4 x i64> %a, <4 x i64> %b) {1248; AVX1-LABEL: shuffle_v4i64_0451:1249; AVX1:       # %bb.0:1250; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm1[1],xmm0[1]1251; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]1252; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01253; AVX1-NEXT:    retq1254;1255; AVX2-LABEL: shuffle_v4i64_0451:1256; AVX2:       # %bb.0:1257; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,3]1258; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,2,1]1259; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5],ymm0[6,7]1260; AVX2-NEXT:    retq1261;1262; AVX512VL-LABEL: shuffle_v4i64_0451:1263; AVX512VL:       # %bb.0:1264; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,5,1]1265; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01266; AVX512VL-NEXT:    retq1267  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 1>1268  ret <4 x i64> %shuffle1269}1270 1271define <4 x i64> @shuffle_v4i64_4501(<4 x i64> %a, <4 x i64> %b) {1272; ALL-LABEL: shuffle_v4i64_4501:1273; ALL:       # %bb.0:1274; ALL-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01275; ALL-NEXT:    retq1276  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1>1277  ret <4 x i64> %shuffle1278}1279 1280define <4 x i64> @shuffle_v4i64_4015(<4 x i64> %a, <4 x i64> %b) {1281; AVX1-LABEL: shuffle_v4i64_4015:1282; AVX1:       # %bb.0:1283; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1]1284; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0]1285; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01286; AVX1-NEXT:    retq1287;1288; AVX2-LABEL: shuffle_v4i64_4015:1289; AVX2:       # %bb.0:1290; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,1,2,1]1291; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,3]1292; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]1293; AVX2-NEXT:    retq1294;1295; AVX512VL-LABEL: shuffle_v4i64_4015:1296; AVX512VL:       # %bb.0:1297; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [4,0,1,5]1298; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01299; AVX512VL-NEXT:    retq1300  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 5>1301  ret <4 x i64> %shuffle1302}1303 1304define <4 x i64> @shuffle_v4i64_2u35(<4 x i64> %a, <4 x i64> %b) {1305; AVX1-LABEL: shuffle_v4i64_2u35:1306; AVX1:       # %bb.0:1307; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]1308; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm11309; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[3],ymm1[3]1310; AVX1-NEXT:    retq1311;1312; AVX2-LABEL: shuffle_v4i64_2u35:1313; AVX2:       # %bb.0:1314; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1315; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,1,3,1]1316; AVX2-NEXT:    retq1317;1318; AVX512VL-SLOW-LABEL: shuffle_v4i64_2u35:1319; AVX512VL-SLOW:       # %bb.0:1320; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1321; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,1,3,1]1322; AVX512VL-SLOW-NEXT:    retq1323;1324; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_2u35:1325; AVX512VL-FAST-ALL:       # %bb.0:1326; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [2,5,3,5]1327; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01328; AVX512VL-FAST-ALL-NEXT:    retq1329;1330; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_2u35:1331; AVX512VL-FAST-PERLANE:       # %bb.0:1332; AVX512VL-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1333; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,1,3,1]1334; AVX512VL-FAST-PERLANE-NEXT:    retq1335  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 poison, i32 3, i32 5>1336  ret <4 x i64> %shuffle1337}1338 1339define <4 x i64> @shuffle_v4i64_1251(<4 x i64> %a, <4 x i64> %b) {1340; AVX1-LABEL: shuffle_v4i64_1251:1341; AVX1:       # %bb.0:1342; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]1343; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01344; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm2[0],ymm0[3],ymm2[3]1345; AVX1-NEXT:    retq1346;1347; AVX2-LABEL: shuffle_v4i64_1251:1348; AVX2:       # %bb.0:1349; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[1,1,1,1]1350; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,2,2,1]1351; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]1352; AVX2-NEXT:    retq1353;1354; AVX512VL-LABEL: shuffle_v4i64_1251:1355; AVX512VL:       # %bb.0:1356; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,2,5,1]1357; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01358; AVX512VL-NEXT:    retq1359  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 2, i32 5, i32 1>1360  ret <4 x i64> %shuffle1361}1362 1363define <4 x i64> @shuffle_v4i64_1054(<4 x i64> %a, <4 x i64> %b) {1364; AVX1-LABEL: shuffle_v4i64_1054:1365; AVX1:       # %bb.0:1366; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01367; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]1368; AVX1-NEXT:    retq1369;1370; AVX2-LABEL: shuffle_v4i64_1054:1371; AVX2:       # %bb.0:1372; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01373; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1374; AVX2-NEXT:    retq1375;1376; AVX512VL-SLOW-LABEL: shuffle_v4i64_1054:1377; AVX512VL-SLOW:       # %bb.0:1378; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01379; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1380; AVX512VL-SLOW-NEXT:    retq1381;1382; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_1054:1383; AVX512VL-FAST-ALL:       # %bb.0:1384; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,0,5,4]1385; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01386; AVX512VL-FAST-ALL-NEXT:    retq1387;1388; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_1054:1389; AVX512VL-FAST-PERLANE:       # %bb.0:1390; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01391; AVX512VL-FAST-PERLANE-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1392; AVX512VL-FAST-PERLANE-NEXT:    retq1393  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 5, i32 4>1394  ret <4 x i64> %shuffle1395}1396 1397define <4 x i64> @shuffle_v4i64_3254(<4 x i64> %a, <4 x i64> %b) {1398; AVX1-LABEL: shuffle_v4i64_3254:1399; AVX1:       # %bb.0:1400; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]1401; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]1402; AVX1-NEXT:    retq1403;1404; AVX2-LABEL: shuffle_v4i64_3254:1405; AVX2:       # %bb.0:1406; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1407; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]1408; AVX2-NEXT:    retq1409;1410; AVX512VL-SLOW-LABEL: shuffle_v4i64_3254:1411; AVX512VL-SLOW:       # %bb.0:1412; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1413; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]1414; AVX512VL-SLOW-NEXT:    retq1415;1416; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_3254:1417; AVX512VL-FAST-ALL:       # %bb.0:1418; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [3,2,5,4]1419; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01420; AVX512VL-FAST-ALL-NEXT:    retq1421;1422; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_3254:1423; AVX512VL-FAST-PERLANE:       # %bb.0:1424; AVX512VL-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1425; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0]1426; AVX512VL-FAST-PERLANE-NEXT:    retq1427  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 5, i32 4>1428  ret <4 x i64> %shuffle1429}1430 1431define <4 x i64> @shuffle_v4i64_3276(<4 x i64> %a, <4 x i64> %b) {1432; AVX1-LABEL: shuffle_v4i64_3276:1433; AVX1:       # %bb.0:1434; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1435; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]1436; AVX1-NEXT:    retq1437;1438; AVX2-LABEL: shuffle_v4i64_3276:1439; AVX2:       # %bb.0:1440; AVX2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1441; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1442; AVX2-NEXT:    retq1443;1444; AVX512VL-SLOW-LABEL: shuffle_v4i64_3276:1445; AVX512VL-SLOW:       # %bb.0:1446; AVX512VL-SLOW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1447; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1448; AVX512VL-SLOW-NEXT:    retq1449;1450; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_3276:1451; AVX512VL-FAST-ALL:       # %bb.0:1452; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [3,2,7,6]1453; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01454; AVX512VL-FAST-ALL-NEXT:    retq1455;1456; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_3276:1457; AVX512VL-FAST-PERLANE:       # %bb.0:1458; AVX512VL-FAST-PERLANE-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1459; AVX512VL-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1460; AVX512VL-FAST-PERLANE-NEXT:    retq1461  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 7, i32 6>1462  ret <4 x i64> %shuffle1463}1464 1465define <4 x i64> @shuffle_v4i64_1076(<4 x i64> %a, <4 x i64> %b) {1466; AVX1-LABEL: shuffle_v4i64_1076:1467; AVX1:       # %bb.0:1468; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3]1469; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]1470; AVX1-NEXT:    retq1471;1472; AVX2-LABEL: shuffle_v4i64_1076:1473; AVX2:       # %bb.0:1474; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1475; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1476; AVX2-NEXT:    retq1477;1478; AVX512VL-SLOW-LABEL: shuffle_v4i64_1076:1479; AVX512VL-SLOW:       # %bb.0:1480; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1481; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1482; AVX512VL-SLOW-NEXT:    retq1483;1484; AVX512VL-FAST-LABEL: shuffle_v4i64_1076:1485; AVX512VL-FAST:       # %bb.0:1486; AVX512VL-FAST-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,0,7,6]1487; AVX512VL-FAST-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01488; AVX512VL-FAST-NEXT:    retq1489  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 7, i32 6>1490  ret <4 x i64> %shuffle1491}1492 1493define <4 x i64> @shuffle_v4i64_0415(<4 x i64> %a, <4 x i64> %b) {1494; AVX1-LABEL: shuffle_v4i64_0415:1495; AVX1:       # %bb.0:1496; AVX1-NEXT:    vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1]1497; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]1498; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01499; AVX1-NEXT:    retq1500;1501; AVX2-LABEL: shuffle_v4i64_0415:1502; AVX2:       # %bb.0:1503; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1]1504; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]1505; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]1506; AVX2-NEXT:    retq1507;1508; AVX512VL-LABEL: shuffle_v4i64_0415:1509; AVX512VL:       # %bb.0:1510; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,1,5]1511; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01512; AVX512VL-NEXT:    retq1513  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1514  ret <4 x i64> %shuffle1515}1516 1517define <4 x i64> @shuffle_v4i64_2741(<4 x i64> %a, <4 x i64> %b) {1518; AVX1-LABEL: shuffle_v4i64_2741:1519; AVX1:       # %bb.0:1520; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3],ymm0[0,1]1521; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]1522; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm2[2,3],ymm0[4,5],ymm2[6,7]1523; AVX1-NEXT:    retq1524;1525; AVX2-LABEL: shuffle_v4i64_2741:1526; AVX2:       # %bb.0:1527; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]1528; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1529; AVX2-NEXT:    retq1530;1531; AVX512VL-SLOW-LABEL: shuffle_v4i64_2741:1532; AVX512VL-SLOW:       # %bb.0:1533; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]1534; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1535; AVX512VL-SLOW-NEXT:    retq1536;1537; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_2741:1538; AVX512VL-FAST-ALL:       # %bb.0:1539; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [2,7,4,1]1540; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01541; AVX512VL-FAST-ALL-NEXT:    retq1542;1543; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_2741:1544; AVX512VL-FAST-PERLANE:       # %bb.0:1545; AVX512VL-FAST-PERLANE-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]1546; AVX512VL-FAST-PERLANE-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1547; AVX512VL-FAST-PERLANE-NEXT:    retq1548  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 7, i32 4, i32 1>1549  ret <4 x i64> %shuffle1550}1551 1552; PR598601553define <4 x i64> @shuffle_v4i64_0437(<4 x i64> %a, <4 x i64> %b) {1554; AVX1-LABEL: shuffle_v4i64_0437:1555; AVX1:       # %bb.0:1556; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]1557; AVX1-NEXT:    retq1558;1559; AVX2-LABEL: shuffle_v4i64_0437:1560; AVX2:       # %bb.0:1561; AVX2-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,3]1562; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,3,3]1563; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]1564; AVX2-NEXT:    retq1565;1566; AVX512VL-LABEL: shuffle_v4i64_0437:1567; AVX512VL:       # %bb.0:1568; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,4,3,7]1569; AVX512VL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01570; AVX512VL-NEXT:    retq1571  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 3, i32 7>1572  ret <4 x i64> %shuffle1573}1574 1575define <4 x i64> @shuffle_v4i64_z4z6(<4 x i64> %a) {1576; AVX1-LABEL: shuffle_v4i64_z4z6:1577; AVX1:       # %bb.0:1578; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11579; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]1580; AVX1-NEXT:    retq1581;1582; AVX2-LABEL: shuffle_v4i64_z4z6:1583; AVX2:       # %bb.0:1584; AVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23]1585; AVX2-NEXT:    retq1586;1587; AVX512VL-LABEL: shuffle_v4i64_z4z6:1588; AVX512VL:       # %bb.0:1589; AVX512VL-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23]1590; AVX512VL-NEXT:    retq1591  %shuffle = shufflevector <4 x i64> zeroinitializer, <4 x i64> %a, <4 x i32> <i32 0, i32 4, i32 0, i32 6>1592  ret <4 x i64> %shuffle1593}1594 1595define <4 x i64> @shuffle_v4i64_5zuz(<4 x i64> %a) {1596; AVX1-LABEL: shuffle_v4i64_5zuz:1597; AVX1:       # %bb.0:1598; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11599; AVX1-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]1600; AVX1-NEXT:    retq1601;1602; AVX2-LABEL: shuffle_v4i64_5zuz:1603; AVX2:       # %bb.0:1604; AVX2-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero1605; AVX2-NEXT:    retq1606;1607; AVX512VL-LABEL: shuffle_v4i64_5zuz:1608; AVX512VL:       # %bb.0:1609; AVX512VL-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero1610; AVX512VL-NEXT:    retq1611  %shuffle = shufflevector <4 x i64> zeroinitializer, <4 x i64> %a, <4 x i32> <i32 5, i32 0, i32 poison, i32 0>1612  ret <4 x i64> %shuffle1613}1614 1615define <4 x i64> @shuffle_v4i64_40u2(<4 x i64> %a, <4 x i64> %b) {1616; ALL-LABEL: shuffle_v4i64_40u2:1617; ALL:       # %bb.0:1618; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]1619; ALL-NEXT:    retq1620  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 poison, i32 2>1621  ret <4 x i64> %shuffle1622}1623 1624define <4 x i64> @shuffle_v4i64_15uu(<4 x i64> %a, <4 x i64> %b) {1625; ALL-LABEL: shuffle_v4i64_15uu:1626; ALL:       # %bb.0:1627; ALL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]1628; ALL-NEXT:    retq1629  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 5, i32 poison, i32 poison>1630  ret <4 x i64> %shuffle1631}1632 1633define <4 x i64> @shuffle_v4i64_11uu(<4 x i64> %a, <4 x i64> %b) {1634; ALL-LABEL: shuffle_v4i64_11uu:1635; ALL:       # %bb.0:1636; ALL-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[2,3,2,3]1637; ALL-NEXT:    retq1638  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 1, i32 poison, i32 poison>1639  ret <4 x i64> %shuffle1640}1641 1642define <4 x i64> @shuffle_v4i64_22uu(<4 x i64> %a, <4 x i64> %b) {1643; AVX1-LABEL: shuffle_v4i64_22uu:1644; AVX1:       # %bb.0:1645; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01646; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,0,1]1647; AVX1-NEXT:    retq1648;1649; AVX2-LABEL: shuffle_v4i64_22uu:1650; AVX2:       # %bb.0:1651; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]1652; AVX2-NEXT:    retq1653;1654; AVX512VL-LABEL: shuffle_v4i64_22uu:1655; AVX512VL:       # %bb.0:1656; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,2]1657; AVX512VL-NEXT:    retq1658  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 poison, i32 poison>1659  ret <4 x i64> %shuffle1660}1661 1662define <4 x i64> @shuffle_v4i64_3333(<4 x i64> %a, <4 x i64> %b) {1663; AVX1-LABEL: shuffle_v4i64_3333:1664; AVX1:       # %bb.0:1665; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]1666; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,1,3,3]1667; AVX1-NEXT:    retq1668;1669; AVX2-LABEL: shuffle_v4i64_3333:1670; AVX2:       # %bb.0:1671; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]1672; AVX2-NEXT:    retq1673;1674; AVX512VL-LABEL: shuffle_v4i64_3333:1675; AVX512VL:       # %bb.0:1676; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]1677; AVX512VL-NEXT:    retq1678  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3>1679  ret <4 x i64> %shuffle1680}1681 1682define <4 x i64> @shuffle_v4i64_1z3z(<4 x i64> %a, <4 x i64> %b) {1683; AVX1-LABEL: shuffle_v4i64_1z3z:1684; AVX1:       # %bb.0:1685; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm11686; AVX1-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]1687; AVX1-NEXT:    retq1688;1689; AVX2-LABEL: shuffle_v4i64_1z3z:1690; AVX2:       # %bb.0:1691; AVX2-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero1692; AVX2-NEXT:    retq1693;1694; AVX512VL-LABEL: shuffle_v4i64_1z3z:1695; AVX512VL:       # %bb.0:1696; AVX512VL-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero1697; AVX512VL-NEXT:    retq1698  %shuffle = shufflevector <4 x i64> %a, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i32> <i32 1, i32 4, i32 3, i32 4>1699  ret <4 x i64> %shuffle1700}1701 1702define <4 x i64> @shuffle_v4i64_0044_v2i64(<2 x i64> %a, <2 x i64> %b) {1703; AVX1-LABEL: shuffle_v4i64_0044_v2i64:1704; AVX1:       # %bb.0:1705; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01706; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01707; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]1708; AVX1-NEXT:    retq1709;1710; AVX2-LABEL: shuffle_v4i64_0044_v2i64:1711; AVX2:       # %bb.0:1712; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01713; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01714; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]1715; AVX2-NEXT:    retq1716;1717; AVX512VL-SLOW-LABEL: shuffle_v4i64_0044_v2i64:1718; AVX512VL-SLOW:       # %bb.0:1719; AVX512VL-SLOW-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01720; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01721; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]1722; AVX512VL-SLOW-NEXT:    retq1723;1724; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_0044_v2i64:1725; AVX512VL-FAST-ALL:       # %bb.0:1726; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm11727; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01728; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,0,4,4]1729; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01730; AVX512VL-FAST-ALL-NEXT:    retq1731;1732; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_0044_v2i64:1733; AVX512VL-FAST-PERLANE:       # %bb.0:1734; AVX512VL-FAST-PERLANE-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01735; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01736; AVX512VL-FAST-PERLANE-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]1737; AVX512VL-FAST-PERLANE-NEXT:    retq1738  %1 = shufflevector <2 x i64> %a, <2 x i64> poison, <2 x i32> <i32 0, i32 0>1739  %2 = shufflevector <2 x i64> %b, <2 x i64> poison, <2 x i32> <i32 0, i32 0>1740  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1741  ret <4 x i64> %31742}1743 1744define <4 x i64> @shuffle_v4i64_1032_v2i64(<2 x i64> %a, <2 x i64> %b) {1745; AVX1-LABEL: shuffle_v4i64_1032_v2i64:1746; AVX1:       # %bb.0:1747; AVX1-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01748; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01749; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]1750; AVX1-NEXT:    retq1751;1752; AVX2-LABEL: shuffle_v4i64_1032_v2i64:1753; AVX2:       # %bb.0:1754; AVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01755; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01756; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1757; AVX2-NEXT:    retq1758;1759; AVX512VL-SLOW-LABEL: shuffle_v4i64_1032_v2i64:1760; AVX512VL-SLOW:       # %bb.0:1761; AVX512VL-SLOW-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01762; AVX512VL-SLOW-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01763; AVX512VL-SLOW-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1764; AVX512VL-SLOW-NEXT:    retq1765;1766; AVX512VL-FAST-ALL-LABEL: shuffle_v4i64_1032_v2i64:1767; AVX512VL-FAST-ALL:       # %bb.0:1768; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm1 killed $xmm1 def $ymm11769; AVX512VL-FAST-ALL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01770; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [1,0,5,4]1771; AVX512VL-FAST-ALL-NEXT:    vpermt2q %ymm1, %ymm2, %ymm01772; AVX512VL-FAST-ALL-NEXT:    retq1773;1774; AVX512VL-FAST-PERLANE-LABEL: shuffle_v4i64_1032_v2i64:1775; AVX512VL-FAST-PERLANE:       # %bb.0:1776; AVX512VL-FAST-PERLANE-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm01777; AVX512VL-FAST-PERLANE-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01778; AVX512VL-FAST-PERLANE-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]1779; AVX512VL-FAST-PERLANE-NEXT:    retq1780  %1 = shufflevector <2 x i64> %a, <2 x i64> poison, <2 x i32> <i32 1, i32 0>1781  %2 = shufflevector <2 x i64> %b, <2 x i64> poison, <2 x i32> <i32 1, i32 0>1782  %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1783  ret <4 x i64> %31784}1785 1786define <4 x i64> @stress_test1(<4 x i64> %a, <4 x i64> %b) {1787; ALL-LABEL: stress_test1:1788; ALL:         retq1789  %c = shufflevector <4 x i64> %b, <4 x i64> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 0>1790  %d = shufflevector <4 x i64> %c, <4 x i64> poison, <4 x i32> <i32 3, i32 poison, i32 2, i32 poison>1791  %e = shufflevector <4 x i64> %b, <4 x i64> poison, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>1792  %f = shufflevector <4 x i64> %d, <4 x i64> %e, <4 x i32> <i32 5, i32 1, i32 1, i32 0>1793 1794  ret <4 x i64> %f1795}1796 1797define <4 x i64> @insert_reg_and_zero_v4i64(i64 %a) {1798; ALL-LABEL: insert_reg_and_zero_v4i64:1799; ALL:       # %bb.0:1800; ALL-NEXT:    vmovq %rdi, %xmm01801; ALL-NEXT:    retq1802  %v = insertelement <4 x i64> poison, i64 %a, i64 01803  %shuffle = shufflevector <4 x i64> %v, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>1804  ret <4 x i64> %shuffle1805}1806 1807define <4 x i64> @insert_mem_and_zero_v4i64(ptr %ptr) {1808; ALL-LABEL: insert_mem_and_zero_v4i64:1809; ALL:       # %bb.0:1810; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1811; ALL-NEXT:    retq1812  %a = load i64, ptr %ptr1813  %v = insertelement <4 x i64> poison, i64 %a, i64 01814  %shuffle = shufflevector <4 x i64> %v, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>1815  ret <4 x i64> %shuffle1816}1817 1818define <4 x double> @insert_reg_and_zero_v4f64(double %a) {1819; ALL-LABEL: insert_reg_and_zero_v4f64:1820; ALL:       # %bb.0:1821; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero1822; ALL-NEXT:    retq1823  %v = insertelement <4 x double> poison, double %a, i32 01824  %shuffle = shufflevector <4 x double> %v, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>1825  ret <4 x double> %shuffle1826}1827 1828define <4 x double> @insert_mem_and_zero_v4f64(ptr %ptr) {1829; ALL-LABEL: insert_mem_and_zero_v4f64:1830; ALL:       # %bb.0:1831; ALL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero1832; ALL-NEXT:    retq1833  %a = load double, ptr %ptr1834  %v = insertelement <4 x double> poison, double %a, i32 01835  %shuffle = shufflevector <4 x double> %v, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>1836  ret <4 x double> %shuffle1837}1838 1839define <4 x double> @splat_mem_v4f64(ptr %ptr) {1840; ALL-LABEL: splat_mem_v4f64:1841; ALL:       # %bb.0:1842; ALL-NEXT:    vbroadcastsd (%rdi), %ymm01843; ALL-NEXT:    retq1844  %a = load double, ptr %ptr1845  %v = insertelement <4 x double> poison, double %a, i32 01846  %shuffle = shufflevector <4 x double> %v, <4 x double> poison, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1847  ret <4 x double> %shuffle1848}1849 1850define <4 x i64> @splat_mem_v4i64(ptr %ptr) {1851; ALL-LABEL: splat_mem_v4i64:1852; ALL:       # %bb.0:1853; ALL-NEXT:    vbroadcastsd (%rdi), %ymm01854; ALL-NEXT:    retq1855  %a = load i64, ptr %ptr1856  %v = insertelement <4 x i64> poison, i64 %a, i64 01857  %shuffle = shufflevector <4 x i64> %v, <4 x i64> poison, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1858  ret <4 x i64> %shuffle1859}1860 1861define <4 x double> @splat_mem_v4f64_2(ptr %p) {1862; ALL-LABEL: splat_mem_v4f64_2:1863; ALL:       # %bb.0:1864; ALL-NEXT:    vbroadcastsd (%rdi), %ymm01865; ALL-NEXT:    retq1866  %1 = load double, ptr %p1867  %2 = insertelement <2 x double> poison, double %1, i32 01868  %3 = shufflevector <2 x double> %2, <2 x double> poison, <4 x i32> zeroinitializer1869  ret <4 x double> %31870}1871 1872define <4 x double> @splat_v4f64(<2 x double> %r) {1873; AVX1-LABEL: splat_v4f64:1874; AVX1:       # %bb.0:1875; AVX1-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]1876; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01877; AVX1-NEXT:    retq1878;1879; AVX2-LABEL: splat_v4f64:1880; AVX2:       # %bb.0:1881; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm01882; AVX2-NEXT:    retq1883;1884; AVX512VL-LABEL: splat_v4f64:1885; AVX512VL:       # %bb.0:1886; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm01887; AVX512VL-NEXT:    retq1888  %1 = shufflevector <2 x double> %r, <2 x double> poison, <4 x i32> zeroinitializer1889  ret <4 x double> %11890}1891 1892define <4 x i64> @splat_mem_v4i64_from_v2i64(ptr %ptr) {1893; ALL-LABEL: splat_mem_v4i64_from_v2i64:1894; ALL:       # %bb.0:1895; ALL-NEXT:    vbroadcastsd (%rdi), %ymm01896; ALL-NEXT:    retq1897  %v = load <2 x i64>, ptr %ptr1898  %shuffle = shufflevector <2 x i64> %v, <2 x i64> poison, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1899  ret <4 x i64> %shuffle1900}1901 1902define <4 x double> @splat_mem_v4f64_from_v2f64(ptr %ptr) {1903; ALL-LABEL: splat_mem_v4f64_from_v2f64:1904; ALL:       # %bb.0:1905; ALL-NEXT:    vbroadcastsd (%rdi), %ymm01906; ALL-NEXT:    retq1907  %v = load <2 x double>, ptr %ptr1908  %shuffle = shufflevector <2 x double> %v, <2 x double> poison, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1909  ret <4 x double> %shuffle1910}1911 1912define <4 x i64> @splat128_mem_v4i64_from_v2i64(ptr %ptr) {1913; AVX1OR2-LABEL: splat128_mem_v4i64_from_v2i64:1914; AVX1OR2:       # %bb.0:1915; AVX1OR2-NEXT:    vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1]1916; AVX1OR2-NEXT:    retq1917;1918; AVX512VL-LABEL: splat128_mem_v4i64_from_v2i64:1919; AVX512VL:       # %bb.0:1920; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm0 = mem[0,1,0,1]1921; AVX512VL-NEXT:    retq1922  %v = load <2 x i64>, ptr %ptr1923  %shuffle = shufflevector <2 x i64> %v, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>1924  ret <4 x i64> %shuffle1925}1926 1927define <4 x double> @splat128_mem_v4f64_from_v2f64(ptr %ptr) {1928; ALL-LABEL: splat128_mem_v4f64_from_v2f64:1929; ALL:       # %bb.0:1930; ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1]1931; ALL-NEXT:    retq1932  %v = load <2 x double>, ptr %ptr1933  %shuffle = shufflevector <2 x double> %v, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>1934  ret <4 x double> %shuffle1935}1936 1937define <4 x double> @broadcast_v4f64_0000_from_v2i64(<2 x i64> %a0) {1938; AVX1-LABEL: broadcast_v4f64_0000_from_v2i64:1939; AVX1:       # %bb.0:1940; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,0,1]1941; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01942; AVX1-NEXT:    retq1943;1944; AVX2-LABEL: broadcast_v4f64_0000_from_v2i64:1945; AVX2:       # %bb.0:1946; AVX2-NEXT:    vbroadcastsd %xmm0, %ymm01947; AVX2-NEXT:    retq1948;1949; AVX512VL-LABEL: broadcast_v4f64_0000_from_v2i64:1950; AVX512VL:       # %bb.0:1951; AVX512VL-NEXT:    vbroadcastsd %xmm0, %ymm01952; AVX512VL-NEXT:    retq1953  %1 = shufflevector <2 x i64> %a0, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1954  %2 = bitcast <4 x i64> %1 to <4 x double>1955  %3 = shufflevector <4 x double> %2, <4 x double> poison, <4 x i32> zeroinitializer1956  ret <4 x double> %31957}1958 1959; PR1149591960define <4 x double> @concat_v4f64_0213_broadcasts(ptr %src) {1961; ALL-LABEL: concat_v4f64_0213_broadcasts:1962; ALL:       # %bb.0:1963; ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1]1964; ALL-NEXT:    vbroadcastf128 {{.*#+}} ymm1 = mem[0,1,0,1]1965; ALL-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[3],ymm0[3]1966; ALL-NEXT:    retq1967  %src.hi = getelementptr inbounds i8, ptr %src, i64 321968  %lo = load <2 x double>, ptr %src, align 11969  %hi = load <2 x double>, ptr %src.hi, align 11970  %shuffle = shufflevector <2 x double> %lo, <2 x double> %hi, <4 x i32> <i32 0, i32 2, i32 1, i32 3>1971  ret <4 x double> %shuffle1972}1973 1974define <4 x double> @bitcast_v4f64_0426(<4 x double> %a, <4 x double> %b) {1975; ALL-LABEL: bitcast_v4f64_0426:1976; ALL:       # %bb.0:1977; ALL-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]1978; ALL-NEXT:    retq1979  %shuffle64 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2>1980  %bitcast32 = bitcast <4 x double> %shuffle64 to <8 x float>1981  %shuffle32 = shufflevector <8 x float> %bitcast32, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>1982  %bitcast16 = bitcast <8 x float> %shuffle32 to <16 x i16>1983  %shuffle16 = shufflevector <16 x i16> %bitcast16, <16 x i16> poison, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9, i32 14, i32 15, i32 12, i32 13>1984  %bitcast64 = bitcast <16 x i16> %shuffle16 to <4 x double>1985  ret <4 x double> %bitcast641986}1987 1988define <4 x i64> @concat_v4i64_0167(<4 x i64> %a0, <4 x i64> %a1) {1989; ALL-LABEL: concat_v4i64_0167:1990; ALL:       # %bb.0:1991; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1992; ALL-NEXT:    retq1993  %a0lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 0, i32 1>1994  %a1hi = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 6, i32 7>1995  %shuffle64 = shufflevector <2 x i64> %a0lo, <2 x i64> %a1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1996  ret <4 x i64> %shuffle641997}1998 1999define <4 x i64> @concat_v4i64_0145_bc(<4 x i64> %a0, <4 x i64> %a1) {2000; ALL-LABEL: concat_v4i64_0145_bc:2001; ALL:       # %bb.0:2002; ALL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02003; ALL-NEXT:    retq2004  %a0lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 0, i32 1>2005  %a1lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 4, i32 5>2006  %bc0lo = bitcast <2 x i64> %a0lo to <4 x i32>2007  %bc1lo = bitcast <2 x i64> %a1lo to <4 x i32>2008  %shuffle32 = shufflevector <4 x i32> %bc0lo, <4 x i32> %bc1lo, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2009  %shuffle64 = bitcast <8 x i32> %shuffle32 to <4 x i64>2010  ret <4 x i64> %shuffle642011}2012 2013define <4 x i64> @insert_dup_mem_v4i64(ptr %ptr) {2014; ALL-LABEL: insert_dup_mem_v4i64:2015; ALL:       # %bb.0:2016; ALL-NEXT:    vbroadcastsd (%rdi), %ymm02017; ALL-NEXT:    retq2018  %tmp = load i64, ptr %ptr, align 12019  %tmp1 = insertelement <2 x i64> poison, i64 %tmp, i32 02020  %tmp2 = shufflevector <2 x i64> %tmp1, <2 x i64> poison, <4 x i32> zeroinitializer2021  ret <4 x i64> %tmp22022}2023 2024define <4 x i64> @shuffle_v4i64_1234(<4 x i64> %a, <4 x i64> %b) {2025; AVX1-LABEL: shuffle_v4i64_1234:2026; AVX1:       # %bb.0:2027; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3],ymm1[0,1]2028; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[0],ymm0[3],ymm1[2]2029; AVX1-NEXT:    retq2030;2031; AVX2-LABEL: shuffle_v4i64_1234:2032; AVX2:       # %bb.0:2033; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]2034; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,2,3,0]2035; AVX2-NEXT:    retq2036;2037; AVX512VL-LABEL: shuffle_v4i64_1234:2038; AVX512VL:       # %bb.0:2039; AVX512VL-NEXT:    valignq {{.*#+}} ymm0 = ymm0[1,2,3],ymm1[0]2040; AVX512VL-NEXT:    retq2041  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 2, i32 3, i32 4>2042  ret <4 x i64> %shuffle2043}2044 2045define <4 x i64> @shuffle_v4i64_1230(<4 x i64> %a) {2046; AVX1-LABEL: shuffle_v4i64_1230:2047; AVX1:       # %bb.0:2048; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]2049; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[0],ymm0[3],ymm1[2]2050; AVX1-NEXT:    retq2051;2052; AVX2-LABEL: shuffle_v4i64_1230:2053; AVX2:       # %bb.0:2054; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,2,3,0]2055; AVX2-NEXT:    retq2056;2057; AVX512VL-LABEL: shuffle_v4i64_1230:2058; AVX512VL:       # %bb.0:2059; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,2,3,0]2060; AVX512VL-NEXT:    retq2061  %shuffle = shufflevector <4 x i64> %a, <4 x i64> poison, <4 x i32> <i32 1, i32 2, i32 3, i32 0>2062  ret <4 x i64> %shuffle2063}2064 2065define <4 x i64> @shuffle_v4i64_z0z3(<4 x i64> %a, <4 x i64> %b) {2066; AVX1-LABEL: shuffle_v4i64_z0z3:2067; AVX1:       # %bb.0:2068; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm12069; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[3]2070; AVX1-NEXT:    retq2071;2072; AVX2-SLOW-LABEL: shuffle_v4i64_z0z3:2073; AVX2-SLOW:       # %bb.0:2074; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,3]2075; AVX2-SLOW-NEXT:    vxorps %xmm1, %xmm1, %xmm12076; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]2077; AVX2-SLOW-NEXT:    retq2078;2079; AVX2-FAST-LABEL: shuffle_v4i64_z0z3:2080; AVX2-FAST:       # %bb.0:2081; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31]2082; AVX2-FAST-NEXT:    retq2083;2084; AVX512VL-SLOW-LABEL: shuffle_v4i64_z0z3:2085; AVX512VL-SLOW:       # %bb.0:2086; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,3]2087; AVX512VL-SLOW-NEXT:    vxorps %xmm1, %xmm1, %xmm12088; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]2089; AVX512VL-SLOW-NEXT:    retq2090;2091; AVX512VL-FAST-LABEL: shuffle_v4i64_z0z3:2092; AVX512VL-FAST:       # %bb.0:2093; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31]2094; AVX512VL-FAST-NEXT:    retq2095  %1 = shufflevector <4 x i64> %a, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i32> <i32 4, i32 0, i32 4, i32 3>2096  ret <4 x i64> %12097}2098 2099define <4 x i64> @shuffle_v4i64_1z2z(<4 x i64> %a, <4 x i64> %b) {2100; AVX1-LABEL: shuffle_v4i64_1z2z:2101; AVX1:       # %bb.0:2102; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm12103; AVX1-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[2],ymm1[3]2104; AVX1-NEXT:    retq2105;2106; AVX2-SLOW-LABEL: shuffle_v4i64_1z2z:2107; AVX2-SLOW:       # %bb.0:2108; AVX2-SLOW-NEXT:    vxorps %xmm1, %xmm1, %xmm12109; AVX2-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]2110; AVX2-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,2,0]2111; AVX2-SLOW-NEXT:    retq2112;2113; AVX2-FAST-LABEL: shuffle_v4i64_1z2z:2114; AVX2-FAST:       # %bb.0:2115; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23],zero,zero,zero,zero,zero,zero,zero,zero2116; AVX2-FAST-NEXT:    retq2117;2118; AVX512VL-SLOW-LABEL: shuffle_v4i64_1z2z:2119; AVX512VL-SLOW:       # %bb.0:2120; AVX512VL-SLOW-NEXT:    vxorps %xmm1, %xmm1, %xmm12121; AVX512VL-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7]2122; AVX512VL-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,0,2,0]2123; AVX512VL-SLOW-NEXT:    retq2124;2125; AVX512VL-FAST-LABEL: shuffle_v4i64_1z2z:2126; AVX512VL-FAST:       # %bb.0:2127; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23],zero,zero,zero,zero,zero,zero,zero,zero2128; AVX512VL-FAST-NEXT:    retq2129  %1 = shufflevector <4 x i64> %a, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i32> <i32 1, i32 4, i32 2, i32 4>2130  ret <4 x i64> %12131}2132 2133define <4 x double> @add_v4f64_0246_1357(<4 x double> %a, <4 x double> %b) {2134; AVX1-LABEL: add_v4f64_0246_1357:2135; AVX1:       # %bb.0: # %entry2136; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]2137; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02138; AVX1-NEXT:    vhaddpd %ymm2, %ymm0, %ymm02139; AVX1-NEXT:    retq2140;2141; AVX2-LABEL: add_v4f64_0246_1357:2142; AVX2:       # %bb.0: # %entry2143; AVX2-NEXT:    vhaddpd %ymm1, %ymm0, %ymm02144; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]2145; AVX2-NEXT:    retq2146;2147; AVX512VL-LABEL: add_v4f64_0246_1357:2148; AVX512VL:       # %bb.0: # %entry2149; AVX512VL-NEXT:    vhaddpd %ymm1, %ymm0, %ymm02150; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]2151; AVX512VL-NEXT:    retq2152entry:2153  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>2154  %shuffle1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>2155  %add = fadd <4 x double> %shuffle, %shuffle12156  ret <4 x double> %add2157}2158 2159define <4 x double> @add_v4f64_4602_5713(<4 x double> %a, <4 x double> %b) {2160; AVX1-LABEL: add_v4f64_4602_5713:2161; AVX1:       # %bb.0: # %entry2162; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3],ymm0[2,3]2163; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02164; AVX1-NEXT:    vhaddpd %ymm2, %ymm0, %ymm02165; AVX1-NEXT:    retq2166;2167; AVX2-LABEL: add_v4f64_4602_5713:2168; AVX2:       # %bb.0: # %entry2169; AVX2-NEXT:    vhaddpd %ymm1, %ymm0, %ymm02170; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,3,0,2]2171; AVX2-NEXT:    retq2172;2173; AVX512VL-LABEL: add_v4f64_4602_5713:2174; AVX512VL:       # %bb.0: # %entry2175; AVX512VL-NEXT:    vhaddpd %ymm1, %ymm0, %ymm02176; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[1,3,0,2]2177; AVX512VL-NEXT:    retq2178entry:2179  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 6, i32 0, i32 2>2180  %shuffle1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 7, i32 1, i32 3>2181  %add = fadd <4 x double> %shuffle, %shuffle12182  ret <4 x double> %add2183}2184 2185define <4 x double> @add_v4f64_024u_135u_reverse(<4 x double> %a, <4 x double> %b) {2186; AVX1-LABEL: add_v4f64_024u_135u_reverse:2187; AVX1:       # %bb.0:2188; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm12189; AVX1-NEXT:    vhaddpd %ymm1, %ymm0, %ymm02190; AVX1-NEXT:    retq2191;2192; AVX2-LABEL: add_v4f64_024u_135u_reverse:2193; AVX2:       # %bb.0:2194; AVX2-NEXT:    vhaddpd %ymm0, %ymm1, %ymm02195; AVX2-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,3,1]2196; AVX2-NEXT:    retq2197;2198; AVX512VL-LABEL: add_v4f64_024u_135u_reverse:2199; AVX512VL:       # %bb.0:2200; AVX512VL-NEXT:    vhaddpd %ymm0, %ymm1, %ymm02201; AVX512VL-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,3,1]2202; AVX512VL-NEXT:    retq2203  %shuffle0 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 poison>2204  %shuffle1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 poison>2205  %add = fadd <4 x double> %shuffle0, %shuffle12206  %shuffle = shufflevector <4 x double> %add, <4 x double> poison, <4 x i32> <i32 poison, i32 2, i32 1, i32 0>2207  ret <4 x double> %shuffle2208}2209 2210define <4 x i64> @add_v4i64_0246_1357(<4 x i64> %a, <4 x i64> %b) {2211; AVX1-LABEL: add_v4i64_0246_1357:2212; AVX1:       # %bb.0: # %entry2213; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]2214; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02215; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm1 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]2216; AVX1-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm2[1],ymm0[3],ymm2[3]2217; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22218; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm32219; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm22220; AVX1-NEXT:    vpaddq %xmm0, %xmm1, %xmm02221; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02222; AVX1-NEXT:    retq2223;2224; AVX2-LABEL: add_v4i64_0246_1357:2225; AVX2:       # %bb.0: # %entry2226; AVX2-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]2227; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2228; AVX2-NEXT:    vpunpckhqdq {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2229; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2230; AVX2-NEXT:    vpaddq %ymm0, %ymm2, %ymm02231; AVX2-NEXT:    retq2232;2233; AVX512VL-SLOW-LABEL: add_v4i64_0246_1357:2234; AVX512VL-SLOW:       # %bb.0: # %entry2235; AVX512VL-SLOW-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]2236; AVX512VL-SLOW-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2237; AVX512VL-SLOW-NEXT:    vpunpckhqdq {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2238; AVX512VL-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2239; AVX512VL-SLOW-NEXT:    vpaddq %ymm0, %ymm2, %ymm02240; AVX512VL-SLOW-NEXT:    retq2241;2242; AVX512VL-FAST-ALL-LABEL: add_v4i64_0246_1357:2243; AVX512VL-FAST-ALL:       # %bb.0: # %entry2244; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,2,4,6]2245; AVX512VL-FAST-ALL-NEXT:    vpermi2q %ymm1, %ymm0, %ymm22246; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm3 = [1,3,5,7]2247; AVX512VL-FAST-ALL-NEXT:    vpermi2q %ymm1, %ymm0, %ymm32248; AVX512VL-FAST-ALL-NEXT:    vpaddq %ymm3, %ymm2, %ymm02249; AVX512VL-FAST-ALL-NEXT:    retq2250;2251; AVX512VL-FAST-PERLANE-LABEL: add_v4i64_0246_1357:2252; AVX512VL-FAST-PERLANE:       # %bb.0: # %entry2253; AVX512VL-FAST-PERLANE-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]2254; AVX512VL-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2255; AVX512VL-FAST-PERLANE-NEXT:    vpunpckhqdq {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2256; AVX512VL-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2257; AVX512VL-FAST-PERLANE-NEXT:    vpaddq %ymm0, %ymm2, %ymm02258; AVX512VL-FAST-PERLANE-NEXT:    retq2259entry:2260  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 2, i32 4, i32 6>2261  %shuffle1 = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 3, i32 5, i32 7>2262  %add = add <4 x i64> %shuffle, %shuffle12263  ret <4 x i64> %add2264}2265 2266define <4 x i64> @add_v4i64_4602_5713(<4 x i64> %a, <4 x i64> %b) {2267; AVX1-LABEL: add_v4i64_4602_5713:2268; AVX1:       # %bb.0: # %entry2269; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm2 = ymm1[2,3],ymm0[2,3]2270; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02271; AVX1-NEXT:    vunpcklpd {{.*#+}} ymm1 = ymm0[0],ymm2[0],ymm0[2],ymm2[2]2272; AVX1-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm2[1],ymm0[3],ymm2[3]2273; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm22274; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm32275; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm22276; AVX1-NEXT:    vpaddq %xmm0, %xmm1, %xmm02277; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02278; AVX1-NEXT:    retq2279;2280; AVX2-LABEL: add_v4i64_4602_5713:2281; AVX2:       # %bb.0: # %entry2282; AVX2-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]2283; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2284; AVX2-NEXT:    vpunpckhqdq {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]2285; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2286; AVX2-NEXT:    vpaddq %ymm0, %ymm2, %ymm02287; AVX2-NEXT:    retq2288;2289; AVX512VL-SLOW-LABEL: add_v4i64_4602_5713:2290; AVX512VL-SLOW:       # %bb.0: # %entry2291; AVX512VL-SLOW-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]2292; AVX512VL-SLOW-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2293; AVX512VL-SLOW-NEXT:    vpunpckhqdq {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]2294; AVX512VL-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2295; AVX512VL-SLOW-NEXT:    vpaddq %ymm0, %ymm2, %ymm02296; AVX512VL-SLOW-NEXT:    retq2297;2298; AVX512VL-FAST-ALL-LABEL: add_v4i64_4602_5713:2299; AVX512VL-FAST-ALL:       # %bb.0: # %entry2300; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [0,2,4,6]2301; AVX512VL-FAST-ALL-NEXT:    vpermi2q %ymm0, %ymm1, %ymm22302; AVX512VL-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm3 = [1,3,5,7]2303; AVX512VL-FAST-ALL-NEXT:    vpermi2q %ymm0, %ymm1, %ymm32304; AVX512VL-FAST-ALL-NEXT:    vpaddq %ymm3, %ymm2, %ymm02305; AVX512VL-FAST-ALL-NEXT:    retq2306;2307; AVX512VL-FAST-PERLANE-LABEL: add_v4i64_4602_5713:2308; AVX512VL-FAST-PERLANE:       # %bb.0: # %entry2309; AVX512VL-FAST-PERLANE-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]2310; AVX512VL-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]2311; AVX512VL-FAST-PERLANE-NEXT:    vpunpckhqdq {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3]2312; AVX512VL-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]2313; AVX512VL-FAST-PERLANE-NEXT:    vpaddq %ymm0, %ymm2, %ymm02314; AVX512VL-FAST-PERLANE-NEXT:    retq2315entry:2316  %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 6, i32 0, i32 2>2317  %shuffle1 = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 5, i32 7, i32 1, i32 3>2318  %add = add <4 x i64> %shuffle, %shuffle12319  ret <4 x i64> %add2320}2321 2322define <4 x double> @shuffle_v4f64_0zzz_optsize(<4 x double> %a) optsize {2323; ALL-LABEL: shuffle_v4f64_0zzz_optsize:2324; ALL:       # %bb.0:2325; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2326; ALL-NEXT:    retq2327  %b = shufflevector <4 x double> %a, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>2328  ret <4 x double> %b2329}2330 2331define <4 x i64> @shuffle_v4i64_0zzz_optsize(<4 x i64> %a) optsize {2332; ALL-LABEL: shuffle_v4i64_0zzz_optsize:2333; ALL:       # %bb.0:2334; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2335; ALL-NEXT:    retq2336  %b = shufflevector <4 x i64> %a, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>2337  ret <4 x i64> %b2338}2339 2340define <8 x float> @shuffle_v8f32_0zzzzzzz_optsize(<8 x float> %a) optsize {2341; ALL-LABEL: shuffle_v8f32_0zzzzzzz_optsize:2342; ALL:       # %bb.0:2343; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm12344; ALL-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2345; ALL-NEXT:    retq2346  %b = shufflevector <8 x float> %a, <8 x float> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2347  ret <8 x float> %b2348}2349 2350define <8 x i32> @shuffle_v8i32_0zzzzzzz_optsize(<8 x i32> %a) optsize {2351; ALL-LABEL: shuffle_v8i32_0zzzzzzz_optsize:2352; ALL:       # %bb.0:2353; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm12354; ALL-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2355; ALL-NEXT:    retq2356  %b = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2357  ret <8 x i32> %b2358}2359 2360define <4 x double> @shuffle_v4f64_0zzz_pgso(<4 x double> %a) !prof !14 {2361; ALL-LABEL: shuffle_v4f64_0zzz_pgso:2362; ALL:       # %bb.0:2363; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2364; ALL-NEXT:    retq2365  %b = shufflevector <4 x double> %a, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>2366  ret <4 x double> %b2367}2368 2369define <4 x i64> @shuffle_v4i64_0zzz_pgso(<4 x i64> %a) !prof !14 {2370; ALL-LABEL: shuffle_v4i64_0zzz_pgso:2371; ALL:       # %bb.0:2372; ALL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero2373; ALL-NEXT:    retq2374  %b = shufflevector <4 x i64> %a, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7>2375  ret <4 x i64> %b2376}2377 2378define <8 x float> @shuffle_v8f32_0zzzzzzz_pgso(<8 x float> %a) !prof !14 {2379; ALL-LABEL: shuffle_v8f32_0zzzzzzz_pgso:2380; ALL:       # %bb.0:2381; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm12382; ALL-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2383; ALL-NEXT:    retq2384  %b = shufflevector <8 x float> %a, <8 x float> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2385  ret <8 x float> %b2386}2387 2388define <8 x i32> @shuffle_v8i32_0zzzzzzz_pgso(<8 x i32> %a) !prof !14 {2389; ALL-LABEL: shuffle_v8i32_0zzzzzzz_pgso:2390; ALL:       # %bb.0:2391; ALL-NEXT:    vxorps %xmm1, %xmm1, %xmm12392; ALL-NEXT:    vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]2393; ALL-NEXT:    retq2394  %b = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2395  ret <8 x i32> %b2396}2397 2398define <4 x i64> @unpckh_v4i64(<4 x i64> %x, <4 x i64> %y) {2399; ALL-LABEL: unpckh_v4i64:2400; ALL:       # %bb.0:2401; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm12402; ALL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]2403; ALL-NEXT:    retq2404  %unpckh = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 1, i32 7, i32 poison, i32 poison>2405  ret <4 x i64> %unpckh2406}2407 2408define <4 x double> @unpckh_v4f64(<4 x double> %x, <4 x double> %y) {2409; ALL-LABEL: unpckh_v4f64:2410; ALL:       # %bb.0:2411; ALL-NEXT:    vextractf128 $1, %ymm1, %xmm12412; ALL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]2413; ALL-NEXT:    retq2414  %unpckh = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 1, i32 7, i32 poison, i32 poison>2415  ret <4 x double> %unpckh2416}2417 2418define <4 x double> @blend_broadcasts_v1f64(ptr %p0, ptr %p1) {2419; AVX1-LABEL: blend_broadcasts_v1f64:2420; AVX1:       # %bb.0:2421; AVX1-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2422; AVX1-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero2423; AVX1-NEXT:    vmovlhps {{.*#+}} xmm2 = xmm1[0],xmm0[0]2424; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]2425; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02426; AVX1-NEXT:    retq2427;2428; AVX2-LABEL: blend_broadcasts_v1f64:2429; AVX2:       # %bb.0:2430; AVX2-NEXT:    vbroadcastsd (%rsi), %ymm02431; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm12432; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]2433; AVX2-NEXT:    retq2434;2435; AVX512VL-LABEL: blend_broadcasts_v1f64:2436; AVX512VL:       # %bb.0:2437; AVX512VL-NEXT:    vbroadcastsd (%rsi), %ymm02438; AVX512VL-NEXT:    vbroadcastsd (%rdi), %ymm12439; AVX512VL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]2440; AVX512VL-NEXT:    retq2441  %ld0 = load <1 x double>, ptr %p0, align 322442  %ld1 = load <1 x double>, ptr %p1, align 322443  %blend = shufflevector <1 x double> %ld0, <1 x double> %ld1, <4 x i32> <i32 0, i32 1, i32 1, i32 0>2444  ret <4 x double> %blend2445}2446 2447define <4 x double> @blend_broadcasts_v1f64_4x(ptr %p0, ptr %p1) {2448; AVX1-LABEL: blend_broadcasts_v1f64_4x:2449; AVX1:       # %bb.0:2450; AVX1-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2451; AVX1-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero2452; AVX1-NEXT:    vmovlhps {{.*#+}} xmm2 = xmm1[0],xmm0[0]2453; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]2454; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02455; AVX1-NEXT:    retq2456;2457; AVX2-LABEL: blend_broadcasts_v1f64_4x:2458; AVX2:       # %bb.0:2459; AVX2-NEXT:    vbroadcastsd (%rsi), %ymm02460; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm12461; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]2462; AVX2-NEXT:    retq2463;2464; AVX512VL-LABEL: blend_broadcasts_v1f64_4x:2465; AVX512VL:       # %bb.0:2466; AVX512VL-NEXT:    vbroadcastsd (%rsi), %ymm02467; AVX512VL-NEXT:    vbroadcastsd (%rdi), %ymm12468; AVX512VL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]2469; AVX512VL-NEXT:    retq2470  %ld0 = load <1 x double>, ptr %p0, align 322471  %ld1 = load <1 x double>, ptr %p1, align 322472  %bcst0 = shufflevector <1 x double> %ld0, <1 x double> poison, <4 x i32> zeroinitializer2473  %bcst1 = shufflevector <1 x double> %ld1, <1 x double> poison, <4 x i32> zeroinitializer2474  %blend = shufflevector <4 x double> %bcst0, <4 x double> %bcst1, <4 x i32> <i32 0, i32 5, i32 6, i32 3>2475  ret <4 x double> %blend2476}2477 2478define <4 x double> @blend_broadcasts_v1f64_2x(ptr %p0, ptr %p1) {2479; AVX1-LABEL: blend_broadcasts_v1f64_2x:2480; AVX1:       # %bb.0:2481; AVX1-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero2482; AVX1-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero2483; AVX1-NEXT:    vmovlhps {{.*#+}} xmm2 = xmm1[0],xmm0[0]2484; AVX1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]2485; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02486; AVX1-NEXT:    retq2487;2488; AVX2-LABEL: blend_broadcasts_v1f64_2x:2489; AVX2:       # %bb.0:2490; AVX2-NEXT:    vbroadcastsd (%rsi), %ymm02491; AVX2-NEXT:    vbroadcastsd (%rdi), %ymm12492; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]2493; AVX2-NEXT:    retq2494;2495; AVX512VL-LABEL: blend_broadcasts_v1f64_2x:2496; AVX512VL:       # %bb.0:2497; AVX512VL-NEXT:    vbroadcastsd (%rsi), %ymm02498; AVX512VL-NEXT:    vbroadcastsd (%rdi), %ymm12499; AVX512VL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]2500; AVX512VL-NEXT:    retq2501  %ld0 = load <1 x double>, ptr %p0, align 322502  %ld1 = load <1 x double>, ptr %p1, align 322503  %bcst0 = shufflevector <1 x double> %ld0, <1 x double> poison, <2 x i32> zeroinitializer2504  %bcst1 = shufflevector <1 x double> %ld1, <1 x double> poison, <2 x i32> zeroinitializer2505  %blend = shufflevector <2 x double> %bcst0, <2 x double> %bcst1, <4 x i32> <i32 0, i32 2, i32 3, i32 1>2506  ret <4 x double> %blend2507}2508 2509!llvm.module.flags = !{!0}2510!0 = !{i32 1, !"ProfileSummary", !1}2511!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}2512!2 = !{!"ProfileFormat", !"InstrProf"}2513!3 = !{!"TotalCount", i64 10000}2514!4 = !{!"MaxCount", i64 10}2515!5 = !{!"MaxInternalCount", i64 1}2516!6 = !{!"MaxFunctionCount", i64 1000}2517!7 = !{!"NumCounts", i64 3}2518!8 = !{!"NumFunctions", i64 3}2519!9 = !{!"DetailedSummary", !10}2520!10 = !{!11, !12, !13}2521!11 = !{i32 10000, i64 100, i32 1}2522!12 = !{i32 999000, i64 100, i32 1}2523!13 = !{i32 999999, i64 1, i32 2}2524!14 = !{!"function_entry_count", i64 0}2525