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