brintos

brintos / llvm-project-archived public Read only

0
0
Text · 433.6 KiB · be41945 Raw
8134 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-prefixes=ALL,AVX1OR2,AVX13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=ALL,AVX1OR2,AVX2OR512VL,AVX2,AVX2-SLOW4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX1OR2,AVX2OR512VL,AVX2,AVX2-FAST,AVX2-FAST-ALL5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX1OR2,AVX2OR512VL,AVX2,AVX2-FAST,AVX2-FAST-PERLANE6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=ALL,AVX2OR512VL,AVX512VL,AVX512VL-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX2OR512VL,AVX512VL,AVX512VL-FAST,AVX512VL-FAST-CROSSLANE8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX2OR512VL,AVX512VL,AVX512VL-FAST,AVX512VL-FAST-PERLANE9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=ALL,XOP,XOPAVX110; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=ALL,XOP,XOPAVX211 12define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {13; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:14; AVX1:       # %bb.0:15; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]16; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]17; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm018; AVX1-NEXT:    retq19;20; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:21; AVX2OR512VL:       # %bb.0:22; AVX2OR512VL-NEXT:    vpbroadcastw %xmm0, %ymm023; AVX2OR512VL-NEXT:    retq24;25; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:26; XOPAVX1:       # %bb.0:27; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]28; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]29; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm030; XOPAVX1-NEXT:    retq31;32; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:33; XOPAVX2:       # %bb.0:34; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %ymm035; XOPAVX2-NEXT:    retq36  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>37  ret <16 x i16> %shuffle38}39 40define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00(<16 x i16> %a, <16 x i16> %b) {41; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:42; AVX1:       # %bb.0:43; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]44; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]45; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]46; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]47; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm048; AVX1-NEXT:    retq49;50; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:51; AVX2-SLOW:       # %bb.0:52; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]53; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]54; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]55; AVX2-SLOW-NEXT:    retq56;57; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:58; AVX2-FAST-ALL:       # %bb.0:59; AVX2-FAST-ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]60; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,0,0,0,1]61; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm062; AVX2-FAST-ALL-NEXT:    retq63;64; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:65; AVX2-FAST-PERLANE:       # %bb.0:66; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1]67; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]68; AVX2-FAST-PERLANE-NEXT:    retq69;70; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:71; AVX512VL:       # %bb.0:72; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,0,0,0,1]73; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm074; AVX512VL-NEXT:    retq75;76; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:77; XOPAVX1:       # %bb.0:78; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]79; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]80; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]81; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]82; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm083; XOPAVX1-NEXT:    retq84;85; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:86; XOPAVX2:       # %bb.0:87; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]88; XOPAVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]89; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]90; XOPAVX2-NEXT:    retq91  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>92  ret <16 x i16> %shuffle93}94 95define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00(<16 x i16> %a, <16 x i16> %b) {96; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:97; AVX1:       # %bb.0:98; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]99; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]100; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]101; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]102; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0103; AVX1-NEXT:    retq104;105; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:106; AVX2-SLOW:       # %bb.0:107; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]108; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]109; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]110; AVX2-SLOW-NEXT:    retq111;112; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:113; AVX2-FAST-ALL:       # %bb.0:114; AVX2-FAST-ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]115; AVX2-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,0,1]116; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0117; AVX2-FAST-ALL-NEXT:    retq118;119; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:120; AVX2-FAST-PERLANE:       # %bb.0:121; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,4,5,0,1,0,1]122; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]123; AVX2-FAST-PERLANE-NEXT:    retq124;125; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:126; AVX512VL:       # %bb.0:127; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]128; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0129; AVX512VL-NEXT:    retq130;131; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:132; XOPAVX1:       # %bb.0:133; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]134; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]135; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]136; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]137; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0138; XOPAVX1-NEXT:    retq139;140; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:141; XOPAVX2:       # %bb.0:142; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]143; XOPAVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]144; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]145; XOPAVX2-NEXT:    retq146  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>147  ret <16 x i16> %shuffle148}149 150define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00(<16 x i16> %a, <16 x i16> %b) {151; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:152; AVX1:       # %bb.0:153; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]154; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]155; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]156; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]157; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0158; AVX1-NEXT:    retq159;160; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:161; AVX2-SLOW:       # %bb.0:162; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]163; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]164; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]165; AVX2-SLOW-NEXT:    retq166;167; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:168; AVX2-FAST-ALL:       # %bb.0:169; AVX2-FAST-ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]170; AVX2-FAST-ALL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,0,1]171; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm0172; AVX2-FAST-ALL-NEXT:    retq173;174; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:175; AVX2-FAST-PERLANE:       # %bb.0:176; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,6,7,0,1,0,1,0,1]177; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]178; AVX2-FAST-PERLANE-NEXT:    retq179;180; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:181; AVX512VL:       # %bb.0:182; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,0,3]183; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0184; AVX512VL-NEXT:    retq185;186; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:187; XOPAVX1:       # %bb.0:188; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]189; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]190; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]191; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]192; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0193; XOPAVX1-NEXT:    retq194;195; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:196; XOPAVX2:       # %bb.0:197; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]198; XOPAVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]199; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1]200; XOPAVX2-NEXT:    retq201  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>202  ret <16 x i16> %shuffle203}204 205define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {206; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:207; AVX1:       # %bb.0:208; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]209; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]210; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]211; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0212; AVX1-NEXT:    retq213;214; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:215; AVX2:       # %bb.0:216; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,8,9]217; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]218; AVX2-NEXT:    retq219;220; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:221; AVX512VL:       # %bb.0:222; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0]223; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0224; AVX512VL-NEXT:    retq225;226; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:227; XOPAVX1:       # %bb.0:228; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]229; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]230; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]231; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0232; XOPAVX1-NEXT:    retq233;234; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:235; XOPAVX2:       # %bb.0:236; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,8,9]237; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]238; XOPAVX2-NEXT:    retq239  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>240  ret <16 x i16> %shuffle241}242 243define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {244; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:245; AVX1:       # %bb.0:246; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]247; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]248; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]249; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0250; AVX1-NEXT:    retq251;252; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:253; AVX2:       # %bb.0:254; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,10,11,0,1]255; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]256; AVX2-NEXT:    retq257;258; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:259; AVX512VL:       # %bb.0:260; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,0,0,0,0,5,0,0]261; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0262; AVX512VL-NEXT:    retq263;264; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:265; XOPAVX1:       # %bb.0:266; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]267; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]268; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]269; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0270; XOPAVX1-NEXT:    retq271;272; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:273; XOPAVX2:       # %bb.0:274; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,10,11,0,1]275; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]276; XOPAVX2-NEXT:    retq277  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>278  ret <16 x i16> %shuffle279}280 281define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {282; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:283; AVX1:       # %bb.0:284; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]285; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]286; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]287; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0288; AVX1-NEXT:    retq289;290; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:291; AVX2:       # %bb.0:292; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,12,13,0,1,0,1]293; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]294; AVX2-NEXT:    retq295;296; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:297; AVX512VL:       # %bb.0:298; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0]299; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0300; AVX512VL-NEXT:    retq301;302; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:303; XOPAVX1:       # %bb.0:304; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]305; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]306; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]307; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0308; XOPAVX1-NEXT:    retq309;310; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:311; XOPAVX2:       # %bb.0:312; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,12,13,0,1,0,1]313; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]314; XOPAVX2-NEXT:    retq315  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>316  ret <16 x i16> %shuffle317}318 319define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {320; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:321; AVX1:       # %bb.0:322; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]323; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]324; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]325; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0326; AVX1-NEXT:    retq327;328; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:329; AVX2:       # %bb.0:330; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,14,15,0,1,0,1,0,1]331; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]332; AVX2-NEXT:    retq333;334; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:335; AVX512VL:       # %bb.0:336; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,7,0]337; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0338; AVX512VL-NEXT:    retq339;340; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:341; XOPAVX1:       # %bb.0:342; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]343; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]344; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]345; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0346; XOPAVX1-NEXT:    retq347;348; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:349; XOPAVX2:       # %bb.0:350; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,14,15,0,1,0,1,0,1]351; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,0,1,0]352; XOPAVX2-NEXT:    retq353  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>354  ret <16 x i16> %shuffle355}356 357define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {358; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:359; AVX1:       # %bb.0:360; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1361; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]362; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,1,4,5,6,7]363; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,1]364; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]365; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]366; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0367; AVX1-NEXT:    retq368;369; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:370; AVX2:       # %bb.0:371; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]372; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,8,9,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]373; AVX2-NEXT:    retq374;375; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:376; AVX512VL:       # %bb.0:377; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} xmm1 = [0,0,0,0,0,0,0,8]378; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0379; AVX512VL-NEXT:    retq380;381; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:382; XOPAVX1:       # %bb.0:383; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1384; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1],xmm1[0,1]385; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]386; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]387; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0388; XOPAVX1-NEXT:    retq389;390; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:391; XOPAVX2:       # %bb.0:392; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]393; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,8,9,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]394; XOPAVX2-NEXT:    retq395  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>396  ret <16 x i16> %shuffle397}398 399define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {400; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:401; AVX1:       # %bb.0:402; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1403; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]404; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,3,0,4,5,6,7]405; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,1]406; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]407; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]408; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0409; AVX1-NEXT:    retq410;411; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:412; AVX2:       # %bb.0:413; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]414; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,10,11,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]415; AVX2-NEXT:    retq416;417; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:418; AVX512VL:       # %bb.0:419; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} xmm1 = [0,0,0,9]420; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0421; AVX512VL-NEXT:    retq422;423; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:424; XOPAVX1:       # %bb.0:425; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1426; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1],xmm1[2,3],xmm0[0,1]427; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]428; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]429; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0430; XOPAVX1-NEXT:    retq431;432; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:433; XOPAVX2:       # %bb.0:434; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]435; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,10,11,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]436; XOPAVX2-NEXT:    retq437  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 9, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>438  ret <16 x i16> %shuffle439}440 441define <16 x i16> @shuffle_v16i16_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {442; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:443; AVX1:       # %bb.0:444; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1445; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]446; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,0,1,0,1,0,1,0,1,10,11,0,1,0,1]447; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]448; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]449; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0450; AVX1-NEXT:    retq451;452; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:453; AVX2:       # %bb.0:454; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]455; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,12,13,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]456; AVX2-NEXT:    retq457;458; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:459; AVX512VL:       # %bb.0:460; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} xmm1 = [0,0,0,0,0,10,0,0]461; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0462; AVX512VL-NEXT:    retq463;464; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:465; XOPAVX1:       # %bb.0:466; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1467; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1,0,1,0,1],xmm1[4,5],xmm0[0,1,0,1]468; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]469; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]470; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0471; XOPAVX1-NEXT:    retq472;473; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:474; XOPAVX2:       # %bb.0:475; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]476; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,12,13,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]477; XOPAVX2-NEXT:    retq478  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 10, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>479  ret <16 x i16> %shuffle480}481 482define <16 x i16> @shuffle_v16i16_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {483; AVX1-LABEL: shuffle_v16i16_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:484; AVX1:       # %bb.0:485; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1486; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]487; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,0,1,0,1,0,1,14,15,0,1,0,1,0,1]488; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]489; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]490; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0491; AVX1-NEXT:    retq492;493; AVX2-LABEL: shuffle_v16i16_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:494; AVX2:       # %bb.0:495; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]496; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,14,15,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]497; AVX2-NEXT:    retq498;499; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:500; AVX512VL:       # %bb.0:501; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [0,11]502; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0503; AVX512VL-NEXT:    retq504;505; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:506; XOPAVX1:       # %bb.0:507; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1508; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1,0,1],xmm1[6,7],xmm0[0,1,0,1,0,1]509; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]510; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]511; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0512; XOPAVX1-NEXT:    retq513;514; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:515; XOPAVX2:       # %bb.0:516; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,0,3]517; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,14,15,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]518; XOPAVX2-NEXT:    retq519  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 11, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>520  ret <16 x i16> %shuffle521}522 523define <16 x i16> @shuffle_v16i16_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {524; AVX1-LABEL: shuffle_v16i16_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:525; AVX1:       # %bb.0:526; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1527; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7]528; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]529; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]530; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]531; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0532; AVX1-NEXT:    retq533;534; AVX2-LABEL: shuffle_v16i16_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:535; AVX2:       # %bb.0:536; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,3]537; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]538; AVX2-NEXT:    retq539;540; AVX512VL-LABEL: shuffle_v16i16_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:541; AVX512VL:       # %bb.0:542; AVX512VL-NEXT:    vmovq {{.*#+}} xmm1 = [0,0,0,12,0,0,0,0]543; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0544; AVX512VL-NEXT:    retq545;546; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:547; XOPAVX1:       # %bb.0:548; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1549; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1],xmm1[8,9],xmm0[0,1,0,1,0,1,0,1]550; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]551; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]552; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0553; XOPAVX1-NEXT:    retq554;555; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:556; XOPAVX2:       # %bb.0:557; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,3]558; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]559; XOPAVX2-NEXT:    retq560  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 12, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>561  ret <16 x i16> %shuffle562}563 564define <16 x i16> @shuffle_v16i16_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {565; AVX1-LABEL: shuffle_v16i16_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:566; AVX1:       # %bb.0:567; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1568; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7]569; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]570; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]571; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]572; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0573; AVX1-NEXT:    retq574;575; AVX2-LABEL: shuffle_v16i16_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:576; AVX2:       # %bb.0:577; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,3]578; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]579; AVX2-NEXT:    retq580;581; AVX512VL-LABEL: shuffle_v16i16_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:582; AVX512VL:       # %bb.0:583; AVX512VL-NEXT:    vpmovsxbd {{.*#+}} xmm1 = [0,13,0,0]584; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0585; AVX512VL-NEXT:    retq586;587; XOPAVX1-LABEL: shuffle_v16i16_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:588; XOPAVX1:       # %bb.0:589; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1590; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1,0,1],xmm1[10,11],xmm0[0,1,0,1,0,1,0,1,0,1]591; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]592; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]593; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0594; XOPAVX1-NEXT:    retq595;596; XOPAVX2-LABEL: shuffle_v16i16_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:597; XOPAVX2:       # %bb.0:598; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,3]599; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]600; XOPAVX2-NEXT:    retq601  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 13, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>602  ret <16 x i16> %shuffle603}604 605define <16 x i16> @shuffle_v16i16_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {606; AVX1-LABEL: shuffle_v16i16_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:607; AVX1:       # %bb.0:608; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1609; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7]610; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]611; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]612; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]613; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0614; AVX1-NEXT:    retq615;616; AVX2-LABEL: shuffle_v16i16_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:617; AVX2:       # %bb.0:618; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,3]619; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]620; AVX2-NEXT:    retq621;622; AVX512VL-LABEL: shuffle_v16i16_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:623; AVX512VL:       # %bb.0:624; AVX512VL-NEXT:    vmovd {{.*#+}} xmm1 = [0,14,0,0,0,0,0,0]625; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0626; AVX512VL-NEXT:    retq627;628; XOPAVX1-LABEL: shuffle_v16i16_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:629; XOPAVX1:       # %bb.0:630; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1631; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm0[0,1],xmm1[12,13],xmm0[0,1,0,1,0,1,0,1,0,1,0,1]632; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]633; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]634; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0635; XOPAVX1-NEXT:    retq636;637; XOPAVX2-LABEL: shuffle_v16i16_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:638; XOPAVX2:       # %bb.0:639; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,0,3]640; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]641; XOPAVX2-NEXT:    retq642  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 14, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>643  ret <16 x i16> %shuffle644}645 646define <16 x i16> @shuffle_v16i16_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {647; AVX1-LABEL: shuffle_v16i16_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:648; AVX1:       # %bb.0:649; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1650; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7]651; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]652; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]653; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]654; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0655; AVX1-NEXT:    retq656;657; AVX2-LABEL: shuffle_v16i16_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:658; AVX2:       # %bb.0:659; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,0,0,3]660; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,8,9,8,9,8,9,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]661; AVX2-NEXT:    retq662;663; AVX512VL-LABEL: shuffle_v16i16_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:664; AVX512VL:       # %bb.0:665; AVX512VL-NEXT:    vpmovsxbq {{.*#+}} xmm1 = [15,0]666; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm0667; AVX512VL-NEXT:    retq668;669; XOPAVX1-LABEL: shuffle_v16i16_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:670; XOPAVX1:       # %bb.0:671; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1672; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[14,15],xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1]673; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]674; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]675; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0676; XOPAVX1-NEXT:    retq677;678; XOPAVX2-LABEL: shuffle_v16i16_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:679; XOPAVX2:       # %bb.0:680; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,0,0,3]681; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,8,9,8,9,8,9,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]682; XOPAVX2-NEXT:    retq683  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>684  ret <16 x i16> %shuffle685}686 687define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {688; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:689; AVX1:       # %bb.0:690; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]691; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0692; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]693; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0694; AVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]695; AVX1-NEXT:    retq696;697; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:698; AVX2-SLOW:       # %bb.0:699; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]700; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]701; AVX2-SLOW-NEXT:    retq702;703; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:704; AVX2-FAST:       # %bb.0:705; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]706; AVX2-FAST-NEXT:    retq707;708; AVX512VL-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:709; AVX512VL-SLOW:       # %bb.0:710; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]711; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]712; AVX512VL-SLOW-NEXT:    retq713;714; AVX512VL-FAST-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:715; AVX512VL-FAST:       # %bb.0:716; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]717; AVX512VL-FAST-NEXT:    retq718;719; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:720; XOPAVX1:       # %bb.0:721; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]722; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0723; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]724; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0725; XOPAVX1-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]726; XOPAVX1-NEXT:    retq727;728; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:729; XOPAVX2:       # %bb.0:730; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]731; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5]732; XOPAVX2-NEXT:    retq733  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>734  ret <16 x i16> %shuffle735}736 737define <16 x i16> @shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15(<16 x i16> %a, <16 x i16> %b) {738; AVX1-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:739; AVX1:       # %bb.0:740; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,7,7,7]741; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0742; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]743; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0744; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]745; AVX1-NEXT:    retq746;747; AVX2-SLOW-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:748; AVX2-SLOW:       # %bb.0:749; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]750; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]751; AVX2-SLOW-NEXT:    retq752;753; AVX2-FAST-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:754; AVX2-FAST:       # %bb.0:755; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31]756; AVX2-FAST-NEXT:    retq757;758; AVX512VL-SLOW-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:759; AVX512VL-SLOW:       # %bb.0:760; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]761; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]762; AVX512VL-SLOW-NEXT:    retq763;764; AVX512VL-FAST-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:765; AVX512VL-FAST:       # %bb.0:766; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,30,31,30,31,30,31,30,31,30,31,30,31,30,31,30,31]767; AVX512VL-FAST-NEXT:    retq768;769; XOPAVX1-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:770; XOPAVX1:       # %bb.0:771; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,7,7,7]772; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0773; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]774; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0775; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]776; XOPAVX1-NEXT:    retq777;778; XOPAVX2-LABEL: shuffle_v16i16_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15:779; XOPAVX2:       # %bb.0:780; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]781; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]782; XOPAVX2-NEXT:    retq783  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>784  ret <16 x i16> %shuffle785}786 787define <16 x i16> @shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {788; AVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:789; AVX1:       # %bb.0:790; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]791; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]792; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0793; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]794; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]795; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0796; AVX1-NEXT:    retq797;798; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:799; AVX2-SLOW:       # %bb.0:800; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]801; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]802; AVX2-SLOW-NEXT:    retq803;804; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:805; AVX2-FAST:       # %bb.0:806; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]807; AVX2-FAST-NEXT:    retq808;809; AVX512VL-SLOW-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:810; AVX512VL-SLOW:       # %bb.0:811; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]812; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]813; AVX512VL-SLOW-NEXT:    retq814;815; AVX512VL-FAST-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:816; AVX512VL-FAST:       # %bb.0:817; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]818; AVX512VL-FAST-NEXT:    retq819;820; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:821; XOPAVX1:       # %bb.0:822; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]823; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]824; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0825; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]826; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]827; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0828; XOPAVX1-NEXT:    retq829;830; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:831; XOPAVX2:       # %bb.0:832; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]833; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]834; XOPAVX2-NEXT:    retq835  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12>836  ret <16 x i16> %shuffle837}838 839define <16 x i16> @shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15(<16 x i16> %a, <16 x i16> %b) {840; AVX1-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:841; AVX1:       # %bb.0:842; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]843; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,7,7,7]844; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0845; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]846; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]847; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0848; AVX1-NEXT:    retq849;850; AVX2-SLOW-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:851; AVX2-SLOW:       # %bb.0:852; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]853; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]854; AVX2-SLOW-NEXT:    retq855;856; AVX2-FAST-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:857; AVX2-FAST:       # %bb.0:858; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,6,7,6,7,6,7,14,15,14,15,14,15,14,15,22,23,22,23,22,23,22,23,30,31,30,31,30,31,30,31]859; AVX2-FAST-NEXT:    retq860;861; AVX512VL-SLOW-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:862; AVX512VL-SLOW:       # %bb.0:863; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]864; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]865; AVX512VL-SLOW-NEXT:    retq866;867; AVX512VL-FAST-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:868; AVX512VL-FAST:       # %bb.0:869; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,6,7,6,7,6,7,14,15,14,15,14,15,14,15,22,23,22,23,22,23,22,23,30,31,30,31,30,31,30,31]870; AVX512VL-FAST-NEXT:    retq871;872; XOPAVX1-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:873; XOPAVX1:       # %bb.0:874; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[3,3,3,3,4,5,6,7]875; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,7,7,7]876; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0877; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]878; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]879; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0880; XOPAVX1-NEXT:    retq881;882; XOPAVX2-LABEL: shuffle_v16i16_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15:883; XOPAVX2:       # %bb.0:884; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]885; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]886; XOPAVX2-NEXT:    retq887  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 7, i32 7, i32 7, i32 7, i32 11, i32 11, i32 11, i32 11, i32 15, i32 15, i32 15, i32 15>888  ret <16 x i16> %shuffle889}890 891define <16 x i16> @shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14(<16 x i16> %a, <16 x i16> %b) {892; AVX1-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:893; AVX1:       # %bb.0:894; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,2,2,4,5,6,7]895; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,6,6]896; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0897; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]898; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,6,6]899; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0900; AVX1-NEXT:    retq901;902; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:903; AVX2-SLOW:       # %bb.0:904; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,2,2,4,5,6,7,8,8,10,10,12,13,14,15]905; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,6,6,8,9,10,11,12,12,14,14]906; AVX2-SLOW-NEXT:    retq907;908; AVX2-FAST-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:909; AVX2-FAST:       # %bb.0:910; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13,16,17,16,17,20,21,20,21,24,25,24,25,28,29,28,29]911; AVX2-FAST-NEXT:    retq912;913; AVX512VL-SLOW-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:914; AVX512VL-SLOW:       # %bb.0:915; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,2,2,4,5,6,7,8,8,10,10,12,13,14,15]916; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,6,6,8,9,10,11,12,12,14,14]917; AVX512VL-SLOW-NEXT:    retq918;919; AVX512VL-FAST-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:920; AVX512VL-FAST:       # %bb.0:921; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13,16,17,16,17,20,21,20,21,24,25,24,25,28,29,28,29]922; AVX512VL-FAST-NEXT:    retq923;924; XOPAVX1-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:925; XOPAVX1:       # %bb.0:926; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,2,2,4,5,6,7]927; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,6,6]928; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0929; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]930; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,6,6]931; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0932; XOPAVX1-NEXT:    retq933;934; XOPAVX2-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14:935; XOPAVX2:       # %bb.0:936; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,2,2,4,5,6,7,8,8,10,10,12,13,14,15]937; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,6,6,8,9,10,11,12,12,14,14]938; XOPAVX2-NEXT:    retq939  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>940  ret <16 x i16> %shuffle941}942 943define <16 x i16> @shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15(<16 x i16> %a, <16 x i16> %b) {944; AVX1-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:945; AVX1:       # %bb.0:946; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[1,1,3,3,4,5,6,7]947; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,5,7,7]948; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0949; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,3,3,4,5,6,7]950; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,7,7]951; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0952; AVX1-NEXT:    retq953;954; AVX2-SLOW-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:955; AVX2-SLOW:       # %bb.0:956; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7,9,9,11,11,12,13,14,15]957; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,5,7,7,8,9,10,11,13,13,15,15]958; AVX2-SLOW-NEXT:    retq959;960; AVX2-FAST-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:961; AVX2-FAST:       # %bb.0:962; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15,18,19,18,19,22,23,22,23,26,27,26,27,30,31,30,31]963; AVX2-FAST-NEXT:    retq964;965; AVX512VL-SLOW-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:966; AVX512VL-SLOW:       # %bb.0:967; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7,9,9,11,11,12,13,14,15]968; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,5,7,7,8,9,10,11,13,13,15,15]969; AVX512VL-SLOW-NEXT:    retq970;971; AVX512VL-FAST-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:972; AVX512VL-FAST:       # %bb.0:973; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15,18,19,18,19,22,23,22,23,26,27,26,27,30,31,30,31]974; AVX512VL-FAST-NEXT:    retq975;976; XOPAVX1-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:977; XOPAVX1:       # %bb.0:978; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[1,1,3,3,4,5,6,7]979; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,5,7,7]980; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0981; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,3,3,4,5,6,7]982; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,7,7]983; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0984; XOPAVX1-NEXT:    retq985;986; XOPAVX2-LABEL: shuffle_v16i16_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15:987; XOPAVX2:       # %bb.0:988; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,1,3,3,4,5,6,7,9,9,11,11,12,13,14,15]989; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,5,7,7,8,9,10,11,13,13,15,15]990; XOPAVX2-NEXT:    retq991  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>992  ret <16 x i16> %shuffle993}994 995define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00(<16 x i16> %a, <16 x i16> %b) {996; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:997; AVX1:       # %bb.0:998; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]999; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]1000; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01001; AVX1-NEXT:    retq1002;1003; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:1004; AVX2-SLOW:       # %bb.0:1005; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]1006; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]1007; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1008; AVX2-SLOW-NEXT:    retq1009;1010; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:1011; AVX2-FAST-ALL:       # %bb.0:1012; AVX2-FAST-ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]1013; AVX2-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,0,1,0,0,0,1]1014; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]1015; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm01016; AVX2-FAST-ALL-NEXT:    retq1017;1018; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:1019; AVX2-FAST-PERLANE:       # %bb.0:1020; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1]1021; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1022; AVX2-FAST-PERLANE-NEXT:    retq1023;1024; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:1025; AVX512VL:       # %bb.0:1026; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0]1027; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1028; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01029; AVX512VL-NEXT:    retq1030;1031; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:1032; XOPAVX1:       # %bb.0:1033; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]1034; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]1035; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01036; XOPAVX1-NEXT:    retq1037;1038; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_00_00_00_00_00_00_01_00:1039; XOPAVX2:       # %bb.0:1040; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]1041; XOPAVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]1042; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1043; XOPAVX2-NEXT:    retq1044  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>1045  ret <16 x i16> %shuffle1046}1047 1048define <16 x i16> @shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00(<16 x i16> %a, <16 x i16> %b) {1049; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1050; AVX1:       # %bb.0:1051; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1052; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1053; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01054; AVX1-NEXT:    retq1055;1056; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1057; AVX2-SLOW:       # %bb.0:1058; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1059; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1060; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1061; AVX2-SLOW-NEXT:    retq1062;1063; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1064; AVX2-FAST-ALL:       # %bb.0:1065; AVX2-FAST-ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1066; AVX2-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,1,0,0,0,1,0]1067; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]1068; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm01069; AVX2-FAST-ALL-NEXT:    retq1070;1071; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1072; AVX2-FAST-PERLANE:       # %bb.0:1073; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,4,5,0,1,0,1]1074; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1075; AVX2-FAST-PERLANE-NEXT:    retq1076;1077; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1078; AVX512VL:       # %bb.0:1079; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0]1080; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1081; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01082; AVX512VL-NEXT:    retq1083;1084; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1085; XOPAVX1:       # %bb.0:1086; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1087; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1088; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01089; XOPAVX1-NEXT:    retq1090;1091; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_00_00_00_00_00_02_00_00:1092; XOPAVX2:       # %bb.0:1093; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1094; XOPAVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1095; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1096; XOPAVX2-NEXT:    retq1097  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>1098  ret <16 x i16> %shuffle1099}1100 1101define <16 x i16> @shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00(<16 x i16> %a, <16 x i16> %b) {1102; AVX1-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1103; AVX1:       # %bb.0:1104; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1105; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1106; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01107; AVX1-NEXT:    retq1108;1109; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1110; AVX2-SLOW:       # %bb.0:1111; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1112; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1113; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1114; AVX2-SLOW-NEXT:    retq1115;1116; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1117; AVX2-FAST-ALL:       # %bb.0:1118; AVX2-FAST-ALL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1119; AVX2-FAST-ALL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,1,0,0,0,1,0]1120; AVX2-FAST-ALL-NEXT:    # ymm1 = mem[0,1,0,1]1121; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm01122; AVX2-FAST-ALL-NEXT:    retq1123;1124; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1125; AVX2-FAST-PERLANE:       # %bb.0:1126; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,6,7,0,1,0,1,0,1]1127; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1128; AVX2-FAST-PERLANE-NEXT:    retq1129;1130; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1131; AVX512VL:       # %bb.0:1132; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0]1133; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1134; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01135; AVX512VL-NEXT:    retq1136;1137; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1138; XOPAVX1:       # %bb.0:1139; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1140; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1141; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01142; XOPAVX1-NEXT:    retq1143;1144; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_00_00_00_00_03_00_00_00:1145; XOPAVX2:       # %bb.0:1146; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1147; XOPAVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,0]1148; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1149; XOPAVX2-NEXT:    retq1150  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>1151  ret <16 x i16> %shuffle1152}1153 1154define <16 x i16> @shuffle_v16i16_00_00_00_04_00_00_00_00_00_00_00_04_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {1155; AVX1-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_00_00_00_04_00_00_00_00:1156; AVX1:       # %bb.0:1157; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]1158; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01159; AVX1-NEXT:    retq1160;1161; AVX2-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_00_00_00_04_00_00_00_00:1162; AVX2:       # %bb.0:1163; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]1164; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1165; AVX2-NEXT:    retq1166;1167; AVX512VL-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_00_00_00_04_00_00_00_00:1168; AVX512VL:       # %bb.0:1169; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0]1170; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1171; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01172; AVX512VL-NEXT:    retq1173;1174; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_00_00_00_04_00_00_00_00:1175; XOPAVX1:       # %bb.0:1176; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]1177; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01178; XOPAVX1-NEXT:    retq1179;1180; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_00_00_00_04_00_00_00_00:1181; XOPAVX2:       # %bb.0:1182; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]1183; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1184; XOPAVX2-NEXT:    retq1185  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>1186  ret <16 x i16> %shuffle1187}1188 1189define <16 x i16> @shuffle_v16i16_00_00_05_00_00_00_00_00_00_00_05_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {1190; AVX1-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_00_00_05_00_00_00_00_00:1191; AVX1:       # %bb.0:1192; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]1193; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01194; AVX1-NEXT:    retq1195;1196; AVX2-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_00_00_05_00_00_00_00_00:1197; AVX2:       # %bb.0:1198; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]1199; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1200; AVX2-NEXT:    retq1201;1202; AVX512VL-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_00_00_05_00_00_00_00_00:1203; AVX512VL:       # %bb.0:1204; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0]1205; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1206; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01207; AVX512VL-NEXT:    retq1208;1209; XOPAVX1-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_00_00_05_00_00_00_00_00:1210; XOPAVX1:       # %bb.0:1211; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]1212; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01213; XOPAVX1-NEXT:    retq1214;1215; XOPAVX2-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_00_00_05_00_00_00_00_00:1216; XOPAVX2:       # %bb.0:1217; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]1218; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1219; XOPAVX2-NEXT:    retq1220  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>1221  ret <16 x i16> %shuffle1222}1223 1224define <16 x i16> @shuffle_v16i16_00_06_00_00_00_00_00_00_00_06_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {1225; AVX1-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_00_06_00_00_00_00_00_00:1226; AVX1:       # %bb.0:1227; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]1228; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01229; AVX1-NEXT:    retq1230;1231; AVX2-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_00_06_00_00_00_00_00_00:1232; AVX2:       # %bb.0:1233; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]1234; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1235; AVX2-NEXT:    retq1236;1237; AVX512VL-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_00_06_00_00_00_00_00_00:1238; AVX512VL:       # %bb.0:1239; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0]1240; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1241; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01242; AVX512VL-NEXT:    retq1243;1244; XOPAVX1-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_00_06_00_00_00_00_00_00:1245; XOPAVX1:       # %bb.0:1246; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]1247; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01248; XOPAVX1-NEXT:    retq1249;1250; XOPAVX2-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_00_06_00_00_00_00_00_00:1251; XOPAVX2:       # %bb.0:1252; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]1253; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1254; XOPAVX2-NEXT:    retq1255  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1256  ret <16 x i16> %shuffle1257}1258 1259define <16 x i16> @shuffle_v16i16_07_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {1260; AVX1-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:1261; AVX1:       # %bb.0:1262; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1263; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01264; AVX1-NEXT:    retq1265;1266; AVX2-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:1267; AVX2:       # %bb.0:1268; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1269; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1270; AVX2-NEXT:    retq1271;1272; AVX512VL-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:1273; AVX512VL:       # %bb.0:1274; AVX512VL-NEXT:    vbroadcasti128 {{.*#+}} ymm1 = [7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]1275; AVX512VL-NEXT:    # ymm1 = mem[0,1,0,1]1276; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm01277; AVX512VL-NEXT:    retq1278;1279; XOPAVX1-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:1280; XOPAVX1:       # %bb.0:1281; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1282; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01283; XOPAVX1-NEXT:    retq1284;1285; XOPAVX2-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:1286; XOPAVX2:       # %bb.0:1287; XOPAVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1288; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,0,1]1289; XOPAVX2-NEXT:    retq1290  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1291  ret <16 x i16> %shuffle1292}1293 1294define <16 x i16> @shuffle_v16i16_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31(<16 x i16> %a, <16 x i16> %b) {1295; AVX1-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:1296; AVX1:       # %bb.0:1297; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0]1298; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm11299; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm01300; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01301; AVX1-NEXT:    retq1302;1303; AVX2OR512VL-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:1304; AVX2OR512VL:       # %bb.0:1305; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15]1306; AVX2OR512VL-NEXT:    retq1307;1308; XOPAVX1-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:1309; XOPAVX1:       # %bb.0:1310; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0]1311; XOPAVX1-NEXT:    vpcmov %ymm2, %ymm1, %ymm0, %ymm01312; XOPAVX1-NEXT:    retq1313;1314; XOPAVX2-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:1315; XOPAVX2:       # %bb.0:1316; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15]1317; XOPAVX2-NEXT:    retq1318  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>1319  ret <16 x i16> %shuffle1320}1321 1322define <16 x i16> @shuffle_v16i16_16_01_18_03_20_05_22_07_24_09_26_11_28_13_30_15(<16 x i16> %a, <16 x i16> %b) {1323; AVX1-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_24_09_26_11_28_13_30_15:1324; AVX1:       # %bb.0:1325; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0]1326; AVX1-NEXT:    vandnps %ymm0, %ymm2, %ymm01327; AVX1-NEXT:    vandps %ymm2, %ymm1, %ymm11328; AVX1-NEXT:    vorps %ymm0, %ymm1, %ymm01329; AVX1-NEXT:    retq1330;1331; AVX2OR512VL-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_24_09_26_11_28_13_30_15:1332; AVX2OR512VL:       # %bb.0:1333; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7],ymm1[8],ymm0[9],ymm1[10],ymm0[11],ymm1[12],ymm0[13],ymm1[14],ymm0[15]1334; AVX2OR512VL-NEXT:    retq1335;1336; XOPAVX1-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_24_09_26_11_28_13_30_15:1337; XOPAVX1:       # %bb.0:1338; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0,65535,0]1339; XOPAVX1-NEXT:    vpcmov %ymm2, %ymm0, %ymm1, %ymm01340; XOPAVX1-NEXT:    retq1341;1342; XOPAVX2-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_24_09_26_11_28_13_30_15:1343; XOPAVX2:       # %bb.0:1344; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7],ymm1[8],ymm0[9],ymm1[10],ymm0[11],ymm1[12],ymm0[13],ymm1[14],ymm0[15]1345; XOPAVX2-NEXT:    retq1346  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>1347  ret <16 x i16> %shuffle1348}1349 1350define <16 x i16> @shuffle_v16i16_00_01_18_19_04_05_22_23_08_09_26_27_12_13_30_31(<16 x i16> %a, <16 x i16> %b) {1351; ALL-LABEL: shuffle_v16i16_00_01_18_19_04_05_22_23_08_09_26_27_12_13_30_31:1352; ALL:       # %bb.0:1353; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]1354; ALL-NEXT:    retq1355  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 18, i32 19, i32 4, i32 5, i32 22, i32 23, i32 8, i32 9, i32 26, i32 27, i32 12, i32 13, i32 30, i32 31>1356  ret <16 x i16> %shuffle1357}1358 1359define <16 x i16> @shuffle_v16i16_16_17_18_19_04_05_06_07_24_25_26_27_12_13_14_15(<16 x i16> %a, <16 x i16> %b) {1360; ALL-LABEL: shuffle_v16i16_16_17_18_19_04_05_06_07_24_25_26_27_12_13_14_15:1361; ALL:       # %bb.0:1362; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1363; ALL-NEXT:    retq1364  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 12, i32 13, i32 14, i32 15>1365  ret <16 x i16> %shuffle1366}1367 1368define <16 x i16> @shuffle_v16i16_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_31(<16 x i16> %a, <16 x i16> %b) {1369; AVX1-LABEL: shuffle_v16i16_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_31:1370; AVX1:       # %bb.0:1371; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,0]1372; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm11373; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm01374; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01375; AVX1-NEXT:    retq1376;1377; AVX2OR512VL-LABEL: shuffle_v16i16_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_31:1378; AVX2OR512VL:       # %bb.0:1379; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]1380; AVX2OR512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1381; AVX2OR512VL-NEXT:    retq1382;1383; XOPAVX1-LABEL: shuffle_v16i16_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_31:1384; XOPAVX1:       # %bb.0:1385; XOPAVX1-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm01386; XOPAVX1-NEXT:    retq1387;1388; XOPAVX2-LABEL: shuffle_v16i16_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_31:1389; XOPAVX2:       # %bb.0:1390; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]1391; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]1392; XOPAVX2-NEXT:    retq1393  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 31>1394  ret <16 x i16> %shuffle1395}1396 1397define <16 x i16> @shuffle_v16i16_16_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15(<16 x i16> %a, <16 x i16> %b) {1398; AVX1-LABEL: shuffle_v16i16_16_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15:1399; AVX1:       # %bb.0:1400; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [0,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535]1401; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm11402; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm01403; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01404; AVX1-NEXT:    retq1405;1406; AVX2OR512VL-LABEL: shuffle_v16i16_16_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15:1407; AVX2OR512VL:       # %bb.0:1408; AVX2OR512VL-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm0[1,2,3,4,5,6,7]1409; AVX2OR512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1410; AVX2OR512VL-NEXT:    retq1411;1412; XOPAVX1-LABEL: shuffle_v16i16_16_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15:1413; XOPAVX1:       # %bb.0:1414; XOPAVX1-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm01415; XOPAVX1-NEXT:    retq1416;1417; XOPAVX2-LABEL: shuffle_v16i16_16_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15:1418; XOPAVX2:       # %bb.0:1419; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm0[1,2,3,4,5,6,7]1420; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]1421; XOPAVX2-NEXT:    retq1422  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1423  ret <16 x i16> %shuffle1424}1425 1426define <16 x i16> @shuffle_v16i16_00_17_02_19_04_21_06_23_24_09_26_11_28_13_30_15(<16 x i16> %a, <16 x i16> %b) {1427; AVX1-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_24_09_26_11_28_13_30_15:1428; AVX1:       # %bb.0:1429; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,0,65535,0,65535,0,65535,0,65535]1430; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm11431; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm01432; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01433; AVX1-NEXT:    retq1434;1435; AVX2-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_24_09_26_11_28_13_30_15:1436; AVX2:       # %bb.0:1437; AVX2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,0,65535,0,65535,0,65535,0,65535]1438; AVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01439; AVX2-NEXT:    retq1440;1441; AVX512VL-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_24_09_26_11_28_13_30_15:1442; AVX512VL:       # %bb.0:1443; AVX512VL-NEXT:    movw $21930, %ax # imm = 0x55AA1444; AVX512VL-NEXT:    kmovd %eax, %k11445; AVX512VL-NEXT:    vmovdqu16 %ymm1, %ymm0 {%k1}1446; AVX512VL-NEXT:    retq1447;1448; XOPAVX1-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_24_09_26_11_28_13_30_15:1449; XOPAVX1:       # %bb.0:1450; XOPAVX1-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm01451; XOPAVX1-NEXT:    retq1452;1453; XOPAVX2-LABEL: shuffle_v16i16_00_17_02_19_04_21_06_23_24_09_26_11_28_13_30_15:1454; XOPAVX2:       # %bb.0:1455; XOPAVX2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [65535,0,65535,0,65535,0,65535,0,0,65535,0,65535,0,65535,0,65535]1456; XOPAVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01457; XOPAVX2-NEXT:    retq1458  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>1459  ret <16 x i16> %shuffle1460}1461 1462define <16 x i16> @shuffle_v16i16_16_01_18_03_20_05_22_07_08_25_10_27_12_29_14_31(<16 x i16> %a, <16 x i16> %b) {1463; AVX1-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_08_25_10_27_12_29_14_31:1464; AVX1:       # %bb.0:1465; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [0,65535,0,65535,0,65535,0,65535,65535,0,65535,0,65535,0,65535,0]1466; AVX1-NEXT:    vandnps %ymm1, %ymm2, %ymm11467; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm01468; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm01469; AVX1-NEXT:    retq1470;1471; AVX2-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_08_25_10_27_12_29_14_31:1472; AVX2:       # %bb.0:1473; AVX2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,65535,0,65535,0,65535,0,65535,65535,0,65535,0,65535,0,65535,0]1474; AVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01475; AVX2-NEXT:    retq1476;1477; AVX512VL-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_08_25_10_27_12_29_14_31:1478; AVX512VL:       # %bb.0:1479; AVX512VL-NEXT:    movw $-21931, %ax # imm = 0xAA551480; AVX512VL-NEXT:    kmovd %eax, %k11481; AVX512VL-NEXT:    vmovdqu16 %ymm1, %ymm0 {%k1}1482; AVX512VL-NEXT:    retq1483;1484; XOPAVX1-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_08_25_10_27_12_29_14_31:1485; XOPAVX1:       # %bb.0:1486; XOPAVX1-NEXT:    vpcmov {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm0, %ymm01487; XOPAVX1-NEXT:    retq1488;1489; XOPAVX2-LABEL: shuffle_v16i16_16_01_18_03_20_05_22_07_08_25_10_27_12_29_14_31:1490; XOPAVX2:       # %bb.0:1491; XOPAVX2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,65535,0,65535,0,65535,0,65535,65535,0,65535,0,65535,0,65535,0]1492; XOPAVX2-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm01493; XOPAVX2-NEXT:    retq1494  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>1495  ret <16 x i16> %shuffle1496}1497 1498define <16 x i16> @shuffle_v16i16_00_01_18_19_20_21_06_07_08_09_26_27_12_13_30_31(<16 x i16> %a, <16 x i16> %b) {1499; ALL-LABEL: shuffle_v16i16_00_01_18_19_20_21_06_07_08_09_26_27_12_13_30_31:1500; ALL:       # %bb.0:1501; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3,4],ymm1[5],ymm0[6],ymm1[7]1502; ALL-NEXT:    retq1503  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 18, i32 19, i32 20, i32 21, i32 6, i32 7, i32 8, i32 9, i32 26, i32 27, i32 12, i32 13, i32 30, i32 31>1504  ret <16 x i16> %shuffle1505}1506 1507define <16 x i16> @shuffle_v16i16_00_16_00_16_00_16_00_16_00_16_00_16_00_16_00_16(<16 x i16> %a, <16 x i16> %b) {1508; AVX1-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_00_16_00_16_00_16_00_16:1509; AVX1:       # %bb.0:1510; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1511; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]1512; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01513; AVX1-NEXT:    retq1514;1515; AVX2OR512VL-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_00_16_00_16_00_16_00_16:1516; AVX2OR512VL:       # %bb.0:1517; AVX2OR512VL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1518; AVX2OR512VL-NEXT:    vpbroadcastd %xmm0, %ymm01519; AVX2OR512VL-NEXT:    retq1520;1521; XOPAVX1-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_00_16_00_16_00_16_00_16:1522; XOPAVX1:       # %bb.0:1523; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1524; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]1525; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm01526; XOPAVX1-NEXT:    retq1527;1528; XOPAVX2-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_00_16_00_16_00_16_00_16:1529; XOPAVX2:       # %bb.0:1530; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1531; XOPAVX2-NEXT:    vpbroadcastd %xmm0, %ymm01532; XOPAVX2-NEXT:    retq1533  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 0, i32 16>1534  ret <16 x i16> %shuffle1535}1536 1537define <16 x i16> @shuffle_v16i16_00_16_00_16_00_16_00_16_08_24_08_24_08_24_08_24(<16 x i16> %a, <16 x i16> %b) {1538; AVX1-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_08_24_08_24_08_24_08_24:1539; AVX1:       # %bb.0:1540; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21541; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31542; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]1543; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1544; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01545; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]1546; AVX1-NEXT:    retq1547;1548; AVX2-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_08_24_08_24_08_24_08_24:1549; AVX2:       # %bb.0:1550; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]1551; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]1552; AVX2-NEXT:    retq1553;1554; AVX512VL-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_08_24_08_24_08_24_08_24:1555; AVX512VL:       # %bb.0:1556; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,16,0,16,0,16,0,16,8,24,8,24,8,24,8,24]1557; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm01558; AVX512VL-NEXT:    retq1559;1560; XOPAVX1-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_08_24_08_24_08_24_08_24:1561; XOPAVX1:       # %bb.0:1562; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm21563; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31564; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]1565; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1566; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01567; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]1568; XOPAVX1-NEXT:    retq1569;1570; XOPAVX2-LABEL: shuffle_v16i16_00_16_00_16_00_16_00_16_08_24_08_24_08_24_08_24:1571; XOPAVX2:       # %bb.0:1572; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]1573; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4]1574; XOPAVX2-NEXT:    retq1575  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 0, i32 16, i32 8, i32 24, i32 8, i32 24, i32 8, i32 24, i32 8, i32 24>1576  ret <16 x i16> %shuffle1577}1578 1579define <16 x i16> @shuffle_v16i16_16_16_16_16_04_05_06_07_24_24_24_24_12_13_14_15(<16 x i16> %a, <16 x i16> %b) {1580; AVX1-LABEL: shuffle_v16i16_16_16_16_16_04_05_06_07_24_24_24_24_12_13_14_15:1581; AVX1:       # %bb.0:1582; AVX1-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm1[0,0,0,0,4,5,6,7]1583; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11584; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]1585; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm11586; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1587; AVX1-NEXT:    retq1588;1589; AVX2-LABEL: shuffle_v16i16_16_16_16_16_04_05_06_07_24_24_24_24_12_13_14_15:1590; AVX2:       # %bb.0:1591; AVX2-NEXT:    vpshuflw {{.*#+}} ymm1 = ymm1[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]1592; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1593; AVX2-NEXT:    retq1594;1595; AVX512VL-LABEL: shuffle_v16i16_16_16_16_16_04_05_06_07_24_24_24_24_12_13_14_15:1596; AVX512VL:       # %bb.0:1597; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,0,0,0,20,21,22,23,8,8,8,8,28,29,30,31]1598; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm21599; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm01600; AVX512VL-NEXT:    retq1601;1602; XOPAVX1-LABEL: shuffle_v16i16_16_16_16_16_04_05_06_07_24_24_24_24_12_13_14_15:1603; XOPAVX1:       # %bb.0:1604; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21605; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31606; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,1,0,1,0,1,0,1,24,25,26,27,28,29,30,31]1607; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm21608; XOPAVX1-NEXT:    vpperm %xmm4, %xmm0, %xmm1, %xmm01609; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01610; XOPAVX1-NEXT:    retq1611;1612; XOPAVX2-LABEL: shuffle_v16i16_16_16_16_16_04_05_06_07_24_24_24_24_12_13_14_15:1613; XOPAVX2:       # %bb.0:1614; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm1 = ymm1[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]1615; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1616; XOPAVX2-NEXT:    retq1617  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 16, i32 16, i32 16, i32 4, i32 5, i32 6, i32 7, i32 24, i32 24, i32 24, i32 24, i32 12, i32 13, i32 14, i32 15>1618  ret <16 x i16> %shuffle1619}1620 1621define <16 x i16> @shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12(<16 x i16> %a, <16 x i16> %b) {1622; AVX1-LABEL: shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12:1623; AVX1:       # %bb.0:1624; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21625; AVX1-NEXT:    vpshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]1626; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31627; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]1628; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]1629; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]1630; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]1631; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]1632; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01633; AVX1-NEXT:    retq1634;1635; AVX2-SLOW-LABEL: shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12:1636; AVX2-SLOW:       # %bb.0:1637; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1638; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1639; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12]1640; AVX2-SLOW-NEXT:    retq1641;1642; AVX2-FAST-LABEL: shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12:1643; AVX2-FAST:       # %bb.0:1644; AVX2-FAST-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1645; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,4,5,2,3,0,1,14,15,12,13,10,11,8,9,22,23,20,21,18,19,16,17,30,31,28,29,26,27,24,25]1646; AVX2-FAST-NEXT:    retq1647;1648; AVX512VL-LABEL: shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12:1649; AVX512VL:       # %bb.0:1650; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [3,2,1,0,23,22,21,20,11,10,9,8,31,30,29,28]1651; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm21652; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm01653; AVX512VL-NEXT:    retq1654;1655; XOPAVX1-LABEL: shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12:1656; XOPAVX1:       # %bb.0:1657; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21658; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31659; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [6,7,4,5,2,3,0,1,30,31,28,29,26,27,24,25]1660; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm21661; XOPAVX1-NEXT:    vpperm %xmm4, %xmm0, %xmm1, %xmm01662; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01663; XOPAVX1-NEXT:    retq1664;1665; XOPAVX2-LABEL: shuffle_v16i16_19_18_17_16_07_06_05_04_27_26_25_24_15_14_13_12:1666; XOPAVX2:       # %bb.0:1667; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]1668; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1669; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12]1670; XOPAVX2-NEXT:    retq1671  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 19, i32 18, i32 17, i32 16, i32 7, i32 6, i32 5, i32 4, i32 27, i32 26, i32 25, i32 24, i32 15, i32 14, i32 13, i32 12>1672  ret <16 x i16> %shuffle1673}1674 1675define <16 x i16> @shuffle_v16i16_19_18_17_16_03_02_01_00_27_26_25_24_11_10_09_08(<16 x i16> %a, <16 x i16> %b) {1676; AVX1-LABEL: shuffle_v16i16_19_18_17_16_03_02_01_00_27_26_25_24_11_10_09_08:1677; AVX1:       # %bb.0:1678; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21679; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31680; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]1681; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [12,13,8,9,4,5,0,1,14,15,10,11,6,7,2,3]1682; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm21683; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]1684; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm01685; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01686; AVX1-NEXT:    retq1687;1688; AVX2-LABEL: shuffle_v16i16_19_18_17_16_03_02_01_00_27_26_25_24_11_10_09_08:1689; AVX2:       # %bb.0:1690; AVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1691; AVX2-NEXT:    vpshuflw {{.*#+}} ymm1 = ymm1[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1692; AVX2-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]1693; AVX2-NEXT:    retq1694;1695; AVX512VL-LABEL: shuffle_v16i16_19_18_17_16_03_02_01_00_27_26_25_24_11_10_09_08:1696; AVX512VL:       # %bb.0:1697; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [3,2,1,0,19,18,17,16,11,10,9,8,27,26,25,24]1698; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm21699; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm01700; AVX512VL-NEXT:    retq1701;1702; XOPAVX1-LABEL: shuffle_v16i16_19_18_17_16_03_02_01_00_27_26_25_24_11_10_09_08:1703; XOPAVX1:       # %bb.0:1704; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm21705; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31706; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [6,7,4,5,2,3,0,1,22,23,20,21,18,19,16,17]1707; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm21708; XOPAVX1-NEXT:    vpperm %xmm4, %xmm0, %xmm1, %xmm01709; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01710; XOPAVX1-NEXT:    retq1711;1712; XOPAVX2-LABEL: shuffle_v16i16_19_18_17_16_03_02_01_00_27_26_25_24_11_10_09_08:1713; XOPAVX2:       # %bb.0:1714; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1715; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm1 = ymm1[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]1716; XOPAVX2-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2]1717; XOPAVX2-NEXT:    retq1718  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 19, i32 18, i32 17, i32 16, i32 3, i32 2, i32 1, i32 0, i32 27, i32 26, i32 25, i32 24, i32 11, i32 10, i32 9, i32 8>1719  ret <16 x i16> %shuffle1720}1721 1722define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08(<16 x i16> %a, <16 x i16> %b) {1723; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1724; AVX1:       # %bb.0:1725; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,1,0,4,5,6,7]1726; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01727; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]1728; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01729; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]1730; AVX1-NEXT:    retq1731;1732; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1733; AVX2-SLOW:       # %bb.0:1734; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,1,0,4,5,6,7,8,8,9,8,12,13,14,15]1735; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]1736; AVX2-SLOW-NEXT:    retq1737;1738; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1739; AVX2-FAST:       # %bb.0:1740; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1,16,17,16,17,16,17,16,17,16,17,16,17,18,19,16,17]1741; AVX2-FAST-NEXT:    retq1742;1743; AVX512VL-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1744; AVX512VL-SLOW:       # %bb.0:1745; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,1,0,4,5,6,7,8,8,9,8,12,13,14,15]1746; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]1747; AVX512VL-SLOW-NEXT:    retq1748;1749; AVX512VL-FAST-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1750; AVX512VL-FAST:       # %bb.0:1751; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1,16,17,16,17,16,17,16,17,16,17,16,17,18,19,16,17]1752; AVX512VL-FAST-NEXT:    retq1753;1754; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1755; XOPAVX1:       # %bb.0:1756; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,1,0,4,5,6,7]1757; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01758; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,1,0,4,5,6,7]1759; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01760; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]1761; XOPAVX1-NEXT:    retq1762;1763; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_08_08_08_08_08_09_08:1764; XOPAVX2:       # %bb.0:1765; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,1,0,4,5,6,7,8,8,9,8,12,13,14,15]1766; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,0,1,4,4,4,5]1767; XOPAVX2-NEXT:    retq1768  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 9, i32 8>1769  ret <16 x i16> %shuffle1770}1771 1772define <16 x i16> @shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08(<16 x i16> %a, <16 x i16> %b) {1773; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1774; AVX1:       # %bb.0:1775; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,2,4,5,6,7]1776; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01777; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1778; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01779; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1780; AVX1-NEXT:    retq1781;1782; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1783; AVX2-SLOW:       # %bb.0:1784; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,2,4,5,6,7,8,8,8,10,12,13,14,15]1785; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1786; AVX2-SLOW-NEXT:    retq1787;1788; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1789; AVX2-FAST:       # %bb.0:1790; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,4,5,0,1,0,1,16,17,16,17,16,17,16,17,16,17,20,21,16,17,16,17]1791; AVX2-FAST-NEXT:    retq1792;1793; AVX512VL-SLOW-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1794; AVX512VL-SLOW:       # %bb.0:1795; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,2,4,5,6,7,8,8,8,10,12,13,14,15]1796; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1797; AVX512VL-SLOW-NEXT:    retq1798;1799; AVX512VL-FAST-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1800; AVX512VL-FAST:       # %bb.0:1801; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,4,5,0,1,0,1,16,17,16,17,16,17,16,17,16,17,20,21,16,17,16,17]1802; AVX512VL-FAST-NEXT:    retq1803;1804; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1805; XOPAVX1:       # %bb.0:1806; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,2,4,5,6,7]1807; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01808; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,2,4,5,6,7]1809; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01810; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1811; XOPAVX1-NEXT:    retq1812;1813; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_08_08_08_10_08_08:1814; XOPAVX2:       # %bb.0:1815; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,2,4,5,6,7,8,8,8,10,12,13,14,15]1816; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1817; XOPAVX2-NEXT:    retq1818  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 10, i32 8, i32 8>1819  ret <16 x i16> %shuffle1820}1821 1822define <16 x i16> @shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08(<16 x i16> %a, <16 x i16> %b) {1823; AVX1-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1824; AVX1:       # %bb.0:1825; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,3,0,4,5,6,7]1826; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01827; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1828; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01829; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1830; AVX1-NEXT:    retq1831;1832; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1833; AVX2-SLOW:       # %bb.0:1834; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,3,0,4,5,6,7,8,8,11,8,12,13,14,15]1835; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1836; AVX2-SLOW-NEXT:    retq1837;1838; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1839; AVX2-FAST:       # %bb.0:1840; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,6,7,0,1,0,1,0,1,16,17,16,17,16,17,16,17,22,23,16,17,16,17,16,17]1841; AVX2-FAST-NEXT:    retq1842;1843; AVX512VL-SLOW-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1844; AVX512VL-SLOW:       # %bb.0:1845; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,3,0,4,5,6,7,8,8,11,8,12,13,14,15]1846; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1847; AVX512VL-SLOW-NEXT:    retq1848;1849; AVX512VL-FAST-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1850; AVX512VL-FAST:       # %bb.0:1851; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,6,7,0,1,0,1,0,1,16,17,16,17,16,17,16,17,22,23,16,17,16,17,16,17]1852; AVX512VL-FAST-NEXT:    retq1853;1854; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1855; XOPAVX1:       # %bb.0:1856; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,3,0,4,5,6,7]1857; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm01858; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,0,4,5,6,7]1859; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm01860; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1861; XOPAVX1-NEXT:    retq1862;1863; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_08_11_08_08_08:1864; XOPAVX2:       # %bb.0:1865; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,3,0,4,5,6,7,8,8,11,8,12,13,14,15]1866; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,0,4,4,5,4]1867; XOPAVX2-NEXT:    retq1868  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 11, i32 8, i32 8, i32 8>1869  ret <16 x i16> %shuffle1870}1871 1872define <16 x i16> @shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_12_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {1873; AVX1-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_12_08_08_08_08:1874; AVX1:       # %bb.0:1875; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11876; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]1877; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11878; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01879; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01880; AVX1-NEXT:    retq1881;1882; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_12_08_08_08_08:1883; AVX2OR512VL:       # %bb.0:1884; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,24,25,16,17,16,17,16,17,16,17]1885; AVX2OR512VL-NEXT:    retq1886;1887; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_12_08_08_08_08:1888; XOPAVX1:       # %bb.0:1889; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11890; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]1891; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11892; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01893; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01894; XOPAVX1-NEXT:    retq1895;1896; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_12_08_08_08_08:1897; XOPAVX2:       # %bb.0:1898; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,24,25,16,17,16,17,16,17,16,17]1899; XOPAVX2-NEXT:    retq1900  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 12, i32 8, i32 8, i32 8, i32 8>1901  ret <16 x i16> %shuffle1902}1903 1904define <16 x i16> @shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_13_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {1905; AVX1-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_13_08_08_08_08_08:1906; AVX1:       # %bb.0:1907; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11908; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]1909; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11910; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01911; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01912; AVX1-NEXT:    retq1913;1914; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_13_08_08_08_08_08:1915; AVX2OR512VL:       # %bb.0:1916; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1,16,17,16,17,26,27,16,17,16,17,16,17,16,17,16,17]1917; AVX2OR512VL-NEXT:    retq1918;1919; XOPAVX1-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_13_08_08_08_08_08:1920; XOPAVX1:       # %bb.0:1921; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11922; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]1923; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11924; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01925; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01926; XOPAVX1-NEXT:    retq1927;1928; XOPAVX2-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_13_08_08_08_08_08:1929; XOPAVX2:       # %bb.0:1930; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1,16,17,16,17,26,27,16,17,16,17,16,17,16,17,16,17]1931; XOPAVX2-NEXT:    retq1932  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 13, i32 8, i32 8, i32 8, i32 8, i32 8>1933  ret <16 x i16> %shuffle1934}1935 1936define <16 x i16> @shuffle_v16i16_00_06_00_00_00_00_00_00_08_14_08_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {1937; AVX1-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_14_08_08_08_08_08_08:1938; AVX1:       # %bb.0:1939; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11940; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]1941; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11942; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01943; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01944; AVX1-NEXT:    retq1945;1946; AVX2OR512VL-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_14_08_08_08_08_08_08:1947; AVX2OR512VL:       # %bb.0:1948; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1,16,17,28,29,16,17,16,17,16,17,16,17,16,17,16,17]1949; AVX2OR512VL-NEXT:    retq1950;1951; XOPAVX1-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_14_08_08_08_08_08_08:1952; XOPAVX1:       # %bb.0:1953; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11954; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]1955; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11956; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01957; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01958; XOPAVX1-NEXT:    retq1959;1960; XOPAVX2-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_14_08_08_08_08_08_08:1961; XOPAVX2:       # %bb.0:1962; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1,16,17,28,29,16,17,16,17,16,17,16,17,16,17,16,17]1963; XOPAVX2-NEXT:    retq1964  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 14, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1965  ret <16 x i16> %shuffle1966}1967 1968define <16 x i16> @shuffle_v16i16_07_00_00_00_00_00_00_00_15_08_08_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {1969; AVX1-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_15_08_08_08_08_08_08_08:1970; AVX1:       # %bb.0:1971; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11972; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1973; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11974; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01975; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01976; AVX1-NEXT:    retq1977;1978; AVX2OR512VL-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_15_08_08_08_08_08_08_08:1979; AVX2OR512VL:       # %bb.0:1980; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1,30,31,16,17,16,17,16,17,16,17,16,17,16,17,16,17]1981; AVX2OR512VL-NEXT:    retq1982;1983; XOPAVX1-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_15_08_08_08_08_08_08_08:1984; XOPAVX1:       # %bb.0:1985; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm11986; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]1987; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11988; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01989; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm01990; XOPAVX1-NEXT:    retq1991;1992; XOPAVX2-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_15_08_08_08_08_08_08_08:1993; XOPAVX2:       # %bb.0:1994; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1,30,31,16,17,16,17,16,17,16,17,16,17,16,17,16,17]1995; XOPAVX2-NEXT:    retq1996  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 15, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1997  ret <16 x i16> %shuffle1998}1999 2000define <16 x i16> @shuffle_v16i16_00_16_01_17_02_18_03_19_08_24_09_25_10_26_11_27(<16 x i16> %a, <16 x i16> %b) {2001; AVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_08_24_09_25_10_26_11_27:2002; AVX1:       # %bb.0:2003; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22004; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32005; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]2006; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2007; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02008; AVX1-NEXT:    retq2009;2010; AVX2OR512VL-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_08_24_09_25_10_26_11_27:2011; AVX2OR512VL:       # %bb.0:2012; AVX2OR512VL-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]2013; AVX2OR512VL-NEXT:    retq2014;2015; XOPAVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_08_24_09_25_10_26_11_27:2016; XOPAVX1:       # %bb.0:2017; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22018; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32019; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]2020; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2021; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02022; XOPAVX1-NEXT:    retq2023;2024; XOPAVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_08_24_09_25_10_26_11_27:2025; XOPAVX2:       # %bb.0:2026; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]2027; XOPAVX2-NEXT:    retq2028  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>2029  ret <16 x i16> %shuffle2030}2031 2032define <16 x i16> @shuffle_v16i16_04_20_05_21_06_22_07_23_12_28_13_29_14_30_15_31(<16 x i16> %a, <16 x i16> %b) {2033; AVX1-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_12_28_13_29_14_30_15_31:2034; AVX1:       # %bb.0:2035; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22036; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32037; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2038; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2039; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02040; AVX1-NEXT:    retq2041;2042; AVX2OR512VL-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_12_28_13_29_14_30_15_31:2043; AVX2OR512VL:       # %bb.0:2044; AVX2OR512VL-NEXT:    vpunpckhwd {{.*#+}} ymm0 = ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15]2045; AVX2OR512VL-NEXT:    retq2046;2047; XOPAVX1-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_12_28_13_29_14_30_15_31:2048; XOPAVX1:       # %bb.0:2049; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22050; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32051; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2052; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2053; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02054; XOPAVX1-NEXT:    retq2055;2056; XOPAVX2-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_12_28_13_29_14_30_15_31:2057; XOPAVX2:       # %bb.0:2058; XOPAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm0 = ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15]2059; XOPAVX2-NEXT:    retq2060  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>2061  ret <16 x i16> %shuffle2062}2063 2064define <16 x i16> @shuffle_v16i16_00_16_01_17_02_18_03_19_12_28_13_29_14_30_15_31(<16 x i16> %a, <16 x i16> %b) {2065; AVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_12_28_13_29_14_30_15_31:2066; AVX1:       # %bb.0:2067; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22068; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32069; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2070; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2071; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02072; AVX1-NEXT:    retq2073;2074; AVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_12_28_13_29_14_30_15_31:2075; AVX2:       # %bb.0:2076; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,1,3,3]2077; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,3,3]2078; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]2079; AVX2-NEXT:    retq2080;2081; AVX512VL-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_12_28_13_29_14_30_15_31:2082; AVX512VL:       # %bb.0:2083; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,16,1,17,2,18,3,19,12,28,13,29,14,30,15,31]2084; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02085; AVX512VL-NEXT:    retq2086;2087; XOPAVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_12_28_13_29_14_30_15_31:2088; XOPAVX1:       # %bb.0:2089; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22090; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32091; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]2092; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2093; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02094; XOPAVX1-NEXT:    retq2095;2096; XOPAVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_12_28_13_29_14_30_15_31:2097; XOPAVX2:       # %bb.0:2098; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,1,3,3]2099; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,1,3,3]2100; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]2101; XOPAVX2-NEXT:    retq2102  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>2103  ret <16 x i16> %shuffle2104}2105 2106define <16 x i16> @shuffle_v16i16_04_20_05_21_06_22_07_23_08_24_09_25_10_26_11_27(<16 x i16> %a, <16 x i16> %b) {2107; AVX1-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_08_24_09_25_10_26_11_27:2108; AVX1:       # %bb.0:2109; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22110; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32111; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]2112; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2113; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02114; AVX1-NEXT:    retq2115;2116; AVX2-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_08_24_09_25_10_26_11_27:2117; AVX2:       # %bb.0:2118; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[1,1,2,3]2119; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,1,2,3]2120; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]2121; AVX2-NEXT:    retq2122;2123; AVX512VL-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_08_24_09_25_10_26_11_27:2124; AVX512VL:       # %bb.0:2125; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,20,5,21,6,22,7,23,8,24,9,25,10,26,11,27]2126; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02127; AVX512VL-NEXT:    retq2128;2129; XOPAVX1-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_08_24_09_25_10_26_11_27:2130; XOPAVX1:       # %bb.0:2131; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm22132; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm32133; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]2134; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2135; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02136; XOPAVX1-NEXT:    retq2137;2138; XOPAVX2-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_23_08_24_09_25_10_26_11_27:2139; XOPAVX2:       # %bb.0:2140; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[1,1,2,3]2141; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,1,2,3]2142; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]2143; XOPAVX2-NEXT:    retq2144  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>2145  ret <16 x i16> %shuffle2146}2147 2148define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_01_00_08_09_08_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {2149; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_09_08_08_08_08_08_08:2150; AVX1:       # %bb.0:2151; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,1,0,4,5,6,7]2152; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,1]2153; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02154; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,0,0,4,5,6,7]2155; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,1,1]2156; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02157; AVX1-NEXT:    retq2158;2159; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_09_08_08_08_08_08_08:2160; AVX2OR512VL:       # %bb.0:2161; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1,16,17,18,19,16,17,16,17,16,17,16,17,16,17,16,17]2162; AVX2OR512VL-NEXT:    retq2163;2164; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_09_08_08_08_08_08_08:2165; XOPAVX1:       # %bb.0:2166; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,1,0,4,5,6,7]2167; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,1]2168; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02169; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,1,0,0,4,5,6,7]2170; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,1,1]2171; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02172; XOPAVX1-NEXT:    retq2173;2174; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_01_00_08_09_08_08_08_08_08_08:2175; XOPAVX2:       # %bb.0:2176; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1,16,17,18,19,16,17,16,17,16,17,16,17,16,17,16,17]2177; XOPAVX2-NEXT:    retq2178  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 8, i32 9, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>2179  ret <16 x i16> %shuffle2180}2181 2182define <16 x i16> @shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_10_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {2183; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_10_08_08_08_08_08:2184; AVX1:       # %bb.0:2185; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,2,4,5,6,7]2186; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,0]2187; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02188; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,2,0,4,5,6,7]2189; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,0]2190; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02191; AVX1-NEXT:    retq2192;2193; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_10_08_08_08_08_08:2194; AVX2OR512VL:       # %bb.0:2195; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,4,5,0,1,0,1,16,17,16,17,20,21,16,17,16,17,16,17,16,17,16,17]2196; AVX2OR512VL-NEXT:    retq2197;2198; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_10_08_08_08_08_08:2199; XOPAVX1:       # %bb.0:2200; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,2,4,5,6,7]2201; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,0]2202; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02203; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,2,0,4,5,6,7]2204; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,0]2205; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02206; XOPAVX1-NEXT:    retq2207;2208; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_02_00_00_08_08_10_08_08_08_08_08:2209; XOPAVX2:       # %bb.0:2210; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,4,5,0,1,0,1,16,17,16,17,20,21,16,17,16,17,16,17,16,17,16,17]2211; XOPAVX2-NEXT:    retq2212  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0, i32 8, i32 8, i32 10, i32 8, i32 8, i32 8, i32 8, i32 8>2213  ret <16 x i16> %shuffle2214}2215 2216define <16 x i16> @shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_11_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {2217; AVX1-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_11_08_08_08_08:2218; AVX1:       # %bb.0:2219; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,3,0,4,5,6,7]2220; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,0]2221; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02222; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,3,4,5,6,7]2223; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,0]2224; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02225; AVX1-NEXT:    retq2226;2227; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_11_08_08_08_08:2228; AVX2OR512VL:       # %bb.0:2229; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,6,7,0,1,0,1,0,1,16,17,16,17,16,17,22,23,16,17,16,17,16,17,16,17]2230; AVX2OR512VL-NEXT:    retq2231;2232; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_11_08_08_08_08:2233; XOPAVX1:       # %bb.0:2234; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,3,0,4,5,6,7]2235; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,0]2236; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02237; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,3,4,5,6,7]2238; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,0]2239; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02240; XOPAVX1-NEXT:    retq2241;2242; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_03_00_00_00_08_08_08_11_08_08_08_08:2243; XOPAVX2:       # %bb.0:2244; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,6,7,0,1,0,1,0,1,16,17,16,17,16,17,22,23,16,17,16,17,16,17,16,17]2245; XOPAVX2-NEXT:    retq2246  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 11, i32 8, i32 8, i32 8, i32 8>2247  ret <16 x i16> %shuffle2248}2249 2250define <16 x i16> @shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_08_12_08_08_08(<16 x i16> %a, <16 x i16> %b) {2251; AVX1-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_08_12_08_08_08:2252; AVX1:       # %bb.0:2253; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]2254; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02255; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,0,1,0,1,0,1]2256; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02257; AVX1-NEXT:    retq2258;2259; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_08_12_08_08_08:2260; AVX2OR512VL:       # %bb.0:2261; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,24,25,16,17,16,17,16,17]2262; AVX2OR512VL-NEXT:    retq2263;2264; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_08_12_08_08_08:2265; XOPAVX1:       # %bb.0:2266; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1]2267; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02268; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,0,1,0,1,0,1]2269; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02270; XOPAVX1-NEXT:    retq2271;2272; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_04_00_00_00_00_08_08_08_08_12_08_08_08:2273; XOPAVX2:       # %bb.0:2274; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,24,25,16,17,16,17,16,17]2275; XOPAVX2-NEXT:    retq2276  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 12, i32 8, i32 8, i32 8>2277  ret <16 x i16> %shuffle2278}2279 2280define <16 x i16> @shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_08_08_08_13_08_08(<16 x i16> %a, <16 x i16> %b) {2281; AVX1-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_08_08_08_13_08_08:2282; AVX1:       # %bb.0:2283; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]2284; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02285; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,10,11,0,1,0,1]2286; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02287; AVX1-NEXT:    retq2288;2289; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_08_08_08_13_08_08:2290; AVX2OR512VL:       # %bb.0:2291; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,26,27,16,17,16,17]2292; AVX2OR512VL-NEXT:    retq2293;2294; XOPAVX1-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_08_08_08_13_08_08:2295; XOPAVX1:       # %bb.0:2296; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1]2297; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02298; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,10,11,0,1,0,1]2299; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02300; XOPAVX1-NEXT:    retq2301;2302; XOPAVX2-LABEL: shuffle_v16i16_00_00_05_00_00_00_00_00_08_08_08_08_08_13_08_08:2303; XOPAVX2:       # %bb.0:2304; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,10,11,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,26,27,16,17,16,17]2305; XOPAVX2-NEXT:    retq2306  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 13, i32 8, i32 8>2307  ret <16 x i16> %shuffle2308}2309 2310define <16 x i16> @shuffle_v16i16_00_06_00_00_00_00_00_00_08_08_08_08_08_08_14_08(<16 x i16> %a, <16 x i16> %b) {2311; AVX1-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_08_08_08_08_08_14_08:2312; AVX1:       # %bb.0:2313; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]2314; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02315; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,12,13,0,1]2316; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02317; AVX1-NEXT:    retq2318;2319; AVX2OR512VL-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_08_08_08_08_08_14_08:2320; AVX2OR512VL:       # %bb.0:2321; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,28,29,16,17]2322; AVX2OR512VL-NEXT:    retq2323;2324; XOPAVX1-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_08_08_08_08_08_14_08:2325; XOPAVX1:       # %bb.0:2326; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1]2327; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02328; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,12,13,0,1]2329; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02330; XOPAVX1-NEXT:    retq2331;2332; XOPAVX2-LABEL: shuffle_v16i16_00_06_00_00_00_00_00_00_08_08_08_08_08_08_14_08:2333; XOPAVX2:       # %bb.0:2334; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,12,13,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,28,29,16,17]2335; XOPAVX2-NEXT:    retq2336  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 14, i32 8>2337  ret <16 x i16> %shuffle2338}2339 2340define <16 x i16> @shuffle_v16i16_07_00_00_00_00_00_00_00_08_08_08_08_08_08_08_15(<16 x i16> %a, <16 x i16> %b) {2341; AVX1-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_08_08_08_08_08_08_08_15:2342; AVX1:       # %bb.0:2343; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]2344; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02345; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,14,15]2346; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02347; AVX1-NEXT:    retq2348;2349; AVX2OR512VL-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_08_08_08_08_08_08_08_15:2350; AVX2OR512VL:       # %bb.0:2351; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,30,31]2352; AVX2OR512VL-NEXT:    retq2353;2354; XOPAVX1-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_08_08_08_08_08_08_08_15:2355; XOPAVX1:       # %bb.0:2356; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1]2357; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02358; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,14,15]2359; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02360; XOPAVX1-NEXT:    retq2361;2362; XOPAVX2-LABEL: shuffle_v16i16_07_00_00_00_00_00_00_00_08_08_08_08_08_08_08_15:2363; XOPAVX2:       # %bb.0:2364; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,0,1,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,30,31]2365; XOPAVX2-NEXT:    retq2366  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 15>2367  ret <16 x i16> %shuffle2368}2369 2370define <16 x i16> @shuffle_v16i16_00_00_02_02_04_04_06_06_14_14_12_12_10_10_08_08(<16 x i16> %a, <16 x i16> %b) {2371; AVX1-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_14_14_12_12_10_10_08_08:2372; AVX1:       # %bb.0:2373; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,2,2,4,5,6,7]2374; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,6,6]2375; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02376; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,8,9,8,9,4,5,4,5,0,1,0,1]2377; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02378; AVX1-NEXT:    retq2379;2380; AVX2OR512VL-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_14_14_12_12_10_10_08_08:2381; AVX2OR512VL:       # %bb.0:2382; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13,28,29,28,29,24,25,24,25,20,21,20,21,16,17,16,17]2383; AVX2OR512VL-NEXT:    retq2384;2385; XOPAVX1-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_14_14_12_12_10_10_08_08:2386; XOPAVX1:       # %bb.0:2387; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,2,2,4,5,6,7]2388; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,6,6]2389; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02390; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,8,9,8,9,4,5,4,5,0,1,0,1]2391; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02392; XOPAVX1-NEXT:    retq2393;2394; XOPAVX2-LABEL: shuffle_v16i16_00_00_02_02_04_04_06_06_14_14_12_12_10_10_08_08:2395; XOPAVX2:       # %bb.0:2396; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13,28,29,28,29,24,25,24,25,20,21,20,21,16,17,16,17]2397; XOPAVX2-NEXT:    retq2398  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 14, i32 14, i32 12, i32 12, i32 10, i32 10, i32 8, i32 8>2399  ret <16 x i16> %shuffle2400}2401 2402define <16 x i16> @shuffle_v16i16_04_04_04_04_00_00_00_00_08_08_08_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {2403; AVX1-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_00_08_08_08_08_12_12_12_12:2404; AVX1:       # %bb.0:2405; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]2406; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02407; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2408; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2409; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02410; AVX1-NEXT:    retq2411;2412; AVX2OR512VL-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_00_08_08_08_08_12_12_12_12:2413; AVX2OR512VL:       # %bb.0:2414; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]2415; AVX2OR512VL-NEXT:    retq2416;2417; XOPAVX1-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_00_08_08_08_08_12_12_12_12:2418; XOPAVX1:       # %bb.0:2419; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]2420; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02421; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2422; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2423; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02424; XOPAVX1-NEXT:    retq2425;2426; XOPAVX2-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_00_08_08_08_08_12_12_12_12:2427; XOPAVX2:       # %bb.0:2428; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]2429; XOPAVX2-NEXT:    retq2430  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12>2431  ret <16 x i16> %shuffle2432}2433 2434define <16 x i16> @shuffle_v16i16_00_uu_uu_00_00_00_00_00_08_08_uu_uu_08_08_14_08(<16 x i16> %a, <16 x i16> %b) {2435; AVX1-LABEL: shuffle_v16i16_00_uu_uu_00_00_00_00_00_08_08_uu_uu_08_08_14_08:2436; AVX1:       # %bb.0:2437; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]2438; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]2439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02440; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,12,13,0,1]2441; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02442; AVX1-NEXT:    retq2443;2444; AVX2OR512VL-LABEL: shuffle_v16i16_00_uu_uu_00_00_00_00_00_08_08_uu_uu_08_08_14_08:2445; AVX2OR512VL:       # %bb.0:2446; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,u,u,u,u,0,1,0,1,0,1,0,1,0,1,16,17,16,17,u,u,u,u,16,17,16,17,28,29,16,17]2447; AVX2OR512VL-NEXT:    retq2448;2449; XOPAVX1-LABEL: shuffle_v16i16_00_uu_uu_00_00_00_00_00_08_08_uu_uu_08_08_14_08:2450; XOPAVX1:       # %bb.0:2451; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,0,0,0,4,5,6,7]2452; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]2453; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02454; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,12,13,0,1]2455; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02456; XOPAVX1-NEXT:    retq2457;2458; XOPAVX2-LABEL: shuffle_v16i16_00_uu_uu_00_00_00_00_00_08_08_uu_uu_08_08_14_08:2459; XOPAVX2:       # %bb.0:2460; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,u,u,u,u,0,1,0,1,0,1,0,1,0,1,16,17,16,17,u,u,u,u,16,17,16,17,28,29,16,17]2461; XOPAVX2-NEXT:    retq2462  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 poison, i32 poison, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 poison, i32 poison, i32 8, i32 8, i32 14, i32 8>2463  ret <16 x i16> %shuffle2464}2465 2466define <16 x i16> @shuffle_v16i16_07_uu_00_00_00_00_00_00_08_08_uu_uu_08_08_08_15(<16 x i16> %a, <16 x i16> %b) {2467; AVX1-LABEL: shuffle_v16i16_07_uu_00_00_00_00_00_00_08_08_uu_uu_08_08_08_15:2468; AVX1:       # %bb.0:2469; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[14,15,2,3,0,1,0,1,0,1,0,1,0,1,0,1]2470; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02471; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,14,15]2472; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02473; AVX1-NEXT:    retq2474;2475; AVX2OR512VL-LABEL: shuffle_v16i16_07_uu_00_00_00_00_00_00_08_08_uu_uu_08_08_08_15:2476; AVX2OR512VL:       # %bb.0:2477; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,u,u,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,u,u,u,u,16,17,16,17,16,17,30,31]2478; AVX2OR512VL-NEXT:    retq2479;2480; XOPAVX1-LABEL: shuffle_v16i16_07_uu_00_00_00_00_00_00_08_08_uu_uu_08_08_08_15:2481; XOPAVX1:       # %bb.0:2482; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[14,15,2,3,0,1,0,1,0,1,0,1,0,1,0,1]2483; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02484; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,14,15]2485; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02486; XOPAVX1-NEXT:    retq2487;2488; XOPAVX2-LABEL: shuffle_v16i16_07_uu_00_00_00_00_00_00_08_08_uu_uu_08_08_08_15:2489; XOPAVX2:       # %bb.0:2490; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,u,u,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,u,u,u,u,16,17,16,17,16,17,30,31]2491; XOPAVX2-NEXT:    retq2492  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 poison, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 poison, i32 poison, i32 8, i32 8, i32 8, i32 15>2493  ret <16 x i16> %shuffle2494}2495 2496define <16 x i16> @shuffle_v16i16_00_uu_uu_02_04_04_uu_06_14_14_uu_12_10_10_08_08(<16 x i16> %a, <16 x i16> %b) {2497; AVX1-LABEL: shuffle_v16i16_00_uu_uu_02_04_04_uu_06_14_14_uu_12_10_10_08_08:2498; AVX1:       # %bb.0:2499; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,1,2,2,4,5,6,7]2500; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,6,6]2501; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02502; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,12,13,8,9,4,5,4,5,0,1,0,1]2503; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02504; AVX1-NEXT:    retq2505;2506; AVX2OR512VL-LABEL: shuffle_v16i16_00_uu_uu_02_04_04_uu_06_14_14_uu_12_10_10_08_08:2507; AVX2OR512VL:       # %bb.0:2508; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,u,u,u,u,4,5,8,9,8,9,u,u,12,13,28,29,28,29,u,u,24,25,20,21,20,21,16,17,16,17]2509; AVX2OR512VL-NEXT:    retq2510;2511; XOPAVX1-LABEL: shuffle_v16i16_00_uu_uu_02_04_04_uu_06_14_14_uu_12_10_10_08_08:2512; XOPAVX1:       # %bb.0:2513; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[0,1,2,2,4,5,6,7]2514; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,6,6]2515; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02516; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[12,13,12,13,12,13,8,9,4,5,4,5,0,1,0,1]2517; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02518; XOPAVX1-NEXT:    retq2519;2520; XOPAVX2-LABEL: shuffle_v16i16_00_uu_uu_02_04_04_uu_06_14_14_uu_12_10_10_08_08:2521; XOPAVX2:       # %bb.0:2522; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,u,u,u,u,4,5,8,9,8,9,u,u,12,13,28,29,28,29,u,u,24,25,20,21,20,21,16,17,16,17]2523; XOPAVX2-NEXT:    retq2524  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 poison, i32 poison, i32 2, i32 4, i32 4, i32 poison, i32 6, i32 14, i32 14, i32 poison, i32 12, i32 10, i32 10, i32 8, i32 8>2525  ret <16 x i16> %shuffle2526}2527 2528define <16 x i16> @shuffle_v16i16_04_04_04_04_uu_uu_uu_uu_08_08_08_uu_uu_12_12_12(<16 x i16> %a, <16 x i16> %b) {2529; AVX1-LABEL: shuffle_v16i16_04_04_04_04_uu_uu_uu_uu_08_08_08_uu_uu_12_12_12:2530; AVX1:       # %bb.0:2531; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,4,4,4]2532; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]2533; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02534; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2535; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2536; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02537; AVX1-NEXT:    retq2538;2539; AVX2OR512VL-LABEL: shuffle_v16i16_04_04_04_04_uu_uu_uu_uu_08_08_08_uu_uu_12_12_12:2540; AVX2OR512VL:       # %bb.0:2541; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,8,9,8,9,8,9,u,u,u,u,u,u,u,u,16,17,16,17,16,17,u,u,u,u,24,25,24,25,24,25]2542; AVX2OR512VL-NEXT:    retq2543;2544; XOPAVX1-LABEL: shuffle_v16i16_04_04_04_04_uu_uu_uu_uu_08_08_08_uu_uu_12_12_12:2545; XOPAVX1:       # %bb.0:2546; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,4,4,4]2547; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]2548; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02549; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2550; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2551; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02552; XOPAVX1-NEXT:    retq2553;2554; XOPAVX2-LABEL: shuffle_v16i16_04_04_04_04_uu_uu_uu_uu_08_08_08_uu_uu_12_12_12:2555; XOPAVX2:       # %bb.0:2556; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,8,9,8,9,8,9,u,u,u,u,u,u,u,u,16,17,16,17,16,17,u,u,u,u,24,25,24,25,24,25]2557; XOPAVX2-NEXT:    retq2558  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 poison, i32 poison, i32 poison, i32 poison, i32 8, i32 8, i32 8, i32 poison, i32 poison, i32 12, i32 12, i32 12>2559  ret <16 x i16> %shuffle2560}2561 2562define <16 x i16> @shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20(<16 x i16> %a, <16 x i16> %b) {2563; AVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20:2564; AVX1:       # %bb.0:2565; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2566; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2567; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2568; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2569; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02570; AVX1-NEXT:    retq2571;2572; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20:2573; AVX2-SLOW:       # %bb.0:2574; AVX2-SLOW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02575; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2576; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2577; AVX2-SLOW-NEXT:    retq2578;2579; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20:2580; AVX2-FAST:       # %bb.0:2581; AVX2-FAST-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02582; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]2583; AVX2-FAST-NEXT:    retq2584;2585; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20:2586; AVX512VL:       # %bb.0:2587; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,0,0,0,4,4,4,4,16,16,16,16,20,20,20,20]2588; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02589; AVX512VL-NEXT:    retq2590;2591; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20:2592; XOPAVX1:       # %bb.0:2593; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2594; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2595; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2596; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2597; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02598; XOPAVX1-NEXT:    retq2599;2600; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_16_16_16_16_20_20_20_20:2601; XOPAVX2:       # %bb.0:2602; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02603; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2604; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2605; XOPAVX2-NEXT:    retq2606  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 16, i32 16, i32 16, i32 16, i32 20, i32 20, i32 20, i32 20>2607  ret <16 x i16> %shuffle2608}2609 2610define <16 x i16> @shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20(<16 x i16> %a, <16 x i16> %b) {2611; AVX1-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20:2612; AVX1:       # %bb.0:2613; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02614; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2615; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2616; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2617; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2618; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02619; AVX1-NEXT:    retq2620;2621; AVX2-SLOW-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20:2622; AVX2-SLOW:       # %bb.0:2623; AVX2-SLOW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]2624; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2625; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2626; AVX2-SLOW-NEXT:    retq2627;2628; AVX2-FAST-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20:2629; AVX2-FAST:       # %bb.0:2630; AVX2-FAST-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]2631; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]2632; AVX2-FAST-NEXT:    retq2633;2634; AVX512VL-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20:2635; AVX512VL:       # %bb.0:2636; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [8,8,8,8,12,12,12,12,16,16,16,16,20,20,20,20]2637; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02638; AVX512VL-NEXT:    retq2639;2640; XOPAVX1-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20:2641; XOPAVX1:       # %bb.0:2642; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02643; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2644; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2645; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2646; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2647; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02648; XOPAVX1-NEXT:    retq2649;2650; XOPAVX2-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20:2651; XOPAVX2:       # %bb.0:2652; XOPAVX2-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1]2653; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2654; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2655; XOPAVX2-NEXT:    retq2656  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12, i32 16, i32 16, i32 16, i32 16, i32 20, i32 20, i32 20, i32 20>2657  ret <16 x i16> %shuffle2658}2659 2660define <16 x i16> @shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28(<16 x i16> %a, <16 x i16> %b) {2661; AVX1-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28:2662; AVX1:       # %bb.0:2663; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02664; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2665; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2666; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12667; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2668; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2669; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02670; AVX1-NEXT:    retq2671;2672; AVX2-SLOW-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28:2673; AVX2-SLOW:       # %bb.0:2674; AVX2-SLOW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]2675; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2676; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2677; AVX2-SLOW-NEXT:    retq2678;2679; AVX2-FAST-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28:2680; AVX2-FAST:       # %bb.0:2681; AVX2-FAST-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]2682; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]2683; AVX2-FAST-NEXT:    retq2684;2685; AVX512VL-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28:2686; AVX512VL:       # %bb.0:2687; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [8,8,8,8,12,12,12,12,24,24,24,24,28,28,28,28]2688; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02689; AVX512VL-NEXT:    retq2690;2691; XOPAVX1-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28:2692; XOPAVX1:       # %bb.0:2693; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02694; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2695; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2696; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12697; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2698; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2699; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02700; XOPAVX1-NEXT:    retq2701;2702; XOPAVX2-LABEL: shuffle_v16i16_08_08_08_08_12_12_12_12_24_24_24_24_28_28_28_28:2703; XOPAVX2:       # %bb.0:2704; XOPAVX2-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]2705; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2706; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2707; XOPAVX2-NEXT:    retq2708  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12, i32 24, i32 24, i32 24, i32 24, i32 28, i32 28, i32 28, i32 28>2709  ret <16 x i16> %shuffle2710}2711 2712define <16 x i16> @shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28(<16 x i16> %a, <16 x i16> %b) {2713; AVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28:2714; AVX1:       # %bb.0:2715; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2716; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2717; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12718; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2719; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2720; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02721; AVX1-NEXT:    retq2722;2723; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28:2724; AVX2-SLOW:       # %bb.0:2725; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]2726; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2727; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2728; AVX2-SLOW-NEXT:    retq2729;2730; AVX2-FAST-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28:2731; AVX2-FAST:       # %bb.0:2732; AVX2-FAST-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]2733; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,8,9,16,17,16,17,16,17,16,17,24,25,24,25,24,25,24,25]2734; AVX2-FAST-NEXT:    retq2735;2736; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28:2737; AVX512VL:       # %bb.0:2738; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,0,0,0,4,4,4,4,24,24,24,24,28,28,28,28]2739; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02740; AVX512VL-NEXT:    retq2741;2742; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28:2743; XOPAVX1:       # %bb.0:2744; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2745; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]2746; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm12747; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2748; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]2749; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02750; XOPAVX1-NEXT:    retq2751;2752; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_04_24_24_24_24_28_28_28_28:2753; XOPAVX2:       # %bb.0:2754; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]2755; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]2756; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]2757; XOPAVX2-NEXT:    retq2758  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 24, i32 24, i32 24, i32 24, i32 28, i32 28, i32 28, i32 28>2759  ret <16 x i16> %shuffle2760}2761 2762define <16 x i16> @shuffle_v16i16_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23(<16 x i16> %a, <16 x i16> %b) {2763; AVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:2764; AVX1:       # %bb.0:2765; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2766; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2767; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02768; AVX1-NEXT:    retq2769;2770; AVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:2771; AVX2:       # %bb.0:2772; AVX2-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2773; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2774; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm02775; AVX2-NEXT:    retq2776;2777; AVX512VL-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:2778; AVX512VL:       # %bb.0:2779; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]2780; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm02781; AVX512VL-NEXT:    retq2782;2783; XOPAVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:2784; XOPAVX1:       # %bb.0:2785; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2786; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2787; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm02788; XOPAVX1-NEXT:    retq2789;2790; XOPAVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:2791; XOPAVX2:       # %bb.0:2792; XOPAVX2-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2793; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]2794; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm02795; XOPAVX2-NEXT:    retq2796  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>2797  ret <16 x i16> %shuffle2798}2799 2800define <16 x i16> @shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24(<16 x i16> %a) {2801; AVX1-LABEL: shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24:2802; AVX1:       # %bb.0:2803; AVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1]2804; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02805; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1]2806; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02807; AVX1-NEXT:    retq2808;2809; AVX2OR512VL-LABEL: shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24:2810; AVX2OR512VL:       # %bb.0:2811; AVX2OR512VL-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]2812; AVX2OR512VL-NEXT:    retq2813;2814; XOPAVX1-LABEL: shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24:2815; XOPAVX1:       # %bb.0:2816; XOPAVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1]2817; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02818; XOPAVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1]2819; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02820; XOPAVX1-NEXT:    retq2821;2822; XOPAVX2-LABEL: shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24:2823; XOPAVX2:       # %bb.0:2824; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]2825; XOPAVX2-NEXT:    retq2826  %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 24>2827  ret <16 x i16> %shuffle2828}2829 2830define <16 x i16> @shuffle_v16i16_17_18_19_20_21_22_23_zz_25_26_27_28_29_30_31_zz(<16 x i16> %a) {2831; AVX1-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_zz_25_26_27_28_29_30_31_zz:2832; AVX1:       # %bb.0:2833; AVX1-NEXT:    vpsrldq {{.*#+}} xmm1 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero2834; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02835; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero2836; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02837; AVX1-NEXT:    retq2838;2839; AVX2OR512VL-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_zz_25_26_27_28_29_30_31_zz:2840; AVX2OR512VL:       # %bb.0:2841; AVX2OR512VL-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,ymm0[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zero,zero2842; AVX2OR512VL-NEXT:    retq2843;2844; XOPAVX1-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_zz_25_26_27_28_29_30_31_zz:2845; XOPAVX1:       # %bb.0:2846; XOPAVX1-NEXT:    vpsrldq {{.*#+}} xmm1 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero2847; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02848; XOPAVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero2849; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02850; XOPAVX1-NEXT:    retq2851;2852; XOPAVX2-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_zz_25_26_27_28_29_30_31_zz:2853; XOPAVX2:       # %bb.0:2854; XOPAVX2-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,ymm0[18,19,20,21,22,23,24,25,26,27,28,29,30,31],zero,zero2855; XOPAVX2-NEXT:    retq2856  %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 0>2857  ret <16 x i16> %shuffle2858}2859 2860define <16 x i16> @shuffle_v16i16_06_07_01_02_07_00_04_05_14_15_09_10_15_08_12_13(<16 x i16> %a) {2861; AVX1-LABEL: shuffle_v16i16_06_07_01_02_07_00_04_05_14_15_09_10_15_08_12_13:2862; AVX1:       # %bb.0:2863; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12864; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [12,13,14,15,2,3,4,5,14,15,0,1,8,9,10,11]2865; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm12866; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm02867; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02868; AVX1-NEXT:    retq2869;2870; AVX2OR512VL-LABEL: shuffle_v16i16_06_07_01_02_07_00_04_05_14_15_09_10_15_08_12_13:2871; AVX2OR512VL:       # %bb.0:2872; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[12,13,14,15,2,3,4,5,14,15,0,1,8,9,10,11,28,29,30,31,18,19,20,21,30,31,16,17,24,25,26,27]2873; AVX2OR512VL-NEXT:    retq2874;2875; XOPAVX1-LABEL: shuffle_v16i16_06_07_01_02_07_00_04_05_14_15_09_10_15_08_12_13:2876; XOPAVX1:       # %bb.0:2877; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm12878; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [12,13,14,15,2,3,4,5,14,15,0,1,8,9,10,11]2879; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm12880; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm02881; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm02882; XOPAVX1-NEXT:    retq2883;2884; XOPAVX2-LABEL: shuffle_v16i16_06_07_01_02_07_00_04_05_14_15_09_10_15_08_12_13:2885; XOPAVX2:       # %bb.0:2886; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[12,13,14,15,2,3,4,5,14,15,0,1,8,9,10,11,28,29,30,31,18,19,20,21,30,31,16,17,24,25,26,27]2887; XOPAVX2-NEXT:    retq2888  %1 = shufflevector <16 x i16> %a, <16 x i16> poison, <16 x i32> <i32 6, i32 7, i32 1, i32 2, i32 7, i32 0, i32 4, i32 5, i32 14, i32 15, i32 9, i32 10, i32 15, i32 8, i32 12, i32 13>2889  ret <16 x i16> %12890}2891 2892;2893; Shuffle to logical bit shifts2894;2895 2896define <16 x i16> @shuffle_v16i16_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14(<16 x i16> %a) {2897; AVX1-LABEL: shuffle_v16i16_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14:2898; AVX1:       # %bb.0:2899; AVX1-NEXT:    vpslld $16, %xmm0, %xmm12900; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02901; AVX1-NEXT:    vpslld $16, %xmm0, %xmm02902; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02903; AVX1-NEXT:    retq2904;2905; AVX2OR512VL-LABEL: shuffle_v16i16_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14:2906; AVX2OR512VL:       # %bb.0:2907; AVX2OR512VL-NEXT:    vpslld $16, %ymm0, %ymm02908; AVX2OR512VL-NEXT:    retq2909;2910; XOPAVX1-LABEL: shuffle_v16i16_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14:2911; XOPAVX1:       # %bb.0:2912; XOPAVX1-NEXT:    vpslld $16, %xmm0, %xmm12913; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02914; XOPAVX1-NEXT:    vpslld $16, %xmm0, %xmm02915; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02916; XOPAVX1-NEXT:    retq2917;2918; XOPAVX2-LABEL: shuffle_v16i16_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14:2919; XOPAVX2:       # %bb.0:2920; XOPAVX2-NEXT:    vpslld $16, %ymm0, %ymm02921; XOPAVX2-NEXT:    retq2922  %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 16, i32 0, i32 16, i32 2, i32 16, i32 4, i32 16, i32 6, i32 16, i32 8, i32 16, i32 10, i32 16, i32 12, i32 16, i32 14>2923  ret <16 x i16> %shuffle2924}2925 2926define <16 x i16> @shuffle_v16i16_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12(<16 x i16> %a) {2927; AVX1-LABEL: shuffle_v16i16_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12:2928; AVX1:       # %bb.0:2929; AVX1-NEXT:    vpsllq $48, %xmm0, %xmm12930; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02931; AVX1-NEXT:    vpsllq $48, %xmm0, %xmm02932; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02933; AVX1-NEXT:    retq2934;2935; AVX2OR512VL-LABEL: shuffle_v16i16_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12:2936; AVX2OR512VL:       # %bb.0:2937; AVX2OR512VL-NEXT:    vpsllq $48, %ymm0, %ymm02938; AVX2OR512VL-NEXT:    retq2939;2940; XOPAVX1-LABEL: shuffle_v16i16_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12:2941; XOPAVX1:       # %bb.0:2942; XOPAVX1-NEXT:    vpsllq $48, %xmm0, %xmm12943; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02944; XOPAVX1-NEXT:    vpsllq $48, %xmm0, %xmm02945; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02946; XOPAVX1-NEXT:    retq2947;2948; XOPAVX2-LABEL: shuffle_v16i16_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12:2949; XOPAVX2:       # %bb.0:2950; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm02951; XOPAVX2-NEXT:    retq2952  %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 16, i32 16, i32 16, i32 0, i32 16, i32 16, i32 16, i32 4, i32 16, i32 16, i32 16, i32 8, i32 16, i32 16, i32 16, i32 12>2953  ret <16 x i16> %shuffle2954}2955 2956define <16 x i16> @shuffle_v16i16_01_zz_03_zz_05_zz_07_zz_09_zz_11_zz_13_zz_15_zz(<16 x i16> %a) {2957; AVX1-LABEL: shuffle_v16i16_01_zz_03_zz_05_zz_07_zz_09_zz_11_zz_13_zz_15_zz:2958; AVX1:       # %bb.0:2959; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm12960; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02961; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm02962; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02963; AVX1-NEXT:    retq2964;2965; AVX2OR512VL-LABEL: shuffle_v16i16_01_zz_03_zz_05_zz_07_zz_09_zz_11_zz_13_zz_15_zz:2966; AVX2OR512VL:       # %bb.0:2967; AVX2OR512VL-NEXT:    vpsrld $16, %ymm0, %ymm02968; AVX2OR512VL-NEXT:    retq2969;2970; XOPAVX1-LABEL: shuffle_v16i16_01_zz_03_zz_05_zz_07_zz_09_zz_11_zz_13_zz_15_zz:2971; XOPAVX1:       # %bb.0:2972; XOPAVX1-NEXT:    vpsrld $16, %xmm0, %xmm12973; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm02974; XOPAVX1-NEXT:    vpsrld $16, %xmm0, %xmm02975; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm02976; XOPAVX1-NEXT:    retq2977;2978; XOPAVX2-LABEL: shuffle_v16i16_01_zz_03_zz_05_zz_07_zz_09_zz_11_zz_13_zz_15_zz:2979; XOPAVX2:       # %bb.0:2980; XOPAVX2-NEXT:    vpsrld $16, %ymm0, %ymm02981; XOPAVX2-NEXT:    retq2982  %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 1, i32 16, i32 3, i32 16, i32 5, i32 16, i32 7, i32 16, i32 9, i32 16, i32 11, i32 16, i32 13, i32 16, i32 15, i32 16>2983  ret <16 x i16> %shuffle2984}2985 2986define <16 x i16> @shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz(<16 x i16> %a) {2987; AVX1-LABEL: shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz:2988; AVX1:       # %bb.0:2989; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm12990; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]2991; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]2992; AVX1-NEXT:    retq2993;2994; AVX2OR512VL-LABEL: shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz:2995; AVX2OR512VL:       # %bb.0:2996; AVX2OR512VL-NEXT:    vpsrlq $32, %ymm0, %ymm02997; AVX2OR512VL-NEXT:    retq2998;2999; XOPAVX1-LABEL: shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz:3000; XOPAVX1:       # %bb.0:3001; XOPAVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm13002; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7]3003; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7]3004; XOPAVX1-NEXT:    retq3005;3006; XOPAVX2-LABEL: shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz:3007; XOPAVX2:       # %bb.0:3008; XOPAVX2-NEXT:    vpsrlq $32, %ymm0, %ymm03009; XOPAVX2-NEXT:    retq3010  %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 2, i32 3, i32 16, i32 16, i32 6, i32 7, i32 16, i32 16, i32 10, i32 11, i32 16, i32 16, i32 14, i32 15, i32 16, i32 16>3011  ret <16 x i16> %shuffle3012}3013 3014define <16 x i16> @shuffle_v16i16_16_zz_zz_zz_17_zz_zz_zz_18_zz_zz_zz_19_zz_zz_zz(<16 x i16> %a) {3015; AVX1-LABEL: shuffle_v16i16_16_zz_zz_zz_17_zz_zz_zz_18_zz_zz_zz_19_zz_zz_zz:3016; AVX1:       # %bb.0:3017; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero3018; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]3019; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero3020; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03021; AVX1-NEXT:    retq3022;3023; AVX2OR512VL-LABEL: shuffle_v16i16_16_zz_zz_zz_17_zz_zz_zz_18_zz_zz_zz_19_zz_zz_zz:3024; AVX2OR512VL:       # %bb.0:3025; AVX2OR512VL-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3026; AVX2OR512VL-NEXT:    retq3027;3028; XOPAVX1-LABEL: shuffle_v16i16_16_zz_zz_zz_17_zz_zz_zz_18_zz_zz_zz_19_zz_zz_zz:3029; XOPAVX1:       # %bb.0:3030; XOPAVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero3031; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]3032; XOPAVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero3033; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03034; XOPAVX1-NEXT:    retq3035;3036; XOPAVX2-LABEL: shuffle_v16i16_16_zz_zz_zz_17_zz_zz_zz_18_zz_zz_zz_19_zz_zz_zz:3037; XOPAVX2:       # %bb.0:3038; XOPAVX2-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero3039; XOPAVX2-NEXT:    retq3040  %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 16, i32 0, i32 0, i32 0, i32 17, i32 0, i32 0, i32 0, i32 18, i32 0, i32 0, i32 0, i32 19, i32 0, i32 0, i32 0>3041  ret <16 x i16> %shuffle3042}3043 3044define <16 x i16> @shuffle_v16i16_16_zz_17_zz_18_zz_19_zz_20_zz_21_zz_22_zz_22_zz(<16 x i16> %a) {3045; AVX1-LABEL: shuffle_v16i16_16_zz_17_zz_18_zz_19_zz_20_zz_21_zz_22_zz_22_zz:3046; AVX1:       # %bb.0:3047; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm13048; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]3049; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero3050; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03051; AVX1-NEXT:    retq3052;3053; AVX2OR512VL-LABEL: shuffle_v16i16_16_zz_17_zz_18_zz_19_zz_20_zz_21_zz_22_zz_22_zz:3054; AVX2OR512VL:       # %bb.0:3055; AVX2OR512VL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero3056; AVX2OR512VL-NEXT:    retq3057;3058; XOPAVX1-LABEL: shuffle_v16i16_16_zz_17_zz_18_zz_19_zz_20_zz_21_zz_22_zz_22_zz:3059; XOPAVX1:       # %bb.0:3060; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm13061; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]3062; XOPAVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero3063; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03064; XOPAVX1-NEXT:    retq3065;3066; XOPAVX2-LABEL: shuffle_v16i16_16_zz_17_zz_18_zz_19_zz_20_zz_21_zz_22_zz_22_zz:3067; XOPAVX2:       # %bb.0:3068; XOPAVX2-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero3069; XOPAVX2-NEXT:    retq3070  %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 16, i32 0, i32 17, i32 0, i32 18, i32 0, i32 19, i32 0, i32 20, i32 0, i32 21, i32 0, i32 22, i32 0, i32 23, i32 0>3071  ret <16 x i16> %shuffle3072}3073 3074define <16 x i16> @shuffle_v16i16_28_zz_zz_zz_29_zz_zz_zz_30_zz_zz_zz_31_zz_zz_zz(<16 x i16> %a) {3075; AVX1-LABEL: shuffle_v16i16_28_zz_zz_zz_29_zz_zz_zz_30_zz_zz_zz_31_zz_zz_zz:3076; AVX1:       # %bb.0:3077; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03078; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]3079; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero3080; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]3081; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero3082; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03083; AVX1-NEXT:    retq3084;3085; AVX2-LABEL: shuffle_v16i16_28_zz_zz_zz_29_zz_zz_zz_30_zz_zz_zz_31_zz_zz_zz:3086; AVX2:       # %bb.0:3087; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3]3088; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9],zero,zero,zero,zero,zero,zero,ymm0[10,11],zero,zero,zero,zero,zero,zero,ymm0[28,29],zero,zero,zero,zero,zero,zero,ymm0[30,31],zero,zero,zero,zero,zero,zero3089; AVX2-NEXT:    retq3090;3091; AVX512VL-LABEL: shuffle_v16i16_28_zz_zz_zz_29_zz_zz_zz_30_zz_zz_zz_31_zz_zz_zz:3092; AVX512VL:       # %bb.0:3093; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [28,1,2,3,29,5,6,7,30,9,10,11,31,13,14,15]3094; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm13095; AVX512VL-NEXT:    vpermt2w %ymm0, %ymm2, %ymm13096; AVX512VL-NEXT:    vmovdqa %ymm1, %ymm03097; AVX512VL-NEXT:    retq3098;3099; XOPAVX1-LABEL: shuffle_v16i16_28_zz_zz_zz_29_zz_zz_zz_30_zz_zz_zz_31_zz_zz_zz:3100; XOPAVX1:       # %bb.0:3101; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm03102; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]3103; XOPAVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero3104; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]3105; XOPAVX1-NEXT:    vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero3106; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm03107; XOPAVX1-NEXT:    retq3108;3109; XOPAVX2-LABEL: shuffle_v16i16_28_zz_zz_zz_29_zz_zz_zz_30_zz_zz_zz_31_zz_zz_zz:3110; XOPAVX2:       # %bb.0:3111; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3]3112; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9],zero,zero,zero,zero,zero,zero,ymm0[10,11],zero,zero,zero,zero,zero,zero,ymm0[28,29],zero,zero,zero,zero,zero,zero,ymm0[30,31],zero,zero,zero,zero,zero,zero3113; XOPAVX2-NEXT:    retq3114  %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 28, i32 0, i32 0, i32 0, i32 29, i32 0, i32 0, i32 0, i32 30, i32 0, i32 0, i32 0, i32 31, i32 0, i32 0, i32 0>3115  ret <16 x i16> %shuffle3116}3117 3118define <16 x i16> @shuffle_v16i16_23_00_01_02_03_04_05_06_31_08_09_10_11_12_13_14(<16 x i16> %a, <16 x i16> %b) {3119; AVX1-LABEL: shuffle_v16i16_23_00_01_02_03_04_05_06_31_08_09_10_11_12_13_14:3120; AVX1:       # %bb.0:3121; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm23122; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm33123; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[14,15],xmm3[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3124; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3125; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03126; AVX1-NEXT:    retq3127;3128; AVX2OR512VL-LABEL: shuffle_v16i16_23_00_01_02_03_04_05_06_31_08_09_10_11_12_13_14:3129; AVX2OR512VL:       # %bb.0:3130; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[14,15],ymm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13],ymm1[30,31],ymm0[16,17,18,19,20,21,22,23,24,25,26,27,28,29]3131; AVX2OR512VL-NEXT:    retq3132;3133; XOPAVX1-LABEL: shuffle_v16i16_23_00_01_02_03_04_05_06_31_08_09_10_11_12_13_14:3134; XOPAVX1:       # %bb.0:3135; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm23136; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm33137; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[14,15],xmm3[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3138; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3139; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03140; XOPAVX1-NEXT:    retq3141;3142; XOPAVX2-LABEL: shuffle_v16i16_23_00_01_02_03_04_05_06_31_08_09_10_11_12_13_14:3143; XOPAVX2:       # %bb.0:3144; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[14,15],ymm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13],ymm1[30,31],ymm0[16,17,18,19,20,21,22,23,24,25,26,27,28,29]3145; XOPAVX2-NEXT:    retq3146  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 23, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 31, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>3147  ret <16 x i16> %shuffle3148}3149 3150define <16 x i16> @shuffle_v16i16_01_02_03_04_05_06_07_16_09_10_11_12_13_14_15_24(<16 x i16> %a, <16 x i16> %b) {3151; AVX1-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_16_09_10_11_12_13_14_15_24:3152; AVX1:       # %bb.0:3153; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23154; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm33155; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1]3156; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1]3157; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03158; AVX1-NEXT:    retq3159;3160; AVX2OR512VL-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_16_09_10_11_12_13_14_15_24:3161; AVX2OR512VL:       # %bb.0:3162; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1],ymm0[18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17]3163; AVX2OR512VL-NEXT:    retq3164;3165; XOPAVX1-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_16_09_10_11_12_13_14_15_24:3166; XOPAVX1:       # %bb.0:3167; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23168; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm33169; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1]3170; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1]3171; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03172; XOPAVX1-NEXT:    retq3173;3174; XOPAVX2-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_16_09_10_11_12_13_14_15_24:3175; XOPAVX2:       # %bb.0:3176; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1],ymm0[18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17]3177; XOPAVX2-NEXT:    retq3178  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 24>3179  ret <16 x i16> %shuffle3180}3181 3182define <16 x i16> @shuffle_v16i16_17_18_19_20_21_22_23_00_25_26_27_28_29_30_31_8(<16 x i16> %a, <16 x i16> %b) {3183; AVX1-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_00_25_26_27_28_29_30_31_8:3184; AVX1:       # %bb.0:3185; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm23186; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm33187; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1]3188; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0,1]3189; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03190; AVX1-NEXT:    retq3191;3192; AVX2OR512VL-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_00_25_26_27_28_29_30_31_8:3193; AVX2OR512VL:       # %bb.0:3194; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1],ymm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17]3195; AVX2OR512VL-NEXT:    retq3196;3197; XOPAVX1-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_00_25_26_27_28_29_30_31_8:3198; XOPAVX1:       # %bb.0:3199; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm23200; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm33201; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1]3202; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0,1]3203; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03204; XOPAVX1-NEXT:    retq3205;3206; XOPAVX2-LABEL: shuffle_v16i16_17_18_19_20_21_22_23_00_25_26_27_28_29_30_31_8:3207; XOPAVX2:       # %bb.0:3208; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1],ymm1[18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17]3209; XOPAVX2-NEXT:    retq3210  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 00, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 8>3211  ret <16 x i16> %shuffle3212}3213 3214define <16 x i16> @shuffle_v16i16_07_16_17_18_19_20_21_22_15_24_25_26_27_28_29_30(<16 x i16> %a, <16 x i16> %b) {3215; AVX1-LABEL: shuffle_v16i16_07_16_17_18_19_20_21_22_15_24_25_26_27_28_29_30:3216; AVX1:       # %bb.0:3217; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23218; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm33219; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[14,15],xmm3[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3220; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[14,15],xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3221; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03222; AVX1-NEXT:    retq3223;3224; AVX2OR512VL-LABEL: shuffle_v16i16_07_16_17_18_19_20_21_22_15_24_25_26_27_28_29_30:3225; AVX2OR512VL:       # %bb.0:3226; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[14,15],ymm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13],ymm0[30,31],ymm1[16,17,18,19,20,21,22,23,24,25,26,27,28,29]3227; AVX2OR512VL-NEXT:    retq3228;3229; XOPAVX1-LABEL: shuffle_v16i16_07_16_17_18_19_20_21_22_15_24_25_26_27_28_29_30:3230; XOPAVX1:       # %bb.0:3231; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23232; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm33233; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[14,15],xmm3[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3234; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[14,15],xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13]3235; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03236; XOPAVX1-NEXT:    retq3237;3238; XOPAVX2-LABEL: shuffle_v16i16_07_16_17_18_19_20_21_22_15_24_25_26_27_28_29_30:3239; XOPAVX2:       # %bb.0:3240; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[14,15],ymm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13],ymm0[30,31],ymm1[16,17,18,19,20,21,22,23,24,25,26,27,28,29]3241; XOPAVX2-NEXT:    retq3242  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 15, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30>3243  ret <16 x i16> %shuffle3244}3245 3246define <16 x i16> @shuffle_v16i16_01_02_03_04_05_06_07_00_17_18_19_20_21_22_23_16(<16 x i16> %a, <16 x i16> %b) {3247; AVX1-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_00_17_18_19_20_21_22_23_16:3248; AVX1:       # %bb.0:3249; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1]3250; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1]3251; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03252; AVX1-NEXT:    retq3253;3254; AVX2-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_00_17_18_19_20_21_22_23_16:3255; AVX2:       # %bb.0:3256; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03257; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,18,19,20,21,22,23,24,25,26,27,28,29,30,31,16,17]3258; AVX2-NEXT:    retq3259;3260; AVX512VL-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_00_17_18_19_20_21_22_23_16:3261; AVX512VL:       # %bb.0:3262; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [1,2,3,4,5,6,7,0,17,18,19,20,21,22,23,16]3263; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm03264; AVX512VL-NEXT:    retq3265;3266; XOPAVX1-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_00_17_18_19_20_21_22_23_16:3267; XOPAVX1:       # %bb.0:3268; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1]3269; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1]3270; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03271; XOPAVX1-NEXT:    retq3272;3273; XOPAVX2-LABEL: shuffle_v16i16_01_02_03_04_05_06_07_00_17_18_19_20_21_22_23_16:3274; XOPAVX2:       # %bb.0:3275; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03276; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,18,19,20,21,22,23,24,25,26,27,28,29,30,31,16,17]3277; XOPAVX2-NEXT:    retq3278  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 16>3279  ret <16 x i16> %shuffle3280}3281 3282define <16 x i16> @shuffle_v16i16_07_00_01_02_03_04_05_06_23_16_17_18_19_20_21_22(<16 x i16> %a, <16 x i16> %b) {3283; AVX1-LABEL: shuffle_v16i16_07_00_01_02_03_04_05_06_23_16_17_18_19_20_21_22:3284; AVX1:       # %bb.0:3285; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13]3286; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13]3287; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03288; AVX1-NEXT:    retq3289;3290; AVX2-LABEL: shuffle_v16i16_07_00_01_02_03_04_05_06_23_16_17_18_19_20_21_22:3291; AVX2:       # %bb.0:3292; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03293; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,30,31,16,17,18,19,20,21,22,23,24,25,26,27,28,29]3294; AVX2-NEXT:    retq3295;3296; AVX512VL-LABEL: shuffle_v16i16_07_00_01_02_03_04_05_06_23_16_17_18_19_20_21_22:3297; AVX512VL:       # %bb.0:3298; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [7,0,1,2,3,4,5,6,23,16,17,18,19,20,21,22]3299; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm03300; AVX512VL-NEXT:    retq3301;3302; XOPAVX1-LABEL: shuffle_v16i16_07_00_01_02_03_04_05_06_23_16_17_18_19_20_21_22:3303; XOPAVX1:       # %bb.0:3304; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13]3305; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13]3306; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03307; XOPAVX1-NEXT:    retq3308;3309; XOPAVX2-LABEL: shuffle_v16i16_07_00_01_02_03_04_05_06_23_16_17_18_19_20_21_22:3310; XOPAVX2:       # %bb.0:3311; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm03312; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,30,31,16,17,18,19,20,21,22,23,24,25,26,27,28,29]3313; XOPAVX2-NEXT:    retq3314  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 23, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22>3315  ret <16 x i16> %shuffle3316}3317 3318define <16 x i16> @shuffle_v16i16_00_01_00_01_02_03_02_11_08_09_08_09_10_11_10_11(<16 x i16> %a, <16 x i16> %b) {3319; AVX1-LABEL: shuffle_v16i16_00_01_00_01_02_03_02_11_08_09_08_09_10_11_10_11:3320; AVX1:       # %bb.0:3321; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13322; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]3323; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,0,2,4,5,6,7]3324; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,4,7]3325; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]3326; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03327; AVX1-NEXT:    retq3328;3329; AVX2-LABEL: shuffle_v16i16_00_01_00_01_02_03_02_11_08_09_08_09_10_11_10_11:3330; AVX2:       # %bb.0:3331; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3332; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,0,1,2,3,4,5,6,7,4,5,14,15,16,17,18,19,16,17,18,19,20,21,22,23,20,21,22,23]3333; AVX2-NEXT:    retq3334;3335; AVX512VL-LABEL: shuffle_v16i16_00_01_00_01_02_03_02_11_08_09_08_09_10_11_10_11:3336; AVX512VL:       # %bb.0:3337; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,1,0,1,2,3,2,11,8,9,8,9,10,11,10,11]3338; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03339; AVX512VL-NEXT:    retq3340;3341; XOPAVX1-LABEL: shuffle_v16i16_00_01_00_01_02_03_02_11_08_09_08_09_10_11_10_11:3342; XOPAVX1:       # %bb.0:3343; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13344; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,2,3,0,1,2,3,4,5,6,7,4,5],xmm1[6,7]3345; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]3346; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03347; XOPAVX1-NEXT:    retq3348;3349; XOPAVX2-LABEL: shuffle_v16i16_00_01_00_01_02_03_02_11_08_09_08_09_10_11_10_11:3350; XOPAVX2:       # %bb.0:3351; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3352; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,0,1,2,3,4,5,6,7,4,5,14,15,16,17,18,19,16,17,18,19,20,21,22,23,20,21,22,23]3353; XOPAVX2-NEXT:    retq3354  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 2, i32 3, i32 2, i32 11, i32 8, i32 9, i32 8, i32 9, i32 10, i32 11, i32 10, i32 11>3355  ret <16 x i16> %shuffle3356}3357 3358define <16 x i16> @shuffle_v16i16_06_07_04_05_02_03_00_09_14_15_12_13_10_11_08_09(<16 x i16> %a, <16 x i16> %b) {3359; AVX1-LABEL: shuffle_v16i16_06_07_04_05_02_03_00_09_14_15_12_13_10_11_08_09:3360; AVX1:       # %bb.0:3361; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13362; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]3363; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3364; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3365; AVX1-NEXT:    retq3366;3367; AVX2-LABEL: shuffle_v16i16_06_07_04_05_02_03_00_09_14_15_12_13_10_11_08_09:3368; AVX2:       # %bb.0:3369; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3370; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3,4,5,6,7,8],ymm1[9],ymm0[10,11,12,13,14,15]3371; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3372; AVX2-NEXT:    retq3373;3374; AVX512VL-LABEL: shuffle_v16i16_06_07_04_05_02_03_00_09_14_15_12_13_10_11_08_09:3375; AVX512VL:       # %bb.0:3376; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [6,7,4,5,2,3,0,9,14,15,12,13,10,11,8,9]3377; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03378; AVX512VL-NEXT:    retq3379;3380; XOPAVX1-LABEL: shuffle_v16i16_06_07_04_05_02_03_00_09_14_15_12_13_10_11_08_09:3381; XOPAVX1:       # %bb.0:3382; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13383; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0],xmm1[1],xmm0[2,3,4,5,6,7]3384; XOPAVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3385; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3386; XOPAVX1-NEXT:    retq3387;3388; XOPAVX2-LABEL: shuffle_v16i16_06_07_04_05_02_03_00_09_14_15_12_13_10_11_08_09:3389; XOPAVX2:       # %bb.0:3390; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3391; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3,4,5,6,7,8],ymm1[9],ymm0[10,11,12,13,14,15]3392; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]3393; XOPAVX2-NEXT:    retq3394  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 6, i32 7, i32 4, i32 5, i32 2, i32 3, i32 0, i32 9, i32 14, i32 15, i32 12, i32 13, i32 10, i32 11, i32 8, i32 9>3395  ret <16 x i16> %shuffle3396}3397 3398define <16 x i16> @shuffle_v16i16_04_05_06_07_16_17_18_27_12_13_14_15_24_25_26_27(<16 x i16> %a, <16 x i16> %b) {3399; AVX1-LABEL: shuffle_v16i16_04_05_06_07_16_17_18_27_12_13_14_15_24_25_26_27:3400; AVX1:       # %bb.0:3401; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23402; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm33403; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7]3404; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]3405; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,14,15]3406; AVX1-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1]3407; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03408; AVX1-NEXT:    retq3409;3410; AVX2-LABEL: shuffle_v16i16_04_05_06_07_16_17_18_27_12_13_14_15_24_25_26_27:3411; AVX2:       # %bb.0:3412; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]3413; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]3414; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]3415; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]3416; AVX2-NEXT:    retq3417;3418; AVX512VL-LABEL: shuffle_v16i16_04_05_06_07_16_17_18_27_12_13_14_15_24_25_26_27:3419; AVX512VL:       # %bb.0:3420; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,5,6,7,16,17,18,27,12,13,14,15,24,25,26,27]3421; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm03422; AVX512VL-NEXT:    retq3423;3424; XOPAVX1-LABEL: shuffle_v16i16_04_05_06_07_16_17_18_27_12_13_14_15_24_25_26_27:3425; XOPAVX1:       # %bb.0:3426; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm23427; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm33428; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7]3429; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]3430; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm1[0,1,4,5,8,9,14,15]3431; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03432; XOPAVX1-NEXT:    retq3433;3434; XOPAVX2-LABEL: shuffle_v16i16_04_05_06_07_16_17_18_27_12_13_14_15_24_25_26_27:3435; XOPAVX2:       # %bb.0:3436; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]3437; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]3438; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]3439; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]3440; XOPAVX2-NEXT:    retq3441  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 27, i32 12, i32 13, i32 14, i32 15, i32 24, i32 25, i32 26, i32 27>3442  ret <16 x i16> %shuffle3443}3444 3445define <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {3446; AVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_08:3447; AVX1:       # %bb.0:3448; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13449; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]3450; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,1,4,5,6,7]3451; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]3452; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]3453; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]3454; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03455; AVX1-NEXT:    retq3456;3457; AVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_08:3458; AVX2:       # %bb.0:3459; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3460; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,8,9,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]3461; AVX2-NEXT:    retq3462;3463; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_08:3464; AVX512VL:       # %bb.0:3465; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8]3466; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03467; AVX512VL-NEXT:    retq3468;3469; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_08:3470; XOPAVX1:       # %bb.0:3471; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13472; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1],xmm1[0,1]3473; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]3474; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]3475; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03476; XOPAVX1-NEXT:    retq3477;3478; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_08:3479; XOPAVX2:       # %bb.0:3480; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3481; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,8,9,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]3482; XOPAVX2-NEXT:    retq3483  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>3484  ret <16 x i16> %shuffle3485}3486 3487define <16 x i16> @shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {3488; AVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3489; AVX1:       # %bb.0:3490; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13491; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm23492; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]3493; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]3494; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]3495; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]3496; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]3497; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03498; AVX1-NEXT:    retq3499;3500; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3501; AVX2-SLOW:       # %bb.0:3502; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3503; AVX2-SLOW-NEXT:    vpsllq $48, %ymm1, %ymm13504; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]3505; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]3506; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]3507; AVX2-SLOW-NEXT:    retq3508;3509; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3510; AVX2-FAST-ALL:       # %bb.0:3511; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,6,0,4,6,0,0]3512; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm03513; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,4,5,4,5,4,5,8,9,16,17,16,17,16,17,16,17,20,21,20,21,20,21,20,21]3514; AVX2-FAST-ALL-NEXT:    retq3515;3516; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3517; AVX2-FAST-PERLANE:       # %bb.0:3518; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9,u,u,16,17,16,17,16,17,16,17,24,25,24,25,24,25,u,u]3519; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3520; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm03521; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3522; AVX2-FAST-PERLANE-NEXT:    retq3523;3524; AVX512VL-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3525; AVX512VL:       # %bb.0:3526; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,0,0,4,4,4,12,8,8,8,8,12,12,12,12]3527; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03528; AVX512VL-NEXT:    retq3529;3530; XOPAVX1-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3531; XOPAVX1:       # %bb.0:3532; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13533; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,0,1,0,1,0,1,8,9,8,9,8,9],xmm1[8,9]3534; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]3535; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,4,4,4]3536; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03537; XOPAVX1-NEXT:    retq3538;3539; XOPAVX2-LABEL: shuffle_v16i16_00_00_00_00_04_04_04_12_08_08_08_08_12_12_12_12:3540; XOPAVX2:       # %bb.0:3541; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3542; XOPAVX2-NEXT:    vpsllq $48, %ymm1, %ymm13543; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]3544; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,4,4,8,9,10,11,12,12,12,12]3545; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]3546; XOPAVX2-NEXT:    retq3547  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 12, i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12>3548  ret <16 x i16> %shuffle3549}3550 3551define <16 x i16> @shuffle_v16i16_uu_00_uu_01_uu_02_uu_11_uu_08_uu_09_uu_10_uu_11(<16 x i16> %a, <16 x i16> %b) {3552; AVX1-LABEL: shuffle_v16i16_uu_00_uu_01_uu_02_uu_11_uu_08_uu_09_uu_10_uu_11:3553; AVX1:       # %bb.0:3554; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13555; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm1[0,0,1,1,2,2,3,3]3556; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]3557; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]3558; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,6,7]3559; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03560; AVX1-NEXT:    retq3561;3562; AVX2-LABEL: shuffle_v16i16_uu_00_uu_01_uu_02_uu_11_uu_08_uu_09_uu_10_uu_11:3563; AVX2:       # %bb.0:3564; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3565; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,0,1,u,u,2,3,u,u,4,5,u,u,14,15,u,u,16,17,u,u,18,19,u,u,20,21,u,u,22,23]3566; AVX2-NEXT:    retq3567;3568; AVX512VL-LABEL: shuffle_v16i16_uu_00_uu_01_uu_02_uu_11_uu_08_uu_09_uu_10_uu_11:3569; AVX512VL:       # %bb.0:3570; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,0,1,0,2,0,11,0,8,0,9,0,10,0,11]3571; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03572; AVX512VL-NEXT:    retq3573;3574; XOPAVX1-LABEL: shuffle_v16i16_uu_00_uu_01_uu_02_uu_11_uu_08_uu_09_uu_10_uu_11:3575; XOPAVX1:       # %bb.0:3576; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13577; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm1[0,0,1,1,2,2,3,3]3578; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,0,1,2,3,2,3,4,5,4,5,6,7],xmm1[6,7]3579; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03580; XOPAVX1-NEXT:    retq3581;3582; XOPAVX2-LABEL: shuffle_v16i16_uu_00_uu_01_uu_02_uu_11_uu_08_uu_09_uu_10_uu_11:3583; XOPAVX2:       # %bb.0:3584; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]3585; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,0,1,u,u,2,3,u,u,4,5,u,u,14,15,u,u,16,17,u,u,18,19,u,u,20,21,u,u,22,23]3586; XOPAVX2-NEXT:    retq3587  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 0, i32 poison, i32 1, i32 poison, i32 2, i32 poison, i32 11, i32 poison, i32 8, i32 poison, i32 9, i32 poison, i32 10, i32 poison, i32 11>3588  ret <16 x i16> %shuffle3589}3590 3591define <16 x i16> @shuffle_v16i16_uu_04_uu_05_uu_06_uu_15_uu_12_uu_13_uu_14_uu_15(<16 x i16> %a, <16 x i16> %b) {3592; AVX1-LABEL: shuffle_v16i16_uu_04_uu_05_uu_06_uu_15_uu_12_uu_13_uu_14_uu_15:3593; AVX1:       # %bb.0:3594; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13595; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm1[4,4,5,5,6,6,7,7]3596; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]3597; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]3598; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,6,7]3599; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03600; AVX1-NEXT:    retq3601;3602; AVX2-LABEL: shuffle_v16i16_uu_04_uu_05_uu_06_uu_15_uu_12_uu_13_uu_14_uu_15:3603; AVX2:       # %bb.0:3604; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,3,3,3]3605; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,0,1,u,u,2,3,u,u,4,5,u,u,14,15,u,u,16,17,u,u,18,19,u,u,20,21,u,u,22,23]3606; AVX2-NEXT:    retq3607;3608; AVX512VL-LABEL: shuffle_v16i16_uu_04_uu_05_uu_06_uu_15_uu_12_uu_13_uu_14_uu_15:3609; AVX512VL:       # %bb.0:3610; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,4,0,5,0,6,0,15,0,12,0,13,0,14,0,15]3611; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03612; AVX512VL-NEXT:    retq3613;3614; XOPAVX1-LABEL: shuffle_v16i16_uu_04_uu_05_uu_06_uu_15_uu_12_uu_13_uu_14_uu_15:3615; XOPAVX1:       # %bb.0:3616; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13617; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm2 = xmm1[4,4,5,5,6,6,7,7]3618; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,8,9,10,11,10,11,12,13,12,13,14,15],xmm1[14,15]3619; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm03620; XOPAVX1-NEXT:    retq3621;3622; XOPAVX2-LABEL: shuffle_v16i16_uu_04_uu_05_uu_06_uu_15_uu_12_uu_13_uu_14_uu_15:3623; XOPAVX2:       # %bb.0:3624; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,3,3,3]3625; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,0,1,u,u,2,3,u,u,4,5,u,u,14,15,u,u,16,17,u,u,18,19,u,u,20,21,u,u,22,23]3626; XOPAVX2-NEXT:    retq3627  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 4, i32 poison, i32 5, i32 poison, i32 6, i32 poison, i32 15, i32 poison, i32 12, i32 poison, i32 13, i32 poison, i32 14, i32 poison, i32 15>3628  ret <16 x i16> %shuffle3629}3630 3631define <16 x i16> @shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13(<16 x i16> %a, <16 x i16> %b) {3632; AVX1-LABEL: shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13:3633; AVX1:       # %bb.0:3634; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13635; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4],xmm1[5],xmm0[6,7]3636; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7]3637; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[3,1,2,0,4,5,6,7]3638; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03639; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]3640; AVX1-NEXT:    retq3641;3642; AVX2-SLOW-LABEL: shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13:3643; AVX2-SLOW:       # %bb.0:3644; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3645; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3646; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,1,2,0,4,5,6,7,11,9,10,8,12,13,14,15]3647; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]3648; AVX2-SLOW-NEXT:    retq3649;3650; AVX2-FAST-LABEL: shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13:3651; AVX2-FAST:       # %bb.0:3652; AVX2-FAST-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3653; AVX2-FAST-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3654; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,2,3,4,5,0,1,12,13,14,15,8,9,10,11,22,23,18,19,20,21,16,17,28,29,30,31,24,25,26,27]3655; AVX2-FAST-NEXT:    retq3656;3657; AVX512VL-LABEL: shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13:3658; AVX512VL:       # %bb.0:3659; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [3,1,2,0,6,7,4,13,11,9,10,8,14,15,12,13]3660; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03661; AVX512VL-NEXT:    retq3662;3663; XOPAVX1-LABEL: shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13:3664; XOPAVX1:       # %bb.0:3665; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13666; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[6,7,2,3,4,5,0,1,12,13,14,15,8,9],xmm1[10,11]3667; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[3,1,2,0,4,5,6,7]3668; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,3,2]3669; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03670; XOPAVX1-NEXT:    retq3671;3672; XOPAVX2-LABEL: shuffle_v16i16_03_01_02_00_06_07_04_13_11_09_10_08_14_15_12_13:3673; XOPAVX2:       # %bb.0:3674; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3675; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3676; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,1,2,0,4,5,6,7,11,9,10,8,12,13,14,15]3677; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]3678; XOPAVX2-NEXT:    retq3679  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 1, i32 2, i32 0, i32 6, i32 7, i32 4, i32 13, i32 11, i32 9, i32 10, i32 8, i32 14, i32 15, i32 12, i32 13>3680  ret <16 x i16> %shuffle3681}3682 3683define <16 x i16> @shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {3684; AVX1-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3685; AVX1:       # %bb.0:3686; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13687; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]3688; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,u,u]3689; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]3690; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]3691; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03692; AVX1-NEXT:    retq3693;3694; AVX2-SLOW-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3695; AVX2-SLOW:       # %bb.0:3696; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,u,u,24,25,24,25,24,25,24,25,16,17,16,17,16,17,u,u]3697; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3698; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3699; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3700; AVX2-SLOW-NEXT:    retq3701;3702; AVX2-FAST-ALL-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3703; AVX2-FAST-ALL:       # %bb.0:3704; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,4,0,6,4,0,0]3705; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm03706; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,4,5,4,5,4,5,8,9,16,17,16,17,16,17,16,17,20,21,20,21,20,21,20,21]3707; AVX2-FAST-ALL-NEXT:    retq3708;3709; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3710; AVX2-FAST-PERLANE:       # %bb.0:3711; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,u,u,24,25,24,25,24,25,24,25,16,17,16,17,16,17,u,u]3712; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3713; AVX2-FAST-PERLANE-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3714; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3715; AVX2-FAST-PERLANE-NEXT:    retq3716;3717; AVX512VL-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3718; AVX512VL:       # %bb.0:3719; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [4,4,4,4,0,0,0,8,12,12,12,12,8,8,8,8]3720; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03721; AVX512VL-NEXT:    retq3722;3723; XOPAVX1-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3724; XOPAVX1:       # %bb.0:3725; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13726; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1],xmm1[0,1]3727; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,8,9,8,9,8,9,0,1,0,1,0,1,0,1]3728; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03729; XOPAVX1-NEXT:    retq3730;3731; XOPAVX2-LABEL: shuffle_v16i16_04_04_04_04_00_00_00_08_12_12_12_12_08_08_08_08:3732; XOPAVX2:       # %bb.0:3733; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,8,9,8,9,0,1,0,1,0,1,u,u,24,25,24,25,24,25,24,25,16,17,16,17,16,17,u,u]3734; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3735; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3736; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3737; XOPAVX2-NEXT:    retq3738  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 0, i32 0, i32 0, i32 8, i32 12, i32 12, i32 12, i32 12, i32 8, i32 8, i32 8, i32 8>3739  ret <16 x i16> %shuffle3740}3741 3742define <16 x i16> @shuffle_v16i16_02_03_00_01_06_07_04_13_10_11_08_09_14_15_12_13(<16 x i16> %a, <16 x i16> %b) {3743; AVX1-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_13_10_11_08_09_14_15_12_13:3744; AVX1:       # %bb.0:3745; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13746; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4],xmm1[5],xmm0[6,7]3747; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3748; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]3749; AVX1-NEXT:    retq3750;3751; AVX2-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_13_10_11_08_09_14_15_12_13:3752; AVX2:       # %bb.0:3753; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3754; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3755; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]3756; AVX2-NEXT:    retq3757;3758; AVX512VL-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_13_10_11_08_09_14_15_12_13:3759; AVX512VL:       # %bb.0:3760; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,3,0,1,6,7,4,13,10,11,8,9,14,15,12,13]3761; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03762; AVX512VL-NEXT:    retq3763;3764; XOPAVX1-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_13_10_11_08_09_14_15_12_13:3765; XOPAVX1:       # %bb.0:3766; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13767; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4],xmm1[5],xmm0[6,7]3768; XOPAVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]3769; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]3770; XOPAVX1-NEXT:    retq3771;3772; XOPAVX2-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_13_10_11_08_09_14_15_12_13:3773; XOPAVX2:       # %bb.0:3774; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3775; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3776; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]3777; XOPAVX2-NEXT:    retq3778  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 13, i32 10, i32 11, i32 8, i32 9, i32 14, i32 15, i32 12, i32 13>3779  ret <16 x i16> %shuffle3780}3781 3782define <16 x i16> @shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13(<16 x i16> %a, <16 x i16> %b) {3783; AVX1-LABEL: shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13:3784; AVX1:       # %bb.0:3785; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13786; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4],xmm1[5],xmm0[6,7]3787; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,3,0,2,4,5,6,7]3788; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[2,3,0,2,4,5,6,7]3789; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03790; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]3791; AVX1-NEXT:    retq3792;3793; AVX2-SLOW-LABEL: shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13:3794; AVX2-SLOW:       # %bb.0:3795; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3796; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3797; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[2,3,0,2,4,5,6,7,10,11,8,10,12,13,14,15]3798; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]3799; AVX2-SLOW-NEXT:    retq3800;3801; AVX2-FAST-LABEL: shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13:3802; AVX2-FAST:       # %bb.0:3803; AVX2-FAST-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3804; AVX2-FAST-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3805; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,6,7,0,1,4,5,12,13,14,15,8,9,10,11,20,21,22,23,16,17,20,21,28,29,30,31,24,25,26,27]3806; AVX2-FAST-NEXT:    retq3807;3808; AVX512VL-LABEL: shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13:3809; AVX512VL:       # %bb.0:3810; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,3,0,2,6,7,4,13,10,11,8,10,14,15,12,13]3811; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03812; AVX512VL-NEXT:    retq3813;3814; XOPAVX1-LABEL: shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13:3815; XOPAVX1:       # %bb.0:3816; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13817; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,4,5,12,13,14,15,8,9],xmm1[10,11]3818; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[2,3,0,2,4,5,6,7]3819; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,3,2]3820; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03821; XOPAVX1-NEXT:    retq3822;3823; XOPAVX2-LABEL: shuffle_v16i16_02_03_00_02_06_07_04_13_10_11_08_10_14_15_12_13:3824; XOPAVX2:       # %bb.0:3825; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3826; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]3827; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[2,3,0,2,4,5,6,7,10,11,8,10,12,13,14,15]3828; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,3,2,4,5,7,6]3829; XOPAVX2-NEXT:    retq3830  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 2, i32 3, i32 0, i32 2, i32 6, i32 7, i32 4, i32 13, i32 10, i32 11, i32 8, i32 10, i32 14, i32 15, i32 12, i32 13>3831  ret <16 x i16> %shuffle3832}3833 3834define <16 x i16> @shuffle_v16i16_02_03_00_01_06_07_04_15_10_11_08_09_14_15_12_15(<16 x i16> %a, <16 x i16> %b) {3835; AVX1-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_15_10_11_08_09_14_15_12_15:3836; AVX1:       # %bb.0:3837; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13838; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]3839; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]3840; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,0,2,3]3841; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,7,4,7]3842; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03843; AVX1-NEXT:    retq3844;3845; AVX2-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_15_10_11_08_09_14_15_12_15:3846; AVX2:       # %bb.0:3847; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3848; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]3849; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]3850; AVX2-NEXT:    retq3851;3852; AVX512VL-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_15_10_11_08_09_14_15_12_15:3853; AVX512VL:       # %bb.0:3854; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,3,0,1,6,7,4,15,10,11,8,9,14,15,12,15]3855; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03856; AVX512VL-NEXT:    retq3857;3858; XOPAVX1-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_15_10_11_08_09_14_15_12_15:3859; XOPAVX1:       # %bb.0:3860; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13861; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2]3862; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]3863; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[1,0,2,3]3864; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,7,4,7]3865; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03866; XOPAVX1-NEXT:    retq3867;3868; XOPAVX2-LABEL: shuffle_v16i16_02_03_00_01_06_07_04_15_10_11_08_09_14_15_12_15:3869; XOPAVX2:       # %bb.0:3870; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3871; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6]3872; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]3873; XOPAVX2-NEXT:    retq3874  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 15, i32 10, i32 11, i32 8, i32 9, i32 14, i32 15, i32 12, i32 15>3875  ret <16 x i16> %shuffle3876}3877 3878define <16 x i16> @shuffle_v16i16_07_05_06_04_03_01_02_08_15_13_14_12_11_09_10_08(<16 x i16> %a, <16 x i16> %b) {3879; AVX1-LABEL: shuffle_v16i16_07_05_06_04_03_01_02_08_15_13_14_12_11_09_10_08:3880; AVX1:       # %bb.0:3881; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13882; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]3883; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm33884; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3,4,5,6,7]3885; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm03886; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm03887; AVX1-NEXT:    retq3888;3889; AVX2-LABEL: shuffle_v16i16_07_05_06_04_03_01_02_08_15_13_14_12_11_09_10_08:3890; AVX2:       # %bb.0:3891; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3892; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6,7],ymm1[8],ymm0[9,10,11,12,13,14,15]3893; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1,30,31,26,27,28,29,24,25,22,23,18,19,20,21,16,17]3894; AVX2-NEXT:    retq3895;3896; AVX512VL-LABEL: shuffle_v16i16_07_05_06_04_03_01_02_08_15_13_14_12_11_09_10_08:3897; AVX512VL:       # %bb.0:3898; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [7,5,6,4,3,1,2,8,15,13,14,12,11,9,10,8]3899; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03900; AVX512VL-NEXT:    retq3901;3902; XOPAVX1-LABEL: shuffle_v16i16_07_05_06_04_03_01_02_08_15_13_14_12_11_09_10_08:3903; XOPAVX1:       # %bb.0:3904; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13905; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5],xmm1[0,1]3906; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1]3907; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03908; XOPAVX1-NEXT:    retq3909;3910; XOPAVX2-LABEL: shuffle_v16i16_07_05_06_04_03_01_02_08_15_13_14_12_11_09_10_08:3911; XOPAVX2:       # %bb.0:3912; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]3913; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6,7],ymm1[8],ymm0[9,10,11,12,13,14,15]3914; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,10,11,12,13,8,9,6,7,2,3,4,5,0,1,30,31,26,27,28,29,24,25,22,23,18,19,20,21,16,17]3915; XOPAVX2-NEXT:    retq3916  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 7, i32 5, i32 6, i32 4, i32 3, i32 1, i32 2, i32 8, i32 15, i32 13, i32 14, i32 12, i32 11, i32 9, i32 10, i32 8>3917  ret <16 x i16> %shuffle3918}3919 3920define <16 x i16> @shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08(<16 x i16> %a, <16 x i16> %b) {3921; AVX1-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3922; AVX1:       # %bb.0:3923; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13924; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]3925; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,u,u]3926; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]3927; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]3928; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03929; AVX1-NEXT:    retq3930;3931; AVX2-SLOW-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3932; AVX2-SLOW:       # %bb.0:3933; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,u,u,18,19,16,17,26,27,24,25,26,27,24,25,18,19,u,u]3934; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3935; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3936; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3937; AVX2-SLOW-NEXT:    retq3938;3939; AVX2-FAST-ALL-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3940; AVX2-FAST-ALL:       # %bb.0:3941; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,4,0,4,6,0,0]3942; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm03943; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5,6,7,4,5,2,3,8,9,18,19,16,17,22,23,20,21,22,23,20,21,18,19,16,17]3944; AVX2-FAST-ALL-NEXT:    retq3945;3946; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3947; AVX2-FAST-PERLANE:       # %bb.0:3948; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,u,u,18,19,16,17,26,27,24,25,26,27,24,25,18,19,u,u]3949; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3950; AVX2-FAST-PERLANE-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3951; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3952; AVX2-FAST-PERLANE-NEXT:    retq3953;3954; AVX512VL-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3955; AVX512VL:       # %bb.0:3956; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [1,0,5,4,5,4,1,8,9,8,13,12,13,12,9,8]3957; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm03958; AVX512VL-NEXT:    retq3959;3960; XOPAVX1-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3961; XOPAVX1:       # %bb.0:3962; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13963; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3],xmm1[0,1]3964; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[2,3,0,1,10,11,8,9,10,11,8,9,2,3,0,1]3965; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03966; XOPAVX1-NEXT:    retq3967;3968; XOPAVX2-LABEL: shuffle_v16i16_01_00_05_04_05_04_01_08_09_08_13_12_13_12_09_08:3969; XOPAVX2:       # %bb.0:3970; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[2,3,0,1,10,11,8,9,10,11,8,9,2,3,u,u,18,19,16,17,26,27,24,25,26,27,24,25,18,19,u,u]3971; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3972; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3973; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3974; XOPAVX2-NEXT:    retq3975  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 1, i32 0, i32 5, i32 4, i32 5, i32 4, i32 1, i32 8, i32 9, i32 8, i32 13, i32 12, i32 13, i32 12, i32 9, i32 8>3976  ret <16 x i16> %shuffle3977}3978 3979define <16 x i16> @shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08(<16 x i16> %a, <16 x i16> %b) {3980; AVX1-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:3981; AVX1:       # %bb.0:3982; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm13983; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]3984; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,u,u]3985; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]3986; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]3987; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm03988; AVX1-NEXT:    retq3989;3990; AVX2-SLOW-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:3991; AVX2-SLOW:       # %bb.0:3992; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,u,u,26,27,24,25,18,19,16,17,26,27,24,25,18,19,u,u]3993; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]3994; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]3995; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3996; AVX2-SLOW-NEXT:    retq3997;3998; AVX2-FAST-ALL-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:3999; AVX2-FAST-ALL:       # %bb.0:4000; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,4,0,6,4,0,0]4001; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04002; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5,2,3,0,1,6,7,8,9,18,19,16,17,22,23,20,21,18,19,16,17,22,23,20,21]4003; AVX2-FAST-ALL-NEXT:    retq4004;4005; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:4006; AVX2-FAST-PERLANE:       # %bb.0:4007; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,u,u,26,27,24,25,18,19,16,17,26,27,24,25,18,19,u,u]4008; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4009; AVX2-FAST-PERLANE-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4010; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4011; AVX2-FAST-PERLANE-NEXT:    retq4012;4013; AVX512VL-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:4014; AVX512VL:       # %bb.0:4015; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [5,4,1,0,5,4,1,8,13,12,9,8,13,12,9,8]4016; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04017; AVX512VL-NEXT:    retq4018;4019; XOPAVX1-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:4020; XOPAVX1:       # %bb.0:4021; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14022; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3],xmm1[0,1]4023; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[10,11,8,9,2,3,0,1,10,11,8,9,2,3,0,1]4024; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04025; XOPAVX1-NEXT:    retq4026;4027; XOPAVX2-LABEL: shuffle_v16i16_05_04_01_00_05_04_01_08_13_12_09_08_13_12_09_08:4028; XOPAVX2:       # %bb.0:4029; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[10,11,8,9,2,3,0,1,10,11,8,9,2,3,u,u,26,27,24,25,18,19,16,17,26,27,24,25,18,19,u,u]4030; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4031; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4032; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4033; XOPAVX2-NEXT:    retq4034  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 5, i32 4, i32 1, i32 0, i32 5, i32 4, i32 1, i32 8, i32 13, i32 12, i32 9, i32 8, i32 13, i32 12, i32 9, i32 8>4035  ret <16 x i16> %shuffle4036}4037 4038define <16 x i16> @shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12(<16 x i16> %a, <16 x i16> %b) {4039; AVX1-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4040; AVX1:       # %bb.0:4041; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14042; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24043; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,u,u]4044; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4045; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]4046; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04047; AVX1-NEXT:    retq4048;4049; AVX2-SLOW-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4050; AVX2-SLOW:       # %bb.0:4051; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,u,u,26,27,24,25,18,19,16,17,18,19,16,17,26,27,u,u]4052; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4053; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04054; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4055; AVX2-SLOW-NEXT:    retq4056;4057; AVX2-FAST-ALL-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4058; AVX2-FAST-ALL:       # %bb.0:4059; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,6,0,6,4,0,0]4060; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04061; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5,6,7,4,5,2,3,8,9,18,19,16,17,22,23,20,21,22,23,20,21,18,19,16,17]4062; AVX2-FAST-ALL-NEXT:    retq4063;4064; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4065; AVX2-FAST-PERLANE:       # %bb.0:4066; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,u,u,26,27,24,25,18,19,16,17,18,19,16,17,26,27,u,u]4067; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4068; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04069; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4070; AVX2-FAST-PERLANE-NEXT:    retq4071;4072; AVX512VL-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4073; AVX512VL:       # %bb.0:4074; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [5,4,1,0,1,0,5,12,13,12,9,8,9,8,13,12]4075; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04076; AVX512VL-NEXT:    retq4077;4078; XOPAVX1-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4079; XOPAVX1:       # %bb.0:4080; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14081; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11],xmm1[8,9]4082; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[10,11,8,9,2,3,0,1,2,3,0,1,10,11,8,9]4083; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04084; XOPAVX1-NEXT:    retq4085;4086; XOPAVX2-LABEL: shuffle_v16i16_05_04_01_00_01_00_05_12_13_12_09_08_09_08_13_12:4087; XOPAVX2:       # %bb.0:4088; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[10,11,8,9,2,3,0,1,2,3,0,1,10,11,u,u,26,27,24,25,18,19,16,17,18,19,16,17,26,27,u,u]4089; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4090; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04091; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4092; XOPAVX2-NEXT:    retq4093  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 5, i32 4, i32 1, i32 0, i32 1, i32 0, i32 5, i32 12, i32 13, i32 12, i32 9, i32 8, i32 9, i32 8, i32 13, i32 12>4094  ret <16 x i16> %shuffle4095}4096 4097define <16 x i16> @shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08(<16 x i16> %a, <16 x i16> %b) {4098; AVX1-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4099; AVX1:       # %bb.0:4100; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14101; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]4102; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,u,u]4103; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4104; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]4105; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04106; AVX1-NEXT:    retq4107;4108; AVX2-SLOW-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4109; AVX2-SLOW:       # %bb.0:4110; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,u,u,16,17,24,25,24,25,16,17,16,17,24,25,24,25,u,u]4111; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4112; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4113; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4114; AVX2-SLOW-NEXT:    retq4115;4116; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4117; AVX2-FAST-ALL:       # %bb.0:4118; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,4,0,4,6,0,0]4119; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04120; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,4,5,0,1,0,1,4,5,4,5,8,9,16,17,20,21,20,21,16,17,16,17,20,21,20,21,16,17]4121; AVX2-FAST-ALL-NEXT:    retq4122;4123; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4124; AVX2-FAST-PERLANE:       # %bb.0:4125; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,u,u,16,17,24,25,24,25,16,17,16,17,24,25,24,25,u,u]4126; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4127; AVX2-FAST-PERLANE-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4128; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4129; AVX2-FAST-PERLANE-NEXT:    retq4130;4131; AVX512VL-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4132; AVX512VL:       # %bb.0:4133; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,4,4,0,0,4,4,8,8,12,12,8,8,12,12,8]4134; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04135; AVX512VL-NEXT:    retq4136;4137; XOPAVX1-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4138; XOPAVX1:       # %bb.0:4139; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14140; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9],xmm1[0,1]4141; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,0,1,8,9,8,9,0,1]4142; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04143; XOPAVX1-NEXT:    retq4144;4145; XOPAVX2-LABEL: shuffle_v16i16_00_04_04_00_00_04_04_08_08_12_12_08_08_12_12_08:4146; XOPAVX2:       # %bb.0:4147; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,0,1,8,9,8,9,u,u,16,17,24,25,24,25,16,17,16,17,24,25,24,25,u,u]4148; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4149; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4150; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4151; XOPAVX2-NEXT:    retq4152  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 4, i32 4, i32 0, i32 0, i32 4, i32 4, i32 8, i32 8, i32 12, i32 12, i32 8, i32 8, i32 12, i32 12, i32 8>4153  ret <16 x i16> %shuffle4154}4155 4156define <16 x i16> @shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12(<16 x i16> %a, <16 x i16> %b) {4157; AVX1-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4158; AVX1:       # %bb.0:4159; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14160; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24161; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,u,u]4162; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4163; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]4164; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04165; AVX1-NEXT:    retq4166;4167; AVX2-SLOW-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4168; AVX2-SLOW:       # %bb.0:4169; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,u,u,24,25,16,17,16,17,24,25,24,25,16,17,16,17,u,u]4170; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4171; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04172; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4173; AVX2-SLOW-NEXT:    retq4174;4175; AVX2-FAST-ALL-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4176; AVX2-FAST-ALL:       # %bb.0:4177; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,6,0,6,4,0,0]4178; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04179; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,4,5,0,1,0,1,4,5,4,5,8,9,16,17,20,21,20,21,16,17,16,17,20,21,20,21,16,17]4180; AVX2-FAST-ALL-NEXT:    retq4181;4182; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4183; AVX2-FAST-PERLANE:       # %bb.0:4184; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,u,u,24,25,16,17,16,17,24,25,24,25,16,17,16,17,u,u]4185; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4186; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04187; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4188; AVX2-FAST-PERLANE-NEXT:    retq4189;4190; AVX512VL-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4191; AVX512VL:       # %bb.0:4192; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [4,0,0,4,4,0,0,12,12,8,8,12,12,8,8,12]4193; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04194; AVX512VL-NEXT:    retq4195;4196; XOPAVX1-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4197; XOPAVX1:       # %bb.0:4198; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14199; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1],xmm1[8,9]4200; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,0,1,0,1,8,9,8,9,0,1,0,1,8,9]4201; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04202; XOPAVX1-NEXT:    retq4203;4204; XOPAVX2-LABEL: shuffle_v16i16_04_00_00_04_04_00_00_12_12_08_08_12_12_08_08_12:4205; XOPAVX2:       # %bb.0:4206; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,0,1,0,1,8,9,8,9,0,1,0,1,u,u,24,25,16,17,16,17,24,25,24,25,16,17,16,17,u,u]4207; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4208; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04209; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4210; XOPAVX2-NEXT:    retq4211  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 0, i32 0, i32 4, i32 4, i32 0, i32 0, i32 12, i32 12, i32 8, i32 8, i32 12, i32 12, i32 8, i32 8, i32 12>4212  ret <16 x i16> %shuffle4213}4214 4215define <16 x i16> @shuffle_v16i16_02_06_04_00_05_01_07_11_10_14_12_08_13_09_15_11(<16 x i16> %a, <16 x i16> %b) {4216; AVX1-LABEL: shuffle_v16i16_02_06_04_00_05_01_07_11_10_14_12_08_13_09_15_11:4217; AVX1:       # %bb.0:4218; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14219; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]4220; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm34221; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]4222; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04223; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm04224; AVX1-NEXT:    retq4225;4226; AVX2-LABEL: shuffle_v16i16_02_06_04_00_05_01_07_11_10_14_12_08_13_09_15_11:4227; AVX2:       # %bb.0:4228; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4229; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]4230; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7,20,21,28,29,24,25,16,17,26,27,18,19,30,31,22,23]4231; AVX2-NEXT:    retq4232;4233; AVX512VL-LABEL: shuffle_v16i16_02_06_04_00_05_01_07_11_10_14_12_08_13_09_15_11:4234; AVX512VL:       # %bb.0:4235; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,6,4,0,5,1,7,11,10,14,12,8,13,9,15,11]4236; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04237; AVX512VL-NEXT:    retq4238;4239; XOPAVX1-LABEL: shuffle_v16i16_02_06_04_00_05_01_07_11_10_14_12_08_13_09_15_11:4240; XOPAVX1:       # %bb.0:4241; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14242; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15],xmm1[6,7]4243; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7]4244; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04245; XOPAVX1-NEXT:    retq4246;4247; XOPAVX2-LABEL: shuffle_v16i16_02_06_04_00_05_01_07_11_10_14_12_08_13_09_15_11:4248; XOPAVX2:       # %bb.0:4249; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4250; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]4251; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,12,13,8,9,0,1,10,11,2,3,14,15,6,7,20,21,28,29,24,25,16,17,26,27,18,19,30,31,22,23]4252; XOPAVX2-NEXT:    retq4253  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 2, i32 6, i32 4, i32 0, i32 5, i32 1, i32 7, i32 11, i32 10, i32 14, i32 12, i32 8, i32 13, i32 9, i32 15, i32 11>4254  ret <16 x i16> %shuffle4255}4256 4257define <16 x i16> @shuffle_v16i16_02_00_06_04_05_01_07_11_10_08_14_12_13_09_15_11(<16 x i16> %a, <16 x i16> %b) {4258; AVX1-LABEL: shuffle_v16i16_02_00_06_04_05_01_07_11_10_08_14_12_13_09_15_11:4259; AVX1:       # %bb.0:4260; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14261; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]4262; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm34263; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]4264; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04265; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm04266; AVX1-NEXT:    retq4267;4268; AVX2-LABEL: shuffle_v16i16_02_00_06_04_05_01_07_11_10_08_14_12_13_09_15_11:4269; AVX2:       # %bb.0:4270; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4271; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]4272; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7,20,21,16,17,28,29,24,25,26,27,18,19,30,31,22,23]4273; AVX2-NEXT:    retq4274;4275; AVX512VL-LABEL: shuffle_v16i16_02_00_06_04_05_01_07_11_10_08_14_12_13_09_15_11:4276; AVX512VL:       # %bb.0:4277; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,0,6,4,5,1,7,11,10,8,14,12,13,9,15,11]4278; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04279; AVX512VL-NEXT:    retq4280;4281; XOPAVX1-LABEL: shuffle_v16i16_02_00_06_04_05_01_07_11_10_08_14_12_13_09_15_11:4282; XOPAVX1:       # %bb.0:4283; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14284; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15],xmm1[6,7]4285; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7]4286; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04287; XOPAVX1-NEXT:    retq4288;4289; XOPAVX2-LABEL: shuffle_v16i16_02_00_06_04_05_01_07_11_10_08_14_12_13_09_15_11:4290; XOPAVX2:       # %bb.0:4291; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4292; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]4293; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,0,1,12,13,8,9,10,11,2,3,14,15,6,7,20,21,16,17,28,29,24,25,26,27,18,19,30,31,22,23]4294; XOPAVX2-NEXT:    retq4295  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 2, i32 0, i32 6, i32 4, i32 5, i32 1, i32 7, i32 11, i32 10, i32 8, i32 14, i32 12, i32 13, i32 9, i32 15, i32 11>4296  ret <16 x i16> %shuffle4297}4298 4299define <16 x i16> @shuffle_v16i16_02_06_04_00_01_03_07_13_10_14_12_08_09_11_15_13(<16 x i16> %a, <16 x i16> %b) {4300; AVX1-LABEL: shuffle_v16i16_02_06_04_00_01_03_07_13_10_14_12_08_09_11_15_13:4301; AVX1:       # %bb.0:4302; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14303; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]4304; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm34305; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4],xmm1[5],xmm0[6,7]4306; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04307; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm04308; AVX1-NEXT:    retq4309;4310; AVX2-LABEL: shuffle_v16i16_02_06_04_00_01_03_07_13_10_14_12_08_09_11_15_13:4311; AVX2:       # %bb.0:4312; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4313; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]4314; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11,20,21,28,29,24,25,16,17,18,19,22,23,30,31,26,27]4315; AVX2-NEXT:    retq4316;4317; AVX512VL-LABEL: shuffle_v16i16_02_06_04_00_01_03_07_13_10_14_12_08_09_11_15_13:4318; AVX512VL:       # %bb.0:4319; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [2,6,4,0,1,3,7,13,10,14,12,8,9,11,15,13]4320; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04321; AVX512VL-NEXT:    retq4322;4323; XOPAVX1-LABEL: shuffle_v16i16_02_06_04_00_01_03_07_13_10_14_12_08_09_11_15_13:4324; XOPAVX1:       # %bb.0:4325; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14326; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15],xmm1[10,11]4327; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11]4328; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04329; XOPAVX1-NEXT:    retq4330;4331; XOPAVX2-LABEL: shuffle_v16i16_02_06_04_00_01_03_07_13_10_14_12_08_09_11_15_13:4332; XOPAVX2:       # %bb.0:4333; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4334; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4],ymm1[5],ymm0[6,7,8,9,10,11,12],ymm1[13],ymm0[14,15]4335; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[4,5,12,13,8,9,0,1,2,3,6,7,14,15,10,11,20,21,28,29,24,25,16,17,18,19,22,23,30,31,26,27]4336; XOPAVX2-NEXT:    retq4337  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 2, i32 6, i32 4, i32 0, i32 1, i32 3, i32 7, i32 13, i32 10, i32 14, i32 12, i32 8, i32 9, i32 11, i32 15, i32 13>4338  ret <16 x i16> %shuffle4339}4340 4341define <16 x i16> @shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11(<16 x i16> %a, <16 x i16> %b) {4342; AVX1-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4343; AVX1:       # %bb.0:4344; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14345; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]4346; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm34347; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5,6,7]4348; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04349; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm04350; AVX1-NEXT:    retq4351;4352; AVX2-SLOW-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4353; AVX2-SLOW:       # %bb.0:4354; AVX2-SLOW-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,5,2,3,4,5,6,7]4355; AVX2-SLOW-NEXT:    vpermd %ymm0, %ymm1, %ymm04356; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7,28,29,28,29,30,31,26,27,18,19,28,29,24,25,22,23]4357; AVX2-SLOW-NEXT:    retq4358;4359; AVX2-FAST-ALL-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4360; AVX2-FAST-ALL:       # %bb.0:4361; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [3,2,0,5,7,6,4,5]4362; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04363; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,2,3,6,7,10,11,0,1,4,5,14,15,16,17,16,17,18,19,22,23,26,27,16,17,20,21,30,31]4364; AVX2-FAST-ALL-NEXT:    retq4365;4366; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4367; AVX2-FAST-PERLANE:       # %bb.0:4368; AVX2-FAST-PERLANE-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,5,2,3,4,5,6,7]4369; AVX2-FAST-PERLANE-NEXT:    vpermd %ymm0, %ymm1, %ymm04370; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7,28,29,28,29,30,31,26,27,18,19,28,29,24,25,22,23]4371; AVX2-FAST-PERLANE-NEXT:    retq4372;4373; AVX512VL-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4374; AVX512VL:       # %bb.0:4375; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [6,6,7,5,1,6,4,11,14,14,15,13,9,14,12,11]4376; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04377; AVX512VL-NEXT:    retq4378;4379; XOPAVX1-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4380; XOPAVX1:       # %bb.0:4381; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14382; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9],xmm1[6,7]4383; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7]4384; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04385; XOPAVX1-NEXT:    retq4386;4387; XOPAVX2-LABEL: shuffle_v16i16_06_06_07_05_01_06_04_11_14_14_15_13_09_14_12_11:4388; XOPAVX2:       # %bb.0:4389; XOPAVX2-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,5,2,3,4,5,6,7]4390; XOPAVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm04391; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[12,13,12,13,14,15,10,11,2,3,12,13,8,9,6,7,28,29,28,29,30,31,26,27,18,19,28,29,24,25,22,23]4392; XOPAVX2-NEXT:    retq4393  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 6, i32 6, i32 7, i32 5, i32 1, i32 6, i32 4, i32 11, i32 14, i32 14, i32 15, i32 13, i32 9, i32 14, i32 12, i32 11>4394  ret <16 x i16> %shuffle4395}4396 4397define <16 x i16> @shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {4398; AVX1-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4399; AVX1:       # %bb.0:4400; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14401; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24402; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,u,u]4403; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4404; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]4405; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04406; AVX1-NEXT:    retq4407;4408; AVX2-SLOW-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4409; AVX2-SLOW:       # %bb.0:4410; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,u,u,16,17,16,17,24,25,24,25,24,25,24,25,24,25,u,u]4411; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4412; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04413; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4414; AVX2-SLOW-NEXT:    retq4415;4416; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4417; AVX2-FAST-ALL:       # %bb.0:4418; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,6,0,4,6,0,0]4419; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04420; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5,4,5,4,5,4,5,8,9,16,17,16,17,20,21,20,21,20,21,20,21,20,21,20,21]4421; AVX2-FAST-ALL-NEXT:    retq4422;4423; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4424; AVX2-FAST-PERLANE:       # %bb.0:4425; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,u,u,16,17,16,17,24,25,24,25,24,25,24,25,24,25,u,u]4426; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4427; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04428; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4429; AVX2-FAST-PERLANE-NEXT:    retq4430;4431; AVX512VL-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4432; AVX512VL:       # %bb.0:4433; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,4,4,4,4,4,12,8,8,12,12,12,12,12,12]4434; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04435; AVX512VL-NEXT:    retq4436;4437; XOPAVX1-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4438; XOPAVX1:       # %bb.0:4439; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14440; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9],xmm1[8,9]4441; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,0,1,8,9,8,9,8,9,8,9,8,9,8,9]4442; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04443; XOPAVX1-NEXT:    retq4444;4445; XOPAVX2-LABEL: shuffle_v16i16_00_00_04_04_04_04_04_12_08_08_12_12_12_12_12_12:4446; XOPAVX2:       # %bb.0:4447; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,0,1,8,9,8,9,8,9,8,9,8,9,u,u,16,17,16,17,24,25,24,25,24,25,24,25,24,25,u,u]4448; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4449; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04450; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4451; XOPAVX2-NEXT:    retq4452  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 4, i32 12, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>4453  ret <16 x i16> %shuffle4454}4455 4456define <16 x i16> @shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {4457; AVX1-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4458; AVX1:       # %bb.0:4459; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14460; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24461; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,u,u]4462; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4463; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]4464; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04465; AVX1-NEXT:    retq4466;4467; AVX2-SLOW-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4468; AVX2-SLOW:       # %bb.0:4469; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,u,u,24,25,24,25,16,17,16,17,24,25,24,25,24,25,u,u]4470; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4471; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04472; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4473; AVX2-SLOW-NEXT:    retq4474;4475; AVX2-FAST-ALL-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4476; AVX2-FAST-ALL:       # %bb.0:4477; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,6,0,6,4,0,0]4478; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04479; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,4,5,4,5,0,1,0,1,0,1,8,9,16,17,16,17,20,21,20,21,16,17,16,17,16,17,16,17]4480; AVX2-FAST-ALL-NEXT:    retq4481;4482; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4483; AVX2-FAST-PERLANE:       # %bb.0:4484; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,u,u,24,25,24,25,16,17,16,17,24,25,24,25,24,25,u,u]4485; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4486; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04487; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4488; AVX2-FAST-PERLANE-NEXT:    retq4489;4490; AVX512VL-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4491; AVX512VL:       # %bb.0:4492; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [4,4,0,0,4,4,4,12,12,12,8,8,12,12,12,12]4493; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04494; AVX512VL-NEXT:    retq4495;4496; XOPAVX1-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4497; XOPAVX1:       # %bb.0:4498; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14499; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9],xmm1[8,9]4500; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,8,9,0,1,0,1,8,9,8,9,8,9,8,9]4501; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04502; XOPAVX1-NEXT:    retq4503;4504; XOPAVX2-LABEL: shuffle_v16i16_04_04_00_00_04_04_04_12_12_12_08_08_12_12_12_12:4505; XOPAVX2:       # %bb.0:4506; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,0,1,0,1,8,9,8,9,8,9,u,u,24,25,24,25,16,17,16,17,24,25,24,25,24,25,u,u]4507; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4508; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04509; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4510; XOPAVX2-NEXT:    retq4511  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 4, i32 0, i32 0, i32 4, i32 4, i32 4, i32 12, i32 12, i32 12, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12>4512  ret <16 x i16> %shuffle4513}4514 4515define <16 x i16> @shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {4516; AVX1-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4517; AVX1:       # %bb.0:4518; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14519; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24520; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u]4521; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4522; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]4523; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04524; AVX1-NEXT:    retq4525;4526; AVX2-SLOW-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4527; AVX2-SLOW:       # %bb.0:4528; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u,16,17,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4529; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4530; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04531; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4532; AVX2-SLOW-NEXT:    retq4533;4534; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4535; AVX2-FAST-ALL:       # %bb.0:4536; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,6,0,4,6,0,0]4537; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04538; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,4,5,0,1,4,5,4,5,4,5,8,9,16,17,20,21,20,21,16,17,20,21,20,21,20,21,20,21]4539; AVX2-FAST-ALL-NEXT:    retq4540;4541; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4542; AVX2-FAST-PERLANE:       # %bb.0:4543; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u,16,17,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4544; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4545; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04546; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4547; AVX2-FAST-PERLANE-NEXT:    retq4548;4549; AVX512VL-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4550; AVX512VL:       # %bb.0:4551; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,4,4,0,4,4,4,12,8,12,12,8,12,12,12,12]4552; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04553; AVX512VL-NEXT:    retq4554;4555; XOPAVX1-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4556; XOPAVX1:       # %bb.0:4557; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14558; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9],xmm1[8,9]4559; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]4560; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04561; XOPAVX1-NEXT:    retq4562;4563; XOPAVX2-LABEL: shuffle_v16i16_00_04_04_00_04_04_04_12_08_12_12_08_12_12_12_12:4564; XOPAVX2:       # %bb.0:4565; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u,16,17,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4566; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4567; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04568; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4569; XOPAVX2-NEXT:    retq4570  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 4, i32 4, i32 0, i32 4, i32 4, i32 4, i32 12, i32 8, i32 12, i32 12, i32 8, i32 12, i32 12, i32 12, i32 12>4571  ret <16 x i16> %shuffle4572}4573 4574define <16 x i16> @shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08(<16 x i16> %a, <16 x i16> %b) {4575; AVX1-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4576; AVX1:       # %bb.0:4577; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14578; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]4579; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,u,u]4580; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4581; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]4582; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04583; AVX1-NEXT:    retq4584;4585; AVX2-SLOW-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4586; AVX2-SLOW:       # %bb.0:4587; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,u,u,16,17,24,25,24,25,16,17,16,17,16,17,16,17,u,u]4588; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4589; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4590; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4591; AVX2-SLOW-NEXT:    retq4592;4593; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4594; AVX2-FAST-ALL:       # %bb.0:4595; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,4,0,4,6,0,0]4596; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04597; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,4,5,0,1,0,1,0,1,0,1,8,9,16,17,20,21,20,21,16,17,16,17,16,17,16,17,16,17]4598; AVX2-FAST-ALL-NEXT:    retq4599;4600; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4601; AVX2-FAST-PERLANE:       # %bb.0:4602; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,u,u,16,17,24,25,24,25,16,17,16,17,16,17,16,17,u,u]4603; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4604; AVX2-FAST-PERLANE-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4605; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4606; AVX2-FAST-PERLANE-NEXT:    retq4607;4608; AVX512VL-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4609; AVX512VL:       # %bb.0:4610; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,4,4,0,0,0,0,8,8,12,12,8,8,8,8,8]4611; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04612; AVX512VL-NEXT:    retq4613;4614; XOPAVX1-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4615; XOPAVX1:       # %bb.0:4616; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14617; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1],xmm1[0,1]4618; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,0,1,0,1,0,1,0,1]4619; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04620; XOPAVX1-NEXT:    retq4621;4622; XOPAVX2-LABEL: shuffle_v16i16_00_04_04_00_00_00_00_08_08_12_12_08_08_08_08_08:4623; XOPAVX2:       # %bb.0:4624; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,0,1,0,1,0,1,u,u,16,17,24,25,24,25,16,17,16,17,16,17,16,17,u,u]4625; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4626; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17]4627; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4628; XOPAVX2-NEXT:    retq4629  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 4, i32 4, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 12, i32 12, i32 8, i32 8, i32 8, i32 8, i32 8>4630  ret <16 x i16> %shuffle4631}4632 4633define <16 x i16> @shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15(<16 x i16> %a, <16 x i16> %b) {4634; AVX1-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4635; AVX1:       # %bb.0:4636; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14637; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]4638; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,0,4,5,6,7]4639; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]4640; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]4641; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,2,2,0,4,5,6,7]4642; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04643; AVX1-NEXT:    retq4644;4645; AVX2-SLOW-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4646; AVX2-SLOW:       # %bb.0:4647; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4648; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7]4649; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,2,2,0,4,5,6,7,8,10,10,8,12,13,14,15]4650; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]4651; AVX2-SLOW-NEXT:    retq4652;4653; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4654; AVX2-FAST-ALL:       # %bb.0:4655; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,3,7,4,6,7,0]4656; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04657; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,4,5,0,1,4,5,6,7,8,9,14,15,16,17,20,21,20,21,16,17,20,21,22,23,24,25,26,27]4658; AVX2-FAST-ALL-NEXT:    retq4659;4660; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4661; AVX2-FAST-PERLANE:       # %bb.0:4662; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4663; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,8,9,8,9,0,1,8,9,10,11,12,13,u,u,16,17,24,25,24,25,16,17,24,25,26,27,28,29,u,u]4664; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]4665; AVX2-FAST-PERLANE-NEXT:    retq4666;4667; AVX512VL-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4668; AVX512VL:       # %bb.0:4669; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,4,4,0,4,5,6,15,8,12,12,8,12,13,14,15]4670; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04671; AVX512VL-NEXT:    retq4672;4673; XOPAVX1-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4674; XOPAVX1:       # %bb.0:4675; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14676; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,10,11,12,13],xmm1[14,15]4677; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]4678; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,2,2,0,4,5,6,7]4679; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04680; XOPAVX1-NEXT:    retq4681;4682; XOPAVX2-LABEL: shuffle_v16i16_00_04_04_00_04_05_06_15_08_12_12_08_12_13_14_15:4683; XOPAVX2:       # %bb.0:4684; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]4685; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7]4686; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,2,2,0,4,5,6,7,8,10,10,8,12,13,14,15]4687; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]4688; XOPAVX2-NEXT:    retq4689  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 4, i32 4, i32 0, i32 4, i32 5, i32 6, i32 15, i32 8, i32 12, i32 12, i32 8, i32 12, i32 13, i32 14, i32 15>4690  ret <16 x i16> %shuffle4691}4692 4693define <16 x i16> @shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {4694; AVX1-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4695; AVX1:       # %bb.0:4696; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14697; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24698; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,u,u]4699; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4700; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]4701; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04702; AVX1-NEXT:    retq4703;4704; AVX2-SLOW-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4705; AVX2-SLOW:       # %bb.0:4706; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,u,u,16,17,18,19,24,25,24,25,24,25,24,25,24,25,u,u]4707; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4708; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04709; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4710; AVX2-SLOW-NEXT:    retq4711;4712; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4713; AVX2-FAST-ALL:       # %bb.0:4714; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,2,6,0,4,6,0,0]4715; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04716; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,u,u,4,5,4,5,4,5,4,5,4,5,8,9,16,17,u,u,20,21,20,21,20,21,20,21,20,21,20,21]4717; AVX2-FAST-ALL-NEXT:    retq4718;4719; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4720; AVX2-FAST-PERLANE:       # %bb.0:4721; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,u,u,16,17,18,19,24,25,24,25,24,25,24,25,24,25,u,u]4722; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4723; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04724; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4725; AVX2-FAST-PERLANE-NEXT:    retq4726;4727; AVX512VL-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4728; AVX512VL:       # %bb.0:4729; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,0,4,4,4,4,4,12,8,0,12,12,12,12,12,12]4730; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04731; AVX512VL-NEXT:    retq4732;4733; XOPAVX1-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4734; XOPAVX1:       # %bb.0:4735; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14736; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9],xmm1[8,9]4737; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,2,3,8,9,8,9,8,9,8,9,8,9,8,9]4738; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04739; XOPAVX1-NEXT:    retq4740;4741; XOPAVX2-LABEL: shuffle_v16i16_00_uu_04_04_04_04_04_12_08_uu_12_12_12_12_12_12:4742; XOPAVX2:       # %bb.0:4743; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,2,3,8,9,8,9,8,9,8,9,8,9,u,u,16,17,18,19,24,25,24,25,24,25,24,25,24,25,u,u]4744; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4745; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04746; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4747; XOPAVX2-NEXT:    retq4748  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 poison, i32 4, i32 4, i32 4, i32 4, i32 4, i32 12, i32 8, i32 poison, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>4749  ret <16 x i16> %shuffle4750}4751 4752define <16 x i16> @shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {4753; AVX1-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4754; AVX1:       # %bb.0:4755; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14756; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24757; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,u,u]4758; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4759; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]4760; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04761; AVX1-NEXT:    retq4762;4763; AVX2-SLOW-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4764; AVX2-SLOW:       # %bb.0:4765; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,u,u,24,25,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4766; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4767; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04768; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4769; AVX2-SLOW-NEXT:    retq4770;4771; AVX2-FAST-ALL-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4772; AVX2-FAST-ALL:       # %bb.0:4773; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,6,0,6,4,0,0]4774; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04775; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,u,u,4,5,0,1,0,1,0,1,8,9,16,17,16,17,u,u,20,21,16,17,16,17,16,17,16,17]4776; AVX2-FAST-ALL-NEXT:    retq4777;4778; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4779; AVX2-FAST-PERLANE:       # %bb.0:4780; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,u,u,24,25,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4781; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4782; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04783; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4784; AVX2-FAST-PERLANE-NEXT:    retq4785;4786; AVX512VL-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4787; AVX512VL:       # %bb.0:4788; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [4,4,0,0,4,4,4,12,12,12,0,8,12,12,12,12]4789; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04790; AVX512VL-NEXT:    retq4791;4792; XOPAVX1-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4793; XOPAVX1:       # %bb.0:4794; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14795; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9],xmm1[8,9]4796; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,8,9,8,9,0,1,8,9,8,9,8,9,8,9]4797; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04798; XOPAVX1-NEXT:    retq4799;4800; XOPAVX2-LABEL: shuffle_v16i16_04_04_uu_00_04_04_04_12_12_12_uu_08_12_12_12_12:4801; XOPAVX2:       # %bb.0:4802; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[8,9,8,9,8,9,0,1,8,9,8,9,8,9,u,u,24,25,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4803; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4804; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04805; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4806; XOPAVX2-NEXT:    retq4807  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 4, i32 poison, i32 0, i32 4, i32 4, i32 4, i32 12, i32 12, i32 12, i32 poison, i32 8, i32 12, i32 12, i32 12, i32 12>4808  ret <16 x i16> %shuffle4809}4810 4811define <16 x i16> @shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12(<16 x i16> %a, <16 x i16> %b) {4812; AVX1-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4813; AVX1:       # %bb.0:4814; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14815; AVX1-NEXT:    vpsllq $48, %xmm1, %xmm24816; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u]4817; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4818; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]4819; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04820; AVX1-NEXT:    retq4821;4822; AVX2-SLOW-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4823; AVX2-SLOW:       # %bb.0:4824; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u,16,17,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4825; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4826; AVX2-SLOW-NEXT:    vpsllq $48, %ymm0, %ymm04827; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4828; AVX2-SLOW-NEXT:    retq4829;4830; AVX2-FAST-ALL-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4831; AVX2-FAST-ALL:       # %bb.0:4832; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [2,0,6,0,6,4,0,0]4833; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm04834; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,0,1,0,1,4,5,0,1,0,1,0,1,8,9,u,u,16,17,16,17,20,21,16,17,16,17,16,17,16,17]4835; AVX2-FAST-ALL-NEXT:    retq4836;4837; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4838; AVX2-FAST-PERLANE:       # %bb.0:4839; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u,16,17,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4840; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4841; AVX2-FAST-PERLANE-NEXT:    vpsllq $48, %ymm0, %ymm04842; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4843; AVX2-FAST-PERLANE-NEXT:    retq4844;4845; AVX512VL-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4846; AVX512VL:       # %bb.0:4847; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,4,4,0,4,4,4,12,0,12,12,8,12,12,12,12]4848; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04849; AVX512VL-NEXT:    retq4850;4851; XOPAVX1-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4852; XOPAVX1:       # %bb.0:4853; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14854; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9],xmm1[8,9]4855; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,8,9,0,1,8,9,8,9,8,9,8,9]4856; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04857; XOPAVX1-NEXT:    retq4858;4859; XOPAVX2-LABEL: shuffle_v16i16_uu_04_04_00_04_04_04_12_uu_12_12_08_12_12_12_12:4860; XOPAVX2:       # %bb.0:4861; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,1,8,9,8,9,0,1,8,9,8,9,8,9,u,u,16,17,24,25,24,25,16,17,24,25,24,25,24,25,u,u]4862; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]4863; XOPAVX2-NEXT:    vpsllq $48, %ymm0, %ymm04864; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]4865; XOPAVX2-NEXT:    retq4866  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 4, i32 4, i32 0, i32 4, i32 4, i32 4, i32 12, i32 poison, i32 12, i32 12, i32 8, i32 12, i32 12, i32 12, i32 12>4867  ret <16 x i16> %shuffle4868}4869 4870define <16 x i16> @shuffle_v16i16_00_01_02_07_uu_uu_uu_uu_08_09_10_15_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {4871; AVX1-LABEL: shuffle_v16i16_00_01_02_07_uu_uu_uu_uu_08_09_10_15_uu_uu_uu_uu:4872; AVX1:       # %bb.0:4873; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14874; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]4875; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm14876; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04877; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04878; AVX1-NEXT:    retq4879;4880; AVX2OR512VL-LABEL: shuffle_v16i16_00_01_02_07_uu_uu_uu_uu_08_09_10_15_uu_uu_uu_uu:4881; AVX2OR512VL:       # %bb.0:4882; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15,16,17,18,19,20,21,30,31,20,21,30,31,28,29,30,31]4883; AVX2OR512VL-NEXT:    retq4884;4885; XOPAVX1-LABEL: shuffle_v16i16_00_01_02_07_uu_uu_uu_uu_08_09_10_15_uu_uu_uu_uu:4886; XOPAVX1:       # %bb.0:4887; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14888; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15]4889; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm14890; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04891; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04892; XOPAVX1-NEXT:    retq4893;4894; XOPAVX2-LABEL: shuffle_v16i16_00_01_02_07_uu_uu_uu_uu_08_09_10_15_uu_uu_uu_uu:4895; XOPAVX2:       # %bb.0:4896; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,14,15,4,5,14,15,12,13,14,15,16,17,18,19,20,21,30,31,20,21,30,31,28,29,30,31]4897; XOPAVX2-NEXT:    retq4898  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 8, i32 9, i32 10, i32 15, i32 poison, i32 poison, i32 poison, i32 poison>4899  ret <16 x i16> %shuffle4900}4901 4902define <16 x i16> @shuffle_v16i16_uu_uu_uu_uu_04_05_06_11_uu_uu_uu_uu_12_13_14_11(<16 x i16> %a, <16 x i16> %b) {4903; AVX1-LABEL: shuffle_v16i16_uu_uu_uu_uu_04_05_06_11_uu_uu_uu_uu_12_13_14_11:4904; AVX1:       # %bb.0:4905; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14906; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[0,1,0,1]4907; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4908; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]4909; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04910; AVX1-NEXT:    retq4911;4912; AVX2-LABEL: shuffle_v16i16_uu_uu_uu_uu_04_05_06_11_uu_uu_uu_uu_12_13_14_11:4913; AVX2:       # %bb.0:4914; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,2,3,2]4915; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,8,9,10,11,0,1,2,3,4,5,14,15,16,17,18,19,24,25,26,27,16,17,18,19,20,21,30,31]4916; AVX2-NEXT:    retq4917;4918; AVX512VL-LABEL: shuffle_v16i16_uu_uu_uu_uu_04_05_06_11_uu_uu_uu_uu_12_13_14_11:4919; AVX512VL:       # %bb.0:4920; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [4,5,8,9,4,5,6,11,12,13,8,9,12,13,14,11]4921; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm04922; AVX512VL-NEXT:    retq4923;4924; XOPAVX1-LABEL: shuffle_v16i16_uu_uu_uu_uu_04_05_06_11_uu_uu_uu_uu_12_13_14_11:4925; XOPAVX1:       # %bb.0:4926; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14927; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[0,1,0,1]4928; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]4929; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[12,13,6,7,4,5,6,7,8,9,10,11,12,13,6,7]4930; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04931; XOPAVX1-NEXT:    retq4932;4933; XOPAVX2-LABEL: shuffle_v16i16_uu_uu_uu_uu_04_05_06_11_uu_uu_uu_uu_12_13_14_11:4934; XOPAVX2:       # %bb.0:4935; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,2,3,2]4936; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,8,9,10,11,0,1,2,3,4,5,14,15,16,17,18,19,24,25,26,27,16,17,18,19,20,21,30,31]4937; XOPAVX2-NEXT:    retq4938  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 4, i32 5, i32 6, i32 11, i32 poison, i32 poison, i32 poison, i32 poison, i32 12, i32 13, i32 14, i32 11>4939  ret <16 x i16> %shuffle4940}4941 4942define <16 x i16> @shuffle_v16i16_04_05_06_03_uu_uu_uu_uu_12_13_14_11_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {4943; AVX1-LABEL: shuffle_v16i16_04_05_06_03_uu_uu_uu_uu_12_13_14_11_uu_uu_uu_uu:4944; AVX1:       # %bb.0:4945; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14946; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]4947; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm14948; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04949; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04950; AVX1-NEXT:    retq4951;4952; AVX2OR512VL-LABEL: shuffle_v16i16_04_05_06_03_uu_uu_uu_uu_12_13_14_11_uu_uu_uu_uu:4953; AVX2OR512VL:       # %bb.0:4954; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3,24,25,26,27,28,29,22,23,24,25,26,27,16,17,18,19]4955; AVX2OR512VL-NEXT:    retq4956;4957; XOPAVX1-LABEL: shuffle_v16i16_04_05_06_03_uu_uu_uu_uu_12_13_14_11_uu_uu_uu_uu:4958; XOPAVX1:       # %bb.0:4959; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14960; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3]4961; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm14962; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm04963; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm04964; XOPAVX1-NEXT:    retq4965;4966; XOPAVX2-LABEL: shuffle_v16i16_04_05_06_03_uu_uu_uu_uu_12_13_14_11_uu_uu_uu_uu:4967; XOPAVX2:       # %bb.0:4968; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,6,7,8,9,10,11,0,1,2,3,24,25,26,27,28,29,22,23,24,25,26,27,16,17,18,19]4969; XOPAVX2-NEXT:    retq4970  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 5, i32 6, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 12, i32 13, i32 14, i32 11, i32 poison, i32 poison, i32 poison, i32 poison>4971  ret <16 x i16> %shuffle4972}4973 4974define <16 x i16> @shuffle_v16i16_01_zz_02_zz_04_uu_06_07_08_09_10_11_12_13_14_15(<16 x i16> %a) {4975; AVX1-LABEL: shuffle_v16i16_01_zz_02_zz_04_uu_06_07_08_09_10_11_12_13_14_15:4976; AVX1:       # %bb.0:4977; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[1,1,2,3,4,5,6,7]4978; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm24979; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4,5,6,7]4980; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]4981; AVX1-NEXT:    retq4982;4983; AVX2OR512VL-LABEL: shuffle_v16i16_01_zz_02_zz_04_uu_06_07_08_09_10_11_12_13_14_15:4984; AVX2OR512VL:       # %bb.0:4985; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3],zero,zero,ymm0[4,5],zero,zero,ymm0[8,9,u,u,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]4986; AVX2OR512VL-NEXT:    retq4987;4988; XOPAVX1-LABEL: shuffle_v16i16_01_zz_02_zz_04_uu_06_07_08_09_10_11_12_13_14_15:4989; XOPAVX1:       # %bb.0:4990; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[1,1,2,3,4,5,6,7]4991; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm24992; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4,5,6,7]4993; XOPAVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]4994; XOPAVX1-NEXT:    retq4995;4996; XOPAVX2-LABEL: shuffle_v16i16_01_zz_02_zz_04_uu_06_07_08_09_10_11_12_13_14_15:4997; XOPAVX2:       # %bb.0:4998; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3],zero,zero,ymm0[4,5],zero,zero,ymm0[8,9,u,u,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]4999; XOPAVX2-NEXT:    retq5000  %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 1, i32 16, i32 2, i32 16, i32 4, i32 poison, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>5001  ret <16 x i16> %shuffle5002}5003 5004define <16 x i16> @shuffle_v16i16_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_11(<16 x i16> %a, <16 x i16> %b) {5005; AVX1-LABEL: shuffle_v16i16_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_11:5006; AVX1:       # %bb.0:5007; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm15008; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]5009; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm35010; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]5011; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm05012; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05013; AVX1-NEXT:    retq5014;5015; AVX2-LABEL: shuffle_v16i16_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_11:5016; AVX2:       # %bb.0:5017; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]5018; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]5019; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7,16,17,18,19,20,21,30,31,24,25,26,27,28,29,22,23]5020; AVX2-NEXT:    retq5021;5022; AVX512VL-LABEL: shuffle_v16i16_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_11:5023; AVX512VL:       # %bb.0:5024; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [0,1,2,7,4,5,6,11,8,9,10,15,12,13,14,11]5025; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm05026; AVX512VL-NEXT:    retq5027;5028; XOPAVX1-LABEL: shuffle_v16i16_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_11:5029; XOPAVX1:       # %bb.0:5030; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm15031; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13],xmm1[6,7]5032; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7]5033; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm05034; XOPAVX1-NEXT:    retq5035;5036; XOPAVX2-LABEL: shuffle_v16i16_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_11:5037; XOPAVX2:       # %bb.0:5038; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]5039; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]5040; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,14,15,8,9,10,11,12,13,6,7,16,17,18,19,20,21,30,31,24,25,26,27,28,29,22,23]5041; XOPAVX2-NEXT:    retq5042  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 11, i32 8, i32 9, i32 10, i32 15, i32 12, i32 13, i32 14, i32 11>5043  ret <16 x i16> %shuffle5044}5045 5046define <16 x i16> @shuffle_v16i16_04_05_06_03_00_01_02_15_12_13_14_11_08_09_10_15(<16 x i16> %a, <16 x i16> %b) {5047; AVX1-LABEL: shuffle_v16i16_04_05_06_03_00_01_02_15_12_13_14_11_08_09_10_15:5048; AVX1:       # %bb.0:5049; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm15050; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,u,u]5051; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]5052; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]5053; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm05054; AVX1-NEXT:    retq5055;5056; AVX2-LABEL: shuffle_v16i16_04_05_06_03_00_01_02_15_12_13_14_11_08_09_10_15:5057; AVX2:       # %bb.0:5058; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]5059; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,u,u,24,25,26,27,28,29,22,23,16,17,18,19,20,21,u,u]5060; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5061; AVX2-NEXT:    retq5062;5063; AVX512VL-LABEL: shuffle_v16i16_04_05_06_03_00_01_02_15_12_13_14_11_08_09_10_15:5064; AVX512VL:       # %bb.0:5065; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [4,5,6,3,0,1,2,15,12,13,14,11,8,9,10,15]5066; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm05067; AVX512VL-NEXT:    retq5068;5069; XOPAVX1-LABEL: shuffle_v16i16_04_05_06_03_00_01_02_15_12_13_14_11_08_09_10_15:5070; XOPAVX1:       # %bb.0:5071; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm15072; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5],xmm1[14,15]5073; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13,6,7,0,1,2,3,4,5,14,15]5074; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm05075; XOPAVX1-NEXT:    retq5076;5077; XOPAVX2-LABEL: shuffle_v16i16_04_05_06_03_00_01_02_15_12_13_14_11_08_09_10_15:5078; XOPAVX2:       # %bb.0:5079; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]5080; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,6,7,0,1,2,3,4,5,u,u,24,25,26,27,28,29,22,23,16,17,18,19,20,21,u,u]5081; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5082; XOPAVX2-NEXT:    retq5083  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 5, i32 6, i32 3, i32 0, i32 1, i32 2, i32 15, i32 12, i32 13, i32 14, i32 11, i32 8, i32 9, i32 10, i32 15>5084  ret <16 x i16> %shuffle5085}5086 5087define <16 x i16> @shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13(<16 x i16> %a, <16 x i16> %b) {5088; AVX1-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5089; AVX1:       # %bb.0:5090; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm15091; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]5092; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm35093; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5],xmm0[6,7]5094; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm05095; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05096; AVX1-NEXT:    retq5097;5098; AVX2-SLOW-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5099; AVX2-SLOW:       # %bb.0:5100; AVX2-SLOW-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,1,6,3,4,5,6,7]5101; AVX2-SLOW-NEXT:    vpermd %ymm0, %ymm1, %ymm05102; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11,22,23,30,31,18,19,16,17,20,21,30,31,22,23,26,27]5103; AVX2-SLOW-NEXT:    retq5104;5105; AVX2-FAST-ALL-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5106; AVX2-FAST-ALL:       # %bb.0:5107; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [1,3,0,6,5,7,4,6]5108; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm1, %ymm05109; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,6,7,10,11,8,9,0,1,6,7,2,3,14,15,18,19,22,23,26,27,24,25,16,17,22,23,18,19,30,31]5110; AVX2-FAST-ALL-NEXT:    retq5111;5112; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5113; AVX2-FAST-PERLANE:       # %bb.0:5114; AVX2-FAST-PERLANE-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,1,6,3,4,5,6,7]5115; AVX2-FAST-PERLANE-NEXT:    vpermd %ymm0, %ymm1, %ymm05116; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11,22,23,30,31,18,19,16,17,20,21,30,31,22,23,26,27]5117; AVX2-FAST-PERLANE-NEXT:    retq5118;5119; AVX512VL-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5120; AVX512VL:       # %bb.0:5121; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [3,7,1,0,2,7,3,13,11,15,9,8,10,15,11,13]5122; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm05123; AVX512VL-NEXT:    retq5124;5125; XOPAVX1-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5126; XOPAVX1:       # %bb.0:5127; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm15128; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7],xmm1[10,11]5129; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11]5130; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm05131; XOPAVX1-NEXT:    retq5132;5133; XOPAVX2-LABEL: shuffle_v16i16_03_07_01_00_02_07_03_13_11_15_09_08_10_15_11_13:5134; XOPAVX2:       # %bb.0:5135; XOPAVX2-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [0,1,6,3,4,5,6,7]5136; XOPAVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm05137; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,14,15,2,3,0,1,4,5,14,15,6,7,10,11,22,23,30,31,18,19,16,17,20,21,30,31,22,23,26,27]5138; XOPAVX2-NEXT:    retq5139  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 7, i32 1, i32 0, i32 2, i32 7, i32 3, i32 13, i32 11, i32 15, i32 9, i32 8, i32 10, i32 15, i32 11, i32 13>5140  ret <16 x i16> %shuffle5141}5142 5143define <16 x i16> @shuffle_v16i16_00_16_01_17_02_18_03_27_08_24_09_25_10_26_11_27(<16 x i16> %a, <16 x i16> %b) {5144; AVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_27_08_24_09_25_10_26_11_27:5145; AVX1:       # %bb.0:5146; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25147; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35148; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]5149; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[3],xmm1[4,5,6,7]5150; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5151; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05152; AVX1-NEXT:    retq5153;5154; AVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_27_08_24_09_25_10_26_11_27:5155; AVX2:       # %bb.0:5156; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5157; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm15158; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]5159; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]5160; AVX2-NEXT:    retq5161;5162; AVX512VL-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_27_08_24_09_25_10_26_11_27:5163; AVX512VL:       # %bb.0:5164; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,16,1,17,2,18,3,27,8,24,9,25,10,26,11,27]5165; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05166; AVX512VL-NEXT:    retq5167;5168; XOPAVX1-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_27_08_24_09_25_10_26_11_27:5169; XOPAVX1:       # %bb.0:5170; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25171; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35172; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]5173; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[3],xmm1[4,5,6,7]5174; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5175; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05176; XOPAVX1-NEXT:    retq5177;5178; XOPAVX2-LABEL: shuffle_v16i16_00_16_01_17_02_18_03_27_08_24_09_25_10_26_11_27:5179; XOPAVX2:       # %bb.0:5180; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5181; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm15182; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]5183; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]5184; XOPAVX2-NEXT:    retq5185  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 27, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>5186  ret <16 x i16> %shuffle5187}5188 5189define <16 x i16> @shuffle_v16i16_00_20_01_21_02_22_03_31_08_28_09_29_10_30_11_31(<16 x i16> %a, <16 x i16> %b) {5190; AVX1-LABEL: shuffle_v16i16_00_20_01_21_02_22_03_31_08_28_09_29_10_30_11_31:5191; AVX1:       # %bb.0:5192; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25193; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35194; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm3[2,3,2,3]5195; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]5196; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]5197; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,4,5,8,9,14,15,u,u,u,u,u,u,u,u]5198; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5199; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05200; AVX1-NEXT:    retq5201;5202; AVX2-LABEL: shuffle_v16i16_00_20_01_21_02_22_03_31_08_28_09_29_10_30_11_31:5203; AVX2:       # %bb.0:5204; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5205; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,8,9,2,3,10,11,4,5,12,13,6,7,u,u,16,17,24,25,18,19,26,27,20,21,28,29,22,23,u,u]5206; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5207; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5208; AVX2-NEXT:    retq5209;5210; AVX512VL-LABEL: shuffle_v16i16_00_20_01_21_02_22_03_31_08_28_09_29_10_30_11_31:5211; AVX512VL:       # %bb.0:5212; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,20,1,21,2,22,3,31,8,28,9,29,10,30,11,31]5213; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05214; AVX512VL-NEXT:    retq5215;5216; XOPAVX1-LABEL: shuffle_v16i16_00_20_01_21_02_22_03_31_08_28_09_29_10_30_11_31:5217; XOPAVX1:       # %bb.0:5218; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25219; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35220; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm3[2,3,2,3]5221; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]5222; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13],xmm3[14,15],xmm1[u,u,u,u,u,u,u,u]5223; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5224; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05225; XOPAVX1-NEXT:    retq5226;5227; XOPAVX2-LABEL: shuffle_v16i16_00_20_01_21_02_22_03_31_08_28_09_29_10_30_11_31:5228; XOPAVX2:       # %bb.0:5229; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5230; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,8,9,2,3,10,11,4,5,12,13,6,7,u,u,16,17,24,25,18,19,26,27,20,21,28,29,22,23,u,u]5231; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5232; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5233; XOPAVX2-NEXT:    retq5234  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 20, i32 1, i32 21, i32 2, i32 22, i32 3, i32 31, i32 8, i32 28, i32 9, i32 29, i32 10, i32 30, i32 11, i32 31>5235  ret <16 x i16> %shuffle5236}5237 5238define <16 x i16> @shuffle_v16i16_04_20_05_21_06_22_07_31_12_28_13_29_14_30_15_31(<16 x i16> %a, <16 x i16> %b) {5239; AVX1-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_31_12_28_13_29_14_30_15_31:5240; AVX1:       # %bb.0:5241; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25242; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35243; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]5244; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,6],xmm2[7]5245; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]5246; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05247; AVX1-NEXT:    retq5248;5249; AVX2-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_31_12_28_13_29_14_30_15_31:5250; AVX2:       # %bb.0:5251; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm0 = ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15]5252; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm15253; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]5254; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]5255; AVX2-NEXT:    retq5256;5257; AVX512VL-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_31_12_28_13_29_14_30_15_31:5258; AVX512VL:       # %bb.0:5259; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,20,5,21,6,22,7,31,12,28,13,29,14,30,15,31]5260; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05261; AVX512VL-NEXT:    retq5262;5263; XOPAVX1-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_31_12_28_13_29_14_30_15_31:5264; XOPAVX1:       # %bb.0:5265; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25266; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35267; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]5268; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,6],xmm2[7]5269; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]5270; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05271; XOPAVX1-NEXT:    retq5272;5273; XOPAVX2-LABEL: shuffle_v16i16_04_20_05_21_06_22_07_31_12_28_13_29_14_30_15_31:5274; XOPAVX2:       # %bb.0:5275; XOPAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm0 = ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15]5276; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm15277; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]5278; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]5279; XOPAVX2-NEXT:    retq5280  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 31, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>5281  ret <16 x i16> %shuffle5282}5283 5284define <16 x i16> @shuffle_v16i16_04_16_05_17_06_18_07_27_12_24_13_25_14_26_15_27(<16 x i16> %a, <16 x i16> %b) {5285; AVX1-LABEL: shuffle_v16i16_04_16_05_17_06_18_07_27_12_24_13_25_14_26_15_27:5286; AVX1:       # %bb.0:5287; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25288; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35289; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]5290; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]5291; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]5292; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,14,15]5293; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]5294; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05295; AVX1-NEXT:    retq5296;5297; AVX2-LABEL: shuffle_v16i16_04_16_05_17_06_18_07_27_12_24_13_25_14_26_15_27:5298; AVX2:       # %bb.0:5299; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]5300; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5301; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]5302; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,0,1,10,11,2,3,12,13,4,5,14,15,6,7,24,25,16,17,26,27,18,19,28,29,20,21,30,31,22,23]5303; AVX2-NEXT:    retq5304;5305; AVX512VL-LABEL: shuffle_v16i16_04_16_05_17_06_18_07_27_12_24_13_25_14_26_15_27:5306; AVX512VL:       # %bb.0:5307; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,16,5,17,6,18,7,27,12,24,13,25,14,26,15,27]5308; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05309; AVX512VL-NEXT:    retq5310;5311; XOPAVX1-LABEL: shuffle_v16i16_04_16_05_17_06_18_07_27_12_24_13_25_14_26_15_27:5312; XOPAVX1:       # %bb.0:5313; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25314; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35315; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]5316; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]5317; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,0,1,2,3,4,5],xmm2[6,7]5318; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]5319; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05320; XOPAVX1-NEXT:    retq5321;5322; XOPAVX2-LABEL: shuffle_v16i16_04_16_05_17_06_18_07_27_12_24_13_25_14_26_15_27:5323; XOPAVX2:       # %bb.0:5324; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]5325; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5326; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]5327; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,0,1,10,11,2,3,12,13,4,5,14,15,6,7,24,25,16,17,26,27,18,19,28,29,20,21,30,31,22,23]5328; XOPAVX2-NEXT:    retq5329  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 16, i32 5, i32 17, i32 6, i32 18, i32 7, i32 27, i32 12, i32 24, i32 13, i32 25, i32 14, i32 26, i32 15, i32 27>5330  ret <16 x i16> %shuffle5331}5332 5333define <16 x i16> @shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31(<16 x i16> %a, <16 x i16> %b) {5334; AVX1-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5335; AVX1:       # %bb.0:5336; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25337; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm2[0,3,2,3]5338; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm45339; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[0,3,2,3]5340; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]5341; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,2,1,4,5,6,7]5342; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,6,6,6]5343; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5],xmm2[6,7]5344; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[2,3,6,7,10,11,14,15,u,u,u,u,u,u,u,u]5345; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]5346; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5347; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05348; AVX1-NEXT:    retq5349;5350; AVX2-SLOW-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5351; AVX2-SLOW:       # %bb.0:5352; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm2 = ymm1[2,3,2,3]5353; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm2[7],ymm1[8,9,10,11,12,13,14],ymm2[15]5354; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,3,2,3,4,7,6,7]5355; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5356; AVX2-SLOW-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5357; AVX2-SLOW-NEXT:    retq5358;5359; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5360; AVX2-FAST-ALL:       # %bb.0:5361; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [0,3,7,0,4,7,0,0]5362; AVX2-FAST-ALL-NEXT:    vpermd %ymm1, %ymm2, %ymm15363; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,10,11,u,u,u,u,u,u,u,u,16,17,18,19,20,21,22,23,u,u,u,u,u,u,u,u]5364; AVX2-FAST-ALL-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5365; AVX2-FAST-ALL-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5366; AVX2-FAST-ALL-NEXT:    retq5367;5368; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5369; AVX2-FAST-PERLANE:       # %bb.0:5370; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm2 = ymm1[2,3,2,3]5371; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm2[7],ymm1[8,9,10,11,12,13,14],ymm2[15]5372; AVX2-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,3,2,3,4,7,6,7]5373; AVX2-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5374; AVX2-FAST-PERLANE-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5375; AVX2-FAST-PERLANE-NEXT:    retq5376;5377; AVX512VL-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5378; AVX512VL:       # %bb.0:5379; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,16,1,17,6,22,7,31,8,24,9,25,14,30,15,31]5380; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05381; AVX512VL-NEXT:    retq5382;5383; XOPAVX1-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5384; XOPAVX1:       # %bb.0:5385; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25386; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35387; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm3 = xmm3[0,1],xmm2[0,1],xmm3[2,3],xmm2[2,3],xmm3[12,13],xmm2[12,13],xmm3[14,15],xmm2[14,15]5388; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[0,1,2,3,12,13],xmm2[14,15],xmm1[u,u,u,u,u,u,u,u]5389; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]5390; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5391; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05392; XOPAVX1-NEXT:    retq5393;5394; XOPAVX2-LABEL: shuffle_v16i16_00_16_01_17_06_22_07_31_08_24_09_25_14_30_15_31:5395; XOPAVX2:       # %bb.0:5396; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm1[2,3,2,3]5397; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm2[7],ymm1[8,9,10,11,12,13,14],ymm2[15]5398; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,3,2,3,4,7,6,7]5399; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5400; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5401; XOPAVX2-NEXT:    retq5402  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 6, i32 22, i32 7, i32 31, i32 8, i32 24, i32 9, i32 25, i32 14, i32 30, i32 15, i32 31>5403  ret <16 x i16> %shuffle5404}5405 5406define <16 x i16> @shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25(<16 x i16> %a, <16 x i16> %b) {5407; AVX1-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5408; AVX1:       # %bb.0:5409; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25410; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm2[2,0,2,3]5411; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm45412; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[0,3,2,3]5413; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3]5414; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2,3,4,5,6,7]5415; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,0,2,3]5416; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]5417; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5418; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05419; AVX1-NEXT:    retq5420;5421; AVX2-SLOW-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5422; AVX2-SLOW:       # %bb.0:5423; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm2 = ymm1[2,3,2,3]5424; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1],ymm1[2,3,4,5,6,7,8],ymm2[9],ymm1[10,11,12,13,14,15]5425; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,0,2,3,6,4,6,7]5426; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5427; AVX2-SLOW-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5428; AVX2-SLOW-NEXT:    retq5429;5430; AVX2-FAST-ALL-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5431; AVX2-FAST-ALL:       # %bb.0:5432; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [2,0,4,0,6,4,0,0]5433; AVX2-FAST-ALL-NEXT:    vpermd %ymm1, %ymm2, %ymm15434; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,10,11,u,u,u,u,u,u,u,u,16,17,18,19,20,21,22,23,u,u,u,u,u,u,u,u]5435; AVX2-FAST-ALL-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5436; AVX2-FAST-ALL-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5437; AVX2-FAST-ALL-NEXT:    retq5438;5439; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5440; AVX2-FAST-PERLANE:       # %bb.0:5441; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm2 = ymm1[2,3,2,3]5442; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1],ymm1[2,3,4,5,6,7,8],ymm2[9],ymm1[10,11,12,13,14,15]5443; AVX2-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,0,2,3,6,4,6,7]5444; AVX2-FAST-PERLANE-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5445; AVX2-FAST-PERLANE-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5446; AVX2-FAST-PERLANE-NEXT:    retq5447;5448; AVX512VL-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5449; AVX512VL:       # %bb.0:5450; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,20,1,21,6,16,7,25,8,28,9,29,14,24,15,25]5451; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05452; AVX512VL-NEXT:    retq5453;5454; XOPAVX1-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5455; XOPAVX1:       # %bb.0:5456; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25457; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35458; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm3 = xmm3[0,1],xmm2[8,9],xmm3[2,3],xmm2[10,11],xmm3[12,13],xmm2[0,1],xmm3[14,15],xmm2[2,3]5459; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[8,9,10,11,0,1],xmm2[2,3],xmm1[u,u,u,u,u,u,u,u]5460; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]5461; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]5462; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05463; XOPAVX1-NEXT:    retq5464;5465; XOPAVX2-LABEL: shuffle_v16i16_00_20_01_21_06_16_07_25_08_28_09_29_14_24_15_25:5466; XOPAVX2:       # %bb.0:5467; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm1[2,3,2,3]5468; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1],ymm1[2,3,4,5,6,7,8],ymm2[9],ymm1[10,11,12,13,14,15]5469; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,0,2,3,6,4,6,7]5470; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,3,2,3,4,7,6,7]5471; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]5472; XOPAVX2-NEXT:    retq5473  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 20, i32 1, i32 21, i32 6, i32 16, i32 7, i32 25, i32 8, i32 28, i32 9, i32 29, i32 14, i32 24, i32 15, i32 25>5474  ret <16 x i16> %shuffle5475}5476 5477define <16 x i16> @shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26(<16 x i16> %a, <16 x i16> %b) {5478; AVX1-LABEL: shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26:5479; AVX1:       # %bb.0:5480; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25481; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]5482; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[4,5,0,1,12,13,10,11,u,u,u,u,u,u,u,u]5483; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm0[1,0,3,2,4,5,6,7]5484; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]5485; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm05486; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]5487; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[2,0,3,1,4,5,6,7]5488; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,4,7,5]5489; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm05490; AVX1-NEXT:    retq5491;5492; AVX2-SLOW-LABEL: shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26:5493; AVX2-SLOW:       # %bb.0:5494; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]5495; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,2,3,0,1,u,u,u,u,6,7,12,13,u,u,u,u,18,19,16,17,u,u,u,u,22,23,20,21]5496; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7,9,8,11,10,12,13,14,15]5497; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,1,3,4,5,5,7]5498; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]5499; AVX2-SLOW-NEXT:    retq5500;5501; AVX2-FAST-LABEL: shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26:5502; AVX2-FAST:       # %bb.0:5503; AVX2-FAST-NEXT:    vmovdqa {{.*#+}} ymm2 = [2,3,0,1,2,3,0,1,6,7,4,5,6,7,12,13,18,19,16,17,2,3,0,1,22,23,20,21,6,7,4,5]5504; AVX2-FAST-NEXT:    vpshufb %ymm2, %ymm0, %ymm05505; AVX2-FAST-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]5506; AVX2-FAST-NEXT:    vpshufb %ymm2, %ymm1, %ymm15507; AVX2-FAST-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]5508; AVX2-FAST-NEXT:    retq5509;5510; AVX512VL-LABEL: shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26:5511; AVX512VL:       # %bb.0:5512; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [1,0,17,16,3,2,19,26,9,8,25,24,11,10,27,26]5513; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05514; AVX512VL-NEXT:    retq5515;5516; XOPAVX1-LABEL: shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26:5517; XOPAVX1:       # %bb.0:5518; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25519; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35520; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm3 = xmm3[2,3,0,1],xmm2[2,3,0,1],xmm3[6,7,4,5],xmm2[6,7,4,5]5521; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[2,3,0,1,6,7],xmm2[4,5],xmm1[u,u,u,u,u,u,u,u]5522; XOPAVX1-NEXT:    vprotd $16, %xmm0, %xmm05523; XOPAVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]5524; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05525; XOPAVX1-NEXT:    retq5526;5527; XOPAVX2-LABEL: shuffle_v16i16_01_00_17_16_03_02_19_26_09_08_25_24_11_10_27_26:5528; XOPAVX2:       # %bb.0:5529; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]5530; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,2,3,0,1,u,u,u,u,6,7,12,13,u,u,u,u,18,19,16,17,u,u,u,u,22,23,20,21]5531; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7,9,8,11,10,12,13,14,15]5532; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,1,1,3,4,5,5,7]5533; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]5534; XOPAVX2-NEXT:    retq5535  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 1, i32 0, i32 17, i32 16, i32 3, i32 2, i32 19, i32 26, i32 9, i32 8, i32 25, i32 24, i32 11, i32 10, i32 27, i32 26>5536  ret <16 x i16> %shuffle5537}5538 5539define <16 x i16> @shuffle_v16i16_16_00_17_01_18_02_19_11_24_08_25_09_26_10_27_11(<16 x i16> %a, <16 x i16> %b) {5540; AVX1-LABEL: shuffle_v16i16_16_00_17_01_18_02_19_11_24_08_25_09_26_10_27_11:5541; AVX1:       # %bb.0:5542; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25543; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35544; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]5545; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[3],xmm0[4,5,6,7]5546; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]5547; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05548; AVX1-NEXT:    retq5549;5550; AVX2-LABEL: shuffle_v16i16_16_00_17_01_18_02_19_11_24_08_25_09_26_10_27_11:5551; AVX2:       # %bb.0:5552; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11]5553; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm15554; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]5555; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]5556; AVX2-NEXT:    retq5557;5558; AVX512VL-LABEL: shuffle_v16i16_16_00_17_01_18_02_19_11_24_08_25_09_26_10_27_11:5559; AVX512VL:       # %bb.0:5560; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,16,1,17,2,18,3,27,8,24,9,25,10,26,11,27]5561; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm25562; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm05563; AVX512VL-NEXT:    retq5564;5565; XOPAVX1-LABEL: shuffle_v16i16_16_00_17_01_18_02_19_11_24_08_25_09_26_10_27_11:5566; XOPAVX1:       # %bb.0:5567; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25568; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35569; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]5570; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[3],xmm0[4,5,6,7]5571; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]5572; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05573; XOPAVX1-NEXT:    retq5574;5575; XOPAVX2-LABEL: shuffle_v16i16_16_00_17_01_18_02_19_11_24_08_25_09_26_10_27_11:5576; XOPAVX2:       # %bb.0:5577; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11]5578; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm15579; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]5580; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]5581; XOPAVX2-NEXT:    retq5582  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 0, i32 17, i32 1, i32 18, i32 2, i32 19, i32 11, i32 24, i32 8, i32 25, i32 9, i32 26, i32 10, i32 27, i32 11>5583  ret <16 x i16> %shuffle5584}5585 5586define <16 x i16> @shuffle_v16i16_20_04_21_05_22_06_23_15_28_12_29_13_30_14_31_15(<16 x i16> %a, <16 x i16> %b) {5587; AVX1-LABEL: shuffle_v16i16_20_04_21_05_22_06_23_15_28_12_29_13_30_14_31_15:5588; AVX1:       # %bb.0:5589; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25590; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35591; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]5592; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]5593; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]5594; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05595; AVX1-NEXT:    retq5596;5597; AVX2-LABEL: shuffle_v16i16_20_04_21_05_22_06_23_15_28_12_29_13_30_14_31_15:5598; AVX2:       # %bb.0:5599; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm1 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15]5600; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm05601; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]5602; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]5603; AVX2-NEXT:    retq5604;5605; AVX512VL-LABEL: shuffle_v16i16_20_04_21_05_22_06_23_15_28_12_29_13_30_14_31_15:5606; AVX512VL:       # %bb.0:5607; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,20,5,21,6,22,7,31,12,28,13,29,14,30,15,31]5608; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm25609; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm05610; AVX512VL-NEXT:    retq5611;5612; XOPAVX1-LABEL: shuffle_v16i16_20_04_21_05_22_06_23_15_28_12_29_13_30_14_31_15:5613; XOPAVX1:       # %bb.0:5614; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25615; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35616; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]5617; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm2[7]5618; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]5619; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05620; XOPAVX1-NEXT:    retq5621;5622; XOPAVX2-LABEL: shuffle_v16i16_20_04_21_05_22_06_23_15_28_12_29_13_30_14_31_15:5623; XOPAVX2:       # %bb.0:5624; XOPAVX2-NEXT:    vpunpckhwd {{.*#+}} ymm1 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15]5625; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm05626; XOPAVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]5627; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]5628; XOPAVX2-NEXT:    retq5629  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 20, i32 4, i32 21, i32 5, i32 22, i32 6, i32 23, i32 15, i32 28, i32 12, i32 29, i32 13, i32 30, i32 14, i32 31, i32 15>5630  ret <16 x i16> %shuffle5631}5632 5633define <16 x i16> @shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31(<16 x i16> %a, <16 x i16> %b) {5634; AVX1-LABEL: shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31:5635; AVX1:       # %bb.0:5636; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25637; AVX1-NEXT:    vpshufhw {{.*#+}} xmm3 = xmm2[0,1,2,3,4,6,5,7]5638; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm45639; AVX1-NEXT:    vpshuflw {{.*#+}} xmm4 = xmm4[0,2,1,3,4,5,6,7]5640; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]5641; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]5642; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,8,9,4,5,14,15,u,u,u,u,u,u,u,u]5643; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]5644; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]5645; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05646; AVX1-NEXT:    retq5647;5648; AVX2-SLOW-LABEL: shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31:5649; AVX2-SLOW:       # %bb.0:5650; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5651; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,2,1,3,4,5,6,7,8,10,9,11,12,13,14,15]5652; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,6,5,7,8,9,10,11,12,14,13,15]5653; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5654; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5655; AVX2-SLOW-NEXT:    retq5656;5657; AVX2-FAST-LABEL: shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31:5658; AVX2-FAST:       # %bb.0:5659; AVX2-FAST-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5660; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,2,3,6,7,8,9,12,13,10,11,u,u,16,17,20,21,18,19,22,23,24,25,28,29,26,27,u,u]5661; AVX2-FAST-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5662; AVX2-FAST-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5663; AVX2-FAST-NEXT:    retq5664;5665; AVX512VL-LABEL: shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31:5666; AVX512VL:       # %bb.0:5667; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,2,1,3,20,22,21,31,8,10,9,11,28,30,29,31]5668; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05669; AVX512VL-NEXT:    retq5670;5671; XOPAVX1-LABEL: shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31:5672; XOPAVX1:       # %bb.0:5673; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25674; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35675; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm3 = xmm3[0,1,4,5,2,3,6,7],xmm2[8,9,12,13,10,11,14,15]5676; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm1[8,9,12,13,10,11],xmm2[14,15],xmm1[u,u,u,u,u,u,u,u]5677; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,1,3,4,5,6,7]5678; XOPAVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]5679; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm05680; XOPAVX1-NEXT:    retq5681;5682; XOPAVX2-LABEL: shuffle_v16i16_00_02_01_03_20_22_21_31_08_10_09_11_28_30_29_31:5683; XOPAVX2:       # %bb.0:5684; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5685; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,2,1,3,4,5,6,7,8,10,9,11,12,13,14,15]5686; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,6,5,7,8,9,10,11,12,14,13,15]5687; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]5688; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]5689; XOPAVX2-NEXT:    retq5690  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 2, i32 1, i32 3, i32 20, i32 22, i32 21, i32 31, i32 8, i32 10, i32 9, i32 11, i32 28, i32 30, i32 29, i32 31>5691  ret <16 x i16> %shuffle5692}5693 5694define <16 x i16> @shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {5695; AVX1-LABEL: shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu:5696; AVX1:       # %bb.0:5697; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]5698; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm2[2,1,2,3]5699; AVX1-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm2[0,0,3,2,4,5,6,7]5700; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm15701; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm05702; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]5703; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,1,2,3]5704; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,3,2,4,5,6,7]5705; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm05706; AVX1-NEXT:    retq5707;5708; AVX2-SLOW-LABEL: shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu:5709; AVX2-SLOW:       # %bb.0:5710; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]5711; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,1,2,3,6,5,6,7]5712; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,3,2,4,5,6,7,8,8,11,10,12,13,14,15]5713; AVX2-SLOW-NEXT:    retq5714;5715; AVX2-FAST-LABEL: shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu:5716; AVX2-FAST:       # %bb.0:5717; AVX2-FAST-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]5718; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,8,9,6,7,4,5,8,9,10,11,12,13,14,15,24,25,24,25,22,23,20,21,24,25,26,27,28,29,30,31]5719; AVX2-FAST-NEXT:    retq5720;5721; AVX512VL-LABEL: shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu:5722; AVX512VL:       # %bb.0:5723; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,4,3,18,0,0,0,0,12,12,11,26,0,0,0,0]5724; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05725; AVX512VL-NEXT:    retq5726;5727; XOPAVX1-LABEL: shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu:5728; XOPAVX1:       # %bb.0:5729; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25730; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35731; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [8,9,8,9,6,7,20,21,8,9,10,11,12,13,14,15]5732; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm25733; XOPAVX1-NEXT:    vpperm %xmm4, %xmm1, %xmm0, %xmm05734; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05735; XOPAVX1-NEXT:    retq5736;5737; XOPAVX2-LABEL: shuffle_v16i16_04_04_03_18_uu_uu_uu_uu_12_12_11_26_uu_uu_uu_uu:5738; XOPAVX2:       # %bb.0:5739; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]5740; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,1,2,3,6,5,6,7]5741; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[0,0,3,2,4,5,6,7,8,8,11,10,12,13,14,15]5742; XOPAVX2-NEXT:    retq5743  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 4, i32 3, i32 18, i32 poison, i32 poison, i32 poison, i32 poison, i32 12, i32 12, i32 11, i32 26, i32 poison, i32 poison, i32 poison, i32 poison>5744  ret <16 x i16> %shuffle5745}5746 5747define <16 x i16> @shuffle_v16i16_00_03_02_21_uu_uu_uu_uu_08_11_10_29_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {5748; AVX1-LABEL: shuffle_v16i16_00_03_02_21_uu_uu_uu_uu_08_11_10_29_uu_uu_uu_uu:5749; AVX1:       # %bb.0:5750; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25751; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35752; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]5753; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3]5754; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm25755; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]5756; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm05757; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05758; AVX1-NEXT:    retq5759;5760; AVX2-LABEL: shuffle_v16i16_00_03_02_21_uu_uu_uu_uu_08_11_10_29_uu_uu_uu_uu:5761; AVX2:       # %bb.0:5762; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5763; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3,16,17,22,23,20,21,26,27,16,17,26,27,16,17,18,19]5764; AVX2-NEXT:    retq5765;5766; AVX512VL-LABEL: shuffle_v16i16_00_03_02_21_uu_uu_uu_uu_08_11_10_29_uu_uu_uu_uu:5767; AVX512VL:       # %bb.0:5768; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,3,2,21,0,0,0,0,8,11,10,29,0,0,0,0]5769; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05770; AVX512VL-NEXT:    retq5771;5772; XOPAVX1-LABEL: shuffle_v16i16_00_03_02_21_uu_uu_uu_uu_08_11_10_29_uu_uu_uu_uu:5773; XOPAVX1:       # %bb.0:5774; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25775; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35776; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [0,1,6,7,4,5,26,27,0,1,26,27,0,1,2,3]5777; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm25778; XOPAVX1-NEXT:    vpperm %xmm4, %xmm1, %xmm0, %xmm05779; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05780; XOPAVX1-NEXT:    retq5781;5782; XOPAVX2-LABEL: shuffle_v16i16_00_03_02_21_uu_uu_uu_uu_08_11_10_29_uu_uu_uu_uu:5783; XOPAVX2:       # %bb.0:5784; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5785; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,6,7,4,5,10,11,0,1,10,11,0,1,2,3,16,17,22,23,20,21,26,27,16,17,26,27,16,17,18,19]5786; XOPAVX2-NEXT:    retq5787  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 3, i32 2, i32 21, i32 poison, i32 poison, i32 poison, i32 poison, i32 8, i32 11, i32 10, i32 29, i32 poison, i32 poison, i32 poison, i32 poison>5788  ret <16 x i16> %shuffle5789}5790 5791define <16 x i16> @shuffle_v16i16_uu_uu_uu_21_uu_uu_uu_uu_uu_uu_uu_29_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {5792; ALL-LABEL: shuffle_v16i16_uu_uu_uu_21_uu_uu_uu_uu_uu_uu_uu_29_uu_uu_uu_uu:5793; ALL:       # %bb.0:5794; ALL-NEXT:    vshufps {{.*#+}} ymm0 = ymm1[2,2,2,2,6,6,6,6]5795; ALL-NEXT:    retq5796  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 21, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 29, i32 poison, i32 poison, i32 poison, i32 poison>5797  ret <16 x i16> %shuffle5798}5799 5800define <16 x i16> @shuffle_v16i16_00_01_02_21_uu_uu_uu_uu_08_09_10_29_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {5801; AVX1-LABEL: shuffle_v16i16_00_01_02_21_uu_uu_uu_uu_08_09_10_29_uu_uu_uu_uu:5802; AVX1:       # %bb.0:5803; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25804; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35805; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,2,3,3]5806; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[3],xmm2[4,5,6,7]5807; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]5808; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]5809; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05810; AVX1-NEXT:    retq5811;5812; AVX2-LABEL: shuffle_v16i16_00_01_02_21_uu_uu_uu_uu_08_09_10_29_uu_uu_uu_uu:5813; AVX2:       # %bb.0:5814; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,2,2,2,6,6,6,6]5815; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]5816; AVX2-NEXT:    retq5817;5818; AVX512VL-LABEL: shuffle_v16i16_00_01_02_21_uu_uu_uu_uu_08_09_10_29_uu_uu_uu_uu:5819; AVX512VL:       # %bb.0:5820; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,21,0,0,0,0,8,9,10,29,0,0,0,0]5821; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05822; AVX512VL-NEXT:    retq5823;5824; XOPAVX1-LABEL: shuffle_v16i16_00_01_02_21_uu_uu_uu_uu_08_09_10_29_uu_uu_uu_uu:5825; XOPAVX1:       # %bb.0:5826; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25827; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35828; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,2,3,3]5829; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[3],xmm2[4,5,6,7]5830; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]5831; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3],xmm0[4,5,6,7]5832; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05833; XOPAVX1-NEXT:    retq5834;5835; XOPAVX2-LABEL: shuffle_v16i16_00_01_02_21_uu_uu_uu_uu_08_09_10_29_uu_uu_uu_uu:5836; XOPAVX2:       # %bb.0:5837; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,2,2,2,6,6,6,6]5838; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7,8,9,10],ymm1[11],ymm0[12,13,14,15]5839; XOPAVX2-NEXT:    retq5840  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 21, i32 poison, i32 poison, i32 poison, i32 poison, i32 8, i32 9, i32 10, i32 29, i32 poison, i32 poison, i32 poison, i32 poison>5841  ret <16 x i16> %shuffle5842}5843 5844define <16 x i16> @shuffle_v16i16_uu_uu_uu_uu_20_21_22_11_uu_uu_uu_uu_28_29_30_11(<16 x i16> %a, <16 x i16> %b) {5845; AVX1-LABEL: shuffle_v16i16_uu_uu_uu_uu_20_21_22_11_uu_uu_uu_uu_28_29_30_11:5846; AVX1:       # %bb.0:5847; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25848; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm05849; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]5850; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,5,6],xmm0[7]5851; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]5852; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05853; AVX1-NEXT:    retq5854;5855; AVX2-LABEL: shuffle_v16i16_uu_uu_uu_uu_20_21_22_11_uu_uu_uu_uu_28_29_30_11:5856; AVX2:       # %bb.0:5857; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,2]5858; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]5859; AVX2-NEXT:    retq5860;5861; AVX512VL-LABEL: shuffle_v16i16_uu_uu_uu_uu_20_21_22_11_uu_uu_uu_uu_28_29_30_11:5862; AVX512VL:       # %bb.0:5863; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,0,0,0,4,5,6,27,0,0,0,0,12,13,14,27]5864; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm25865; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm05866; AVX512VL-NEXT:    retq5867;5868; XOPAVX1-LABEL: shuffle_v16i16_uu_uu_uu_uu_20_21_22_11_uu_uu_uu_uu_28_29_30_11:5869; XOPAVX1:       # %bb.0:5870; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25871; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm05872; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]5873; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,5,6],xmm0[7]5874; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5,6],xmm0[7]5875; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05876; XOPAVX1-NEXT:    retq5877;5878; XOPAVX2-LABEL: shuffle_v16i16_uu_uu_uu_uu_20_21_22_11_uu_uu_uu_uu_28_29_30_11:5879; XOPAVX2:       # %bb.0:5880; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,2]5881; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]5882; XOPAVX2-NEXT:    retq5883  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 20, i32 21, i32 22, i32 11, i32 poison, i32 poison, i32 poison, i32 poison, i32 28, i32 29, i32 30, i32 11>5884  ret <16 x i16> %shuffle5885}5886 5887define <16 x i16> @shuffle_v16i16_20_21_22_03_uu_uu_uu_uu_28_29_30_11_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {5888; AVX1-LABEL: shuffle_v16i16_20_21_22_03_uu_uu_uu_uu_28_29_30_11_uu_uu_uu_uu:5889; AVX1:       # %bb.0:5890; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25891; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35892; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]5893; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2],xmm2[3],xmm3[4,5,6,7]5894; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]5895; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]5896; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05897; AVX1-NEXT:    retq5898;5899; AVX2-LABEL: shuffle_v16i16_20_21_22_03_uu_uu_uu_uu_28_29_30_11_uu_uu_uu_uu:5900; AVX2:       # %bb.0:5901; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,3,2,3,6,7,6,7]5902; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]5903; AVX2-NEXT:    retq5904;5905; AVX512VL-LABEL: shuffle_v16i16_20_21_22_03_uu_uu_uu_uu_28_29_30_11_uu_uu_uu_uu:5906; AVX512VL:       # %bb.0:5907; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [4,5,6,19,0,0,0,0,12,13,14,27,0,0,0,0]5908; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm25909; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm05910; AVX512VL-NEXT:    retq5911;5912; XOPAVX1-LABEL: shuffle_v16i16_20_21_22_03_uu_uu_uu_uu_28_29_30_11_uu_uu_uu_uu:5913; XOPAVX1:       # %bb.0:5914; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25915; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm35916; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]5917; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2],xmm2[3],xmm3[4,5,6,7]5918; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]5919; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3],xmm1[4,5,6,7]5920; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05921; XOPAVX1-NEXT:    retq5922;5923; XOPAVX2-LABEL: shuffle_v16i16_20_21_22_03_uu_uu_uu_uu_28_29_30_11_uu_uu_uu_uu:5924; XOPAVX2:       # %bb.0:5925; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[2,3,2,3,6,7,6,7]5926; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]5927; XOPAVX2-NEXT:    retq5928  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 20, i32 21, i32 22, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 28, i32 29, i32 30, i32 11, i32 poison, i32 poison, i32 poison, i32 poison>5929  ret <16 x i16> %shuffle5930}5931 5932define <16 x i16> @shuffle_v16i16_00_01_02_21_20_21_22_11_08_09_10_29_28_29_30_11(<16 x i16> %a, <16 x i16> %b) {5933; AVX1-LABEL: shuffle_v16i16_00_01_02_21_20_21_22_11_08_09_10_29_28_29_30_11:5934; AVX1:       # %bb.0:5935; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm25936; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]5937; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm1[0,2,2,3]5938; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[3,4,5,6],xmm0[7]5939; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm15940; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]5941; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7]5942; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm05943; AVX1-NEXT:    retq5944;5945; AVX2-LABEL: shuffle_v16i16_00_01_02_21_20_21_22_11_08_09_10_29_28_29_30_11:5946; AVX2:       # %bb.0:5947; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5948; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]5949; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]5950; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7,16,17,18,19,20,21,26,27,24,25,26,27,28,29,22,23]5951; AVX2-NEXT:    retq5952;5953; AVX512VL-LABEL: shuffle_v16i16_00_01_02_21_20_21_22_11_08_09_10_29_28_29_30_11:5954; AVX512VL:       # %bb.0:5955; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,1,2,21,20,21,22,11,8,9,10,29,28,29,30,11]5956; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm05957; AVX512VL-NEXT:    retq5958;5959; XOPAVX1-LABEL: shuffle_v16i16_00_01_02_21_20_21_22_11_08_09_10_29_28_29_30_11:5960; XOPAVX1:       # %bb.0:5961; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25962; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35963; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm2 = xmm3[0,1,2,3,4,5],xmm2[10,11,8,9,10,11,12,13],xmm3[6,7]5964; XOPAVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]5965; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]5966; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3,4,5,6],xmm0[7]5967; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05968; XOPAVX1-NEXT:    retq5969;5970; XOPAVX2-LABEL: shuffle_v16i16_00_01_02_21_20_21_22_11_08_09_10_29_28_29_30_11:5971; XOPAVX2:       # %bb.0:5972; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]5973; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]5974; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]5975; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,10,11,8,9,10,11,12,13,6,7,16,17,18,19,20,21,26,27,24,25,26,27,28,29,22,23]5976; XOPAVX2-NEXT:    retq5977  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 21, i32 20, i32 21, i32 22, i32 11, i32 8, i32 9, i32 10, i32 29, i32 28, i32 29, i32 30, i32 11>5978  ret <16 x i16> %shuffle5979}5980 5981define <16 x i16> @shuffle_v16i16_00_17_02_03_20_21_22_15_08_25_10_11_28_29_30_15(<16 x i16> %a, <16 x i16> %b) {5982; AVX1-LABEL: shuffle_v16i16_00_17_02_03_20_21_22_15_08_25_10_11_28_29_30_15:5983; AVX1:       # %bb.0:5984; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm25985; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm35986; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0],xmm2[1],xmm3[2,3],xmm2[4,5,6],xmm3[7]5987; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]5988; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]5989; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm05990; AVX1-NEXT:    retq5991;5992; AVX2-LABEL: shuffle_v16i16_00_17_02_03_20_21_22_15_08_25_10_11_28_29_30_15:5993; AVX2:       # %bb.0:5994; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]5995; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3],ymm1[4,5,6],ymm0[7,8],ymm1[9],ymm0[10,11],ymm1[12,13,14],ymm0[15]5996; AVX2-NEXT:    retq5997;5998; AVX512VL-LABEL: shuffle_v16i16_00_17_02_03_20_21_22_15_08_25_10_11_28_29_30_15:5999; AVX512VL:       # %bb.0:6000; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,17,2,3,20,21,22,15,8,25,10,11,28,29,30,15]6001; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm06002; AVX512VL-NEXT:    retq6003;6004; XOPAVX1-LABEL: shuffle_v16i16_00_17_02_03_20_21_22_15_08_25_10_11_28_29_30_15:6005; XOPAVX1:       # %bb.0:6006; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26007; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36008; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0],xmm2[1],xmm3[2,3],xmm2[4,5,6],xmm3[7]6009; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]6010; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3],xmm1[4,5,6],xmm0[7]6011; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06012; XOPAVX1-NEXT:    retq6013;6014; XOPAVX2-LABEL: shuffle_v16i16_00_17_02_03_20_21_22_15_08_25_10_11_28_29_30_15:6015; XOPAVX2:       # %bb.0:6016; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]6017; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3],ymm1[4,5,6],ymm0[7,8],ymm1[9],ymm0[10,11],ymm1[12,13,14],ymm0[15]6018; XOPAVX2-NEXT:    retq6019  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 3, i32 20, i32 21, i32 22, i32 15, i32 8, i32 25, i32 10, i32 11, i32 28, i32 29, i32 30, i32 15>6020  ret <16 x i16> %shuffle6021}6022 6023define <16 x i16> @shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25(<16 x i16> %a, <16 x i16> %b) {6024; AVX1-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6025; AVX1:       # %bb.0:6026; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm16027; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]6028; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26029; AVX1-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm2[1,1,1,1,4,5,6,7]6030; AVX1-NEXT:    vpshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,5,7,7]6031; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,5,6],xmm1[7]6032; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]6033; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,7]6034; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]6035; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06036; AVX1-NEXT:    retq6037;6038; AVX2-SLOW-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6039; AVX2-SLOW:       # %bb.0:6040; AVX2-SLOW-NEXT:    vextracti128 $1, %ymm1, %xmm16041; AVX2-SLOW-NEXT:    vpbroadcastd %xmm1, %ymm16042; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,1,1,1,4,5,6,7,9,9,9,9,12,13,14,15]6043; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,7,7,8,9,10,11,12,13,15,15]6044; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]6045; AVX2-SLOW-NEXT:    retq6046;6047; AVX2-FAST-ALL-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6048; AVX2-FAST-ALL:       # %bb.0:6049; AVX2-FAST-ALL-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [4,4,4,4,4,4,4,4]6050; AVX2-FAST-ALL-NEXT:    vpermd %ymm1, %ymm2, %ymm16051; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15,u,u,18,19,18,19,18,19,18,19,24,25,26,27,30,31,u,u]6052; AVX2-FAST-ALL-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]6053; AVX2-FAST-ALL-NEXT:    retq6054;6055; AVX2-FAST-PERLANE-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6056; AVX2-FAST-PERLANE:       # %bb.0:6057; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,2,3,2,3,2,3,8,9,10,11,14,15,u,u,18,19,18,19,18,19,18,19,24,25,26,27,30,31,u,u]6058; AVX2-FAST-PERLANE-NEXT:    vextracti128 $1, %ymm1, %xmm16059; AVX2-FAST-PERLANE-NEXT:    vpbroadcastd %xmm1, %ymm16060; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]6061; AVX2-FAST-PERLANE-NEXT:    retq6062;6063; AVX512VL-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6064; AVX512VL:       # %bb.0:6065; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,0,0,1,0,5,7,25,0,0,0,9,0,13,15,25]6066; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm06067; AVX512VL-NEXT:    retq6068;6069; XOPAVX1-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6070; XOPAVX1:       # %bb.0:6071; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26072; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm16073; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]6074; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [2,3,2,3,2,3,2,3,8,9,10,11,14,15,30,31]6075; XOPAVX1-NEXT:    vpperm %xmm3, %xmm1, %xmm2, %xmm26076; XOPAVX1-NEXT:    vpperm %xmm3, %xmm1, %xmm0, %xmm06077; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06078; XOPAVX1-NEXT:    retq6079;6080; XOPAVX2-LABEL: shuffle_v16i16_uu_uu_uu_01_uu_05_07_25_uu_uu_uu_09_uu_13_15_25:6081; XOPAVX2:       # %bb.0:6082; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm16083; XOPAVX2-NEXT:    vpbroadcastd %xmm1, %ymm16084; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,1,1,1,4,5,6,7,9,9,9,9,12,13,14,15]6085; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,7,7,8,9,10,11,12,13,15,15]6086; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]6087; XOPAVX2-NEXT:    retq6088  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 5, i32 7, i32 25, i32 poison, i32 poison, i32 poison, i32 9, i32 poison, i32 13, i32 15, i32 25>6089  ret <16 x i16> %shuffle6090}6091 6092define <16 x i16> @shuffle_v16i16_uu_uu_04_uu_16_18_20_uu_uu_uu_12_uu_24_26_28_uu(<16 x i16> %a, <16 x i16> %b) {6093; AVX1-LABEL: shuffle_v16i16_uu_uu_04_uu_16_18_20_uu_uu_uu_12_uu_24_26_28_uu:6094; AVX1:       # %bb.0:6095; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26096; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [0,1,4,5,8,9,4,5,0,1,4,5,8,9,4,5]6097; AVX1-NEXT:    # xmm3 = mem[0,0]6098; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm26099; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm46100; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,2,3,3]6101; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]6102; AVX1-NEXT:    vpshufb %xmm3, %xmm1, %xmm16103; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]6104; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]6105; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06106; AVX1-NEXT:    retq6107;6108; AVX2-LABEL: shuffle_v16i16_uu_uu_04_uu_16_18_20_uu_uu_uu_12_uu_24_26_28_uu:6109; AVX2:       # %bb.0:6110; AVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5,u,u,u,u,u,u,u,u,16,17,20,21,24,25,20,21]6111; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,2,2,2,6,6,6,6]6112; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]6113; AVX2-NEXT:    retq6114;6115; AVX512VL-LABEL: shuffle_v16i16_uu_uu_04_uu_16_18_20_uu_uu_uu_12_uu_24_26_28_uu:6116; AVX512VL:       # %bb.0:6117; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,0,20,0,0,2,4,0,0,0,28,0,8,10,12,0]6118; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm26119; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm06120; AVX512VL-NEXT:    retq6121;6122; XOPAVX1-LABEL: shuffle_v16i16_uu_uu_04_uu_16_18_20_uu_uu_uu_12_uu_24_26_28_uu:6123; XOPAVX1:       # %bb.0:6124; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26125; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36126; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [8,9,10,11,8,9,10,11,16,17,20,21,24,25,20,21]6127; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm26128; XOPAVX1-NEXT:    vpperm %xmm4, %xmm1, %xmm0, %xmm06129; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06130; XOPAVX1-NEXT:    retq6131;6132; XOPAVX2-LABEL: shuffle_v16i16_uu_uu_04_uu_16_18_20_uu_uu_uu_12_uu_24_26_28_uu:6133; XOPAVX2:       # %bb.0:6134; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,0,1,4,5,8,9,4,5,u,u,u,u,u,u,u,u,16,17,20,21,24,25,20,21]6135; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,2,2,2,6,6,6,6]6136; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]6137; XOPAVX2-NEXT:    retq6138  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 4, i32 poison, i32 16, i32 18, i32 20, i32 poison, i32 poison, i32 poison, i32 12, i32 poison, i32 24, i32 26, i32 28, i32 poison>6139  ret <16 x i16> %shuffle6140}6141 6142define <16 x i16> @shuffle_v16i16_21_22_23_00_01_02_03_12_29_30_31_08_09_10_11_12(<16 x i16> %a, <16 x i16> %b) {6143; AVX1-LABEL: shuffle_v16i16_21_22_23_00_01_02_03_12_29_30_31_08_09_10_11_12:6144; AVX1:       # %bb.0:6145; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26146; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36147; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6148; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]6149; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]6150; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06151; AVX1-NEXT:    retq6152;6153; AVX2-LABEL: shuffle_v16i16_21_22_23_00_01_02_03_12_29_30_31_08_09_10_11_12:6154; AVX2:       # %bb.0:6155; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4],ymm1[5,6,7],ymm0[8,9,10,11,12],ymm1[13,14,15]6156; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]6157; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4],ymm1[5,6,7,8,9,10,11],ymm0[12],ymm1[13,14,15]6158; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6159; AVX2-NEXT:    retq6160;6161; AVX512VL-LABEL: shuffle_v16i16_21_22_23_00_01_02_03_12_29_30_31_08_09_10_11_12:6162; AVX512VL:       # %bb.0:6163; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [21,22,23,0,1,2,3,12,29,30,31,8,9,10,11,12]6164; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm06165; AVX512VL-NEXT:    retq6166;6167; XOPAVX1-LABEL: shuffle_v16i16_21_22_23_00_01_02_03_12_29_30_31_08_09_10_11_12:6168; XOPAVX1:       # %bb.0:6169; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26170; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36171; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6172; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]6173; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]6174; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06175; XOPAVX1-NEXT:    retq6176;6177; XOPAVX2-LABEL: shuffle_v16i16_21_22_23_00_01_02_03_12_29_30_31_08_09_10_11_12:6178; XOPAVX2:       # %bb.0:6179; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4],ymm1[5,6,7],ymm0[8,9,10,11,12],ymm1[13,14,15]6180; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]6181; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4],ymm1[5,6,7,8,9,10,11],ymm0[12],ymm1[13,14,15]6182; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6183; XOPAVX2-NEXT:    retq6184  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 21, i32 22, i32 23, i32 0, i32 1, i32 2, i32 3, i32 12, i32 29, i32 30, i32 31, i32 8, i32 9, i32 10, i32 11, i32 12>6185  ret <16 x i16> %shuffle6186}6187 6188define <16 x i16> @shuffle_v16i16_uu_22_uu_uu_01_02_03_uu_uu_30_uu_uu_09_10_11_uu(<16 x i16> %a, <16 x i16> %b) {6189; AVX1-LABEL: shuffle_v16i16_uu_22_uu_uu_01_02_03_uu_uu_30_uu_uu_09_10_11_uu:6190; AVX1:       # %bb.0:6191; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26192; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36193; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6194; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]6195; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06196; AVX1-NEXT:    retq6197;6198; AVX2OR512VL-LABEL: shuffle_v16i16_uu_22_uu_uu_01_02_03_uu_uu_30_uu_uu_09_10_11_uu:6199; AVX2OR512VL:       # %bb.0:6200; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[10,11,12,13,14,15],ymm0[0,1,2,3,4,5,6,7,8,9],ymm1[26,27,28,29,30,31],ymm0[16,17,18,19,20,21,22,23,24,25]6201; AVX2OR512VL-NEXT:    retq6202;6203; XOPAVX1-LABEL: shuffle_v16i16_uu_22_uu_uu_01_02_03_uu_uu_30_uu_uu_09_10_11_uu:6204; XOPAVX1:       # %bb.0:6205; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26206; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36207; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6208; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[10,11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9]6209; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06210; XOPAVX1-NEXT:    retq6211;6212; XOPAVX2-LABEL: shuffle_v16i16_uu_22_uu_uu_01_02_03_uu_uu_30_uu_uu_09_10_11_uu:6213; XOPAVX2:       # %bb.0:6214; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[10,11,12,13,14,15],ymm0[0,1,2,3,4,5,6,7,8,9],ymm1[26,27,28,29,30,31],ymm0[16,17,18,19,20,21,22,23,24,25]6215; XOPAVX2-NEXT:    retq6216  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 22, i32 poison, i32 poison, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 30, i32 poison, i32 poison, i32 9, i32 10, i32 11, i32 poison>6217  ret <16 x i16> %shuffle6218}6219 6220define <16 x i16> @shuffle_v16i16_05_06_07_00_01_02_03_12_13_14_15_08_09_10_11_12(<16 x i16> %a, <16 x i16> %b) {6221; AVX1-LABEL: shuffle_v16i16_05_06_07_00_01_02_03_12_13_14_15_08_09_10_11_12:6222; AVX1:       # %bb.0:6223; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm16224; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4],xmm0[5,6,7]6225; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6226; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6227; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm06228; AVX1-NEXT:    retq6229;6230; AVX2-LABEL: shuffle_v16i16_05_06_07_00_01_02_03_12_13_14_15_08_09_10_11_12:6231; AVX2:       # %bb.0:6232; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]6233; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4],ymm0[5,6,7,8,9,10,11],ymm1[12],ymm0[13,14,15]6234; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6235; AVX2-NEXT:    retq6236;6237; AVX512VL-LABEL: shuffle_v16i16_05_06_07_00_01_02_03_12_13_14_15_08_09_10_11_12:6238; AVX512VL:       # %bb.0:6239; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [5,6,7,0,1,2,3,12,13,14,15,8,9,10,11,12]6240; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm06241; AVX512VL-NEXT:    retq6242;6243; XOPAVX1-LABEL: shuffle_v16i16_05_06_07_00_01_02_03_12_13_14_15_08_09_10_11_12:6244; XOPAVX1:       # %bb.0:6245; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm16246; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4],xmm0[5,6,7]6247; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6248; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6249; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm06250; XOPAVX1-NEXT:    retq6251;6252; XOPAVX2-LABEL: shuffle_v16i16_05_06_07_00_01_02_03_12_13_14_15_08_09_10_11_12:6253; XOPAVX2:       # %bb.0:6254; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]6255; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4],ymm0[5,6,7,8,9,10,11],ymm1[12],ymm0[13,14,15]6256; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6257; XOPAVX2-NEXT:    retq6258  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12>6259  ret <16 x i16> %shuffle6260}6261 6262define <16 x i16> @shuffle_v16i16_uu_06_uu_uu_01_02_03_uu_uu_14_uu_uu_09_10_11_uu(<16 x i16> %a, <16 x i16> %b) {6263; AVX1-LABEL: shuffle_v16i16_uu_06_uu_uu_01_02_03_uu_uu_14_uu_uu_09_10_11_uu:6264; AVX1:       # %bb.0:6265; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6266; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06267; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6268; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06269; AVX1-NEXT:    retq6270;6271; AVX2OR512VL-LABEL: shuffle_v16i16_uu_06_uu_uu_01_02_03_uu_uu_14_uu_uu_09_10_11_uu:6272; AVX2OR512VL:       # %bb.0:6273; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6274; AVX2OR512VL-NEXT:    retq6275;6276; XOPAVX1-LABEL: shuffle_v16i16_uu_06_uu_uu_01_02_03_uu_uu_14_uu_uu_09_10_11_uu:6277; XOPAVX1:       # %bb.0:6278; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6279; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06280; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9]6281; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06282; XOPAVX1-NEXT:    retq6283;6284; XOPAVX2-LABEL: shuffle_v16i16_uu_06_uu_uu_01_02_03_uu_uu_14_uu_uu_09_10_11_uu:6285; XOPAVX2:       # %bb.0:6286; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6287; XOPAVX2-NEXT:    retq6288  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 6, i32 poison, i32 poison, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 14, i32 poison, i32 poison, i32 9, i32 10, i32 11, i32 poison>6289  ret <16 x i16> %shuffle6290}6291 6292define <16 x i16> @shuffle_v16i16_uu_uu_uu_uu_01_02_03_uu_uu_uu_uu_uu_09_10_11_uu(<16 x i16> %a, <16 x i16> %b) {6293; AVX1-LABEL: shuffle_v16i16_uu_uu_uu_uu_01_02_03_uu_uu_uu_uu_uu_09_10_11_uu:6294; AVX1:       # %bb.0:6295; AVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]6296; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06297; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]6298; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06299; AVX1-NEXT:    retq6300;6301; AVX2OR512VL-LABEL: shuffle_v16i16_uu_uu_uu_uu_01_02_03_uu_uu_uu_uu_uu_09_10_11_uu:6302; AVX2OR512VL:       # %bb.0:6303; AVX2OR512VL-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7,8,9],zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23,24,25]6304; AVX2OR512VL-NEXT:    retq6305;6306; XOPAVX1-LABEL: shuffle_v16i16_uu_uu_uu_uu_01_02_03_uu_uu_uu_uu_uu_09_10_11_uu:6307; XOPAVX1:       # %bb.0:6308; XOPAVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]6309; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06310; XOPAVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9]6311; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06312; XOPAVX1-NEXT:    retq6313;6314; XOPAVX2-LABEL: shuffle_v16i16_uu_uu_uu_uu_01_02_03_uu_uu_uu_uu_uu_09_10_11_uu:6315; XOPAVX2:       # %bb.0:6316; XOPAVX2-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7,8,9],zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23,24,25]6317; XOPAVX2-NEXT:    retq6318  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 9, i32 10, i32 11, i32 poison>6319  ret <16 x i16> %shuffle6320}6321 6322define <16 x i16> @shuffle_v16i16_19_20_21_22_23_00_01_10_27_28_29_30_31_08_09_10(<16 x i16> %a, <16 x i16> %b) {6323; AVX1-LABEL: shuffle_v16i16_19_20_21_22_23_00_01_10_27_28_29_30_31_08_09_10:6324; AVX1:       # %bb.0:6325; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26326; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36327; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6328; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]6329; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[u,u,u,u,u,u,u,u,u,u,0,1,4,5,10,11]6330; AVX1-NEXT:    vpsrldq {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero6331; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4],xmm0[5,6,7]6332; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06333; AVX1-NEXT:    retq6334;6335; AVX2-LABEL: shuffle_v16i16_19_20_21_22_23_00_01_10_27_28_29_30_31_08_09_10:6336; AVX2:       # %bb.0:6337; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2],ymm1[3,4,5,6,7],ymm0[8,9,10],ymm1[11,12,13,14,15]6338; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]6339; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3,4,5,6,7,8,9],ymm0[10],ymm1[11,12,13,14,15]6340; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6341; AVX2-NEXT:    retq6342;6343; AVX512VL-LABEL: shuffle_v16i16_19_20_21_22_23_00_01_10_27_28_29_30_31_08_09_10:6344; AVX512VL:       # %bb.0:6345; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [3,4,5,6,7,16,17,26,11,12,13,14,15,24,25,26]6346; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm26347; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm06348; AVX512VL-NEXT:    retq6349;6350; XOPAVX1-LABEL: shuffle_v16i16_19_20_21_22_23_00_01_10_27_28_29_30_31_08_09_10:6351; XOPAVX1:       # %bb.0:6352; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26353; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36354; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6355; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]6356; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,4,5,10,11]6357; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06358; XOPAVX1-NEXT:    retq6359;6360; XOPAVX2-LABEL: shuffle_v16i16_19_20_21_22_23_00_01_10_27_28_29_30_31_08_09_10:6361; XOPAVX2:       # %bb.0:6362; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2],ymm1[3,4,5,6,7],ymm0[8,9,10],ymm1[11,12,13,14,15]6363; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,2,3]6364; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3,4,5,6,7,8,9],ymm0[10],ymm1[11,12,13,14,15]6365; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6366; XOPAVX2-NEXT:    retq6367  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 19, i32 20, i32 21, i32 22, i32 23, i32 0, i32 1, i32 10, i32 27, i32 28, i32 29, i32 30, i32 31, i32 8, i32 9, i32 10>6368  ret <16 x i16> %shuffle6369}6370 6371define <16 x i16> @shuffle_v16i16_uu_20_21_22_uu_uu_01_uu_uu_28_29_30_uu_uu_09_uu(<16 x i16> %a, <16 x i16> %b) {6372; AVX1-LABEL: shuffle_v16i16_uu_20_21_22_uu_uu_01_uu_uu_28_29_30_uu_uu_09_uu:6373; AVX1:       # %bb.0:6374; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26375; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36376; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6377; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]6378; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06379; AVX1-NEXT:    retq6380;6381; AVX2OR512VL-LABEL: shuffle_v16i16_uu_20_21_22_uu_uu_01_uu_uu_28_29_30_uu_uu_09_uu:6382; AVX2OR512VL:       # %bb.0:6383; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4,5],ymm1[22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20,21]6384; AVX2OR512VL-NEXT:    retq6385;6386; XOPAVX1-LABEL: shuffle_v16i16_uu_20_21_22_uu_uu_01_uu_uu_28_29_30_uu_uu_09_uu:6387; XOPAVX1:       # %bb.0:6388; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26389; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36390; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6391; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4,5]6392; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06393; XOPAVX1-NEXT:    retq6394;6395; XOPAVX2-LABEL: shuffle_v16i16_uu_20_21_22_uu_uu_01_uu_uu_28_29_30_uu_uu_09_uu:6396; XOPAVX2:       # %bb.0:6397; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm1[6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4,5],ymm1[22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20,21]6398; XOPAVX2-NEXT:    retq6399  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 20, i32 21, i32 22, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 28, i32 29, i32 30, i32 poison, i32 poison, i32 9, i32 poison>6400  ret <16 x i16> %shuffle6401}6402 6403define <16 x i16> @shuffle_v16i16_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09_10(<16 x i16> %a, <16 x i16> %b) {6404; AVX1-LABEL: shuffle_v16i16_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09_10:6405; AVX1:       # %bb.0:6406; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm16407; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]6408; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6409; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6410; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm06411; AVX1-NEXT:    retq6412;6413; AVX2-LABEL: shuffle_v16i16_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09_10:6414; AVX2:       # %bb.0:6415; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]6416; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]6417; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6418; AVX2-NEXT:    retq6419;6420; AVX512VL-LABEL: shuffle_v16i16_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09_10:6421; AVX512VL:       # %bb.0:6422; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm1 = [3,4,5,6,7,0,1,10,11,12,13,14,15,8,9,10]6423; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm06424; AVX512VL-NEXT:    retq6425;6426; XOPAVX1-LABEL: shuffle_v16i16_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09_10:6427; XOPAVX1:       # %bb.0:6428; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm16429; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]6430; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6431; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6432; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm06433; XOPAVX1-NEXT:    retq6434;6435; XOPAVX2-LABEL: shuffle_v16i16_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09_10:6436; XOPAVX2:       # %bb.0:6437; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]6438; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]6439; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6440; XOPAVX2-NEXT:    retq6441  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10>6442  ret <16 x i16> %shuffle6443}6444 6445define <16 x i16> @shuffle_v16i16_uu_04_05_06_uu_uu_01_uu_uu_12_13_14_uu_uu_09_uu(<16 x i16> %a, <16 x i16> %b) {6446; AVX1-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_01_uu_uu_12_13_14_uu_uu_09_uu:6447; AVX1:       # %bb.0:6448; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6449; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06450; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6451; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06452; AVX1-NEXT:    retq6453;6454; AVX2OR512VL-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_01_uu_uu_12_13_14_uu_uu_09_uu:6455; AVX2OR512VL:       # %bb.0:6456; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6457; AVX2OR512VL-NEXT:    retq6458;6459; XOPAVX1-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_01_uu_uu_12_13_14_uu_uu_09_uu:6460; XOPAVX1:       # %bb.0:6461; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6462; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06463; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]6464; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06465; XOPAVX1-NEXT:    retq6466;6467; XOPAVX2-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_01_uu_uu_12_13_14_uu_uu_09_uu:6468; XOPAVX2:       # %bb.0:6469; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6470; XOPAVX2-NEXT:    retq6471  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 4, i32 5, i32 6, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 12, i32 13, i32 14, i32 poison, i32 poison, i32 9, i32 poison>6472  ret <16 x i16> %shuffle6473}6474 6475define <16 x i16> @shuffle_v16i16_uu_04_05_06_uu_uu_uu_uu_uu_12_13_14_uu_uu_uu_uu(<16 x i16> %a, <16 x i16> %b) {6476; AVX1-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_uu_uu_uu_12_13_14_uu_uu_uu_uu:6477; AVX1:       # %bb.0:6478; AVX1-NEXT:    vpsrldq {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero6479; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06480; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero6481; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06482; AVX1-NEXT:    retq6483;6484; AVX2OR512VL-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_uu_uu_uu_12_13_14_uu_uu_uu_uu:6485; AVX2OR512VL:       # %bb.0:6486; AVX2OR512VL-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,ymm0[22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero6487; AVX2OR512VL-NEXT:    retq6488;6489; XOPAVX1-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_uu_uu_uu_12_13_14_uu_uu_uu_uu:6490; XOPAVX1:       # %bb.0:6491; XOPAVX1-NEXT:    vpsrldq {{.*#+}} xmm1 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero6492; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06493; XOPAVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero6494; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm06495; XOPAVX1-NEXT:    retq6496;6497; XOPAVX2-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_uu_uu_uu_12_13_14_uu_uu_uu_uu:6498; XOPAVX2:       # %bb.0:6499; XOPAVX2-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,ymm0[22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero6500; XOPAVX2-NEXT:    retq6501  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 4, i32 5, i32 6, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 12, i32 13, i32 14, i32 poison, i32 poison, i32 poison, i32 poison>6502  ret <16 x i16> %shuffle6503}6504 6505define <16 x i16> @shuffle_v16i16_03_04_05_06_07_16_17_26_11_12_13_14_15_24_25_26(<16 x i16> %a, <16 x i16> %b) {6506; AVX1-LABEL: shuffle_v16i16_03_04_05_06_07_16_17_26_11_12_13_14_15_24_25_26:6507; AVX1:       # %bb.0:6508; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26509; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36510; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6511; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]6512; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u,u,u,u,u,u,u,u,u,u,0,1,4,5,10,11]6513; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero6514; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4],xmm1[5,6,7]6515; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06516; AVX1-NEXT:    retq6517;6518; AVX2-LABEL: shuffle_v16i16_03_04_05_06_07_16_17_26_11_12_13_14_15_24_25_26:6519; AVX2:       # %bb.0:6520; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7],ymm1[8,9,10],ymm0[11,12,13,14,15]6521; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]6522; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]6523; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6524; AVX2-NEXT:    retq6525;6526; AVX512VL-LABEL: shuffle_v16i16_03_04_05_06_07_16_17_26_11_12_13_14_15_24_25_26:6527; AVX512VL:       # %bb.0:6528; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [3,4,5,6,7,16,17,26,11,12,13,14,15,24,25,26]6529; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm06530; AVX512VL-NEXT:    retq6531;6532; XOPAVX1-LABEL: shuffle_v16i16_03_04_05_06_07_16_17_26_11_12_13_14_15_24_25_26:6533; XOPAVX1:       # %bb.0:6534; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26535; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36536; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6537; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]6538; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,4,5,10,11]6539; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06540; XOPAVX1-NEXT:    retq6541;6542; XOPAVX2-LABEL: shuffle_v16i16_03_04_05_06_07_16_17_26_11_12_13_14_15_24_25_26:6543; XOPAVX2:       # %bb.0:6544; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7],ymm1[8,9,10],ymm0[11,12,13,14,15]6545; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]6546; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7,8,9],ymm1[10],ymm0[11,12,13,14,15]6547; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]6548; XOPAVX2-NEXT:    retq6549  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 26, i32 11, i32 12, i32 13, i32 14, i32 15, i32 24, i32 25, i32 26>6550  ret <16 x i16> %shuffle6551}6552 6553define <16 x i16> @shuffle_v16i16_uu_04_05_06_uu_uu_17_uu_uu_12_13_14_uu_uu_25_uu(<16 x i16> %a, <16 x i16> %b) {6554; AVX1-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_17_uu_uu_12_13_14_uu_uu_25_uu:6555; AVX1:       # %bb.0:6556; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26557; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36558; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6559; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]6560; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06561; AVX1-NEXT:    retq6562;6563; AVX2OR512VL-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_17_uu_uu_12_13_14_uu_uu_25_uu:6564; AVX2OR512VL:       # %bb.0:6565; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3,4,5],ymm0[22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19,20,21]6566; AVX2OR512VL-NEXT:    retq6567;6568; XOPAVX1-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_17_uu_uu_12_13_14_uu_uu_25_uu:6569; XOPAVX1:       # %bb.0:6570; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26571; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36572; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5]6573; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4,5]6574; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06575; XOPAVX1-NEXT:    retq6576;6577; XOPAVX2-LABEL: shuffle_v16i16_uu_04_05_06_uu_uu_17_uu_uu_12_13_14_uu_uu_25_uu:6578; XOPAVX2:       # %bb.0:6579; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3,4,5],ymm0[22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19,20,21]6580; XOPAVX2-NEXT:    retq6581  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 4, i32 5, i32 6, i32 poison, i32 poison, i32 17, i32 poison, i32 poison, i32 12, i32 13, i32 14, i32 poison, i32 poison, i32 25, i32 poison>6582  ret <16 x i16> %shuffle6583}6584 6585define <16 x i16> @shuffle_v16i16_05_06_07_16_17_18_19_28_13_14_15_24_25_26_27_28(<16 x i16> %a, <16 x i16> %b) {6586; AVX1-LABEL: shuffle_v16i16_05_06_07_16_17_18_19_28_13_14_15_24_25_26_27_28:6587; AVX1:       # %bb.0:6588; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26589; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36590; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6591; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]6592; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]6593; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06594; AVX1-NEXT:    retq6595;6596; AVX2-LABEL: shuffle_v16i16_05_06_07_16_17_18_19_28_13_14_15_24_25_26_27_28:6597; AVX2:       # %bb.0:6598; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4],ymm0[5,6,7],ymm1[8,9,10,11,12],ymm0[13,14,15]6599; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]6600; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4],ymm0[5,6,7,8,9,10,11],ymm1[12],ymm0[13,14,15]6601; AVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6602; AVX2-NEXT:    retq6603;6604; AVX512VL-LABEL: shuffle_v16i16_05_06_07_16_17_18_19_28_13_14_15_24_25_26_27_28:6605; AVX512VL:       # %bb.0:6606; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [21,22,23,0,1,2,3,12,29,30,31,8,9,10,11,12]6607; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm26608; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm06609; AVX512VL-NEXT:    retq6610;6611; XOPAVX1-LABEL: shuffle_v16i16_05_06_07_16_17_18_19_28_13_14_15_24_25_26_27_28:6612; XOPAVX1:       # %bb.0:6613; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26614; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36615; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6616; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]6617; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]6618; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06619; XOPAVX1-NEXT:    retq6620;6621; XOPAVX2-LABEL: shuffle_v16i16_05_06_07_16_17_18_19_28_13_14_15_24_25_26_27_28:6622; XOPAVX2:       # %bb.0:6623; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4],ymm0[5,6,7],ymm1[8,9,10,11,12],ymm0[13,14,15]6624; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,2,3]6625; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4],ymm0[5,6,7,8,9,10,11],ymm1[12],ymm0[13,14,15]6626; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,26,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25]6627; XOPAVX2-NEXT:    retq6628  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 28, i32 13, i32 14, i32 15, i32 24, i32 25, i32 26, i32 27, i32 28>6629  ret <16 x i16> %shuffle6630}6631 6632define <16 x i16> @shuffle_v16i16_00_02_04_06_01_03_05_07_31_30_29_28_27_26_25_24(<16 x i16> %a, <16 x i16> %b) {6633; AVX1-LABEL: shuffle_v16i16_00_02_04_06_01_03_05_07_31_30_29_28_27_26_25_24:6634; AVX1:       # %bb.0:6635; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,2,3,6,7,10,11,14,15]6636; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm16637; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[14,15,12,13,10,11,8,9,6,7,4,5,2,3,0,1]6638; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm06639; AVX1-NEXT:    retq6640;6641; AVX2-LABEL: shuffle_v16i16_00_02_04_06_01_03_05_07_31_30_29_28_27_26_25_24:6642; AVX2:       # %bb.0:6643; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]6644; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,2,3,6,7,10,11,14,15,30,31,28,29,26,27,24,25,22,23,20,21,18,19,16,17]6645; AVX2-NEXT:    retq6646;6647; AVX512VL-LABEL: shuffle_v16i16_00_02_04_06_01_03_05_07_31_30_29_28_27_26_25_24:6648; AVX512VL:       # %bb.0:6649; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [0,2,4,6,1,3,5,7,31,30,29,28,27,26,25,24]6650; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm06651; AVX512VL-NEXT:    retq6652;6653; XOPAVX1-LABEL: shuffle_v16i16_00_02_04_06_01_03_05_07_31_30_29_28_27_26_25_24:6654; XOPAVX1:       # %bb.0:6655; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,2,3,6,7,10,11,14,15]6656; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm16657; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[14,15,12,13,10,11,8,9,6,7,4,5,2,3,0,1]6658; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm06659; XOPAVX1-NEXT:    retq6660;6661; XOPAVX2-LABEL: shuffle_v16i16_00_02_04_06_01_03_05_07_31_30_29_28_27_26_25_24:6662; XOPAVX2:       # %bb.0:6663; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]6664; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,2,3,6,7,10,11,14,15,30,31,28,29,26,27,24,25,22,23,20,21,18,19,16,17]6665; XOPAVX2-NEXT:    retq6666  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 1, i32 3, i32 5, i32 7, i32 31, i32 30, i32 29, i32 28, i32 27, i32 26, i32 25, i32 24>6667  ret <16 x i16> %shuffle6668}6669 6670define <16 x i16> @shuffle_v16i16_uu_06_uu_uu_17_18_19_uu_uu_14_uu_uu_25_26_27_uu(<16 x i16> %a, <16 x i16> %b) {6671; AVX1-LABEL: shuffle_v16i16_uu_06_uu_uu_17_18_19_uu_uu_14_uu_uu_25_26_27_uu:6672; AVX1:       # %bb.0:6673; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26674; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36675; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6676; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]6677; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06678; AVX1-NEXT:    retq6679;6680; AVX2OR512VL-LABEL: shuffle_v16i16_uu_06_uu_uu_17_18_19_uu_uu_14_uu_uu_25_26_27_uu:6681; AVX2OR512VL:       # %bb.0:6682; AVX2OR512VL-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15],ymm1[0,1,2,3,4,5,6,7,8,9],ymm0[26,27,28,29,30,31],ymm1[16,17,18,19,20,21,22,23,24,25]6683; AVX2OR512VL-NEXT:    retq6684;6685; XOPAVX1-LABEL: shuffle_v16i16_uu_06_uu_uu_17_18_19_uu_uu_14_uu_uu_25_26_27_uu:6686; XOPAVX1:       # %bb.0:6687; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26688; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36689; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7,8,9]6690; XOPAVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],xmm1[0,1,2,3,4,5,6,7,8,9]6691; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06692; XOPAVX1-NEXT:    retq6693;6694; XOPAVX2-LABEL: shuffle_v16i16_uu_06_uu_uu_17_18_19_uu_uu_14_uu_uu_25_26_27_uu:6695; XOPAVX2:       # %bb.0:6696; XOPAVX2-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[10,11,12,13,14,15],ymm1[0,1,2,3,4,5,6,7,8,9],ymm0[26,27,28,29,30,31],ymm1[16,17,18,19,20,21,22,23,24,25]6697; XOPAVX2-NEXT:    retq6698  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 6, i32 poison, i32 poison, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 14, i32 poison, i32 poison, i32 25, i32 26, i32 27, i32 poison>6699  ret <16 x i16> %shuffle6700}6701 6702define <16 x i16> @shuffle_v16i16_23_uu_03_uu_20_20_05_uu_31_uu_11_uu_28_28_13_uu(<16 x i16> %a, <16 x i16> %b) {6703; AVX1-LABEL: shuffle_v16i16_23_uu_03_uu_20_20_05_uu_31_uu_11_uu_28_28_13_uu:6704; AVX1:       # %bb.0:6705; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26706; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,xmm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13]6707; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36708; AVX1-NEXT:    vpshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,4,4]6709; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm3[2],xmm2[2],xmm3[3],xmm2[3]6710; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13]6711; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,4,4]6712; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]6713; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06714; AVX1-NEXT:    retq6715;6716; AVX2-LABEL: shuffle_v16i16_23_uu_03_uu_20_20_05_uu_31_uu_11_uu_28_28_13_uu:6717; AVX2:       # %bb.0:6718; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4],ymm0[5,6],ymm1[7],ymm0[8,9,10,11],ymm1[12],ymm0[13,14],ymm1[15]6719; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,14,15,6,7,6,7,8,9,8,9,10,11,14,15,30,31,30,31,22,23,22,23,24,25,24,25,26,27,30,31]6720; AVX2-NEXT:    retq6721;6722; AVX512VL-LABEL: shuffle_v16i16_23_uu_03_uu_20_20_05_uu_31_uu_11_uu_28_28_13_uu:6723; AVX512VL:       # %bb.0:6724; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [7,0,19,0,4,4,21,0,15,0,27,0,12,12,29,0]6725; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm26726; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm06727; AVX512VL-NEXT:    retq6728;6729; XOPAVX1-LABEL: shuffle_v16i16_23_uu_03_uu_20_20_05_uu_31_uu_11_uu_28_28_13_uu:6730; XOPAVX1:       # %bb.0:6731; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm26732; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm36733; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [14,15,10,11,22,23,24,25,8,9,8,9,26,27,28,29]6734; XOPAVX1-NEXT:    vpperm %xmm4, %xmm2, %xmm3, %xmm26735; XOPAVX1-NEXT:    vpperm %xmm4, %xmm0, %xmm1, %xmm06736; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06737; XOPAVX1-NEXT:    retq6738;6739; XOPAVX2-LABEL: shuffle_v16i16_23_uu_03_uu_20_20_05_uu_31_uu_11_uu_28_28_13_uu:6740; XOPAVX2:       # %bb.0:6741; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4],ymm0[5,6],ymm1[7],ymm0[8,9,10,11],ymm1[12],ymm0[13,14],ymm1[15]6742; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[14,15,14,15,6,7,6,7,8,9,8,9,10,11,14,15,30,31,30,31,22,23,22,23,24,25,24,25,26,27,30,31]6743; XOPAVX2-NEXT:    retq6744  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 23, i32 poison, i32 3, i32 poison, i32 20, i32 20, i32 5, i32 poison, i32 31, i32 poison, i32 11, i32 poison, i32 28, i32 28, i32 13, i32 poison>6745  ret <16 x i16> %shuffle6746}6747 6748define <16 x i16> @shuffle_v16i16_u_u_u_u_u_u_u_u_0_16_1_17_2_18_3_19(<16 x i16> %a, <16 x i16> %b) {6749; AVX1-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_0_16_1_17_2_18_3_19:6750; AVX1:       # %bb.0:6751; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]6752; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm06753; AVX1-NEXT:    retq6754;6755; AVX2OR512VL-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_0_16_1_17_2_18_3_19:6756; AVX2OR512VL:       # %bb.0:6757; AVX2OR512VL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]6758; AVX2OR512VL-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm06759; AVX2OR512VL-NEXT:    retq6760;6761; XOPAVX1-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_0_16_1_17_2_18_3_19:6762; XOPAVX1:       # %bb.0:6763; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]6764; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm06765; XOPAVX1-NEXT:    retq6766;6767; XOPAVX2-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_0_16_1_17_2_18_3_19:6768; XOPAVX2:       # %bb.0:6769; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]6770; XOPAVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm06771; XOPAVX2-NEXT:    retq6772  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19>6773  ret <16 x i16> %shuffle6774}6775 6776define <16 x i16> @shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3(<16 x i16> %a, <16 x i16> %b) {6777; AVX1-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6778; AVX1:       # %bb.0:6779; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6780; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6781; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm06782; AVX1-NEXT:    retq6783;6784; AVX2-SLOW-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6785; AVX2-SLOW:       # %bb.0:6786; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6787; AVX2-SLOW-NEXT:    vpbroadcastq %xmm0, %ymm06788; AVX2-SLOW-NEXT:    retq6789;6790; AVX2-FAST-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6791; AVX2-FAST:       # %bb.0:6792; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]6793; AVX2-FAST-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm06794; AVX2-FAST-NEXT:    retq6795;6796; AVX512VL-SLOW-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6797; AVX512VL-SLOW:       # %bb.0:6798; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6799; AVX512VL-SLOW-NEXT:    vpbroadcastq %xmm0, %ymm06800; AVX512VL-SLOW-NEXT:    retq6801;6802; AVX512VL-FAST-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6803; AVX512VL-FAST:       # %bb.0:6804; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]6805; AVX512VL-FAST-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm06806; AVX512VL-FAST-NEXT:    retq6807;6808; XOPAVX1-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6809; XOPAVX1:       # %bb.0:6810; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6811; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6812; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm06813; XOPAVX1-NEXT:    retq6814;6815; XOPAVX2-LABEL: shuffle_v16i16_u_u_u_u_u_u_u_u_3_3_3_3_3_3_3_3:6816; XOPAVX2:       # %bb.0:6817; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6818; XOPAVX2-NEXT:    vpbroadcastq %xmm0, %ymm06819; XOPAVX2-NEXT:    retq6820  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>6821  ret <16 x i16> %shuffle6822}6823 6824define <16 x i16> @shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8(<16 x i16> %a, <16 x i16> %b) {6825; AVX1-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6826; AVX1:       # %bb.0:6827; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06828; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]6829; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6830; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm06831; AVX1-NEXT:    retq6832;6833; AVX2-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6834; AVX2:       # %bb.0:6835; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm06836; AVX2-NEXT:    vpbroadcastw %xmm0, %ymm06837; AVX2-NEXT:    retq6838;6839; AVX512VL-SLOW-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6840; AVX512VL-SLOW:       # %bb.0:6841; AVX512VL-SLOW-NEXT:    vextracti128 $1, %ymm0, %xmm06842; AVX512VL-SLOW-NEXT:    vpbroadcastw %xmm0, %ymm06843; AVX512VL-SLOW-NEXT:    retq6844;6845; AVX512VL-FAST-CROSSLANE-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6846; AVX512VL-FAST-CROSSLANE:       # %bb.0:6847; AVX512VL-FAST-CROSSLANE-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]6848; AVX512VL-FAST-CROSSLANE-NEXT:    vpermw %ymm0, %ymm1, %ymm06849; AVX512VL-FAST-CROSSLANE-NEXT:    retq6850;6851; AVX512VL-FAST-PERLANE-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6852; AVX512VL-FAST-PERLANE:       # %bb.0:6853; AVX512VL-FAST-PERLANE-NEXT:    vextracti128 $1, %ymm0, %xmm06854; AVX512VL-FAST-PERLANE-NEXT:    vpbroadcastw %xmm0, %ymm06855; AVX512VL-FAST-PERLANE-NEXT:    retq6856;6857; XOPAVX1-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6858; XOPAVX1:       # %bb.0:6859; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06860; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]6861; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6862; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm06863; XOPAVX1-NEXT:    retq6864;6865; XOPAVX2-LABEL: shuffle_v16i16_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8_8:6866; XOPAVX2:       # %bb.0:6867; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm06868; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %ymm06869; XOPAVX2-NEXT:    retq6870  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>6871  ret <16 x i16> %shuffle6872}6873 6874define <16 x i16> @shuffle_v16i16_4_20_5_21_6_22_7_23_u_u_u_u_u_u_u_u(<16 x i16> %a, <16 x i16> %b) {6875; ALL-LABEL: shuffle_v16i16_4_20_5_21_6_22_7_23_u_u_u_u_u_u_u_u:6876; ALL:       # %bb.0:6877; ALL-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]6878; ALL-NEXT:    retq6879  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>6880  ret <16 x i16> %shuffle6881}6882 6883define <16 x i16> @shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u(<16 x i16> %a, <16 x i16> %b) {6884; AVX1-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6885; AVX1:       # %bb.0:6886; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6887; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6888; AVX1-NEXT:    retq6889;6890; AVX2-SLOW-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6891; AVX2-SLOW:       # %bb.0:6892; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6893; AVX2-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm06894; AVX2-SLOW-NEXT:    retq6895;6896; AVX2-FAST-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6897; AVX2-FAST:       # %bb.0:6898; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]6899; AVX2-FAST-NEXT:    retq6900;6901; AVX512VL-SLOW-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6902; AVX512VL-SLOW:       # %bb.0:6903; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6904; AVX512VL-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm06905; AVX512VL-SLOW-NEXT:    retq6906;6907; AVX512VL-FAST-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6908; AVX512VL-FAST:       # %bb.0:6909; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]6910; AVX512VL-FAST-NEXT:    retq6911;6912; XOPAVX1-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6913; XOPAVX1:       # %bb.0:6914; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6915; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6916; XOPAVX1-NEXT:    retq6917;6918; XOPAVX2-LABEL: shuffle_v16i16_3_3_3_3_3_3_3_3_u_u_u_u_u_u_u_u:6919; XOPAVX2:       # %bb.0:6920; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]6921; XOPAVX2-NEXT:    vpbroadcastq %xmm0, %xmm06922; XOPAVX2-NEXT:    retq6923  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>6924  ret <16 x i16> %shuffle6925}6926 6927define <16 x i16> @shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u(<16 x i16> %a, <16 x i16> %b) {6928; AVX1-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6929; AVX1:       # %bb.0:6930; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06931; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]6932; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6933; AVX1-NEXT:    retq6934;6935; AVX2-SLOW-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6936; AVX2-SLOW:       # %bb.0:6937; AVX2-SLOW-NEXT:    vextracti128 $1, %ymm0, %xmm06938; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]6939; AVX2-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm06940; AVX2-SLOW-NEXT:    retq6941;6942; AVX2-FAST-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6943; AVX2-FAST:       # %bb.0:6944; AVX2-FAST-NEXT:    vextracti128 $1, %ymm0, %xmm06945; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]6946; AVX2-FAST-NEXT:    retq6947;6948; AVX512VL-SLOW-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6949; AVX512VL-SLOW:       # %bb.0:6950; AVX512VL-SLOW-NEXT:    vextracti128 $1, %ymm0, %xmm06951; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]6952; AVX512VL-SLOW-NEXT:    vpbroadcastq %xmm0, %xmm06953; AVX512VL-SLOW-NEXT:    retq6954;6955; AVX512VL-FAST-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6956; AVX512VL-FAST:       # %bb.0:6957; AVX512VL-FAST-NEXT:    vextracti128 $1, %ymm0, %xmm06958; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3]6959; AVX512VL-FAST-NEXT:    retq6960;6961; XOPAVX1-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6962; XOPAVX1:       # %bb.0:6963; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm06964; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]6965; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6966; XOPAVX1-NEXT:    retq6967;6968; XOPAVX2-LABEL: shuffle_v16i16_9_9_9_9_9_9_9_9_u_u_u_u_u_u_u_u:6969; XOPAVX2:       # %bb.0:6970; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm06971; XOPAVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]6972; XOPAVX2-NEXT:    vpbroadcastq %xmm0, %xmm06973; XOPAVX2-NEXT:    retq6974  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>6975  ret <16 x i16> %shuffle6976}6977 6978define <16 x i16> @shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25(<16 x i16> %a0, <16 x i16> %a1) {6979; AVX1-LABEL: shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25:6980; AVX1:       # %bb.0:6981; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm26982; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm36983; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]6984; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]6985; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm06986; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]6987; AVX1-NEXT:    retq6988;6989; AVX2-LABEL: shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25:6990; AVX2:       # %bb.0:6991; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]6992; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]6993; AVX2-NEXT:    retq6994;6995; AVX512VL-LABEL: shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25:6996; AVX512VL:       # %bb.0:6997; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [2,18,3,19,0,16,1,17,10,26,11,27,8,24,9,25]6998; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm06999; AVX512VL-NEXT:    retq7000;7001; XOPAVX1-LABEL: shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25:7002; XOPAVX1:       # %bb.0:7003; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm27004; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm37005; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]7006; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]7007; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm07008; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]7009; XOPAVX1-NEXT:    retq7010;7011; XOPAVX2-LABEL: shuffle_v16i16_02_18_03_19_00_16_01_17_10_26_11_27_08_24_09_25:7012; XOPAVX2:       # %bb.0:7013; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]7014; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5]7015; XOPAVX2-NEXT:    retq7016  %1 = shufflevector <16 x i16> %a0, <16 x i16> %a1, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 0, i32 16, i32 1, i32 17, i32 10, i32 26, i32 11, i32 27, i32 8, i32 24, i32 9, i32 25>7017  ret <16 x i16> %17018}7019 7020define <16 x i16> @shuffle_v16i16_02_18_03_19_10_26_11_27_00_16_01_17_08_24_09_25(<16 x i16> %a0, <16 x i16> %a1) {7021; AVX1-LABEL: shuffle_v16i16_02_18_03_19_10_26_11_27_00_16_01_17_08_24_09_25:7022; AVX1:       # %bb.0:7023; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm27024; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]7025; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[0,1,0,1]7026; AVX1-NEXT:    vpshuflw {{.*#+}} xmm2 = xmm2[0,0,2,2,4,5,6,7]7027; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm37028; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]7029; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm0[0,1,0,1]7030; AVX1-NEXT:    vpshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,5,7,7]7031; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0],xmm2[1],xmm3[2],xmm2[3],xmm3[4],xmm2[5],xmm3[6],xmm2[7]7032; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]7033; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,2,2,4,5,6,7]7034; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]7035; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,7,7]7036; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7]7037; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm07038; AVX1-NEXT:    retq7039;7040; AVX2-LABEL: shuffle_v16i16_02_18_03_19_10_26_11_27_00_16_01_17_08_24_09_25:7041; AVX2:       # %bb.0:7042; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]7043; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,3,0,2]7044; AVX2-NEXT:    retq7045;7046; AVX512VL-LABEL: shuffle_v16i16_02_18_03_19_10_26_11_27_00_16_01_17_08_24_09_25:7047; AVX512VL:       # %bb.0:7048; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [2,18,3,19,10,26,11,27,0,16,1,17,8,24,9,25]7049; AVX512VL-NEXT:    vpermt2w %ymm1, %ymm2, %ymm07050; AVX512VL-NEXT:    retq7051;7052; XOPAVX1-LABEL: shuffle_v16i16_02_18_03_19_10_26_11_27_00_16_01_17_08_24_09_25:7053; XOPAVX1:       # %bb.0:7054; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm27055; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]7056; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm27057; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]7058; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm2 = xmm0[0,1],xmm1[0,1],xmm0[4,5],xmm1[4,5],xmm0[2,3],xmm1[2,3],xmm0[6,7],xmm1[6,7]7059; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[8,9],xmm1[8,9],xmm0[12,13],xmm1[12,13],xmm0[10,11],xmm1[10,11],xmm0[14,15],xmm1[14,15]7060; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm07061; XOPAVX1-NEXT:    retq7062;7063; XOPAVX2-LABEL: shuffle_v16i16_02_18_03_19_10_26_11_27_00_16_01_17_08_24_09_25:7064; XOPAVX2:       # %bb.0:7065; XOPAVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]7066; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[1,3,0,2]7067; XOPAVX2-NEXT:    retq7068  %1 = shufflevector <16 x i16> %a0, <16 x i16> %a1, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 0, i32 16, i32 1, i32 17, i32 10, i32 26, i32 11, i32 27, i32 8, i32 24, i32 9, i32 25>7069  %2 = bitcast <16 x i16> %1 to <4 x i64>7070  %3 = shufflevector <4 x i64> %2, <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>7071  %4 = bitcast <4 x i64> %3 to <16 x i16>7072  ret <16 x i16> %47073}7074 7075define <16 x i16> @shuffle_v16i16_ashr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30(<8 x i32> %a0, <8 x i32> %a1) {7076; AVX1-LABEL: shuffle_v16i16_ashr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7077; AVX1:       # %bb.0:7078; AVX1-NEXT:    vpsrad $25, %xmm0, %xmm27079; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07080; AVX1-NEXT:    vpsrad $25, %xmm0, %xmm07081; AVX1-NEXT:    vpsrad $25, %xmm1, %xmm37082; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm27083; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm17084; AVX1-NEXT:    vpsrad $25, %xmm1, %xmm17085; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm07086; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm07087; AVX1-NEXT:    retq7088;7089; AVX2OR512VL-LABEL: shuffle_v16i16_ashr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7090; AVX2OR512VL:       # %bb.0:7091; AVX2OR512VL-NEXT:    vpsrad $25, %ymm0, %ymm07092; AVX2OR512VL-NEXT:    vpsrad $25, %ymm1, %ymm17093; AVX2OR512VL-NEXT:    vpackssdw %ymm1, %ymm0, %ymm07094; AVX2OR512VL-NEXT:    retq7095;7096; XOPAVX1-LABEL: shuffle_v16i16_ashr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7097; XOPAVX1:       # %bb.0:7098; XOPAVX1-NEXT:    vpsrad $25, %xmm0, %xmm27099; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07100; XOPAVX1-NEXT:    vpsrad $25, %xmm0, %xmm07101; XOPAVX1-NEXT:    vpsrad $25, %xmm1, %xmm37102; XOPAVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm27103; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm17104; XOPAVX1-NEXT:    vpsrad $25, %xmm1, %xmm17105; XOPAVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm07106; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm07107; XOPAVX1-NEXT:    retq7108;7109; XOPAVX2-LABEL: shuffle_v16i16_ashr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7110; XOPAVX2:       # %bb.0:7111; XOPAVX2-NEXT:    vpsrad $25, %ymm0, %ymm07112; XOPAVX2-NEXT:    vpsrad $25, %ymm1, %ymm17113; XOPAVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm07114; XOPAVX2-NEXT:    retq7115  %1 = ashr <8 x i32> %a0, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>7116  %2 = ashr <8 x i32> %a1, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>7117  %3 = bitcast <8 x i32> %1 to <16 x i16>7118  %4 = bitcast <8 x i32> %2 to <16 x i16>7119  %5 = shufflevector <16 x i16> %3, <16 x i16> %4, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 16, i32 18, i32 20, i32 22, i32 8, i32 10, i32 12, i32 14, i32 24, i32 26, i32 28, i32 30>7120  ret <16 x i16> %57121}7122 7123define <16 x i16> @shuffle_v16i16_lshr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30(<8 x i32> %a0, <8 x i32> %a1) {7124; AVX1-LABEL: shuffle_v16i16_lshr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7125; AVX1:       # %bb.0:7126; AVX1-NEXT:    vpsrld $25, %xmm0, %xmm27127; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07128; AVX1-NEXT:    vpsrld $25, %xmm0, %xmm07129; AVX1-NEXT:    vpsrld $25, %xmm1, %xmm37130; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm27131; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm17132; AVX1-NEXT:    vpsrld $25, %xmm1, %xmm17133; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm07134; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm07135; AVX1-NEXT:    retq7136;7137; AVX2OR512VL-LABEL: shuffle_v16i16_lshr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7138; AVX2OR512VL:       # %bb.0:7139; AVX2OR512VL-NEXT:    vpsrld $25, %ymm0, %ymm07140; AVX2OR512VL-NEXT:    vpsrld $25, %ymm1, %ymm17141; AVX2OR512VL-NEXT:    vpackusdw %ymm1, %ymm0, %ymm07142; AVX2OR512VL-NEXT:    retq7143;7144; XOPAVX1-LABEL: shuffle_v16i16_lshr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7145; XOPAVX1:       # %bb.0:7146; XOPAVX1-NEXT:    vpsrld $25, %xmm0, %xmm27147; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07148; XOPAVX1-NEXT:    vpsrld $25, %xmm0, %xmm07149; XOPAVX1-NEXT:    vpsrld $25, %xmm1, %xmm37150; XOPAVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm27151; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm17152; XOPAVX1-NEXT:    vpsrld $25, %xmm1, %xmm17153; XOPAVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm07154; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm07155; XOPAVX1-NEXT:    retq7156;7157; XOPAVX2-LABEL: shuffle_v16i16_lshr_00_02_04_06_16_18_20_22_08_10_12_14_24_26_28_30:7158; XOPAVX2:       # %bb.0:7159; XOPAVX2-NEXT:    vpsrld $25, %ymm0, %ymm07160; XOPAVX2-NEXT:    vpsrld $25, %ymm1, %ymm17161; XOPAVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm07162; XOPAVX2-NEXT:    retq7163  %1 = lshr <8 x i32> %a0, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>7164  %2 = lshr <8 x i32> %a1, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>7165  %3 = bitcast <8 x i32> %1 to <16 x i16>7166  %4 = bitcast <8 x i32> %2 to <16 x i16>7167  %5 = shufflevector <16 x i16> %3, <16 x i16> %4, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 16, i32 18, i32 20, i32 22, i32 8, i32 10, i32 12, i32 14, i32 24, i32 26, i32 28, i32 30>7168  ret <16 x i16> %57169}7170 7171define <16 x i16> @shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13(<16 x i16> %a) {7172; AVX1-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7173; AVX1:       # %bb.0:7174; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,6,7,5]7175; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07176; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]7177; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm07178; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]7179; AVX1-NEXT:    retq7180;7181; AVX2-SLOW-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7182; AVX2-SLOW:       # %bb.0:7183; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,6,7,5,8,9,10,11,12,14,15,13]7184; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]7185; AVX2-SLOW-NEXT:    retq7186;7187; AVX2-FAST-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7188; AVX2-FAST:       # %bb.0:7189; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,12,13,14,15,10,11,8,9,12,13,14,15,10,11,24,25,28,29,30,31,26,27,24,25,28,29,30,31,26,27]7190; AVX2-FAST-NEXT:    retq7191;7192; AVX512VL-SLOW-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7193; AVX512VL-SLOW:       # %bb.0:7194; AVX512VL-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,6,7,5,8,9,10,11,12,14,15,13]7195; AVX512VL-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]7196; AVX512VL-SLOW-NEXT:    retq7197;7198; AVX512VL-FAST-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7199; AVX512VL-FAST:       # %bb.0:7200; AVX512VL-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[8,9,12,13,14,15,10,11,8,9,12,13,14,15,10,11,24,25,28,29,30,31,26,27,24,25,28,29,30,31,26,27]7201; AVX512VL-FAST-NEXT:    retq7202;7203; XOPAVX1-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7204; XOPAVX1:       # %bb.0:7205; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,6,7,5]7206; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07207; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,7,5]7208; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm07209; XOPAVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]7210; XOPAVX1-NEXT:    retq7211;7212; XOPAVX2-LABEL: shuffle_v16i16_04_06_07_uu_uu_06_07_05_12_14_15_uu_uu_14_15_13:7213; XOPAVX2:       # %bb.0:7214; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,6,7,5,8,9,10,11,12,14,15,13]7215; XOPAVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[2,3,2,3,6,7,6,7]7216; XOPAVX2-NEXT:    retq7217  %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 4, i32 6, i32 7, i32 poison, i32 poison, i32 6, i32 7, i32 5, i32 12, i32 14, i32 15, i32 poison, i32 poison, i32 14, i32 15, i32 13>7218  ret <16 x i16> %shuffle7219}7220 7221define <16 x i16> @shuffle_v16i16_03_02_01_00_04_05_06_07_11_10_09_08_12_13_14_15_v8i16(<8 x i16> %a, <8 x i16> %b) {7222; AVX1-LABEL: shuffle_v16i16_03_02_01_00_04_05_06_07_11_10_09_08_12_13_14_15_v8i16:7223; AVX1:       # %bb.0:7224; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]7225; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]7226; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm07227; AVX1-NEXT:    retq7228;7229; AVX2OR512VL-LABEL: shuffle_v16i16_03_02_01_00_04_05_06_07_11_10_09_08_12_13_14_15_v8i16:7230; AVX2OR512VL:       # %bb.0:7231; AVX2OR512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm07232; AVX2OR512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm07233; AVX2OR512VL-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]7234; AVX2OR512VL-NEXT:    retq7235;7236; XOPAVX1-LABEL: shuffle_v16i16_03_02_01_00_04_05_06_07_11_10_09_08_12_13_14_15_v8i16:7237; XOPAVX1:       # %bb.0:7238; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]7239; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]7240; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm07241; XOPAVX1-NEXT:    retq7242;7243; XOPAVX2-LABEL: shuffle_v16i16_03_02_01_00_04_05_06_07_11_10_09_08_12_13_14_15_v8i16:7244; XOPAVX2:       # %bb.0:7245; XOPAVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm07246; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm07247; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,2,1,0,4,5,6,7,11,10,9,8,12,13,14,15]7248; XOPAVX2-NEXT:    retq7249  %1 = shufflevector <8 x i16> %a, <8 x i16> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>7250  %2 = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>7251  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>7252  ret <16 x i16> %37253}7254 7255define <16 x i16> @shuffle_v16i16_00_01_02_04_07_06_05_04_08_09_10_11_15_14_13_12_v8i16(<8 x i16> %a, <8 x i16> %b) {7256; AVX1-LABEL: shuffle_v16i16_00_01_02_04_07_06_05_04_08_09_10_11_15_14_13_12_v8i16:7257; AVX1:       # %bb.0:7258; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]7259; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]7260; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm07261; AVX1-NEXT:    retq7262;7263; AVX2OR512VL-LABEL: shuffle_v16i16_00_01_02_04_07_06_05_04_08_09_10_11_15_14_13_12_v8i16:7264; AVX2OR512VL:       # %bb.0:7265; AVX2OR512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm07266; AVX2OR512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm07267; AVX2OR512VL-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12]7268; AVX2OR512VL-NEXT:    retq7269;7270; XOPAVX1-LABEL: shuffle_v16i16_00_01_02_04_07_06_05_04_08_09_10_11_15_14_13_12_v8i16:7271; XOPAVX1:       # %bb.0:7272; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]7273; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]7274; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm07275; XOPAVX1-NEXT:    retq7276;7277; XOPAVX2-LABEL: shuffle_v16i16_00_01_02_04_07_06_05_04_08_09_10_11_15_14_13_12_v8i16:7278; XOPAVX2:       # %bb.0:7279; XOPAVX2-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm07280; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm07281; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12]7282; XOPAVX2-NEXT:    retq7283  %1 = shufflevector <8 x i16> %a, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 5, i32 4>7284  %2 = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 5, i32 4>7285  %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>7286  ret <16 x i16> %37287}7288 7289define <16 x i16> @shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14(<16 x i16> %a) {7290; AVX1-LABEL: shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:7291; AVX1:       # %bb.0:7292; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[1,0,3,2,4,5,6,7]7293; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,4,7,6]7294; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07295; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]7296; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]7297; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm07298; AVX1-NEXT:    retq7299;7300; AVX2-SLOW-LABEL: shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:7301; AVX2-SLOW:       # %bb.0:7302; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7,9,8,11,10,12,13,14,15]7303; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,7,6,8,9,10,11,13,12,15,14]7304; AVX2-SLOW-NEXT:    retq7305;7306; AVX2-FAST-LABEL: shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:7307; AVX2-FAST:       # %bb.0:7308; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13,18,19,16,17,22,23,20,21,26,27,24,25,30,31,28,29]7309; AVX2-FAST-NEXT:    retq7310;7311; AVX512VL-LABEL: shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:7312; AVX512VL:       # %bb.0:7313; AVX512VL-NEXT:    vprold $16, %ymm0, %ymm07314; AVX512VL-NEXT:    retq7315;7316; XOPAVX1-LABEL: shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:7317; XOPAVX1:       # %bb.0:7318; XOPAVX1-NEXT:    vprotd $16, %xmm0, %xmm17319; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07320; XOPAVX1-NEXT:    vprotd $16, %xmm0, %xmm07321; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm07322; XOPAVX1-NEXT:    retq7323;7324; XOPAVX2-LABEL: shuffle_v16i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:7325; XOPAVX2:       # %bb.0:7326; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[1,0,3,2,4,5,6,7,9,8,11,10,12,13,14,15]7327; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,4,7,6,8,9,10,11,13,12,15,14]7328; XOPAVX2-NEXT:    retq7329  %shuffle = shufflevector <16 x i16> %a, <16 x i16> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>7330  ret <16 x i16> %shuffle7331}7332 7333define <16 x i16> @shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14(<16 x i16> %a) {7334; AVX1-LABEL: shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:7335; AVX1:       # %bb.0:7336; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm0[3,0,1,2,4,5,6,7]7337; AVX1-NEXT:    vpshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,4,5,6]7338; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07339; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,0,1,2,4,5,6,7]7340; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,4,5,6]7341; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm07342; AVX1-NEXT:    retq7343;7344; AVX2-SLOW-LABEL: shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:7345; AVX2-SLOW:       # %bb.0:7346; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,0,1,2,4,5,6,7,11,8,9,10,12,13,14,15]7347; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,4,5,6,8,9,10,11,15,12,13,14]7348; AVX2-SLOW-NEXT:    retq7349;7350; AVX2-FAST-LABEL: shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:7351; AVX2-FAST:       # %bb.0:7352; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,0,1,2,3,4,5,14,15,8,9,10,11,12,13,22,23,16,17,18,19,20,21,30,31,24,25,26,27,28,29]7353; AVX2-FAST-NEXT:    retq7354;7355; AVX512VL-LABEL: shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:7356; AVX512VL:       # %bb.0:7357; AVX512VL-NEXT:    vprolq $16, %ymm0, %ymm07358; AVX512VL-NEXT:    retq7359;7360; XOPAVX1-LABEL: shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:7361; XOPAVX1:       # %bb.0:7362; XOPAVX1-NEXT:    vprotq $16, %xmm0, %xmm17363; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07364; XOPAVX1-NEXT:    vprotq $16, %xmm0, %xmm07365; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm07366; XOPAVX1-NEXT:    retq7367;7368; XOPAVX2-LABEL: shuffle_v16i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:7369; XOPAVX2:       # %bb.0:7370; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,0,1,2,4,5,6,7,11,8,9,10,12,13,14,15]7371; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,4,5,6,8,9,10,11,15,12,13,14]7372; XOPAVX2-NEXT:    retq7373  %shuffle = shufflevector <16 x i16> %a, <16 x i16> poison, <16 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 11, i32 8, i32 9, i32 10, i32 15, i32 12, i32 13, i32 14>7374  ret <16 x i16> %shuffle7375}7376 7377define <16 x i16> @shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08(<16 x i16> noundef %x) {7378; AVX1-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7379; AVX1:       # %bb.0:7380; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07381; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7382; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7383; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07384; AVX1-NEXT:    retq7385;7386; AVX2-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7387; AVX2:       # %bb.0:7388; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm07389; AVX2-NEXT:    vpbroadcastw %xmm0, %ymm07390; AVX2-NEXT:    retq7391;7392; AVX512VL-SLOW-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7393; AVX512VL-SLOW:       # %bb.0:7394; AVX512VL-SLOW-NEXT:    vextracti128 $1, %ymm0, %xmm07395; AVX512VL-SLOW-NEXT:    vpbroadcastw %xmm0, %ymm07396; AVX512VL-SLOW-NEXT:    retq7397;7398; AVX512VL-FAST-CROSSLANE-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7399; AVX512VL-FAST-CROSSLANE:       # %bb.0:7400; AVX512VL-FAST-CROSSLANE-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]7401; AVX512VL-FAST-CROSSLANE-NEXT:    vpermw %ymm0, %ymm1, %ymm07402; AVX512VL-FAST-CROSSLANE-NEXT:    retq7403;7404; AVX512VL-FAST-PERLANE-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7405; AVX512VL-FAST-PERLANE:       # %bb.0:7406; AVX512VL-FAST-PERLANE-NEXT:    vextracti128 $1, %ymm0, %xmm07407; AVX512VL-FAST-PERLANE-NEXT:    vpbroadcastw %xmm0, %ymm07408; AVX512VL-FAST-PERLANE-NEXT:    retq7409;7410; XOPAVX1-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7411; XOPAVX1:       # %bb.0:7412; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07413; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7414; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7415; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07416; XOPAVX1-NEXT:    retq7417;7418; XOPAVX2-LABEL: shuffle_v16i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:7419; XOPAVX2:       # %bb.0:7420; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm07421; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %ymm07422; XOPAVX2-NEXT:    retq7423  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> splat(i32 8)7424  ret <16 x i16> %r7425}7426 7427define <16 x i16> @shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11(<16 x i16> noundef %x) {7428; AVX1-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7429; AVX1:       # %bb.0:7430; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07431; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]7432; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7433; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07434; AVX1-NEXT:    retq7435;7436; AVX2-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7437; AVX2:       # %bb.0:7438; AVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]7439; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,2]7440; AVX2-NEXT:    retq7441;7442; AVX512VL-SLOW-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7443; AVX512VL-SLOW:       # %bb.0:7444; AVX512VL-SLOW-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]7445; AVX512VL-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,2]7446; AVX512VL-SLOW-NEXT:    retq7447;7448; AVX512VL-FAST-CROSSLANE-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7449; AVX512VL-FAST-CROSSLANE:       # %bb.0:7450; AVX512VL-FAST-CROSSLANE-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11]7451; AVX512VL-FAST-CROSSLANE-NEXT:    vpermw %ymm0, %ymm1, %ymm07452; AVX512VL-FAST-CROSSLANE-NEXT:    retq7453;7454; AVX512VL-FAST-PERLANE-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7455; AVX512VL-FAST-PERLANE:       # %bb.0:7456; AVX512VL-FAST-PERLANE-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]7457; AVX512VL-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,2]7458; AVX512VL-FAST-PERLANE-NEXT:    retq7459;7460; XOPAVX1-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7461; XOPAVX1:       # %bb.0:7462; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07463; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]7464; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7465; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07466; XOPAVX1-NEXT:    retq7467;7468; XOPAVX2-LABEL: shuffle_v16i16_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11_11:7469; XOPAVX2:       # %bb.0:7470; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm0 = ymm0[3,3,3,3,4,5,6,7,11,11,11,11,12,13,14,15]7471; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,2,2,2]7472; XOPAVX2-NEXT:    retq7473  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> splat(i32 11)7474  ret <16 x i16> %r7475}7476 7477; PR1292767478define <16 x i16> @shuffle_v16i16_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15(<16 x i16> noundef %x) {7479; AVX1-LABEL: shuffle_v16i16_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15:7480; AVX1:       # %bb.0:7481; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07482; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]7483; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]7484; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07485; AVX1-NEXT:    retq7486;7487; AVX2-LABEL: shuffle_v16i16_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15:7488; AVX2:       # %bb.0:7489; AVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]7490; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3]7491; AVX2-NEXT:    retq7492;7493; AVX512VL-LABEL: shuffle_v16i16_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15:7494; AVX512VL:       # %bb.0:7495; AVX512VL-NEXT:    vpbroadcastw {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]7496; AVX512VL-NEXT:    vpermw %ymm0, %ymm1, %ymm07497; AVX512VL-NEXT:    retq7498;7499; XOPAVX1-LABEL: shuffle_v16i16_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15:7500; XOPAVX1:       # %bb.0:7501; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm07502; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]7503; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]7504; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07505; XOPAVX1-NEXT:    retq7506;7507; XOPAVX2-LABEL: shuffle_v16i16_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15:7508; XOPAVX2:       # %bb.0:7509; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,7,7,7,7,8,9,10,11,15,15,15,15]7510; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3]7511; XOPAVX2-NEXT:    retq7512  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> splat(i32 15)7513  ret <16 x i16> %r7514}7515 7516define <16 x i16> @insert_v16i16_0elt_into_zero_vector(ptr %ptr) {7517; ALL-LABEL: insert_v16i16_0elt_into_zero_vector:7518; ALL:       # %bb.0:7519; ALL-NEXT:    movzwl (%rdi), %eax7520; ALL-NEXT:    vmovd %eax, %xmm07521; ALL-NEXT:    retq7522  %val = load i16, ptr %ptr7523  %i0 = insertelement <16 x i16> zeroinitializer, i16 %val, i32 07524  ret <16 x i16> %i07525}7526 7527define <16 x i16> @concat_v16i16_0_1_2_3_4_5_6_7_24_25_26_27_28_29_30_31(<16 x i16> %a, <16 x i16> %b) {7528; ALL-LABEL: concat_v16i16_0_1_2_3_4_5_6_7_24_25_26_27_28_29_30_31:7529; ALL:       # %bb.0:7530; ALL-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]7531; ALL-NEXT:    retq7532  %alo = shufflevector <16 x i16> %a, <16 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>7533  %bhi = shufflevector <16 x i16> %b, <16 x i16> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>7534  %shuf = shufflevector <8 x i16> %alo, <8 x i16> %bhi, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>7535  ret <16 x i16> %shuf7536}7537 7538define <16 x i16> @concat_v16i16_8_9_10_11_12_13_14_15_24_25_26_27_28_29_30_31_bc(<16 x i16> %a, <16 x i16> %b) {7539; AVX1OR2-LABEL: concat_v16i16_8_9_10_11_12_13_14_15_24_25_26_27_28_29_30_31_bc:7540; AVX1OR2:       # %bb.0:7541; AVX1OR2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]7542; AVX1OR2-NEXT:    retq7543;7544; AVX512VL-LABEL: concat_v16i16_8_9_10_11_12_13_14_15_24_25_26_27_28_29_30_31_bc:7545; AVX512VL:       # %bb.0:7546; AVX512VL-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]7547; AVX512VL-NEXT:    retq7548;7549; XOP-LABEL: concat_v16i16_8_9_10_11_12_13_14_15_24_25_26_27_28_29_30_31_bc:7550; XOP:       # %bb.0:7551; XOP-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]7552; XOP-NEXT:    retq7553  %ahi = shufflevector <16 x i16> %a, <16 x i16> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>7554  %bhi = shufflevector <16 x i16> %b, <16 x i16> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>7555  %bc0hi = bitcast <8 x i16> %ahi to <16 x i8>7556  %bc1hi = bitcast <8 x i16> %bhi to <16 x i8>7557  %shuffle8 = shufflevector <16 x i8> %bc0hi, <16 x i8> %bc1hi, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>7558  %shuffle16 = bitcast <32 x i8> %shuffle8 to <16 x i16>7559  ret <16 x i16> %shuffle167560}7561 7562define <16 x i16> @PR24935(<16 x i16> %a, <16 x i16> %b) {7563; AVX1-LABEL: PR24935:7564; AVX1:       # %bb.0:7565; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm1[0,0,1,1]7566; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm37567; AVX1-NEXT:    vpalignr {{.*#+}} xmm4 = xmm3[2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1]7568; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0,1],xmm2[2],xmm4[3,4,5,6,7]7569; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm47570; AVX1-NEXT:    vpshufhw {{.*#+}} xmm5 = xmm4[0,1,2,3,5,5,5,5]7571; AVX1-NEXT:    vpshufb {{.*#+}} xmm6 = xmm0[2,3,u,u,u,u,u,u,u,u,8,9,0,1,u,u]7572; AVX1-NEXT:    vpblendw {{.*#+}} xmm5 = xmm6[0],xmm5[1],xmm6[2,3],xmm5[4],xmm6[5,6,7]7573; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm5[0,1],xmm2[2,3],xmm5[4,5,6],xmm2[7]7574; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]7575; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]7576; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3,4,5],xmm1[6,7]7577; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[6,7,4,5,u,u,10,11,4,5,14,15,u,u,0,1]7578; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1],xmm0[2],xmm1[3,4,5],xmm0[6],xmm1[7]7579; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm07580; AVX1-NEXT:    retq7581;7582; AVX2-SLOW-LABEL: PR24935:7583; AVX2-SLOW:       # %bb.0:7584; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,ymm1[8,9],zero,zero,zero,zero,ymm1[14,15,12,13,0,1,24,25,24,25],zero,zero,ymm1[24,25,16,17,30,31,28,29,16,17]7585; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,0,1]7586; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[6,7,4,5],zero,zero,ymm1[10,11,4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[16,17],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero7587; AVX2-SLOW-NEXT:    vpor %ymm2, %ymm1, %ymm17588; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} ymm2 = ymm0[1,1,1,1,4,5,6,7,9,9,9,9,12,13,14,15]7589; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} ymm2 = ymm2[0,1,2,3,5,5,5,5,8,9,10,11,13,13,13,13]7590; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,0,1]7591; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,u,u,u,u,u,u,u,u,u,u,6,7,u,u,18,19,u,u,u,u,u,u,u,u,24,25,16,17,u,u]7592; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2],ymm0[3],ymm2[4],ymm0[5,6,7,8],ymm2[9,10],ymm0[11],ymm2[12],ymm0[13,14,15]7593; AVX2-SLOW-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [65535,65535,0,65535,65535,65535,0,65535,0,0,65535,65535,0,0,0,65535]7594; AVX2-SLOW-NEXT:    vpblendvb %ymm2, %ymm1, %ymm0, %ymm07595; AVX2-SLOW-NEXT:    retq7596;7597; AVX2-FAST-ALL-LABEL: PR24935:7598; AVX2-FAST-ALL:       # %bb.0:7599; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [0,5,0,0,0,4,6,2]7600; AVX2-FAST-ALL-NEXT:    vpermd %ymm0, %ymm2, %ymm07601; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,zero,zero,ymm0[2,3],zero,zero,zero,zero,zero,zero,ymm0[6,7],zero,zero,ymm0[18,19,22,23],zero,zero,zero,zero,ymm0[26,27,28,29,16,17],zero,zero7602; AVX2-FAST-ALL-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [5,6,3,0,0,6,4,0]7603; AVX2-FAST-ALL-NEXT:    vpermd %ymm1, %ymm2, %ymm17604; AVX2-FAST-ALL-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[2,3,0,1],zero,zero,ymm1[6,7,0,1,10,11],zero,zero,ymm1[12,13],zero,zero,zero,zero,ymm1[16,17,20,21],zero,zero,zero,zero,zero,zero,ymm1[24,25]7605; AVX2-FAST-ALL-NEXT:    vpor %ymm0, %ymm1, %ymm07606; AVX2-FAST-ALL-NEXT:    retq7607;7608; AVX2-FAST-PERLANE-LABEL: PR24935:7609; AVX2-FAST-PERLANE:       # %bb.0:7610; AVX2-FAST-PERLANE-NEXT:    vmovdqa {{.*#+}} ymm2 = [u,u,2,3,2,3,u,u,10,11,u,u,6,7,u,u,2,3,18,19,18,19,u,u,26,27,8,9,0,1,u,u]7611; AVX2-FAST-PERLANE-NEXT:    vpshufb %ymm2, %ymm0, %ymm37612; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,0,1]7613; AVX2-FAST-PERLANE-NEXT:    vpshufb %ymm2, %ymm0, %ymm07614; AVX2-FAST-PERLANE-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm3[1,2],ymm0[3],ymm3[4],ymm0[5,6,7,8],ymm3[9,10],ymm0[11],ymm3[12],ymm0[13,14,15]7615; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,ymm1[8,9],zero,zero,zero,zero,ymm1[14,15,12,13,0,1,24,25,24,25],zero,zero,ymm1[24,25,16,17,30,31,28,29,16,17]7616; AVX2-FAST-PERLANE-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,0,1]7617; AVX2-FAST-PERLANE-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[6,7,4,5],zero,zero,ymm1[10,11,4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[16,17],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero7618; AVX2-FAST-PERLANE-NEXT:    vpor %ymm2, %ymm1, %ymm17619; AVX2-FAST-PERLANE-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [65535,65535,0,65535,65535,65535,0,65535,0,0,65535,65535,0,0,0,65535]7620; AVX2-FAST-PERLANE-NEXT:    vpblendvb %ymm2, %ymm1, %ymm0, %ymm07621; AVX2-FAST-PERLANE-NEXT:    retq7622;7623; AVX512VL-LABEL: PR24935:7624; AVX512VL:       # %bb.0:7625; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [11,10,17,13,10,7,27,0,17,25,0,12,29,20,16,8]7626; AVX512VL-NEXT:    vpermi2w %ymm0, %ymm1, %ymm27627; AVX512VL-NEXT:    vmovdqa %ymm2, %ymm07628; AVX512VL-NEXT:    retq7629;7630; XOPAVX1-LABEL: PR24935:7631; XOPAVX1:       # %bb.0:7632; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm27633; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm3 = xmm2[u,u,u,u],xmm1[0,1],xmm2[8,9,u,u,u,u,u,u,0,1]7634; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm47635; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm5 = xmm0[2,3],xmm4[2,3],xmm0[u,u,u,u],xmm4[10,11],xmm0[8,9,0,1,u,u]7636; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1],xmm3[2,3],xmm5[4,5,6],xmm3[7]7637; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm1 = xmm2[6,7,4,5,u,u,10,11,4,5],xmm1[14,15],xmm2[u,u],xmm1[0,1]7638; XOPAVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]7639; XOPAVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,7,7,7]7640; XOPAVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1],xmm0[2],xmm1[3,4,5],xmm0[6],xmm1[7]7641; XOPAVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm07642; XOPAVX1-NEXT:    retq7643;7644; XOPAVX2-LABEL: PR24935:7645; XOPAVX2:       # %bb.0:7646; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm2 = zero,zero,zero,zero,ymm1[8,9],zero,zero,zero,zero,ymm1[14,15,12,13,0,1,24,25,24,25],zero,zero,ymm1[24,25,16,17,30,31,28,29,16,17]7647; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,3,0,1]7648; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm1 = ymm1[6,7,4,5],zero,zero,ymm1[10,11,4,5],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[16,17],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero7649; XOPAVX2-NEXT:    vpor %ymm2, %ymm1, %ymm17650; XOPAVX2-NEXT:    vpshuflw {{.*#+}} ymm2 = ymm0[1,1,1,1,4,5,6,7,9,9,9,9,12,13,14,15]7651; XOPAVX2-NEXT:    vpshufhw {{.*#+}} ymm2 = ymm2[0,1,2,3,5,5,5,5,8,9,10,11,13,13,13,13]7652; XOPAVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,0,1]7653; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[u,u,u,u,u,u,u,u,u,u,u,u,6,7,u,u,18,19,u,u,u,u,u,u,u,u,24,25,16,17,u,u]7654; XOPAVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2],ymm0[3],ymm2[4],ymm0[5,6,7,8],ymm2[9,10],ymm0[11],ymm2[12],ymm0[13,14,15]7655; XOPAVX2-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [65535,65535,0,65535,65535,65535,0,65535,0,0,65535,65535,0,0,0,65535]7656; XOPAVX2-NEXT:    vpblendvb %ymm2, %ymm1, %ymm0, %ymm07657; XOPAVX2-NEXT:    retq7658  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 27, i32 26, i32 1, i32 29, i32 26, i32 23, i32 11, i32 16, i32 1, i32 9, i32 16, i32 28, i32 13, i32 4, i32 0, i32 24>7659  ret <16 x i16> %shuffle7660}7661 7662define <16 x i16> @PR34369(<16 x i16> %vec, <16 x i16> %mask) {7663; AVX1-LABEL: PR34369:7664; AVX1:       # %bb.0:7665; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm27666; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [6,7,0,1,0,1,10,11,10,11,4,5,4,5,4,5]7667; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm47668; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm07669; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm4[3],xmm0[4,5,6],xmm4[7]7670; AVX1-NEXT:    vpshufb {{.*#+}} xmm2 = xmm2[14,15,0,1,12,13,0,1,2,3,4,5,8,9,8,9]7671; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm07672; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm27673; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm37674; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm2, %xmm27675; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm1, %xmm17676; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm17677; AVX1-NEXT:    vandps %ymm0, %ymm1, %ymm07678; AVX1-NEXT:    retq7679;7680; AVX2-SLOW-LABEL: PR34369:7681; AVX2-SLOW:       # %bb.0:7682; AVX2-SLOW-NEXT:    vpshufb {{.*#+}} ymm2 = ymm0[6,7,0,1,0,1,u,u,10,11,4,5,4,5,u,u,30,31,16,17,28,29,16,17,18,19,20,21,24,25,24,25]7683; AVX2-SLOW-NEXT:    vextracti128 $1, %ymm0, %xmm07684; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,1]7685; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,6,6,6]7686; AVX2-SLOW-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1,2],xmm0[3],xmm2[4,5,6],xmm0[7]7687; AVX2-SLOW-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]7688; AVX2-SLOW-NEXT:    vpxor %xmm2, %xmm2, %xmm27689; AVX2-SLOW-NEXT:    vpcmpeqw %ymm2, %ymm1, %ymm17690; AVX2-SLOW-NEXT:    vpand %ymm0, %ymm1, %ymm07691; AVX2-SLOW-NEXT:    retq7692;7693; AVX2-FAST-LABEL: PR34369:7694; AVX2-FAST:       # %bb.0:7695; AVX2-FAST-NEXT:    vextracti128 $1, %ymm0, %xmm27696; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm2 = xmm2[u,u,u,u,u,u,10,11,u,u,u,u,u,u,4,5]7697; AVX2-FAST-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,0,1,0,1,u,u,10,11,4,5,4,5,u,u,30,31,16,17,28,29,16,17,18,19,20,21,24,25,24,25]7698; AVX2-FAST-NEXT:    vpblendw {{.*#+}} xmm2 = xmm0[0,1,2],xmm2[3],xmm0[4,5,6],xmm2[7]7699; AVX2-FAST-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]7700; AVX2-FAST-NEXT:    vpxor %xmm2, %xmm2, %xmm27701; AVX2-FAST-NEXT:    vpcmpeqw %ymm2, %ymm1, %ymm17702; AVX2-FAST-NEXT:    vpand %ymm0, %ymm1, %ymm07703; AVX2-FAST-NEXT:    retq7704;7705; AVX512VL-LABEL: PR34369:7706; AVX512VL:       # %bb.0:7707; AVX512VL-NEXT:    vpmovsxbw {{.*#+}} ymm2 = [3,0,0,13,5,2,2,10,15,8,14,8,9,10,12,12]7708; AVX512VL-NEXT:    vptestnmw %ymm1, %ymm1, %k17709; AVX512VL-NEXT:    vpermw %ymm0, %ymm2, %ymm0 {%k1} {z}7710; AVX512VL-NEXT:    retq7711;7712; XOPAVX1-LABEL: PR34369:7713; XOPAVX1:       # %bb.0:7714; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm27715; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[6,7,0,1,0,1],xmm2[10,11],xmm0[10,11,4,5,4,5],xmm2[4,5]7716; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm2 = xmm2[14,15,0,1,12,13,0,1,2,3,4,5,8,9,8,9]7717; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm07718; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm27719; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm37720; XOPAVX1-NEXT:    vpcomeqw %xmm3, %xmm2, %xmm27721; XOPAVX1-NEXT:    vpcomeqw %xmm3, %xmm1, %xmm17722; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm17723; XOPAVX1-NEXT:    vandps %ymm0, %ymm1, %ymm07724; XOPAVX1-NEXT:    retq7725;7726; XOPAVX2-LABEL: PR34369:7727; XOPAVX2:       # %bb.0:7728; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm27729; XOPAVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[6,7,0,1,0,1,u,u,10,11,4,5,4,5,u,u,30,31,16,17,28,29,16,17,18,19,20,21,24,25,24,25]7730; XOPAVX2-NEXT:    vpperm {{.*#+}} xmm2 = xmm0[0,1,2,3,4,5],xmm2[10,11],xmm0[8,9,10,11,12,13],xmm2[4,5]7731; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]7732; XOPAVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm27733; XOPAVX2-NEXT:    vpcmpeqw %ymm2, %ymm1, %ymm17734; XOPAVX2-NEXT:    vpand %ymm0, %ymm1, %ymm07735; XOPAVX2-NEXT:    retq7736  %shuf = shufflevector <16 x i16> %vec, <16 x i16> poison, <16 x i32> <i32 3, i32 0, i32 0, i32 13, i32 5, i32 2, i32 2, i32 10, i32 15, i32 8, i32 14, i32 8, i32 9, i32 10, i32 12, i32 12>7737  %cmp = icmp eq <16 x i16> %mask, zeroinitializer7738  %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer7739  ret <16 x i16> %res7740}7741 7742define <16 x i16> @insert_dup_mem_v16i16_i32(ptr %ptr) {7743; AVX1-LABEL: insert_dup_mem_v16i16_i32:7744; AVX1:       # %bb.0:7745; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero7746; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7747; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7748; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07749; AVX1-NEXT:    retq7750;7751; AVX2OR512VL-LABEL: insert_dup_mem_v16i16_i32:7752; AVX2OR512VL:       # %bb.0:7753; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %ymm07754; AVX2OR512VL-NEXT:    retq7755;7756; XOPAVX1-LABEL: insert_dup_mem_v16i16_i32:7757; XOPAVX1:       # %bb.0:7758; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero7759; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7760; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7761; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07762; XOPAVX1-NEXT:    retq7763;7764; XOPAVX2-LABEL: insert_dup_mem_v16i16_i32:7765; XOPAVX2:       # %bb.0:7766; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %ymm07767; XOPAVX2-NEXT:    retq7768  %tmp = load i32, ptr %ptr, align 47769  %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 07770  %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>7771  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> zeroinitializer7772  ret <16 x i16> %tmp37773}7774 7775define <16 x i16> @insert_dup_mem_v16i16_sext_i16(ptr %ptr) {7776; AVX1-LABEL: insert_dup_mem_v16i16_sext_i16:7777; AVX1:       # %bb.0:7778; AVX1-NEXT:    movzwl (%rdi), %eax7779; AVX1-NEXT:    vmovd %eax, %xmm07780; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7781; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7782; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07783; AVX1-NEXT:    retq7784;7785; AVX2OR512VL-LABEL: insert_dup_mem_v16i16_sext_i16:7786; AVX2OR512VL:       # %bb.0:7787; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %ymm07788; AVX2OR512VL-NEXT:    retq7789;7790; XOPAVX1-LABEL: insert_dup_mem_v16i16_sext_i16:7791; XOPAVX1:       # %bb.0:7792; XOPAVX1-NEXT:    movzwl (%rdi), %eax7793; XOPAVX1-NEXT:    vmovd %eax, %xmm07794; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7795; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7796; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07797; XOPAVX1-NEXT:    retq7798;7799; XOPAVX2-LABEL: insert_dup_mem_v16i16_sext_i16:7800; XOPAVX2:       # %bb.0:7801; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %ymm07802; XOPAVX2-NEXT:    retq7803  %tmp = load i16, ptr %ptr, align 27804  %tmp1 = sext i16 %tmp to i327805  %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 07806  %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>7807  %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <16 x i32> zeroinitializer7808  ret <16 x i16> %tmp47809}7810 7811define <16 x i16> @insert_dup_elt1_mem_v16i16_i32(ptr %ptr) #0 {7812; AVX1-LABEL: insert_dup_elt1_mem_v16i16_i32:7813; AVX1:       # %bb.0:7814; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero7815; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]7816; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7817; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07818; AVX1-NEXT:    retq7819;7820; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v16i16_i32:7821; AVX2OR512VL:       # %bb.0:7822; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %ymm07823; AVX2OR512VL-NEXT:    retq7824;7825; XOPAVX1-LABEL: insert_dup_elt1_mem_v16i16_i32:7826; XOPAVX1:       # %bb.0:7827; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero7828; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]7829; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7830; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07831; XOPAVX1-NEXT:    retq7832;7833; XOPAVX2-LABEL: insert_dup_elt1_mem_v16i16_i32:7834; XOPAVX2:       # %bb.0:7835; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %ymm07836; XOPAVX2-NEXT:    retq7837  %tmp = load i32, ptr %ptr, align 47838  %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 07839  %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>7840  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>7841  ret <16 x i16> %tmp37842}7843 7844define <16 x i16> @insert_dup_elt3_mem_v16i16_i32(ptr %ptr) #0 {7845; AVX1-LABEL: insert_dup_elt3_mem_v16i16_i32:7846; AVX1:       # %bb.0:7847; AVX1-NEXT:    vbroadcastss (%rdi), %xmm07848; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]7849; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7850; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07851; AVX1-NEXT:    retq7852;7853; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v16i16_i32:7854; AVX2OR512VL:       # %bb.0:7855; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %ymm07856; AVX2OR512VL-NEXT:    retq7857;7858; XOPAVX1-LABEL: insert_dup_elt3_mem_v16i16_i32:7859; XOPAVX1:       # %bb.0:7860; XOPAVX1-NEXT:    vbroadcastss (%rdi), %xmm07861; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]7862; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7863; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07864; XOPAVX1-NEXT:    retq7865;7866; XOPAVX2-LABEL: insert_dup_elt3_mem_v16i16_i32:7867; XOPAVX2:       # %bb.0:7868; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %ymm07869; XOPAVX2-NEXT:    retq7870  %tmp = load i32, ptr %ptr, align 47871  %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 17872  %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>7873  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>7874  ret <16 x i16> %tmp37875}7876 7877define <16 x i16> @insert_dup_mem_v16i16_i64(ptr %ptr) {7878; AVX1-LABEL: insert_dup_mem_v16i16_i64:7879; AVX1:       # %bb.0:7880; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7881; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7882; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7883; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07884; AVX1-NEXT:    retq7885;7886; AVX2OR512VL-LABEL: insert_dup_mem_v16i16_i64:7887; AVX2OR512VL:       # %bb.0:7888; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %ymm07889; AVX2OR512VL-NEXT:    retq7890;7891; XOPAVX1-LABEL: insert_dup_mem_v16i16_i64:7892; XOPAVX1:       # %bb.0:7893; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7894; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]7895; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7896; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07897; XOPAVX1-NEXT:    retq7898;7899; XOPAVX2-LABEL: insert_dup_mem_v16i16_i64:7900; XOPAVX2:       # %bb.0:7901; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %ymm07902; XOPAVX2-NEXT:    retq7903  %tmp = load i64, ptr %ptr, align 47904  %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 07905  %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>7906  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> zeroinitializer7907  ret <16 x i16> %tmp37908}7909 7910define <16 x i16> @insert_dup_elt1_mem_v16i16_i64(ptr %ptr) {7911; AVX1-LABEL: insert_dup_elt1_mem_v16i16_i64:7912; AVX1:       # %bb.0:7913; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7914; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]7915; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7916; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07917; AVX1-NEXT:    retq7918;7919; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v16i16_i64:7920; AVX2OR512VL:       # %bb.0:7921; AVX2OR512VL-NEXT:    vpbroadcastw 2(%rdi), %ymm07922; AVX2OR512VL-NEXT:    retq7923;7924; XOPAVX1-LABEL: insert_dup_elt1_mem_v16i16_i64:7925; XOPAVX1:       # %bb.0:7926; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7927; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]7928; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7929; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07930; XOPAVX1-NEXT:    retq7931;7932; XOPAVX2-LABEL: insert_dup_elt1_mem_v16i16_i64:7933; XOPAVX2:       # %bb.0:7934; XOPAVX2-NEXT:    vpbroadcastw 2(%rdi), %ymm07935; XOPAVX2-NEXT:    retq7936  %tmp = load i64, ptr %ptr, align 47937  %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 07938  %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>7939  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>7940  ret <16 x i16> %tmp37941}7942 7943define <16 x i16> @insert_dup_elt3_mem_v16i16_i64(ptr %ptr) {7944; AVX1-LABEL: insert_dup_elt3_mem_v16i16_i64:7945; AVX1:       # %bb.0:7946; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7947; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]7948; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7949; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07950; AVX1-NEXT:    retq7951;7952; AVX2OR512VL-LABEL: insert_dup_elt3_mem_v16i16_i64:7953; AVX2OR512VL:       # %bb.0:7954; AVX2OR512VL-NEXT:    vpbroadcastw 6(%rdi), %ymm07955; AVX2OR512VL-NEXT:    retq7956;7957; XOPAVX1-LABEL: insert_dup_elt3_mem_v16i16_i64:7958; XOPAVX1:       # %bb.0:7959; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7960; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[3,3,3,3,4,5,6,7]7961; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]7962; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07963; XOPAVX1-NEXT:    retq7964;7965; XOPAVX2-LABEL: insert_dup_elt3_mem_v16i16_i64:7966; XOPAVX2:       # %bb.0:7967; XOPAVX2-NEXT:    vpbroadcastw 6(%rdi), %ymm07968; XOPAVX2-NEXT:    retq7969  %tmp = load i64, ptr %ptr, align 47970  %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 07971  %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>7972  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>7973  ret <16 x i16> %tmp37974}7975 7976define <16 x i16> @insert_dup_elt7_mem_v16i16_i64(ptr %ptr) {7977; AVX1-LABEL: insert_dup_elt7_mem_v16i16_i64:7978; AVX1:       # %bb.0:7979; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7980; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]7981; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07982; AVX1-NEXT:    retq7983;7984; AVX2OR512VL-LABEL: insert_dup_elt7_mem_v16i16_i64:7985; AVX2OR512VL:       # %bb.0:7986; AVX2OR512VL-NEXT:    vpbroadcastw 6(%rdi), %ymm07987; AVX2OR512VL-NEXT:    retq7988;7989; XOPAVX1-LABEL: insert_dup_elt7_mem_v16i16_i64:7990; XOPAVX1:       # %bb.0:7991; XOPAVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero7992; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7]7993; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm07994; XOPAVX1-NEXT:    retq7995;7996; XOPAVX2-LABEL: insert_dup_elt7_mem_v16i16_i64:7997; XOPAVX2:       # %bb.0:7998; XOPAVX2-NEXT:    vpbroadcastw 6(%rdi), %ymm07999; XOPAVX2-NEXT:    retq8000  %tmp = load i64, ptr %ptr, align 48001  %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 18002  %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>8003  %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <16 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>8004  ret <16 x i16> %tmp38005}8006 8007define <16 x i16> @insert_dup_mem_v16i16_sext_i16_i64(ptr %ptr) {8008; AVX1-LABEL: insert_dup_mem_v16i16_sext_i16_i64:8009; AVX1:       # %bb.0:8010; AVX1-NEXT:    movzwl (%rdi), %eax8011; AVX1-NEXT:    vmovd %eax, %xmm08012; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]8013; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]8014; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm08015; AVX1-NEXT:    retq8016;8017; AVX2OR512VL-LABEL: insert_dup_mem_v16i16_sext_i16_i64:8018; AVX2OR512VL:       # %bb.0:8019; AVX2OR512VL-NEXT:    vpbroadcastw (%rdi), %ymm08020; AVX2OR512VL-NEXT:    retq8021;8022; XOPAVX1-LABEL: insert_dup_mem_v16i16_sext_i16_i64:8023; XOPAVX1:       # %bb.0:8024; XOPAVX1-NEXT:    movzwl (%rdi), %eax8025; XOPAVX1-NEXT:    vmovd %eax, %xmm08026; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]8027; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]8028; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm08029; XOPAVX1-NEXT:    retq8030;8031; XOPAVX2-LABEL: insert_dup_mem_v16i16_sext_i16_i64:8032; XOPAVX2:       # %bb.0:8033; XOPAVX2-NEXT:    vpbroadcastw (%rdi), %ymm08034; XOPAVX2-NEXT:    retq8035  %tmp = load i16, ptr %ptr, align 28036  %tmp1 = sext i16 %tmp to i648037  %tmp2 = insertelement <2 x i64> zeroinitializer, i64 %tmp1, i32 08038  %tmp3 = bitcast <2 x i64> %tmp2 to <8 x i16>8039  %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <16 x i32> zeroinitializer8040  ret <16 x i16> %tmp48041}8042 8043define <16 x i16> @unpckh_v16i16(<16 x i16> %x, <16 x i16> %y) {8044; AVX1-LABEL: unpckh_v16i16:8045; AVX1:       # %bb.0:8046; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm18047; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]8048; AVX1-NEXT:    retq8049;8050; AVX2OR512VL-LABEL: unpckh_v16i16:8051; AVX2OR512VL:       # %bb.0:8052; AVX2OR512VL-NEXT:    vextracti128 $1, %ymm1, %xmm18053; AVX2OR512VL-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]8054; AVX2OR512VL-NEXT:    retq8055;8056; XOPAVX1-LABEL: unpckh_v16i16:8057; XOPAVX1:       # %bb.0:8058; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm18059; XOPAVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]8060; XOPAVX1-NEXT:    retq8061;8062; XOPAVX2-LABEL: unpckh_v16i16:8063; XOPAVX2:       # %bb.0:8064; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm18065; XOPAVX2-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]8066; XOPAVX2-NEXT:    retq8067  %unpckh = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 4, i32 28, i32 5, i32 29, i32 6, i32 30, i32 7, i32 31, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>8068  ret <16 x i16> %unpckh8069}8070 8071define <16 x i16> @pr43230(<16 x i16> %a, <16 x i16> %b) {8072; AVX1-LABEL: pr43230:8073; AVX1:       # %bb.0:8074; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm18075; AVX1-NEXT:    vpsllw $12, %xmm1, %xmm28076; AVX1-NEXT:    vpsllw $4, %xmm1, %xmm18077; AVX1-NEXT:    vpor %xmm2, %xmm1, %xmm18078; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm28079; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm08080; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm38081; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm08082; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm38083; AVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm0, %xmm08084; AVX1-NEXT:    vpsrlw $2, %xmm0, %xmm28085; AVX1-NEXT:    vpsllw $2, %xmm1, %xmm38086; AVX1-NEXT:    vpblendvb %xmm3, %xmm2, %xmm0, %xmm08087; AVX1-NEXT:    vpsrlw $1, %xmm0, %xmm28088; AVX1-NEXT:    vpsllw $3, %xmm1, %xmm18089; AVX1-NEXT:    vpblendvb %xmm1, %xmm2, %xmm0, %xmm08090; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm08091; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08092; AVX1-NEXT:    retq8093;8094; AVX2-LABEL: pr43230:8095; AVX2:       # %bb.0:8096; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm28097; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm1 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15]8098; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm0 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15]8099; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm08100; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm0[26,27],zero,zero8101; AVX2-NEXT:    retq8102;8103; AVX512VL-LABEL: pr43230:8104; AVX512VL:       # %bb.0:8105; AVX512VL-NEXT:    vpsrlvw %ymm1, %ymm0, %ymm08106; AVX512VL-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08107; AVX512VL-NEXT:    retq8108;8109; XOPAVX1-LABEL: pr43230:8110; XOPAVX1:       # %bb.0:8111; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm18112; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm28113; XOPAVX1-NEXT:    vpsubw %xmm1, %xmm2, %xmm18114; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm08115; XOPAVX1-NEXT:    vpshlw %xmm1, %xmm0, %xmm08116; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm08117; XOPAVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08118; XOPAVX1-NEXT:    retq8119;8120; XOPAVX2-LABEL: pr43230:8121; XOPAVX2:       # %bb.0:8122; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm18123; XOPAVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm28124; XOPAVX2-NEXT:    vpsubw %xmm1, %xmm2, %xmm18125; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm08126; XOPAVX2-NEXT:    vpshlw %xmm1, %xmm0, %xmm08127; XOPAVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm08128; XOPAVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm08129; XOPAVX2-NEXT:    retq8130  %shr = lshr <16 x i16> %a, %b8131  %shuf = shufflevector <16 x i16> zeroinitializer, <16 x i16> %shr, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 30, i32 15>8132  ret <16 x i16> %shuf8133}8134