4025 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=AVX2OR512VL --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=AVX2OR512VL --check-prefix=AVX2 --check-prefix=AVX2-FAST-ALL5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX1OR2 --check-prefix=AVX2OR512VL --check-prefix=AVX2 --check-prefix=AVX2-FAST-PERLANE6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX2OR512VL --check-prefix=AVX512VL --check-prefix=AVX512VL-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX2OR512VL --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST --check-prefix=AVX512VL-FAST-ALL8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512dq,+fast-variable-perlane-shuffle | FileCheck %s --check-prefix=ALL --check-prefix=AVX2OR512VL --check-prefix=AVX512VL --check-prefix=AVX512VL-FAST --check-prefix=AVX512VL-FAST-PERLANE9 10define <8 x float> @shuffle_v8f32_00000000(<8 x float> %a, <8 x float> %b) {11; AVX1-LABEL: shuffle_v8f32_00000000:12; AVX1: # %bb.0:13; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,0]14; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm015; AVX1-NEXT: retq16;17; AVX2OR512VL-LABEL: shuffle_v8f32_00000000:18; AVX2OR512VL: # %bb.0:19; AVX2OR512VL-NEXT: vbroadcastss %xmm0, %ymm020; AVX2OR512VL-NEXT: retq21 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>22 ret <8 x float> %shuffle23}24 25define <8 x float> @shuffle_v8f32_00000010(<8 x float> %a, <8 x float> %b) {26; AVX1-LABEL: shuffle_v8f32_00000010:27; AVX1: # %bb.0:28; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]29; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]30; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm031; AVX1-NEXT: retq32;33; AVX2-SLOW-LABEL: shuffle_v8f32_00000010:34; AVX2-SLOW: # %bb.0:35; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]36; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]37; AVX2-SLOW-NEXT: retq38;39; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00000010:40; AVX2-FAST-ALL: # %bb.0:41; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]42; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm043; AVX2-FAST-ALL-NEXT: retq44;45; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00000010:46; AVX2-FAST-PERLANE: # %bb.0:47; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]48; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]49; AVX2-FAST-PERLANE-NEXT: retq50;51; AVX512VL-SLOW-LABEL: shuffle_v8f32_00000010:52; AVX512VL-SLOW: # %bb.0:53; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]54; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]55; AVX512VL-SLOW-NEXT: retq56;57; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00000010:58; AVX512VL-FAST-ALL: # %bb.0:59; AVX512VL-FAST-ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,0,1]60; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm061; AVX512VL-FAST-ALL-NEXT: retq62;63; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00000010:64; AVX512VL-FAST-PERLANE: # %bb.0:65; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]66; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]67; AVX512VL-FAST-PERLANE-NEXT: retq68 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>69 ret <8 x float> %shuffle70}71 72define <8 x float> @shuffle_v8f32_00000200(<8 x float> %a, <8 x float> %b) {73; AVX1-LABEL: shuffle_v8f32_00000200:74; AVX1: # %bb.0:75; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]76; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,0,0]77; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm078; AVX1-NEXT: retq79;80; AVX2-SLOW-LABEL: shuffle_v8f32_00000200:81; AVX2-SLOW: # %bb.0:82; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]83; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]84; AVX2-SLOW-NEXT: retq85;86; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00000200:87; AVX2-FAST-ALL: # %bb.0:88; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]89; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm090; AVX2-FAST-ALL-NEXT: retq91;92; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00000200:93; AVX2-FAST-PERLANE: # %bb.0:94; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]95; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]96; AVX2-FAST-PERLANE-NEXT: retq97;98; AVX512VL-SLOW-LABEL: shuffle_v8f32_00000200:99; AVX512VL-SLOW: # %bb.0:100; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]101; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]102; AVX512VL-SLOW-NEXT: retq103;104; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00000200:105; AVX512VL-FAST-ALL: # %bb.0:106; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]107; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0108; AVX512VL-FAST-ALL-NEXT: retq109;110; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00000200:111; AVX512VL-FAST-PERLANE: # %bb.0:112; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]113; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]114; AVX512VL-FAST-PERLANE-NEXT: retq115 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>116 ret <8 x float> %shuffle117}118 119define <8 x float> @shuffle_v8f32_00003000(<8 x float> %a, <8 x float> %b) {120; AVX1-LABEL: shuffle_v8f32_00003000:121; AVX1: # %bb.0:122; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]123; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,0,0,0]124; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0125; AVX1-NEXT: retq126;127; AVX2-SLOW-LABEL: shuffle_v8f32_00003000:128; AVX2-SLOW: # %bb.0:129; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]130; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]131; AVX2-SLOW-NEXT: retq132;133; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00003000:134; AVX2-FAST-ALL: # %bb.0:135; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]136; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0137; AVX2-FAST-ALL-NEXT: retq138;139; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00003000:140; AVX2-FAST-PERLANE: # %bb.0:141; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]142; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]143; AVX2-FAST-PERLANE-NEXT: retq144;145; AVX512VL-SLOW-LABEL: shuffle_v8f32_00003000:146; AVX512VL-SLOW: # %bb.0:147; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]148; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]149; AVX512VL-SLOW-NEXT: retq150;151; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00003000:152; AVX512VL-FAST-ALL: # %bb.0:153; AVX512VL-FAST-ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,3,0]154; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0155; AVX512VL-FAST-ALL-NEXT: retq156;157; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00003000:158; AVX512VL-FAST-PERLANE: # %bb.0:159; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]160; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]161; AVX512VL-FAST-PERLANE-NEXT: retq162 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>163 ret <8 x float> %shuffle164}165 166define <8 x float> @shuffle_v8f32_00040000(<8 x float> %a, <8 x float> %b) {167; AVX1-LABEL: shuffle_v8f32_00040000:168; AVX1: # %bb.0:169; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]170; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0171; AVX1-NEXT: vunpcklpd {{.*#+}} ymm1 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]172; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[2,0],ymm0[4,4],ymm1[6,4]173; AVX1-NEXT: retq174;175; AVX2-LABEL: shuffle_v8f32_00040000:176; AVX2: # %bb.0:177; AVX2-NEXT: vmovaps {{.*#+}} xmm1 = [0,0,0,4]178; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0179; AVX2-NEXT: retq180;181; AVX512VL-LABEL: shuffle_v8f32_00040000:182; AVX512VL: # %bb.0:183; AVX512VL-NEXT: vpmovsxbd {{.*#+}} xmm1 = [0,0,0,4]184; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm0185; AVX512VL-NEXT: retq186 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>187 ret <8 x float> %shuffle188}189 190define <8 x float> @shuffle_v8f32_00500000(<8 x float> %a, <8 x float> %b) {191; AVX1-LABEL: shuffle_v8f32_00500000:192; AVX1: # %bb.0:193; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]194; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]195; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,4,4]196; AVX1-NEXT: retq197;198; AVX2-LABEL: shuffle_v8f32_00500000:199; AVX2: # %bb.0:200; AVX2-NEXT: vmovaps {{.*#+}} xmm1 = [0,0,5,0]201; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0202; AVX2-NEXT: retq203;204; AVX512VL-LABEL: shuffle_v8f32_00500000:205; AVX512VL: # %bb.0:206; AVX512VL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [0,5]207; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm0208; AVX512VL-NEXT: retq209 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>210 ret <8 x float> %shuffle211}212 213define <8 x float> @shuffle_v8f32_06000000(<8 x float> %a, <8 x float> %b) {214; AVX1-LABEL: shuffle_v8f32_06000000:215; AVX1: # %bb.0:216; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]217; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]218; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,0,4,4,4,4]219; AVX1-NEXT: retq220;221; AVX2-LABEL: shuffle_v8f32_06000000:222; AVX2: # %bb.0:223; AVX2-NEXT: vmovsd {{.*#+}} xmm1 = [0,6,0,0]224; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0225; AVX2-NEXT: retq226;227; AVX512VL-LABEL: shuffle_v8f32_06000000:228; AVX512VL: # %bb.0:229; AVX512VL-NEXT: vpmovsxbd {{.*#+}} xmm1 = [0,6,0,0]230; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm0231; AVX512VL-NEXT: retq232 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>233 ret <8 x float> %shuffle234}235 236define <8 x float> @shuffle_v8f32_70000000(<8 x float> %a, <8 x float> %b) {237; AVX1-LABEL: shuffle_v8f32_70000000:238; AVX1: # %bb.0:239; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]240; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]241; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,0,0,0,4,4,4,4]242; AVX1-NEXT: retq243;244; AVX2-LABEL: shuffle_v8f32_70000000:245; AVX2: # %bb.0:246; AVX2-NEXT: vmovss {{.*#+}} xmm1 = [7,0,0,0]247; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0248; AVX2-NEXT: retq249;250; AVX512VL-LABEL: shuffle_v8f32_70000000:251; AVX512VL: # %bb.0:252; AVX512VL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [7,0]253; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm0254; AVX512VL-NEXT: retq255 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>256 ret <8 x float> %shuffle257}258 259define <8 x float> @shuffle_v8f32_01014545(<8 x float> %a, <8 x float> %b) {260; ALL-LABEL: shuffle_v8f32_01014545:261; ALL: # %bb.0:262; ALL-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]263; ALL-NEXT: retq264 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>265 ret <8 x float> %shuffle266}267 268define <8 x float> @shuffle_v8f32_00112233(<8 x float> %a, <8 x float> %b) {269; AVX1-LABEL: shuffle_v8f32_00112233:270; AVX1: # %bb.0:271; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,1,1]272; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,2,3,3]273; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0274; AVX1-NEXT: retq275;276; AVX2-LABEL: shuffle_v8f32_00112233:277; AVX2: # %bb.0:278; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]279; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0280; AVX2-NEXT: retq281;282; AVX512VL-LABEL: shuffle_v8f32_00112233:283; AVX512VL: # %bb.0:284; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]285; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm0286; AVX512VL-NEXT: retq287 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>288 ret <8 x float> %shuffle289}290 291define <8 x float> @shuffle_v8f32_00001111(<8 x float> %a, <8 x float> %b) {292; AVX1-LABEL: shuffle_v8f32_00001111:293; AVX1: # %bb.0:294; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]295; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]296; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0297; AVX1-NEXT: retq298;299; AVX2-SLOW-LABEL: shuffle_v8f32_00001111:300; AVX2-SLOW: # %bb.0:301; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]302; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]303; AVX2-SLOW-NEXT: retq304;305; AVX2-FAST-ALL-LABEL: shuffle_v8f32_00001111:306; AVX2-FAST-ALL: # %bb.0:307; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]308; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0309; AVX2-FAST-ALL-NEXT: retq310;311; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_00001111:312; AVX2-FAST-PERLANE: # %bb.0:313; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]314; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]315; AVX2-FAST-PERLANE-NEXT: retq316;317; AVX512VL-SLOW-LABEL: shuffle_v8f32_00001111:318; AVX512VL-SLOW: # %bb.0:319; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]320; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]321; AVX512VL-SLOW-NEXT: retq322;323; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_00001111:324; AVX512VL-FAST-ALL: # %bb.0:325; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]326; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0327; AVX512VL-FAST-ALL-NEXT: retq328;329; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_00001111:330; AVX512VL-FAST-PERLANE: # %bb.0:331; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]332; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]333; AVX512VL-FAST-PERLANE-NEXT: retq334 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>335 ret <8 x float> %shuffle336}337 338define <8 x float> @shuffle_v8f32_81a3c5e7(<8 x float> %a, <8 x float> %b) {339; ALL-LABEL: shuffle_v8f32_81a3c5e7:340; ALL: # %bb.0:341; ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]342; ALL-NEXT: retq343 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>344 ret <8 x float> %shuffle345}346 347define <8 x float> @shuffle_v8f32_08080808(<8 x float> %a, <8 x float> %b) {348; AVX1-LABEL: shuffle_v8f32_08080808:349; AVX1: # %bb.0:350; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]351; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,1,3]352; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0353; AVX1-NEXT: retq354;355; AVX2-LABEL: shuffle_v8f32_08080808:356; AVX2: # %bb.0:357; AVX2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]358; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0359; AVX2-NEXT: retq360;361; AVX512VL-SLOW-LABEL: shuffle_v8f32_08080808:362; AVX512VL-SLOW: # %bb.0:363; AVX512VL-SLOW-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]364; AVX512VL-SLOW-NEXT: vbroadcastsd %xmm0, %ymm0365; AVX512VL-SLOW-NEXT: retq366;367; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_08080808:368; AVX512VL-FAST-ALL: # %bb.0:369; AVX512VL-FAST-ALL-NEXT: vbroadcastsd {{.*#+}} ymm2 = [0,8,0,8,0,8,0,8]370; AVX512VL-FAST-ALL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm0371; AVX512VL-FAST-ALL-NEXT: retq372;373; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_08080808:374; AVX512VL-FAST-PERLANE: # %bb.0:375; AVX512VL-FAST-PERLANE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]376; AVX512VL-FAST-PERLANE-NEXT: vbroadcastsd %xmm0, %ymm0377; AVX512VL-FAST-PERLANE-NEXT: retq378 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>379 ret <8 x float> %shuffle380}381 382define <8 x float> @shuffle_v8f32_08084c4c(<8 x float> %a, <8 x float> %b) {383; AVX1OR2-LABEL: shuffle_v8f32_08084c4c:384; AVX1OR2: # %bb.0:385; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]386; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]387; AVX1OR2-NEXT: retq388;389; AVX512VL-SLOW-LABEL: shuffle_v8f32_08084c4c:390; AVX512VL-SLOW: # %bb.0:391; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]392; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]393; AVX512VL-SLOW-NEXT: retq394;395; AVX512VL-FAST-LABEL: shuffle_v8f32_08084c4c:396; AVX512VL-FAST: # %bb.0:397; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,8,0,8,4,12,4,12]398; AVX512VL-FAST-NEXT: vpermt2ps %ymm1, %ymm2, %ymm0399; AVX512VL-FAST-NEXT: retq400 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>401 ret <8 x float> %shuffle402}403 404define <8 x float> @shuffle_v8f32_8823cc67(<8 x float> %a, <8 x float> %b) {405; ALL-LABEL: shuffle_v8f32_8823cc67:406; ALL: # %bb.0:407; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]408; ALL-NEXT: retq409 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>410 ret <8 x float> %shuffle411}412 413define <8 x float> @shuffle_v8f32_9832dc76(<8 x float> %a, <8 x float> %b) {414; ALL-LABEL: shuffle_v8f32_9832dc76:415; ALL: # %bb.0:416; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]417; ALL-NEXT: retq418 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>419 ret <8 x float> %shuffle420}421 422define <8 x float> @shuffle_v8f32_9810dc54(<8 x float> %a, <8 x float> %b) {423; ALL-LABEL: shuffle_v8f32_9810dc54:424; ALL: # %bb.0:425; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]426; ALL-NEXT: retq427 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>428 ret <8 x float> %shuffle429}430 431define <8 x float> @shuffle_v8f32_08194c5d(<8 x float> %a, <8 x float> %b) {432; ALL-LABEL: shuffle_v8f32_08194c5d:433; ALL: # %bb.0:434; ALL-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]435; ALL-NEXT: retq436 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>437 ret <8 x float> %shuffle438}439 440define <8 x float> @shuffle_v8f32_2a3b6e7f(<8 x float> %a, <8 x float> %b) {441; ALL-LABEL: shuffle_v8f32_2a3b6e7f:442; ALL: # %bb.0:443; ALL-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]444; ALL-NEXT: retq445 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>446 ret <8 x float> %shuffle447}448 449define <8 x float> @shuffle_v8f32_08192a3b(<8 x float> %a, <8 x float> %b) {450; AVX1OR2-LABEL: shuffle_v8f32_08192a3b:451; AVX1OR2: # %bb.0:452; AVX1OR2-NEXT: vunpckhps {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]453; AVX1OR2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]454; AVX1OR2-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0455; AVX1OR2-NEXT: retq456;457; AVX512VL-LABEL: shuffle_v8f32_08192a3b:458; AVX512VL: # %bb.0:459; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,8,1,9,2,10,3,11]460; AVX512VL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm0461; AVX512VL-NEXT: retq462 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>463 ret <8 x float> %shuffle464}465 466define <8 x float> @shuffle_v8f32_08991abb(<8 x float> %a, <8 x float> %b) {467; AVX1-LABEL: shuffle_v8f32_08991abb:468; AVX1: # %bb.0:469; AVX1-NEXT: vmovlhps {{.*#+}} xmm2 = xmm0[0],xmm1[0]470; AVX1-NEXT: vshufps {{.*#+}} xmm2 = xmm2[0,2],xmm1[1,1]471; AVX1-NEXT: vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1]472; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,2,3,3]473; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0474; AVX1-NEXT: retq475;476; AVX2-SLOW-LABEL: shuffle_v8f32_08991abb:477; AVX2-SLOW: # %bb.0:478; AVX2-SLOW-NEXT: vmovaps {{.*#+}} ymm2 = [u,0,1,1,u,2,3,3]479; AVX2-SLOW-NEXT: vpermps %ymm1, %ymm2, %ymm1480; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]481; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]482; AVX2-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]483; AVX2-SLOW-NEXT: retq484;485; AVX2-FAST-ALL-LABEL: shuffle_v8f32_08991abb:486; AVX2-FAST-ALL: # %bb.0:487; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [0,u,u,u,1,u,u,u]488; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm2, %ymm0489; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [u,0,1,1,u,2,3,3]490; AVX2-FAST-ALL-NEXT: vpermps %ymm1, %ymm2, %ymm1491; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]492; AVX2-FAST-ALL-NEXT: retq493;494; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_08991abb:495; AVX2-FAST-PERLANE: # %bb.0:496; AVX2-FAST-PERLANE-NEXT: vmovaps {{.*#+}} ymm2 = [u,0,1,1,u,2,3,3]497; AVX2-FAST-PERLANE-NEXT: vpermps %ymm1, %ymm2, %ymm1498; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]499; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]500; AVX2-FAST-PERLANE-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]501; AVX2-FAST-PERLANE-NEXT: retq502;503; AVX512VL-LABEL: shuffle_v8f32_08991abb:504; AVX512VL: # %bb.0:505; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,0,1,1,9,2,3,3]506; AVX512VL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm2507; AVX512VL-NEXT: vmovaps %ymm2, %ymm0508; AVX512VL-NEXT: retq509 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>510 ret <8 x float> %shuffle511}512 513define <8 x float> @shuffle_v8f32_091b2d3f(<8 x float> %a, <8 x float> %b) {514; AVX1-LABEL: shuffle_v8f32_091b2d3f:515; AVX1: # %bb.0:516; AVX1-NEXT: vshufps {{.*#+}} xmm2 = xmm0[0,1,1,3]517; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,1,3,3]518; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0519; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]520; AVX1-NEXT: retq521;522; AVX2-LABEL: shuffle_v8f32_091b2d3f:523; AVX2: # %bb.0:524; AVX2-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero525; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]526; AVX2-NEXT: retq527;528; AVX512VL-SLOW-LABEL: shuffle_v8f32_091b2d3f:529; AVX512VL-SLOW: # %bb.0:530; AVX512VL-SLOW-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero531; AVX512VL-SLOW-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]532; AVX512VL-SLOW-NEXT: retq533;534; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_091b2d3f:535; AVX512VL-FAST-ALL: # %bb.0:536; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,9,1,11,2,13,3,15]537; AVX512VL-FAST-ALL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm0538; AVX512VL-FAST-ALL-NEXT: retq539;540; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_091b2d3f:541; AVX512VL-FAST-PERLANE: # %bb.0:542; AVX512VL-FAST-PERLANE-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero543; AVX512VL-FAST-PERLANE-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]544; AVX512VL-FAST-PERLANE-NEXT: retq545 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>546 ret <8 x float> %shuffle547}548 549define <8 x float> @shuffle_v8f32_09ab1def(<8 x float> %a, <8 x float> %b) {550; AVX1-LABEL: shuffle_v8f32_09ab1def:551; AVX1: # %bb.0:552; AVX1-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]553; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0554; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]555; AVX1-NEXT: retq556;557; AVX2-SLOW-LABEL: shuffle_v8f32_09ab1def:558; AVX2-SLOW: # %bb.0:559; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]560; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]561; AVX2-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]562; AVX2-SLOW-NEXT: retq563;564; AVX2-FAST-ALL-LABEL: shuffle_v8f32_09ab1def:565; AVX2-FAST-ALL: # %bb.0:566; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [0,u,u,u,1,u,u,u]567; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm2, %ymm0568; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]569; AVX2-FAST-ALL-NEXT: retq570;571; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_09ab1def:572; AVX2-FAST-PERLANE: # %bb.0:573; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]574; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3]575; AVX2-FAST-PERLANE-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]576; AVX2-FAST-PERLANE-NEXT: retq577;578; AVX512VL-LABEL: shuffle_v8f32_09ab1def:579; AVX512VL: # %bb.0:580; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,1,2,3,9,5,6,7]581; AVX512VL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm2582; AVX512VL-NEXT: vmovaps %ymm2, %ymm0583; AVX512VL-NEXT: retq584 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>585 ret <8 x float> %shuffle586}587 588define <8 x float> @shuffle_v8f32_00014445(<8 x float> %a, <8 x float> %b) {589; ALL-LABEL: shuffle_v8f32_00014445:590; ALL: # %bb.0:591; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]592; ALL-NEXT: retq593 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>594 ret <8 x float> %shuffle595}596 597define <8 x float> @shuffle_v8f32_00204464(<8 x float> %a, <8 x float> %b) {598; ALL-LABEL: shuffle_v8f32_00204464:599; ALL: # %bb.0:600; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]601; ALL-NEXT: retq602 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>603 ret <8 x float> %shuffle604}605 606define <8 x float> @shuffle_v8f32_03004744(<8 x float> %a, <8 x float> %b) {607; ALL-LABEL: shuffle_v8f32_03004744:608; ALL: # %bb.0:609; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]610; ALL-NEXT: retq611 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>612 ret <8 x float> %shuffle613}614 615define <8 x float> @shuffle_v8f32_10005444(<8 x float> %a, <8 x float> %b) {616; ALL-LABEL: shuffle_v8f32_10005444:617; ALL: # %bb.0:618; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]619; ALL-NEXT: retq620 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>621 ret <8 x float> %shuffle622}623 624define <8 x float> @shuffle_v8f32_22006644(<8 x float> %a, <8 x float> %b) {625; ALL-LABEL: shuffle_v8f32_22006644:626; ALL: # %bb.0:627; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]628; ALL-NEXT: retq629 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>630 ret <8 x float> %shuffle631}632 633define <8 x float> @shuffle_v8f32_33307774(<8 x float> %a, <8 x float> %b) {634; ALL-LABEL: shuffle_v8f32_33307774:635; ALL: # %bb.0:636; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]637; ALL-NEXT: retq638 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>639 ret <8 x float> %shuffle640}641 642define <8 x float> @shuffle_v8f32_32107654(<8 x float> %a, <8 x float> %b) {643; ALL-LABEL: shuffle_v8f32_32107654:644; ALL: # %bb.0:645; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]646; ALL-NEXT: retq647 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>648 ret <8 x float> %shuffle649}650 651define <8 x float> @shuffle_v8f32_00234467(<8 x float> %a, <8 x float> %b) {652; ALL-LABEL: shuffle_v8f32_00234467:653; ALL: # %bb.0:654; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]655; ALL-NEXT: retq656 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>657 ret <8 x float> %shuffle658}659 660define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {661; ALL-LABEL: shuffle_v8f32_00224466:662; ALL: # %bb.0:663; ALL-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]664; ALL-NEXT: retq665 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>666 ret <8 x float> %shuffle667}668 669define <8 x float> @shuffle_v8f32_00224466_v4f32(<4 x float> %a, <4 x float> %b) {670; ALL-LABEL: shuffle_v8f32_00224466_v4f32:671; ALL: # %bb.0:672; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0673; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0674; ALL-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]675; ALL-NEXT: retq676 %1 = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 0, i32 2, i32 2>677 %2 = shufflevector <4 x float> %b, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>678 %3 = shufflevector <4 x float> %1, <4 x float> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>679 ret <8 x float> %3680}681 682define <8 x float> @shuffle_v8f32_00004444_v4f32(<4 x float> %a, <4 x float> %b) {683; ALL-LABEL: shuffle_v8f32_00004444_v4f32:684; ALL: # %bb.0:685; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0686; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0687; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]688; ALL-NEXT: retq689 %1 = shufflevector <4 x float> %a, <4 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>690 ret <8 x float> %1691}692 693define <8 x float> @shuffle_v8f32_10325476(<8 x float> %a, <8 x float> %b) {694; ALL-LABEL: shuffle_v8f32_10325476:695; ALL: # %bb.0:696; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]697; ALL-NEXT: retq698 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>699 ret <8 x float> %shuffle700}701 702define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {703; ALL-LABEL: shuffle_v8f32_11335577:704; ALL: # %bb.0:705; ALL-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]706; ALL-NEXT: retq707 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>708 ret <8 x float> %shuffle709}710 711define <8 x float> @shuffle_v8f32_11335577_v4f32(<4 x float> %a, <4 x float> %b) {712; ALL-LABEL: shuffle_v8f32_11335577_v4f32:713; ALL: # %bb.0:714; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0715; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0716; ALL-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]717; ALL-NEXT: retq718 %1 = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 1, i32 3, i32 3>719 %2 = shufflevector <4 x float> %b, <4 x float> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>720 %3 = shufflevector <4 x float> %1, <4 x float> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>721 ret <8 x float> %3722}723 724define <8 x float> @shuffle_v8f32_10235467(<8 x float> %a, <8 x float> %b) {725; ALL-LABEL: shuffle_v8f32_10235467:726; ALL: # %bb.0:727; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]728; ALL-NEXT: retq729 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>730 ret <8 x float> %shuffle731}732 733define <8 x float> @shuffle_v8f32_10225466(<8 x float> %a, <8 x float> %b) {734; ALL-LABEL: shuffle_v8f32_10225466:735; ALL: # %bb.0:736; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]737; ALL-NEXT: retq738 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>739 ret <8 x float> %shuffle740}741 742define <8 x float> @shuffle_v8f32_00015444(<8 x float> %a, <8 x float> %b) {743; ALL-LABEL: shuffle_v8f32_00015444:744; ALL: # %bb.0:745; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,5,4,4,4]746; ALL-NEXT: retq747 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>748 ret <8 x float> %shuffle749}750 751define <8 x float> @shuffle_v8f32_00204644(<8 x float> %a, <8 x float> %b) {752; ALL-LABEL: shuffle_v8f32_00204644:753; ALL: # %bb.0:754; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,6,4,4]755; ALL-NEXT: retq756 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>757 ret <8 x float> %shuffle758}759 760define <8 x float> @shuffle_v8f32_03004474(<8 x float> %a, <8 x float> %b) {761; ALL-LABEL: shuffle_v8f32_03004474:762; ALL: # %bb.0:763; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,4,7,4]764; ALL-NEXT: retq765 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>766 ret <8 x float> %shuffle767}768 769define <8 x float> @shuffle_v8f32_10004444(<8 x float> %a, <8 x float> %b) {770; ALL-LABEL: shuffle_v8f32_10004444:771; ALL: # %bb.0:772; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,4,4,4,4]773; ALL-NEXT: retq774 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>775 ret <8 x float> %shuffle776}777 778define <8 x float> @shuffle_v8f32_22006446(<8 x float> %a, <8 x float> %b) {779; ALL-LABEL: shuffle_v8f32_22006446:780; ALL: # %bb.0:781; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,4,4,6]782; ALL-NEXT: retq783 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>784 ret <8 x float> %shuffle785}786 787define <8 x float> @shuffle_v8f32_33307474(<8 x float> %a, <8 x float> %b) {788; ALL-LABEL: shuffle_v8f32_33307474:789; ALL: # %bb.0:790; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,4,7,4]791; ALL-NEXT: retq792 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>793 ret <8 x float> %shuffle794}795 796define <8 x float> @shuffle_v8f32_32104567(<8 x float> %a, <8 x float> %b) {797; ALL-LABEL: shuffle_v8f32_32104567:798; ALL: # %bb.0:799; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7]800; ALL-NEXT: retq801 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>802 ret <8 x float> %shuffle803}804 805define <8 x float> @shuffle_v8f32_00236744(<8 x float> %a, <8 x float> %b) {806; ALL-LABEL: shuffle_v8f32_00236744:807; ALL: # %bb.0:808; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,6,7,4,4]809; ALL-NEXT: retq810 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>811 ret <8 x float> %shuffle812}813 814define <8 x float> @shuffle_v8f32_00226644(<8 x float> %a, <8 x float> %b) {815; ALL-LABEL: shuffle_v8f32_00226644:816; ALL: # %bb.0:817; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,6,6,4,4]818; ALL-NEXT: retq819 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>820 ret <8 x float> %shuffle821}822 823define <8 x float> @shuffle_v8f32_10324567(<8 x float> %a, <8 x float> %b) {824; ALL-LABEL: shuffle_v8f32_10324567:825; ALL: # %bb.0:826; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7]827; ALL-NEXT: retq828 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>829 ret <8 x float> %shuffle830}831 832define <8 x float> @shuffle_v8f32_11334567(<8 x float> %a, <8 x float> %b) {833; ALL-LABEL: shuffle_v8f32_11334567:834; ALL: # %bb.0:835; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7]836; ALL-NEXT: retq837 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>838 ret <8 x float> %shuffle839}840 841define <8 x float> @shuffle_v8f32_01235467(<8 x float> %a, <8 x float> %b) {842; ALL-LABEL: shuffle_v8f32_01235467:843; ALL: # %bb.0:844; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,7]845; ALL-NEXT: retq846 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>847 ret <8 x float> %shuffle848}849 850define <8 x float> @shuffle_v8f32_01235466(<8 x float> %a, <8 x float> %b) {851; ALL-LABEL: shuffle_v8f32_01235466:852; ALL: # %bb.0:853; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,6]854; ALL-NEXT: retq855 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>856 ret <8 x float> %shuffle857}858 859define <8 x float> @shuffle_v8f32_002u6u44(<8 x float> %a, <8 x float> %b) {860; ALL-LABEL: shuffle_v8f32_002u6u44:861; ALL: # %bb.0:862; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,u,6,u,4,4]863; ALL-NEXT: retq864 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 poison, i32 6, i32 poison, i32 4, i32 4>865 ret <8 x float> %shuffle866}867 868define <8 x float> @shuffle_v8f32_00uu66uu(<8 x float> %a, <8 x float> %b) {869; ALL-LABEL: shuffle_v8f32_00uu66uu:870; ALL: # %bb.0:871; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,u,u,6,6,u,u]872; ALL-NEXT: retq873 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 poison, i32 poison, i32 6, i32 6, i32 poison, i32 poison>874 ret <8 x float> %shuffle875}876 877define <8 x float> @shuffle_v8f32_103245uu(<8 x float> %a, <8 x float> %b) {878; ALL-LABEL: shuffle_v8f32_103245uu:879; ALL: # %bb.0:880; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,u,u]881; ALL-NEXT: retq882 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 poison, i32 poison>883 ret <8 x float> %shuffle884}885 886define <8 x float> @shuffle_v8f32_1133uu67(<8 x float> %a, <8 x float> %b) {887; ALL-LABEL: shuffle_v8f32_1133uu67:888; ALL: # %bb.0:889; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,u,u,6,7]890; ALL-NEXT: retq891 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 poison, i32 poison, i32 6, i32 7>892 ret <8 x float> %shuffle893}894 895define <8 x float> @shuffle_v8f32_0uu354uu(<8 x float> %a, <8 x float> %b) {896; ALL-LABEL: shuffle_v8f32_0uu354uu:897; ALL: # %bb.0:898; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,u,u,3,5,4,u,u]899; ALL-NEXT: retq900 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 5, i32 4, i32 poison, i32 poison>901 ret <8 x float> %shuffle902}903 904define <8 x float> @shuffle_v8f32_uuu3uu66(<8 x float> %a, <8 x float> %b) {905; ALL-LABEL: shuffle_v8f32_uuu3uu66:906; ALL: # %bb.0:907; ALL-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[u,u,u,3,u,u,6,6]908; ALL-NEXT: retq909 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 6>910 ret <8 x float> %shuffle911}912 913define <8 x float> @shuffle_v8f32_c348cda0(<8 x float> %a, <8 x float> %b) {914; AVX1-LABEL: shuffle_v8f32_c348cda0:915; AVX1: # %bb.0:916; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,2,3]917; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1918; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[0,1],ymm1[2,0],ymm2[4,5],ymm1[6,4]919; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]920; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm2[0,0],ymm0[4,7],ymm2[4,4]921; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]922; AVX1-NEXT: retq923;924; AVX2-SLOW-LABEL: shuffle_v8f32_c348cda0:925; AVX2-SLOW: # %bb.0:926; AVX2-SLOW-NEXT: vbroadcastf128 {{.*#+}} ymm2 = [4,5,2,0,4,5,2,0]927; AVX2-SLOW-NEXT: # ymm2 = mem[0,1,0,1]928; AVX2-SLOW-NEXT: vpermps %ymm1, %ymm2, %ymm1929; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3,2,0,4,7,6,4]930; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,1]931; AVX2-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]932; AVX2-SLOW-NEXT: retq933;934; AVX2-FAST-ALL-LABEL: shuffle_v8f32_c348cda0:935; AVX2-FAST-ALL: # %bb.0:936; AVX2-FAST-ALL-NEXT: vbroadcastf128 {{.*#+}} ymm2 = [0,3,4,0,0,3,4,0]937; AVX2-FAST-ALL-NEXT: # ymm2 = mem[0,1,0,1]938; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm2, %ymm0939; AVX2-FAST-ALL-NEXT: vbroadcastf128 {{.*#+}} ymm2 = [4,5,2,0,4,5,2,0]940; AVX2-FAST-ALL-NEXT: # ymm2 = mem[0,1,0,1]941; AVX2-FAST-ALL-NEXT: vpermps %ymm1, %ymm2, %ymm1942; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]943; AVX2-FAST-ALL-NEXT: retq944;945; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_c348cda0:946; AVX2-FAST-PERLANE: # %bb.0:947; AVX2-FAST-PERLANE-NEXT: vbroadcastf128 {{.*#+}} ymm2 = [4,5,2,0,4,5,2,0]948; AVX2-FAST-PERLANE-NEXT: # ymm2 = mem[0,1,0,1]949; AVX2-FAST-PERLANE-NEXT: vpermps %ymm1, %ymm2, %ymm1950; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3,2,0,4,7,6,4]951; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,1]952; AVX2-FAST-PERLANE-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6],ymm0[7]953; AVX2-FAST-PERLANE-NEXT: retq954;955; AVX512VL-LABEL: shuffle_v8f32_c348cda0:956; AVX512VL: # %bb.0:957; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [4,11,12,0,4,5,2,8]958; AVX512VL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm2959; AVX512VL-NEXT: vmovaps %ymm2, %ymm0960; AVX512VL-NEXT: retq961 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 12, i32 3, i32 4, i32 8, i32 12, i32 13, i32 10, i32 0>962 ret <8 x float> %shuffle963}964 965define <8 x float> @shuffle_v8f32_f511235a(<8 x float> %a, <8 x float> %b) {966; AVX1-LABEL: shuffle_v8f32_f511235a:967; AVX1: # %bb.0:968; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1]969; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,1,1,1,5,5,5,5]970; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm2[0],ymm0[1],ymm2[3],ymm0[3]971; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[2,3,0,1]972; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[3,1,2,2,7,5,6,6]973; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]974; AVX1-NEXT: retq975;976; AVX2-SLOW-LABEL: shuffle_v8f32_f511235a:977; AVX2-SLOW: # %bb.0:978; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm1 = ymm1[3,2,2,3,7,6,6,7]979; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[2,1,2,0]980; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,1,2,3,5,5,6,7]981; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,0,1,2]982; AVX2-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]983; AVX2-SLOW-NEXT: retq984;985; AVX2-FAST-ALL-LABEL: shuffle_v8f32_f511235a:986; AVX2-FAST-ALL: # %bb.0:987; AVX2-FAST-ALL-NEXT: vbroadcastsd {{.*#+}} ymm2 = [7,2,7,2,7,2,7,2]988; AVX2-FAST-ALL-NEXT: vpermps %ymm1, %ymm2, %ymm1989; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [u,5,1,1,2,3,5,u]990; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm2, %ymm0991; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]992; AVX2-FAST-ALL-NEXT: retq993;994; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_f511235a:995; AVX2-FAST-PERLANE: # %bb.0:996; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm1 = ymm1[3,2,2,3,7,6,6,7]997; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[2,1,2,0]998; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,1,2,3,5,5,6,7]999; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,0,1,2]1000; AVX2-FAST-PERLANE-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6],ymm1[7]1001; AVX2-FAST-PERLANE-NEXT: retq1002;1003; AVX512VL-LABEL: shuffle_v8f32_f511235a:1004; AVX512VL: # %bb.0:1005; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [15,5,1,1,2,3,5,10]1006; AVX512VL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm01007; AVX512VL-NEXT: retq1008 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 15, i32 5, i32 1, i32 1, i32 2, i32 3, i32 5, i32 10>1009 ret <8 x float> %shuffle1010}1011 1012define <8 x float> @shuffle_v8f32_32103210(<8 x float> %a, <8 x float> %b) {1013; AVX1-LABEL: shuffle_v8f32_32103210:1014; AVX1: # %bb.0:1015; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]1016; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01017; AVX1-NEXT: retq1018;1019; AVX2-SLOW-LABEL: shuffle_v8f32_32103210:1020; AVX2-SLOW: # %bb.0:1021; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]1022; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]1023; AVX2-SLOW-NEXT: retq1024;1025; AVX2-FAST-ALL-LABEL: shuffle_v8f32_32103210:1026; AVX2-FAST-ALL: # %bb.0:1027; AVX2-FAST-ALL-NEXT: vbroadcastf128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]1028; AVX2-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]1029; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01030; AVX2-FAST-ALL-NEXT: retq1031;1032; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_32103210:1033; AVX2-FAST-PERLANE: # %bb.0:1034; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]1035; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]1036; AVX2-FAST-PERLANE-NEXT: retq1037;1038; AVX512VL-SLOW-LABEL: shuffle_v8f32_32103210:1039; AVX512VL-SLOW: # %bb.0:1040; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]1041; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]1042; AVX512VL-SLOW-NEXT: retq1043;1044; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_32103210:1045; AVX512VL-FAST-ALL: # %bb.0:1046; AVX512VL-FAST-ALL-NEXT: vbroadcasti128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]1047; AVX512VL-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]1048; AVX512VL-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm01049; AVX512VL-FAST-ALL-NEXT: retq1050;1051; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_32103210:1052; AVX512VL-FAST-PERLANE: # %bb.0:1053; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]1054; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]1055; AVX512VL-FAST-PERLANE-NEXT: retq1056 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 3, i32 2, i32 1, i32 0>1057 ret <8 x float> %shuffle1058}1059 1060define <8 x float> @shuffle_v8f32_76547654(<8 x float> %a, <8 x float> %b) {1061; AVX1-LABEL: shuffle_v8f32_76547654:1062; AVX1: # %bb.0:1063; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]1064; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1065; AVX1-NEXT: retq1066;1067; AVX2-SLOW-LABEL: shuffle_v8f32_76547654:1068; AVX2-SLOW: # %bb.0:1069; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1070; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]1071; AVX2-SLOW-NEXT: retq1072;1073; AVX2-FAST-ALL-LABEL: shuffle_v8f32_76547654:1074; AVX2-FAST-ALL: # %bb.0:1075; AVX2-FAST-ALL-NEXT: vbroadcastf128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]1076; AVX2-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]1077; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01078; AVX2-FAST-ALL-NEXT: retq1079;1080; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_76547654:1081; AVX2-FAST-PERLANE: # %bb.0:1082; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1083; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]1084; AVX2-FAST-PERLANE-NEXT: retq1085;1086; AVX512VL-SLOW-LABEL: shuffle_v8f32_76547654:1087; AVX512VL-SLOW: # %bb.0:1088; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1089; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]1090; AVX512VL-SLOW-NEXT: retq1091;1092; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_76547654:1093; AVX512VL-FAST-ALL: # %bb.0:1094; AVX512VL-FAST-ALL-NEXT: vbroadcasti128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]1095; AVX512VL-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]1096; AVX512VL-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm01097; AVX512VL-FAST-ALL-NEXT: retq1098;1099; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_76547654:1100; AVX512VL-FAST-PERLANE: # %bb.0:1101; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1102; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]1103; AVX512VL-FAST-PERLANE-NEXT: retq1104 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 7, i32 6, i32 5, i32 4>1105 ret <8 x float> %shuffle1106}1107 1108define <8 x float> @shuffle_v8f32_76543210(<8 x float> %a, <8 x float> %b) {1109; AVX1-LABEL: shuffle_v8f32_76543210:1110; AVX1: # %bb.0:1111; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]1112; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1113; AVX1-NEXT: retq1114;1115; AVX2-SLOW-LABEL: shuffle_v8f32_76543210:1116; AVX2-SLOW: # %bb.0:1117; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1118; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1119; AVX2-SLOW-NEXT: retq1120;1121; AVX2-FAST-ALL-LABEL: shuffle_v8f32_76543210:1122; AVX2-FAST-ALL: # %bb.0:1123; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]1124; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01125; AVX2-FAST-ALL-NEXT: retq1126;1127; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_76543210:1128; AVX2-FAST-PERLANE: # %bb.0:1129; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1130; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1131; AVX2-FAST-PERLANE-NEXT: retq1132;1133; AVX512VL-SLOW-LABEL: shuffle_v8f32_76543210:1134; AVX512VL-SLOW: # %bb.0:1135; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1136; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1137; AVX512VL-SLOW-NEXT: retq1138;1139; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_76543210:1140; AVX512VL-FAST-ALL: # %bb.0:1141; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]1142; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01143; AVX512VL-FAST-ALL-NEXT: retq1144;1145; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_76543210:1146; AVX512VL-FAST-PERLANE: # %bb.0:1147; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1148; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]1149; AVX512VL-FAST-PERLANE-NEXT: retq1150 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>1151 ret <8 x float> %shuffle1152}1153 1154define <8 x float> @shuffle_v8f32_3210ba98(<8 x float> %a, <8 x float> %b) {1155; AVX1OR2-LABEL: shuffle_v8f32_3210ba98:1156; AVX1OR2: # %bb.0:1157; AVX1OR2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01158; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1159; AVX1OR2-NEXT: retq1160;1161; AVX512VL-SLOW-LABEL: shuffle_v8f32_3210ba98:1162; AVX512VL-SLOW: # %bb.0:1163; AVX512VL-SLOW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01164; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1165; AVX512VL-SLOW-NEXT: retq1166;1167; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_3210ba98:1168; AVX512VL-FAST-ALL: # %bb.0:1169; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,11,10,9,8]1170; AVX512VL-FAST-ALL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm01171; AVX512VL-FAST-ALL-NEXT: retq1172;1173; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_3210ba98:1174; AVX512VL-FAST-PERLANE: # %bb.0:1175; AVX512VL-FAST-PERLANE-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01176; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1177; AVX512VL-FAST-PERLANE-NEXT: retq1178 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 11, i32 10, i32 9, i32 8>1179 ret <8 x float> %shuffle1180}1181 1182define <8 x float> @shuffle_v8f32_3210fedc(<8 x float> %a, <8 x float> %b) {1183; AVX1OR2-LABEL: shuffle_v8f32_3210fedc:1184; AVX1OR2: # %bb.0:1185; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1186; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1187; AVX1OR2-NEXT: retq1188;1189; AVX512VL-SLOW-LABEL: shuffle_v8f32_3210fedc:1190; AVX512VL-SLOW: # %bb.0:1191; AVX512VL-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1192; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1193; AVX512VL-SLOW-NEXT: retq1194;1195; AVX512VL-FAST-LABEL: shuffle_v8f32_3210fedc:1196; AVX512VL-FAST: # %bb.0:1197; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]1198; AVX512VL-FAST-NEXT: vpermt2ps %ymm1, %ymm2, %ymm01199; AVX512VL-FAST-NEXT: retq1200 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12>1201 ret <8 x float> %shuffle1202}1203 1204define <8 x float> @shuffle_v8f32_7654fedc(<8 x float> %a, <8 x float> %b) {1205; AVX1OR2-LABEL: shuffle_v8f32_7654fedc:1206; AVX1OR2: # %bb.0:1207; AVX1OR2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1208; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1209; AVX1OR2-NEXT: retq1210;1211; AVX512VL-SLOW-LABEL: shuffle_v8f32_7654fedc:1212; AVX512VL-SLOW: # %bb.0:1213; AVX512VL-SLOW-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1214; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1215; AVX512VL-SLOW-NEXT: retq1216;1217; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_7654fedc:1218; AVX512VL-FAST-ALL: # %bb.0:1219; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]1220; AVX512VL-FAST-ALL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm01221; AVX512VL-FAST-ALL-NEXT: retq1222;1223; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_7654fedc:1224; AVX512VL-FAST-PERLANE: # %bb.0:1225; AVX512VL-FAST-PERLANE-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1226; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1227; AVX512VL-FAST-PERLANE-NEXT: retq1228 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 15, i32 14, i32 13, i32 12>1229 ret <8 x float> %shuffle1230}1231 1232define <8 x float> @shuffle_v8f32_fedc7654(<8 x float> %a, <8 x float> %b) {1233; AVX1OR2-LABEL: shuffle_v8f32_fedc7654:1234; AVX1OR2: # %bb.0:1235; AVX1OR2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]1236; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1237; AVX1OR2-NEXT: retq1238;1239; AVX512VL-SLOW-LABEL: shuffle_v8f32_fedc7654:1240; AVX512VL-SLOW: # %bb.0:1241; AVX512VL-SLOW-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]1242; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1243; AVX512VL-SLOW-NEXT: retq1244;1245; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_fedc7654:1246; AVX512VL-FAST-ALL: # %bb.0:1247; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]1248; AVX512VL-FAST-ALL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm21249; AVX512VL-FAST-ALL-NEXT: vmovaps %ymm2, %ymm01250; AVX512VL-FAST-ALL-NEXT: retq1251;1252; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_fedc7654:1253; AVX512VL-FAST-PERLANE: # %bb.0:1254; AVX512VL-FAST-PERLANE-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]1255; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1256; AVX512VL-FAST-PERLANE-NEXT: retq1257 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 15, i32 14, i32 13, i32 12, i32 7, i32 6, i32 5, i32 4>1258 ret <8 x float> %shuffle1259}1260 1261define <8 x float> @PR21138(<8 x float> %truc, <8 x float> %tchose) {1262; AVX1-LABEL: PR21138:1263; AVX1: # %bb.0:1264; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]1265; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01266; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm2[1,3],ymm0[5,7],ymm2[5,7]1267; AVX1-NEXT: retq1268;1269; AVX2-LABEL: PR21138:1270; AVX2: # %bb.0:1271; AVX2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]1272; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1273; AVX2-NEXT: retq1274;1275; AVX512VL-SLOW-LABEL: PR21138:1276; AVX512VL-SLOW: # %bb.0:1277; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]1278; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1279; AVX512VL-SLOW-NEXT: retq1280;1281; AVX512VL-FAST-ALL-LABEL: PR21138:1282; AVX512VL-FAST-ALL: # %bb.0:1283; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [1,3,5,7,9,11,13,15]1284; AVX512VL-FAST-ALL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm01285; AVX512VL-FAST-ALL-NEXT: retq1286;1287; AVX512VL-FAST-PERLANE-LABEL: PR21138:1288; AVX512VL-FAST-PERLANE: # %bb.0:1289; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]1290; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1291; AVX512VL-FAST-PERLANE-NEXT: retq1292 %shuffle = shufflevector <8 x float> %truc, <8 x float> %tchose, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>1293 ret <8 x float> %shuffle1294}1295 1296define <8 x float> @shuffle_v8f32_ba987654(<8 x float> %a, <8 x float> %b) {1297; AVX1OR2-LABEL: shuffle_v8f32_ba987654:1298; AVX1OR2: # %bb.0:1299; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1300; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1301; AVX1OR2-NEXT: retq1302;1303; AVX512VL-SLOW-LABEL: shuffle_v8f32_ba987654:1304; AVX512VL-SLOW: # %bb.0:1305; AVX512VL-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1306; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1307; AVX512VL-SLOW-NEXT: retq1308;1309; AVX512VL-FAST-LABEL: shuffle_v8f32_ba987654:1310; AVX512VL-FAST: # %bb.0:1311; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]1312; AVX512VL-FAST-NEXT: vpermi2ps %ymm0, %ymm1, %ymm21313; AVX512VL-FAST-NEXT: vmovaps %ymm2, %ymm01314; AVX512VL-FAST-NEXT: retq1315 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>1316 ret <8 x float> %shuffle1317}1318 1319define <8 x float> @shuffle_v8f32_ba983210(<8 x float> %a, <8 x float> %b) {1320; AVX1OR2-LABEL: shuffle_v8f32_ba983210:1321; AVX1OR2: # %bb.0:1322; AVX1OR2-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01323; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1324; AVX1OR2-NEXT: retq1325;1326; AVX512VL-SLOW-LABEL: shuffle_v8f32_ba983210:1327; AVX512VL-SLOW: # %bb.0:1328; AVX512VL-SLOW-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01329; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1330; AVX512VL-SLOW-NEXT: retq1331;1332; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_ba983210:1333; AVX512VL-FAST-ALL: # %bb.0:1334; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,11,10,9,8]1335; AVX512VL-FAST-ALL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm21336; AVX512VL-FAST-ALL-NEXT: vmovaps %ymm2, %ymm01337; AVX512VL-FAST-ALL-NEXT: retq1338;1339; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_ba983210:1340; AVX512VL-FAST-PERLANE: # %bb.0:1341; AVX512VL-FAST-PERLANE-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01342; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1343; AVX512VL-FAST-PERLANE-NEXT: retq1344 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 3, i32 2, i32 1, i32 0>1345 ret <8 x float> %shuffle1346}1347 1348define <8 x float> @shuffle_v8f32_80u1c4u5(<8 x float> %a, <8 x float> %b) {1349; ALL-LABEL: shuffle_v8f32_80u1c4u5:1350; ALL: # %bb.0:1351; ALL-NEXT: vunpcklps {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]1352; ALL-NEXT: retq1353 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 0, i32 poison, i32 1, i32 12, i32 4, i32 poison, i32 5>1354 ret <8 x float> %shuffle1355}1356 1357define <8 x float> @shuffle_v8f32_a2u3e6f7(<8 x float> %a, <8 x float> %b) {1358; ALL-LABEL: shuffle_v8f32_a2u3e6f7:1359; ALL: # %bb.0:1360; ALL-NEXT: vunpckhps {{.*#+}} ymm0 = ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[6],ymm0[6],ymm1[7],ymm0[7]1361; ALL-NEXT: retq1362 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 10, i32 2, i32 poison, i32 3, i32 14, i32 6, i32 15, i32 7>1363 ret <8 x float> %shuffle1364}1365 1366define <8 x float> @shuffle_v8f32_084c195d(<8 x float> %a, <8 x float> %b) {1367; AVX1-LABEL: shuffle_v8f32_084c195d:1368; AVX1: # %bb.0:1369; AVX1-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]1370; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm11371; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]1372; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[3],ymm0[3]1373; AVX1-NEXT: retq1374;1375; AVX2-LABEL: shuffle_v8f32_084c195d:1376; AVX2: # %bb.0:1377; AVX2-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]1378; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1379; AVX2-NEXT: retq1380;1381; AVX512VL-SLOW-LABEL: shuffle_v8f32_084c195d:1382; AVX512VL-SLOW: # %bb.0:1383; AVX512VL-SLOW-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]1384; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1385; AVX512VL-SLOW-NEXT: retq1386;1387; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_084c195d:1388; AVX512VL-FAST-ALL: # %bb.0:1389; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,8,4,12,1,9,5,13]1390; AVX512VL-FAST-ALL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm01391; AVX512VL-FAST-ALL-NEXT: retq1392;1393; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_084c195d:1394; AVX512VL-FAST-PERLANE: # %bb.0:1395; AVX512VL-FAST-PERLANE-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]1396; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1397; AVX512VL-FAST-PERLANE-NEXT: retq1398 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 4, i32 12, i32 1, i32 9, i32 5, i32 13>1399 ret <8 x float> %shuffle1400}1401 1402define <8 x float> @shuffle_v8f32_01452367(<8 x float> %a) {1403; AVX1-LABEL: shuffle_v8f32_01452367:1404; AVX1: # %bb.0:1405; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,2,3]1406; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01407; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]1408; AVX1-NEXT: retq1409;1410; AVX2OR512VL-LABEL: shuffle_v8f32_01452367:1411; AVX2OR512VL: # %bb.0:1412; AVX2OR512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1413; AVX2OR512VL-NEXT: retq1414 %shuffle = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 2, i32 3, i32 6, i32 7>1415 ret <8 x float> %shuffle1416}1417 1418; PR531241419define <8 x float> @shuffle_v8f32_089abcde(<8 x float> %a, <8 x float> %b) {1420; AVX1-LABEL: shuffle_v8f32_089abcde:1421; AVX1: # %bb.0:1422; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]1423; AVX1-NEXT: vshufps {{.*#+}} ymm2 = ymm2[3,0],ymm1[0,0],ymm2[7,4],ymm1[4,4]1424; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[0,2],ymm1[1,2],ymm2[4,6],ymm1[5,6]1425; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]1426; AVX1-NEXT: retq1427;1428; AVX2-LABEL: shuffle_v8f32_089abcde:1429; AVX2: # %bb.0:1430; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = [u,0,1,2,3,4,5,6]1431; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm11432; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]1433; AVX2-NEXT: retq1434;1435; AVX512VL-LABEL: shuffle_v8f32_089abcde:1436; AVX512VL: # %bb.0:1437; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,0,1,2,3,4,5,6]1438; AVX512VL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm21439; AVX512VL-NEXT: vmovaps %ymm2, %ymm01440; AVX512VL-NEXT: retq1441 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>1442 ret <8 x float> %shuffle1443}1444 1445define <8 x float> @shuffle_v8f32_0189abcd(<8 x float> %a, <8 x float> %b) {1446; AVX1OR2-LABEL: shuffle_v8f32_0189abcd:1447; AVX1OR2: # %bb.0:1448; AVX1OR2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01449; AVX1OR2-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]1450; AVX1OR2-NEXT: retq1451;1452; AVX512VL-SLOW-LABEL: shuffle_v8f32_0189abcd:1453; AVX512VL-SLOW: # %bb.0:1454; AVX512VL-SLOW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01455; AVX512VL-SLOW-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]1456; AVX512VL-SLOW-NEXT: retq1457;1458; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_0189abcd:1459; AVX512VL-FAST-ALL: # %bb.0:1460; AVX512VL-FAST-ALL-NEXT: vpmovsxbq {{.*#+}} ymm2 = [4,0,1,2]1461; AVX512VL-FAST-ALL-NEXT: vpermi2pd %ymm0, %ymm1, %ymm21462; AVX512VL-FAST-ALL-NEXT: vmovapd %ymm2, %ymm01463; AVX512VL-FAST-ALL-NEXT: retq1464;1465; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_0189abcd:1466; AVX512VL-FAST-PERLANE: # %bb.0:1467; AVX512VL-FAST-PERLANE-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01468; AVX512VL-FAST-PERLANE-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]1469; AVX512VL-FAST-PERLANE-NEXT: retq1470 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13>1471 ret <8 x float> %shuffle1472}1473 1474define <8 x float> @shuffle_v8f32_01289abc(<8 x float> %a, <8 x float> %b) {1475; AVX1-LABEL: shuffle_v8f32_01289abc:1476; AVX1: # %bb.0:1477; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]1478; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm2[3,0],ymm1[4,4],ymm2[7,4]1479; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[1,2],ymm1[2,0],ymm2[5,6],ymm1[6,4]1480; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]1481; AVX1-NEXT: retq1482;1483; AVX2-LABEL: shuffle_v8f32_01289abc:1484; AVX2: # %bb.0:1485; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = [u,u,u,0,1,2,3,4]1486; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm11487; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]1488; AVX2-NEXT: retq1489;1490; AVX512VL-LABEL: shuffle_v8f32_01289abc:1491; AVX512VL: # %bb.0:1492; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,9,10,0,1,2,3,4]1493; AVX512VL-NEXT: vpermi2ps %ymm0, %ymm1, %ymm21494; AVX512VL-NEXT: vmovaps %ymm2, %ymm01495; AVX512VL-NEXT: retq1496 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 8, i32 9, i32 10, i32 11, i32 12>1497 ret <8 x float> %shuffle1498}1499 1500define <8 x float> @shuffle_v8f32_uuuu1111(<8 x float> %a, <8 x float> %b) {1501; ALL-LABEL: shuffle_v8f32_uuuu1111:1502; ALL: # %bb.0:1503; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1504; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01505; ALL-NEXT: retq1506 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 1, i32 1, i32 1>1507 ret <8 x float> %shuffle1508}1509 1510define <8 x float> @shuffle_v8f32_44444444(<8 x float> %a, <8 x float> %b) {1511; AVX1-LABEL: shuffle_v8f32_44444444:1512; AVX1: # %bb.0:1513; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]1514; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]1515; AVX1-NEXT: retq1516;1517; AVX2-SLOW-LABEL: shuffle_v8f32_44444444:1518; AVX2-SLOW: # %bb.0:1519; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm01520; AVX2-SLOW-NEXT: vbroadcastss %xmm0, %ymm01521; AVX2-SLOW-NEXT: retq1522;1523; AVX2-FAST-ALL-LABEL: shuffle_v8f32_44444444:1524; AVX2-FAST-ALL: # %bb.0:1525; AVX2-FAST-ALL-NEXT: vbroadcastss {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]1526; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01527; AVX2-FAST-ALL-NEXT: retq1528;1529; AVX2-FAST-PERLANE-LABEL: shuffle_v8f32_44444444:1530; AVX2-FAST-PERLANE: # %bb.0:1531; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm01532; AVX2-FAST-PERLANE-NEXT: vbroadcastss %xmm0, %ymm01533; AVX2-FAST-PERLANE-NEXT: retq1534;1535; AVX512VL-SLOW-LABEL: shuffle_v8f32_44444444:1536; AVX512VL-SLOW: # %bb.0:1537; AVX512VL-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm01538; AVX512VL-SLOW-NEXT: vbroadcastss %xmm0, %ymm01539; AVX512VL-SLOW-NEXT: retq1540;1541; AVX512VL-FAST-ALL-LABEL: shuffle_v8f32_44444444:1542; AVX512VL-FAST-ALL: # %bb.0:1543; AVX512VL-FAST-ALL-NEXT: vbroadcastss {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]1544; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01545; AVX512VL-FAST-ALL-NEXT: retq1546;1547; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8f32_44444444:1548; AVX512VL-FAST-PERLANE: # %bb.0:1549; AVX512VL-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm01550; AVX512VL-FAST-PERLANE-NEXT: vbroadcastss %xmm0, %ymm01551; AVX512VL-FAST-PERLANE-NEXT: retq1552 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>1553 ret <8 x float> %shuffle1554}1555 1556define <8 x float> @shuffle_v8f32_1188uuuu(<8 x float> %a, <8 x float> %b) {1557; ALL-LABEL: shuffle_v8f32_1188uuuu:1558; ALL: # %bb.0:1559; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[0,0]1560; ALL-NEXT: retq1561 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 8, i32 8, i32 poison, i32 poison, i32 poison, i32 poison>1562 ret <8 x float> %shuffle1563}1564 1565define <8 x float> @shuffle_v8f32_uuuu3210(<8 x float> %a, <8 x float> %b) {1566; ALL-LABEL: shuffle_v8f32_uuuu3210:1567; ALL: # %bb.0:1568; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]1569; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01570; ALL-NEXT: retq1571 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 3, i32 2, i32 1, i32 0>1572 ret <8 x float> %shuffle1573}1574 1575define <8 x float> @shuffle_v8f32_uuuu1188(<8 x float> %a, <8 x float> %b) {1576; ALL-LABEL: shuffle_v8f32_uuuu1188:1577; ALL: # %bb.0:1578; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[0,0]1579; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01580; ALL-NEXT: retq1581 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 1, i32 8, i32 8>1582 ret <8 x float> %shuffle1583}1584 1585define <8 x float> @shuffle_v8f32_1111uuuu(<8 x float> %a, <8 x float> %b) {1586; ALL-LABEL: shuffle_v8f32_1111uuuu:1587; ALL: # %bb.0:1588; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1589; ALL-NEXT: retq1590 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 poison, i32 poison, i32 poison, i32 poison>1591 ret <8 x float> %shuffle1592}1593 1594define <8 x float> @shuffle_v8f32_5555uuuu(<8 x float> %a, <8 x float> %b) {1595; ALL-LABEL: shuffle_v8f32_5555uuuu:1596; ALL: # %bb.0:1597; ALL-NEXT: vextractf128 $1, %ymm0, %xmm01598; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1599; ALL-NEXT: retq1600 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 poison, i32 poison, i32 poison, i32 poison>1601 ret <8 x float> %shuffle1602}1603 1604define <8 x float> @shuffle_v8f32_32107654_v4f32(<4 x float> %a, <4 x float> %b) {1605; ALL-LABEL: shuffle_v8f32_32107654_v4f32:1606; ALL: # %bb.0:1607; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm01608; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01609; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]1610; ALL-NEXT: retq1611 %1 = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1612 %2 = shufflevector <4 x float> %b, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>1613 %3 = shufflevector <4 x float> %1, <4 x float> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1614 ret <8 x float> %31615}1616 1617define <8 x float> @shuffle_mem_v8f32_8BA0CFE4(<8 x float> %a0, ptr %a1) {1618; AVX1OR2-LABEL: shuffle_mem_v8f32_8BA0CFE4:1619; AVX1OR2: # %bb.0:1620; AVX1OR2-NEXT: vshufps {{.*#+}} ymm1 = ymm0[2,0],mem[0,0],ymm0[6,4],mem[4,4]1621; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[0,2],ymm0[4,7],ymm1[4,6]1622; AVX1OR2-NEXT: retq1623;1624; AVX512VL-SLOW-LABEL: shuffle_mem_v8f32_8BA0CFE4:1625; AVX512VL-SLOW: # %bb.0:1626; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm1 = ymm0[2,0],mem[0,0],ymm0[6,4],mem[4,4]1627; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[0,2],ymm0[4,7],ymm1[4,6]1628; AVX512VL-SLOW-NEXT: retq1629;1630; AVX512VL-FAST-LABEL: shuffle_mem_v8f32_8BA0CFE4:1631; AVX512VL-FAST: # %bb.0:1632; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,3,2,8,4,7,6,12]1633; AVX512VL-FAST-NEXT: vpermt2ps (%rdi), %ymm1, %ymm01634; AVX512VL-FAST-NEXT: retq1635 %1 = load <8 x float>, ptr %a11636 %2 = shufflevector <8 x float> %1, <8 x float> %a0, <8 x i32> <i32 8, i32 11, i32 10, i32 0, i32 12, i32 15, i32 14, i32 4>1637 ret <8 x float> %21638}1639 1640define <8 x i32> @shuffle_v8i32_00000000(<8 x i32> %a, <8 x i32> %b) {1641; AVX1-LABEL: shuffle_v8i32_00000000:1642; AVX1: # %bb.0:1643; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,0]1644; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01645; AVX1-NEXT: retq1646;1647; AVX2OR512VL-LABEL: shuffle_v8i32_00000000:1648; AVX2OR512VL: # %bb.0:1649; AVX2OR512VL-NEXT: vbroadcastss %xmm0, %ymm01650; AVX2OR512VL-NEXT: retq1651 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1652 ret <8 x i32> %shuffle1653}1654 1655define <8 x i32> @shuffle_v8i32_00000010(<8 x i32> %a, <8 x i32> %b) {1656; AVX1-LABEL: shuffle_v8i32_00000010:1657; AVX1: # %bb.0:1658; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]1659; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]1660; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01661; AVX1-NEXT: retq1662;1663; AVX2-SLOW-LABEL: shuffle_v8i32_00000010:1664; AVX2-SLOW: # %bb.0:1665; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]1666; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]1667; AVX2-SLOW-NEXT: retq1668;1669; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00000010:1670; AVX2-FAST-ALL: # %bb.0:1671; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0]1672; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01673; AVX2-FAST-ALL-NEXT: retq1674;1675; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00000010:1676; AVX2-FAST-PERLANE: # %bb.0:1677; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]1678; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]1679; AVX2-FAST-PERLANE-NEXT: retq1680;1681; AVX512VL-SLOW-LABEL: shuffle_v8i32_00000010:1682; AVX512VL-SLOW: # %bb.0:1683; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]1684; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]1685; AVX512VL-SLOW-NEXT: retq1686;1687; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00000010:1688; AVX512VL-FAST-ALL: # %bb.0:1689; AVX512VL-FAST-ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,0,1]1690; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01691; AVX512VL-FAST-ALL-NEXT: retq1692;1693; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00000010:1694; AVX512VL-FAST-PERLANE: # %bb.0:1695; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,0]1696; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1]1697; AVX512VL-FAST-PERLANE-NEXT: retq1698 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>1699 ret <8 x i32> %shuffle1700}1701 1702define <8 x i32> @shuffle_v8i32_00000200(<8 x i32> %a, <8 x i32> %b) {1703; AVX1-LABEL: shuffle_v8i32_00000200:1704; AVX1: # %bb.0:1705; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]1706; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,0,0]1707; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01708; AVX1-NEXT: retq1709;1710; AVX2-SLOW-LABEL: shuffle_v8i32_00000200:1711; AVX2-SLOW: # %bb.0:1712; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]1713; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1714; AVX2-SLOW-NEXT: retq1715;1716; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00000200:1717; AVX2-FAST-ALL: # %bb.0:1718; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]1719; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01720; AVX2-FAST-ALL-NEXT: retq1721;1722; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00000200:1723; AVX2-FAST-PERLANE: # %bb.0:1724; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]1725; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1726; AVX2-FAST-PERLANE-NEXT: retq1727;1728; AVX512VL-SLOW-LABEL: shuffle_v8i32_00000200:1729; AVX512VL-SLOW: # %bb.0:1730; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]1731; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1732; AVX512VL-SLOW-NEXT: retq1733;1734; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00000200:1735; AVX512VL-FAST-ALL: # %bb.0:1736; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0]1737; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01738; AVX512VL-FAST-ALL-NEXT: retq1739;1740; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00000200:1741; AVX512VL-FAST-PERLANE: # %bb.0:1742; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,2]1743; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1744; AVX512VL-FAST-PERLANE-NEXT: retq1745 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>1746 ret <8 x i32> %shuffle1747}1748 1749define <8 x i32> @shuffle_v8i32_00003000(<8 x i32> %a, <8 x i32> %b) {1750; AVX1-LABEL: shuffle_v8i32_00003000:1751; AVX1: # %bb.0:1752; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]1753; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,0,0,0]1754; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01755; AVX1-NEXT: retq1756;1757; AVX2-SLOW-LABEL: shuffle_v8i32_00003000:1758; AVX2-SLOW: # %bb.0:1759; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]1760; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1761; AVX2-SLOW-NEXT: retq1762;1763; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00003000:1764; AVX2-FAST-ALL: # %bb.0:1765; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0]1766; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01767; AVX2-FAST-ALL-NEXT: retq1768;1769; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00003000:1770; AVX2-FAST-PERLANE: # %bb.0:1771; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]1772; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1773; AVX2-FAST-PERLANE-NEXT: retq1774;1775; AVX512VL-SLOW-LABEL: shuffle_v8i32_00003000:1776; AVX512VL-SLOW: # %bb.0:1777; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]1778; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1779; AVX512VL-SLOW-NEXT: retq1780;1781; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00003000:1782; AVX512VL-FAST-ALL: # %bb.0:1783; AVX512VL-FAST-ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,3,0]1784; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01785; AVX512VL-FAST-ALL-NEXT: retq1786;1787; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00003000:1788; AVX512VL-FAST-PERLANE: # %bb.0:1789; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,3,0]1790; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,0]1791; AVX512VL-FAST-PERLANE-NEXT: retq1792 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>1793 ret <8 x i32> %shuffle1794}1795 1796define <8 x i32> @shuffle_v8i32_00040000(<8 x i32> %a, <8 x i32> %b) {1797; AVX1-LABEL: shuffle_v8i32_00040000:1798; AVX1: # %bb.0:1799; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]1800; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm01801; AVX1-NEXT: vunpcklpd {{.*#+}} ymm1 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]1802; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[2,0],ymm0[4,4],ymm1[6,4]1803; AVX1-NEXT: retq1804;1805; AVX2-LABEL: shuffle_v8i32_00040000:1806; AVX2: # %bb.0:1807; AVX2-NEXT: vmovaps {{.*#+}} xmm1 = [0,0,0,4]1808; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm01809; AVX2-NEXT: retq1810;1811; AVX512VL-LABEL: shuffle_v8i32_00040000:1812; AVX512VL: # %bb.0:1813; AVX512VL-NEXT: vpmovsxbd {{.*#+}} xmm1 = [0,0,0,4]1814; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm01815; AVX512VL-NEXT: retq1816 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>1817 ret <8 x i32> %shuffle1818}1819 1820define <8 x i32> @shuffle_v8i32_00500000(<8 x i32> %a, <8 x i32> %b) {1821; AVX1-LABEL: shuffle_v8i32_00500000:1822; AVX1: # %bb.0:1823; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]1824; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]1825; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,4,4]1826; AVX1-NEXT: retq1827;1828; AVX2-LABEL: shuffle_v8i32_00500000:1829; AVX2: # %bb.0:1830; AVX2-NEXT: vmovaps {{.*#+}} xmm1 = [0,0,5,0]1831; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm01832; AVX2-NEXT: retq1833;1834; AVX512VL-LABEL: shuffle_v8i32_00500000:1835; AVX512VL: # %bb.0:1836; AVX512VL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [0,5]1837; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm01838; AVX512VL-NEXT: retq1839 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>1840 ret <8 x i32> %shuffle1841}1842 1843define <8 x i32> @shuffle_v8i32_06000000(<8 x i32> %a, <8 x i32> %b) {1844; AVX1-LABEL: shuffle_v8i32_06000000:1845; AVX1: # %bb.0:1846; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]1847; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]1848; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,2,0,0,4,4,4,4]1849; AVX1-NEXT: retq1850;1851; AVX2-LABEL: shuffle_v8i32_06000000:1852; AVX2: # %bb.0:1853; AVX2-NEXT: vmovsd {{.*#+}} xmm1 = [0,6,0,0]1854; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm01855; AVX2-NEXT: retq1856;1857; AVX512VL-LABEL: shuffle_v8i32_06000000:1858; AVX512VL: # %bb.0:1859; AVX512VL-NEXT: vpmovsxbd {{.*#+}} xmm1 = [0,6,0,0]1860; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm01861; AVX512VL-NEXT: retq1862 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1863 ret <8 x i32> %shuffle1864}1865 1866define <8 x i32> @shuffle_v8i32_70000000(<8 x i32> %a, <8 x i32> %b) {1867; AVX1-LABEL: shuffle_v8i32_70000000:1868; AVX1: # %bb.0:1869; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]1870; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]1871; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,0,0,0,4,4,4,4]1872; AVX1-NEXT: retq1873;1874; AVX2-LABEL: shuffle_v8i32_70000000:1875; AVX2: # %bb.0:1876; AVX2-NEXT: vmovss {{.*#+}} xmm1 = [7,0,0,0]1877; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm01878; AVX2-NEXT: retq1879;1880; AVX512VL-LABEL: shuffle_v8i32_70000000:1881; AVX512VL: # %bb.0:1882; AVX512VL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [7,0]1883; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm01884; AVX512VL-NEXT: retq1885 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1886 ret <8 x i32> %shuffle1887}1888 1889define <8 x i32> @shuffle_v8i32_01014545(<8 x i32> %a, <8 x i32> %b) {1890; AVX1-LABEL: shuffle_v8i32_01014545:1891; AVX1: # %bb.0:1892; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]1893; AVX1-NEXT: retq1894;1895; AVX2OR512VL-LABEL: shuffle_v8i32_01014545:1896; AVX2OR512VL: # %bb.0:1897; AVX2OR512VL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]1898; AVX2OR512VL-NEXT: retq1899 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>1900 ret <8 x i32> %shuffle1901}1902 1903define <8 x i32> @shuffle_v8i32_00112233(<8 x i32> %a, <8 x i32> %b) {1904; AVX1-LABEL: shuffle_v8i32_00112233:1905; AVX1: # %bb.0:1906; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,1,1]1907; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,2,3,3]1908; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01909; AVX1-NEXT: retq1910;1911; AVX2-SLOW-LABEL: shuffle_v8i32_00112233:1912; AVX2-SLOW: # %bb.0:1913; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1914; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]1915; AVX2-SLOW-NEXT: retq1916;1917; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00112233:1918; AVX2-FAST-ALL: # %bb.0:1919; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]1920; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01921; AVX2-FAST-ALL-NEXT: retq1922;1923; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00112233:1924; AVX2-FAST-PERLANE: # %bb.0:1925; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1926; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]1927; AVX2-FAST-PERLANE-NEXT: retq1928;1929; AVX512VL-SLOW-LABEL: shuffle_v8i32_00112233:1930; AVX512VL-SLOW: # %bb.0:1931; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1932; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]1933; AVX512VL-SLOW-NEXT: retq1934;1935; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00112233:1936; AVX512VL-FAST-ALL: # %bb.0:1937; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,1,1,2,2,3,3]1938; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01939; AVX512VL-FAST-ALL-NEXT: retq1940;1941; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00112233:1942; AVX512VL-FAST-PERLANE: # %bb.0:1943; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]1944; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5]1945; AVX512VL-FAST-PERLANE-NEXT: retq1946 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>1947 ret <8 x i32> %shuffle1948}1949 1950define <8 x i32> @shuffle_v8i32_00001111(<8 x i32> %a, <8 x i32> %b) {1951; AVX1-LABEL: shuffle_v8i32_00001111:1952; AVX1: # %bb.0:1953; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[0,0,0,0]1954; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]1955; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01956; AVX1-NEXT: retq1957;1958; AVX2-SLOW-LABEL: shuffle_v8i32_00001111:1959; AVX2-SLOW: # %bb.0:1960; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]1961; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]1962; AVX2-SLOW-NEXT: retq1963;1964; AVX2-FAST-ALL-LABEL: shuffle_v8i32_00001111:1965; AVX2-FAST-ALL: # %bb.0:1966; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]1967; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01968; AVX2-FAST-ALL-NEXT: retq1969;1970; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_00001111:1971; AVX2-FAST-PERLANE: # %bb.0:1972; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]1973; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]1974; AVX2-FAST-PERLANE-NEXT: retq1975;1976; AVX512VL-SLOW-LABEL: shuffle_v8i32_00001111:1977; AVX512VL-SLOW: # %bb.0:1978; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]1979; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]1980; AVX512VL-SLOW-NEXT: retq1981;1982; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_00001111:1983; AVX512VL-FAST-ALL: # %bb.0:1984; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,1,1,1,1]1985; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm01986; AVX512VL-FAST-ALL-NEXT: retq1987;1988; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_00001111:1989; AVX512VL-FAST-PERLANE: # %bb.0:1990; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,1,1]1991; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,1]1992; AVX512VL-FAST-PERLANE-NEXT: retq1993 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>1994 ret <8 x i32> %shuffle1995}1996 1997define <8 x i32> @shuffle_v8i32_81a3c5e7(<8 x i32> %a, <8 x i32> %b) {1998; ALL-LABEL: shuffle_v8i32_81a3c5e7:1999; ALL: # %bb.0:2000; ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]2001; ALL-NEXT: retq2002 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>2003 ret <8 x i32> %shuffle2004}2005 2006define <8 x i32> @shuffle_v8i32_08080808(<8 x i32> %a, <8 x i32> %b) {2007; AVX1-LABEL: shuffle_v8i32_08080808:2008; AVX1: # %bb.0:2009; AVX1-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2010; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,1,0,1]2011; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm02012; AVX1-NEXT: retq2013;2014; AVX2-LABEL: shuffle_v8i32_08080808:2015; AVX2: # %bb.0:2016; AVX2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2017; AVX2-NEXT: vbroadcastsd %xmm0, %ymm02018; AVX2-NEXT: retq2019;2020; AVX512VL-SLOW-LABEL: shuffle_v8i32_08080808:2021; AVX512VL-SLOW: # %bb.0:2022; AVX512VL-SLOW-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2023; AVX512VL-SLOW-NEXT: vbroadcastsd %xmm0, %ymm02024; AVX512VL-SLOW-NEXT: retq2025;2026; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_08080808:2027; AVX512VL-FAST-ALL: # %bb.0:2028; AVX512VL-FAST-ALL-NEXT: vpbroadcastq {{.*#+}} ymm2 = [0,8,0,8,0,8,0,8]2029; AVX512VL-FAST-ALL-NEXT: vpermt2d %ymm1, %ymm2, %ymm02030; AVX512VL-FAST-ALL-NEXT: retq2031;2032; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_08080808:2033; AVX512VL-FAST-PERLANE: # %bb.0:2034; AVX512VL-FAST-PERLANE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2035; AVX512VL-FAST-PERLANE-NEXT: vbroadcastsd %xmm0, %ymm02036; AVX512VL-FAST-PERLANE-NEXT: retq2037 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>2038 ret <8 x i32> %shuffle2039}2040 2041define <8 x i32> @shuffle_v8i32_08084c4c(<8 x i32> %a, <8 x i32> %b) {2042; AVX1-LABEL: shuffle_v8i32_08084c4c:2043; AVX1: # %bb.0:2044; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[0,0],ymm0[4,4],ymm1[4,4]2045; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]2046; AVX1-NEXT: retq2047;2048; AVX2-LABEL: shuffle_v8i32_08084c4c:2049; AVX2: # %bb.0:2050; AVX2-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]2051; AVX2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]2052; AVX2-NEXT: retq2053;2054; AVX512VL-SLOW-LABEL: shuffle_v8i32_08084c4c:2055; AVX512VL-SLOW: # %bb.0:2056; AVX512VL-SLOW-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]2057; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]2058; AVX512VL-SLOW-NEXT: retq2059;2060; AVX512VL-FAST-LABEL: shuffle_v8i32_08084c4c:2061; AVX512VL-FAST: # %bb.0:2062; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,8,0,8,4,12,4,12]2063; AVX512VL-FAST-NEXT: vpermt2d %ymm1, %ymm2, %ymm02064; AVX512VL-FAST-NEXT: retq2065 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>2066 ret <8 x i32> %shuffle2067}2068 2069define <8 x i32> @shuffle_v8i32_8823cc67(<8 x i32> %a, <8 x i32> %b) {2070; ALL-LABEL: shuffle_v8i32_8823cc67:2071; ALL: # %bb.0:2072; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[2,3],ymm1[4,4],ymm0[6,7]2073; ALL-NEXT: retq2074 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>2075 ret <8 x i32> %shuffle2076}2077 2078define <8 x i32> @shuffle_v8i32_9832dc76(<8 x i32> %a, <8 x i32> %b) {2079; ALL-LABEL: shuffle_v8i32_9832dc76:2080; ALL: # %bb.0:2081; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[3,2],ymm1[5,4],ymm0[7,6]2082; ALL-NEXT: retq2083 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>2084 ret <8 x i32> %shuffle2085}2086 2087define <8 x i32> @shuffle_v8i32_9810dc54(<8 x i32> %a, <8 x i32> %b) {2088; ALL-LABEL: shuffle_v8i32_9810dc54:2089; ALL: # %bb.0:2090; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,0],ymm0[1,0],ymm1[5,4],ymm0[5,4]2091; ALL-NEXT: retq2092 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>2093 ret <8 x i32> %shuffle2094}2095 2096define <8 x i32> @shuffle_v8i32_08194c5d(<8 x i32> %a, <8 x i32> %b) {2097; ALL-LABEL: shuffle_v8i32_08194c5d:2098; ALL: # %bb.0:2099; ALL-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]2100; ALL-NEXT: retq2101 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>2102 ret <8 x i32> %shuffle2103}2104 2105define <8 x i32> @shuffle_v8i32_2a3b6e7f(<8 x i32> %a, <8 x i32> %b) {2106; ALL-LABEL: shuffle_v8i32_2a3b6e7f:2107; ALL: # %bb.0:2108; ALL-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]2109; ALL-NEXT: retq2110 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>2111 ret <8 x i32> %shuffle2112}2113 2114define <8 x i32> @shuffle_v8i32_08192a3b(<8 x i32> %a, <8 x i32> %b) {2115; AVX1OR2-LABEL: shuffle_v8i32_08192a3b:2116; AVX1OR2: # %bb.0:2117; AVX1OR2-NEXT: vunpckhps {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]2118; AVX1OR2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]2119; AVX1OR2-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm02120; AVX1OR2-NEXT: retq2121;2122; AVX512VL-LABEL: shuffle_v8i32_08192a3b:2123; AVX512VL: # %bb.0:2124; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,8,1,9,2,10,3,11]2125; AVX512VL-NEXT: vpermt2d %ymm1, %ymm2, %ymm02126; AVX512VL-NEXT: retq2127 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>2128 ret <8 x i32> %shuffle2129}2130 2131define <8 x i32> @shuffle_v8i32_08991abb(<8 x i32> %a, <8 x i32> %b) {2132; AVX1-LABEL: shuffle_v8i32_08991abb:2133; AVX1: # %bb.0:2134; AVX1-NEXT: vshufps {{.*#+}} xmm2 = xmm1[0,0,1,1]2135; AVX1-NEXT: vmovss {{.*#+}} xmm2 = xmm0[0],xmm2[1,2,3]2136; AVX1-NEXT: vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]2137; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,2,3,3]2138; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm02139; AVX1-NEXT: retq2140;2141; AVX2-SLOW-LABEL: shuffle_v8i32_08991abb:2142; AVX2-SLOW: # %bb.0:2143; AVX2-SLOW-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero2144; AVX2-SLOW-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]2145; AVX2-SLOW-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]2146; AVX2-SLOW-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,0,1,1,4,4,5,5]2147; AVX2-SLOW-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2148; AVX2-SLOW-NEXT: retq2149;2150; AVX2-FAST-ALL-LABEL: shuffle_v8i32_08991abb:2151; AVX2-FAST-ALL: # %bb.0:2152; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [0,u,u,u,1,u,u,u]2153; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm2, %ymm02154; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [u,0,1,1,u,2,3,3]2155; AVX2-FAST-ALL-NEXT: vpermps %ymm1, %ymm2, %ymm12156; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2157; AVX2-FAST-ALL-NEXT: retq2158;2159; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_08991abb:2160; AVX2-FAST-PERLANE: # %bb.0:2161; AVX2-FAST-PERLANE-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero2162; AVX2-FAST-PERLANE-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]2163; AVX2-FAST-PERLANE-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]2164; AVX2-FAST-PERLANE-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,0,1,1,4,4,5,5]2165; AVX2-FAST-PERLANE-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2166; AVX2-FAST-PERLANE-NEXT: retq2167;2168; AVX512VL-LABEL: shuffle_v8i32_08991abb:2169; AVX512VL: # %bb.0:2170; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,0,1,1,9,2,3,3]2171; AVX512VL-NEXT: vpermi2d %ymm0, %ymm1, %ymm22172; AVX512VL-NEXT: vmovdqa %ymm2, %ymm02173; AVX512VL-NEXT: retq2174 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>2175 ret <8 x i32> %shuffle2176}2177 2178define <8 x i32> @shuffle_v8i32_091b2d3f(<8 x i32> %a, <8 x i32> %b) {2179; AVX1-LABEL: shuffle_v8i32_091b2d3f:2180; AVX1: # %bb.0:2181; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero2182; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,1,3,3]2183; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm02184; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]2185; AVX1-NEXT: retq2186;2187; AVX2-LABEL: shuffle_v8i32_091b2d3f:2188; AVX2: # %bb.0:2189; AVX2-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2190; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]2191; AVX2-NEXT: retq2192;2193; AVX512VL-SLOW-LABEL: shuffle_v8i32_091b2d3f:2194; AVX512VL-SLOW: # %bb.0:2195; AVX512VL-SLOW-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2196; AVX512VL-SLOW-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]2197; AVX512VL-SLOW-NEXT: retq2198;2199; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_091b2d3f:2200; AVX512VL-FAST-ALL: # %bb.0:2201; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [0,9,1,11,2,13,3,15]2202; AVX512VL-FAST-ALL-NEXT: vpermt2d %ymm1, %ymm2, %ymm02203; AVX512VL-FAST-ALL-NEXT: retq2204;2205; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_091b2d3f:2206; AVX512VL-FAST-PERLANE: # %bb.0:2207; AVX512VL-FAST-PERLANE-NEXT: vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2208; AVX512VL-FAST-PERLANE-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]2209; AVX512VL-FAST-PERLANE-NEXT: retq2210 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>2211 ret <8 x i32> %shuffle2212}2213 2214define <8 x i32> @shuffle_v8i32_09ab1def(<8 x i32> %a, <8 x i32> %b) {2215; AVX1-LABEL: shuffle_v8i32_09ab1def:2216; AVX1: # %bb.0:2217; AVX1-NEXT: vshufps {{.*#+}} xmm2 = xmm0[1,1,3,3]2218; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm02219; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2220; AVX1-NEXT: retq2221;2222; AVX2-SLOW-LABEL: shuffle_v8i32_09ab1def:2223; AVX2-SLOW: # %bb.0:2224; AVX2-SLOW-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero2225; AVX2-SLOW-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]2226; AVX2-SLOW-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2227; AVX2-SLOW-NEXT: retq2228;2229; AVX2-FAST-ALL-LABEL: shuffle_v8i32_09ab1def:2230; AVX2-FAST-ALL: # %bb.0:2231; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [0,u,u,u,1,u,u,u]2232; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm2, %ymm02233; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2234; AVX2-FAST-ALL-NEXT: retq2235;2236; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_09ab1def:2237; AVX2-FAST-PERLANE: # %bb.0:2238; AVX2-FAST-PERLANE-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero2239; AVX2-FAST-PERLANE-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3]2240; AVX2-FAST-PERLANE-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7]2241; AVX2-FAST-PERLANE-NEXT: retq2242;2243; AVX512VL-LABEL: shuffle_v8i32_09ab1def:2244; AVX512VL: # %bb.0:2245; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,1,2,3,9,5,6,7]2246; AVX512VL-NEXT: vpermi2d %ymm0, %ymm1, %ymm22247; AVX512VL-NEXT: vmovdqa %ymm2, %ymm02248; AVX512VL-NEXT: retq2249 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>2250 ret <8 x i32> %shuffle2251}2252 2253define <8 x i32> @shuffle_v8i32_00014445(<8 x i32> %a, <8 x i32> %b) {2254; ALL-LABEL: shuffle_v8i32_00014445:2255; ALL: # %bb.0:2256; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]2257; ALL-NEXT: retq2258 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>2259 ret <8 x i32> %shuffle2260}2261 2262define <8 x i32> @shuffle_v8i32_00204464(<8 x i32> %a, <8 x i32> %b) {2263; ALL-LABEL: shuffle_v8i32_00204464:2264; ALL: # %bb.0:2265; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,4,6,4]2266; ALL-NEXT: retq2267 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>2268 ret <8 x i32> %shuffle2269}2270 2271define <8 x i32> @shuffle_v8i32_03004744(<8 x i32> %a, <8 x i32> %b) {2272; ALL-LABEL: shuffle_v8i32_03004744:2273; ALL: # %bb.0:2274; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,7,4,4]2275; ALL-NEXT: retq2276 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>2277 ret <8 x i32> %shuffle2278}2279 2280define <8 x i32> @shuffle_v8i32_10005444(<8 x i32> %a, <8 x i32> %b) {2281; ALL-LABEL: shuffle_v8i32_10005444:2282; ALL: # %bb.0:2283; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,0,0,5,4,4,4]2284; ALL-NEXT: retq2285 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>2286 ret <8 x i32> %shuffle2287}2288 2289define <8 x i32> @shuffle_v8i32_22006644(<8 x i32> %a, <8 x i32> %b) {2290; ALL-LABEL: shuffle_v8i32_22006644:2291; ALL: # %bb.0:2292; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,6,4,4]2293; ALL-NEXT: retq2294 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>2295 ret <8 x i32> %shuffle2296}2297 2298define <8 x i32> @shuffle_v8i32_33307774(<8 x i32> %a, <8 x i32> %b) {2299; ALL-LABEL: shuffle_v8i32_33307774:2300; ALL: # %bb.0:2301; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,7,7,4]2302; ALL-NEXT: retq2303 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>2304 ret <8 x i32> %shuffle2305}2306 2307define <8 x i32> @shuffle_v8i32_32107654(<8 x i32> %a, <8 x i32> %b) {2308; ALL-LABEL: shuffle_v8i32_32107654:2309; ALL: # %bb.0:2310; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2311; ALL-NEXT: retq2312 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>2313 ret <8 x i32> %shuffle2314}2315 2316define <8 x i32> @shuffle_v8i32_00234467(<8 x i32> %a, <8 x i32> %b) {2317; ALL-LABEL: shuffle_v8i32_00234467:2318; ALL: # %bb.0:2319; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,2,3,4,4,6,7]2320; ALL-NEXT: retq2321 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>2322 ret <8 x i32> %shuffle2323}2324 2325define <8 x i32> @shuffle_v8i32_00224466(<8 x i32> %a, <8 x i32> %b) {2326; AVX1-LABEL: shuffle_v8i32_00224466:2327; AVX1: # %bb.0:2328; AVX1-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]2329; AVX1-NEXT: retq2330;2331; AVX2OR512VL-LABEL: shuffle_v8i32_00224466:2332; AVX2OR512VL: # %bb.0:2333; AVX2OR512VL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]2334; AVX2OR512VL-NEXT: retq2335 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>2336 ret <8 x i32> %shuffle2337}2338 2339define <8 x i32> @shuffle_v8i32_10325476(<8 x i32> %a, <8 x i32> %b) {2340; ALL-LABEL: shuffle_v8i32_10325476:2341; ALL: # %bb.0:2342; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]2343; ALL-NEXT: retq2344 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>2345 ret <8 x i32> %shuffle2346}2347 2348define <8 x i32> @shuffle_v8i32_11335577(<8 x i32> %a, <8 x i32> %b) {2349; AVX1-LABEL: shuffle_v8i32_11335577:2350; AVX1: # %bb.0:2351; AVX1-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]2352; AVX1-NEXT: retq2353;2354; AVX2OR512VL-LABEL: shuffle_v8i32_11335577:2355; AVX2OR512VL: # %bb.0:2356; AVX2OR512VL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]2357; AVX2OR512VL-NEXT: retq2358 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>2359 ret <8 x i32> %shuffle2360}2361 2362define <8 x i32> @shuffle_v8i32_10235467(<8 x i32> %a, <8 x i32> %b) {2363; ALL-LABEL: shuffle_v8i32_10235467:2364; ALL: # %bb.0:2365; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,2,3,5,4,6,7]2366; ALL-NEXT: retq2367 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>2368 ret <8 x i32> %shuffle2369}2370 2371define <8 x i32> @shuffle_v8i32_10225466(<8 x i32> %a, <8 x i32> %b) {2372; ALL-LABEL: shuffle_v8i32_10225466:2373; ALL: # %bb.0:2374; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,0,2,2,5,4,6,6]2375; ALL-NEXT: retq2376 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>2377 ret <8 x i32> %shuffle2378}2379 2380define <8 x i32> @shuffle_v8i32_00015444(<8 x i32> %a, <8 x i32> %b) {2381; AVX1-LABEL: shuffle_v8i32_00015444:2382; AVX1: # %bb.0:2383; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,0,1,5,4,4,4]2384; AVX1-NEXT: retq2385;2386; AVX2-LABEL: shuffle_v8i32_00015444:2387; AVX2: # %bb.0:2388; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,1,5,4,4,4]2389; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02390; AVX2-NEXT: retq2391;2392; AVX512VL-LABEL: shuffle_v8i32_00015444:2393; AVX512VL: # %bb.0:2394; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,1,5,4,4,4]2395; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02396; AVX512VL-NEXT: retq2397 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>2398 ret <8 x i32> %shuffle2399}2400 2401define <8 x i32> @shuffle_v8i32_00204644(<8 x i32> %a, <8 x i32> %b) {2402; AVX1-LABEL: shuffle_v8i32_00204644:2403; AVX1: # %bb.0:2404; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,0,4,6,4,4]2405; AVX1-NEXT: retq2406;2407; AVX2-LABEL: shuffle_v8i32_00204644:2408; AVX2: # %bb.0:2409; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,2,0,4,6,4,4]2410; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02411; AVX2-NEXT: retq2412;2413; AVX512VL-LABEL: shuffle_v8i32_00204644:2414; AVX512VL: # %bb.0:2415; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,2,0,4,6,4,4]2416; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02417; AVX512VL-NEXT: retq2418 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>2419 ret <8 x i32> %shuffle2420}2421 2422define <8 x i32> @shuffle_v8i32_03004474(<8 x i32> %a, <8 x i32> %b) {2423; AVX1-LABEL: shuffle_v8i32_03004474:2424; AVX1: # %bb.0:2425; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,3,0,0,4,4,7,4]2426; AVX1-NEXT: retq2427;2428; AVX2-LABEL: shuffle_v8i32_03004474:2429; AVX2: # %bb.0:2430; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,3,0,0,4,4,7,4]2431; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02432; AVX2-NEXT: retq2433;2434; AVX512VL-LABEL: shuffle_v8i32_03004474:2435; AVX512VL: # %bb.0:2436; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,3,0,0,4,4,7,4]2437; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02438; AVX512VL-NEXT: retq2439 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>2440 ret <8 x i32> %shuffle2441}2442 2443define <8 x i32> @shuffle_v8i32_10004444(<8 x i32> %a, <8 x i32> %b) {2444; AVX1-LABEL: shuffle_v8i32_10004444:2445; AVX1: # %bb.0:2446; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,0,0,4,4,4,4]2447; AVX1-NEXT: retq2448;2449; AVX2-LABEL: shuffle_v8i32_10004444:2450; AVX2: # %bb.0:2451; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [1,0,0,0,4,4,4,4]2452; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02453; AVX2-NEXT: retq2454;2455; AVX512VL-LABEL: shuffle_v8i32_10004444:2456; AVX512VL: # %bb.0:2457; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [1,0,0,0,4,4,4,4]2458; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02459; AVX512VL-NEXT: retq2460 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>2461 ret <8 x i32> %shuffle2462}2463 2464define <8 x i32> @shuffle_v8i32_22006446(<8 x i32> %a, <8 x i32> %b) {2465; AVX1-LABEL: shuffle_v8i32_22006446:2466; AVX1: # %bb.0:2467; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,2,0,0,6,4,4,6]2468; AVX1-NEXT: retq2469;2470; AVX2-LABEL: shuffle_v8i32_22006446:2471; AVX2: # %bb.0:2472; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [2,2,0,0,6,4,4,6]2473; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02474; AVX2-NEXT: retq2475;2476; AVX512VL-LABEL: shuffle_v8i32_22006446:2477; AVX512VL: # %bb.0:2478; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [2,2,0,0,6,4,4,6]2479; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02480; AVX512VL-NEXT: retq2481 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>2482 ret <8 x i32> %shuffle2483}2484 2485define <8 x i32> @shuffle_v8i32_33307474(<8 x i32> %a, <8 x i32> %b) {2486; AVX1-LABEL: shuffle_v8i32_33307474:2487; AVX1: # %bb.0:2488; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,3,3,0,7,4,7,4]2489; AVX1-NEXT: retq2490;2491; AVX2-LABEL: shuffle_v8i32_33307474:2492; AVX2: # %bb.0:2493; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [3,3,3,0,7,4,7,4]2494; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02495; AVX2-NEXT: retq2496;2497; AVX512VL-LABEL: shuffle_v8i32_33307474:2498; AVX512VL: # %bb.0:2499; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [3,3,3,0,7,4,7,4]2500; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02501; AVX512VL-NEXT: retq2502 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>2503 ret <8 x i32> %shuffle2504}2505 2506define <8 x i32> @shuffle_v8i32_32104567(<8 x i32> %a, <8 x i32> %b) {2507; AVX1-LABEL: shuffle_v8i32_32104567:2508; AVX1: # %bb.0:2509; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7]2510; AVX1-NEXT: retq2511;2512; AVX2-LABEL: shuffle_v8i32_32104567:2513; AVX2: # %bb.0:2514; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [3,2,1,0,4,5,6,7]2515; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02516; AVX2-NEXT: retq2517;2518; AVX512VL-LABEL: shuffle_v8i32_32104567:2519; AVX512VL: # %bb.0:2520; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [3,2,1,0,4,5,6,7]2521; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02522; AVX512VL-NEXT: retq2523 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>2524 ret <8 x i32> %shuffle2525}2526 2527define <8 x i32> @shuffle_v8i32_00236744(<8 x i32> %a, <8 x i32> %b) {2528; AVX1-LABEL: shuffle_v8i32_00236744:2529; AVX1: # %bb.0:2530; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,3,6,7,4,4]2531; AVX1-NEXT: retq2532;2533; AVX2-LABEL: shuffle_v8i32_00236744:2534; AVX2: # %bb.0:2535; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,2,3,6,7,4,4]2536; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02537; AVX2-NEXT: retq2538;2539; AVX512VL-LABEL: shuffle_v8i32_00236744:2540; AVX512VL: # %bb.0:2541; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,2,3,6,7,4,4]2542; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02543; AVX512VL-NEXT: retq2544 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>2545 ret <8 x i32> %shuffle2546}2547 2548define <8 x i32> @shuffle_v8i32_00226644(<8 x i32> %a, <8 x i32> %b) {2549; AVX1-LABEL: shuffle_v8i32_00226644:2550; AVX1: # %bb.0:2551; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,2,6,6,4,4]2552; AVX1-NEXT: retq2553;2554; AVX2-LABEL: shuffle_v8i32_00226644:2555; AVX2: # %bb.0:2556; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,2,2,6,6,4,4]2557; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02558; AVX2-NEXT: retq2559;2560; AVX512VL-LABEL: shuffle_v8i32_00226644:2561; AVX512VL: # %bb.0:2562; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,2,2,6,6,4,4]2563; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02564; AVX512VL-NEXT: retq2565 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>2566 ret <8 x i32> %shuffle2567}2568 2569define <8 x i32> @shuffle_v8i32_10324567(<8 x i32> %a, <8 x i32> %b) {2570; AVX1-LABEL: shuffle_v8i32_10324567:2571; AVX1: # %bb.0:2572; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7]2573; AVX1-NEXT: retq2574;2575; AVX2-LABEL: shuffle_v8i32_10324567:2576; AVX2: # %bb.0:2577; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [1,0,3,2,4,5,6,7]2578; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02579; AVX2-NEXT: retq2580;2581; AVX512VL-LABEL: shuffle_v8i32_10324567:2582; AVX512VL: # %bb.0:2583; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [1,0,3,2,4,5,6,7]2584; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02585; AVX512VL-NEXT: retq2586 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>2587 ret <8 x i32> %shuffle2588}2589 2590define <8 x i32> @shuffle_v8i32_11334567(<8 x i32> %a, <8 x i32> %b) {2591; AVX1-LABEL: shuffle_v8i32_11334567:2592; AVX1: # %bb.0:2593; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7]2594; AVX1-NEXT: retq2595;2596; AVX2-LABEL: shuffle_v8i32_11334567:2597; AVX2: # %bb.0:2598; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [1,1,3,3,4,5,6,7]2599; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02600; AVX2-NEXT: retq2601;2602; AVX512VL-LABEL: shuffle_v8i32_11334567:2603; AVX512VL: # %bb.0:2604; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [1,1,3,3,4,5,6,7]2605; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02606; AVX512VL-NEXT: retq2607 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>2608 ret <8 x i32> %shuffle2609}2610 2611define <8 x i32> @shuffle_v8i32_01235467(<8 x i32> %a, <8 x i32> %b) {2612; AVX1-LABEL: shuffle_v8i32_01235467:2613; AVX1: # %bb.0:2614; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,7]2615; AVX1-NEXT: retq2616;2617; AVX2-LABEL: shuffle_v8i32_01235467:2618; AVX2: # %bb.0:2619; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,1,2,3,5,4,6,7]2620; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02621; AVX2-NEXT: retq2622;2623; AVX512VL-LABEL: shuffle_v8i32_01235467:2624; AVX512VL: # %bb.0:2625; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,1,2,3,5,4,6,7]2626; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02627; AVX512VL-NEXT: retq2628 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>2629 ret <8 x i32> %shuffle2630}2631 2632define <8 x i32> @shuffle_v8i32_01235466(<8 x i32> %a, <8 x i32> %b) {2633; AVX1-LABEL: shuffle_v8i32_01235466:2634; AVX1: # %bb.0:2635; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,6,6]2636; AVX1-NEXT: retq2637;2638; AVX2-LABEL: shuffle_v8i32_01235466:2639; AVX2: # %bb.0:2640; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,1,2,3,5,4,6,6]2641; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02642; AVX2-NEXT: retq2643;2644; AVX512VL-LABEL: shuffle_v8i32_01235466:2645; AVX512VL: # %bb.0:2646; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,1,2,3,5,4,6,6]2647; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02648; AVX512VL-NEXT: retq2649 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>2650 ret <8 x i32> %shuffle2651}2652 2653define <8 x i32> @shuffle_v8i32_002u6u44(<8 x i32> %a, <8 x i32> %b) {2654; AVX1-LABEL: shuffle_v8i32_002u6u44:2655; AVX1: # %bb.0:2656; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,2,u,6,u,4,4]2657; AVX1-NEXT: retq2658;2659; AVX2-LABEL: shuffle_v8i32_002u6u44:2660; AVX2: # %bb.0:2661; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,2,u,6,u,4,4]2662; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02663; AVX2-NEXT: retq2664;2665; AVX512VL-LABEL: shuffle_v8i32_002u6u44:2666; AVX512VL: # %bb.0:2667; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,2,0,6,0,4,4]2668; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02669; AVX512VL-NEXT: retq2670 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 poison, i32 6, i32 poison, i32 4, i32 4>2671 ret <8 x i32> %shuffle2672}2673 2674define <8 x i32> @shuffle_v8i32_00uu66uu(<8 x i32> %a, <8 x i32> %b) {2675; AVX1-LABEL: shuffle_v8i32_00uu66uu:2676; AVX1: # %bb.0:2677; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,0,u,u,6,6,u,u]2678; AVX1-NEXT: retq2679;2680; AVX2-LABEL: shuffle_v8i32_00uu66uu:2681; AVX2: # %bb.0:2682; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,u,u,6,6,u,u]2683; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02684; AVX2-NEXT: retq2685;2686; AVX512VL-LABEL: shuffle_v8i32_00uu66uu:2687; AVX512VL: # %bb.0:2688; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,6,6,0,0]2689; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02690; AVX512VL-NEXT: retq2691 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 0, i32 poison, i32 poison, i32 6, i32 6, i32 poison, i32 poison>2692 ret <8 x i32> %shuffle2693}2694 2695define <8 x i32> @shuffle_v8i32_103245uu(<8 x i32> %a, <8 x i32> %b) {2696; AVX1-LABEL: shuffle_v8i32_103245uu:2697; AVX1: # %bb.0:2698; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,u,u]2699; AVX1-NEXT: retq2700;2701; AVX2-LABEL: shuffle_v8i32_103245uu:2702; AVX2: # %bb.0:2703; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [1,0,3,2,4,5,u,u]2704; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02705; AVX2-NEXT: retq2706;2707; AVX512VL-LABEL: shuffle_v8i32_103245uu:2708; AVX512VL: # %bb.0:2709; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [1,0,3,2,4,5,0,0]2710; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02711; AVX512VL-NEXT: retq2712 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 poison, i32 poison>2713 ret <8 x i32> %shuffle2714}2715 2716define <8 x i32> @shuffle_v8i32_1133uu67(<8 x i32> %a, <8 x i32> %b) {2717; AVX1-LABEL: shuffle_v8i32_1133uu67:2718; AVX1: # %bb.0:2719; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,1,3,3,u,u,6,7]2720; AVX1-NEXT: retq2721;2722; AVX2-LABEL: shuffle_v8i32_1133uu67:2723; AVX2: # %bb.0:2724; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [1,1,3,3,u,u,6,7]2725; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02726; AVX2-NEXT: retq2727;2728; AVX512VL-LABEL: shuffle_v8i32_1133uu67:2729; AVX512VL: # %bb.0:2730; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [1,1,3,3,0,0,6,7]2731; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02732; AVX512VL-NEXT: retq2733 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 poison, i32 poison, i32 6, i32 7>2734 ret <8 x i32> %shuffle2735}2736 2737define <8 x i32> @shuffle_v8i32_0uu354uu(<8 x i32> %a, <8 x i32> %b) {2738; AVX1-LABEL: shuffle_v8i32_0uu354uu:2739; AVX1: # %bb.0:2740; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,u,u,3,5,4,u,u]2741; AVX1-NEXT: retq2742;2743; AVX2-LABEL: shuffle_v8i32_0uu354uu:2744; AVX2: # %bb.0:2745; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,u,u,3,5,4,u,u]2746; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02747; AVX2-NEXT: retq2748;2749; AVX512VL-LABEL: shuffle_v8i32_0uu354uu:2750; AVX512VL: # %bb.0:2751; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,3,5,4,0,0]2752; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02753; AVX512VL-NEXT: retq2754 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 5, i32 4, i32 poison, i32 poison>2755 ret <8 x i32> %shuffle2756}2757 2758define <8 x i32> @shuffle_v8i32_uuu3uu66(<8 x i32> %a, <8 x i32> %b) {2759; AVX1-LABEL: shuffle_v8i32_uuu3uu66:2760; AVX1: # %bb.0:2761; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[u,u,u,3,u,u,6,6]2762; AVX1-NEXT: retq2763;2764; AVX2-LABEL: shuffle_v8i32_uuu3uu66:2765; AVX2: # %bb.0:2766; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [u,u,u,3,u,u,6,6]2767; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm02768; AVX2-NEXT: retq2769;2770; AVX512VL-LABEL: shuffle_v8i32_uuu3uu66:2771; AVX512VL: # %bb.0:2772; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,0,0,3,0,0,6,6]2773; AVX512VL-NEXT: vpermps %ymm0, %ymm1, %ymm02774; AVX512VL-NEXT: retq2775 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 6>2776 ret <8 x i32> %shuffle2777}2778 2779define <8 x i32> @shuffle_v8i32_6caa87e5(<8 x i32> %a, <8 x i32> %b) {2780; AVX1-LABEL: shuffle_v8i32_6caa87e5:2781; AVX1: # %bb.0:2782; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]2783; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[0,0],ymm1[2,2],ymm2[4,4],ymm1[6,6]2784; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]2785; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1,0,3,2]2786; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]2787; AVX1-NEXT: retq2788;2789; AVX2-SLOW-LABEL: shuffle_v8i32_6caa87e5:2790; AVX2-SLOW: # %bb.0:2791; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,1,3,2]2792; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0,2,2,4,4,6,6]2793; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[2,1,0,3]2794; AVX2-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]2795; AVX2-SLOW-NEXT: retq2796;2797; AVX2-FAST-ALL-LABEL: shuffle_v8i32_6caa87e5:2798; AVX2-FAST-ALL: # %bb.0:2799; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm2 = [u,4,2,2,0,u,6,u]2800; AVX2-FAST-ALL-NEXT: vpermps %ymm1, %ymm2, %ymm12801; AVX2-FAST-ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,1,3,2]2802; AVX2-FAST-ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]2803; AVX2-FAST-ALL-NEXT: retq2804;2805; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_6caa87e5:2806; AVX2-FAST-PERLANE: # %bb.0:2807; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,1,3,2]2808; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0,2,2,4,4,6,6]2809; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[2,1,0,3]2810; AVX2-FAST-PERLANE-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4],ymm0[5],ymm1[6],ymm0[7]2811; AVX2-FAST-PERLANE-NEXT: retq2812;2813; AVX512VL-LABEL: shuffle_v8i32_6caa87e5:2814; AVX512VL: # %bb.0:2815; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [14,4,2,2,0,15,6,13]2816; AVX512VL-NEXT: vpermi2d %ymm0, %ymm1, %ymm22817; AVX512VL-NEXT: vmovdqa %ymm2, %ymm02818; AVX512VL-NEXT: retq2819 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 6, i32 12, i32 10, i32 10, i32 8, i32 7, i32 14, i32 5>2820 ret <8 x i32> %shuffle2821}2822 2823define <8 x i32> @shuffle_v8i32_32103210(<8 x i32> %a, <8 x i32> %b) {2824; AVX1-LABEL: shuffle_v8i32_32103210:2825; AVX1: # %bb.0:2826; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]2827; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm02828; AVX1-NEXT: retq2829;2830; AVX2-SLOW-LABEL: shuffle_v8i32_32103210:2831; AVX2-SLOW: # %bb.0:2832; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]2833; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]2834; AVX2-SLOW-NEXT: retq2835;2836; AVX2-FAST-ALL-LABEL: shuffle_v8i32_32103210:2837; AVX2-FAST-ALL: # %bb.0:2838; AVX2-FAST-ALL-NEXT: vbroadcastf128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]2839; AVX2-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]2840; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm02841; AVX2-FAST-ALL-NEXT: retq2842;2843; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_32103210:2844; AVX2-FAST-PERLANE: # %bb.0:2845; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]2846; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]2847; AVX2-FAST-PERLANE-NEXT: retq2848;2849; AVX512VL-SLOW-LABEL: shuffle_v8i32_32103210:2850; AVX512VL-SLOW: # %bb.0:2851; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]2852; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]2853; AVX512VL-SLOW-NEXT: retq2854;2855; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_32103210:2856; AVX512VL-FAST-ALL: # %bb.0:2857; AVX512VL-FAST-ALL-NEXT: vbroadcasti128 {{.*#+}} ymm1 = [3,2,1,0,3,2,1,0]2858; AVX512VL-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]2859; AVX512VL-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm02860; AVX512VL-FAST-ALL-NEXT: retq2861;2862; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_32103210:2863; AVX512VL-FAST-PERLANE: # %bb.0:2864; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]2865; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]2866; AVX512VL-FAST-PERLANE-NEXT: retq2867 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 3, i32 2, i32 1, i32 0>2868 ret <8 x i32> %shuffle2869}2870 2871define <8 x i32> @shuffle_v8i32_76547654(<8 x i32> %a, <8 x i32> %b) {2872; AVX1-LABEL: shuffle_v8i32_76547654:2873; AVX1: # %bb.0:2874; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]2875; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2876; AVX1-NEXT: retq2877;2878; AVX2-SLOW-LABEL: shuffle_v8i32_76547654:2879; AVX2-SLOW: # %bb.0:2880; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2881; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]2882; AVX2-SLOW-NEXT: retq2883;2884; AVX2-FAST-ALL-LABEL: shuffle_v8i32_76547654:2885; AVX2-FAST-ALL: # %bb.0:2886; AVX2-FAST-ALL-NEXT: vbroadcastf128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]2887; AVX2-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]2888; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm02889; AVX2-FAST-ALL-NEXT: retq2890;2891; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_76547654:2892; AVX2-FAST-PERLANE: # %bb.0:2893; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2894; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]2895; AVX2-FAST-PERLANE-NEXT: retq2896;2897; AVX512VL-SLOW-LABEL: shuffle_v8i32_76547654:2898; AVX512VL-SLOW: # %bb.0:2899; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2900; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]2901; AVX512VL-SLOW-NEXT: retq2902;2903; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_76547654:2904; AVX512VL-FAST-ALL: # %bb.0:2905; AVX512VL-FAST-ALL-NEXT: vbroadcasti128 {{.*#+}} ymm1 = [7,6,5,4,7,6,5,4]2906; AVX512VL-FAST-ALL-NEXT: # ymm1 = mem[0,1,0,1]2907; AVX512VL-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm02908; AVX512VL-FAST-ALL-NEXT: retq2909;2910; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_76547654:2911; AVX512VL-FAST-PERLANE: # %bb.0:2912; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2913; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,2,3]2914; AVX512VL-FAST-PERLANE-NEXT: retq2915 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 7, i32 6, i32 5, i32 4>2916 ret <8 x i32> %shuffle2917}2918 2919define <8 x i32> @shuffle_v8i32_76543210(<8 x i32> %a, <8 x i32> %b) {2920; AVX1-LABEL: shuffle_v8i32_76543210:2921; AVX1: # %bb.0:2922; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]2923; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2924; AVX1-NEXT: retq2925;2926; AVX2-SLOW-LABEL: shuffle_v8i32_76543210:2927; AVX2-SLOW: # %bb.0:2928; AVX2-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2929; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]2930; AVX2-SLOW-NEXT: retq2931;2932; AVX2-FAST-ALL-LABEL: shuffle_v8i32_76543210:2933; AVX2-FAST-ALL: # %bb.0:2934; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]2935; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm02936; AVX2-FAST-ALL-NEXT: retq2937;2938; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_76543210:2939; AVX2-FAST-PERLANE: # %bb.0:2940; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2941; AVX2-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]2942; AVX2-FAST-PERLANE-NEXT: retq2943;2944; AVX512VL-SLOW-LABEL: shuffle_v8i32_76543210:2945; AVX512VL-SLOW: # %bb.0:2946; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2947; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]2948; AVX512VL-SLOW-NEXT: retq2949;2950; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_76543210:2951; AVX512VL-FAST-ALL: # %bb.0:2952; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm1 = [7,6,5,4,3,2,1,0]2953; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm02954; AVX512VL-FAST-ALL-NEXT: retq2955;2956; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_76543210:2957; AVX512VL-FAST-PERLANE: # %bb.0:2958; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2959; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,3,0,1]2960; AVX512VL-FAST-PERLANE-NEXT: retq2961 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>2962 ret <8 x i32> %shuffle2963}2964 2965define <8 x i32> @shuffle_v8i32_3210ba98(<8 x i32> %a, <8 x i32> %b) {2966; AVX1OR2-LABEL: shuffle_v8i32_3210ba98:2967; AVX1OR2: # %bb.0:2968; AVX1OR2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm02969; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2970; AVX1OR2-NEXT: retq2971;2972; AVX512VL-SLOW-LABEL: shuffle_v8i32_3210ba98:2973; AVX512VL-SLOW: # %bb.0:2974; AVX512VL-SLOW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm02975; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2976; AVX512VL-SLOW-NEXT: retq2977;2978; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_3210ba98:2979; AVX512VL-FAST-ALL: # %bb.0:2980; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,11,10,9,8]2981; AVX512VL-FAST-ALL-NEXT: vpermt2d %ymm1, %ymm2, %ymm02982; AVX512VL-FAST-ALL-NEXT: retq2983;2984; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_3210ba98:2985; AVX512VL-FAST-PERLANE: # %bb.0:2986; AVX512VL-FAST-PERLANE-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm02987; AVX512VL-FAST-PERLANE-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2988; AVX512VL-FAST-PERLANE-NEXT: retq2989 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 11, i32 10, i32 9, i32 8>2990 ret <8 x i32> %shuffle2991}2992 2993define <8 x i32> @shuffle_v8i32_3210fedc(<8 x i32> %a, <8 x i32> %b) {2994; AVX1OR2-LABEL: shuffle_v8i32_3210fedc:2995; AVX1OR2: # %bb.0:2996; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]2997; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]2998; AVX1OR2-NEXT: retq2999;3000; AVX512VL-SLOW-LABEL: shuffle_v8i32_3210fedc:3001; AVX512VL-SLOW: # %bb.0:3002; AVX512VL-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]3003; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3004; AVX512VL-SLOW-NEXT: retq3005;3006; AVX512VL-FAST-LABEL: shuffle_v8i32_3210fedc:3007; AVX512VL-FAST: # %bb.0:3008; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]3009; AVX512VL-FAST-NEXT: vpermt2d %ymm1, %ymm2, %ymm03010; AVX512VL-FAST-NEXT: retq3011 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12>3012 ret <8 x i32> %shuffle3013}3014 3015define <8 x i32> @shuffle_v8i32_7654fedc(<8 x i32> %a, <8 x i32> %b) {3016; AVX1OR2-LABEL: shuffle_v8i32_7654fedc:3017; AVX1OR2: # %bb.0:3018; AVX1OR2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]3019; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3020; AVX1OR2-NEXT: retq3021;3022; AVX512VL-SLOW-LABEL: shuffle_v8i32_7654fedc:3023; AVX512VL-SLOW: # %bb.0:3024; AVX512VL-SLOW-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]3025; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3026; AVX512VL-SLOW-NEXT: retq3027;3028; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_7654fedc:3029; AVX512VL-FAST-ALL: # %bb.0:3030; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]3031; AVX512VL-FAST-ALL-NEXT: vpermt2d %ymm1, %ymm2, %ymm03032; AVX512VL-FAST-ALL-NEXT: retq3033;3034; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_7654fedc:3035; AVX512VL-FAST-PERLANE: # %bb.0:3036; AVX512VL-FAST-PERLANE-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]3037; AVX512VL-FAST-PERLANE-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3038; AVX512VL-FAST-PERLANE-NEXT: retq3039 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 15, i32 14, i32 13, i32 12>3040 ret <8 x i32> %shuffle3041}3042 3043define <8 x i32> @shuffle_v8i32_fedc7654(<8 x i32> %a, <8 x i32> %b) {3044; AVX1OR2-LABEL: shuffle_v8i32_fedc7654:3045; AVX1OR2: # %bb.0:3046; AVX1OR2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]3047; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3048; AVX1OR2-NEXT: retq3049;3050; AVX512VL-SLOW-LABEL: shuffle_v8i32_fedc7654:3051; AVX512VL-SLOW: # %bb.0:3052; AVX512VL-SLOW-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]3053; AVX512VL-SLOW-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3054; AVX512VL-SLOW-NEXT: retq3055;3056; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_fedc7654:3057; AVX512VL-FAST-ALL: # %bb.0:3058; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [7,6,5,4,15,14,13,12]3059; AVX512VL-FAST-ALL-NEXT: vpermi2d %ymm0, %ymm1, %ymm23060; AVX512VL-FAST-ALL-NEXT: vmovdqa %ymm2, %ymm03061; AVX512VL-FAST-ALL-NEXT: retq3062;3063; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_fedc7654:3064; AVX512VL-FAST-PERLANE: # %bb.0:3065; AVX512VL-FAST-PERLANE-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm1[2,3],ymm0[2,3]3066; AVX512VL-FAST-PERLANE-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3067; AVX512VL-FAST-PERLANE-NEXT: retq3068 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 15, i32 14, i32 13, i32 12, i32 7, i32 6, i32 5, i32 4>3069 ret <8 x i32> %shuffle3070}3071 3072define <8 x i32> @shuffle_v8i32_ba987654(<8 x i32> %a, <8 x i32> %b) {3073; AVX1OR2-LABEL: shuffle_v8i32_ba987654:3074; AVX1OR2: # %bb.0:3075; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3076; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3077; AVX1OR2-NEXT: retq3078;3079; AVX512VL-SLOW-LABEL: shuffle_v8i32_ba987654:3080; AVX512VL-SLOW: # %bb.0:3081; AVX512VL-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3082; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3083; AVX512VL-SLOW-NEXT: retq3084;3085; AVX512VL-FAST-LABEL: shuffle_v8i32_ba987654:3086; AVX512VL-FAST: # %bb.0:3087; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]3088; AVX512VL-FAST-NEXT: vpermi2d %ymm0, %ymm1, %ymm23089; AVX512VL-FAST-NEXT: vmovdqa %ymm2, %ymm03090; AVX512VL-FAST-NEXT: retq3091 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>3092 ret <8 x i32> %shuffle3093}3094 3095define <8 x i32> @shuffle_v8i32_ba983210(<8 x i32> %a, <8 x i32> %b) {3096; AVX1OR2-LABEL: shuffle_v8i32_ba983210:3097; AVX1OR2: # %bb.0:3098; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3099; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3100; AVX1OR2-NEXT: retq3101;3102; AVX512VL-SLOW-LABEL: shuffle_v8i32_ba983210:3103; AVX512VL-SLOW: # %bb.0:3104; AVX512VL-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3105; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3106; AVX512VL-SLOW-NEXT: retq3107;3108; AVX512VL-FAST-LABEL: shuffle_v8i32_ba983210:3109; AVX512VL-FAST: # %bb.0:3110; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} ymm2 = [3,2,1,0,15,14,13,12]3111; AVX512VL-FAST-NEXT: vpermi2d %ymm0, %ymm1, %ymm23112; AVX512VL-FAST-NEXT: vmovdqa %ymm2, %ymm03113; AVX512VL-FAST-NEXT: retq3114 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4>3115 ret <8 x i32> %shuffle3116}3117 3118define <8 x i32> @shuffle_v8i32_089abcde(<8 x i32> %a, <8 x i32> %b) {3119; AVX1-LABEL: shuffle_v8i32_089abcde:3120; AVX1: # %bb.0:3121; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]3122; AVX1-NEXT: vshufps {{.*#+}} ymm2 = ymm2[3,0],ymm1[0,0],ymm2[7,4],ymm1[4,4]3123; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[0,2],ymm1[1,2],ymm2[4,6],ymm1[5,6]3124; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]3125; AVX1-NEXT: retq3126;3127; AVX2-LABEL: shuffle_v8i32_089abcde:3128; AVX2: # %bb.0:3129; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = [u,0,1,2,3,4,5,6]3130; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm13131; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]3132; AVX2-NEXT: retq3133;3134; AVX512VL-SLOW-LABEL: shuffle_v8i32_089abcde:3135; AVX512VL-SLOW: # %bb.0:3136; AVX512VL-SLOW-NEXT: valignd {{.*#+}} ymm1 = ymm1[7,0,1,2,3,4,5,6]3137; AVX512VL-SLOW-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]3138; AVX512VL-SLOW-NEXT: retq3139;3140; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_089abcde:3141; AVX512VL-FAST-ALL: # %bb.0:3142; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,0,1,2,3,4,5,6]3143; AVX512VL-FAST-ALL-NEXT: vpermi2d %ymm0, %ymm1, %ymm23144; AVX512VL-FAST-ALL-NEXT: vmovdqa %ymm2, %ymm03145; AVX512VL-FAST-ALL-NEXT: retq3146;3147; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_089abcde:3148; AVX512VL-FAST-PERLANE: # %bb.0:3149; AVX512VL-FAST-PERLANE-NEXT: valignd {{.*#+}} ymm1 = ymm1[7,0,1,2,3,4,5,6]3150; AVX512VL-FAST-PERLANE-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7]3151; AVX512VL-FAST-PERLANE-NEXT: retq3152 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>3153 ret <8 x i32> %shuffle3154}3155 3156define <8 x i32> @shuffle_v8i32_0189abcd(<8 x i32> %a, <8 x i32> %b) {3157; AVX1-LABEL: shuffle_v8i32_0189abcd:3158; AVX1: # %bb.0:3159; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03160; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[2]3161; AVX1-NEXT: retq3162;3163; AVX2-LABEL: shuffle_v8i32_0189abcd:3164; AVX2: # %bb.0:3165; AVX2-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,2]3166; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]3167; AVX2-NEXT: retq3168;3169; AVX512VL-SLOW-LABEL: shuffle_v8i32_0189abcd:3170; AVX512VL-SLOW: # %bb.0:3171; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,2]3172; AVX512VL-SLOW-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]3173; AVX512VL-SLOW-NEXT: retq3174;3175; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_0189abcd:3176; AVX512VL-FAST-ALL: # %bb.0:3177; AVX512VL-FAST-ALL-NEXT: vpmovsxbq {{.*#+}} ymm2 = [4,0,1,2]3178; AVX512VL-FAST-ALL-NEXT: vpermi2q %ymm0, %ymm1, %ymm23179; AVX512VL-FAST-ALL-NEXT: vmovdqa %ymm2, %ymm03180; AVX512VL-FAST-ALL-NEXT: retq3181;3182; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_0189abcd:3183; AVX512VL-FAST-PERLANE: # %bb.0:3184; AVX512VL-FAST-PERLANE-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,1,2]3185; AVX512VL-FAST-PERLANE-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5,6,7]3186; AVX512VL-FAST-PERLANE-NEXT: retq3187 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13>3188 ret <8 x i32> %shuffle3189}3190 3191define <8 x i32> @shuffle_v8i32_01289abc(<8 x i32> %a, <8 x i32> %b) {3192; AVX1-LABEL: shuffle_v8i32_01289abc:3193; AVX1: # %bb.0:3194; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]3195; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm2[3,0],ymm1[4,4],ymm2[7,4]3196; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm2[1,2],ymm1[2,0],ymm2[5,6],ymm1[6,4]3197; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]3198; AVX1-NEXT: retq3199;3200; AVX2-LABEL: shuffle_v8i32_01289abc:3201; AVX2: # %bb.0:3202; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = [u,u,u,0,1,2,3,4]3203; AVX2-NEXT: vpermps %ymm1, %ymm2, %ymm13204; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]3205; AVX2-NEXT: retq3206;3207; AVX512VL-SLOW-LABEL: shuffle_v8i32_01289abc:3208; AVX512VL-SLOW: # %bb.0:3209; AVX512VL-SLOW-NEXT: valignd {{.*#+}} ymm1 = ymm1[5,6,7,0,1,2,3,4]3210; AVX512VL-SLOW-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]3211; AVX512VL-SLOW-NEXT: retq3212;3213; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_01289abc:3214; AVX512VL-FAST-ALL: # %bb.0:3215; AVX512VL-FAST-ALL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,9,10,0,1,2,3,4]3216; AVX512VL-FAST-ALL-NEXT: vpermi2d %ymm0, %ymm1, %ymm23217; AVX512VL-FAST-ALL-NEXT: vmovdqa %ymm2, %ymm03218; AVX512VL-FAST-ALL-NEXT: retq3219;3220; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_01289abc:3221; AVX512VL-FAST-PERLANE: # %bb.0:3222; AVX512VL-FAST-PERLANE-NEXT: valignd {{.*#+}} ymm1 = ymm1[5,6,7,0,1,2,3,4]3223; AVX512VL-FAST-PERLANE-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3,4,5,6,7]3224; AVX512VL-FAST-PERLANE-NEXT: retq3225 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 8, i32 9, i32 10, i32 11, i32 12>3226 ret <8 x i32> %shuffle3227}3228 3229define <8 x i32> @shuffle_v8i32_zuu8zuuc(<8 x i32> %a) {3230; AVX1-LABEL: shuffle_v8i32_zuu8zuuc:3231; AVX1: # %bb.0:3232; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm13233; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,0],ymm0[0,0],ymm1[4,4],ymm0[4,4]3234; AVX1-NEXT: retq3235;3236; AVX2OR512VL-LABEL: shuffle_v8i32_zuu8zuuc:3237; AVX2OR512VL: # %bb.0:3238; AVX2OR512VL-NEXT: vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19]3239; AVX2OR512VL-NEXT: retq3240 %shuffle = shufflevector <8 x i32> zeroinitializer, <8 x i32> %a, <8 x i32> <i32 0, i32 poison, i32 poison, i32 8, i32 0, i32 poison, i32 poison, i32 12>3241 ret <8 x i32> %shuffle3242}3243 3244define <8 x i32> @shuffle_v8i32_9ubzdefz(<8 x i32> %a) {3245; AVX1-LABEL: shuffle_v8i32_9ubzdefz:3246; AVX1: # %bb.0:3247; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm13248; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[3,0],ymm0[3,0],ymm1[7,4],ymm0[7,4]3249; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]3250; AVX1-NEXT: retq3251;3252; AVX2OR512VL-LABEL: shuffle_v8i32_9ubzdefz:3253; AVX2OR512VL: # %bb.0:3254; AVX2OR512VL-NEXT: vpsrldq {{.*#+}} ymm0 = ymm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,ymm0[20,21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero3255; AVX2OR512VL-NEXT: retq3256 %shuffle = shufflevector <8 x i32> zeroinitializer, <8 x i32> %a, <8 x i32> <i32 9, i32 poison, i32 11, i32 0, i32 13, i32 14, i32 15, i32 0>3257 ret <8 x i32> %shuffle3258}3259 3260define <8 x i32> @shuffle_v8i32_80u1b4uu(<8 x i32> %a, <8 x i32> %b) {3261; ALL-LABEL: shuffle_v8i32_80u1b4uu:3262; ALL: # %bb.0:3263; ALL-NEXT: vunpcklps {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[4],ymm0[4],ymm1[5],ymm0[5]3264; ALL-NEXT: retq3265 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 0, i32 poison, i32 1, i32 12, i32 4, i32 poison, i32 poison>3266 ret <8 x i32> %shuffle3267}3268 3269define <8 x i32> @shuffle_v8i32_uuuu1111(<8 x i32> %a, <8 x i32> %b) {3270; ALL-LABEL: shuffle_v8i32_uuuu1111:3271; ALL: # %bb.0:3272; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]3273; ALL-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03274; ALL-NEXT: retq3275 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 1, i32 1, i32 1>3276 ret <8 x i32> %shuffle3277}3278 3279define <8 x i32> @shuffle_v8i32_2222uuuu(<8 x i32> %a, <8 x i32> %b) {3280; ALL-LABEL: shuffle_v8i32_2222uuuu:3281; ALL: # %bb.0:3282; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,2,2,2]3283; ALL-NEXT: retq3284 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 poison, i32 poison, i32 poison, i32 poison>3285 ret <8 x i32> %shuffle3286}3287 3288define <8 x i32> @shuffle_v8i32_2A3Buuuu(<8 x i32> %a, <8 x i32> %b) {3289; ALL-LABEL: shuffle_v8i32_2A3Buuuu:3290; ALL: # %bb.0:3291; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3292; ALL-NEXT: retq3293 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 poison, i32 poison, i32 poison, i32 poison>3294 ret <8 x i32> %shuffle3295}3296 3297define <8 x i32> @shuffle_v8i32_44444444(<8 x i32> %a, <8 x i32> %b) {3298; AVX1-LABEL: shuffle_v8i32_44444444:3299; AVX1: # %bb.0:3300; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]3301; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]3302; AVX1-NEXT: retq3303;3304; AVX2-SLOW-LABEL: shuffle_v8i32_44444444:3305; AVX2-SLOW: # %bb.0:3306; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm03307; AVX2-SLOW-NEXT: vbroadcastss %xmm0, %ymm03308; AVX2-SLOW-NEXT: retq3309;3310; AVX2-FAST-ALL-LABEL: shuffle_v8i32_44444444:3311; AVX2-FAST-ALL: # %bb.0:3312; AVX2-FAST-ALL-NEXT: vbroadcastss {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3313; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm03314; AVX2-FAST-ALL-NEXT: retq3315;3316; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_44444444:3317; AVX2-FAST-PERLANE: # %bb.0:3318; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm03319; AVX2-FAST-PERLANE-NEXT: vbroadcastss %xmm0, %ymm03320; AVX2-FAST-PERLANE-NEXT: retq3321;3322; AVX512VL-SLOW-LABEL: shuffle_v8i32_44444444:3323; AVX512VL-SLOW: # %bb.0:3324; AVX512VL-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm03325; AVX512VL-SLOW-NEXT: vbroadcastss %xmm0, %ymm03326; AVX512VL-SLOW-NEXT: retq3327;3328; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_44444444:3329; AVX512VL-FAST-ALL: # %bb.0:3330; AVX512VL-FAST-ALL-NEXT: vbroadcastss {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3331; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm03332; AVX512VL-FAST-ALL-NEXT: retq3333;3334; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_44444444:3335; AVX512VL-FAST-PERLANE: # %bb.0:3336; AVX512VL-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm03337; AVX512VL-FAST-PERLANE-NEXT: vbroadcastss %xmm0, %ymm03338; AVX512VL-FAST-PERLANE-NEXT: retq3339 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3340 ret <8 x i32> %shuffle3341}3342 3343define <8 x i32> @shuffle_v8i32_44444444_bc(<8 x float> %a, <8 x float> %b) {3344; AVX1-LABEL: shuffle_v8i32_44444444_bc:3345; AVX1: # %bb.0:3346; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]3347; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]3348; AVX1-NEXT: retq3349;3350; AVX2-SLOW-LABEL: shuffle_v8i32_44444444_bc:3351; AVX2-SLOW: # %bb.0:3352; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm03353; AVX2-SLOW-NEXT: vbroadcastss %xmm0, %ymm03354; AVX2-SLOW-NEXT: retq3355;3356; AVX2-FAST-ALL-LABEL: shuffle_v8i32_44444444_bc:3357; AVX2-FAST-ALL: # %bb.0:3358; AVX2-FAST-ALL-NEXT: vbroadcastss {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3359; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm03360; AVX2-FAST-ALL-NEXT: retq3361;3362; AVX2-FAST-PERLANE-LABEL: shuffle_v8i32_44444444_bc:3363; AVX2-FAST-PERLANE: # %bb.0:3364; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm03365; AVX2-FAST-PERLANE-NEXT: vbroadcastss %xmm0, %ymm03366; AVX2-FAST-PERLANE-NEXT: retq3367;3368; AVX512VL-SLOW-LABEL: shuffle_v8i32_44444444_bc:3369; AVX512VL-SLOW: # %bb.0:3370; AVX512VL-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm03371; AVX512VL-SLOW-NEXT: vbroadcastss %xmm0, %ymm03372; AVX512VL-SLOW-NEXT: retq3373;3374; AVX512VL-FAST-ALL-LABEL: shuffle_v8i32_44444444_bc:3375; AVX512VL-FAST-ALL: # %bb.0:3376; AVX512VL-FAST-ALL-NEXT: vbroadcastss {{.*#+}} ymm1 = [4,4,4,4,4,4,4,4]3377; AVX512VL-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm03378; AVX512VL-FAST-ALL-NEXT: retq3379;3380; AVX512VL-FAST-PERLANE-LABEL: shuffle_v8i32_44444444_bc:3381; AVX512VL-FAST-PERLANE: # %bb.0:3382; AVX512VL-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm03383; AVX512VL-FAST-PERLANE-NEXT: vbroadcastss %xmm0, %ymm03384; AVX512VL-FAST-PERLANE-NEXT: retq3385 %tmp0 = bitcast <8 x float> %a to <8 x i32>3386 %tmp1 = bitcast <8 x float> %b to <8 x i32>3387 %shuffle = shufflevector <8 x i32> %tmp0, <8 x i32> %tmp1, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3388 ret <8 x i32> %shuffle3389}3390 3391define <8 x i32> @shuffle_v8i32_5555uuuu(<8 x i32> %a, <8 x i32> %b) {3392; ALL-LABEL: shuffle_v8i32_5555uuuu:3393; ALL: # %bb.0:3394; ALL-NEXT: vextractf128 $1, %ymm0, %xmm03395; ALL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,1,1]3396; ALL-NEXT: retq3397 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 poison, i32 poison, i32 poison, i32 poison>3398 ret <8 x i32> %shuffle3399}3400 3401define <8 x i32> @shuffle_v8i32_0dcd3f14(<8 x i32> %a, <8 x i32> %b) {3402; AVX1-LABEL: shuffle_v8i32_0dcd3f14:3403; AVX1: # %bb.0:3404; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm23405; AVX1-NEXT: vmovss {{.*#+}} xmm2 = xmm2[0],xmm0[1,2,3]3406; AVX1-NEXT: vshufps {{.*#+}} xmm2 = xmm2[3,1,1,0]3407; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm03408; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[2,3,2,3]3409; AVX1-NEXT: vshufpd {{.*#+}} ymm1 = ymm1[0,0,3,2]3410; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5],ymm0[6,7]3411; AVX1-NEXT: retq3412;3413; AVX2-LABEL: shuffle_v8i32_0dcd3f14:3414; AVX2: # %bb.0:3415; AVX2-NEXT: vmovaps {{.*#+}} ymm2 = [0,u,u,u,3,u,1,4]3416; AVX2-NEXT: vpermps %ymm0, %ymm2, %ymm03417; AVX2-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[2,2,3,3]3418; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5],ymm0[6,7]3419; AVX2-NEXT: retq3420;3421; AVX512VL-LABEL: shuffle_v8i32_0dcd3f14:3422; AVX512VL: # %bb.0:3423; AVX512VL-NEXT: vpmovsxbd {{.*#+}} ymm2 = [8,5,4,5,11,7,9,12]3424; AVX512VL-NEXT: vpermi2d %ymm0, %ymm1, %ymm23425; AVX512VL-NEXT: vmovdqa %ymm2, %ymm03426; AVX512VL-NEXT: retq3427 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 13, i32 12, i32 13, i32 3, i32 15, i32 1, i32 4>3428 ret <8 x i32> %shuffle3429}3430 3431; PR324533432define <8 x i32> @shuffle_v8i32_uuuuuu7u(<8 x i32> %a, <8 x i32> %b) nounwind {3433; AVX1-LABEL: shuffle_v8i32_uuuuuu7u:3434; AVX1: # %bb.0:3435; AVX1-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]3436; AVX1-NEXT: retq3437;3438; AVX2OR512VL-LABEL: shuffle_v8i32_uuuuuu7u:3439; AVX2OR512VL: # %bb.0:3440; AVX2OR512VL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,3,3,3,7,7,7,7]3441; AVX2OR512VL-NEXT: retq3442 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 7, i32 poison>3443 ret <8 x i32> %shuffle3444}3445 3446define <8 x i32> @shuffle_v8i32_32107654_v4i32(<4 x i32> %a, <4 x i32> %b) {3447; ALL-LABEL: shuffle_v8i32_32107654_v4i32:3448; ALL: # %bb.0:3449; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm03450; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03451; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3452; ALL-NEXT: retq3453 %1 = shufflevector <4 x i32> %a, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>3454 %2 = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>3455 %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3456 ret <8 x i32> %33457}3458 3459define <8 x i32> @shuffle_v8i32_00004444_v4f32(<4 x i32> %a, <4 x i32> %b) {3460; ALL-LABEL: shuffle_v8i32_00004444_v4f32:3461; ALL: # %bb.0:3462; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm03463; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03464; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]3465; ALL-NEXT: retq3466 %1 = shufflevector <4 x i32> %a, <4 x i32> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>3467 ret <8 x i32> %13468}3469 3470define <8 x float> @splat_mem_v8f32_2(ptr %p) {3471; ALL-LABEL: splat_mem_v8f32_2:3472; ALL: # %bb.0:3473; ALL-NEXT: vbroadcastss (%rdi), %ymm03474; ALL-NEXT: retq3475 %1 = load float, ptr %p3476 %2 = insertelement <4 x float> poison, float %1, i32 03477 %3 = shufflevector <4 x float> %2, <4 x float> poison, <8 x i32> zeroinitializer3478 ret <8 x float> %33479}3480 3481define <8 x float> @splat_v8f32(<4 x float> %r) {3482; AVX1-LABEL: splat_v8f32:3483; AVX1: # %bb.0:3484; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0,0,0]3485; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03486; AVX1-NEXT: retq3487;3488; AVX2OR512VL-LABEL: splat_v8f32:3489; AVX2OR512VL: # %bb.0:3490; AVX2OR512VL-NEXT: vbroadcastss %xmm0, %ymm03491; AVX2OR512VL-NEXT: retq3492 %1 = shufflevector <4 x float> %r, <4 x float> poison, <8 x i32> zeroinitializer3493 ret <8 x float> %13494}3495 3496;3497; Shuffle to logical bit shifts3498;3499 3500define <8 x i32> @shuffle_v8i32_z0U2zUz6(<8 x i32> %a) {3501; AVX1-LABEL: shuffle_v8i32_z0U2zUz6:3502; AVX1: # %bb.0:3503; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm13504; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6]3505; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5]3506; AVX1-NEXT: retq3507;3508; AVX2OR512VL-LABEL: shuffle_v8i32_z0U2zUz6:3509; AVX2OR512VL: # %bb.0:3510; AVX2OR512VL-NEXT: vpsllq $32, %ymm0, %ymm03511; AVX2OR512VL-NEXT: retq3512 %shuffle = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 8, i32 0, i32 poison, i32 2, i32 8, i32 poison, i32 8, i32 6>3513 ret <8 x i32> %shuffle3514}3515 3516define <8 x i32> @shuffle_v8i32_1U3z5zUU(<8 x i32> %a) {3517; AVX1-LABEL: shuffle_v8i32_1U3z5zUU:3518; AVX1: # %bb.0:3519; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm13520; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]3521; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]3522; AVX1-NEXT: retq3523;3524; AVX2OR512VL-LABEL: shuffle_v8i32_1U3z5zUU:3525; AVX2OR512VL: # %bb.0:3526; AVX2OR512VL-NEXT: vpsrlq $32, %ymm0, %ymm03527; AVX2OR512VL-NEXT: retq3528 %shuffle = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 1, i32 poison, i32 3, i32 8, i32 5, i32 8, i32 poison, i32 poison>3529 ret <8 x i32> %shuffle3530}3531 3532define <8 x i32> @shuffle_v8i32_B012F456(<8 x i32> %a, <8 x i32> %b) {3533; AVX1-LABEL: shuffle_v8i32_B012F456:3534; AVX1: # %bb.0:3535; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[3,0],ymm0[0,0],ymm1[7,4],ymm0[4,4]3536; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,2],ymm0[1,2],ymm1[4,6],ymm0[5,6]3537; AVX1-NEXT: retq3538;3539; AVX2OR512VL-LABEL: shuffle_v8i32_B012F456:3540; AVX2OR512VL: # %bb.0:3541; AVX2OR512VL-NEXT: vpalignr {{.*#+}} ymm0 = ymm1[12,13,14,15],ymm0[0,1,2,3,4,5,6,7,8,9,10,11],ymm1[28,29,30,31],ymm0[16,17,18,19,20,21,22,23,24,25,26,27]3542; AVX2OR512VL-NEXT: retq3543 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 0, i32 1, i32 2, i32 15, i32 4, i32 5, i32 6>3544 ret <8 x i32> %shuffle3545}3546 3547define <8 x i32> @shuffle_v8i32_1238567C(<8 x i32> %a, <8 x i32> %b) {3548; AVX1-LABEL: shuffle_v8i32_1238567C:3549; AVX1: # %bb.0:3550; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[3,0],ymm1[4,4],ymm0[7,4]3551; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]3552; AVX1-NEXT: retq3553;3554; AVX2OR512VL-LABEL: shuffle_v8i32_1238567C:3555; AVX2OR512VL: # %bb.0:3556; AVX2OR512VL-NEXT: vpalignr {{.*#+}} ymm0 = ymm0[4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3],ymm0[20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19]3557; AVX2OR512VL-NEXT: retq3558 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 8, i32 5, i32 6, i32 7, i32 12>3559 ret <8 x i32> %shuffle3560}3561 3562define <8 x i32> @shuffle_v8i32_9AB0DEF4(<8 x i32> %a, <8 x i32> %b) {3563; AVX1-LABEL: shuffle_v8i32_9AB0DEF4:3564; AVX1: # %bb.0:3565; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,0],ymm1[3,0],ymm0[4,4],ymm1[7,4]3566; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[1,2],ymm0[2,0],ymm1[5,6],ymm0[6,4]3567; AVX1-NEXT: retq3568;3569; AVX2OR512VL-LABEL: shuffle_v8i32_9AB0DEF4:3570; AVX2OR512VL: # %bb.0:3571; AVX2OR512VL-NEXT: vpalignr {{.*#+}} ymm0 = ymm1[4,5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3],ymm1[20,21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19]3572; AVX2OR512VL-NEXT: retq3573 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 10, i32 11, i32 0, i32 13, i32 14, i32 15, i32 4>3574 ret <8 x i32> %shuffle3575}3576 3577define <8 x i32> @shuffle_v8i32_389A7CDE(<8 x i32> %a, <8 x i32> %b) {3578; AVX1-LABEL: shuffle_v8i32_389A7CDE:3579; AVX1: # %bb.0:3580; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,0],ymm1[0,0],ymm0[7,4],ymm1[4,4]3581; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[1,2],ymm0[4,6],ymm1[5,6]3582; AVX1-NEXT: retq3583;3584; AVX2OR512VL-LABEL: shuffle_v8i32_389A7CDE:3585; AVX2OR512VL: # %bb.0:3586; AVX2OR512VL-NEXT: vpalignr {{.*#+}} ymm0 = ymm0[12,13,14,15],ymm1[0,1,2,3,4,5,6,7,8,9,10,11],ymm0[28,29,30,31],ymm1[16,17,18,19,20,21,22,23,24,25,26,27]3587; AVX2OR512VL-NEXT: retq3588 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 8, i32 9, i32 10, i32 7, i32 12, i32 13, i32 14>3589 ret <8 x i32> %shuffle3590}3591 3592define <8 x i32> @shuffle_v8i32_30127456(<8 x i32> %a, <8 x i32> %b) {3593; ALL-LABEL: shuffle_v8i32_30127456:3594; ALL: # %bb.0:3595; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,0,1,2,7,4,5,6]3596; ALL-NEXT: retq3597 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6>3598 ret <8 x i32> %shuffle3599}3600 3601define <8 x i32> @shuffle_v8i32_12305674(<8 x i32> %a, <8 x i32> %b) {3602; ALL-LABEL: shuffle_v8i32_12305674:3603; ALL: # %bb.0:3604; ALL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,2,3,0,5,6,7,4]3605; ALL-NEXT: retq3606 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 5, i32 6, i32 7, i32 4>3607 ret <8 x i32> %shuffle3608}3609 3610define <8x float> @concat_v2f32_1(ptr %tmp64, ptr %tmp65) {3611; ALL-LABEL: concat_v2f32_1:3612; ALL: # %bb.0: # %entry3613; ALL-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero3614; ALL-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]3615; ALL-NEXT: retq3616entry:3617 %tmp74 = load <2 x float>, ptr %tmp65, align 83618 %tmp72 = load <2 x float>, ptr %tmp64, align 83619 %tmp73 = shufflevector <2 x float> %tmp72, <2 x float> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>3620 %tmp75 = shufflevector <2 x float> %tmp74, <2 x float> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>3621 %tmp76 = shufflevector <8 x float> %tmp73, <8 x float> %tmp75, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 poison, i32 poison, i32 poison, i32 poison>3622 ret <8 x float> %tmp763623}3624 3625define <8x float> @concat_v2f32_2(ptr %tmp64, ptr %tmp65) {3626; ALL-LABEL: concat_v2f32_2:3627; ALL: # %bb.0: # %entry3628; ALL-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero3629; ALL-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]3630; ALL-NEXT: retq3631entry:3632 %tmp74 = load <2 x float>, ptr %tmp65, align 83633 %tmp72 = load <2 x float>, ptr %tmp64, align 83634 %tmp76 = shufflevector <2 x float> %tmp72, <2 x float> %tmp74, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>3635 ret <8 x float> %tmp763636}3637 3638define <8x float> @concat_v2f32_3(ptr %tmp64, ptr %tmp65) {3639; ALL-LABEL: concat_v2f32_3:3640; ALL: # %bb.0: # %entry3641; ALL-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero3642; ALL-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]3643; ALL-NEXT: retq3644entry:3645 %tmp74 = load <2 x float>, ptr %tmp65, align 83646 %tmp72 = load <2 x float>, ptr %tmp64, align 83647 %tmp76 = shufflevector <2 x float> %tmp72, <2 x float> %tmp74, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3648 %res = shufflevector <4 x float> %tmp76, <4 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>3649 ret <8 x float> %res3650}3651 3652define <8 x i32> @insert_mem_and_zero_v8i32(ptr %ptr) {3653; ALL-LABEL: insert_mem_and_zero_v8i32:3654; ALL: # %bb.0:3655; ALL-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero3656; ALL-NEXT: retq3657 %a = load i32, ptr %ptr3658 %v = insertelement <8 x i32> poison, i32 %a, i32 03659 %shuffle = shufflevector <8 x i32> %v, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3660 ret <8 x i32> %shuffle3661}3662 3663define <8 x i32> @concat_v8i32_0123CDEF(<8 x i32> %a, <8 x i32> %b) {3664; ALL-LABEL: concat_v8i32_0123CDEF:3665; ALL: # %bb.0:3666; ALL-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]3667; ALL-NEXT: retq3668 %alo = shufflevector <8 x i32> %a, <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3669 %bhi = shufflevector <8 x i32> %b, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>3670 %shuf = shufflevector <4 x i32> %alo, <4 x i32> %bhi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3671 ret <8 x i32> %shuf3672}3673 3674define <8 x i32> @concat_v8i32_4567CDEF_bc(<8 x i32> %a0, <8 x i32> %a1) {3675; AVX1OR2-LABEL: concat_v8i32_4567CDEF_bc:3676; AVX1OR2: # %bb.0:3677; AVX1OR2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]3678; AVX1OR2-NEXT: retq3679;3680; AVX512VL-LABEL: concat_v8i32_4567CDEF_bc:3681; AVX512VL: # %bb.0:3682; AVX512VL-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]3683; AVX512VL-NEXT: retq3684 %a0hi = shufflevector <8 x i32> %a0, <8 x i32> %a1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>3685 %a1hi = shufflevector <8 x i32> %a0, <8 x i32> %a1, <4 x i32> <i32 12, i32 13, i32 14, i32 15>3686 %bc0hi = bitcast <4 x i32> %a0hi to <2 x i64>3687 %bc1hi = bitcast <4 x i32> %a1hi to <2 x i64>3688 %shuffle64 = shufflevector <2 x i64> %bc0hi, <2 x i64> %bc1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3689 %shuffle32 = bitcast <4 x i64> %shuffle64 to <8 x i32>3690 ret <8 x i32> %shuffle323691}3692 3693define <8 x float> @concat_v8f32_4567CDEF_bc(<8 x float> %f0, <8 x float> %f1) {3694; ALL-LABEL: concat_v8f32_4567CDEF_bc:3695; ALL: # %bb.0:3696; ALL-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]3697; ALL-NEXT: retq3698 %a0 = bitcast <8 x float> %f0 to <4 x i64>3699 %a1 = bitcast <8 x float> %f1 to <8 x i32>3700 %a0hi = shufflevector <4 x i64> %a0, <4 x i64> poison, <2 x i32> <i32 2, i32 3>3701 %a1hi = shufflevector <8 x i32> %a1, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>3702 %bc0hi = bitcast <2 x i64> %a0hi to <2 x i64>3703 %bc1hi = bitcast <4 x i32> %a1hi to <2 x i64>3704 %shuffle64 = shufflevector <2 x i64> %bc0hi, <2 x i64> %bc1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3705 %shuffle32 = bitcast <4 x i64> %shuffle64 to <8 x float>3706 ret <8 x float> %shuffle323707}3708 3709define <8 x i32> @insert_dup_mem_v8i32(ptr %ptr) {3710; ALL-LABEL: insert_dup_mem_v8i32:3711; ALL: # %bb.0:3712; ALL-NEXT: vbroadcastss (%rdi), %ymm03713; ALL-NEXT: retq3714 %tmp = load i32, ptr %ptr, align 43715 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 03716 %tmp2 = shufflevector <4 x i32> %tmp1, <4 x i32> poison, <8 x i32> zeroinitializer3717 ret <8 x i32> %tmp23718}3719 3720define <8 x i32> @shuffle_v8i32_12345678(<8 x i32> %a, <8 x i32> %b) {3721; AVX1-LABEL: shuffle_v8i32_12345678:3722; AVX1: # %bb.0:3723; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3],ymm1[0,1]3724; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[3,0],ymm1[4,4],ymm0[7,4]3725; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]3726; AVX1-NEXT: retq3727;3728; AVX2-LABEL: shuffle_v8i32_12345678:3729; AVX2: # %bb.0:3730; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3],ymm1[0,1]3731; AVX2-NEXT: vpalignr {{.*#+}} ymm0 = ymm0[4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3],ymm0[20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19]3732; AVX2-NEXT: retq3733;3734; AVX512VL-LABEL: shuffle_v8i32_12345678:3735; AVX512VL: # %bb.0:3736; AVX512VL-NEXT: valignd {{.*#+}} ymm0 = ymm0[1,2,3,4,5,6,7],ymm1[0]3737; AVX512VL-NEXT: retq3738 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>3739 ret <8 x i32> %shuffle3740}3741 3742define <8 x i32> @shuffle_v8i32_12345670(<8 x i32> %a) {3743; AVX1-LABEL: shuffle_v8i32_12345670:3744; AVX1: # %bb.0:3745; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1]3746; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[3,0],ymm1[4,4],ymm0[7,4]3747; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4]3748; AVX1-NEXT: retq3749;3750; AVX2-LABEL: shuffle_v8i32_12345670:3751; AVX2: # %bb.0:3752; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [1,2,3,4,5,6,7,0]3753; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm03754; AVX2-NEXT: retq3755;3756; AVX512VL-LABEL: shuffle_v8i32_12345670:3757; AVX512VL: # %bb.0:3758; AVX512VL-NEXT: valignd {{.*#+}} ymm0 = ymm0[1,2,3,4,5,6,7,0]3759; AVX512VL-NEXT: retq3760 %shuffle = shufflevector <8 x i32> %a, <8 x i32> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>3761 ret <8 x i32> %shuffle3762}3763 3764define <8 x float> @add_v8f32_02468ACE_13579BDF(<8 x float> %a, <8 x float> %b) {3765; AVX1-LABEL: add_v8f32_02468ACE_13579BDF:3766; AVX1: # %bb.0: # %entry3767; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm1[2,3]3768; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03769; AVX1-NEXT: vhaddps %ymm2, %ymm0, %ymm03770; AVX1-NEXT: retq3771;3772; AVX2OR512VL-LABEL: add_v8f32_02468ACE_13579BDF:3773; AVX2OR512VL: # %bb.0: # %entry3774; AVX2OR512VL-NEXT: vhaddps %ymm1, %ymm0, %ymm03775; AVX2OR512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,1,3]3776; AVX2OR512VL-NEXT: retq3777entry:3778 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>3779 %shuffle1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>3780 %add = fadd <8 x float> %shuffle, %shuffle13781 ret <8 x float> %add3782}3783 3784define <8 x float> @add_v8f32_8ACE0246_9BDF1357(<8 x float> %a, <8 x float> %b) {3785; AVX1-LABEL: add_v8f32_8ACE0246_9BDF1357:3786; AVX1: # %bb.0: # %entry3787; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3],ymm0[2,3]3788; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm03789; AVX1-NEXT: vhaddps %ymm2, %ymm0, %ymm03790; AVX1-NEXT: retq3791;3792; AVX2OR512VL-LABEL: add_v8f32_8ACE0246_9BDF1357:3793; AVX2OR512VL: # %bb.0: # %entry3794; AVX2OR512VL-NEXT: vhaddps %ymm1, %ymm0, %ymm03795; AVX2OR512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,3,0,2]3796; AVX2OR512VL-NEXT: retq3797entry:3798 %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6>3799 %shuffle1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 9, i32 11, i32 13, i32 15, i32 1, i32 3, i32 5, i32 7>3800 %add = fadd <8 x float> %shuffle, %shuffle13801 ret <8 x float> %add3802}3803 3804define <8 x i32> @add_v8i32_02468ACE_13579BDF(<8 x i32> %a, <8 x i32> %b) {3805; AVX1-LABEL: add_v8i32_02468ACE_13579BDF:3806; AVX1: # %bb.0: # %entry3807; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm23808; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm33809; AVX1-NEXT: vphaddd %xmm2, %xmm3, %xmm23810; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm2, %ymm23811; AVX1-NEXT: vphaddd %xmm1, %xmm0, %xmm03812; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03813; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[3],ymm2[3]3814; AVX1-NEXT: retq3815;3816; AVX2OR512VL-LABEL: add_v8i32_02468ACE_13579BDF:3817; AVX2OR512VL: # %bb.0: # %entry3818; AVX2OR512VL-NEXT: vphaddd %ymm1, %ymm0, %ymm03819; AVX2OR512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]3820; AVX2OR512VL-NEXT: retq3821entry:3822 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>3823 %shuffle1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>3824 %add = add <8 x i32> %shuffle, %shuffle13825 ret <8 x i32> %add3826}3827 3828define <8 x i32> @add_v8i32_8ACE0246_9BDF1357(<8 x i32> %a, <8 x i32> %b) {3829; AVX1-LABEL: add_v8i32_8ACE0246_9BDF1357:3830; AVX1: # %bb.0: # %entry3831; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm23832; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm33833; AVX1-NEXT: vphaddd %xmm2, %xmm3, %xmm23834; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm2, %ymm23835; AVX1-NEXT: vphaddd %xmm1, %xmm0, %xmm03836; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03837; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm2[1],ymm0[2],ymm2[2]3838; AVX1-NEXT: retq3839;3840; AVX2OR512VL-LABEL: add_v8i32_8ACE0246_9BDF1357:3841; AVX2OR512VL: # %bb.0: # %entry3842; AVX2OR512VL-NEXT: vphaddd %ymm1, %ymm0, %ymm03843; AVX2OR512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,3,0,2]3844; AVX2OR512VL-NEXT: retq3845entry:3846 %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6>3847 %shuffle1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 9, i32 11, i32 13, i32 15, i32 1, i32 3, i32 5, i32 7>3848 %add = add <8 x i32> %shuffle, %shuffle13849 ret <8 x i32> %add3850}3851 3852; This test used to crash due to bad handling of concat_vectors after a bitcast3853; in lowerVectorShuffleAsBroadcast.3854define <8 x float> @broadcast_concat_crash(<4 x float> %x, <4 x float> %y, float %z) {3855; AVX1-LABEL: broadcast_concat_crash:3856; AVX1: # %bb.0: # %entry3857; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm1[3,3,3,3]3858; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]3859; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03860; AVX1-NEXT: retq3861;3862; AVX2-LABEL: broadcast_concat_crash:3863; AVX2: # %bb.0: # %entry3864; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03865; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]3866; AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,3,3]3867; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]3868; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03869; AVX2-NEXT: retq3870;3871; AVX512VL-SLOW-LABEL: broadcast_concat_crash:3872; AVX512VL-SLOW: # %bb.0: # %entry3873; AVX512VL-SLOW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03874; AVX512VL-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]3875; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,3,3]3876; AVX512VL-SLOW-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[2,3]3877; AVX512VL-SLOW-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm03878; AVX512VL-SLOW-NEXT: retq3879;3880; AVX512VL-FAST-LABEL: broadcast_concat_crash:3881; AVX512VL-FAST: # %bb.0: # %entry3882; AVX512VL-FAST-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03883; AVX512VL-FAST-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3]3884; AVX512VL-FAST-NEXT: vpmovsxbd {{.*#+}} xmm1 = [1,4,3,3]3885; AVX512VL-FAST-NEXT: vpermi2ps %xmm2, %xmm0, %xmm13886; AVX512VL-FAST-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm03887; AVX512VL-FAST-NEXT: retq3888entry:3889 %tmp = shufflevector <4 x float> %x, <4 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3890 %bc = bitcast <8 x float> %tmp to <4 x i64>3891 %tmp1 = extractelement <4 x i64> %bc, i32 33892 %tmp2 = bitcast i64 %tmp1 to <2 x float>3893 %tmp4 = extractelement <2 x float> %tmp2, i32 13894 %tmp5 = insertelement <8 x float> poison, float %tmp4, i32 43895 %tmp6 = insertelement <8 x float> %tmp5, float %z, i32 53896 ret <8 x float> %tmp63897}3898 3899; PR40434: https://bugs.llvm.org/show_bug.cgi?id=404343900 3901define <8 x i32> @unpckh_v8i32(<8 x i32> %x, <8 x i32> %y) {3902; ALL-LABEL: unpckh_v8i32:3903; ALL: # %bb.0:3904; ALL-NEXT: vextractf128 $1, %ymm1, %xmm13905; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3906; ALL-NEXT: retq3907 %unpckh = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 15, i32 poison, i32 poison, i32 poison, i32 poison>3908 ret <8 x i32> %unpckh3909}3910 3911; Same as above but with floats.3912 3913define <8 x float> @unpckh_v8f32(<8 x float> %x, <8 x float> %y) {3914; ALL-LABEL: unpckh_v8f32:3915; ALL: # %bb.0:3916; ALL-NEXT: vextractf128 $1, %ymm1, %xmm13917; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3918; ALL-NEXT: retq3919 %unpckh = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 15, i32 poison, i32 poison, i32 poison, i32 poison>3920 ret <8 x float> %unpckh3921}3922 3923; Alternate form of the above - make sure we don't have conflicting transforms.3924 3925define <8 x i32> @blend_perm_v8i32(<8 x i32> %x, <8 x i32> %y) {3926; ALL-LABEL: blend_perm_v8i32:3927; ALL: # %bb.0:3928; ALL-NEXT: vextractf128 $1, %ymm1, %xmm13929; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3930; ALL-NEXT: retq3931 %unpckh = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 14, i32 15>3932 %r = shufflevector <8 x i32> %unpckh, <8 x i32> poison, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 poison, i32 poison, i32 poison, i32 poison>3933 ret <8 x i32> %r3934}3935 3936; Same as above but with floats.3937 3938define <8 x float> @blend_perm_v8f32(<8 x float> %x, <8 x float> %y) {3939; ALL-LABEL: blend_perm_v8f32:3940; ALL: # %bb.0:3941; ALL-NEXT: vextractf128 $1, %ymm1, %xmm13942; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3943; ALL-NEXT: retq3944 %unpckh = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 14, i32 15>3945 %r = shufflevector <8 x float> %unpckh, <8 x float> poison, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 poison, i32 poison, i32 poison, i32 poison>3946 ret <8 x float> %r3947}3948 3949; Another variation of the above - make sure we don't have conflicting transforms.3950 3951define <8 x i32> @unpckh_v8i32_unary(<8 x i32> %x) {3952; ALL-LABEL: unpckh_v8i32_unary:3953; ALL: # %bb.0:3954; ALL-NEXT: vextractf128 $1, %ymm0, %xmm13955; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3956; ALL-NEXT: retq3957 %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 poison, i32 poison, i32 poison, i32 poison>3958 ret <8 x i32> %r3959}3960 3961; Same as above but with floats.3962 3963define <8 x float> @unpckh_v8f32_unary(<8 x float> %x) {3964; ALL-LABEL: unpckh_v8f32_unary:3965; ALL: # %bb.0:3966; ALL-NEXT: vextractf128 $1, %ymm0, %xmm13967; ALL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3968; ALL-NEXT: retq3969 %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 2, i32 6, i32 3, i32 7, i32 poison, i32 poison, i32 poison, i32 poison>3970 ret <8 x float> %r3971}3972 3973; FIXME: Why are integer and FP (below) lowering different for AVX1?3974 3975define <8 x i32> @lowhalf_v8i32(<8 x i32> %x, <8 x i32> %y) {3976; AVX1-LABEL: lowhalf_v8i32:3977; AVX1: # %bb.0:3978; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm13979; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[2,2,2,2]3980; AVX1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]3981; AVX1-NEXT: retq3982;3983; AVX2-LABEL: lowhalf_v8i32:3984; AVX2: # %bb.0:3985; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]3986; AVX2-NEXT: vmovaps {{.*#+}} xmm1 = [2,6,3,6]3987; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm03988; AVX2-NEXT: retq3989;3990; AVX512VL-LABEL: lowhalf_v8i32:3991; AVX512VL: # %bb.0:3992; AVX512VL-NEXT: vpmovsxbd {{.*#+}} xmm2 = [2,14,3,14]3993; AVX512VL-NEXT: vpermt2d %ymm1, %ymm2, %ymm03994; AVX512VL-NEXT: retq3995 %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 14, i32 poison, i32 poison, i32 poison, i32 poison>3996 ret <8 x i32> %r3997}3998 3999; FIXME: AVX1 lowering is better than AVX2 (and AVX512?)4000 4001define <8 x float> @lowhalf_v8f32(<8 x float> %x, <8 x float> %y) {4002; AVX1-LABEL: lowhalf_v8f32:4003; AVX1: # %bb.0:4004; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm14005; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,3],xmm1[2,2]4006; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2,1,3]4007; AVX1-NEXT: retq4008;4009; AVX2-LABEL: lowhalf_v8f32:4010; AVX2: # %bb.0:4011; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]4012; AVX2-NEXT: vmovaps {{.*#+}} xmm1 = [2,6,3,6]4013; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm04014; AVX2-NEXT: retq4015;4016; AVX512VL-LABEL: lowhalf_v8f32:4017; AVX512VL: # %bb.0:4018; AVX512VL-NEXT: vpmovsxbd {{.*#+}} xmm2 = [2,14,3,14]4019; AVX512VL-NEXT: vpermt2ps %ymm1, %ymm2, %ymm04020; AVX512VL-NEXT: retq4021 %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 2, i32 14, i32 3, i32 14, i32 poison, i32 poison, i32 poison, i32 poison>4022 ret <8 x float> %r4023}4024 4025