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