1205 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE3; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx | FileCheck %s --check-prefixes=AVX4; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX25; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX2-FP6; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX2-FCP7; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl | FileCheck %s --check-prefixes=AVX5128; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512-FCP9; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefixes=AVX512DQ10; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512DQ-FCP11; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512BW12; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512BW-FCP13; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq,+avx512bw | FileCheck %s --check-prefixes=AVX512DQ-BW14; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX512DQ-BW-FCP15 16; These patterns are produced by LoopVectorizer for interleaved loads.17 18define void @load_i8_stride2_vf2(ptr %in.vec, ptr %out.vec0, ptr %out.vec1) nounwind {19; SSE-LABEL: load_i8_stride2_vf2:20; SSE: # %bb.0:21; SSE-NEXT: movdqa (%rdi), %xmm022; SSE-NEXT: movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]23; SSE-NEXT: pand %xmm0, %xmm124; SSE-NEXT: packuswb %xmm1, %xmm125; SSE-NEXT: psrlw $8, %xmm026; SSE-NEXT: packuswb %xmm0, %xmm027; SSE-NEXT: movd %xmm1, %eax28; SSE-NEXT: movw %ax, (%rsi)29; SSE-NEXT: movd %xmm0, %eax30; SSE-NEXT: movw %ax, (%rdx)31; SSE-NEXT: retq32;33; AVX-LABEL: load_i8_stride2_vf2:34; AVX: # %bb.0:35; AVX-NEXT: vmovdqa (%rdi), %xmm036; AVX-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]37; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]38; AVX-NEXT: vpextrw $0, %xmm1, (%rsi)39; AVX-NEXT: vpextrw $0, %xmm0, (%rdx)40; AVX-NEXT: retq41;42; AVX2-LABEL: load_i8_stride2_vf2:43; AVX2: # %bb.0:44; AVX2-NEXT: vmovdqa (%rdi), %xmm045; AVX2-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]46; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]47; AVX2-NEXT: vpextrw $0, %xmm1, (%rsi)48; AVX2-NEXT: vpextrw $0, %xmm0, (%rdx)49; AVX2-NEXT: retq50;51; AVX2-FP-LABEL: load_i8_stride2_vf2:52; AVX2-FP: # %bb.0:53; AVX2-FP-NEXT: vmovdqa (%rdi), %xmm054; AVX2-FP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]55; AVX2-FP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]56; AVX2-FP-NEXT: vpextrw $0, %xmm1, (%rsi)57; AVX2-FP-NEXT: vpextrw $0, %xmm0, (%rdx)58; AVX2-FP-NEXT: retq59;60; AVX2-FCP-LABEL: load_i8_stride2_vf2:61; AVX2-FCP: # %bb.0:62; AVX2-FCP-NEXT: vmovdqa (%rdi), %xmm063; AVX2-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]64; AVX2-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]65; AVX2-FCP-NEXT: vpextrw $0, %xmm1, (%rsi)66; AVX2-FCP-NEXT: vpextrw $0, %xmm0, (%rdx)67; AVX2-FCP-NEXT: retq68;69; AVX512-LABEL: load_i8_stride2_vf2:70; AVX512: # %bb.0:71; AVX512-NEXT: vmovdqa (%rdi), %xmm072; AVX512-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]73; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]74; AVX512-NEXT: vpextrw $0, %xmm1, (%rsi)75; AVX512-NEXT: vpextrw $0, %xmm0, (%rdx)76; AVX512-NEXT: retq77;78; AVX512-FCP-LABEL: load_i8_stride2_vf2:79; AVX512-FCP: # %bb.0:80; AVX512-FCP-NEXT: vmovdqa (%rdi), %xmm081; AVX512-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]82; AVX512-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]83; AVX512-FCP-NEXT: vpextrw $0, %xmm1, (%rsi)84; AVX512-FCP-NEXT: vpextrw $0, %xmm0, (%rdx)85; AVX512-FCP-NEXT: retq86;87; AVX512DQ-LABEL: load_i8_stride2_vf2:88; AVX512DQ: # %bb.0:89; AVX512DQ-NEXT: vmovdqa (%rdi), %xmm090; AVX512DQ-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]91; AVX512DQ-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]92; AVX512DQ-NEXT: vpextrw $0, %xmm1, (%rsi)93; AVX512DQ-NEXT: vpextrw $0, %xmm0, (%rdx)94; AVX512DQ-NEXT: retq95;96; AVX512DQ-FCP-LABEL: load_i8_stride2_vf2:97; AVX512DQ-FCP: # %bb.0:98; AVX512DQ-FCP-NEXT: vmovdqa (%rdi), %xmm099; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,u,u,u,u,u,u,u,u,u,u,u,u,u,u]100; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]101; AVX512DQ-FCP-NEXT: vpextrw $0, %xmm1, (%rsi)102; AVX512DQ-FCP-NEXT: vpextrw $0, %xmm0, (%rdx)103; AVX512DQ-FCP-NEXT: retq104;105; AVX512BW-LABEL: load_i8_stride2_vf2:106; AVX512BW: # %bb.0:107; AVX512BW-NEXT: vmovdqa (%rdi), %xmm0108; AVX512BW-NEXT: vpmovwb %xmm0, %xmm1109; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]110; AVX512BW-NEXT: vpextrw $0, %xmm1, (%rsi)111; AVX512BW-NEXT: vpextrw $0, %xmm0, (%rdx)112; AVX512BW-NEXT: retq113;114; AVX512BW-FCP-LABEL: load_i8_stride2_vf2:115; AVX512BW-FCP: # %bb.0:116; AVX512BW-FCP-NEXT: vmovdqa (%rdi), %xmm0117; AVX512BW-FCP-NEXT: vpmovwb %xmm0, %xmm1118; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]119; AVX512BW-FCP-NEXT: vpextrw $0, %xmm1, (%rsi)120; AVX512BW-FCP-NEXT: vpextrw $0, %xmm0, (%rdx)121; AVX512BW-FCP-NEXT: retq122;123; AVX512DQ-BW-LABEL: load_i8_stride2_vf2:124; AVX512DQ-BW: # %bb.0:125; AVX512DQ-BW-NEXT: vmovdqa (%rdi), %xmm0126; AVX512DQ-BW-NEXT: vpmovwb %xmm0, %xmm1127; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]128; AVX512DQ-BW-NEXT: vpextrw $0, %xmm1, (%rsi)129; AVX512DQ-BW-NEXT: vpextrw $0, %xmm0, (%rdx)130; AVX512DQ-BW-NEXT: retq131;132; AVX512DQ-BW-FCP-LABEL: load_i8_stride2_vf2:133; AVX512DQ-BW-FCP: # %bb.0:134; AVX512DQ-BW-FCP-NEXT: vmovdqa (%rdi), %xmm0135; AVX512DQ-BW-FCP-NEXT: vpmovwb %xmm0, %xmm1136; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u]137; AVX512DQ-BW-FCP-NEXT: vpextrw $0, %xmm1, (%rsi)138; AVX512DQ-BW-FCP-NEXT: vpextrw $0, %xmm0, (%rdx)139; AVX512DQ-BW-FCP-NEXT: retq140 %wide.vec = load <4 x i8>, ptr %in.vec, align 64141 %strided.vec0 = shufflevector <4 x i8> %wide.vec, <4 x i8> poison, <2 x i32> <i32 0, i32 2>142 %strided.vec1 = shufflevector <4 x i8> %wide.vec, <4 x i8> poison, <2 x i32> <i32 1, i32 3>143 store <2 x i8> %strided.vec0, ptr %out.vec0, align 64144 store <2 x i8> %strided.vec1, ptr %out.vec1, align 64145 ret void146}147 148define void @load_i8_stride2_vf4(ptr %in.vec, ptr %out.vec0, ptr %out.vec1) nounwind {149; SSE-LABEL: load_i8_stride2_vf4:150; SSE: # %bb.0:151; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero152; SSE-NEXT: movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]153; SSE-NEXT: pand %xmm0, %xmm1154; SSE-NEXT: packuswb %xmm1, %xmm1155; SSE-NEXT: psrlw $8, %xmm0156; SSE-NEXT: packuswb %xmm0, %xmm0157; SSE-NEXT: movd %xmm1, (%rsi)158; SSE-NEXT: movd %xmm0, (%rdx)159; SSE-NEXT: retq160;161; AVX-LABEL: load_i8_stride2_vf4:162; AVX: # %bb.0:163; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero164; AVX-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]165; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]166; AVX-NEXT: vmovd %xmm1, (%rsi)167; AVX-NEXT: vmovd %xmm0, (%rdx)168; AVX-NEXT: retq169;170; AVX2-LABEL: load_i8_stride2_vf4:171; AVX2: # %bb.0:172; AVX2-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero173; AVX2-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]174; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]175; AVX2-NEXT: vmovd %xmm1, (%rsi)176; AVX2-NEXT: vmovd %xmm0, (%rdx)177; AVX2-NEXT: retq178;179; AVX2-FP-LABEL: load_i8_stride2_vf4:180; AVX2-FP: # %bb.0:181; AVX2-FP-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero182; AVX2-FP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]183; AVX2-FP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]184; AVX2-FP-NEXT: vmovd %xmm1, (%rsi)185; AVX2-FP-NEXT: vmovd %xmm0, (%rdx)186; AVX2-FP-NEXT: retq187;188; AVX2-FCP-LABEL: load_i8_stride2_vf4:189; AVX2-FCP: # %bb.0:190; AVX2-FCP-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero191; AVX2-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]192; AVX2-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]193; AVX2-FCP-NEXT: vmovd %xmm1, (%rsi)194; AVX2-FCP-NEXT: vmovd %xmm0, (%rdx)195; AVX2-FCP-NEXT: retq196;197; AVX512-LABEL: load_i8_stride2_vf4:198; AVX512: # %bb.0:199; AVX512-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero200; AVX512-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]201; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]202; AVX512-NEXT: vmovd %xmm1, (%rsi)203; AVX512-NEXT: vmovd %xmm0, (%rdx)204; AVX512-NEXT: retq205;206; AVX512-FCP-LABEL: load_i8_stride2_vf4:207; AVX512-FCP: # %bb.0:208; AVX512-FCP-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero209; AVX512-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]210; AVX512-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]211; AVX512-FCP-NEXT: vmovd %xmm1, (%rsi)212; AVX512-FCP-NEXT: vmovd %xmm0, (%rdx)213; AVX512-FCP-NEXT: retq214;215; AVX512DQ-LABEL: load_i8_stride2_vf4:216; AVX512DQ: # %bb.0:217; AVX512DQ-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero218; AVX512DQ-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]219; AVX512DQ-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]220; AVX512DQ-NEXT: vmovd %xmm1, (%rsi)221; AVX512DQ-NEXT: vmovd %xmm0, (%rdx)222; AVX512DQ-NEXT: retq223;224; AVX512DQ-FCP-LABEL: load_i8_stride2_vf4:225; AVX512DQ-FCP: # %bb.0:226; AVX512DQ-FCP-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero227; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,u,u,u,u,u,u,u,u,u,u,u,u]228; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]229; AVX512DQ-FCP-NEXT: vmovd %xmm1, (%rsi)230; AVX512DQ-FCP-NEXT: vmovd %xmm0, (%rdx)231; AVX512DQ-FCP-NEXT: retq232;233; AVX512BW-LABEL: load_i8_stride2_vf4:234; AVX512BW: # %bb.0:235; AVX512BW-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero236; AVX512BW-NEXT: vpmovwb %xmm0, %xmm1237; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]238; AVX512BW-NEXT: vmovd %xmm1, (%rsi)239; AVX512BW-NEXT: vmovd %xmm0, (%rdx)240; AVX512BW-NEXT: retq241;242; AVX512BW-FCP-LABEL: load_i8_stride2_vf4:243; AVX512BW-FCP: # %bb.0:244; AVX512BW-FCP-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero245; AVX512BW-FCP-NEXT: vpmovwb %xmm0, %xmm1246; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]247; AVX512BW-FCP-NEXT: vmovd %xmm1, (%rsi)248; AVX512BW-FCP-NEXT: vmovd %xmm0, (%rdx)249; AVX512BW-FCP-NEXT: retq250;251; AVX512DQ-BW-LABEL: load_i8_stride2_vf4:252; AVX512DQ-BW: # %bb.0:253; AVX512DQ-BW-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero254; AVX512DQ-BW-NEXT: vpmovwb %xmm0, %xmm1255; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]256; AVX512DQ-BW-NEXT: vmovd %xmm1, (%rsi)257; AVX512DQ-BW-NEXT: vmovd %xmm0, (%rdx)258; AVX512DQ-BW-NEXT: retq259;260; AVX512DQ-BW-FCP-LABEL: load_i8_stride2_vf4:261; AVX512DQ-BW-FCP: # %bb.0:262; AVX512DQ-BW-FCP-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero263; AVX512DQ-BW-FCP-NEXT: vpmovwb %xmm0, %xmm1264; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,u,u,u,u,u,u,u,u,u,u,u,u]265; AVX512DQ-BW-FCP-NEXT: vmovd %xmm1, (%rsi)266; AVX512DQ-BW-FCP-NEXT: vmovd %xmm0, (%rdx)267; AVX512DQ-BW-FCP-NEXT: retq268 %wide.vec = load <8 x i8>, ptr %in.vec, align 64269 %strided.vec0 = shufflevector <8 x i8> %wide.vec, <8 x i8> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>270 %strided.vec1 = shufflevector <8 x i8> %wide.vec, <8 x i8> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>271 store <4 x i8> %strided.vec0, ptr %out.vec0, align 64272 store <4 x i8> %strided.vec1, ptr %out.vec1, align 64273 ret void274}275 276define void @load_i8_stride2_vf8(ptr %in.vec, ptr %out.vec0, ptr %out.vec1) nounwind {277; SSE-LABEL: load_i8_stride2_vf8:278; SSE: # %bb.0:279; SSE-NEXT: movdqa (%rdi), %xmm0280; SSE-NEXT: movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]281; SSE-NEXT: pand %xmm0, %xmm1282; SSE-NEXT: packuswb %xmm1, %xmm1283; SSE-NEXT: movq %xmm1, (%rsi)284; SSE-NEXT: psrlw $8, %xmm0285; SSE-NEXT: packuswb %xmm0, %xmm0286; SSE-NEXT: movq %xmm0, (%rdx)287; SSE-NEXT: retq288;289; AVX-LABEL: load_i8_stride2_vf8:290; AVX: # %bb.0:291; AVX-NEXT: vmovdqa (%rdi), %xmm0292; AVX-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]293; AVX-NEXT: vmovq %xmm1, (%rsi)294; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]295; AVX-NEXT: vmovq %xmm0, (%rdx)296; AVX-NEXT: retq297;298; AVX2-LABEL: load_i8_stride2_vf8:299; AVX2: # %bb.0:300; AVX2-NEXT: vmovdqa (%rdi), %xmm0301; AVX2-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]302; AVX2-NEXT: vmovq %xmm1, (%rsi)303; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]304; AVX2-NEXT: vmovq %xmm0, (%rdx)305; AVX2-NEXT: retq306;307; AVX2-FP-LABEL: load_i8_stride2_vf8:308; AVX2-FP: # %bb.0:309; AVX2-FP-NEXT: vmovdqa (%rdi), %xmm0310; AVX2-FP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]311; AVX2-FP-NEXT: vmovq %xmm1, (%rsi)312; AVX2-FP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]313; AVX2-FP-NEXT: vmovq %xmm0, (%rdx)314; AVX2-FP-NEXT: retq315;316; AVX2-FCP-LABEL: load_i8_stride2_vf8:317; AVX2-FCP: # %bb.0:318; AVX2-FCP-NEXT: vmovdqa (%rdi), %xmm0319; AVX2-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]320; AVX2-FCP-NEXT: vmovq %xmm1, (%rsi)321; AVX2-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]322; AVX2-FCP-NEXT: vmovq %xmm0, (%rdx)323; AVX2-FCP-NEXT: retq324;325; AVX512-LABEL: load_i8_stride2_vf8:326; AVX512: # %bb.0:327; AVX512-NEXT: vmovdqa (%rdi), %xmm0328; AVX512-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]329; AVX512-NEXT: vmovq %xmm1, (%rsi)330; AVX512-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]331; AVX512-NEXT: vmovq %xmm0, (%rdx)332; AVX512-NEXT: retq333;334; AVX512-FCP-LABEL: load_i8_stride2_vf8:335; AVX512-FCP: # %bb.0:336; AVX512-FCP-NEXT: vmovdqa (%rdi), %xmm0337; AVX512-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]338; AVX512-FCP-NEXT: vmovq %xmm1, (%rsi)339; AVX512-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]340; AVX512-FCP-NEXT: vmovq %xmm0, (%rdx)341; AVX512-FCP-NEXT: retq342;343; AVX512DQ-LABEL: load_i8_stride2_vf8:344; AVX512DQ: # %bb.0:345; AVX512DQ-NEXT: vmovdqa (%rdi), %xmm0346; AVX512DQ-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]347; AVX512DQ-NEXT: vmovq %xmm1, (%rsi)348; AVX512DQ-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]349; AVX512DQ-NEXT: vmovq %xmm0, (%rdx)350; AVX512DQ-NEXT: retq351;352; AVX512DQ-FCP-LABEL: load_i8_stride2_vf8:353; AVX512DQ-FCP: # %bb.0:354; AVX512DQ-FCP-NEXT: vmovdqa (%rdi), %xmm0355; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]356; AVX512DQ-FCP-NEXT: vmovq %xmm1, (%rsi)357; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]358; AVX512DQ-FCP-NEXT: vmovq %xmm0, (%rdx)359; AVX512DQ-FCP-NEXT: retq360;361; AVX512BW-LABEL: load_i8_stride2_vf8:362; AVX512BW: # %bb.0:363; AVX512BW-NEXT: vmovdqa (%rdi), %xmm0364; AVX512BW-NEXT: vpmovwb %xmm0, (%rsi)365; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]366; AVX512BW-NEXT: vmovq %xmm0, (%rdx)367; AVX512BW-NEXT: retq368;369; AVX512BW-FCP-LABEL: load_i8_stride2_vf8:370; AVX512BW-FCP: # %bb.0:371; AVX512BW-FCP-NEXT: vmovdqa (%rdi), %xmm0372; AVX512BW-FCP-NEXT: vpmovwb %xmm0, (%rsi)373; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]374; AVX512BW-FCP-NEXT: vmovq %xmm0, (%rdx)375; AVX512BW-FCP-NEXT: retq376;377; AVX512DQ-BW-LABEL: load_i8_stride2_vf8:378; AVX512DQ-BW: # %bb.0:379; AVX512DQ-BW-NEXT: vmovdqa (%rdi), %xmm0380; AVX512DQ-BW-NEXT: vpmovwb %xmm0, (%rsi)381; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]382; AVX512DQ-BW-NEXT: vmovq %xmm0, (%rdx)383; AVX512DQ-BW-NEXT: retq384;385; AVX512DQ-BW-FCP-LABEL: load_i8_stride2_vf8:386; AVX512DQ-BW-FCP: # %bb.0:387; AVX512DQ-BW-FCP-NEXT: vmovdqa (%rdi), %xmm0388; AVX512DQ-BW-FCP-NEXT: vpmovwb %xmm0, (%rsi)389; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]390; AVX512DQ-BW-FCP-NEXT: vmovq %xmm0, (%rdx)391; AVX512DQ-BW-FCP-NEXT: retq392 %wide.vec = load <16 x i8>, ptr %in.vec, align 64393 %strided.vec0 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>394 %strided.vec1 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>395 store <8 x i8> %strided.vec0, ptr %out.vec0, align 64396 store <8 x i8> %strided.vec1, ptr %out.vec1, align 64397 ret void398}399 400define void @load_i8_stride2_vf16(ptr %in.vec, ptr %out.vec0, ptr %out.vec1) nounwind {401; SSE-LABEL: load_i8_stride2_vf16:402; SSE: # %bb.0:403; SSE-NEXT: movdqa (%rdi), %xmm0404; SSE-NEXT: movdqa 16(%rdi), %xmm1405; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]406; SSE-NEXT: movdqa %xmm1, %xmm3407; SSE-NEXT: pand %xmm2, %xmm3408; SSE-NEXT: pand %xmm0, %xmm2409; SSE-NEXT: packuswb %xmm3, %xmm2410; SSE-NEXT: psrlw $8, %xmm1411; SSE-NEXT: psrlw $8, %xmm0412; SSE-NEXT: packuswb %xmm1, %xmm0413; SSE-NEXT: movdqa %xmm2, (%rsi)414; SSE-NEXT: movdqa %xmm0, (%rdx)415; SSE-NEXT: retq416;417; AVX-LABEL: load_i8_stride2_vf16:418; AVX: # %bb.0:419; AVX-NEXT: vbroadcastss {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]420; AVX-NEXT: vmovdqa (%rdi), %xmm1421; AVX-NEXT: vmovdqa 16(%rdi), %xmm2422; AVX-NEXT: vpand %xmm0, %xmm2, %xmm3423; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0424; AVX-NEXT: vpackuswb %xmm3, %xmm0, %xmm0425; AVX-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]426; AVX-NEXT: vpshufb %xmm3, %xmm2, %xmm2427; AVX-NEXT: vpshufb %xmm3, %xmm1, %xmm1428; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]429; AVX-NEXT: vmovdqa %xmm0, (%rsi)430; AVX-NEXT: vmovdqa %xmm1, (%rdx)431; AVX-NEXT: retq432;433; AVX2-LABEL: load_i8_stride2_vf16:434; AVX2: # %bb.0:435; AVX2-NEXT: vpbroadcastw {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]436; AVX2-NEXT: vmovdqa (%rdi), %xmm1437; AVX2-NEXT: vmovdqa 16(%rdi), %xmm2438; AVX2-NEXT: vpand %xmm0, %xmm2, %xmm3439; AVX2-NEXT: vpand %xmm0, %xmm1, %xmm0440; AVX2-NEXT: vpackuswb %xmm3, %xmm0, %xmm0441; AVX2-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]442; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2443; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1444; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]445; AVX2-NEXT: vmovdqa %xmm0, (%rsi)446; AVX2-NEXT: vmovdqa %xmm1, (%rdx)447; AVX2-NEXT: retq448;449; AVX2-FP-LABEL: load_i8_stride2_vf16:450; AVX2-FP: # %bb.0:451; AVX2-FP-NEXT: vpbroadcastw {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]452; AVX2-FP-NEXT: vmovdqa (%rdi), %xmm1453; AVX2-FP-NEXT: vmovdqa 16(%rdi), %xmm2454; AVX2-FP-NEXT: vpand %xmm0, %xmm2, %xmm3455; AVX2-FP-NEXT: vpand %xmm0, %xmm1, %xmm0456; AVX2-FP-NEXT: vpackuswb %xmm3, %xmm0, %xmm0457; AVX2-FP-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]458; AVX2-FP-NEXT: vpshufb %xmm3, %xmm2, %xmm2459; AVX2-FP-NEXT: vpshufb %xmm3, %xmm1, %xmm1460; AVX2-FP-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]461; AVX2-FP-NEXT: vmovdqa %xmm0, (%rsi)462; AVX2-FP-NEXT: vmovdqa %xmm1, (%rdx)463; AVX2-FP-NEXT: retq464;465; AVX2-FCP-LABEL: load_i8_stride2_vf16:466; AVX2-FCP: # %bb.0:467; AVX2-FCP-NEXT: vpbroadcastw {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]468; AVX2-FCP-NEXT: vmovdqa (%rdi), %xmm1469; AVX2-FCP-NEXT: vmovdqa 16(%rdi), %xmm2470; AVX2-FCP-NEXT: vpand %xmm0, %xmm2, %xmm3471; AVX2-FCP-NEXT: vpand %xmm0, %xmm1, %xmm0472; AVX2-FCP-NEXT: vpackuswb %xmm3, %xmm0, %xmm0473; AVX2-FCP-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]474; AVX2-FCP-NEXT: vpshufb %xmm3, %xmm2, %xmm2475; AVX2-FCP-NEXT: vpshufb %xmm3, %xmm1, %xmm1476; AVX2-FCP-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]477; AVX2-FCP-NEXT: vmovdqa %xmm0, (%rsi)478; AVX2-FCP-NEXT: vmovdqa %xmm1, (%rdx)479; AVX2-FCP-NEXT: retq480;481; AVX512-LABEL: load_i8_stride2_vf16:482; AVX512: # %bb.0:483; AVX512-NEXT: vpbroadcastd {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]484; AVX512-NEXT: vmovdqa (%rdi), %xmm1485; AVX512-NEXT: vmovdqa 16(%rdi), %xmm2486; AVX512-NEXT: vpand %xmm0, %xmm2, %xmm3487; AVX512-NEXT: vpand %xmm0, %xmm1, %xmm0488; AVX512-NEXT: vpackuswb %xmm3, %xmm0, %xmm0489; AVX512-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]490; AVX512-NEXT: vpshufb %xmm3, %xmm2, %xmm2491; AVX512-NEXT: vpshufb %xmm3, %xmm1, %xmm1492; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]493; AVX512-NEXT: vmovdqa %xmm0, (%rsi)494; AVX512-NEXT: vmovdqa %xmm1, (%rdx)495; AVX512-NEXT: retq496;497; AVX512-FCP-LABEL: load_i8_stride2_vf16:498; AVX512-FCP: # %bb.0:499; AVX512-FCP-NEXT: vpbroadcastd {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]500; AVX512-FCP-NEXT: vmovdqa (%rdi), %xmm1501; AVX512-FCP-NEXT: vmovdqa 16(%rdi), %xmm2502; AVX512-FCP-NEXT: vpand %xmm0, %xmm2, %xmm3503; AVX512-FCP-NEXT: vpand %xmm0, %xmm1, %xmm0504; AVX512-FCP-NEXT: vpackuswb %xmm3, %xmm0, %xmm0505; AVX512-FCP-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]506; AVX512-FCP-NEXT: vpshufb %xmm3, %xmm2, %xmm2507; AVX512-FCP-NEXT: vpshufb %xmm3, %xmm1, %xmm1508; AVX512-FCP-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]509; AVX512-FCP-NEXT: vmovdqa %xmm0, (%rsi)510; AVX512-FCP-NEXT: vmovdqa %xmm1, (%rdx)511; AVX512-FCP-NEXT: retq512;513; AVX512DQ-LABEL: load_i8_stride2_vf16:514; AVX512DQ: # %bb.0:515; AVX512DQ-NEXT: vpbroadcastd {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]516; AVX512DQ-NEXT: vmovdqa (%rdi), %xmm1517; AVX512DQ-NEXT: vmovdqa 16(%rdi), %xmm2518; AVX512DQ-NEXT: vpand %xmm0, %xmm2, %xmm3519; AVX512DQ-NEXT: vpand %xmm0, %xmm1, %xmm0520; AVX512DQ-NEXT: vpackuswb %xmm3, %xmm0, %xmm0521; AVX512DQ-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]522; AVX512DQ-NEXT: vpshufb %xmm3, %xmm2, %xmm2523; AVX512DQ-NEXT: vpshufb %xmm3, %xmm1, %xmm1524; AVX512DQ-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]525; AVX512DQ-NEXT: vmovdqa %xmm0, (%rsi)526; AVX512DQ-NEXT: vmovdqa %xmm1, (%rdx)527; AVX512DQ-NEXT: retq528;529; AVX512DQ-FCP-LABEL: load_i8_stride2_vf16:530; AVX512DQ-FCP: # %bb.0:531; AVX512DQ-FCP-NEXT: vpbroadcastd {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]532; AVX512DQ-FCP-NEXT: vmovdqa (%rdi), %xmm1533; AVX512DQ-FCP-NEXT: vmovdqa 16(%rdi), %xmm2534; AVX512DQ-FCP-NEXT: vpand %xmm0, %xmm2, %xmm3535; AVX512DQ-FCP-NEXT: vpand %xmm0, %xmm1, %xmm0536; AVX512DQ-FCP-NEXT: vpackuswb %xmm3, %xmm0, %xmm0537; AVX512DQ-FCP-NEXT: vmovq {{.*#+}} xmm3 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]538; AVX512DQ-FCP-NEXT: vpshufb %xmm3, %xmm2, %xmm2539; AVX512DQ-FCP-NEXT: vpshufb %xmm3, %xmm1, %xmm1540; AVX512DQ-FCP-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]541; AVX512DQ-FCP-NEXT: vmovdqa %xmm0, (%rsi)542; AVX512DQ-FCP-NEXT: vmovdqa %xmm1, (%rdx)543; AVX512DQ-FCP-NEXT: retq544;545; AVX512BW-LABEL: load_i8_stride2_vf16:546; AVX512BW: # %bb.0:547; AVX512BW-NEXT: vmovdqa (%rdi), %ymm0548; AVX512BW-NEXT: vpsrlw $8, %ymm0, %ymm1549; AVX512BW-NEXT: vpmovwb %ymm0, (%rsi)550; AVX512BW-NEXT: vpmovwb %ymm1, (%rdx)551; AVX512BW-NEXT: vzeroupper552; AVX512BW-NEXT: retq553;554; AVX512BW-FCP-LABEL: load_i8_stride2_vf16:555; AVX512BW-FCP: # %bb.0:556; AVX512BW-FCP-NEXT: vmovdqa (%rdi), %ymm0557; AVX512BW-FCP-NEXT: vpsrlw $8, %ymm0, %ymm1558; AVX512BW-FCP-NEXT: vpmovwb %ymm0, (%rsi)559; AVX512BW-FCP-NEXT: vpmovwb %ymm1, (%rdx)560; AVX512BW-FCP-NEXT: vzeroupper561; AVX512BW-FCP-NEXT: retq562;563; AVX512DQ-BW-LABEL: load_i8_stride2_vf16:564; AVX512DQ-BW: # %bb.0:565; AVX512DQ-BW-NEXT: vmovdqa (%rdi), %ymm0566; AVX512DQ-BW-NEXT: vpsrlw $8, %ymm0, %ymm1567; AVX512DQ-BW-NEXT: vpmovwb %ymm0, (%rsi)568; AVX512DQ-BW-NEXT: vpmovwb %ymm1, (%rdx)569; AVX512DQ-BW-NEXT: vzeroupper570; AVX512DQ-BW-NEXT: retq571;572; AVX512DQ-BW-FCP-LABEL: load_i8_stride2_vf16:573; AVX512DQ-BW-FCP: # %bb.0:574; AVX512DQ-BW-FCP-NEXT: vmovdqa (%rdi), %ymm0575; AVX512DQ-BW-FCP-NEXT: vpsrlw $8, %ymm0, %ymm1576; AVX512DQ-BW-FCP-NEXT: vpmovwb %ymm0, (%rsi)577; AVX512DQ-BW-FCP-NEXT: vpmovwb %ymm1, (%rdx)578; AVX512DQ-BW-FCP-NEXT: vzeroupper579; AVX512DQ-BW-FCP-NEXT: retq580 %wide.vec = load <32 x i8>, ptr %in.vec, align 64581 %strided.vec0 = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <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>582 %strided.vec1 = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <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>583 store <16 x i8> %strided.vec0, ptr %out.vec0, align 64584 store <16 x i8> %strided.vec1, ptr %out.vec1, align 64585 ret void586}587 588define void @load_i8_stride2_vf32(ptr %in.vec, ptr %out.vec0, ptr %out.vec1) nounwind {589; SSE-LABEL: load_i8_stride2_vf32:590; SSE: # %bb.0:591; SSE-NEXT: movdqa (%rdi), %xmm0592; SSE-NEXT: movdqa 16(%rdi), %xmm1593; SSE-NEXT: movdqa 32(%rdi), %xmm2594; SSE-NEXT: movdqa 48(%rdi), %xmm3595; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]596; SSE-NEXT: movdqa %xmm3, %xmm5597; SSE-NEXT: pand %xmm4, %xmm5598; SSE-NEXT: movdqa %xmm2, %xmm6599; SSE-NEXT: pand %xmm4, %xmm6600; SSE-NEXT: packuswb %xmm5, %xmm6601; SSE-NEXT: movdqa %xmm1, %xmm5602; SSE-NEXT: pand %xmm4, %xmm5603; SSE-NEXT: pand %xmm0, %xmm4604; SSE-NEXT: packuswb %xmm5, %xmm4605; SSE-NEXT: psrlw $8, %xmm3606; SSE-NEXT: psrlw $8, %xmm2607; SSE-NEXT: packuswb %xmm3, %xmm2608; SSE-NEXT: psrlw $8, %xmm1609; SSE-NEXT: psrlw $8, %xmm0610; SSE-NEXT: packuswb %xmm1, %xmm0611; SSE-NEXT: movdqa %xmm4, (%rsi)612; SSE-NEXT: movdqa %xmm6, 16(%rsi)613; SSE-NEXT: movdqa %xmm0, (%rdx)614; SSE-NEXT: movdqa %xmm2, 16(%rdx)615; SSE-NEXT: retq616;617; AVX-LABEL: load_i8_stride2_vf32:618; AVX: # %bb.0:619; AVX-NEXT: vbroadcastss {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]620; AVX-NEXT: vmovdqa (%rdi), %xmm1621; AVX-NEXT: vmovdqa 16(%rdi), %xmm2622; AVX-NEXT: vmovdqa 32(%rdi), %xmm3623; AVX-NEXT: vmovdqa 48(%rdi), %xmm4624; AVX-NEXT: vpand %xmm0, %xmm4, %xmm5625; AVX-NEXT: vpand %xmm0, %xmm3, %xmm6626; AVX-NEXT: vpackuswb %xmm5, %xmm6, %xmm5627; AVX-NEXT: vpand %xmm0, %xmm2, %xmm6628; AVX-NEXT: vpand %xmm0, %xmm1, %xmm0629; AVX-NEXT: vpackuswb %xmm6, %xmm0, %xmm0630; AVX-NEXT: vmovq {{.*#+}} xmm6 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]631; AVX-NEXT: vpshufb %xmm6, %xmm4, %xmm4632; AVX-NEXT: vpshufb %xmm6, %xmm3, %xmm3633; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]634; AVX-NEXT: vpshufb %xmm6, %xmm2, %xmm2635; AVX-NEXT: vpshufb %xmm6, %xmm1, %xmm1636; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]637; AVX-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1638; AVX-NEXT: vmovdqa %xmm0, (%rsi)639; AVX-NEXT: vmovdqa %xmm5, 16(%rsi)640; AVX-NEXT: vmovaps %ymm1, (%rdx)641; AVX-NEXT: vzeroupper642; AVX-NEXT: retq643;644; AVX2-LABEL: load_i8_stride2_vf32:645; AVX2: # %bb.0:646; AVX2-NEXT: vmovdqa (%rdi), %ymm0647; AVX2-NEXT: vmovdqa 32(%rdi), %ymm1648; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]649; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm3650; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm2651; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5],ymm3[6,7]652; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]653; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]654; AVX2-NEXT: vpshufb %ymm3, %ymm1, %ymm1655; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0656; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]657; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]658; AVX2-NEXT: vmovdqa %ymm2, (%rsi)659; AVX2-NEXT: vmovdqa %ymm0, (%rdx)660; AVX2-NEXT: vzeroupper661; AVX2-NEXT: retq662;663; AVX2-FP-LABEL: load_i8_stride2_vf32:664; AVX2-FP: # %bb.0:665; AVX2-FP-NEXT: vmovdqa (%rdi), %ymm0666; AVX2-FP-NEXT: vmovdqa 32(%rdi), %ymm1667; AVX2-FP-NEXT: vpbroadcastq {{.*#+}} ymm2 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]668; AVX2-FP-NEXT: vpshufb %ymm2, %ymm1, %ymm3669; AVX2-FP-NEXT: vpshufb %ymm2, %ymm0, %ymm2670; AVX2-FP-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5],ymm3[6,7]671; AVX2-FP-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]672; AVX2-FP-NEXT: vpbroadcastq {{.*#+}} ymm3 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]673; AVX2-FP-NEXT: vpshufb %ymm3, %ymm1, %ymm1674; AVX2-FP-NEXT: vpshufb %ymm3, %ymm0, %ymm0675; AVX2-FP-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]676; AVX2-FP-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]677; AVX2-FP-NEXT: vmovdqa %ymm2, (%rsi)678; AVX2-FP-NEXT: vmovdqa %ymm0, (%rdx)679; AVX2-FP-NEXT: vzeroupper680; AVX2-FP-NEXT: retq681;682; AVX2-FCP-LABEL: load_i8_stride2_vf32:683; AVX2-FCP: # %bb.0:684; AVX2-FCP-NEXT: vmovdqa (%rdi), %ymm0685; AVX2-FCP-NEXT: vmovdqa 32(%rdi), %ymm1686; AVX2-FCP-NEXT: vpbroadcastq {{.*#+}} ymm2 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]687; AVX2-FCP-NEXT: vpshufb %ymm2, %ymm1, %ymm3688; AVX2-FCP-NEXT: vpshufb %ymm2, %ymm0, %ymm2689; AVX2-FCP-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5],ymm3[6,7]690; AVX2-FCP-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]691; AVX2-FCP-NEXT: vpbroadcastq {{.*#+}} ymm3 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]692; AVX2-FCP-NEXT: vpshufb %ymm3, %ymm1, %ymm1693; AVX2-FCP-NEXT: vpshufb %ymm3, %ymm0, %ymm0694; AVX2-FCP-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]695; AVX2-FCP-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]696; AVX2-FCP-NEXT: vmovdqa %ymm2, (%rsi)697; AVX2-FCP-NEXT: vmovdqa %ymm0, (%rdx)698; AVX2-FCP-NEXT: vzeroupper699; AVX2-FCP-NEXT: retq700;701; AVX512-LABEL: load_i8_stride2_vf32:702; AVX512: # %bb.0:703; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm0 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]704; AVX512-NEXT: vmovdqa (%rdi), %ymm1705; AVX512-NEXT: vmovdqa 32(%rdi), %ymm2706; AVX512-NEXT: vpshufb %ymm0, %ymm2, %ymm3707; AVX512-NEXT: vpshufb %ymm0, %ymm1, %ymm0708; AVX512-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm3[2,3],ymm0[4,5],ymm3[6,7]709; AVX512-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]710; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm3 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]711; AVX512-NEXT: vpshufb %ymm3, %ymm2, %ymm2712; AVX512-NEXT: vpshufb %ymm3, %ymm1, %ymm1713; AVX512-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm2[2,3],ymm1[4,5],ymm2[6,7]714; AVX512-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]715; AVX512-NEXT: vmovdqa %ymm0, (%rsi)716; AVX512-NEXT: vmovdqa %ymm1, (%rdx)717; AVX512-NEXT: vzeroupper718; AVX512-NEXT: retq719;720; AVX512-FCP-LABEL: load_i8_stride2_vf32:721; AVX512-FCP: # %bb.0:722; AVX512-FCP-NEXT: vmovdqa (%rdi), %ymm0723; AVX512-FCP-NEXT: vmovdqa 32(%rdi), %ymm1724; AVX512-FCP-NEXT: vpshufb {{.*#+}} ymm2 = ymm1[u,u,u,u,u,u,u,u,0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30]725; AVX512-FCP-NEXT: vpshufb {{.*#+}} ymm3 = ymm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u]726; AVX512-FCP-NEXT: vpmovsxbq {{.*#+}} ymm4 = [0,2,5,7]727; AVX512-FCP-NEXT: vpermt2q %ymm2, %ymm4, %ymm3728; AVX512-FCP-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31]729; AVX512-FCP-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u]730; AVX512-FCP-NEXT: vpermt2q %ymm1, %ymm4, %ymm0731; AVX512-FCP-NEXT: vmovdqa %ymm3, (%rsi)732; AVX512-FCP-NEXT: vmovdqa %ymm0, (%rdx)733; AVX512-FCP-NEXT: vzeroupper734; AVX512-FCP-NEXT: retq735;736; AVX512DQ-LABEL: load_i8_stride2_vf32:737; AVX512DQ: # %bb.0:738; AVX512DQ-NEXT: vpbroadcastq {{.*#+}} ymm0 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]739; AVX512DQ-NEXT: vmovdqa (%rdi), %ymm1740; AVX512DQ-NEXT: vmovdqa 32(%rdi), %ymm2741; AVX512DQ-NEXT: vpshufb %ymm0, %ymm2, %ymm3742; AVX512DQ-NEXT: vpshufb %ymm0, %ymm1, %ymm0743; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm3[2,3],ymm0[4,5],ymm3[6,7]744; AVX512DQ-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]745; AVX512DQ-NEXT: vpbroadcastq {{.*#+}} ymm3 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]746; AVX512DQ-NEXT: vpshufb %ymm3, %ymm2, %ymm2747; AVX512DQ-NEXT: vpshufb %ymm3, %ymm1, %ymm1748; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm2[2,3],ymm1[4,5],ymm2[6,7]749; AVX512DQ-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]750; AVX512DQ-NEXT: vmovdqa %ymm0, (%rsi)751; AVX512DQ-NEXT: vmovdqa %ymm1, (%rdx)752; AVX512DQ-NEXT: vzeroupper753; AVX512DQ-NEXT: retq754;755; AVX512DQ-FCP-LABEL: load_i8_stride2_vf32:756; AVX512DQ-FCP: # %bb.0:757; AVX512DQ-FCP-NEXT: vmovdqa (%rdi), %ymm0758; AVX512DQ-FCP-NEXT: vmovdqa 32(%rdi), %ymm1759; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} ymm2 = ymm1[u,u,u,u,u,u,u,u,0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30]760; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} ymm3 = ymm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u]761; AVX512DQ-FCP-NEXT: vpmovsxbq {{.*#+}} ymm4 = [0,2,5,7]762; AVX512DQ-FCP-NEXT: vpermt2q %ymm2, %ymm4, %ymm3763; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31]764; AVX512DQ-FCP-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u]765; AVX512DQ-FCP-NEXT: vpermt2q %ymm1, %ymm4, %ymm0766; AVX512DQ-FCP-NEXT: vmovdqa %ymm3, (%rsi)767; AVX512DQ-FCP-NEXT: vmovdqa %ymm0, (%rdx)768; AVX512DQ-FCP-NEXT: vzeroupper769; AVX512DQ-FCP-NEXT: retq770;771; AVX512BW-LABEL: load_i8_stride2_vf32:772; AVX512BW: # %bb.0:773; AVX512BW-NEXT: vmovdqa64 (%rdi), %zmm0774; AVX512BW-NEXT: vpsrlw $8, %zmm0, %zmm1775; AVX512BW-NEXT: vpmovwb %zmm0, (%rsi)776; AVX512BW-NEXT: vpmovwb %zmm1, (%rdx)777; AVX512BW-NEXT: vzeroupper778; AVX512BW-NEXT: retq779;780; AVX512BW-FCP-LABEL: load_i8_stride2_vf32:781; AVX512BW-FCP: # %bb.0:782; AVX512BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm0783; AVX512BW-FCP-NEXT: vpsrlw $8, %zmm0, %zmm1784; AVX512BW-FCP-NEXT: vpmovwb %zmm0, (%rsi)785; AVX512BW-FCP-NEXT: vpmovwb %zmm1, (%rdx)786; AVX512BW-FCP-NEXT: vzeroupper787; AVX512BW-FCP-NEXT: retq788;789; AVX512DQ-BW-LABEL: load_i8_stride2_vf32:790; AVX512DQ-BW: # %bb.0:791; AVX512DQ-BW-NEXT: vmovdqa64 (%rdi), %zmm0792; AVX512DQ-BW-NEXT: vpsrlw $8, %zmm0, %zmm1793; AVX512DQ-BW-NEXT: vpmovwb %zmm0, (%rsi)794; AVX512DQ-BW-NEXT: vpmovwb %zmm1, (%rdx)795; AVX512DQ-BW-NEXT: vzeroupper796; AVX512DQ-BW-NEXT: retq797;798; AVX512DQ-BW-FCP-LABEL: load_i8_stride2_vf32:799; AVX512DQ-BW-FCP: # %bb.0:800; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm0801; AVX512DQ-BW-FCP-NEXT: vpsrlw $8, %zmm0, %zmm1802; AVX512DQ-BW-FCP-NEXT: vpmovwb %zmm0, (%rsi)803; AVX512DQ-BW-FCP-NEXT: vpmovwb %zmm1, (%rdx)804; AVX512DQ-BW-FCP-NEXT: vzeroupper805; AVX512DQ-BW-FCP-NEXT: retq806 %wide.vec = load <64 x i8>, ptr %in.vec, align 64807 %strided.vec0 = shufflevector <64 x i8> %wide.vec, <64 x i8> poison, <32 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, i32 32, i32 34, i32 36, i32 38, i32 40, i32 42, i32 44, i32 46, i32 48, i32 50, i32 52, i32 54, i32 56, i32 58, i32 60, i32 62>808 %strided.vec1 = shufflevector <64 x i8> %wide.vec, <64 x i8> poison, <32 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, i32 33, i32 35, i32 37, i32 39, i32 41, i32 43, i32 45, i32 47, i32 49, i32 51, i32 53, i32 55, i32 57, i32 59, i32 61, i32 63>809 store <32 x i8> %strided.vec0, ptr %out.vec0, align 64810 store <32 x i8> %strided.vec1, ptr %out.vec1, align 64811 ret void812}813 814define void @load_i8_stride2_vf64(ptr %in.vec, ptr %out.vec0, ptr %out.vec1) nounwind {815; SSE-LABEL: load_i8_stride2_vf64:816; SSE: # %bb.0:817; SSE-NEXT: movdqa 64(%rdi), %xmm0818; SSE-NEXT: movdqa 80(%rdi), %xmm4819; SSE-NEXT: movdqa 96(%rdi), %xmm1820; SSE-NEXT: movdqa 112(%rdi), %xmm7821; SSE-NEXT: movdqa (%rdi), %xmm2822; SSE-NEXT: movdqa 16(%rdi), %xmm9823; SSE-NEXT: movdqa 32(%rdi), %xmm3824; SSE-NEXT: movdqa 48(%rdi), %xmm11825; SSE-NEXT: movdqa {{.*#+}} xmm6 = [255,255,255,255,255,255,255,255]826; SSE-NEXT: movdqa %xmm11, %xmm8827; SSE-NEXT: pand %xmm6, %xmm8828; SSE-NEXT: movdqa %xmm3, %xmm5829; SSE-NEXT: pand %xmm6, %xmm5830; SSE-NEXT: packuswb %xmm8, %xmm5831; SSE-NEXT: movdqa %xmm9, %xmm10832; SSE-NEXT: pand %xmm6, %xmm10833; SSE-NEXT: movdqa %xmm2, %xmm8834; SSE-NEXT: pand %xmm6, %xmm8835; SSE-NEXT: packuswb %xmm10, %xmm8836; SSE-NEXT: movdqa %xmm7, %xmm12837; SSE-NEXT: pand %xmm6, %xmm12838; SSE-NEXT: movdqa %xmm1, %xmm10839; SSE-NEXT: pand %xmm6, %xmm10840; SSE-NEXT: packuswb %xmm12, %xmm10841; SSE-NEXT: movdqa %xmm4, %xmm12842; SSE-NEXT: pand %xmm6, %xmm12843; SSE-NEXT: pand %xmm0, %xmm6844; SSE-NEXT: packuswb %xmm12, %xmm6845; SSE-NEXT: psrlw $8, %xmm11846; SSE-NEXT: psrlw $8, %xmm3847; SSE-NEXT: packuswb %xmm11, %xmm3848; SSE-NEXT: psrlw $8, %xmm9849; SSE-NEXT: psrlw $8, %xmm2850; SSE-NEXT: packuswb %xmm9, %xmm2851; SSE-NEXT: psrlw $8, %xmm7852; SSE-NEXT: psrlw $8, %xmm1853; SSE-NEXT: packuswb %xmm7, %xmm1854; SSE-NEXT: psrlw $8, %xmm4855; SSE-NEXT: psrlw $8, %xmm0856; SSE-NEXT: packuswb %xmm4, %xmm0857; SSE-NEXT: movdqa %xmm6, 32(%rsi)858; SSE-NEXT: movdqa %xmm10, 48(%rsi)859; SSE-NEXT: movdqa %xmm8, (%rsi)860; SSE-NEXT: movdqa %xmm5, 16(%rsi)861; SSE-NEXT: movdqa %xmm0, 32(%rdx)862; SSE-NEXT: movdqa %xmm1, 48(%rdx)863; SSE-NEXT: movdqa %xmm2, (%rdx)864; SSE-NEXT: movdqa %xmm3, 16(%rdx)865; SSE-NEXT: retq866;867; AVX-LABEL: load_i8_stride2_vf64:868; AVX: # %bb.0:869; AVX-NEXT: vbroadcastss {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]870; AVX-NEXT: vmovdqa 112(%rdi), %xmm2871; AVX-NEXT: vpand %xmm1, %xmm2, %xmm0872; AVX-NEXT: vmovdqa 96(%rdi), %xmm3873; AVX-NEXT: vpand %xmm1, %xmm3, %xmm4874; AVX-NEXT: vpackuswb %xmm0, %xmm4, %xmm0875; AVX-NEXT: vmovdqa 80(%rdi), %xmm4876; AVX-NEXT: vpand %xmm1, %xmm4, %xmm5877; AVX-NEXT: vmovdqa 64(%rdi), %xmm6878; AVX-NEXT: vpand %xmm1, %xmm6, %xmm7879; AVX-NEXT: vpackuswb %xmm5, %xmm7, %xmm5880; AVX-NEXT: vmovdqa (%rdi), %xmm7881; AVX-NEXT: vmovdqa 16(%rdi), %xmm8882; AVX-NEXT: vmovdqa 32(%rdi), %xmm9883; AVX-NEXT: vmovdqa 48(%rdi), %xmm10884; AVX-NEXT: vpand %xmm1, %xmm10, %xmm11885; AVX-NEXT: vpand %xmm1, %xmm9, %xmm12886; AVX-NEXT: vpackuswb %xmm11, %xmm12, %xmm11887; AVX-NEXT: vpand %xmm1, %xmm8, %xmm12888; AVX-NEXT: vpand %xmm1, %xmm7, %xmm1889; AVX-NEXT: vpackuswb %xmm12, %xmm1, %xmm1890; AVX-NEXT: vmovq {{.*#+}} xmm12 = [1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0]891; AVX-NEXT: vpshufb %xmm12, %xmm2, %xmm2892; AVX-NEXT: vpshufb %xmm12, %xmm3, %xmm3893; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]894; AVX-NEXT: vpshufb %xmm12, %xmm4, %xmm3895; AVX-NEXT: vpshufb %xmm12, %xmm6, %xmm4896; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]897; AVX-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2898; AVX-NEXT: vpshufb %xmm12, %xmm10, %xmm3899; AVX-NEXT: vpshufb %xmm12, %xmm9, %xmm4900; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]901; AVX-NEXT: vpshufb %xmm12, %xmm8, %xmm4902; AVX-NEXT: vpshufb %xmm12, %xmm7, %xmm6903; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm4 = xmm6[0],xmm4[0]904; AVX-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3905; AVX-NEXT: vmovdqa %xmm1, (%rsi)906; AVX-NEXT: vmovdqa %xmm11, 16(%rsi)907; AVX-NEXT: vmovdqa %xmm5, 32(%rsi)908; AVX-NEXT: vmovdqa %xmm0, 48(%rsi)909; AVX-NEXT: vmovaps %ymm3, (%rdx)910; AVX-NEXT: vmovaps %ymm2, 32(%rdx)911; AVX-NEXT: vzeroupper912; AVX-NEXT: retq913;914; AVX2-LABEL: load_i8_stride2_vf64:915; AVX2: # %bb.0:916; AVX2-NEXT: vmovdqa (%rdi), %ymm0917; AVX2-NEXT: vmovdqa 32(%rdi), %ymm1918; AVX2-NEXT: vmovdqa 64(%rdi), %ymm2919; AVX2-NEXT: vmovdqa 96(%rdi), %ymm3920; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]921; AVX2-NEXT: vpshufb %ymm4, %ymm3, %ymm5922; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]923; AVX2-NEXT: vpshufb %ymm6, %ymm2, %ymm7924; AVX2-NEXT: vpblendd {{.*#+}} ymm5 = ymm7[0,1],ymm5[2,3],ymm7[4,5],ymm5[6,7]925; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]926; AVX2-NEXT: vpshufb %ymm4, %ymm1, %ymm4927; AVX2-NEXT: vpshufb %ymm6, %ymm0, %ymm6928; AVX2-NEXT: vpblendd {{.*#+}} ymm4 = ymm6[0,1],ymm4[2,3],ymm6[4,5],ymm4[6,7]929; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]930; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]931; AVX2-NEXT: vpshufb %ymm6, %ymm3, %ymm3932; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm7 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]933; AVX2-NEXT: vpshufb %ymm7, %ymm2, %ymm2934; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5],ymm3[6,7]935; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]936; AVX2-NEXT: vpshufb %ymm6, %ymm1, %ymm1937; AVX2-NEXT: vpshufb %ymm7, %ymm0, %ymm0938; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]939; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]940; AVX2-NEXT: vmovdqa %ymm4, (%rsi)941; AVX2-NEXT: vmovdqa %ymm5, 32(%rsi)942; AVX2-NEXT: vmovdqa %ymm0, (%rdx)943; AVX2-NEXT: vmovdqa %ymm2, 32(%rdx)944; AVX2-NEXT: vzeroupper945; AVX2-NEXT: retq946;947; AVX2-FP-LABEL: load_i8_stride2_vf64:948; AVX2-FP: # %bb.0:949; AVX2-FP-NEXT: vmovdqa (%rdi), %ymm0950; AVX2-FP-NEXT: vmovdqa 32(%rdi), %ymm1951; AVX2-FP-NEXT: vmovdqa 64(%rdi), %ymm2952; AVX2-FP-NEXT: vmovdqa 96(%rdi), %ymm3953; AVX2-FP-NEXT: vpbroadcastq {{.*#+}} ymm4 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]954; AVX2-FP-NEXT: vpshufb %ymm4, %ymm3, %ymm5955; AVX2-FP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]956; AVX2-FP-NEXT: vpshufb %ymm6, %ymm2, %ymm7957; AVX2-FP-NEXT: vpblendd {{.*#+}} ymm5 = ymm7[0,1],ymm5[2,3],ymm7[4,5],ymm5[6,7]958; AVX2-FP-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]959; AVX2-FP-NEXT: vpshufb %ymm4, %ymm1, %ymm4960; AVX2-FP-NEXT: vpshufb %ymm6, %ymm0, %ymm6961; AVX2-FP-NEXT: vpblendd {{.*#+}} ymm4 = ymm6[0,1],ymm4[2,3],ymm6[4,5],ymm4[6,7]962; AVX2-FP-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]963; AVX2-FP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]964; AVX2-FP-NEXT: vpshufb %ymm6, %ymm3, %ymm3965; AVX2-FP-NEXT: vpbroadcastq {{.*#+}} ymm7 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]966; AVX2-FP-NEXT: vpshufb %ymm7, %ymm2, %ymm2967; AVX2-FP-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5],ymm3[6,7]968; AVX2-FP-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]969; AVX2-FP-NEXT: vpshufb %ymm6, %ymm1, %ymm1970; AVX2-FP-NEXT: vpshufb %ymm7, %ymm0, %ymm0971; AVX2-FP-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]972; AVX2-FP-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]973; AVX2-FP-NEXT: vmovdqa %ymm4, (%rsi)974; AVX2-FP-NEXT: vmovdqa %ymm5, 32(%rsi)975; AVX2-FP-NEXT: vmovdqa %ymm0, (%rdx)976; AVX2-FP-NEXT: vmovdqa %ymm2, 32(%rdx)977; AVX2-FP-NEXT: vzeroupper978; AVX2-FP-NEXT: retq979;980; AVX2-FCP-LABEL: load_i8_stride2_vf64:981; AVX2-FCP: # %bb.0:982; AVX2-FCP-NEXT: vmovdqa (%rdi), %ymm0983; AVX2-FCP-NEXT: vmovdqa 32(%rdi), %ymm1984; AVX2-FCP-NEXT: vmovdqa 64(%rdi), %ymm2985; AVX2-FCP-NEXT: vmovdqa 96(%rdi), %ymm3986; AVX2-FCP-NEXT: vpbroadcastq {{.*#+}} ymm4 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]987; AVX2-FCP-NEXT: vpshufb %ymm4, %ymm3, %ymm5988; AVX2-FCP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]989; AVX2-FCP-NEXT: vpshufb %ymm6, %ymm2, %ymm7990; AVX2-FCP-NEXT: vpblendd {{.*#+}} ymm5 = ymm7[0,1],ymm5[2,3],ymm7[4,5],ymm5[6,7]991; AVX2-FCP-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]992; AVX2-FCP-NEXT: vpshufb %ymm4, %ymm1, %ymm4993; AVX2-FCP-NEXT: vpshufb %ymm6, %ymm0, %ymm6994; AVX2-FCP-NEXT: vpblendd {{.*#+}} ymm4 = ymm6[0,1],ymm4[2,3],ymm6[4,5],ymm4[6,7]995; AVX2-FCP-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]996; AVX2-FCP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]997; AVX2-FCP-NEXT: vpshufb %ymm6, %ymm3, %ymm3998; AVX2-FCP-NEXT: vpbroadcastq {{.*#+}} ymm7 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]999; AVX2-FCP-NEXT: vpshufb %ymm7, %ymm2, %ymm21000; AVX2-FCP-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5],ymm3[6,7]1001; AVX2-FCP-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]1002; AVX2-FCP-NEXT: vpshufb %ymm6, %ymm1, %ymm11003; AVX2-FCP-NEXT: vpshufb %ymm7, %ymm0, %ymm01004; AVX2-FCP-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]1005; AVX2-FCP-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]1006; AVX2-FCP-NEXT: vmovdqa %ymm4, (%rsi)1007; AVX2-FCP-NEXT: vmovdqa %ymm5, 32(%rsi)1008; AVX2-FCP-NEXT: vmovdqa %ymm0, (%rdx)1009; AVX2-FCP-NEXT: vmovdqa %ymm2, 32(%rdx)1010; AVX2-FCP-NEXT: vzeroupper1011; AVX2-FCP-NEXT: retq1012;1013; AVX512-LABEL: load_i8_stride2_vf64:1014; AVX512: # %bb.0:1015; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm0 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1016; AVX512-NEXT: vmovdqa (%rdi), %ymm11017; AVX512-NEXT: vmovdqa 32(%rdi), %ymm21018; AVX512-NEXT: vmovdqa 64(%rdi), %ymm31019; AVX512-NEXT: vmovdqa 96(%rdi), %ymm41020; AVX512-NEXT: vpshufb %ymm0, %ymm4, %ymm51021; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1022; AVX512-NEXT: vpshufb %ymm6, %ymm3, %ymm71023; AVX512-NEXT: vpblendd {{.*#+}} ymm5 = ymm7[0,1],ymm5[2,3],ymm7[4,5],ymm5[6,7]1024; AVX512-NEXT: vpshufb %ymm0, %ymm2, %ymm01025; AVX512-NEXT: vpshufb %ymm6, %ymm1, %ymm61026; AVX512-NEXT: vpblendd {{.*#+}} ymm0 = ymm6[0,1],ymm0[2,3],ymm6[4,5],ymm0[6,7]1027; AVX512-NEXT: vinserti64x4 $1, %ymm5, %zmm0, %zmm01028; AVX512-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,2,1,3,4,6,5,7]1029; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm5 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1030; AVX512-NEXT: vpshufb %ymm5, %ymm4, %ymm41031; AVX512-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1032; AVX512-NEXT: vpshufb %ymm6, %ymm3, %ymm31033; AVX512-NEXT: vpblendd {{.*#+}} ymm3 = ymm3[0,1],ymm4[2,3],ymm3[4,5],ymm4[6,7]1034; AVX512-NEXT: vpshufb %ymm5, %ymm2, %ymm21035; AVX512-NEXT: vpshufb %ymm6, %ymm1, %ymm11036; AVX512-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm2[2,3],ymm1[4,5],ymm2[6,7]1037; AVX512-NEXT: vinserti64x4 $1, %ymm3, %zmm1, %zmm11038; AVX512-NEXT: vpermq {{.*#+}} zmm1 = zmm1[0,2,1,3,4,6,5,7]1039; AVX512-NEXT: vmovdqa64 %zmm0, (%rsi)1040; AVX512-NEXT: vmovdqa64 %zmm1, (%rdx)1041; AVX512-NEXT: vzeroupper1042; AVX512-NEXT: retq1043;1044; AVX512-FCP-LABEL: load_i8_stride2_vf64:1045; AVX512-FCP: # %bb.0:1046; AVX512-FCP-NEXT: vpbroadcastq {{.*#+}} ymm0 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1047; AVX512-FCP-NEXT: vmovdqa (%rdi), %ymm11048; AVX512-FCP-NEXT: vmovdqa 32(%rdi), %ymm21049; AVX512-FCP-NEXT: vmovdqa 64(%rdi), %ymm31050; AVX512-FCP-NEXT: vmovdqa 96(%rdi), %ymm41051; AVX512-FCP-NEXT: vpshufb %ymm0, %ymm4, %ymm51052; AVX512-FCP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1053; AVX512-FCP-NEXT: vpshufb %ymm6, %ymm3, %ymm71054; AVX512-FCP-NEXT: vpmovsxbq {{.*#+}} ymm8 = [0,2,5,7]1055; AVX512-FCP-NEXT: vpermt2q %ymm5, %ymm8, %ymm71056; AVX512-FCP-NEXT: vpshufb %ymm0, %ymm2, %ymm01057; AVX512-FCP-NEXT: vpshufb %ymm6, %ymm1, %ymm51058; AVX512-FCP-NEXT: vpermt2q %ymm0, %ymm8, %ymm51059; AVX512-FCP-NEXT: vinserti64x4 $1, %ymm7, %zmm5, %zmm01060; AVX512-FCP-NEXT: vpbroadcastq {{.*#+}} ymm5 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1061; AVX512-FCP-NEXT: vpshufb %ymm5, %ymm4, %ymm41062; AVX512-FCP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1063; AVX512-FCP-NEXT: vpshufb %ymm6, %ymm3, %ymm31064; AVX512-FCP-NEXT: vpermt2q %ymm4, %ymm8, %ymm31065; AVX512-FCP-NEXT: vpshufb %ymm5, %ymm2, %ymm21066; AVX512-FCP-NEXT: vpshufb %ymm6, %ymm1, %ymm11067; AVX512-FCP-NEXT: vpermt2q %ymm2, %ymm8, %ymm11068; AVX512-FCP-NEXT: vinserti64x4 $1, %ymm3, %zmm1, %zmm11069; AVX512-FCP-NEXT: vmovdqa64 %zmm0, (%rsi)1070; AVX512-FCP-NEXT: vmovdqa64 %zmm1, (%rdx)1071; AVX512-FCP-NEXT: vzeroupper1072; AVX512-FCP-NEXT: retq1073;1074; AVX512DQ-LABEL: load_i8_stride2_vf64:1075; AVX512DQ: # %bb.0:1076; AVX512DQ-NEXT: vpbroadcastq {{.*#+}} ymm0 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1077; AVX512DQ-NEXT: vmovdqa (%rdi), %ymm11078; AVX512DQ-NEXT: vmovdqa 32(%rdi), %ymm21079; AVX512DQ-NEXT: vmovdqa 64(%rdi), %ymm31080; AVX512DQ-NEXT: vmovdqa 96(%rdi), %ymm41081; AVX512DQ-NEXT: vpshufb %ymm0, %ymm4, %ymm51082; AVX512DQ-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1083; AVX512DQ-NEXT: vpshufb %ymm6, %ymm3, %ymm71084; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm5 = ymm7[0,1],ymm5[2,3],ymm7[4,5],ymm5[6,7]1085; AVX512DQ-NEXT: vpshufb %ymm0, %ymm2, %ymm01086; AVX512DQ-NEXT: vpshufb %ymm6, %ymm1, %ymm61087; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm0 = ymm6[0,1],ymm0[2,3],ymm6[4,5],ymm0[6,7]1088; AVX512DQ-NEXT: vinserti64x4 $1, %ymm5, %zmm0, %zmm01089; AVX512DQ-NEXT: vpermq {{.*#+}} zmm0 = zmm0[0,2,1,3,4,6,5,7]1090; AVX512DQ-NEXT: vpbroadcastq {{.*#+}} ymm5 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1091; AVX512DQ-NEXT: vpshufb %ymm5, %ymm4, %ymm41092; AVX512DQ-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1093; AVX512DQ-NEXT: vpshufb %ymm6, %ymm3, %ymm31094; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm3 = ymm3[0,1],ymm4[2,3],ymm3[4,5],ymm4[6,7]1095; AVX512DQ-NEXT: vpshufb %ymm5, %ymm2, %ymm21096; AVX512DQ-NEXT: vpshufb %ymm6, %ymm1, %ymm11097; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm2[2,3],ymm1[4,5],ymm2[6,7]1098; AVX512DQ-NEXT: vinserti64x4 $1, %ymm3, %zmm1, %zmm11099; AVX512DQ-NEXT: vpermq {{.*#+}} zmm1 = zmm1[0,2,1,3,4,6,5,7]1100; AVX512DQ-NEXT: vmovdqa64 %zmm0, (%rsi)1101; AVX512DQ-NEXT: vmovdqa64 %zmm1, (%rdx)1102; AVX512DQ-NEXT: vzeroupper1103; AVX512DQ-NEXT: retq1104;1105; AVX512DQ-FCP-LABEL: load_i8_stride2_vf64:1106; AVX512DQ-FCP: # %bb.0:1107; AVX512DQ-FCP-NEXT: vpbroadcastq {{.*#+}} ymm0 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1108; AVX512DQ-FCP-NEXT: vmovdqa (%rdi), %ymm11109; AVX512DQ-FCP-NEXT: vmovdqa 32(%rdi), %ymm21110; AVX512DQ-FCP-NEXT: vmovdqa 64(%rdi), %ymm31111; AVX512DQ-FCP-NEXT: vmovdqa 96(%rdi), %ymm41112; AVX512DQ-FCP-NEXT: vpshufb %ymm0, %ymm4, %ymm51113; AVX512DQ-FCP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14]1114; AVX512DQ-FCP-NEXT: vpshufb %ymm6, %ymm3, %ymm71115; AVX512DQ-FCP-NEXT: vpmovsxbq {{.*#+}} ymm8 = [0,2,5,7]1116; AVX512DQ-FCP-NEXT: vpermt2q %ymm5, %ymm8, %ymm71117; AVX512DQ-FCP-NEXT: vpshufb %ymm0, %ymm2, %ymm01118; AVX512DQ-FCP-NEXT: vpshufb %ymm6, %ymm1, %ymm51119; AVX512DQ-FCP-NEXT: vpermt2q %ymm0, %ymm8, %ymm51120; AVX512DQ-FCP-NEXT: vinserti64x4 $1, %ymm7, %zmm5, %zmm01121; AVX512DQ-FCP-NEXT: vpbroadcastq {{.*#+}} ymm5 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1122; AVX512DQ-FCP-NEXT: vpshufb %ymm5, %ymm4, %ymm41123; AVX512DQ-FCP-NEXT: vpbroadcastq {{.*#+}} ymm6 = [1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15,1,3,5,7,9,11,13,15]1124; AVX512DQ-FCP-NEXT: vpshufb %ymm6, %ymm3, %ymm31125; AVX512DQ-FCP-NEXT: vpermt2q %ymm4, %ymm8, %ymm31126; AVX512DQ-FCP-NEXT: vpshufb %ymm5, %ymm2, %ymm21127; AVX512DQ-FCP-NEXT: vpshufb %ymm6, %ymm1, %ymm11128; AVX512DQ-FCP-NEXT: vpermt2q %ymm2, %ymm8, %ymm11129; AVX512DQ-FCP-NEXT: vinserti64x4 $1, %ymm3, %zmm1, %zmm11130; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm0, (%rsi)1131; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm1, (%rdx)1132; AVX512DQ-FCP-NEXT: vzeroupper1133; AVX512DQ-FCP-NEXT: retq1134;1135; AVX512BW-LABEL: load_i8_stride2_vf64:1136; AVX512BW: # %bb.0:1137; AVX512BW-NEXT: vmovdqa64 (%rdi), %zmm01138; AVX512BW-NEXT: vmovdqa64 64(%rdi), %zmm11139; AVX512BW-NEXT: vpshufb {{.*#+}} zmm2 = zmm1[u,u,u,u,u,u,u,u,0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62]1140; AVX512BW-NEXT: vpshufb {{.*#+}} zmm3 = zmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62,u,u,u,u,u,u,u,u]1141; AVX512BW-NEXT: vpmovsxbq {{.*#+}} zmm4 = [0,2,4,6,9,11,13,15]1142; AVX512BW-NEXT: vpermt2q %zmm2, %zmm4, %zmm31143; AVX512BW-NEXT: vpshufb {{.*#+}} zmm1 = zmm1[u,u,u,u,u,u,u,u,1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63]1144; AVX512BW-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63,u,u,u,u,u,u,u,u]1145; AVX512BW-NEXT: vpermt2q %zmm1, %zmm4, %zmm01146; AVX512BW-NEXT: vmovdqa64 %zmm3, (%rsi)1147; AVX512BW-NEXT: vmovdqa64 %zmm0, (%rdx)1148; AVX512BW-NEXT: vzeroupper1149; AVX512BW-NEXT: retq1150;1151; AVX512BW-FCP-LABEL: load_i8_stride2_vf64:1152; AVX512BW-FCP: # %bb.0:1153; AVX512BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm01154; AVX512BW-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11155; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} zmm2 = zmm1[u,u,u,u,u,u,u,u,0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62]1156; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} zmm3 = zmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62,u,u,u,u,u,u,u,u]1157; AVX512BW-FCP-NEXT: vpmovsxbq {{.*#+}} zmm4 = [0,2,4,6,9,11,13,15]1158; AVX512BW-FCP-NEXT: vpermt2q %zmm2, %zmm4, %zmm31159; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} zmm1 = zmm1[u,u,u,u,u,u,u,u,1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63]1160; AVX512BW-FCP-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63,u,u,u,u,u,u,u,u]1161; AVX512BW-FCP-NEXT: vpermt2q %zmm1, %zmm4, %zmm01162; AVX512BW-FCP-NEXT: vmovdqa64 %zmm3, (%rsi)1163; AVX512BW-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1164; AVX512BW-FCP-NEXT: vzeroupper1165; AVX512BW-FCP-NEXT: retq1166;1167; AVX512DQ-BW-LABEL: load_i8_stride2_vf64:1168; AVX512DQ-BW: # %bb.0:1169; AVX512DQ-BW-NEXT: vmovdqa64 (%rdi), %zmm01170; AVX512DQ-BW-NEXT: vmovdqa64 64(%rdi), %zmm11171; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} zmm2 = zmm1[u,u,u,u,u,u,u,u,0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62]1172; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} zmm3 = zmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62,u,u,u,u,u,u,u,u]1173; AVX512DQ-BW-NEXT: vpmovsxbq {{.*#+}} zmm4 = [0,2,4,6,9,11,13,15]1174; AVX512DQ-BW-NEXT: vpermt2q %zmm2, %zmm4, %zmm31175; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} zmm1 = zmm1[u,u,u,u,u,u,u,u,1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63]1176; AVX512DQ-BW-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63,u,u,u,u,u,u,u,u]1177; AVX512DQ-BW-NEXT: vpermt2q %zmm1, %zmm4, %zmm01178; AVX512DQ-BW-NEXT: vmovdqa64 %zmm3, (%rsi)1179; AVX512DQ-BW-NEXT: vmovdqa64 %zmm0, (%rdx)1180; AVX512DQ-BW-NEXT: vzeroupper1181; AVX512DQ-BW-NEXT: retq1182;1183; AVX512DQ-BW-FCP-LABEL: load_i8_stride2_vf64:1184; AVX512DQ-BW-FCP: # %bb.0:1185; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm01186; AVX512DQ-BW-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11187; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} zmm2 = zmm1[u,u,u,u,u,u,u,u,0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62]1188; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} zmm3 = zmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u,16,18,20,22,24,26,28,30,u,u,u,u,u,u,u,u,32,34,36,38,40,42,44,46,u,u,u,u,u,u,u,u,48,50,52,54,56,58,60,62,u,u,u,u,u,u,u,u]1189; AVX512DQ-BW-FCP-NEXT: vpmovsxbq {{.*#+}} zmm4 = [0,2,4,6,9,11,13,15]1190; AVX512DQ-BW-FCP-NEXT: vpermt2q %zmm2, %zmm4, %zmm31191; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} zmm1 = zmm1[u,u,u,u,u,u,u,u,1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63]1192; AVX512DQ-BW-FCP-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u,17,19,21,23,25,27,29,31,u,u,u,u,u,u,u,u,33,35,37,39,41,43,45,47,u,u,u,u,u,u,u,u,49,51,53,55,57,59,61,63,u,u,u,u,u,u,u,u]1193; AVX512DQ-BW-FCP-NEXT: vpermt2q %zmm1, %zmm4, %zmm01194; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm3, (%rsi)1195; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1196; AVX512DQ-BW-FCP-NEXT: vzeroupper1197; AVX512DQ-BW-FCP-NEXT: retq1198 %wide.vec = load <128 x i8>, ptr %in.vec, align 641199 %strided.vec0 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <64 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, i32 32, i32 34, i32 36, i32 38, i32 40, i32 42, i32 44, i32 46, i32 48, i32 50, i32 52, i32 54, i32 56, i32 58, i32 60, i32 62, i32 64, i32 66, i32 68, i32 70, i32 72, i32 74, i32 76, i32 78, i32 80, i32 82, i32 84, i32 86, i32 88, i32 90, i32 92, i32 94, i32 96, i32 98, i32 100, i32 102, i32 104, i32 106, i32 108, i32 110, i32 112, i32 114, i32 116, i32 118, i32 120, i32 122, i32 124, i32 126>1200 %strided.vec1 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <64 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, i32 33, i32 35, i32 37, i32 39, i32 41, i32 43, i32 45, i32 47, i32 49, i32 51, i32 53, i32 55, i32 57, i32 59, i32 61, i32 63, i32 65, i32 67, i32 69, i32 71, i32 73, i32 75, i32 77, i32 79, i32 81, i32 83, i32 85, i32 87, i32 89, i32 91, i32 93, i32 95, i32 97, i32 99, i32 101, i32 103, i32 105, i32 107, i32 109, i32 111, i32 113, i32 115, i32 117, i32 119, i32 121, i32 123, i32 125, i32 127>1201 store <64 x i8> %strided.vec0, ptr %out.vec0, align 641202 store <64 x i8> %strided.vec1, ptr %out.vec1, align 641203 ret void1204}1205