brintos

brintos / llvm-project-archived public Read only

0
0
Text · 137.3 KiB · 89cc7a6 Raw
2803 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=ALL,SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=ALL,SSE,SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=ALL,SSE,SSE415; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,AVX16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,AVX2OR512VL,AVX2,AVX2-SLOW7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,AVX2OR512VL,AVX2,AVX2-FAST8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,AVX2OR512VL,AVX2,AVX2-FAST9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX,AVX2OR512VL,AVX512VL,AVX512VLBW10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX,AVX2OR512VL,AVX512VL,AVX512VLBW11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+avx512vbmi,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX,AVX2OR512VL,AVX512VL,AVX512VLVBMI12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512bw,+avx512vbmi,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=ALL,AVX,AVX2OR512VL,AVX512VL,AVX512VLVBMI13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,XOP,XOPAVX114; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefixes=ALL,AVX,AVX1OR2,XOP,XOPAVX215 16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat | FileCheck %s --check-prefixes=ALL,SSE,SSE217 18define <16 x i8> @shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i8> %a, <16 x i8> %b) {19; SSE2-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:20; SSE2:       # %bb.0:21; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]22; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]23; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]24; SSE2-NEXT:    retq25;26; SSSE3-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:27; SSSE3:       # %bb.0:28; SSSE3-NEXT:    pxor %xmm1, %xmm129; SSSE3-NEXT:    pshufb %xmm1, %xmm030; SSSE3-NEXT:    retq31;32; SSE41-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:33; SSE41:       # %bb.0:34; SSE41-NEXT:    pxor %xmm1, %xmm135; SSE41-NEXT:    pshufb %xmm1, %xmm036; SSE41-NEXT:    retq37;38; AVX1-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:39; AVX1:       # %bb.0:40; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm141; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm042; AVX1-NEXT:    retq43;44; AVX2OR512VL-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:45; AVX2OR512VL:       # %bb.0:46; AVX2OR512VL-NEXT:    vpbroadcastb %xmm0, %xmm047; AVX2OR512VL-NEXT:    retq48;49; XOPAVX1-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:50; XOPAVX1:       # %bb.0:51; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm152; XOPAVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm053; XOPAVX1-NEXT:    retq54;55; XOPAVX2-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:56; XOPAVX2:       # %bb.0:57; XOPAVX2-NEXT:    vpbroadcastb %xmm0, %xmm058; XOPAVX2-NEXT:    retq59  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %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>60  ret <16 x i8> %shuffle61}62 63define <16 x i8> @shuffle_v16i8_00_00_00_00_00_00_00_00_01_01_01_01_01_01_01_01(<16 x i8> %a, <16 x i8> %b) {64; SSE2-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_01_01_01_01_01_01_01_01:65; SSE2:       # %bb.0:66; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]67; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,1,1,4,5,6,7]68; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]69; SSE2-NEXT:    retq70;71; SSSE3-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_01_01_01_01_01_01_01_01:72; SSSE3:       # %bb.0:73; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]74; SSSE3-NEXT:    retq75;76; SSE41-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_01_01_01_01_01_01_01_01:77; SSE41:       # %bb.0:78; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]79; SSE41-NEXT:    retq80;81; AVX-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_01_01_01_01_01_01_01_01:82; AVX:       # %bb.0:83; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]84; AVX-NEXT:    retq85  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>86  ret <16 x i8> %shuffle87}88 89define <16 x i8> @shuffle_v16i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08(<16 x i8> %a, <16 x i8> %b) {90; SSE2-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:91; SSE2:       # %bb.0:92; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]93; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]94; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]95; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]96; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]97; SSE2-NEXT:    retq98;99; SSSE3-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:100; SSSE3:       # %bb.0:101; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]102; SSSE3-NEXT:    retq103;104; SSE41-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:105; SSE41:       # %bb.0:106; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]107; SSE41-NEXT:    retq108;109; AVX-LABEL: shuffle_v16i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08:110; AVX:       # %bb.0:111; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]112; AVX-NEXT:    retq113  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %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>114  ret <16 x i8> %shuffle115}116 117define <16 x i8> @shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03(<16 x i8> %a, <16 x i8> %b) {118; SSE-LABEL: shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03:119; SSE:       # %bb.0:120; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]121; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]122; SSE-NEXT:    retq123;124; AVX1-LABEL: shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03:125; AVX1:       # %bb.0:126; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]127; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]128; AVX1-NEXT:    retq129;130; AVX2-SLOW-LABEL: shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03:131; AVX2-SLOW:       # %bb.0:132; AVX2-SLOW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]133; AVX2-SLOW-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]134; AVX2-SLOW-NEXT:    retq135;136; AVX2-FAST-LABEL: shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03:137; AVX2-FAST:       # %bb.0:138; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3]139; AVX2-FAST-NEXT:    retq140;141; AVX512VL-LABEL: shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03:142; AVX512VL:       # %bb.0:143; AVX512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3]144; AVX512VL-NEXT:    retq145;146; XOP-LABEL: shuffle_v16i8_00_00_00_00_01_01_01_01_02_02_02_02_03_03_03_03:147; XOP:       # %bb.0:148; XOP-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]149; XOP-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]150; XOP-NEXT:    retq151  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>152  ret <16 x i8> %shuffle153}154 155define <16 x i8> @shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07(<16 x i8> %a, <16 x i8> %b) {156; SSE-LABEL: shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07:157; SSE:       # %bb.0:158; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]159; SSE-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]160; SSE-NEXT:    retq161;162; AVX1-LABEL: shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07:163; AVX1:       # %bb.0:164; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]165; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]166; AVX1-NEXT:    retq167;168; AVX2-SLOW-LABEL: shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07:169; AVX2-SLOW:       # %bb.0:170; AVX2-SLOW-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]171; AVX2-SLOW-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]172; AVX2-SLOW-NEXT:    retq173;174; AVX2-FAST-LABEL: shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07:175; AVX2-FAST:       # %bb.0:176; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7]177; AVX2-FAST-NEXT:    retq178;179; AVX512VL-LABEL: shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07:180; AVX512VL:       # %bb.0:181; AVX512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7]182; AVX512VL-NEXT:    retq183;184; XOP-LABEL: shuffle_v16i8_04_04_04_04_05_05_05_05_06_06_06_06_07_07_07_07:185; XOP:       # %bb.0:186; XOP-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]187; XOP-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]188; XOP-NEXT:    retq189  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 5, i32 5, i32 5, i32 5, i32 6, i32 6, i32 6, i32 6, i32 7, i32 7, i32 7, i32 7>190  ret <16 x i8> %shuffle191}192 193define <16 x i8> @shuffle_v16i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12(<16 x i8> %a, <16 x i8> %b) {194; SSE2-LABEL: shuffle_v16i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:195; SSE2:       # %bb.0:196; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]197; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]198; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]199; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]200; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,2,4,5,6,7]201; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,6,6]202; SSE2-NEXT:    retq203;204; SSSE3-LABEL: shuffle_v16i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:205; SSSE3:       # %bb.0:206; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]207; SSSE3-NEXT:    retq208;209; SSE41-LABEL: shuffle_v16i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:210; SSE41:       # %bb.0:211; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]212; SSE41-NEXT:    retq213;214; AVX-LABEL: shuffle_v16i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12:215; AVX:       # %bb.0:216; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]217; AVX-NEXT:    retq218  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %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>219  ret <16 x i8> %shuffle220}221 222define <16 x i8> @shuffle_v16i8_00_00_01_01_02_02_03_03_04_04_05_05_06_06_07_07(<16 x i8> %a, <16 x i8> %b) {223; SSE-LABEL: shuffle_v16i8_00_00_01_01_02_02_03_03_04_04_05_05_06_06_07_07:224; SSE:       # %bb.0:225; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]226; SSE-NEXT:    retq227;228; AVX-LABEL: shuffle_v16i8_00_00_01_01_02_02_03_03_04_04_05_05_06_06_07_07:229; AVX:       # %bb.0:230; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]231; AVX-NEXT:    retq232  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7>233  ret <16 x i8> %shuffle234}235 236define <16 x i8> @shuffle_v16i8_0101010101010101(<16 x i8> %a, <16 x i8> %b) {237; SSE-LABEL: shuffle_v16i8_0101010101010101:238; SSE:       # %bb.0:239; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]240; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]241; SSE-NEXT:    retq242;243; AVX1-LABEL: shuffle_v16i8_0101010101010101:244; AVX1:       # %bb.0:245; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]246; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]247; AVX1-NEXT:    retq248;249; AVX2OR512VL-LABEL: shuffle_v16i8_0101010101010101:250; AVX2OR512VL:       # %bb.0:251; AVX2OR512VL-NEXT:    vpbroadcastw %xmm0, %xmm0252; AVX2OR512VL-NEXT:    retq253;254; XOPAVX1-LABEL: shuffle_v16i8_0101010101010101:255; XOPAVX1:       # %bb.0:256; XOPAVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]257; XOPAVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]258; XOPAVX1-NEXT:    retq259;260; XOPAVX2-LABEL: shuffle_v16i8_0101010101010101:261; XOPAVX2:       # %bb.0:262; XOPAVX2-NEXT:    vpbroadcastw %xmm0, %xmm0263; XOPAVX2-NEXT:    retq264  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>265  ret <16 x i8> %shuffle266}267 268define <16 x i8> @shuffle_v16i8_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23(<16 x i8> %a, <16 x i8> %b) {269; SSE-LABEL: shuffle_v16i8_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:270; SSE:       # %bb.0:271; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]272; SSE-NEXT:    retq273;274; AVX-LABEL: shuffle_v16i8_00_16_01_17_02_18_03_19_04_20_05_21_06_22_07_23:275; AVX:       # %bb.0:276; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]277; AVX-NEXT:    retq278  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %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>279  ret <16 x i8> %shuffle280}281 282define <16 x i8> @shuffle_v16i8_08_24_09_25_10_26_11_27_12_28_13_29_14_30_15_31(<16 x i8> %a, <16 x i8> %b) {283; SSE-LABEL: shuffle_v16i8_08_24_09_25_10_26_11_27_12_28_13_29_14_30_15_31:284; SSE:       # %bb.0:285; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]286; SSE-NEXT:    retq287;288; AVX-LABEL: shuffle_v16i8_08_24_09_25_10_26_11_27_12_28_13_29_14_30_15_31:289; AVX:       # %bb.0:290; AVX-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]291; AVX-NEXT:    retq292  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>293  ret <16 x i8> %shuffle294}295 296define <16 x i8> @shuffle_v16i8_16_00_16_01_16_02_16_03_16_04_16_05_16_06_16_07(<16 x i8> %a, <16 x i8> %b) {297; SSE-LABEL: shuffle_v16i8_16_00_16_01_16_02_16_03_16_04_16_05_16_06_16_07:298; SSE:       # %bb.0:299; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]300; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]301; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]302; SSE-NEXT:    movdqa %xmm1, %xmm0303; SSE-NEXT:    retq304;305; AVX1-LABEL: shuffle_v16i8_16_00_16_01_16_02_16_03_16_04_16_05_16_06_16_07:306; AVX1:       # %bb.0:307; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]308; AVX1-NEXT:    vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]309; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]310; AVX1-NEXT:    retq311;312; AVX2OR512VL-LABEL: shuffle_v16i8_16_00_16_01_16_02_16_03_16_04_16_05_16_06_16_07:313; AVX2OR512VL:       # %bb.0:314; AVX2OR512VL-NEXT:    vpbroadcastb %xmm1, %xmm1315; AVX2OR512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]316; AVX2OR512VL-NEXT:    retq317;318; XOPAVX1-LABEL: shuffle_v16i8_16_00_16_01_16_02_16_03_16_04_16_05_16_06_16_07:319; XOPAVX1:       # %bb.0:320; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[0],xmm0[1],xmm1[0],xmm0[2],xmm1[0],xmm0[3],xmm1[0],xmm0[4],xmm1[0],xmm0[5],xmm1[0],xmm0[6],xmm1[0],xmm0[7]321; XOPAVX1-NEXT:    retq322;323; XOPAVX2-LABEL: shuffle_v16i8_16_00_16_01_16_02_16_03_16_04_16_05_16_06_16_07:324; XOPAVX2:       # %bb.0:325; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %xmm1326; XOPAVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]327; XOPAVX2-NEXT:    retq328  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 4, i32 16, i32 5, i32 16, i32 6, i32 16, i32 7>329  ret <16 x i8> %shuffle330}331 332define <16 x i8> @shuffle_v16i8_15_14_13_12_11_10_09_08_07_06_05_04_03_02_01_00(<16 x i8> %a, <16 x i8> %b) {333; SSE2-LABEL: shuffle_v16i8_15_14_13_12_11_10_09_08_07_06_05_04_03_02_01_00:334; SSE2:       # %bb.0:335; SSE2-NEXT:    pxor %xmm1, %xmm1336; SSE2-NEXT:    movdqa %xmm0, %xmm2337; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]338; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]339; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]340; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]341; SSE2-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]342; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]343; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]344; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]345; SSE2-NEXT:    packuswb %xmm2, %xmm0346; SSE2-NEXT:    retq347;348; SSSE3-LABEL: shuffle_v16i8_15_14_13_12_11_10_09_08_07_06_05_04_03_02_01_00:349; SSSE3:       # %bb.0:350; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]351; SSSE3-NEXT:    retq352;353; SSE41-LABEL: shuffle_v16i8_15_14_13_12_11_10_09_08_07_06_05_04_03_02_01_00:354; SSE41:       # %bb.0:355; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]356; SSE41-NEXT:    retq357;358; AVX-LABEL: shuffle_v16i8_15_14_13_12_11_10_09_08_07_06_05_04_03_02_01_00:359; AVX:       # %bb.0:360; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]361; AVX-NEXT:    retq362  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>363  ret <16 x i8> %shuffle364}365 366define <16 x i8> @shuffle_v16i8_07_06_05_04_03_02_01_00_15_14_13_12_11_10_09_08(<16 x i8> %a, <16 x i8> %b) {367; SSE2-LABEL: shuffle_v16i8_07_06_05_04_03_02_01_00_15_14_13_12_11_10_09_08:368; SSE2:       # %bb.0:369; SSE2-NEXT:    pxor %xmm1, %xmm1370; SSE2-NEXT:    movdqa %xmm0, %xmm2371; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]372; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]373; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]374; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]375; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]376; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]377; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]378; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]379; SSE2-NEXT:    packuswb %xmm2, %xmm0380; SSE2-NEXT:    retq381;382; SSSE3-LABEL: shuffle_v16i8_07_06_05_04_03_02_01_00_15_14_13_12_11_10_09_08:383; SSSE3:       # %bb.0:384; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]385; SSSE3-NEXT:    retq386;387; SSE41-LABEL: shuffle_v16i8_07_06_05_04_03_02_01_00_15_14_13_12_11_10_09_08:388; SSE41:       # %bb.0:389; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]390; SSE41-NEXT:    retq391;392; AVX-LABEL: shuffle_v16i8_07_06_05_04_03_02_01_00_15_14_13_12_11_10_09_08:393; AVX:       # %bb.0:394; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]395; AVX-NEXT:    retq396  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>397  ret <16 x i8> %shuffle398}399 400define <16 x i8> @shuffle_v16i8_03_02_01_00_07_06_05_04_11_10_09_08_15_14_13_12(<16 x i8> %a, <16 x i8> %b) {401; SSE2-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_11_10_09_08_15_14_13_12:402; SSE2:       # %bb.0:403; SSE2-NEXT:    pxor %xmm1, %xmm1404; SSE2-NEXT:    movdqa %xmm0, %xmm2405; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]406; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]407; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]408; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]409; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]410; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]411; SSE2-NEXT:    packuswb %xmm2, %xmm0412; SSE2-NEXT:    retq413;414; SSSE3-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_11_10_09_08_15_14_13_12:415; SSSE3:       # %bb.0:416; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]417; SSSE3-NEXT:    retq418;419; SSE41-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_11_10_09_08_15_14_13_12:420; SSE41:       # %bb.0:421; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]422; SSE41-NEXT:    retq423;424; AVX-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_11_10_09_08_15_14_13_12:425; AVX:       # %bb.0:426; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]427; AVX-NEXT:    retq428  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>429  ret <16 x i8> %shuffle430}431 432define <16 x i8> @shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14(<16 x i8> %a, <16 x i8> %b) {433; SSE2-LABEL: shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:434; SSE2:       # %bb.0:435; SSE2-NEXT:    movdqa %xmm0, %xmm1436; SSE2-NEXT:    psrlw $8, %xmm1437; SSE2-NEXT:    psllw $8, %xmm0438; SSE2-NEXT:    por %xmm1, %xmm0439; SSE2-NEXT:    retq440;441; SSSE3-LABEL: shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:442; SSSE3:       # %bb.0:443; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]444; SSSE3-NEXT:    retq445;446; SSE41-LABEL: shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:447; SSE41:       # %bb.0:448; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]449; SSE41-NEXT:    retq450;451; AVX1-LABEL: shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:452; AVX1:       # %bb.0:453; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]454; AVX1-NEXT:    retq455;456; AVX2OR512VL-LABEL: shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:457; AVX2OR512VL:       # %bb.0:458; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]459; AVX2OR512VL-NEXT:    retq460;461; XOP-LABEL: shuffle_v16i8_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14:462; XOP:       # %bb.0:463; XOP-NEXT:    vprotw $8, %xmm0, %xmm0464; XOP-NEXT:    retq465  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <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>466  ret <16 x i8> %shuffle467}468 469define <16 x i8> @shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20(<16 x i8> %a, <16 x i8> %b) {470; SSE2-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20:471; SSE2:       # %bb.0:472; SSE2-NEXT:    pxor %xmm2, %xmm2473; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]474; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]475; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]476; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]477; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]478; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]479; SSE2-NEXT:    packuswb %xmm1, %xmm0480; SSE2-NEXT:    retq481;482; SSSE3-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20:483; SSSE3:       # %bb.0:484; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]485; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,4,2,0,14,12,10,8,7,5,3,1,15,13,11,9]486; SSSE3-NEXT:    retq487;488; SSE41-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20:489; SSE41:       # %bb.0:490; SSE41-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]491; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[6,4,2,0,14,12,10,8,7,5,3,1,15,13,11,9]492; SSE41-NEXT:    retq493;494; AVX1-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20:495; AVX1:       # %bb.0:496; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]497; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,4,2,0,14,12,10,8,7,5,3,1,15,13,11,9]498; AVX1-NEXT:    retq499;500; AVX2OR512VL-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20:501; AVX2OR512VL:       # %bb.0:502; AVX2OR512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]503; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[6,4,2,0,14,12,10,8,7,5,3,1,15,13,11,9]504; AVX2OR512VL-NEXT:    retq505;506; XOP-LABEL: shuffle_v16i8_03_02_01_00_07_06_05_04_19_18_17_16_23_22_21_20:507; XOP:       # %bb.0:508; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4],xmm1[3,2,1,0,7,6,5,4]509; XOP-NEXT:    retq510  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 19, i32 18, i32 17, i32 16, i32 23, i32 22, i32 21, i32 20>511  ret <16 x i8> %shuffle512}513 514define <16 x i8> @shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20(<16 x i8> %a, <16 x i8> %b) {515; SSE2-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:516; SSE2:       # %bb.0:517; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]518; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]519; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]520; SSE2-NEXT:    pxor %xmm1, %xmm1521; SSE2-NEXT:    movdqa %xmm0, %xmm2522; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]523; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm2[3,2,1,0,4,5,6,7]524; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]525; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,7,6,5,4]526; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm3[0],xmm1[1]527; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[3,2,1,0,4,5,6,7]528; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm2[0,1,2,3,7,6,5,4]529; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]530; SSE2-NEXT:    packuswb %xmm1, %xmm0531; SSE2-NEXT:    retq532;533; SSSE3-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:534; SSSE3:       # %bb.0:535; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[15,14,13,12,7,6,5,4,u,u,u,u,u,u,u,u]536; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,11,10,9,8,u,u,u,u,u,u,u,u]537; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]538; SSSE3-NEXT:    retq539;540; SSE41-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:541; SSE41:       # %bb.0:542; SSE41-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[15,14,13,12,7,6,5,4,u,u,u,u,u,u,u,u]543; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,11,10,9,8,u,u,u,u,u,u,u,u]544; SSE41-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]545; SSE41-NEXT:    retq546;547; AVX1-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:548; AVX1:       # %bb.0:549; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[15,14,13,12,7,6,5,4,u,u,u,u,u,u,u,u]550; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,11,10,9,8,u,u,u,u,u,u,u,u]551; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]552; AVX1-NEXT:    retq553;554; AVX2-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:555; AVX2:       # %bb.0:556; AVX2-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[15,14,13,12,7,6,5,4,u,u,u,u,u,u,u,u]557; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,11,10,9,8,u,u,u,u,u,u,u,u]558; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]559; AVX2-NEXT:    retq560;561; AVX512VLBW-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:562; AVX512VLBW:       # %bb.0:563; AVX512VLBW-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[15,14,13,12,7,6,5,4,u,u,u,u,u,u,u,u]564; AVX512VLBW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,11,10,9,8,u,u,u,u,u,u,u,u]565; AVX512VLBW-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]566; AVX512VLBW-NEXT:    retq567;568; AVX512VLVBMI-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:569; AVX512VLVBMI:       # %bb.0:570; AVX512VLVBMI-NEXT:    vmovdqa {{.*#+}} xmm2 = [3,2,1,0,31,30,29,28,11,10,9,8,23,22,21,20]571; AVX512VLVBMI-NEXT:    vpermt2b %xmm1, %xmm2, %xmm0572; AVX512VLVBMI-NEXT:    retq573;574; XOP-LABEL: shuffle_v16i8_03_02_01_00_31_30_29_28_11_10_09_08_23_22_21_20:575; XOP:       # %bb.0:576; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[3,2,1,0],xmm1[15,14,13,12],xmm0[11,10,9,8],xmm1[7,6,5,4]577; XOP-NEXT:    retq578  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 31, i32 30, i32 29, i32 28, i32 11, i32 10, i32 9, i32 8, i32 23, i32 22, i32 21, i32 20>579  ret <16 x i8> %shuffle580}581 582define <16 x i8> @shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31(<16 x i8> %a, <16 x i8> %b) {583; SSE2-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:584; SSE2:       # %bb.0:585; SSE2-NEXT:    movaps {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]586; SSE2-NEXT:    andps %xmm2, %xmm0587; SSE2-NEXT:    andnps %xmm1, %xmm2588; SSE2-NEXT:    orps %xmm2, %xmm0589; SSE2-NEXT:    retq590;591; SSSE3-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:592; SSSE3:       # %bb.0:593; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]594; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]595; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]596; SSSE3-NEXT:    retq597;598; SSE41-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:599; SSE41:       # %bb.0:600; SSE41-NEXT:    movdqa %xmm0, %xmm2601; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]602; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1603; SSE41-NEXT:    movdqa %xmm1, %xmm0604; SSE41-NEXT:    retq605;606; AVX1-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:607; AVX1:       # %bb.0:608; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]609; AVX1-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0610; AVX1-NEXT:    retq611;612; AVX2-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:613; AVX2:       # %bb.0:614; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]615; AVX2-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0616; AVX2-NEXT:    retq617;618; AVX512VL-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:619; AVX512VL:       # %bb.0:620; AVX512VL-NEXT:    movw $-21846, %ax # imm = 0xAAAA621; AVX512VL-NEXT:    kmovd %eax, %k1622; AVX512VL-NEXT:    vmovdqu8 %xmm1, %xmm0 {%k1}623; AVX512VL-NEXT:    retq624;625; XOPAVX1-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:626; XOPAVX1:       # %bb.0:627; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]628; XOPAVX1-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0629; XOPAVX1-NEXT:    retq630;631; XOPAVX2-LABEL: shuffle_v16i8_00_17_02_19_04_21_06_23_08_25_10_27_12_29_14_31:632; XOPAVX2:       # %bb.0:633; XOPAVX2-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]634; XOPAVX2-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0635; XOPAVX2-NEXT:    retq636  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %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>637  ret <16 x i8> %shuffle638}639 640define <16 x i8> @shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31(<16 x i8> %a, <16 x i8> %b) {641; SSE2-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:642; SSE2:       # %bb.0:643; SSE2-NEXT:    movaps {{.*#+}} xmm2 = [255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0]644; SSE2-NEXT:    andps %xmm2, %xmm0645; SSE2-NEXT:    andnps %xmm1, %xmm2646; SSE2-NEXT:    orps %xmm2, %xmm0647; SSE2-NEXT:    retq648;649; SSSE3-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:650; SSSE3:       # %bb.0:651; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[15]652; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2],zero,xmm0[4,5,6],zero,xmm0[8,9,10],zero,xmm0[12,13,14],zero653; SSSE3-NEXT:    por %xmm1, %xmm0654; SSSE3-NEXT:    retq655;656; SSE41-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:657; SSE41:       # %bb.0:658; SSE41-NEXT:    movdqa %xmm0, %xmm2659; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0]660; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1661; SSE41-NEXT:    movdqa %xmm1, %xmm0662; SSE41-NEXT:    retq663;664; AVX1-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:665; AVX1:       # %bb.0:666; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0]667; AVX1-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0668; AVX1-NEXT:    retq669;670; AVX2-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:671; AVX2:       # %bb.0:672; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0]673; AVX2-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0674; AVX2-NEXT:    retq675;676; AVX512VL-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:677; AVX512VL:       # %bb.0:678; AVX512VL-NEXT:    movw $-30584, %ax # imm = 0x8888679; AVX512VL-NEXT:    kmovd %eax, %k1680; AVX512VL-NEXT:    vmovdqu8 %xmm1, %xmm0 {%k1}681; AVX512VL-NEXT:    retq682;683; XOPAVX1-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:684; XOPAVX1:       # %bb.0:685; XOPAVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0]686; XOPAVX1-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0687; XOPAVX1-NEXT:    retq688;689; XOPAVX2-LABEL: shuffle_v16i8_00_01_02_19_04_05_06_23_08_09_10_27_12_13_14_31:690; XOPAVX2:       # %bb.0:691; XOPAVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0]692; XOPAVX2-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0693; XOPAVX2-NEXT:    retq694  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 19, i32 4, i32 5, i32 6, i32 23, i32 8, i32 9, i32 10, i32 27, i32 12, i32 13, i32 14, i32 31>695  ret <16 x i8> %shuffle696}697 698define <16 x i8> @shuffle_v16i8_00_01_02_zz_04_05_06_zz_08_09_10_zz_12_13_14_zz(<16 x i8> %a) {699; SSE-LABEL: shuffle_v16i8_00_01_02_zz_04_05_06_zz_08_09_10_zz_12_13_14_zz:700; SSE:       # %bb.0:701; SSE-NEXT:    andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0702; SSE-NEXT:    retq703;704; AVX1OR2-LABEL: shuffle_v16i8_00_01_02_zz_04_05_06_zz_08_09_10_zz_12_13_14_zz:705; AVX1OR2:       # %bb.0:706; AVX1OR2-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0707; AVX1OR2-NEXT:    retq708;709; AVX512VL-LABEL: shuffle_v16i8_00_01_02_zz_04_05_06_zz_08_09_10_zz_12_13_14_zz:710; AVX512VL:       # %bb.0:711; AVX512VL-NEXT:    vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0712; AVX512VL-NEXT:    retq713  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 19, i32 4, i32 5, i32 6, i32 23, i32 8, i32 9, i32 10, i32 27, i32 12, i32 13, i32 14, i32 31>714  ret <16 x i8> %shuffle715}716 717define <16 x i8> @shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31(<16 x i8> %a, <16 x i8> %b) {718; SSE2-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:719; SSE2:       # %bb.0:720; SSE2-NEXT:    movaps {{.*#+}} xmm2 = [255,255,255,255,0,255,255,0,255,255,255,255,0,255,255,0]721; SSE2-NEXT:    andps %xmm2, %xmm0722; SSE2-NEXT:    andnps %xmm1, %xmm2723; SSE2-NEXT:    orps %xmm2, %xmm0724; SSE2-NEXT:    retq725;726; SSSE3-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:727; SSSE3:       # %bb.0:728; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,xmm1[4],zero,zero,xmm1[7],zero,zero,zero,zero,xmm1[12],zero,zero,xmm1[15]729; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3],zero,xmm0[5,6],zero,xmm0[8,9,10,11],zero,xmm0[13,14],zero730; SSSE3-NEXT:    por %xmm1, %xmm0731; SSSE3-NEXT:    retq732;733; SSE41-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:734; SSE41:       # %bb.0:735; SSE41-NEXT:    movdqa %xmm0, %xmm2736; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [255,255,255,255,0,255,255,0,255,255,255,255,0,255,255,0]737; SSE41-NEXT:    pblendvb %xmm0, %xmm2, %xmm1738; SSE41-NEXT:    movdqa %xmm1, %xmm0739; SSE41-NEXT:    retq740;741; AVX1-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:742; AVX1:       # %bb.0:743; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [255,255,255,255,0,255,255,0,255,255,255,255,0,255,255,0]744; AVX1-NEXT:    # xmm2 = mem[0,0]745; AVX1-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0746; AVX1-NEXT:    retq747;748; AVX2-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:749; AVX2:       # %bb.0:750; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [255,255,255,255,0,255,255,0,255,255,255,255,0,255,255,0]751; AVX2-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0752; AVX2-NEXT:    retq753;754; AVX512VL-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:755; AVX512VL:       # %bb.0:756; AVX512VL-NEXT:    movw $-28528, %ax # imm = 0x9090757; AVX512VL-NEXT:    kmovd %eax, %k1758; AVX512VL-NEXT:    vmovdqu8 %xmm1, %xmm0 {%k1}759; AVX512VL-NEXT:    retq760;761; XOPAVX1-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:762; XOPAVX1:       # %bb.0:763; XOPAVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [255,255,255,255,0,255,255,0,255,255,255,255,0,255,255,0]764; XOPAVX1-NEXT:    # xmm2 = mem[0,0]765; XOPAVX1-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0766; XOPAVX1-NEXT:    retq767;768; XOPAVX2-LABEL: shuffle_v16i8_00_01_02_03_20_05_06_23_08_09_10_11_28_13_14_31:769; XOPAVX2:       # %bb.0:770; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [255,255,255,255,0,255,255,0,255,255,255,255,0,255,255,0]771; XOPAVX2-NEXT:    vpblendvb %xmm2, %xmm0, %xmm1, %xmm0772; XOPAVX2-NEXT:    retq773  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 20, i32 5, i32 6, i32 23, i32 8, i32 9, i32 10, i32 11, i32 28, i32 13, i32 14, i32 31>774  ret <16 x i8> %shuffle775}776 777define <16 x i8> @shuffle_v16i8_16_17_18_19_04_05_06_07_24_25_10_11_28_13_30_15(<16 x i8> %a, <16 x i8> %b) {778; SSE2-LABEL: shuffle_v16i8_16_17_18_19_04_05_06_07_24_25_10_11_28_13_30_15:779; SSE2:       # %bb.0:780; SSE2-NEXT:    movaps {{.*#+}} xmm2 = [255,255,255,255,0,0,0,0,255,255,0,0,255,0,255,0]781; SSE2-NEXT:    andps %xmm2, %xmm1782; SSE2-NEXT:    andnps %xmm0, %xmm2783; SSE2-NEXT:    orps %xmm1, %xmm2784; SSE2-NEXT:    movaps %xmm2, %xmm0785; SSE2-NEXT:    retq786;787; SSSE3-LABEL: shuffle_v16i8_16_17_18_19_04_05_06_07_24_25_10_11_28_13_30_15:788; SSSE3:       # %bb.0:789; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[4,5,6,7],zero,zero,xmm0[10,11],zero,xmm0[13],zero,xmm0[15]790; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1,2,3],zero,zero,zero,zero,xmm1[8,9],zero,zero,xmm1[12],zero,xmm1[14],zero791; SSSE3-NEXT:    por %xmm1, %xmm0792; SSSE3-NEXT:    retq793;794; SSE41-LABEL: shuffle_v16i8_16_17_18_19_04_05_06_07_24_25_10_11_28_13_30_15:795; SSE41:       # %bb.0:796; SSE41-NEXT:    movdqa %xmm0, %xmm2797; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [255,255,255,255,0,0,0,0,255,255,0,0,255,0,255,0]798; SSE41-NEXT:    pblendvb %xmm0, %xmm1, %xmm2799; SSE41-NEXT:    movdqa %xmm2, %xmm0800; SSE41-NEXT:    retq801;802; AVX1OR2-LABEL: shuffle_v16i8_16_17_18_19_04_05_06_07_24_25_10_11_28_13_30_15:803; AVX1OR2:       # %bb.0:804; AVX1OR2-NEXT:    vmovdqa {{.*#+}} xmm2 = [255,255,255,255,0,0,0,0,255,255,0,0,255,0,255,0]805; AVX1OR2-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0806; AVX1OR2-NEXT:    retq807;808; AVX512VL-LABEL: shuffle_v16i8_16_17_18_19_04_05_06_07_24_25_10_11_28_13_30_15:809; AVX512VL:       # %bb.0:810; AVX512VL-NEXT:    movw $-21264, %ax # imm = 0xACF0811; AVX512VL-NEXT:    kmovd %eax, %k1812; AVX512VL-NEXT:    vpblendmb %xmm0, %xmm1, %xmm0 {%k1}813; AVX512VL-NEXT:    retq814  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %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 10, i32 11, i32 28, i32 13, i32 30, i32 15>815  ret <16 x i8> %shuffle816}817 818define <16 x i8> @shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu(<16 x i8> %a, <16 x i8> %b)  {819; SSE2-LABEL: shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu:820; SSE2:       # %bb.0:821; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]822; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]823; SSE2-NEXT:    psrlq $16, %xmm0824; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0825; SSE2-NEXT:    packuswb %xmm0, %xmm0826; SSE2-NEXT:    retq827;828; SSSE3-LABEL: shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu:829; SSSE3:       # %bb.0:830; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]831; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,9,u,u,u,u,u,u,u,u,u,u,u,u,u,u]832; SSSE3-NEXT:    retq833;834; SSE41-LABEL: shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu:835; SSE41:       # %bb.0:836; SSE41-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]837; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[4,9,u,u,u,u,u,u,u,u,u,u,u,u,u,u]838; SSE41-NEXT:    retq839;840; AVX1-LABEL: shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu:841; AVX1:       # %bb.0:842; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]843; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,9,u,u,u,u,u,u,u,u,u,u,u,u,u,u]844; AVX1-NEXT:    retq845;846; AVX2OR512VL-LABEL: shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu:847; AVX2OR512VL:       # %bb.0:848; AVX2OR512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]849; AVX2OR512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,9,u,u,u,u,u,u,u,u,u,u,u,u,u,u]850; AVX2OR512VL-NEXT:    retq851;852; XOP-LABEL: shuffle_v16i8_02_20_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu:853; XOP:       # %bb.0:854; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[2],xmm1[4],xmm0[u,u,u,u,u,u,u,u,u,u,u,u,u,u]855; XOP-NEXT:    retq856  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 2, i32 20, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>857  ret <16 x i8> %shuffle858}859 860; PR39387861define <16 x i8> @shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4(<16 x i8> %a, <16 x i8> %b) {862; SSE2-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:863; SSE2:       # %bb.0:864; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,255]865; SSE2-NEXT:    movdqa %xmm0, %xmm3866; SSE2-NEXT:    pand %xmm2, %xmm3867; SSE2-NEXT:    pandn %xmm1, %xmm2868; SSE2-NEXT:    por %xmm3, %xmm2869; SSE2-NEXT:    pxor %xmm1, %xmm1870; SSE2-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]871; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]872; SSE2-NEXT:    movdqa %xmm0, %xmm1873; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [65535,65535,65535,65535,65535,0,0,65535]874; SSE2-NEXT:    pand %xmm3, %xmm0875; SSE2-NEXT:    pandn %xmm2, %xmm3876; SSE2-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7,8,9]877; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero878; SSE2-NEXT:    por %xmm2, %xmm1879; SSE2-NEXT:    por %xmm0, %xmm3880; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[3,1,2,0]881; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,5,7]882; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]883; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,0,0,3,4,5,6,7]884; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]885; SSE2-NEXT:    packuswb %xmm0, %xmm1886; SSE2-NEXT:    movdqa %xmm1, %xmm0887; SSE2-NEXT:    retq888;889; SSSE3-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:890; SSSE3:       # %bb.0:891; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10]892; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,3,6,6,7,8,9]893; SSSE3-NEXT:    retq894;895; SSE41-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:896; SSE41:       # %bb.0:897; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10]898; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,3,6,6,7,8,9]899; SSE41-NEXT:    retq900;901; AVX1-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:902; AVX1:       # %bb.0:903; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10]904; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,3,6,6,7,8,9]905; AVX1-NEXT:    retq906;907; AVX2-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:908; AVX2:       # %bb.0:909; AVX2-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10]910; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,3,6,6,7,8,9]911; AVX2-NEXT:    retq912;913; AVX512VLBW-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:914; AVX512VLBW:       # %bb.0:915; AVX512VLBW-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[11,12,13,14,15],xmm0[0,1,2,3,4,5,6,7,8,9,10]916; AVX512VLBW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15,0,1,2,3,3,6,6,7,8,9]917; AVX512VLBW-NEXT:    retq918;919; AVX512VLVBMI-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:920; AVX512VLVBMI:       # %bb.0:921; AVX512VLVBMI-NEXT:    vmovdqa {{.*#+}} xmm2 = [5,6,7,8,9,10,27,28,29,30,30,1,1,2,3,4]922; AVX512VLVBMI-NEXT:    vpermt2b %xmm1, %xmm2, %xmm0923; AVX512VLVBMI-NEXT:    retq924;925; XOP-LABEL: shuffle_v16i8_5_6_7_8_9_10_27_28_29_30_31_0_1_2_3_4:926; XOP:       # %bb.0:927; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[5,6,7,8,9,10],xmm1[11,12,13,14,14],xmm0[1,1,2,3,4]928; XOP-NEXT:    retq929  %1 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 27, i32 28, i32 29, i32 30, i32 30, i32 1, i32 1, i32 2, i32 3, i32 4>930  ret <16 x i8> %1931}932 933define <16 x i8> @shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30(<16 x i8> %a, <16 x i8> %b) {934; SSE2-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:935; SSE2:       # %bb.0:936; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]937; SSE2-NEXT:    pand %xmm2, %xmm1938; SSE2-NEXT:    pand %xmm2, %xmm0939; SSE2-NEXT:    packuswb %xmm1, %xmm0940; SSE2-NEXT:    retq941;942; SSSE3-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:943; SSSE3:       # %bb.0:944; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]945; SSSE3-NEXT:    pand %xmm2, %xmm1946; SSSE3-NEXT:    pand %xmm2, %xmm0947; SSSE3-NEXT:    packuswb %xmm1, %xmm0948; SSSE3-NEXT:    retq949;950; SSE41-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:951; SSE41:       # %bb.0:952; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]953; SSE41-NEXT:    pand %xmm2, %xmm1954; SSE41-NEXT:    pand %xmm2, %xmm0955; SSE41-NEXT:    packuswb %xmm1, %xmm0956; SSE41-NEXT:    retq957;958; AVX1-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:959; AVX1:       # %bb.0:960; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]961; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1962; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0963; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0964; AVX1-NEXT:    retq965;966; AVX2-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:967; AVX2:       # %bb.0:968; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]969; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm1970; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0971; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0972; AVX2-NEXT:    retq973;974; AVX512VL-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:975; AVX512VL:       # %bb.0:976; AVX512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0977; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0978; AVX512VL-NEXT:    vpmovwb %ymm0, %xmm0979; AVX512VL-NEXT:    vzeroupper980; AVX512VL-NEXT:    retq981;982; XOP-LABEL: shuffle_v16i8_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:983; XOP:       # %bb.0:984; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14],xmm1[0,2,4,6,8,10,12,14]985; XOP-NEXT:    retq986  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>987  ret <16 x i8> %shuffle988}989 990define <16 x i8> @shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31(<16 x i8> %a, <16 x i8> %b) {991; SSE2-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:992; SSE2:       # %bb.0:993; SSE2-NEXT:    psrlw $8, %xmm1994; SSE2-NEXT:    psrlw $8, %xmm0995; SSE2-NEXT:    packuswb %xmm1, %xmm0996; SSE2-NEXT:    retq997;998; SSSE3-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:999; SSSE3:       # %bb.0:1000; SSSE3-NEXT:    movq {{.*#+}} xmm2 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]1001; SSSE3-NEXT:    pshufb %xmm2, %xmm11002; SSSE3-NEXT:    pshufb %xmm2, %xmm01003; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1004; SSSE3-NEXT:    retq1005;1006; SSE41-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:1007; SSE41:       # %bb.0:1008; SSE41-NEXT:    movq {{.*#+}} xmm2 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]1009; SSE41-NEXT:    pshufb %xmm2, %xmm11010; SSE41-NEXT:    pshufb %xmm2, %xmm01011; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1012; SSE41-NEXT:    retq1013;1014; AVX1-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:1015; AVX1:       # %bb.0:1016; AVX1-NEXT:    vmovq {{.*#+}} xmm2 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]1017; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm11018; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm01019; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1020; AVX1-NEXT:    retq1021;1022; AVX2-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:1023; AVX2:       # %bb.0:1024; AVX2-NEXT:    vmovq {{.*#+}} xmm2 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]1025; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm11026; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm01027; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1028; AVX2-NEXT:    retq1029;1030; AVX512VLBW-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:1031; AVX512VLBW:       # %bb.0:1032; AVX512VLBW-NEXT:    vmovq {{.*#+}} xmm2 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]1033; AVX512VLBW-NEXT:    vpshufb %xmm2, %xmm1, %xmm11034; AVX512VLBW-NEXT:    vpshufb %xmm2, %xmm0, %xmm01035; AVX512VLBW-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]1036; AVX512VLBW-NEXT:    retq1037;1038; AVX512VLVBMI-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:1039; AVX512VLVBMI:       # %bb.0:1040; AVX512VLVBMI-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31]1041; AVX512VLVBMI-NEXT:    vpermt2b %xmm1, %xmm2, %xmm01042; AVX512VLVBMI-NEXT:    retq1043;1044; XOP-LABEL: shuffle_v16i8_01_03_05_07_09_11_13_15_17_19_21_23_25_27_29_31:1045; XOP:       # %bb.0:1046; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15],xmm1[1,3,5,7,9,11,13,15]1047; XOP-NEXT:    retq1048  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>1049  ret <16 x i8> %shuffle1050}1051 1052; PR1596701053define <16 x i8> @shuffle_v16i8_00_24_01_25_02_26_03_27_04_28_05_29_06_30_07_31(<16 x i8> %a, <16 x i8> %b) {1054; SSE-LABEL: shuffle_v16i8_00_24_01_25_02_26_03_27_04_28_05_29_06_30_07_31:1055; SSE:       # %bb.0:1056; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1057; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1058; SSE-NEXT:    retq1059;1060; AVX-LABEL: shuffle_v16i8_00_24_01_25_02_26_03_27_04_28_05_29_06_30_07_31:1061; AVX:       # %bb.0:1062; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]1063; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1064; AVX-NEXT:    retq1065  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 24, i32 1, i32 25, i32 2, i32 26, i32 3, i32 27, i32 4, i32 28, i32 5, i32 29, i32 6, i32 30, i32 7, i32 31>1066  ret <16 x i8> %shuffle1067}1068 1069; PR27780 - https://bugs.llvm.org/show_bug.cgi?id=277801070 1071define <16 x i8> @load_fold_pblendvb(ptr %px, <16 x i8> %y) {1072; SSE2-LABEL: load_fold_pblendvb:1073; SSE2:       # %bb.0:1074; SSE2-NEXT:    movaps {{.*#+}} xmm1 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1075; SSE2-NEXT:    andps %xmm1, %xmm01076; SSE2-NEXT:    andnps (%rdi), %xmm11077; SSE2-NEXT:    orps %xmm1, %xmm01078; SSE2-NEXT:    retq1079;1080; SSSE3-LABEL: load_fold_pblendvb:1081; SSSE3:       # %bb.0:1082; SSSE3-NEXT:    movdqa (%rdi), %xmm11083; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1],zero,xmm0[3],zero,zero,zero,xmm0[7,8,9],zero,xmm0[11],zero,zero,zero,xmm0[15]1084; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,xmm1[2],zero,xmm1[4,5,6],zero,zero,zero,xmm1[10],zero,xmm1[12,13,14],zero1085; SSSE3-NEXT:    por %xmm1, %xmm01086; SSSE3-NEXT:    retq1087;1088; SSE41-LABEL: load_fold_pblendvb:1089; SSE41:       # %bb.0:1090; SSE41-NEXT:    movdqa %xmm0, %xmm11091; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [0,0,255,0,255,255,255,0,0,0,255,0,255,255,255,0]1092; SSE41-NEXT:    pblendvb %xmm0, (%rdi), %xmm11093; SSE41-NEXT:    movdqa %xmm1, %xmm01094; SSE41-NEXT:    retq1095;1096; AVX1-LABEL: load_fold_pblendvb:1097; AVX1:       # %bb.0:1098; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [0,0,255,0,255,255,255,0,0,0,255,0,255,255,255,0]1099; AVX1-NEXT:    # xmm1 = mem[0,0]1100; AVX1-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01101; AVX1-NEXT:    retq1102;1103; AVX2-LABEL: load_fold_pblendvb:1104; AVX2:       # %bb.0:1105; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,0,255,0,255,255,255,0,0,0,255,0,255,255,255,0]1106; AVX2-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01107; AVX2-NEXT:    retq1108;1109; AVX512VL-LABEL: load_fold_pblendvb:1110; AVX512VL:       # %bb.0:1111; AVX512VL-NEXT:    movw $29812, %ax # imm = 0x74741112; AVX512VL-NEXT:    kmovd %eax, %k11113; AVX512VL-NEXT:    vmovdqu8 (%rdi), %xmm0 {%k1}1114; AVX512VL-NEXT:    retq1115;1116; XOPAVX1-LABEL: load_fold_pblendvb:1117; XOPAVX1:       # %bb.0:1118; XOPAVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [0,0,255,0,255,255,255,0,0,0,255,0,255,255,255,0]1119; XOPAVX1-NEXT:    # xmm1 = mem[0,0]1120; XOPAVX1-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01121; XOPAVX1-NEXT:    retq1122;1123; XOPAVX2-LABEL: load_fold_pblendvb:1124; XOPAVX2:       # %bb.0:1125; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [0,0,255,0,255,255,255,0,0,0,255,0,255,255,255,0]1126; XOPAVX2-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01127; XOPAVX2-NEXT:    retq1128  %x = load <16 x i8>, ptr %px, align 161129  %select = shufflevector <16 x i8> %x, <16 x i8> %y, <16 x i32> <i32 16, i32 17, i32 2, i32 19, i32 4, i32 5, i32 6, i32 23, i32 24, i32 25, i32 10, i32 27, i32 12, i32 13, i32 14, i32 31>1130  ret <16 x i8> %select1131}1132 1133define <16 x i8> @load_fold_pblendvb_commute(ptr %px, <16 x i8> %y) {1134; SSE2-LABEL: load_fold_pblendvb_commute:1135; SSE2:       # %bb.0:1136; SSE2-NEXT:    movaps {{.*#+}} xmm1 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1137; SSE2-NEXT:    movaps %xmm1, %xmm21138; SSE2-NEXT:    andnps %xmm0, %xmm21139; SSE2-NEXT:    andps (%rdi), %xmm11140; SSE2-NEXT:    orps %xmm2, %xmm11141; SSE2-NEXT:    movaps %xmm1, %xmm01142; SSE2-NEXT:    retq1143;1144; SSSE3-LABEL: load_fold_pblendvb_commute:1145; SSSE3:       # %bb.0:1146; SSSE3-NEXT:    movdqa (%rdi), %xmm11147; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,xmm0[2],zero,xmm0[4,5,6],zero,zero,zero,xmm0[10],zero,xmm0[12,13,14],zero1148; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1],zero,xmm1[3],zero,zero,zero,xmm1[7,8,9],zero,xmm1[11],zero,zero,zero,xmm1[15]1149; SSSE3-NEXT:    por %xmm1, %xmm01150; SSSE3-NEXT:    retq1151;1152; SSE41-LABEL: load_fold_pblendvb_commute:1153; SSE41:       # %bb.0:1154; SSE41-NEXT:    movdqa %xmm0, %xmm11155; SSE41-NEXT:    movaps {{.*#+}} xmm0 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1156; SSE41-NEXT:    pblendvb %xmm0, (%rdi), %xmm11157; SSE41-NEXT:    movdqa %xmm1, %xmm01158; SSE41-NEXT:    retq1159;1160; AVX1-LABEL: load_fold_pblendvb_commute:1161; AVX1:       # %bb.0:1162; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1163; AVX1-NEXT:    # xmm1 = mem[0,0]1164; AVX1-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01165; AVX1-NEXT:    retq1166;1167; AVX2-LABEL: load_fold_pblendvb_commute:1168; AVX2:       # %bb.0:1169; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1170; AVX2-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01171; AVX2-NEXT:    retq1172;1173; AVX512VL-LABEL: load_fold_pblendvb_commute:1174; AVX512VL:       # %bb.0:1175; AVX512VL-NEXT:    vmovdqa (%rdi), %xmm11176; AVX512VL-NEXT:    movw $29812, %ax # imm = 0x74741177; AVX512VL-NEXT:    kmovd %eax, %k11178; AVX512VL-NEXT:    vmovdqu8 %xmm0, %xmm1 {%k1}1179; AVX512VL-NEXT:    vmovdqa %xmm1, %xmm01180; AVX512VL-NEXT:    retq1181;1182; XOPAVX1-LABEL: load_fold_pblendvb_commute:1183; XOPAVX1:       # %bb.0:1184; XOPAVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1185; XOPAVX1-NEXT:    # xmm1 = mem[0,0]1186; XOPAVX1-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01187; XOPAVX1-NEXT:    retq1188;1189; XOPAVX2-LABEL: load_fold_pblendvb_commute:1190; XOPAVX2:       # %bb.0:1191; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [255,255,0,255,0,0,0,255,255,255,0,255,0,0,0,255]1192; XOPAVX2-NEXT:    vpblendvb %xmm1, (%rdi), %xmm0, %xmm01193; XOPAVX2-NEXT:    retq1194  %x = load <16 x i8>, ptr %px, align 161195  %select = shufflevector <16 x i8> %y, <16 x i8> %x, <16 x i32> <i32 16, i32 17, i32 2, i32 19, i32 4, i32 5, i32 6, i32 23, i32 24, i32 25, i32 10, i32 27, i32 12, i32 13, i32 14, i32 31>1196  ret <16 x i8> %select1197}1198 1199define <16 x i8> @trunc_v4i32_shuffle(<16 x i8> %a) {1200; SSE2-LABEL: trunc_v4i32_shuffle:1201; SSE2:       # %bb.0:1202; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01203; SSE2-NEXT:    packuswb %xmm0, %xmm01204; SSE2-NEXT:    packuswb %xmm0, %xmm01205; SSE2-NEXT:    retq1206;1207; SSSE3-LABEL: trunc_v4i32_shuffle:1208; SSSE3:       # %bb.0:1209; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]1210; SSSE3-NEXT:    retq1211;1212; SSE41-LABEL: trunc_v4i32_shuffle:1213; SSE41:       # %bb.0:1214; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]1215; SSE41-NEXT:    retq1216;1217; AVX1OR2-LABEL: trunc_v4i32_shuffle:1218; AVX1OR2:       # %bb.0:1219; AVX1OR2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]1220; AVX1OR2-NEXT:    retq1221;1222; AVX512VL-LABEL: trunc_v4i32_shuffle:1223; AVX512VL:       # %bb.0:1224; AVX512VL-NEXT:    vpmovdb %xmm0, %xmm01225; AVX512VL-NEXT:    retq1226  %shuffle = shufflevector <16 x i8> %a, <16 x i8> poison, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1227  ret <16 x i8> %shuffle1228}1229 1230define <16 x i8> @stress_test0(<16 x i8> %s.0.1, <16 x i8> %s.0.2, <16 x i8> %s.0.3, <16 x i8> %s.0.4, <16 x i8> %s.0.5, <16 x i8> %s.0.6, <16 x i8> %s.0.7, <16 x i8> %s.0.8, <16 x i8> %s.0.9) {1231; We don't have anything useful to check here. This generates 100s of1232; instructions. Instead, just make sure we survived codegen.1233; ALL-LABEL: stress_test0:1234; ALL:         retq1235entry:1236  %s.1.4 = shufflevector <16 x i8> %s.0.4, <16 x i8> %s.0.5, <16 x i32> <i32 1, i32 22, i32 21, i32 28, i32 3, i32 16, i32 6, i32 1, i32 19, i32 29, i32 12, i32 31, i32 2, i32 3, i32 3, i32 6>1237  %s.1.5 = shufflevector <16 x i8> %s.0.5, <16 x i8> %s.0.6, <16 x i32> <i32 31, i32 20, i32 12, i32 19, i32 2, i32 15, i32 12, i32 31, i32 2, i32 28, i32 2, i32 30, i32 7, i32 8, i32 17, i32 28>1238  %s.1.8 = shufflevector <16 x i8> %s.0.8, <16 x i8> %s.0.9, <16 x i32> <i32 14, i32 10, i32 17, i32 5, i32 17, i32 9, i32 17, i32 21, i32 31, i32 24, i32 16, i32 6, i32 20, i32 28, i32 23, i32 8>1239  %s.2.2 = shufflevector <16 x i8> %s.0.3, <16 x i8> %s.0.4, <16 x i32> <i32 20, i32 9, i32 21, i32 11, i32 11, i32 4, i32 3, i32 18, i32 3, i32 30, i32 4, i32 31, i32 11, i32 24, i32 13, i32 29>1240  %s.3.2 = shufflevector <16 x i8> %s.2.2, <16 x i8> %s.1.4, <16 x i32> <i32 15, i32 13, i32 5, i32 11, i32 7, i32 17, i32 14, i32 22, i32 22, i32 16, i32 7, i32 24, i32 16, i32 22, i32 7, i32 29>1241  %s.5.4 = shufflevector <16 x i8> %s.1.5, <16 x i8> %s.1.8, <16 x i32> <i32 3, i32 13, i32 19, i32 7, i32 23, i32 11, i32 1, i32 9, i32 16, i32 25, i32 2, i32 7, i32 0, i32 21, i32 23, i32 17>1242  %s.6.1 = shufflevector <16 x i8> %s.3.2, <16 x i8> %s.3.2, <16 x i32> <i32 11, i32 2, i32 28, i32 31, i32 27, i32 3, i32 9, i32 27, i32 25, i32 25, i32 14, i32 7, i32 12, i32 28, i32 12, i32 23>1243  %s.7.1 = shufflevector <16 x i8> %s.6.1, <16 x i8> %s.3.2, <16 x i32> <i32 15, i32 29, i32 14, i32 0, i32 29, i32 15, i32 26, i32 30, i32 6, i32 7, i32 2, i32 8, i32 12, i32 10, i32 29, i32 17>1244  %s.7.2 = shufflevector <16 x i8> %s.3.2, <16 x i8> %s.5.4, <16 x i32> <i32 3, i32 29, i32 3, i32 19, i32 poison, i32 20, i32 poison, i32 3, i32 27, i32 poison, i32 poison, i32 11, i32 poison, i32 poison, i32 poison, i32 poison>1245  %s.16.0 = shufflevector <16 x i8> %s.7.1, <16 x i8> %s.7.2, <16 x i32> <i32 13, i32 1, i32 16, i32 16, i32 6, i32 7, i32 29, i32 18, i32 19, i32 28, i32 poison, i32 poison, i32 31, i32 1, i32 poison, i32 10>1246  ret <16 x i8> %s.16.01247}1248 1249define <16 x i8> @poison_test1(<16 x i8> %s.0.5, <16 x i8> %s.0.8, <16 x i8> %s.0.9) noinline nounwind {1250; There is nothing interesting to check about these instructions other than1251; that they survive codegen. However, we actually do better and delete all of1252; them because the result is 'poison'.1253;1254; ALL-LABEL: poison_test1:1255; ALL:       # %bb.0: # %entry1256; ALL-NEXT:    retq1257entry:1258  %s.1.8 = shufflevector <16 x i8> %s.0.8, <16 x i8> poison, <16 x i32> <i32 9, i32 9, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 6, i32 poison, i32 6, i32 poison, i32 14, i32 14, i32 poison, i32 poison, i32 0>1259  %s.2.4 = shufflevector <16 x i8> poison, <16 x i8> %s.0.5, <16 x i32> <i32 21, i32 poison, i32 poison, i32 19, i32 poison, i32 poison, i32 29, i32 24, i32 21, i32 23, i32 21, i32 17, i32 19, i32 poison, i32 20, i32 22>1260  %s.2.5 = shufflevector <16 x i8> %s.0.5, <16 x i8> poison, <16 x i32> <i32 3, i32 8, i32 poison, i32 7, i32 poison, i32 10, i32 8, i32 0, i32 15, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 9>1261  %s.2.9 = shufflevector <16 x i8> %s.0.9, <16 x i8> poison, <16 x i32> <i32 7, i32 poison, i32 14, i32 7, i32 8, i32 poison, i32 7, i32 8, i32 5, i32 15, i32 poison, i32 1, i32 11, i32 poison, i32 poison, i32 11>1262  %s.3.4 = shufflevector <16 x i8> %s.2.4, <16 x i8> %s.0.5, <16 x i32> <i32 5, i32 0, i32 21, i32 6, i32 15, i32 27, i32 22, i32 21, i32 4, i32 22, i32 19, i32 26, i32 9, i32 26, i32 8, i32 29>1263  %s.3.9 = shufflevector <16 x i8> %s.2.9, <16 x i8> poison, <16 x i32> <i32 8, i32 6, i32 8, i32 1, i32 poison, i32 4, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 6, i32 poison>1264  %s.4.7 = shufflevector <16 x i8> %s.1.8, <16 x i8> %s.2.9, <16 x i32> <i32 9, i32 0, i32 22, i32 20, i32 24, i32 7, i32 21, i32 17, i32 20, i32 12, i32 19, i32 23, i32 2, i32 9, i32 17, i32 10>1265  %s.4.8 = shufflevector <16 x i8> %s.2.9, <16 x i8> %s.3.9, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 6, i32 10, i32 poison, i32 0, i32 5, i32 poison, i32 9, i32 poison>1266  %s.5.7 = shufflevector <16 x i8> %s.4.7, <16 x i8> %s.4.8, <16 x i32> <i32 16, i32 0, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1267  %s.8.4 = shufflevector <16 x i8> %s.3.4, <16 x i8> %s.5.7, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 28, i32 poison, i32 0, i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1268  %s.9.4 = shufflevector <16 x i8> %s.8.4, <16 x i8> poison, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 10, i32 5>1269  %s.10.4 = shufflevector <16 x i8> %s.9.4, <16 x i8> poison, <16 x i32> <i32 poison, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1270  %s.12.4 = shufflevector <16 x i8> %s.10.4, <16 x i8> poison, <16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 13, i32 poison, i32 poison, i32 poison>1271 1272  ret <16 x i8> %s.12.41273}1274 1275define <16 x i8> @PR20540(<8 x i8> %a) {1276; SSE-LABEL: PR20540:1277; SSE:       # %bb.0:1278; SSE-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero1279; SSE-NEXT:    retq1280;1281; AVX-LABEL: PR20540:1282; AVX:       # %bb.0:1283; AVX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero1284; AVX-NEXT:    retq1285  %shuffle = shufflevector <8 x i8> %a, <8 x i8> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1286  ret <16 x i8> %shuffle1287}1288 1289define <16 x i8> @shuffle_v16i8_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz(i8 %i) {1290; SSE-LABEL: shuffle_v16i8_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1291; SSE:       # %bb.0:1292; SSE-NEXT:    movzbl %dil, %eax1293; SSE-NEXT:    movd %eax, %xmm01294; SSE-NEXT:    retq1295;1296; AVX-LABEL: shuffle_v16i8_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1297; AVX:       # %bb.0:1298; AVX-NEXT:    movzbl %dil, %eax1299; AVX-NEXT:    vmovd %eax, %xmm01300; AVX-NEXT:    retq1301  %a = insertelement <16 x i8> poison, i8 %i, i32 01302  %shuffle = shufflevector <16 x i8> zeroinitializer, <16 x i8> %a, <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>1303  ret <16 x i8> %shuffle1304}1305 1306define <16 x i8> @shuffle_v16i8_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz(i8 %i) {1307; SSE2-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1308; SSE2:       # %bb.0:1309; SSE2-NEXT:    shll $8, %edi1310; SSE2-NEXT:    pxor %xmm0, %xmm01311; SSE2-NEXT:    pinsrw $2, %edi, %xmm01312; SSE2-NEXT:    retq1313;1314; SSSE3-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1315; SSSE3:       # %bb.0:1316; SSSE3-NEXT:    shll $8, %edi1317; SSSE3-NEXT:    pxor %xmm0, %xmm01318; SSSE3-NEXT:    pinsrw $2, %edi, %xmm01319; SSSE3-NEXT:    retq1320;1321; SSE41-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1322; SSE41:       # %bb.0:1323; SSE41-NEXT:    pxor %xmm0, %xmm01324; SSE41-NEXT:    pinsrb $5, %edi, %xmm01325; SSE41-NEXT:    retq1326;1327; AVX-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1328; AVX:       # %bb.0:1329; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm01330; AVX-NEXT:    vpinsrb $5, %edi, %xmm0, %xmm01331; AVX-NEXT:    retq1332  %a = insertelement <16 x i8> poison, i8 %i, i32 01333  %shuffle = shufflevector <16 x i8> zeroinitializer, <16 x i8> %a, <16 x i32> <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 0, i32 0, i32 0>1334  ret <16 x i8> %shuffle1335}1336 1337define <16 x i8> @shuffle_v16i8_zz_uu_uu_zz_uu_uu_zz_zz_zz_zz_zz_zz_zz_zz_zz_16(i8 %i) {1338; SSE2-LABEL: shuffle_v16i8_zz_uu_uu_zz_uu_uu_zz_zz_zz_zz_zz_zz_zz_zz_zz_16:1339; SSE2:       # %bb.0:1340; SSE2-NEXT:    shll $8, %edi1341; SSE2-NEXT:    pxor %xmm0, %xmm01342; SSE2-NEXT:    pinsrw $7, %edi, %xmm01343; SSE2-NEXT:    retq1344;1345; SSSE3-LABEL: shuffle_v16i8_zz_uu_uu_zz_uu_uu_zz_zz_zz_zz_zz_zz_zz_zz_zz_16:1346; SSSE3:       # %bb.0:1347; SSSE3-NEXT:    shll $8, %edi1348; SSSE3-NEXT:    pxor %xmm0, %xmm01349; SSSE3-NEXT:    pinsrw $7, %edi, %xmm01350; SSSE3-NEXT:    retq1351;1352; SSE41-LABEL: shuffle_v16i8_zz_uu_uu_zz_uu_uu_zz_zz_zz_zz_zz_zz_zz_zz_zz_16:1353; SSE41:       # %bb.0:1354; SSE41-NEXT:    pxor %xmm0, %xmm01355; SSE41-NEXT:    pinsrb $15, %edi, %xmm01356; SSE41-NEXT:    retq1357;1358; AVX-LABEL: shuffle_v16i8_zz_uu_uu_zz_uu_uu_zz_zz_zz_zz_zz_zz_zz_zz_zz_16:1359; AVX:       # %bb.0:1360; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm01361; AVX-NEXT:    vpinsrb $15, %edi, %xmm0, %xmm01362; AVX-NEXT:    retq1363  %a = insertelement <16 x i8> poison, i8 %i, i32 01364  %shuffle = shufflevector <16 x i8> zeroinitializer, <16 x i8> %a, <16 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16>1365  ret <16 x i8> %shuffle1366}1367 1368define <16 x i8> @shuffle_v16i8_zz_zz_19_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz(i8 %i) {1369; SSE2-LABEL: shuffle_v16i8_zz_zz_19_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1370; SSE2:       # %bb.0:1371; SSE2-NEXT:    movzbl %dil, %eax1372; SSE2-NEXT:    pxor %xmm0, %xmm01373; SSE2-NEXT:    pinsrw $1, %eax, %xmm01374; SSE2-NEXT:    retq1375;1376; SSSE3-LABEL: shuffle_v16i8_zz_zz_19_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1377; SSSE3:       # %bb.0:1378; SSSE3-NEXT:    movzbl %dil, %eax1379; SSSE3-NEXT:    pxor %xmm0, %xmm01380; SSSE3-NEXT:    pinsrw $1, %eax, %xmm01381; SSSE3-NEXT:    retq1382;1383; SSE41-LABEL: shuffle_v16i8_zz_zz_19_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1384; SSE41:       # %bb.0:1385; SSE41-NEXT:    pxor %xmm0, %xmm01386; SSE41-NEXT:    pinsrb $2, %edi, %xmm01387; SSE41-NEXT:    retq1388;1389; AVX-LABEL: shuffle_v16i8_zz_zz_19_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1390; AVX:       # %bb.0:1391; AVX-NEXT:    vpxor %xmm0, %xmm0, %xmm01392; AVX-NEXT:    vpinsrb $2, %edi, %xmm0, %xmm01393; AVX-NEXT:    retq1394  %a = insertelement <16 x i8> poison, i8 %i, i32 31395  %shuffle = shufflevector <16 x i8> zeroinitializer, <16 x i8> %a, <16 x i32> <i32 0, i32 1, i32 19, 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>1396  ret <16 x i8> %shuffle1397}1398 1399define <16 x i8> @shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_16_uu_18_uu(<16 x i8> %a) {1400; SSE-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_16_uu_18_uu:1401; SSE:       # %bb.0:1402; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3]1403; SSE-NEXT:    retq1404;1405; AVX-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_16_uu_18_uu:1406; AVX:       # %bb.0:1407; AVX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3]1408; AVX-NEXT:    retq1409  %shuffle = shufflevector <16 x i8> zeroinitializer, <16 x i8> %a, <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 16, i32 poison, i32 18, i32 poison>1410  ret <16 x i8> %shuffle1411}1412 1413define <16 x i8> @shuffle_v16i8_28_uu_30_31_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz(<16 x i8> %a) {1414; SSE-LABEL: shuffle_v16i8_28_uu_30_31_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1415; SSE:       # %bb.0:1416; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1417; SSE-NEXT:    retq1418;1419; AVX-LABEL: shuffle_v16i8_28_uu_30_31_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:1420; AVX:       # %bb.0:1421; AVX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1422; AVX-NEXT:    retq1423  %shuffle = shufflevector <16 x i8> zeroinitializer, <16 x i8> %a, <16 x i32> <i32 28, i32 poison, i32 30, i32 31, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 09, i32 0, i32 0, i32 0, i32 0, i32 0>1424  ret <16 x i8> %shuffle1425}1426 1427define <16 x i8> @shuffle_v16i8_31_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14(<16 x i8> %a, <16 x i8> %b) {1428; SSE2-LABEL: shuffle_v16i8_31_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1429; SSE2:       # %bb.0:1430; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1431; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1432; SSE2-NEXT:    por %xmm1, %xmm01433; SSE2-NEXT:    retq1434;1435; SSSE3-LABEL: shuffle_v16i8_31_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1436; SSSE3:       # %bb.0:1437; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1438; SSSE3-NEXT:    retq1439;1440; SSE41-LABEL: shuffle_v16i8_31_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1441; SSE41:       # %bb.0:1442; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1443; SSE41-NEXT:    retq1444;1445; AVX-LABEL: shuffle_v16i8_31_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1446; AVX:       # %bb.0:1447; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[15],xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1448; AVX-NEXT:    retq1449  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 31, 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>1450  ret <16 x i8> %shuffle1451}1452 1453define <16 x i8> @shuffle_v16i8_15_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14(<16 x i8> %a, <16 x i8> %b) {1454; SSE2-LABEL: shuffle_v16i8_15_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1455; SSE2:       # %bb.0:1456; SSE2-NEXT:    movdqa %xmm0, %xmm11457; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1458; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1459; SSE2-NEXT:    por %xmm1, %xmm01460; SSE2-NEXT:    retq1461;1462; SSSE3-LABEL: shuffle_v16i8_15_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1463; SSSE3:       # %bb.0:1464; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1465; SSSE3-NEXT:    retq1466;1467; SSE41-LABEL: shuffle_v16i8_15_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1468; SSE41:       # %bb.0:1469; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1470; SSE41-NEXT:    retq1471;1472; AVX-LABEL: shuffle_v16i8_15_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14:1473; AVX:       # %bb.0:1474; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1475; AVX-NEXT:    retq1476  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 15, 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>1477  ret <16 x i8> %shuffle1478}1479 1480define <16 x i8> @shuffle_v16i8_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_00(<16 x i8> %a, <16 x i8> %b) {1481; SSE2-LABEL: shuffle_v16i8_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_00:1482; SSE2:       # %bb.0:1483; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero1484; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]1485; SSE2-NEXT:    por %xmm1, %xmm01486; SSE2-NEXT:    retq1487;1488; SSSE3-LABEL: shuffle_v16i8_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_00:1489; SSSE3:       # %bb.0:1490; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0]1491; SSSE3-NEXT:    retq1492;1493; SSE41-LABEL: shuffle_v16i8_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_00:1494; SSE41:       # %bb.0:1495; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0]1496; SSE41-NEXT:    retq1497;1498; AVX-LABEL: shuffle_v16i8_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_00:1499; AVX:       # %bb.0:1500; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm0[0]1501; AVX-NEXT:    retq1502  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <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, i32 0>1503  ret <16 x i8> %shuffle1504}1505 1506define <16 x i8> @shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_16(<16 x i8> %a, <16 x i8> %b) {1507; SSE2-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_16:1508; SSE2:       # %bb.0:1509; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero1510; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]1511; SSE2-NEXT:    por %xmm1, %xmm01512; SSE2-NEXT:    retq1513;1514; SSSE3-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_16:1515; SSSE3:       # %bb.0:1516; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0]1517; SSSE3-NEXT:    movdqa %xmm1, %xmm01518; SSSE3-NEXT:    retq1519;1520; SSE41-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_16:1521; SSE41:       # %bb.0:1522; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0]1523; SSE41-NEXT:    movdqa %xmm1, %xmm01524; SSE41-NEXT:    retq1525;1526; AVX-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_16:1527; AVX:       # %bb.0:1528; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0]1529; AVX-NEXT:    retq1530  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <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>1531  ret <16 x i8> %shuffle1532}1533 1534define <16 x i8> @shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_00(<16 x i8> %a, <16 x i8> %b) {1535; SSE2-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_00:1536; SSE2:       # %bb.0:1537; SSE2-NEXT:    movdqa %xmm0, %xmm11538; SSE2-NEXT:    psrldq {{.*#+}} xmm1 = xmm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero1539; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]1540; SSE2-NEXT:    por %xmm1, %xmm01541; SSE2-NEXT:    retq1542;1543; SSSE3-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_00:1544; SSSE3:       # %bb.0:1545; SSSE3-NEXT:    palignr {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]1546; SSSE3-NEXT:    retq1547;1548; SSE41-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_00:1549; SSE41:       # %bb.0:1550; SSE41-NEXT:    palignr {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]1551; SSE41-NEXT:    retq1552;1553; AVX-LABEL: shuffle_v16i8_01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_00:1554; AVX:       # %bb.0:1555; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]1556; AVX-NEXT:    retq1557  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <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 0>1558  ret <16 x i8> %shuffle1559}1560 1561define <16 x i8> @shuffle_v16i8_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30(<16 x i8> %a, <16 x i8> %b) {1562; SSE2-LABEL: shuffle_v16i8_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30:1563; SSE2:       # %bb.0:1564; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero1565; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1566; SSE2-NEXT:    por %xmm1, %xmm01567; SSE2-NEXT:    retq1568;1569; SSSE3-LABEL: shuffle_v16i8_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30:1570; SSSE3:       # %bb.0:1571; SSSE3-NEXT:    palignr {{.*#+}} xmm1 = xmm0[15],xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1572; SSSE3-NEXT:    movdqa %xmm1, %xmm01573; SSSE3-NEXT:    retq1574;1575; SSE41-LABEL: shuffle_v16i8_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30:1576; SSE41:       # %bb.0:1577; SSE41-NEXT:    palignr {{.*#+}} xmm1 = xmm0[15],xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1578; SSE41-NEXT:    movdqa %xmm1, %xmm01579; SSE41-NEXT:    retq1580;1581; AVX-LABEL: shuffle_v16i8_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30:1582; AVX:       # %bb.0:1583; AVX-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[15],xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]1584; AVX-NEXT:    retq1585  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <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>1586  ret <16 x i8> %shuffle1587}1588 1589; PR311511590define <16 x i8> @shuffle_v16i8_00_16_01_17_04_20_05_21_02_18_03_19_06_22_07_23(<16 x i8> %val1, <16 x i8> %val2) {1591; SSE-LABEL: shuffle_v16i8_00_16_01_17_04_20_05_21_02_18_03_19_06_22_07_23:1592; SSE:       # %bb.0:1593; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1594; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]1595; SSE-NEXT:    retq1596;1597; AVX-LABEL: shuffle_v16i8_00_16_01_17_04_20_05_21_02_18_03_19_06_22_07_23:1598; AVX:       # %bb.0:1599; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1600; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]1601; AVX-NEXT:    retq1602  %shuffle = shufflevector <16 x i8> %val1, <16 x i8> %val2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23>1603  ret <16 x i8> %shuffle1604}1605 1606define <16 x i8> @shuffle_v16i8_00_uu_uu_uu_uu_uu_uu_uu_01_uu_uu_uu_uu_uu_uu_uu(<16 x i8> %a) {1607; SSE2-LABEL: shuffle_v16i8_00_uu_uu_uu_uu_uu_uu_uu_01_uu_uu_uu_uu_uu_uu_uu:1608; SSE2:       # %bb.0:1609; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1610; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1611; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]1612; SSE2-NEXT:    retq1613;1614; SSSE3-LABEL: shuffle_v16i8_00_uu_uu_uu_uu_uu_uu_uu_01_uu_uu_uu_uu_uu_uu_uu:1615; SSSE3:       # %bb.0:1616; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,u,u,u,u,u,u,u,1,u,u,u,u,u,u,u]1617; SSSE3-NEXT:    retq1618;1619; SSE41-LABEL: shuffle_v16i8_00_uu_uu_uu_uu_uu_uu_uu_01_uu_uu_uu_uu_uu_uu_uu:1620; SSE41:       # %bb.0:1621; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1622; SSE41-NEXT:    retq1623;1624; AVX-LABEL: shuffle_v16i8_00_uu_uu_uu_uu_uu_uu_uu_01_uu_uu_uu_uu_uu_uu_uu:1625; AVX:       # %bb.0:1626; AVX-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1627; AVX-NEXT:    retq1628  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>1629  ret <16 x i8> %shuffle1630}1631 1632define <16 x i8> @shuffle_v16i8_00_zz_zz_zz_zz_zz_zz_zz_01_zz_zz_zz_zz_zz_zz_zz(<16 x i8> %a) {1633; SSE2-LABEL: shuffle_v16i8_00_zz_zz_zz_zz_zz_zz_zz_01_zz_zz_zz_zz_zz_zz_zz:1634; SSE2:       # %bb.0:1635; SSE2-NEXT:    pxor %xmm1, %xmm11636; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1637; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1638; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]1639; SSE2-NEXT:    retq1640;1641; SSSE3-LABEL: shuffle_v16i8_00_zz_zz_zz_zz_zz_zz_zz_01_zz_zz_zz_zz_zz_zz_zz:1642; SSSE3:       # %bb.0:1643; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1644; SSSE3-NEXT:    retq1645;1646; SSE41-LABEL: shuffle_v16i8_00_zz_zz_zz_zz_zz_zz_zz_01_zz_zz_zz_zz_zz_zz_zz:1647; SSE41:       # %bb.0:1648; SSE41-NEXT:    pmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1649; SSE41-NEXT:    retq1650;1651; AVX-LABEL: shuffle_v16i8_00_zz_zz_zz_zz_zz_zz_zz_01_zz_zz_zz_zz_zz_zz_zz:1652; AVX:       # %bb.0:1653; AVX-NEXT:    vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero1654; AVX-NEXT:    retq1655  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 1, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>1656  ret <16 x i8> %shuffle1657}1658 1659define <16 x i8> @shuffle_v16i8_00_uu_uu_uu_01_uu_uu_uu_02_uu_uu_uu_03_uu_uu_uu(<16 x i8> %a) {1660; SSE2-LABEL: shuffle_v16i8_00_uu_uu_uu_01_uu_uu_uu_02_uu_uu_uu_03_uu_uu_uu:1661; SSE2:       # %bb.0:1662; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1663; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1664; SSE2-NEXT:    retq1665;1666; SSSE3-LABEL: shuffle_v16i8_00_uu_uu_uu_01_uu_uu_uu_02_uu_uu_uu_03_uu_uu_uu:1667; SSSE3:       # %bb.0:1668; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1669; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]1670; SSSE3-NEXT:    retq1671;1672; SSE41-LABEL: shuffle_v16i8_00_uu_uu_uu_01_uu_uu_uu_02_uu_uu_uu_03_uu_uu_uu:1673; SSE41:       # %bb.0:1674; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1675; SSE41-NEXT:    retq1676;1677; AVX-LABEL: shuffle_v16i8_00_uu_uu_uu_01_uu_uu_uu_02_uu_uu_uu_03_uu_uu_uu:1678; AVX:       # %bb.0:1679; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1680; AVX-NEXT:    retq1681  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 poison, i32 poison, i32 poison, i32 1, i32 poison, i32 poison, i32 poison, i32 2, i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 poison>1682  ret <16 x i8> %shuffle1683}1684 1685define <16 x i8> @shuffle_v16i8_00_zz_zz_zz_01_zz_zz_zz_02_zz_zz_zz_03_zz_zz_zz(<16 x i8> %a) {1686; SSE2-LABEL: shuffle_v16i8_00_zz_zz_zz_01_zz_zz_zz_02_zz_zz_zz_03_zz_zz_zz:1687; SSE2:       # %bb.0:1688; SSE2-NEXT:    pxor %xmm1, %xmm11689; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1690; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1691; SSE2-NEXT:    retq1692;1693; SSSE3-LABEL: shuffle_v16i8_00_zz_zz_zz_01_zz_zz_zz_02_zz_zz_zz_03_zz_zz_zz:1694; SSSE3:       # %bb.0:1695; SSSE3-NEXT:    pxor %xmm1, %xmm11696; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1697; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]1698; SSSE3-NEXT:    retq1699;1700; SSE41-LABEL: shuffle_v16i8_00_zz_zz_zz_01_zz_zz_zz_02_zz_zz_zz_03_zz_zz_zz:1701; SSE41:       # %bb.0:1702; SSE41-NEXT:    pmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1703; SSE41-NEXT:    retq1704;1705; AVX-LABEL: shuffle_v16i8_00_zz_zz_zz_01_zz_zz_zz_02_zz_zz_zz_03_zz_zz_zz:1706; AVX:       # %bb.0:1707; AVX-NEXT:    vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero1708; AVX-NEXT:    retq1709  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 17, i32 18, i32 19, i32 1, i32 21, i32 22, i32 23, i32 2, i32 25, i32 26, i32 27, i32 3, i32 29, i32 30, i32 31>1710  ret <16 x i8> %shuffle1711}1712 1713define <16 x i8> @shuffle_v16i8_00_uu_01_uu_02_uu_03_uu_04_uu_05_uu_06_uu_07_uu(<16 x i8> %a) {1714; SSE2-LABEL: shuffle_v16i8_00_uu_01_uu_02_uu_03_uu_04_uu_05_uu_06_uu_07_uu:1715; SSE2:       # %bb.0:1716; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1717; SSE2-NEXT:    retq1718;1719; SSSE3-LABEL: shuffle_v16i8_00_uu_01_uu_02_uu_03_uu_04_uu_05_uu_06_uu_07_uu:1720; SSSE3:       # %bb.0:1721; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]1722; SSSE3-NEXT:    retq1723;1724; SSE41-LABEL: shuffle_v16i8_00_uu_01_uu_02_uu_03_uu_04_uu_05_uu_06_uu_07_uu:1725; SSE41:       # %bb.0:1726; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1727; SSE41-NEXT:    retq1728;1729; AVX-LABEL: shuffle_v16i8_00_uu_01_uu_02_uu_03_uu_04_uu_05_uu_06_uu_07_uu:1730; AVX:       # %bb.0:1731; AVX-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1732; AVX-NEXT:    retq1733  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 poison, i32 1, i32 poison, i32 2, i32 poison, i32 3, i32 poison, i32 4, i32 poison, i32 5, i32 poison, i32 6, i32 poison, i32 7, i32 poison>1734  ret <16 x i8> %shuffle1735}1736 1737define <16 x i8> @shuffle_v16i8_00_zz_01_zz_02_zz_03_zz_04_zz_05_zz_06_zz_07_zz(<16 x i8> %a) {1738; SSE2-LABEL: shuffle_v16i8_00_zz_01_zz_02_zz_03_zz_04_zz_05_zz_06_zz_07_zz:1739; SSE2:       # %bb.0:1740; SSE2-NEXT:    pxor %xmm1, %xmm11741; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1742; SSE2-NEXT:    retq1743;1744; SSSE3-LABEL: shuffle_v16i8_00_zz_01_zz_02_zz_03_zz_04_zz_05_zz_06_zz_07_zz:1745; SSSE3:       # %bb.0:1746; SSSE3-NEXT:    pxor %xmm1, %xmm11747; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]1748; SSSE3-NEXT:    retq1749;1750; SSE41-LABEL: shuffle_v16i8_00_zz_01_zz_02_zz_03_zz_04_zz_05_zz_06_zz_07_zz:1751; SSE41:       # %bb.0:1752; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1753; SSE41-NEXT:    retq1754;1755; AVX-LABEL: shuffle_v16i8_00_zz_01_zz_02_zz_03_zz_04_zz_05_zz_06_zz_07_zz:1756; AVX:       # %bb.0:1757; AVX-NEXT:    vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero1758; AVX-NEXT:    retq1759  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 17, i32 1, i32 19, i32 2, i32 21, i32 3, i32 23, i32 4, i32 25, i32 5, i32 27, i32 6, i32 29, i32 7, i32 31>1760  ret <16 x i8> %shuffle1761}1762 1763define <16 x i8> @shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00(<16 x i8> %a, <16 x i8> %b) {1764; SSE2-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1765; SSE2:       # %bb.0: # %entry1766; SSE2-NEXT:    pxor %xmm2, %xmm21767; SSE2-NEXT:    movdqa %xmm0, %xmm31768; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]1769; SSE2-NEXT:    pshuflw {{.*#+}} xmm4 = xmm3[1,3,2,0,4,5,6,7]1770; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,2,1]1771; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [65535,65535,65535,0,65535,0,0,65535]1772; SSE2-NEXT:    pand %xmm5, %xmm41773; SSE2-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]1774; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,3,0,1]1775; SSE2-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[2,2,2,2,4,5,6,7]1776; SSE2-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,5,7,7]1777; SSE2-NEXT:    pandn %xmm2, %xmm51778; SSE2-NEXT:    por %xmm4, %xmm51779; SSE2-NEXT:    psrlq $16, %xmm01780; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,2,2,3]1781; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[3,1,1,3]1782; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,2,1,4,5,6,7]1783; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,4]1784; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]1785; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]1786; SSE2-NEXT:    packuswb %xmm5, %xmm21787; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255]1788; SSE2-NEXT:    pand %xmm0, %xmm21789; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,1,1,3,4,5,6,7]1790; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]1791; SSE2-NEXT:    pandn %xmm1, %xmm01792; SSE2-NEXT:    por %xmm2, %xmm01793; SSE2-NEXT:    retq1794;1795; SSSE3-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1796; SSSE3:       # %bb.0: # %entry1797; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[2],zero,zero,zero1798; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,10,2,7],zero,xmm0[14,7,2],zero,xmm0[3,1,14],zero,xmm0[9,11,0]1799; SSSE3-NEXT:    por %xmm1, %xmm01800; SSSE3-NEXT:    retq1801;1802; SSE41-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1803; SSE41:       # %bb.0: # %entry1804; SSE41-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[2],zero,zero,zero1805; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,10,2,7],zero,xmm0[14,7,2],zero,xmm0[3,1,14],zero,xmm0[9,11,0]1806; SSE41-NEXT:    por %xmm1, %xmm01807; SSE41-NEXT:    retq1808;1809; AVX1-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1810; AVX1:       # %bb.0: # %entry1811; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[2],zero,zero,zero1812; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[u,10,2,7],zero,xmm0[14,7,2],zero,xmm0[3,1,14],zero,xmm0[9,11,0]1813; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm01814; AVX1-NEXT:    retq1815;1816; AVX2-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1817; AVX2:       # %bb.0: # %entry1818; AVX2-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[2],zero,zero,zero1819; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[u,10,2,7],zero,xmm0[14,7,2],zero,xmm0[3,1,14],zero,xmm0[9,11,0]1820; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm01821; AVX2-NEXT:    retq1822;1823; AVX512VLBW-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1824; AVX512VLBW:       # %bb.0: # %entry1825; AVX512VLBW-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[u],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[2],zero,zero,zero1826; AVX512VLBW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[u,10,2,7],zero,xmm0[14,7,2],zero,xmm0[3,1,14],zero,xmm0[9,11,0]1827; AVX512VLBW-NEXT:    vpor %xmm1, %xmm0, %xmm01828; AVX512VLBW-NEXT:    retq1829;1830; AVX512VLVBMI-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1831; AVX512VLVBMI:       # %bb.0: # %entry1832; AVX512VLVBMI-NEXT:    vmovdqa {{.*#+}} xmm2 = [u,10,2,7,22,14,7,2,18,3,1,14,18,9,11,0]1833; AVX512VLVBMI-NEXT:    vpermt2b %xmm1, %xmm2, %xmm01834; AVX512VLVBMI-NEXT:    retq1835;1836; XOP-LABEL: shuffle_v16i8_uu_10_02_07_22_14_07_02_18_03_01_14_18_09_11_00:1837; XOP:       # %bb.0: # %entry1838; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[u,10,2,7],xmm1[6],xmm0[14,7,2],xmm1[2],xmm0[3,1,14],xmm1[2],xmm0[9,11,0]1839; XOP-NEXT:    retq1840entry:1841  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 poison, i32 10, i32 2, i32 7, i32 22, i32 14, i32 7, i32 2, i32 18, i32 3, i32 1, i32 14, i32 18, i32 9, i32 11, i32 0>1842 1843  ret <16 x i8> %shuffle1844}1845 1846define <16 x i8> @shuffe_v16i8_shift_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30(<8 x i16> %a0, <8 x i16> %a1) {1847; SSE-LABEL: shuffe_v16i8_shift_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:1848; SSE:       # %bb.0:1849; SSE-NEXT:    psrlw $8, %xmm01850; SSE-NEXT:    psrlw $8, %xmm11851; SSE-NEXT:    packuswb %xmm1, %xmm01852; SSE-NEXT:    retq1853;1854; AVX1-LABEL: shuffe_v16i8_shift_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:1855; AVX1:       # %bb.0:1856; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm01857; AVX1-NEXT:    vpsrlw $8, %xmm1, %xmm11858; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01859; AVX1-NEXT:    retq1860;1861; AVX2OR512VL-LABEL: shuffe_v16i8_shift_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:1862; AVX2OR512VL:       # %bb.0:1863; AVX2OR512VL-NEXT:    vpsrlw $8, %xmm0, %xmm01864; AVX2OR512VL-NEXT:    vpsrlw $8, %xmm1, %xmm11865; AVX2OR512VL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm01866; AVX2OR512VL-NEXT:    retq1867;1868; XOP-LABEL: shuffe_v16i8_shift_00_02_04_06_08_10_12_14_16_18_20_22_24_26_28_30:1869; XOP:       # %bb.0:1870; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15],xmm1[1,3,5,7,9,11,13,15]1871; XOP-NEXT:    retq1872  %1 = lshr <8 x i16> %a0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>1873  %2 = lshr <8 x i16> %a1, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>1874  %3 = bitcast <8 x i16> %1 to <16 x i8>1875  %4 = bitcast <8 x i16> %2 to <16 x i8>1876  %5 = shufflevector <16 x i8> %3, <16 x i8> %4, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>1877  ret <16 x i8> %51878}1879 1880define <16 x i8> @stress_test2(<16 x i8> %s.0.0, <16 x i8> %s.0.1, <16 x i8> %s.0.2) {1881; Nothing interesting to test here. Just make sure we didn't crashe.1882; ALL-LABEL: stress_test2:1883; ALL:         retq1884entry:1885  %s.1.0 = shufflevector <16 x i8> %s.0.0, <16 x i8> %s.0.1, <16 x i32> <i32 29, i32 30, i32 2, i32 16, i32 26, i32 21, i32 11, i32 26, i32 26, i32 3, i32 4, i32 5, i32 30, i32 28, i32 15, i32 5>1886  %s.1.1 = shufflevector <16 x i8> %s.0.1, <16 x i8> %s.0.2, <16 x i32> <i32 31, i32 1, i32 24, i32 12, i32 28, i32 5, i32 2, i32 9, i32 29, i32 1, i32 31, i32 5, i32 6, i32 17, i32 15, i32 22>1887  %s.2.0 = shufflevector <16 x i8> %s.1.0, <16 x i8> %s.1.1, <16 x i32> <i32 22, i32 1, i32 12, i32 3, i32 30, i32 4, i32 30, i32 poison, i32 1, i32 10, i32 14, i32 18, i32 27, i32 13, i32 16, i32 19>1888 1889  ret <16 x i8> %s.2.01890}1891 1892define void @constant_gets_selected(ptr %ptr1, ptr %ptr2) {1893; SSE-LABEL: constant_gets_selected:1894; SSE:       # %bb.0: # %entry1895; SSE-NEXT:    xorps %xmm0, %xmm01896; SSE-NEXT:    movaps %xmm0, (%rdi)1897; SSE-NEXT:    movaps %xmm0, (%rsi)1898; SSE-NEXT:    retq1899;1900; AVX-LABEL: constant_gets_selected:1901; AVX:       # %bb.0: # %entry1902; AVX-NEXT:    vxorps %xmm0, %xmm0, %xmm01903; AVX-NEXT:    vmovaps %xmm0, (%rdi)1904; AVX-NEXT:    vmovaps %xmm0, (%rsi)1905; AVX-NEXT:    retq1906entry:1907  %weird_zero = bitcast <4 x i32> zeroinitializer to <16 x i8>1908  %shuffle.i = shufflevector <16 x i8> <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 0, i8 0, i8 0, i8 0>, <16 x i8> %weird_zero, <16 x i32> <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>1909  %weirder_zero = bitcast <16 x i8> %shuffle.i to <4 x i32>1910  store <4 x i32> %weirder_zero, ptr %ptr1, align 161911  store <4 x i32> zeroinitializer, ptr %ptr2, align 161912  ret void1913}1914 1915;1916; Shuffle to logical bit shifts1917;1918 1919define <16 x i8> @shuffle_v16i8_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14(<16 x i8> %a, <16 x i8> %b) {1920; SSE-LABEL: shuffle_v16i8_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14:1921; SSE:       # %bb.0:1922; SSE-NEXT:    psllw $8, %xmm01923; SSE-NEXT:    retq1924;1925; AVX-LABEL: shuffle_v16i8_zz_00_zz_02_zz_04_zz_06_zz_08_zz_10_zz_12_zz_14:1926; AVX:       # %bb.0:1927; AVX-NEXT:    vpsllw $8, %xmm0, %xmm01928; AVX-NEXT:    retq1929  %shuffle = shufflevector <16 x i8> %a, <16 x i8> 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>1930  ret <16 x i8> %shuffle1931}1932 1933define <16 x i8> @shuffle_v16i8_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12(<16 x i8> %a, <16 x i8> %b) {1934; SSE-LABEL: shuffle_v16i8_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12:1935; SSE:       # %bb.0:1936; SSE-NEXT:    pslld $24, %xmm01937; SSE-NEXT:    retq1938;1939; AVX-LABEL: shuffle_v16i8_zz_zz_zz_00_zz_zz_zz_04_zz_zz_zz_08_zz_zz_zz_12:1940; AVX:       # %bb.0:1941; AVX-NEXT:    vpslld $24, %xmm0, %xmm01942; AVX-NEXT:    retq1943  %shuffle = shufflevector <16 x i8> %a, <16 x i8> 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>1944  ret <16 x i8> %shuffle1945}1946 1947define <16 x i8> @shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_00_zz_zz_zz_zz_zz_zz_zz_08(<16 x i8> %a, <16 x i8> %b) {1948; SSE-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_00_zz_zz_zz_zz_zz_zz_zz_08:1949; SSE:       # %bb.0:1950; SSE-NEXT:    psllq $56, %xmm01951; SSE-NEXT:    retq1952;1953; AVX-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_00_zz_zz_zz_zz_zz_zz_zz_08:1954; AVX:       # %bb.0:1955; AVX-NEXT:    vpsllq $56, %xmm0, %xmm01956; AVX-NEXT:    retq1957  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 8>1958  ret <16 x i8> %shuffle1959}1960 1961define <16 x i8> @shuffle_v16i8_zz_00_uu_02_03_uu_05_06_zz_08_09_uu_11_12_13_14(<16 x i8> %a, <16 x i8> %b) {1962; SSE-LABEL: shuffle_v16i8_zz_00_uu_02_03_uu_05_06_zz_08_09_uu_11_12_13_14:1963; SSE:       # %bb.0:1964; SSE-NEXT:    psllq $8, %xmm01965; SSE-NEXT:    retq1966;1967; AVX-LABEL: shuffle_v16i8_zz_00_uu_02_03_uu_05_06_zz_08_09_uu_11_12_13_14:1968; AVX:       # %bb.0:1969; AVX-NEXT:    vpsllq $8, %xmm0, %xmm01970; AVX-NEXT:    retq1971  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 0, i32 poison, i32 2, i32 3, i32 poison, i32 5, i32 6, i32 16, i32 8, i32 9, i32 poison, i32 11, i32 12, i32 13, i32 14>1972  ret <16 x i8> %shuffle1973}1974 1975define <16 x i8> @shuffle_v16i8_01_uu_uu_uu_uu_zz_uu_zz_uu_zz_11_zz_13_zz_15_zz(<16 x i8> %a, <16 x i8> %b) {1976; SSE-LABEL: shuffle_v16i8_01_uu_uu_uu_uu_zz_uu_zz_uu_zz_11_zz_13_zz_15_zz:1977; SSE:       # %bb.0:1978; SSE-NEXT:    psrlw $8, %xmm01979; SSE-NEXT:    retq1980;1981; AVX-LABEL: shuffle_v16i8_01_uu_uu_uu_uu_zz_uu_zz_uu_zz_11_zz_13_zz_15_zz:1982; AVX:       # %bb.0:1983; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm01984; AVX-NEXT:    retq1985  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 16, i32 poison, i32 16, i32 poison, i32 16, i32 11, i32 16, i32 13, i32 16, i32 15, i32 16>1986  ret <16 x i8> %shuffle1987}1988 1989define <16 x i8> @shuffle_v16i8_02_03_zz_zz_06_07_uu_uu_uu_uu_uu_uu_14_15_zz_zz(<16 x i8> %a, <16 x i8> %b) {1990; SSE-LABEL: shuffle_v16i8_02_03_zz_zz_06_07_uu_uu_uu_uu_uu_uu_14_15_zz_zz:1991; SSE:       # %bb.0:1992; SSE-NEXT:    psrld $16, %xmm01993; SSE-NEXT:    retq1994;1995; AVX-LABEL: shuffle_v16i8_02_03_zz_zz_06_07_uu_uu_uu_uu_uu_uu_14_15_zz_zz:1996; AVX:       # %bb.0:1997; AVX-NEXT:    vpsrld $16, %xmm0, %xmm01998; AVX-NEXT:    retq1999  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 2, i32 3, i32 16, i32 16, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 14, i32 15, i32 16, i32 16>2000  ret <16 x i8> %shuffle2001}2002 2003define <16 x i8> @shuffle_v16i8_07_zz_zz_zz_zz_zz_uu_uu_15_uu_uu_uu_uu_uu_zz_zz(<16 x i8> %a, <16 x i8> %b) {2004; SSE-LABEL: shuffle_v16i8_07_zz_zz_zz_zz_zz_uu_uu_15_uu_uu_uu_uu_uu_zz_zz:2005; SSE:       # %bb.0:2006; SSE-NEXT:    psrlq $56, %xmm02007; SSE-NEXT:    retq2008;2009; AVX-LABEL: shuffle_v16i8_07_zz_zz_zz_zz_zz_uu_uu_15_uu_uu_uu_uu_uu_zz_zz:2010; AVX:       # %bb.0:2011; AVX-NEXT:    vpsrlq $56, %xmm0, %xmm02012; AVX-NEXT:    retq2013  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 7, i32 16, i32 16, i32 16, i32 16, i32 16, i32 poison, i32 poison, i32 15, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 16, i32 16>2014  ret <16 x i8> %shuffle2015}2016 2017define <16 x i8> @shuffle_v16i8_zz_zz_zz_zz_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz(<16 x i8> %a) {2018; SSE2-LABEL: shuffle_v16i8_zz_zz_zz_zz_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz:2019; SSE2:       # %bb.0:2020; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]2021; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2022; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11]2023; SSE2-NEXT:    retq2024;2025; SSSE3-LABEL: shuffle_v16i8_zz_zz_zz_zz_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz:2026; SSSE3:       # %bb.0:2027; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[1,2,3,4,5,6],zero,zero,zero,zero,zero,zero2028; SSSE3-NEXT:    retq2029;2030; SSE41-LABEL: shuffle_v16i8_zz_zz_zz_zz_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz:2031; SSE41:       # %bb.0:2032; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[1,2,3,4,5,6],zero,zero,zero,zero,zero,zero2033; SSE41-NEXT:    retq2034;2035; AVX-LABEL: shuffle_v16i8_zz_zz_zz_zz_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz:2036; AVX:       # %bb.0:2037; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[1,2,3,4,5,6],zero,zero,zero,zero,zero,zero2038; AVX-NEXT:    retq2039  %shuffle = shufflevector <16 x i8> %a, <16 x i8> <i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, <16 x i32> <i32 16, i32 16, i32 16, i32 16, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>2040  ret <16 x i8> %shuffle2041}2042 2043define <16 x i8> @shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz(<16 x i8> %a) {2044; SSE-LABEL: shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:2045; SSE:       # %bb.0:2046; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]2047; SSE-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2048; SSE-NEXT:    retq2049;2050; AVX1-LABEL: shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:2051; AVX1:       # %bb.0:2052; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]2053; AVX1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2054; AVX1-NEXT:    retq2055;2056; AVX2-SLOW-LABEL: shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:2057; AVX2-SLOW:       # %bb.0:2058; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]2059; AVX2-SLOW-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2060; AVX2-SLOW-NEXT:    retq2061;2062; AVX2-FAST-LABEL: shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:2063; AVX2-FAST:       # %bb.0:2064; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2065; AVX2-FAST-NEXT:    retq2066;2067; AVX512VL-LABEL: shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:2068; AVX512VL:       # %bb.0:2069; AVX512VL-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2070; AVX512VL-NEXT:    retq2071;2072; XOP-LABEL: shuffle_v16i8_01_02_03_04_05_06_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz:2073; XOP:       # %bb.0:2074; XOP-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6]2075; XOP-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero2076; XOP-NEXT:    retq2077  %shuffle = shufflevector <16 x i8> %a, <16 x i8> <i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>2078  ret <16 x i8> %shuffle2079}2080 2081define <16 x i8> @shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06(<16 x i8> %a) {2082; SSE-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06:2083; SSE:       # %bb.0:2084; SSE-NEXT:    psrlq $8, %xmm02085; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]2086; SSE-NEXT:    retq2087;2088; AVX1-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06:2089; AVX1:       # %bb.0:2090; AVX1-NEXT:    vpsrlq $8, %xmm0, %xmm02091; AVX1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]2092; AVX1-NEXT:    retq2093;2094; AVX2-SLOW-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06:2095; AVX2-SLOW:       # %bb.0:2096; AVX2-SLOW-NEXT:    vpsrlq $8, %xmm0, %xmm02097; AVX2-SLOW-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]2098; AVX2-SLOW-NEXT:    retq2099;2100; AVX2-FAST-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06:2101; AVX2-FAST:       # %bb.0:2102; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[1,2,3,4,5,6]2103; AVX2-FAST-NEXT:    retq2104;2105; AVX512VL-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06:2106; AVX512VL:       # %bb.0:2107; AVX512VL-NEXT:    vpshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[1,2,3,4,5,6]2108; AVX512VL-NEXT:    retq2109;2110; XOP-LABEL: shuffle_v16i8_zz_zz_zz_zz_zz_zz_zz_zz_zz_zz_01_02_03_04_05_06:2111; XOP:       # %bb.0:2112; XOP-NEXT:    vpsrlq $8, %xmm0, %xmm02113; XOP-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5]2114; XOP-NEXT:    retq2115  %shuffle = shufflevector <16 x i8> %a, <16 x i8> <i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, <16 x i32> <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6>2116  ret <16 x i8> %shuffle2117}2118 2119define <16 x i8> @shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14(<16 x i8> %a) {2120; SSE2-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2121; SSE2:       # %bb.0:2122; SSE2-NEXT:    movdqa %xmm0, %xmm12123; SSE2-NEXT:    psrld $24, %xmm12124; SSE2-NEXT:    pslld $8, %xmm02125; SSE2-NEXT:    por %xmm1, %xmm02126; SSE2-NEXT:    retq2127;2128; SSSE3-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2129; SSSE3:       # %bb.0:2130; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14]2131; SSSE3-NEXT:    retq2132;2133; SSE41-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2134; SSE41:       # %bb.0:2135; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14]2136; SSE41-NEXT:    retq2137;2138; AVX1-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2139; AVX1:       # %bb.0:2140; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14]2141; AVX1-NEXT:    retq2142;2143; AVX2-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2144; AVX2:       # %bb.0:2145; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14]2146; AVX2-NEXT:    retq2147;2148; AVX512VL-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2149; AVX512VL:       # %bb.0:2150; AVX512VL-NEXT:    vprold $8, %xmm0, %xmm02151; AVX512VL-NEXT:    retq2152;2153; XOP-LABEL: shuffle_v16i8_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14:2154; XOP:       # %bb.0:2155; XOP-NEXT:    vprotd $8, %xmm0, %xmm02156; XOP-NEXT:    retq2157  %shuffle = shufflevector <16 x i8> %a, <16 x i8> 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>2158  ret <16 x i8> %shuffle2159}2160 2161; PR443792162define <16 x i8> @shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09(<16 x i8> %a) {2163; SSE-LABEL: shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09:2164; SSE:       # %bb.0:2165; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]2166; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]2167; SSE-NEXT:    retq2168;2169; AVX1-LABEL: shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09:2170; AVX1:       # %bb.0:2171; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]2172; AVX1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]2173; AVX1-NEXT:    retq2174;2175; AVX2-SLOW-LABEL: shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09:2176; AVX2-SLOW:       # %bb.0:2177; AVX2-SLOW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,2,3,0,4,5,6,7]2178; AVX2-SLOW-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,6,7,4]2179; AVX2-SLOW-NEXT:    retq2180;2181; AVX2-FAST-LABEL: shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09:2182; AVX2-FAST:       # %bb.0:2183; AVX2-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,3,4,5,6,7,0,1,10,11,12,13,14,15,8,9]2184; AVX2-FAST-NEXT:    retq2185;2186; AVX512VL-LABEL: shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09:2187; AVX512VL:       # %bb.0:2188; AVX512VL-NEXT:    vprolq $48, %xmm0, %xmm02189; AVX512VL-NEXT:    retq2190;2191; XOP-LABEL: shuffle_v16i8_02_03_04_05_06_07_00_01_10_11_12_13_14_15_08_09:2192; XOP:       # %bb.0:2193; XOP-NEXT:    vprotq $48, %xmm0, %xmm02194; XOP-NEXT:    retq2195  %shuffle = shufflevector <16 x i8> %a, <16 x i8> poison, <16 x i32> <i32 2, 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>2196  ret <16 x i8> %shuffle2197}2198 2199define <16 x i8> @PR12412(<16 x i8> %inval1, <16 x i8> %inval2) {2200; SSE2-LABEL: PR12412:2201; SSE2:       # %bb.0: # %entry2202; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]2203; SSE2-NEXT:    pand %xmm2, %xmm12204; SSE2-NEXT:    pand %xmm2, %xmm02205; SSE2-NEXT:    packuswb %xmm1, %xmm02206; SSE2-NEXT:    retq2207;2208; SSSE3-LABEL: PR12412:2209; SSSE3:       # %bb.0: # %entry2210; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]2211; SSSE3-NEXT:    pand %xmm2, %xmm12212; SSSE3-NEXT:    pand %xmm2, %xmm02213; SSSE3-NEXT:    packuswb %xmm1, %xmm02214; SSSE3-NEXT:    retq2215;2216; SSE41-LABEL: PR12412:2217; SSE41:       # %bb.0: # %entry2218; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]2219; SSE41-NEXT:    pand %xmm2, %xmm12220; SSE41-NEXT:    pand %xmm2, %xmm02221; SSE41-NEXT:    packuswb %xmm1, %xmm02222; SSE41-NEXT:    retq2223;2224; AVX1-LABEL: PR12412:2225; AVX1:       # %bb.0: # %entry2226; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]2227; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm12228; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm02229; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm02230; AVX1-NEXT:    retq2231;2232; AVX2-LABEL: PR12412:2233; AVX2:       # %bb.0: # %entry2234; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]2235; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm12236; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm02237; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm02238; AVX2-NEXT:    retq2239;2240; AVX512VL-LABEL: PR12412:2241; AVX512VL:       # %bb.0: # %entry2242; AVX512VL-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm02243; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm02244; AVX512VL-NEXT:    vpmovwb %ymm0, %xmm02245; AVX512VL-NEXT:    vzeroupper2246; AVX512VL-NEXT:    retq2247;2248; XOP-LABEL: PR12412:2249; XOP:       # %bb.0: # %entry2250; XOP-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14],xmm1[0,2,4,6,8,10,12,14]2251; XOP-NEXT:    retq2252entry:2253  %0 = shufflevector <16 x i8> %inval1, <16 x i8> %inval2, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>2254  ret <16 x i8> %02255}2256 2257define <16 x i8> @shuffle_v16i8_uu_02_03_zz_uu_06_07_zz_uu_10_11_zz_uu_14_15_zz(<16 x i8> %a) {2258; SSE-LABEL: shuffle_v16i8_uu_02_03_zz_uu_06_07_zz_uu_10_11_zz_uu_14_15_zz:2259; SSE:       # %bb.0:2260; SSE-NEXT:    psrld $8, %xmm02261; SSE-NEXT:    retq2262;2263; AVX-LABEL: shuffle_v16i8_uu_02_03_zz_uu_06_07_zz_uu_10_11_zz_uu_14_15_zz:2264; AVX:       # %bb.0:2265; AVX-NEXT:    vpsrld $8, %xmm0, %xmm02266; AVX-NEXT:    retq2267  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 poison, i32 2, i32 3, i32 16, i32 poison, i32 6, i32 7, i32 16, i32 poison, i32 10, i32 11, i32 16, i32 poison, i32 14, i32 15, i32 16>2268  ret <16 x i8> %shuffle2269}2270 2271define <16 x i8> @shuffle_v16i8_bitcast_unpack(<16 x i8> %a, <16 x i8> %b) {2272; SSE-LABEL: shuffle_v16i8_bitcast_unpack:2273; SSE:       # %bb.0:2274; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2275; SSE-NEXT:    retq2276;2277; AVX-LABEL: shuffle_v16i8_bitcast_unpack:2278; AVX:       # %bb.0:2279; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2280; AVX-NEXT:    retq2281  %shuffle8  = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 7, i32 23, i32 6, i32 22, i32 5, i32 21, i32 4, i32 20, i32 3, i32 19, i32 2, i32 18, i32 1, i32 17, i32 0, i32 16>2282  %bitcast32 = bitcast <16 x i8> %shuffle8 to <4 x float>2283  %shuffle32 = shufflevector <4 x float> %bitcast32, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>2284  %bitcast16 = bitcast <4 x float> %shuffle32 to <8 x i16>2285  %shuffle16 = shufflevector <8 x i16> %bitcast16, <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>2286  %bitcast8  = bitcast <8 x i16> %shuffle16 to <16 x i8>2287  ret <16 x i8> %bitcast82288}2289 2290define <16 x i8> @insert_dup_mem_v16i8_i32(ptr %ptr) {2291; SSE2-LABEL: insert_dup_mem_v16i8_i32:2292; SSE2:       # %bb.0:2293; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2294; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2295; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2296; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2297; SSE2-NEXT:    retq2298;2299; SSSE3-LABEL: insert_dup_mem_v16i8_i32:2300; SSSE3:       # %bb.0:2301; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2302; SSSE3-NEXT:    pxor %xmm1, %xmm12303; SSSE3-NEXT:    pshufb %xmm1, %xmm02304; SSSE3-NEXT:    retq2305;2306; SSE41-LABEL: insert_dup_mem_v16i8_i32:2307; SSE41:       # %bb.0:2308; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2309; SSE41-NEXT:    pxor %xmm1, %xmm12310; SSE41-NEXT:    pshufb %xmm1, %xmm02311; SSE41-NEXT:    retq2312;2313; AVX1-LABEL: insert_dup_mem_v16i8_i32:2314; AVX1:       # %bb.0:2315; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2316; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12317; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm02318; AVX1-NEXT:    retq2319;2320; AVX2OR512VL-LABEL: insert_dup_mem_v16i8_i32:2321; AVX2OR512VL:       # %bb.0:2322; AVX2OR512VL-NEXT:    vpbroadcastb (%rdi), %xmm02323; AVX2OR512VL-NEXT:    retq2324;2325; XOPAVX1-LABEL: insert_dup_mem_v16i8_i32:2326; XOPAVX1:       # %bb.0:2327; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2328; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12329; XOPAVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm02330; XOPAVX1-NEXT:    retq2331;2332; XOPAVX2-LABEL: insert_dup_mem_v16i8_i32:2333; XOPAVX2:       # %bb.0:2334; XOPAVX2-NEXT:    vpbroadcastb (%rdi), %xmm02335; XOPAVX2-NEXT:    retq2336  %tmp = load i32, ptr %ptr, align 42337  %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 02338  %tmp2 = bitcast <4 x i32> %tmp1 to <16 x i8>2339  %tmp3 = shufflevector <16 x i8> %tmp2, <16 x i8> poison, <16 x i32> zeroinitializer2340  ret <16 x i8> %tmp32341}2342 2343define <16 x i8> @insert_dup_mem_v16i8_sext_i8(ptr %ptr) {2344; SSE2-LABEL: insert_dup_mem_v16i8_sext_i8:2345; SSE2:       # %bb.0:2346; SSE2-NEXT:    movzbl (%rdi), %eax2347; SSE2-NEXT:    movd %eax, %xmm02348; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2349; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2350; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2351; SSE2-NEXT:    retq2352;2353; SSSE3-LABEL: insert_dup_mem_v16i8_sext_i8:2354; SSSE3:       # %bb.0:2355; SSSE3-NEXT:    movzbl (%rdi), %eax2356; SSSE3-NEXT:    movd %eax, %xmm02357; SSSE3-NEXT:    pxor %xmm1, %xmm12358; SSSE3-NEXT:    pshufb %xmm1, %xmm02359; SSSE3-NEXT:    retq2360;2361; SSE41-LABEL: insert_dup_mem_v16i8_sext_i8:2362; SSE41:       # %bb.0:2363; SSE41-NEXT:    movzbl (%rdi), %eax2364; SSE41-NEXT:    movd %eax, %xmm02365; SSE41-NEXT:    pxor %xmm1, %xmm12366; SSE41-NEXT:    pshufb %xmm1, %xmm02367; SSE41-NEXT:    retq2368;2369; AVX1-LABEL: insert_dup_mem_v16i8_sext_i8:2370; AVX1:       # %bb.0:2371; AVX1-NEXT:    movzbl (%rdi), %eax2372; AVX1-NEXT:    vmovd %eax, %xmm02373; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12374; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm02375; AVX1-NEXT:    retq2376;2377; AVX2OR512VL-LABEL: insert_dup_mem_v16i8_sext_i8:2378; AVX2OR512VL:       # %bb.0:2379; AVX2OR512VL-NEXT:    vpbroadcastb (%rdi), %xmm02380; AVX2OR512VL-NEXT:    retq2381;2382; XOPAVX1-LABEL: insert_dup_mem_v16i8_sext_i8:2383; XOPAVX1:       # %bb.0:2384; XOPAVX1-NEXT:    movzbl (%rdi), %eax2385; XOPAVX1-NEXT:    vmovd %eax, %xmm02386; XOPAVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12387; XOPAVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm02388; XOPAVX1-NEXT:    retq2389;2390; XOPAVX2-LABEL: insert_dup_mem_v16i8_sext_i8:2391; XOPAVX2:       # %bb.0:2392; XOPAVX2-NEXT:    vpbroadcastb (%rdi), %xmm02393; XOPAVX2-NEXT:    retq2394  %tmp = load i8, ptr %ptr, align 12395  %tmp1 = sext i8 %tmp to i322396  %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 02397  %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8>2398  %tmp4 = shufflevector <16 x i8> %tmp3, <16 x i8> poison, <16 x i32> zeroinitializer2399  ret <16 x i8> %tmp42400}2401 2402define <16 x i8> @insert_dup_elt1_mem_v16i8_i32(ptr %ptr) {2403; SSE2-LABEL: insert_dup_elt1_mem_v16i8_i32:2404; SSE2:       # %bb.0:2405; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2406; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2407; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]2408; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2409; SSE2-NEXT:    retq2410;2411; SSSE3-LABEL: insert_dup_elt1_mem_v16i8_i32:2412; SSSE3:       # %bb.0:2413; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2414; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2415; SSSE3-NEXT:    retq2416;2417; SSE41-LABEL: insert_dup_elt1_mem_v16i8_i32:2418; SSE41:       # %bb.0:2419; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2420; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2421; SSE41-NEXT:    retq2422;2423; AVX1-LABEL: insert_dup_elt1_mem_v16i8_i32:2424; AVX1:       # %bb.0:2425; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2426; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2427; AVX1-NEXT:    retq2428;2429; AVX2OR512VL-LABEL: insert_dup_elt1_mem_v16i8_i32:2430; AVX2OR512VL:       # %bb.0:2431; AVX2OR512VL-NEXT:    vpbroadcastb 1(%rdi), %xmm02432; AVX2OR512VL-NEXT:    retq2433;2434; XOPAVX1-LABEL: insert_dup_elt1_mem_v16i8_i32:2435; XOPAVX1:       # %bb.0:2436; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2437; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2438; XOPAVX1-NEXT:    retq2439;2440; XOPAVX2-LABEL: insert_dup_elt1_mem_v16i8_i32:2441; XOPAVX2:       # %bb.0:2442; XOPAVX2-NEXT:    vpbroadcastb 1(%rdi), %xmm02443; XOPAVX2-NEXT:    retq2444  %tmp = load i32, ptr %ptr, align 42445  %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 02446  %tmp2 = bitcast <4 x i32> %tmp1 to <16 x i8>2447  %tmp3 = shufflevector <16 x i8> %tmp2, <16 x i8> 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>2448  ret <16 x i8> %tmp32449}2450 2451define <16 x i8> @insert_dup_elt2_mem_v16i8_i32(ptr %ptr) {2452; SSE2-LABEL: insert_dup_elt2_mem_v16i8_i32:2453; SSE2:       # %bb.0:2454; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2455; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2456; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,2,2,2,4,5,6,7]2457; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2458; SSE2-NEXT:    retq2459;2460; SSSE3-LABEL: insert_dup_elt2_mem_v16i8_i32:2461; SSSE3:       # %bb.0:2462; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2463; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2464; SSSE3-NEXT:    retq2465;2466; SSE41-LABEL: insert_dup_elt2_mem_v16i8_i32:2467; SSE41:       # %bb.0:2468; SSE41-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2469; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2470; SSE41-NEXT:    retq2471;2472; AVX1-LABEL: insert_dup_elt2_mem_v16i8_i32:2473; AVX1:       # %bb.0:2474; AVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2475; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2476; AVX1-NEXT:    retq2477;2478; AVX2OR512VL-LABEL: insert_dup_elt2_mem_v16i8_i32:2479; AVX2OR512VL:       # %bb.0:2480; AVX2OR512VL-NEXT:    vpbroadcastb 2(%rdi), %xmm02481; AVX2OR512VL-NEXT:    retq2482;2483; XOPAVX1-LABEL: insert_dup_elt2_mem_v16i8_i32:2484; XOPAVX1:       # %bb.0:2485; XOPAVX1-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2486; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2487; XOPAVX1-NEXT:    retq2488;2489; XOPAVX2-LABEL: insert_dup_elt2_mem_v16i8_i32:2490; XOPAVX2:       # %bb.0:2491; XOPAVX2-NEXT:    vpbroadcastb 2(%rdi), %xmm02492; XOPAVX2-NEXT:    retq2493  %tmp = load i32, ptr %ptr, align 42494  %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 02495  %tmp2 = bitcast <4 x i32> %tmp1 to <16 x i8>2496  %tmp3 = shufflevector <16 x i8> %tmp2, <16 x i8> poison, <16 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>2497  ret <16 x i8> %tmp32498}2499 2500define <16 x i8> @insert_dup_elt1_mem_v16i8_sext_i8(ptr %ptr) {2501; SSE2-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2502; SSE2:       # %bb.0:2503; SSE2-NEXT:    movsbl (%rdi), %eax2504; SSE2-NEXT:    movd %eax, %xmm02505; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2506; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,1,1,1,4,5,6,7]2507; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2508; SSE2-NEXT:    retq2509;2510; SSSE3-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2511; SSSE3:       # %bb.0:2512; SSSE3-NEXT:    movsbl (%rdi), %eax2513; SSSE3-NEXT:    movd %eax, %xmm02514; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2515; SSSE3-NEXT:    retq2516;2517; SSE41-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2518; SSE41:       # %bb.0:2519; SSE41-NEXT:    movsbl (%rdi), %eax2520; SSE41-NEXT:    movd %eax, %xmm02521; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2522; SSE41-NEXT:    retq2523;2524; AVX1-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2525; AVX1:       # %bb.0:2526; AVX1-NEXT:    movsbl (%rdi), %eax2527; AVX1-NEXT:    vmovd %eax, %xmm02528; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2529; AVX1-NEXT:    retq2530;2531; AVX2-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2532; AVX2:       # %bb.0:2533; AVX2-NEXT:    movsbl (%rdi), %eax2534; AVX2-NEXT:    shrl $8, %eax2535; AVX2-NEXT:    vmovd %eax, %xmm02536; AVX2-NEXT:    vpbroadcastb %xmm0, %xmm02537; AVX2-NEXT:    retq2538;2539; AVX512VL-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2540; AVX512VL:       # %bb.0:2541; AVX512VL-NEXT:    movsbl (%rdi), %eax2542; AVX512VL-NEXT:    shrl $8, %eax2543; AVX512VL-NEXT:    vpbroadcastb %eax, %xmm02544; AVX512VL-NEXT:    retq2545;2546; XOPAVX1-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2547; XOPAVX1:       # %bb.0:2548; XOPAVX1-NEXT:    movsbl (%rdi), %eax2549; XOPAVX1-NEXT:    vmovd %eax, %xmm02550; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]2551; XOPAVX1-NEXT:    retq2552;2553; XOPAVX2-LABEL: insert_dup_elt1_mem_v16i8_sext_i8:2554; XOPAVX2:       # %bb.0:2555; XOPAVX2-NEXT:    movsbl (%rdi), %eax2556; XOPAVX2-NEXT:    shrl $8, %eax2557; XOPAVX2-NEXT:    vmovd %eax, %xmm02558; XOPAVX2-NEXT:    vpbroadcastb %xmm0, %xmm02559; XOPAVX2-NEXT:    retq2560  %tmp = load i8, ptr %ptr, align 12561  %tmp1 = sext i8 %tmp to i322562  %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 02563  %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8>2564  %tmp4 = shufflevector <16 x i8> %tmp3, <16 x i8> 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>2565  ret <16 x i8> %tmp42566}2567 2568define <16 x i8> @insert_dup_elt2_mem_v16i8_sext_i8(ptr %ptr) {2569; SSE2-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2570; SSE2:       # %bb.0:2571; SSE2-NEXT:    movsbl (%rdi), %eax2572; SSE2-NEXT:    movd %eax, %xmm02573; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2574; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,2,2,2,4,5,6,7]2575; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]2576; SSE2-NEXT:    retq2577;2578; SSSE3-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2579; SSSE3:       # %bb.0:2580; SSSE3-NEXT:    movsbl (%rdi), %eax2581; SSSE3-NEXT:    movd %eax, %xmm02582; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2583; SSSE3-NEXT:    retq2584;2585; SSE41-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2586; SSE41:       # %bb.0:2587; SSE41-NEXT:    movsbl (%rdi), %eax2588; SSE41-NEXT:    movd %eax, %xmm02589; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2590; SSE41-NEXT:    retq2591;2592; AVX1-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2593; AVX1:       # %bb.0:2594; AVX1-NEXT:    movsbl (%rdi), %eax2595; AVX1-NEXT:    vmovd %eax, %xmm02596; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2597; AVX1-NEXT:    retq2598;2599; AVX2-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2600; AVX2:       # %bb.0:2601; AVX2-NEXT:    movsbl (%rdi), %eax2602; AVX2-NEXT:    shrl $16, %eax2603; AVX2-NEXT:    vmovd %eax, %xmm02604; AVX2-NEXT:    vpbroadcastb %xmm0, %xmm02605; AVX2-NEXT:    retq2606;2607; AVX512VL-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2608; AVX512VL:       # %bb.0:2609; AVX512VL-NEXT:    movsbl (%rdi), %eax2610; AVX512VL-NEXT:    shrl $16, %eax2611; AVX512VL-NEXT:    vpbroadcastb %eax, %xmm02612; AVX512VL-NEXT:    retq2613;2614; XOPAVX1-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2615; XOPAVX1:       # %bb.0:2616; XOPAVX1-NEXT:    movsbl (%rdi), %eax2617; XOPAVX1-NEXT:    vmovd %eax, %xmm02618; XOPAVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]2619; XOPAVX1-NEXT:    retq2620;2621; XOPAVX2-LABEL: insert_dup_elt2_mem_v16i8_sext_i8:2622; XOPAVX2:       # %bb.0:2623; XOPAVX2-NEXT:    movsbl (%rdi), %eax2624; XOPAVX2-NEXT:    shrl $16, %eax2625; XOPAVX2-NEXT:    vmovd %eax, %xmm02626; XOPAVX2-NEXT:    vpbroadcastb %xmm0, %xmm02627; XOPAVX2-NEXT:    retq2628  %tmp = load i8, ptr %ptr, align 12629  %tmp1 = sext i8 %tmp to i322630  %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 02631  %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8>2632  %tmp4 = shufflevector <16 x i8> %tmp3, <16 x i8> poison, <16 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>2633  ret <16 x i8> %tmp42634}2635 2636define <16 x i8> @PR31364(ptr nocapture readonly %a, ptr nocapture readonly %b) {2637; SSE2-LABEL: PR31364:2638; SSE2:       # %bb.0:2639; SSE2-NEXT:    movzbl (%rdi), %eax2640; SSE2-NEXT:    movzbl (%rsi), %ecx2641; SSE2-NEXT:    shll $8, %ecx2642; SSE2-NEXT:    orl %eax, %ecx2643; SSE2-NEXT:    movd %ecx, %xmm12644; SSE2-NEXT:    pxor %xmm0, %xmm02645; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]2646; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[1,1,1,3,4,5,6,7]2647; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,0,1]2648; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]2649; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,1,1,1,4,5,6,7]2650; SSE2-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,4,4,4]2651; SSE2-NEXT:    packuswb %xmm1, %xmm02652; SSE2-NEXT:    retq2653;2654; SSSE3-LABEL: PR31364:2655; SSSE3:       # %bb.0:2656; SSSE3-NEXT:    movzbl (%rdi), %eax2657; SSSE3-NEXT:    movzbl (%rsi), %ecx2658; SSSE3-NEXT:    shll $8, %ecx2659; SSSE3-NEXT:    orl %eax, %ecx2660; SSSE3-NEXT:    movd %ecx, %xmm02661; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1],zero,xmm0[1,1,1,1,1,0,0,0]2662; SSSE3-NEXT:    retq2663;2664; SSE41-LABEL: PR31364:2665; SSE41:       # %bb.0:2666; SSE41-NEXT:    movzbl (%rdi), %eax2667; SSE41-NEXT:    movd %eax, %xmm02668; SSE41-NEXT:    pinsrb $1, (%rsi), %xmm02669; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1],zero,xmm0[1,1,1,1,1,0,0,0]2670; SSE41-NEXT:    retq2671;2672; AVX-LABEL: PR31364:2673; AVX:       # %bb.0:2674; AVX-NEXT:    movzbl (%rdi), %eax2675; AVX-NEXT:    vmovd %eax, %xmm02676; AVX-NEXT:    vpinsrb $1, (%rsi), %xmm0, %xmm02677; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,1,1,1,1,1,1],zero,xmm0[1,1,1,1,1,0,0,0]2678; AVX-NEXT:    retq2679  %v0 = load i8, ptr %a, align 12680  %vecins = insertelement <16 x i8> <i8 poison, i8 poison, i8 poison, i8 0, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, i8 %v0, i32 02681  %v1 = load i8, ptr %b, align 12682  %vecins2 = insertelement <16 x i8> %vecins, i8 %v1, i32 12683  %result = shufflevector <16 x i8> %vecins2, <16 x i8> poison, <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 3, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0>2684  ret <16 x i8> %result2685}2686 2687define <16 x i8> @PR31301(ptr nocapture readonly %x, ptr nocapture readonly %y)  {2688; SSE2-LABEL: PR31301:2689; SSE2:       # %bb.0: # %entry2690; SSE2-NEXT:    movzbl (%rdi), %eax2691; SSE2-NEXT:    movd %eax, %xmm02692; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2693; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]2694; SSE2-NEXT:    movzbl (%rsi), %eax2695; SSE2-NEXT:    movd %eax, %xmm12696; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]2697; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]2698; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2699; SSE2-NEXT:    retq2700;2701; SSSE3-LABEL: PR31301:2702; SSSE3:       # %bb.0: # %entry2703; SSSE3-NEXT:    movzbl (%rdi), %eax2704; SSSE3-NEXT:    movd %eax, %xmm02705; SSSE3-NEXT:    pxor %xmm1, %xmm12706; SSSE3-NEXT:    pshufb %xmm1, %xmm02707; SSSE3-NEXT:    movzbl (%rsi), %eax2708; SSSE3-NEXT:    movd %eax, %xmm22709; SSSE3-NEXT:    pshufb %xmm1, %xmm22710; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]2711; SSSE3-NEXT:    retq2712;2713; SSE41-LABEL: PR31301:2714; SSE41:       # %bb.0: # %entry2715; SSE41-NEXT:    movzbl (%rdi), %eax2716; SSE41-NEXT:    movd %eax, %xmm02717; SSE41-NEXT:    pxor %xmm1, %xmm12718; SSE41-NEXT:    pshufb %xmm1, %xmm02719; SSE41-NEXT:    movzbl (%rsi), %eax2720; SSE41-NEXT:    movd %eax, %xmm22721; SSE41-NEXT:    pshufb %xmm1, %xmm22722; SSE41-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]2723; SSE41-NEXT:    retq2724;2725; AVX1-LABEL: PR31301:2726; AVX1:       # %bb.0: # %entry2727; AVX1-NEXT:    movzbl (%rdi), %eax2728; AVX1-NEXT:    vmovd %eax, %xmm02729; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm12730; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm02731; AVX1-NEXT:    movzbl (%rsi), %eax2732; AVX1-NEXT:    vmovd %eax, %xmm22733; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm12734; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2735; AVX1-NEXT:    retq2736;2737; AVX2OR512VL-LABEL: PR31301:2738; AVX2OR512VL:       # %bb.0: # %entry2739; AVX2OR512VL-NEXT:    vpbroadcastb (%rdi), %xmm02740; AVX2OR512VL-NEXT:    vpbroadcastb (%rsi), %xmm12741; AVX2OR512VL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2742; AVX2OR512VL-NEXT:    retq2743;2744; XOPAVX1-LABEL: PR31301:2745; XOPAVX1:       # %bb.0: # %entry2746; XOPAVX1-NEXT:    movzbl (%rdi), %eax2747; XOPAVX1-NEXT:    vmovd %eax, %xmm02748; XOPAVX1-NEXT:    movzbl (%rsi), %eax2749; XOPAVX1-NEXT:    vmovd %eax, %xmm12750; XOPAVX1-NEXT:    vpperm {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[0],xmm1[0],xmm0[0],xmm1[0],xmm0[0],xmm1[0],xmm0[0],xmm1[0],xmm0[0],xmm1[0],xmm0[0],xmm1[0],xmm0[0],xmm1[0]2751; XOPAVX1-NEXT:    retq2752;2753; XOPAVX2-LABEL: PR31301:2754; XOPAVX2:       # %bb.0: # %entry2755; XOPAVX2-NEXT:    vpbroadcastb (%rdi), %xmm02756; XOPAVX2-NEXT:    vpbroadcastb (%rsi), %xmm12757; XOPAVX2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2758; XOPAVX2-NEXT:    retq2759entry:2760  %0 = load i8, ptr %x, align 12761  %1 = insertelement <16 x i8> poison, i8 %0, i32 02762  %lane = shufflevector <16 x i8> %1, <16 x i8> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>2763  %2 = load i8, ptr %y, align 12764  %3 = insertelement <16 x i8> poison, i8 %2, i32 02765  %lane3 = shufflevector <16 x i8> %3, <16 x i8> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>2766  %vzip.i = shufflevector <16 x i8> %lane, <16 x i8> %lane3, <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>2767  ret <16 x i8> %vzip.i2768}2769 2770define <8 x i16> @PR104482(<16 x i8> %i) {2771; SSE2-LABEL: PR104482:2772; SSE2:       # %bb.0:2773; SSE2-NEXT:    pxor %xmm1, %xmm12774; SSE2-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]2775; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]2776; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]2777; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]2778; SSE2-NEXT:    packuswb %xmm0, %xmm02779; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]2780; SSE2-NEXT:    retq2781;2782; SSSE3-LABEL: PR104482:2783; SSSE3:       # %bb.0:2784; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[15],zero,xmm0[14],zero,xmm0[13],zero,xmm0[12],zero,xmm0[11],zero,xmm0[10],zero,xmm0[9],zero,xmm0[8],zero2785; SSSE3-NEXT:    retq2786;2787; SSE41-LABEL: PR104482:2788; SSE41:       # %bb.0:2789; SSE41-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[15],zero,xmm0[14],zero,xmm0[13],zero,xmm0[12],zero,xmm0[11],zero,xmm0[10],zero,xmm0[9],zero,xmm0[8],zero2790; SSE41-NEXT:    retq2791;2792; AVX-LABEL: PR104482:2793; AVX:       # %bb.0:2794; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[15],zero,xmm0[14],zero,xmm0[13],zero,xmm0[12],zero,xmm0[11],zero,xmm0[10],zero,xmm0[9],zero,xmm0[8],zero2795; AVX-NEXT:    retq2796  %i7 = shufflevector <16 x i8> %i, <16 x i8> <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>2797  %1 = bitcast <16 x i8> %i7 to <8 x i16>2798  %i10 = shufflevector <8 x i16> %1, <8 x i16> poison, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3>2799  %i11 = shufflevector <8 x i16> %i10, <8 x i16> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>2800  %i12 = shufflevector <8 x i16> %i11, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 5, i32 4>2801  ret <8 x i16> %i122802}2803