1761 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 stores.17 18define void @store_i32_stride2_vf2(ptr %in.vecptr0, ptr %in.vecptr1, ptr %out.vec) nounwind {19; SSE-LABEL: store_i32_stride2_vf2:20; SSE: # %bb.0:21; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero22; SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero23; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]24; SSE-NEXT: movaps %xmm1, (%rdx)25; SSE-NEXT: retq26;27; AVX-LABEL: store_i32_stride2_vf2:28; AVX: # %bb.0:29; AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero30; AVX-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero31; AVX-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]32; AVX-NEXT: vmovaps %xmm0, (%rdx)33; AVX-NEXT: retq34;35; AVX2-LABEL: store_i32_stride2_vf2:36; AVX2: # %bb.0:37; AVX2-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero38; AVX2-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero39; AVX2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]40; AVX2-NEXT: vmovaps %xmm0, (%rdx)41; AVX2-NEXT: retq42;43; AVX2-FP-LABEL: store_i32_stride2_vf2:44; AVX2-FP: # %bb.0:45; AVX2-FP-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero46; AVX2-FP-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero47; AVX2-FP-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]48; AVX2-FP-NEXT: vmovaps %xmm0, (%rdx)49; AVX2-FP-NEXT: retq50;51; AVX2-FCP-LABEL: store_i32_stride2_vf2:52; AVX2-FCP: # %bb.0:53; AVX2-FCP-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero54; AVX2-FCP-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero55; AVX2-FCP-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]56; AVX2-FCP-NEXT: vmovaps %xmm0, (%rdx)57; AVX2-FCP-NEXT: retq58;59; AVX512-LABEL: store_i32_stride2_vf2:60; AVX512: # %bb.0:61; AVX512-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero62; AVX512-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero63; AVX512-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]64; AVX512-NEXT: vmovaps %xmm0, (%rdx)65; AVX512-NEXT: retq66;67; AVX512-FCP-LABEL: store_i32_stride2_vf2:68; AVX512-FCP: # %bb.0:69; AVX512-FCP-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero70; AVX512-FCP-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero71; AVX512-FCP-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]72; AVX512-FCP-NEXT: vmovaps %xmm0, (%rdx)73; AVX512-FCP-NEXT: retq74;75; AVX512DQ-LABEL: store_i32_stride2_vf2:76; AVX512DQ: # %bb.0:77; AVX512DQ-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero78; AVX512DQ-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero79; AVX512DQ-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]80; AVX512DQ-NEXT: vmovaps %xmm0, (%rdx)81; AVX512DQ-NEXT: retq82;83; AVX512DQ-FCP-LABEL: store_i32_stride2_vf2:84; AVX512DQ-FCP: # %bb.0:85; AVX512DQ-FCP-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero86; AVX512DQ-FCP-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero87; AVX512DQ-FCP-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]88; AVX512DQ-FCP-NEXT: vmovaps %xmm0, (%rdx)89; AVX512DQ-FCP-NEXT: retq90;91; AVX512BW-LABEL: store_i32_stride2_vf2:92; AVX512BW: # %bb.0:93; AVX512BW-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero94; AVX512BW-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero95; AVX512BW-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]96; AVX512BW-NEXT: vmovaps %xmm0, (%rdx)97; AVX512BW-NEXT: retq98;99; AVX512BW-FCP-LABEL: store_i32_stride2_vf2:100; AVX512BW-FCP: # %bb.0:101; AVX512BW-FCP-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero102; AVX512BW-FCP-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero103; AVX512BW-FCP-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]104; AVX512BW-FCP-NEXT: vmovaps %xmm0, (%rdx)105; AVX512BW-FCP-NEXT: retq106;107; AVX512DQ-BW-LABEL: store_i32_stride2_vf2:108; AVX512DQ-BW: # %bb.0:109; AVX512DQ-BW-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero110; AVX512DQ-BW-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero111; AVX512DQ-BW-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]112; AVX512DQ-BW-NEXT: vmovaps %xmm0, (%rdx)113; AVX512DQ-BW-NEXT: retq114;115; AVX512DQ-BW-FCP-LABEL: store_i32_stride2_vf2:116; AVX512DQ-BW-FCP: # %bb.0:117; AVX512DQ-BW-FCP-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero118; AVX512DQ-BW-FCP-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero119; AVX512DQ-BW-FCP-NEXT: vunpcklps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]120; AVX512DQ-BW-FCP-NEXT: vmovaps %xmm0, (%rdx)121; AVX512DQ-BW-FCP-NEXT: retq122 %in.vec0 = load <2 x i32>, ptr %in.vecptr0, align 64123 %in.vec1 = load <2 x i32>, ptr %in.vecptr1, align 64124 %1 = shufflevector <2 x i32> %in.vec0, <2 x i32> %in.vec1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>125 %interleaved.vec = shufflevector <4 x i32> %1, <4 x i32> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>126 store <4 x i32> %interleaved.vec, ptr %out.vec, align 64127 ret void128}129 130define void @store_i32_stride2_vf4(ptr %in.vecptr0, ptr %in.vecptr1, ptr %out.vec) nounwind {131; SSE-LABEL: store_i32_stride2_vf4:132; SSE: # %bb.0:133; SSE-NEXT: movaps (%rdi), %xmm0134; SSE-NEXT: movaps (%rsi), %xmm1135; SSE-NEXT: movaps %xmm0, %xmm2136; SSE-NEXT: unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]137; SSE-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]138; SSE-NEXT: movaps %xmm0, 16(%rdx)139; SSE-NEXT: movaps %xmm2, (%rdx)140; SSE-NEXT: retq141;142; AVX-LABEL: store_i32_stride2_vf4:143; AVX: # %bb.0:144; AVX-NEXT: vmovaps (%rdi), %xmm0145; AVX-NEXT: vmovaps (%rsi), %xmm1146; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2147; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0148; AVX-NEXT: vshufps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5]149; AVX-NEXT: vshufps {{.*#+}} ymm1 = ymm2[0,2,1,3,4,6,5,7]150; AVX-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3,4],ymm1[5],ymm0[6],ymm1[7]151; AVX-NEXT: vmovaps %ymm0, (%rdx)152; AVX-NEXT: vzeroupper153; AVX-NEXT: retq154;155; AVX2-LABEL: store_i32_stride2_vf4:156; AVX2: # %bb.0:157; AVX2-NEXT: vmovaps (%rdi), %xmm0158; AVX2-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0159; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]160; AVX2-NEXT: vpermps %ymm0, %ymm1, %ymm0161; AVX2-NEXT: vmovaps %ymm0, (%rdx)162; AVX2-NEXT: vzeroupper163; AVX2-NEXT: retq164;165; AVX2-FP-LABEL: store_i32_stride2_vf4:166; AVX2-FP: # %bb.0:167; AVX2-FP-NEXT: vmovaps (%rdi), %xmm0168; AVX2-FP-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0169; AVX2-FP-NEXT: vmovaps {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]170; AVX2-FP-NEXT: vpermps %ymm0, %ymm1, %ymm0171; AVX2-FP-NEXT: vmovaps %ymm0, (%rdx)172; AVX2-FP-NEXT: vzeroupper173; AVX2-FP-NEXT: retq174;175; AVX2-FCP-LABEL: store_i32_stride2_vf4:176; AVX2-FCP: # %bb.0:177; AVX2-FCP-NEXT: vmovaps (%rdi), %xmm0178; AVX2-FCP-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0179; AVX2-FCP-NEXT: vmovaps {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]180; AVX2-FCP-NEXT: vpermps %ymm0, %ymm1, %ymm0181; AVX2-FCP-NEXT: vmovaps %ymm0, (%rdx)182; AVX2-FCP-NEXT: vzeroupper183; AVX2-FCP-NEXT: retq184;185; AVX512-LABEL: store_i32_stride2_vf4:186; AVX512: # %bb.0:187; AVX512-NEXT: vmovaps (%rdi), %xmm0188; AVX512-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0189; AVX512-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]190; AVX512-NEXT: vpermps %ymm0, %ymm1, %ymm0191; AVX512-NEXT: vmovaps %ymm0, (%rdx)192; AVX512-NEXT: vzeroupper193; AVX512-NEXT: retq194;195; AVX512-FCP-LABEL: store_i32_stride2_vf4:196; AVX512-FCP: # %bb.0:197; AVX512-FCP-NEXT: vmovaps (%rdi), %xmm0198; AVX512-FCP-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0199; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]200; AVX512-FCP-NEXT: vpermps %ymm0, %ymm1, %ymm0201; AVX512-FCP-NEXT: vmovaps %ymm0, (%rdx)202; AVX512-FCP-NEXT: vzeroupper203; AVX512-FCP-NEXT: retq204;205; AVX512DQ-LABEL: store_i32_stride2_vf4:206; AVX512DQ: # %bb.0:207; AVX512DQ-NEXT: vmovaps (%rdi), %xmm0208; AVX512DQ-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0209; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]210; AVX512DQ-NEXT: vpermps %ymm0, %ymm1, %ymm0211; AVX512DQ-NEXT: vmovaps %ymm0, (%rdx)212; AVX512DQ-NEXT: vzeroupper213; AVX512DQ-NEXT: retq214;215; AVX512DQ-FCP-LABEL: store_i32_stride2_vf4:216; AVX512DQ-FCP: # %bb.0:217; AVX512DQ-FCP-NEXT: vmovaps (%rdi), %xmm0218; AVX512DQ-FCP-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0219; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]220; AVX512DQ-FCP-NEXT: vpermps %ymm0, %ymm1, %ymm0221; AVX512DQ-FCP-NEXT: vmovaps %ymm0, (%rdx)222; AVX512DQ-FCP-NEXT: vzeroupper223; AVX512DQ-FCP-NEXT: retq224;225; AVX512BW-LABEL: store_i32_stride2_vf4:226; AVX512BW: # %bb.0:227; AVX512BW-NEXT: vmovaps (%rdi), %xmm0228; AVX512BW-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0229; AVX512BW-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]230; AVX512BW-NEXT: vpermps %ymm0, %ymm1, %ymm0231; AVX512BW-NEXT: vmovaps %ymm0, (%rdx)232; AVX512BW-NEXT: vzeroupper233; AVX512BW-NEXT: retq234;235; AVX512BW-FCP-LABEL: store_i32_stride2_vf4:236; AVX512BW-FCP: # %bb.0:237; AVX512BW-FCP-NEXT: vmovaps (%rdi), %xmm0238; AVX512BW-FCP-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0239; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]240; AVX512BW-FCP-NEXT: vpermps %ymm0, %ymm1, %ymm0241; AVX512BW-FCP-NEXT: vmovaps %ymm0, (%rdx)242; AVX512BW-FCP-NEXT: vzeroupper243; AVX512BW-FCP-NEXT: retq244;245; AVX512DQ-BW-LABEL: store_i32_stride2_vf4:246; AVX512DQ-BW: # %bb.0:247; AVX512DQ-BW-NEXT: vmovaps (%rdi), %xmm0248; AVX512DQ-BW-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0249; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]250; AVX512DQ-BW-NEXT: vpermps %ymm0, %ymm1, %ymm0251; AVX512DQ-BW-NEXT: vmovaps %ymm0, (%rdx)252; AVX512DQ-BW-NEXT: vzeroupper253; AVX512DQ-BW-NEXT: retq254;255; AVX512DQ-BW-FCP-LABEL: store_i32_stride2_vf4:256; AVX512DQ-BW-FCP: # %bb.0:257; AVX512DQ-BW-FCP-NEXT: vmovaps (%rdi), %xmm0258; AVX512DQ-BW-FCP-NEXT: vinsertf128 $1, (%rsi), %ymm0, %ymm0259; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,4,1,5,2,6,3,7]260; AVX512DQ-BW-FCP-NEXT: vpermps %ymm0, %ymm1, %ymm0261; AVX512DQ-BW-FCP-NEXT: vmovaps %ymm0, (%rdx)262; AVX512DQ-BW-FCP-NEXT: vzeroupper263; AVX512DQ-BW-FCP-NEXT: retq264 %in.vec0 = load <4 x i32>, ptr %in.vecptr0, align 64265 %in.vec1 = load <4 x i32>, ptr %in.vecptr1, align 64266 %1 = shufflevector <4 x i32> %in.vec0, <4 x i32> %in.vec1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>267 %interleaved.vec = shufflevector <8 x i32> %1, <8 x i32> poison, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>268 store <8 x i32> %interleaved.vec, ptr %out.vec, align 64269 ret void270}271 272define void @store_i32_stride2_vf8(ptr %in.vecptr0, ptr %in.vecptr1, ptr %out.vec) nounwind {273; SSE-LABEL: store_i32_stride2_vf8:274; SSE: # %bb.0:275; SSE-NEXT: movaps (%rdi), %xmm0276; SSE-NEXT: movaps 16(%rdi), %xmm1277; SSE-NEXT: movaps (%rsi), %xmm2278; SSE-NEXT: movaps 16(%rsi), %xmm3279; SSE-NEXT: movaps %xmm0, %xmm4280; SSE-NEXT: unpckhps {{.*#+}} xmm4 = xmm4[2],xmm2[2],xmm4[3],xmm2[3]281; SSE-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]282; SSE-NEXT: movaps %xmm1, %xmm2283; SSE-NEXT: unpckhps {{.*#+}} xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]284; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]285; SSE-NEXT: movaps %xmm1, 32(%rdx)286; SSE-NEXT: movaps %xmm2, 48(%rdx)287; SSE-NEXT: movaps %xmm0, (%rdx)288; SSE-NEXT: movaps %xmm4, 16(%rdx)289; SSE-NEXT: retq290;291; AVX-LABEL: store_i32_stride2_vf8:292; AVX: # %bb.0:293; AVX-NEXT: vmovaps (%rdi), %ymm0294; AVX-NEXT: vmovaps (%rsi), %ymm1295; AVX-NEXT: vunpcklps {{.*#+}} ymm2 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]296; AVX-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]297; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm1298; AVX-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm2[2,3],ymm0[2,3]299; AVX-NEXT: vmovaps %ymm0, 32(%rdx)300; AVX-NEXT: vmovaps %ymm1, (%rdx)301; AVX-NEXT: vzeroupper302; AVX-NEXT: retq303;304; AVX2-LABEL: store_i32_stride2_vf8:305; AVX2: # %bb.0:306; AVX2-NEXT: vmovaps (%rdi), %ymm0307; AVX2-NEXT: vmovaps (%rsi), %ymm1308; AVX2-NEXT: vunpckhps {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]309; AVX2-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]310; AVX2-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[0,1],ymm2[0,1]311; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]312; AVX2-NEXT: vmovaps %ymm0, 32(%rdx)313; AVX2-NEXT: vmovaps %ymm1, (%rdx)314; AVX2-NEXT: vzeroupper315; AVX2-NEXT: retq316;317; AVX2-FP-LABEL: store_i32_stride2_vf8:318; AVX2-FP: # %bb.0:319; AVX2-FP-NEXT: vmovaps (%rdi), %ymm0320; AVX2-FP-NEXT: vmovaps (%rsi), %ymm1321; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]322; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]323; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[0,1],ymm2[0,1]324; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]325; AVX2-FP-NEXT: vmovaps %ymm0, 32(%rdx)326; AVX2-FP-NEXT: vmovaps %ymm1, (%rdx)327; AVX2-FP-NEXT: vzeroupper328; AVX2-FP-NEXT: retq329;330; AVX2-FCP-LABEL: store_i32_stride2_vf8:331; AVX2-FCP: # %bb.0:332; AVX2-FCP-NEXT: vmovaps (%rdi), %ymm0333; AVX2-FCP-NEXT: vmovaps (%rsi), %ymm1334; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]335; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]336; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[0,1],ymm2[0,1]337; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]338; AVX2-FCP-NEXT: vmovaps %ymm0, 32(%rdx)339; AVX2-FCP-NEXT: vmovaps %ymm1, (%rdx)340; AVX2-FCP-NEXT: vzeroupper341; AVX2-FCP-NEXT: retq342;343; AVX512-LABEL: store_i32_stride2_vf8:344; AVX512: # %bb.0:345; AVX512-NEXT: vmovaps (%rdi), %ymm0346; AVX512-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0347; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]348; AVX512-NEXT: vpermps %zmm0, %zmm1, %zmm0349; AVX512-NEXT: vmovaps %zmm0, (%rdx)350; AVX512-NEXT: vzeroupper351; AVX512-NEXT: retq352;353; AVX512-FCP-LABEL: store_i32_stride2_vf8:354; AVX512-FCP: # %bb.0:355; AVX512-FCP-NEXT: vmovaps (%rdi), %ymm0356; AVX512-FCP-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0357; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]358; AVX512-FCP-NEXT: vpermps %zmm0, %zmm1, %zmm0359; AVX512-FCP-NEXT: vmovaps %zmm0, (%rdx)360; AVX512-FCP-NEXT: vzeroupper361; AVX512-FCP-NEXT: retq362;363; AVX512DQ-LABEL: store_i32_stride2_vf8:364; AVX512DQ: # %bb.0:365; AVX512DQ-NEXT: vmovaps (%rdi), %ymm0366; AVX512DQ-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0367; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]368; AVX512DQ-NEXT: vpermps %zmm0, %zmm1, %zmm0369; AVX512DQ-NEXT: vmovaps %zmm0, (%rdx)370; AVX512DQ-NEXT: vzeroupper371; AVX512DQ-NEXT: retq372;373; AVX512DQ-FCP-LABEL: store_i32_stride2_vf8:374; AVX512DQ-FCP: # %bb.0:375; AVX512DQ-FCP-NEXT: vmovaps (%rdi), %ymm0376; AVX512DQ-FCP-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0377; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]378; AVX512DQ-FCP-NEXT: vpermps %zmm0, %zmm1, %zmm0379; AVX512DQ-FCP-NEXT: vmovaps %zmm0, (%rdx)380; AVX512DQ-FCP-NEXT: vzeroupper381; AVX512DQ-FCP-NEXT: retq382;383; AVX512BW-LABEL: store_i32_stride2_vf8:384; AVX512BW: # %bb.0:385; AVX512BW-NEXT: vmovaps (%rdi), %ymm0386; AVX512BW-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0387; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]388; AVX512BW-NEXT: vpermps %zmm0, %zmm1, %zmm0389; AVX512BW-NEXT: vmovaps %zmm0, (%rdx)390; AVX512BW-NEXT: vzeroupper391; AVX512BW-NEXT: retq392;393; AVX512BW-FCP-LABEL: store_i32_stride2_vf8:394; AVX512BW-FCP: # %bb.0:395; AVX512BW-FCP-NEXT: vmovaps (%rdi), %ymm0396; AVX512BW-FCP-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0397; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]398; AVX512BW-FCP-NEXT: vpermps %zmm0, %zmm1, %zmm0399; AVX512BW-FCP-NEXT: vmovaps %zmm0, (%rdx)400; AVX512BW-FCP-NEXT: vzeroupper401; AVX512BW-FCP-NEXT: retq402;403; AVX512DQ-BW-LABEL: store_i32_stride2_vf8:404; AVX512DQ-BW: # %bb.0:405; AVX512DQ-BW-NEXT: vmovaps (%rdi), %ymm0406; AVX512DQ-BW-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0407; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]408; AVX512DQ-BW-NEXT: vpermps %zmm0, %zmm1, %zmm0409; AVX512DQ-BW-NEXT: vmovaps %zmm0, (%rdx)410; AVX512DQ-BW-NEXT: vzeroupper411; AVX512DQ-BW-NEXT: retq412;413; AVX512DQ-BW-FCP-LABEL: store_i32_stride2_vf8:414; AVX512DQ-BW-FCP: # %bb.0:415; AVX512DQ-BW-FCP-NEXT: vmovaps (%rdi), %ymm0416; AVX512DQ-BW-FCP-NEXT: vinsertf64x4 $1, (%rsi), %zmm0, %zmm0417; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm1 = [0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15]418; AVX512DQ-BW-FCP-NEXT: vpermps %zmm0, %zmm1, %zmm0419; AVX512DQ-BW-FCP-NEXT: vmovaps %zmm0, (%rdx)420; AVX512DQ-BW-FCP-NEXT: vzeroupper421; AVX512DQ-BW-FCP-NEXT: retq422 %in.vec0 = load <8 x i32>, ptr %in.vecptr0, align 64423 %in.vec1 = load <8 x i32>, ptr %in.vecptr1, align 64424 %1 = shufflevector <8 x i32> %in.vec0, <8 x i32> %in.vec1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>425 %interleaved.vec = shufflevector <16 x i32> %1, <16 x i32> poison, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>426 store <16 x i32> %interleaved.vec, ptr %out.vec, align 64427 ret void428}429 430define void @store_i32_stride2_vf16(ptr %in.vecptr0, ptr %in.vecptr1, ptr %out.vec) nounwind {431; SSE-LABEL: store_i32_stride2_vf16:432; SSE: # %bb.0:433; SSE-NEXT: movaps (%rdi), %xmm0434; SSE-NEXT: movaps 16(%rdi), %xmm1435; SSE-NEXT: movaps 32(%rdi), %xmm2436; SSE-NEXT: movaps 48(%rdi), %xmm3437; SSE-NEXT: movaps (%rsi), %xmm4438; SSE-NEXT: movaps 16(%rsi), %xmm5439; SSE-NEXT: movaps 32(%rsi), %xmm6440; SSE-NEXT: movaps 48(%rsi), %xmm7441; SSE-NEXT: movaps %xmm0, %xmm8442; SSE-NEXT: unpckhps {{.*#+}} xmm8 = xmm8[2],xmm4[2],xmm8[3],xmm4[3]443; SSE-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]444; SSE-NEXT: movaps %xmm1, %xmm4445; SSE-NEXT: unpckhps {{.*#+}} xmm4 = xmm4[2],xmm5[2],xmm4[3],xmm5[3]446; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]447; SSE-NEXT: movaps %xmm2, %xmm5448; SSE-NEXT: unpckhps {{.*#+}} xmm5 = xmm5[2],xmm6[2],xmm5[3],xmm6[3]449; SSE-NEXT: unpcklps {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1]450; SSE-NEXT: movaps %xmm3, %xmm6451; SSE-NEXT: unpckhps {{.*#+}} xmm6 = xmm6[2],xmm7[2],xmm6[3],xmm7[3]452; SSE-NEXT: unpcklps {{.*#+}} xmm3 = xmm3[0],xmm7[0],xmm3[1],xmm7[1]453; SSE-NEXT: movaps %xmm3, 96(%rdx)454; SSE-NEXT: movaps %xmm6, 112(%rdx)455; SSE-NEXT: movaps %xmm2, 64(%rdx)456; SSE-NEXT: movaps %xmm5, 80(%rdx)457; SSE-NEXT: movaps %xmm1, 32(%rdx)458; SSE-NEXT: movaps %xmm4, 48(%rdx)459; SSE-NEXT: movaps %xmm0, (%rdx)460; SSE-NEXT: movaps %xmm8, 16(%rdx)461; SSE-NEXT: retq462;463; AVX-LABEL: store_i32_stride2_vf16:464; AVX: # %bb.0:465; AVX-NEXT: vmovaps (%rdi), %ymm0466; AVX-NEXT: vmovaps 32(%rdi), %ymm1467; AVX-NEXT: vmovaps (%rsi), %ymm2468; AVX-NEXT: vmovaps 32(%rsi), %ymm3469; AVX-NEXT: vunpcklps {{.*#+}} ymm4 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[4],ymm2[4],ymm0[5],ymm2[5]470; AVX-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[6],ymm2[6],ymm0[7],ymm2[7]471; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm4, %ymm2472; AVX-NEXT: vunpcklps {{.*#+}} ymm5 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[4],ymm3[4],ymm1[5],ymm3[5]473; AVX-NEXT: vunpckhps {{.*#+}} ymm1 = ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[6],ymm3[6],ymm1[7],ymm3[7]474; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm5, %ymm3475; AVX-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm4[2,3],ymm0[2,3]476; AVX-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm5[2,3],ymm1[2,3]477; AVX-NEXT: vmovaps %ymm1, 96(%rdx)478; AVX-NEXT: vmovaps %ymm0, 32(%rdx)479; AVX-NEXT: vmovaps %ymm3, 64(%rdx)480; AVX-NEXT: vmovaps %ymm2, (%rdx)481; AVX-NEXT: vzeroupper482; AVX-NEXT: retq483;484; AVX2-LABEL: store_i32_stride2_vf16:485; AVX2: # %bb.0:486; AVX2-NEXT: vmovaps (%rdi), %ymm0487; AVX2-NEXT: vmovaps 32(%rdi), %ymm1488; AVX2-NEXT: vmovaps (%rsi), %ymm2489; AVX2-NEXT: vmovaps 32(%rsi), %ymm3490; AVX2-NEXT: vunpckhps {{.*#+}} ymm4 = ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[6],ymm2[6],ymm0[7],ymm2[7]491; AVX2-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[4],ymm2[4],ymm0[5],ymm2[5]492; AVX2-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm4[2,3]493; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[0,1],ymm4[0,1]494; AVX2-NEXT: vunpckhps {{.*#+}} ymm4 = ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[6],ymm3[6],ymm1[7],ymm3[7]495; AVX2-NEXT: vunpcklps {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[4],ymm3[4],ymm1[5],ymm3[5]496; AVX2-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm1[2,3],ymm4[2,3]497; AVX2-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[0,1],ymm4[0,1]498; AVX2-NEXT: vmovaps %ymm1, 64(%rdx)499; AVX2-NEXT: vmovaps %ymm3, 96(%rdx)500; AVX2-NEXT: vmovaps %ymm0, (%rdx)501; AVX2-NEXT: vmovaps %ymm2, 32(%rdx)502; AVX2-NEXT: vzeroupper503; AVX2-NEXT: retq504;505; AVX2-FP-LABEL: store_i32_stride2_vf16:506; AVX2-FP: # %bb.0:507; AVX2-FP-NEXT: vmovaps (%rdi), %ymm0508; AVX2-FP-NEXT: vmovaps 32(%rdi), %ymm1509; AVX2-FP-NEXT: vmovaps (%rsi), %ymm2510; AVX2-FP-NEXT: vmovaps 32(%rsi), %ymm3511; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm4 = ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[6],ymm2[6],ymm0[7],ymm2[7]512; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[4],ymm2[4],ymm0[5],ymm2[5]513; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm4[2,3]514; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[0,1],ymm4[0,1]515; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm4 = ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[6],ymm3[6],ymm1[7],ymm3[7]516; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[4],ymm3[4],ymm1[5],ymm3[5]517; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm1[2,3],ymm4[2,3]518; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[0,1],ymm4[0,1]519; AVX2-FP-NEXT: vmovaps %ymm1, 64(%rdx)520; AVX2-FP-NEXT: vmovaps %ymm3, 96(%rdx)521; AVX2-FP-NEXT: vmovaps %ymm0, (%rdx)522; AVX2-FP-NEXT: vmovaps %ymm2, 32(%rdx)523; AVX2-FP-NEXT: vzeroupper524; AVX2-FP-NEXT: retq525;526; AVX2-FCP-LABEL: store_i32_stride2_vf16:527; AVX2-FCP: # %bb.0:528; AVX2-FCP-NEXT: vmovaps (%rdi), %ymm0529; AVX2-FCP-NEXT: vmovaps 32(%rdi), %ymm1530; AVX2-FCP-NEXT: vmovaps (%rsi), %ymm2531; AVX2-FCP-NEXT: vmovaps 32(%rsi), %ymm3532; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm4 = ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[6],ymm2[6],ymm0[7],ymm2[7]533; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[4],ymm2[4],ymm0[5],ymm2[5]534; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3],ymm4[2,3]535; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[0,1],ymm4[0,1]536; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm4 = ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[6],ymm3[6],ymm1[7],ymm3[7]537; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[4],ymm3[4],ymm1[5],ymm3[5]538; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm1[2,3],ymm4[2,3]539; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[0,1],ymm4[0,1]540; AVX2-FCP-NEXT: vmovaps %ymm1, 64(%rdx)541; AVX2-FCP-NEXT: vmovaps %ymm3, 96(%rdx)542; AVX2-FCP-NEXT: vmovaps %ymm0, (%rdx)543; AVX2-FCP-NEXT: vmovaps %ymm2, 32(%rdx)544; AVX2-FCP-NEXT: vzeroupper545; AVX2-FCP-NEXT: retq546;547; AVX512-LABEL: store_i32_stride2_vf16:548; AVX512: # %bb.0:549; AVX512-NEXT: vmovdqa64 (%rdi), %zmm0550; AVX512-NEXT: vmovdqa64 (%rsi), %zmm1551; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]552; AVX512-NEXT: vpermi2d %zmm1, %zmm0, %zmm2553; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]554; AVX512-NEXT: vpermi2d %zmm1, %zmm0, %zmm3555; AVX512-NEXT: vmovdqa64 %zmm3, 64(%rdx)556; AVX512-NEXT: vmovdqa64 %zmm2, (%rdx)557; AVX512-NEXT: vzeroupper558; AVX512-NEXT: retq559;560; AVX512-FCP-LABEL: store_i32_stride2_vf16:561; AVX512-FCP: # %bb.0:562; AVX512-FCP-NEXT: vmovdqa64 (%rdi), %zmm0563; AVX512-FCP-NEXT: vmovdqa64 (%rsi), %zmm1564; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]565; AVX512-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm2566; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]567; AVX512-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm3568; AVX512-FCP-NEXT: vmovdqa64 %zmm3, 64(%rdx)569; AVX512-FCP-NEXT: vmovdqa64 %zmm2, (%rdx)570; AVX512-FCP-NEXT: vzeroupper571; AVX512-FCP-NEXT: retq572;573; AVX512DQ-LABEL: store_i32_stride2_vf16:574; AVX512DQ: # %bb.0:575; AVX512DQ-NEXT: vmovdqa64 (%rdi), %zmm0576; AVX512DQ-NEXT: vmovdqa64 (%rsi), %zmm1577; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]578; AVX512DQ-NEXT: vpermi2d %zmm1, %zmm0, %zmm2579; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]580; AVX512DQ-NEXT: vpermi2d %zmm1, %zmm0, %zmm3581; AVX512DQ-NEXT: vmovdqa64 %zmm3, 64(%rdx)582; AVX512DQ-NEXT: vmovdqa64 %zmm2, (%rdx)583; AVX512DQ-NEXT: vzeroupper584; AVX512DQ-NEXT: retq585;586; AVX512DQ-FCP-LABEL: store_i32_stride2_vf16:587; AVX512DQ-FCP: # %bb.0:588; AVX512DQ-FCP-NEXT: vmovdqa64 (%rdi), %zmm0589; AVX512DQ-FCP-NEXT: vmovdqa64 (%rsi), %zmm1590; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]591; AVX512DQ-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm2592; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]593; AVX512DQ-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm3594; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm3, 64(%rdx)595; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm2, (%rdx)596; AVX512DQ-FCP-NEXT: vzeroupper597; AVX512DQ-FCP-NEXT: retq598;599; AVX512BW-LABEL: store_i32_stride2_vf16:600; AVX512BW: # %bb.0:601; AVX512BW-NEXT: vmovdqa64 (%rdi), %zmm0602; AVX512BW-NEXT: vmovdqa64 (%rsi), %zmm1603; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]604; AVX512BW-NEXT: vpermi2d %zmm1, %zmm0, %zmm2605; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]606; AVX512BW-NEXT: vpermi2d %zmm1, %zmm0, %zmm3607; AVX512BW-NEXT: vmovdqa64 %zmm3, 64(%rdx)608; AVX512BW-NEXT: vmovdqa64 %zmm2, (%rdx)609; AVX512BW-NEXT: vzeroupper610; AVX512BW-NEXT: retq611;612; AVX512BW-FCP-LABEL: store_i32_stride2_vf16:613; AVX512BW-FCP: # %bb.0:614; AVX512BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm0615; AVX512BW-FCP-NEXT: vmovdqa64 (%rsi), %zmm1616; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]617; AVX512BW-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm2618; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]619; AVX512BW-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm3620; AVX512BW-FCP-NEXT: vmovdqa64 %zmm3, 64(%rdx)621; AVX512BW-FCP-NEXT: vmovdqa64 %zmm2, (%rdx)622; AVX512BW-FCP-NEXT: vzeroupper623; AVX512BW-FCP-NEXT: retq624;625; AVX512DQ-BW-LABEL: store_i32_stride2_vf16:626; AVX512DQ-BW: # %bb.0:627; AVX512DQ-BW-NEXT: vmovdqa64 (%rdi), %zmm0628; AVX512DQ-BW-NEXT: vmovdqa64 (%rsi), %zmm1629; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]630; AVX512DQ-BW-NEXT: vpermi2d %zmm1, %zmm0, %zmm2631; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]632; AVX512DQ-BW-NEXT: vpermi2d %zmm1, %zmm0, %zmm3633; AVX512DQ-BW-NEXT: vmovdqa64 %zmm3, 64(%rdx)634; AVX512DQ-BW-NEXT: vmovdqa64 %zmm2, (%rdx)635; AVX512DQ-BW-NEXT: vzeroupper636; AVX512DQ-BW-NEXT: retq637;638; AVX512DQ-BW-FCP-LABEL: store_i32_stride2_vf16:639; AVX512DQ-BW-FCP: # %bb.0:640; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm0641; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rsi), %zmm1642; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm2 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]643; AVX512DQ-BW-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm2644; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm3 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]645; AVX512DQ-BW-FCP-NEXT: vpermi2d %zmm1, %zmm0, %zmm3646; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm3, 64(%rdx)647; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm2, (%rdx)648; AVX512DQ-BW-FCP-NEXT: vzeroupper649; AVX512DQ-BW-FCP-NEXT: retq650 %in.vec0 = load <16 x i32>, ptr %in.vecptr0, align 64651 %in.vec1 = load <16 x i32>, ptr %in.vecptr1, align 64652 %1 = shufflevector <16 x i32> %in.vec0, <16 x i32> %in.vec1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>653 %interleaved.vec = shufflevector <32 x i32> %1, <32 x i32> poison, <32 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, 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>654 store <32 x i32> %interleaved.vec, ptr %out.vec, align 64655 ret void656}657 658define void @store_i32_stride2_vf32(ptr %in.vecptr0, ptr %in.vecptr1, ptr %out.vec) nounwind {659; SSE-LABEL: store_i32_stride2_vf32:660; SSE: # %bb.0:661; SSE-NEXT: movaps 112(%rdi), %xmm0662; SSE-NEXT: movaps 96(%rdi), %xmm6663; SSE-NEXT: movaps 80(%rdi), %xmm4664; SSE-NEXT: movaps 64(%rdi), %xmm3665; SSE-NEXT: movaps (%rdi), %xmm8666; SSE-NEXT: movaps 16(%rdi), %xmm1667; SSE-NEXT: movaps 32(%rdi), %xmm2668; SSE-NEXT: movaps 48(%rdi), %xmm5669; SSE-NEXT: movaps 96(%rsi), %xmm11670; SSE-NEXT: movaps 80(%rsi), %xmm12671; SSE-NEXT: movaps 64(%rsi), %xmm13672; SSE-NEXT: movaps (%rsi), %xmm9673; SSE-NEXT: movaps 16(%rsi), %xmm10674; SSE-NEXT: movaps 32(%rsi), %xmm14675; SSE-NEXT: movaps 48(%rsi), %xmm15676; SSE-NEXT: movaps %xmm8, %xmm7677; SSE-NEXT: unpckhps {{.*#+}} xmm7 = xmm7[2],xmm9[2],xmm7[3],xmm9[3]678; SSE-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill679; SSE-NEXT: unpcklps {{.*#+}} xmm8 = xmm8[0],xmm9[0],xmm8[1],xmm9[1]680; SSE-NEXT: movaps %xmm1, %xmm9681; SSE-NEXT: unpckhps {{.*#+}} xmm9 = xmm9[2],xmm10[2],xmm9[3],xmm10[3]682; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm10[0],xmm1[1],xmm10[1]683; SSE-NEXT: movaps %xmm2, %xmm10684; SSE-NEXT: unpckhps {{.*#+}} xmm10 = xmm10[2],xmm14[2],xmm10[3],xmm14[3]685; SSE-NEXT: unpcklps {{.*#+}} xmm2 = xmm2[0],xmm14[0],xmm2[1],xmm14[1]686; SSE-NEXT: movaps %xmm5, %xmm14687; SSE-NEXT: unpckhps {{.*#+}} xmm14 = xmm14[2],xmm15[2],xmm14[3],xmm15[3]688; SSE-NEXT: unpcklps {{.*#+}} xmm5 = xmm5[0],xmm15[0],xmm5[1],xmm15[1]689; SSE-NEXT: movaps %xmm3, %xmm15690; SSE-NEXT: unpckhps {{.*#+}} xmm15 = xmm15[2],xmm13[2],xmm15[3],xmm13[3]691; SSE-NEXT: unpcklps {{.*#+}} xmm3 = xmm3[0],xmm13[0],xmm3[1],xmm13[1]692; SSE-NEXT: movaps %xmm4, %xmm13693; SSE-NEXT: unpckhps {{.*#+}} xmm13 = xmm13[2],xmm12[2],xmm13[3],xmm12[3]694; SSE-NEXT: unpcklps {{.*#+}} xmm4 = xmm4[0],xmm12[0],xmm4[1],xmm12[1]695; SSE-NEXT: movaps %xmm6, %xmm12696; SSE-NEXT: unpckhps {{.*#+}} xmm12 = xmm12[2],xmm11[2],xmm12[3],xmm11[3]697; SSE-NEXT: unpcklps {{.*#+}} xmm6 = xmm6[0],xmm11[0],xmm6[1],xmm11[1]698; SSE-NEXT: movaps 112(%rsi), %xmm11699; SSE-NEXT: movaps %xmm0, %xmm7700; SSE-NEXT: unpckhps {{.*#+}} xmm7 = xmm7[2],xmm11[2],xmm7[3],xmm11[3]701; SSE-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm11[0],xmm0[1],xmm11[1]702; SSE-NEXT: movaps %xmm0, 224(%rdx)703; SSE-NEXT: movaps %xmm7, 240(%rdx)704; SSE-NEXT: movaps %xmm6, 192(%rdx)705; SSE-NEXT: movaps %xmm12, 208(%rdx)706; SSE-NEXT: movaps %xmm4, 160(%rdx)707; SSE-NEXT: movaps %xmm13, 176(%rdx)708; SSE-NEXT: movaps %xmm3, 128(%rdx)709; SSE-NEXT: movaps %xmm15, 144(%rdx)710; SSE-NEXT: movaps %xmm5, 96(%rdx)711; SSE-NEXT: movaps %xmm14, 112(%rdx)712; SSE-NEXT: movaps %xmm2, 64(%rdx)713; SSE-NEXT: movaps %xmm10, 80(%rdx)714; SSE-NEXT: movaps %xmm1, 32(%rdx)715; SSE-NEXT: movaps %xmm9, 48(%rdx)716; SSE-NEXT: movaps %xmm8, (%rdx)717; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload718; SSE-NEXT: movaps %xmm0, 16(%rdx)719; SSE-NEXT: retq720;721; AVX-LABEL: store_i32_stride2_vf32:722; AVX: # %bb.0:723; AVX-NEXT: vmovaps (%rdi), %ymm0724; AVX-NEXT: vmovaps 32(%rdi), %ymm1725; AVX-NEXT: vmovaps 64(%rdi), %ymm2726; AVX-NEXT: vmovaps 96(%rdi), %ymm3727; AVX-NEXT: vmovaps (%rsi), %ymm4728; AVX-NEXT: vmovaps 32(%rsi), %ymm5729; AVX-NEXT: vmovaps 64(%rsi), %ymm6730; AVX-NEXT: vmovaps 96(%rsi), %ymm7731; AVX-NEXT: vunpcklps {{.*#+}} ymm8 = ymm0[0],ymm4[0],ymm0[1],ymm4[1],ymm0[4],ymm4[4],ymm0[5],ymm4[5]732; AVX-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm4[2],ymm0[3],ymm4[3],ymm0[6],ymm4[6],ymm0[7],ymm4[7]733; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm8, %ymm4734; AVX-NEXT: vunpcklps {{.*#+}} ymm9 = ymm1[0],ymm5[0],ymm1[1],ymm5[1],ymm1[4],ymm5[4],ymm1[5],ymm5[5]735; AVX-NEXT: vunpckhps {{.*#+}} ymm1 = ymm1[2],ymm5[2],ymm1[3],ymm5[3],ymm1[6],ymm5[6],ymm1[7],ymm5[7]736; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm9, %ymm5737; AVX-NEXT: vunpcklps {{.*#+}} ymm10 = ymm2[0],ymm6[0],ymm2[1],ymm6[1],ymm2[4],ymm6[4],ymm2[5],ymm6[5]738; AVX-NEXT: vunpckhps {{.*#+}} ymm2 = ymm2[2],ymm6[2],ymm2[3],ymm6[3],ymm2[6],ymm6[6],ymm2[7],ymm6[7]739; AVX-NEXT: vinsertf128 $1, %xmm2, %ymm10, %ymm6740; AVX-NEXT: vunpcklps {{.*#+}} ymm11 = ymm3[0],ymm7[0],ymm3[1],ymm7[1],ymm3[4],ymm7[4],ymm3[5],ymm7[5]741; AVX-NEXT: vunpckhps {{.*#+}} ymm3 = ymm3[2],ymm7[2],ymm3[3],ymm7[3],ymm3[6],ymm7[6],ymm3[7],ymm7[7]742; AVX-NEXT: vinsertf128 $1, %xmm3, %ymm11, %ymm7743; AVX-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm8[2,3],ymm0[2,3]744; AVX-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm9[2,3],ymm1[2,3]745; AVX-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm10[2,3],ymm2[2,3]746; AVX-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm11[2,3],ymm3[2,3]747; AVX-NEXT: vmovaps %ymm3, 224(%rdx)748; AVX-NEXT: vmovaps %ymm2, 160(%rdx)749; AVX-NEXT: vmovaps %ymm1, 96(%rdx)750; AVX-NEXT: vmovaps %ymm0, 32(%rdx)751; AVX-NEXT: vmovaps %ymm7, 192(%rdx)752; AVX-NEXT: vmovaps %ymm6, 128(%rdx)753; AVX-NEXT: vmovaps %ymm5, 64(%rdx)754; AVX-NEXT: vmovaps %ymm4, (%rdx)755; AVX-NEXT: vzeroupper756; AVX-NEXT: retq757;758; AVX2-LABEL: store_i32_stride2_vf32:759; AVX2: # %bb.0:760; AVX2-NEXT: vmovaps (%rdi), %ymm0761; AVX2-NEXT: vmovaps 32(%rdi), %ymm1762; AVX2-NEXT: vmovaps 64(%rdi), %ymm2763; AVX2-NEXT: vmovaps 96(%rdi), %ymm3764; AVX2-NEXT: vmovaps (%rsi), %ymm4765; AVX2-NEXT: vmovaps 32(%rsi), %ymm5766; AVX2-NEXT: vmovaps 64(%rsi), %ymm6767; AVX2-NEXT: vmovaps 96(%rsi), %ymm7768; AVX2-NEXT: vunpckhps {{.*#+}} ymm8 = ymm0[2],ymm4[2],ymm0[3],ymm4[3],ymm0[6],ymm4[6],ymm0[7],ymm4[7]769; AVX2-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm4[0],ymm0[1],ymm4[1],ymm0[4],ymm4[4],ymm0[5],ymm4[5]770; AVX2-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3],ymm8[2,3]771; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[0,1],ymm8[0,1]772; AVX2-NEXT: vunpckhps {{.*#+}} ymm8 = ymm1[2],ymm5[2],ymm1[3],ymm5[3],ymm1[6],ymm5[6],ymm1[7],ymm5[7]773; AVX2-NEXT: vunpcklps {{.*#+}} ymm1 = ymm1[0],ymm5[0],ymm1[1],ymm5[1],ymm1[4],ymm5[4],ymm1[5],ymm5[5]774; AVX2-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm1[2,3],ymm8[2,3]775; AVX2-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[0,1],ymm8[0,1]776; AVX2-NEXT: vunpckhps {{.*#+}} ymm8 = ymm2[2],ymm6[2],ymm2[3],ymm6[3],ymm2[6],ymm6[6],ymm2[7],ymm6[7]777; AVX2-NEXT: vunpcklps {{.*#+}} ymm2 = ymm2[0],ymm6[0],ymm2[1],ymm6[1],ymm2[4],ymm6[4],ymm2[5],ymm6[5]778; AVX2-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm2[2,3],ymm8[2,3]779; AVX2-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm2[0,1],ymm8[0,1]780; AVX2-NEXT: vunpckhps {{.*#+}} ymm8 = ymm3[2],ymm7[2],ymm3[3],ymm7[3],ymm3[6],ymm7[6],ymm3[7],ymm7[7]781; AVX2-NEXT: vunpcklps {{.*#+}} ymm3 = ymm3[0],ymm7[0],ymm3[1],ymm7[1],ymm3[4],ymm7[4],ymm3[5],ymm7[5]782; AVX2-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm3[2,3],ymm8[2,3]783; AVX2-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm3[0,1],ymm8[0,1]784; AVX2-NEXT: vmovaps %ymm3, 192(%rdx)785; AVX2-NEXT: vmovaps %ymm7, 224(%rdx)786; AVX2-NEXT: vmovaps %ymm2, 128(%rdx)787; AVX2-NEXT: vmovaps %ymm6, 160(%rdx)788; AVX2-NEXT: vmovaps %ymm1, 64(%rdx)789; AVX2-NEXT: vmovaps %ymm5, 96(%rdx)790; AVX2-NEXT: vmovaps %ymm0, (%rdx)791; AVX2-NEXT: vmovaps %ymm4, 32(%rdx)792; AVX2-NEXT: vzeroupper793; AVX2-NEXT: retq794;795; AVX2-FP-LABEL: store_i32_stride2_vf32:796; AVX2-FP: # %bb.0:797; AVX2-FP-NEXT: vmovaps (%rdi), %ymm0798; AVX2-FP-NEXT: vmovaps 32(%rdi), %ymm1799; AVX2-FP-NEXT: vmovaps 64(%rdi), %ymm2800; AVX2-FP-NEXT: vmovaps 96(%rdi), %ymm3801; AVX2-FP-NEXT: vmovaps (%rsi), %ymm4802; AVX2-FP-NEXT: vmovaps 32(%rsi), %ymm5803; AVX2-FP-NEXT: vmovaps 64(%rsi), %ymm6804; AVX2-FP-NEXT: vmovaps 96(%rsi), %ymm7805; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm0[2],ymm4[2],ymm0[3],ymm4[3],ymm0[6],ymm4[6],ymm0[7],ymm4[7]806; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm4[0],ymm0[1],ymm4[1],ymm0[4],ymm4[4],ymm0[5],ymm4[5]807; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3],ymm8[2,3]808; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[0,1],ymm8[0,1]809; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm1[2],ymm5[2],ymm1[3],ymm5[3],ymm1[6],ymm5[6],ymm1[7],ymm5[7]810; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm1 = ymm1[0],ymm5[0],ymm1[1],ymm5[1],ymm1[4],ymm5[4],ymm1[5],ymm5[5]811; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm1[2,3],ymm8[2,3]812; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[0,1],ymm8[0,1]813; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm2[2],ymm6[2],ymm2[3],ymm6[3],ymm2[6],ymm6[6],ymm2[7],ymm6[7]814; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm2 = ymm2[0],ymm6[0],ymm2[1],ymm6[1],ymm2[4],ymm6[4],ymm2[5],ymm6[5]815; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm2[2,3],ymm8[2,3]816; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm2[0,1],ymm8[0,1]817; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm3[2],ymm7[2],ymm3[3],ymm7[3],ymm3[6],ymm7[6],ymm3[7],ymm7[7]818; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm3 = ymm3[0],ymm7[0],ymm3[1],ymm7[1],ymm3[4],ymm7[4],ymm3[5],ymm7[5]819; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm3[2,3],ymm8[2,3]820; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm3[0,1],ymm8[0,1]821; AVX2-FP-NEXT: vmovaps %ymm3, 192(%rdx)822; AVX2-FP-NEXT: vmovaps %ymm7, 224(%rdx)823; AVX2-FP-NEXT: vmovaps %ymm2, 128(%rdx)824; AVX2-FP-NEXT: vmovaps %ymm6, 160(%rdx)825; AVX2-FP-NEXT: vmovaps %ymm1, 64(%rdx)826; AVX2-FP-NEXT: vmovaps %ymm5, 96(%rdx)827; AVX2-FP-NEXT: vmovaps %ymm0, (%rdx)828; AVX2-FP-NEXT: vmovaps %ymm4, 32(%rdx)829; AVX2-FP-NEXT: vzeroupper830; AVX2-FP-NEXT: retq831;832; AVX2-FCP-LABEL: store_i32_stride2_vf32:833; AVX2-FCP: # %bb.0:834; AVX2-FCP-NEXT: vmovaps (%rdi), %ymm0835; AVX2-FCP-NEXT: vmovaps 32(%rdi), %ymm1836; AVX2-FCP-NEXT: vmovaps 64(%rdi), %ymm2837; AVX2-FCP-NEXT: vmovaps 96(%rdi), %ymm3838; AVX2-FCP-NEXT: vmovaps (%rsi), %ymm4839; AVX2-FCP-NEXT: vmovaps 32(%rsi), %ymm5840; AVX2-FCP-NEXT: vmovaps 64(%rsi), %ymm6841; AVX2-FCP-NEXT: vmovaps 96(%rsi), %ymm7842; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm0[2],ymm4[2],ymm0[3],ymm4[3],ymm0[6],ymm4[6],ymm0[7],ymm4[7]843; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm4[0],ymm0[1],ymm4[1],ymm0[4],ymm4[4],ymm0[5],ymm4[5]844; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3],ymm8[2,3]845; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[0,1],ymm8[0,1]846; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm1[2],ymm5[2],ymm1[3],ymm5[3],ymm1[6],ymm5[6],ymm1[7],ymm5[7]847; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm1 = ymm1[0],ymm5[0],ymm1[1],ymm5[1],ymm1[4],ymm5[4],ymm1[5],ymm5[5]848; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm1[2,3],ymm8[2,3]849; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[0,1],ymm8[0,1]850; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm2[2],ymm6[2],ymm2[3],ymm6[3],ymm2[6],ymm6[6],ymm2[7],ymm6[7]851; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm2 = ymm2[0],ymm6[0],ymm2[1],ymm6[1],ymm2[4],ymm6[4],ymm2[5],ymm6[5]852; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm2[2,3],ymm8[2,3]853; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm2[0,1],ymm8[0,1]854; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm8 = ymm3[2],ymm7[2],ymm3[3],ymm7[3],ymm3[6],ymm7[6],ymm3[7],ymm7[7]855; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm3 = ymm3[0],ymm7[0],ymm3[1],ymm7[1],ymm3[4],ymm7[4],ymm3[5],ymm7[5]856; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm3[2,3],ymm8[2,3]857; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm3[0,1],ymm8[0,1]858; AVX2-FCP-NEXT: vmovaps %ymm3, 192(%rdx)859; AVX2-FCP-NEXT: vmovaps %ymm7, 224(%rdx)860; AVX2-FCP-NEXT: vmovaps %ymm2, 128(%rdx)861; AVX2-FCP-NEXT: vmovaps %ymm6, 160(%rdx)862; AVX2-FCP-NEXT: vmovaps %ymm1, 64(%rdx)863; AVX2-FCP-NEXT: vmovaps %ymm5, 96(%rdx)864; AVX2-FCP-NEXT: vmovaps %ymm0, (%rdx)865; AVX2-FCP-NEXT: vmovaps %ymm4, 32(%rdx)866; AVX2-FCP-NEXT: vzeroupper867; AVX2-FCP-NEXT: retq868;869; AVX512-LABEL: store_i32_stride2_vf32:870; AVX512: # %bb.0:871; AVX512-NEXT: vmovdqa64 (%rdi), %zmm0872; AVX512-NEXT: vmovdqa64 64(%rdi), %zmm1873; AVX512-NEXT: vmovdqa64 (%rsi), %zmm2874; AVX512-NEXT: vmovdqa64 64(%rsi), %zmm3875; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]876; AVX512-NEXT: vmovdqa64 %zmm0, %zmm5877; AVX512-NEXT: vpermt2d %zmm2, %zmm4, %zmm5878; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]879; AVX512-NEXT: vpermt2d %zmm2, %zmm6, %zmm0880; AVX512-NEXT: vpermi2d %zmm3, %zmm1, %zmm4881; AVX512-NEXT: vpermt2d %zmm3, %zmm6, %zmm1882; AVX512-NEXT: vmovdqa64 %zmm1, 128(%rdx)883; AVX512-NEXT: vmovdqa64 %zmm4, 192(%rdx)884; AVX512-NEXT: vmovdqa64 %zmm0, (%rdx)885; AVX512-NEXT: vmovdqa64 %zmm5, 64(%rdx)886; AVX512-NEXT: vzeroupper887; AVX512-NEXT: retq888;889; AVX512-FCP-LABEL: store_i32_stride2_vf32:890; AVX512-FCP: # %bb.0:891; AVX512-FCP-NEXT: vmovdqa64 (%rdi), %zmm0892; AVX512-FCP-NEXT: vmovdqa64 64(%rdi), %zmm1893; AVX512-FCP-NEXT: vmovdqa64 (%rsi), %zmm2894; AVX512-FCP-NEXT: vmovdqa64 64(%rsi), %zmm3895; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]896; AVX512-FCP-NEXT: vmovdqa64 %zmm0, %zmm5897; AVX512-FCP-NEXT: vpermt2d %zmm2, %zmm4, %zmm5898; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]899; AVX512-FCP-NEXT: vpermt2d %zmm2, %zmm6, %zmm0900; AVX512-FCP-NEXT: vpermi2d %zmm3, %zmm1, %zmm4901; AVX512-FCP-NEXT: vpermt2d %zmm3, %zmm6, %zmm1902; AVX512-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)903; AVX512-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)904; AVX512-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)905; AVX512-FCP-NEXT: vmovdqa64 %zmm5, 64(%rdx)906; AVX512-FCP-NEXT: vzeroupper907; AVX512-FCP-NEXT: retq908;909; AVX512DQ-LABEL: store_i32_stride2_vf32:910; AVX512DQ: # %bb.0:911; AVX512DQ-NEXT: vmovdqa64 (%rdi), %zmm0912; AVX512DQ-NEXT: vmovdqa64 64(%rdi), %zmm1913; AVX512DQ-NEXT: vmovdqa64 (%rsi), %zmm2914; AVX512DQ-NEXT: vmovdqa64 64(%rsi), %zmm3915; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]916; AVX512DQ-NEXT: vmovdqa64 %zmm0, %zmm5917; AVX512DQ-NEXT: vpermt2d %zmm2, %zmm4, %zmm5918; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]919; AVX512DQ-NEXT: vpermt2d %zmm2, %zmm6, %zmm0920; AVX512DQ-NEXT: vpermi2d %zmm3, %zmm1, %zmm4921; AVX512DQ-NEXT: vpermt2d %zmm3, %zmm6, %zmm1922; AVX512DQ-NEXT: vmovdqa64 %zmm1, 128(%rdx)923; AVX512DQ-NEXT: vmovdqa64 %zmm4, 192(%rdx)924; AVX512DQ-NEXT: vmovdqa64 %zmm0, (%rdx)925; AVX512DQ-NEXT: vmovdqa64 %zmm5, 64(%rdx)926; AVX512DQ-NEXT: vzeroupper927; AVX512DQ-NEXT: retq928;929; AVX512DQ-FCP-LABEL: store_i32_stride2_vf32:930; AVX512DQ-FCP: # %bb.0:931; AVX512DQ-FCP-NEXT: vmovdqa64 (%rdi), %zmm0932; AVX512DQ-FCP-NEXT: vmovdqa64 64(%rdi), %zmm1933; AVX512DQ-FCP-NEXT: vmovdqa64 (%rsi), %zmm2934; AVX512DQ-FCP-NEXT: vmovdqa64 64(%rsi), %zmm3935; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]936; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm0, %zmm5937; AVX512DQ-FCP-NEXT: vpermt2d %zmm2, %zmm4, %zmm5938; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]939; AVX512DQ-FCP-NEXT: vpermt2d %zmm2, %zmm6, %zmm0940; AVX512DQ-FCP-NEXT: vpermi2d %zmm3, %zmm1, %zmm4941; AVX512DQ-FCP-NEXT: vpermt2d %zmm3, %zmm6, %zmm1942; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)943; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)944; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)945; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm5, 64(%rdx)946; AVX512DQ-FCP-NEXT: vzeroupper947; AVX512DQ-FCP-NEXT: retq948;949; AVX512BW-LABEL: store_i32_stride2_vf32:950; AVX512BW: # %bb.0:951; AVX512BW-NEXT: vmovdqa64 (%rdi), %zmm0952; AVX512BW-NEXT: vmovdqa64 64(%rdi), %zmm1953; AVX512BW-NEXT: vmovdqa64 (%rsi), %zmm2954; AVX512BW-NEXT: vmovdqa64 64(%rsi), %zmm3955; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]956; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm5957; AVX512BW-NEXT: vpermt2d %zmm2, %zmm4, %zmm5958; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]959; AVX512BW-NEXT: vpermt2d %zmm2, %zmm6, %zmm0960; AVX512BW-NEXT: vpermi2d %zmm3, %zmm1, %zmm4961; AVX512BW-NEXT: vpermt2d %zmm3, %zmm6, %zmm1962; AVX512BW-NEXT: vmovdqa64 %zmm1, 128(%rdx)963; AVX512BW-NEXT: vmovdqa64 %zmm4, 192(%rdx)964; AVX512BW-NEXT: vmovdqa64 %zmm0, (%rdx)965; AVX512BW-NEXT: vmovdqa64 %zmm5, 64(%rdx)966; AVX512BW-NEXT: vzeroupper967; AVX512BW-NEXT: retq968;969; AVX512BW-FCP-LABEL: store_i32_stride2_vf32:970; AVX512BW-FCP: # %bb.0:971; AVX512BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm0972; AVX512BW-FCP-NEXT: vmovdqa64 64(%rdi), %zmm1973; AVX512BW-FCP-NEXT: vmovdqa64 (%rsi), %zmm2974; AVX512BW-FCP-NEXT: vmovdqa64 64(%rsi), %zmm3975; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]976; AVX512BW-FCP-NEXT: vmovdqa64 %zmm0, %zmm5977; AVX512BW-FCP-NEXT: vpermt2d %zmm2, %zmm4, %zmm5978; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]979; AVX512BW-FCP-NEXT: vpermt2d %zmm2, %zmm6, %zmm0980; AVX512BW-FCP-NEXT: vpermi2d %zmm3, %zmm1, %zmm4981; AVX512BW-FCP-NEXT: vpermt2d %zmm3, %zmm6, %zmm1982; AVX512BW-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)983; AVX512BW-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)984; AVX512BW-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)985; AVX512BW-FCP-NEXT: vmovdqa64 %zmm5, 64(%rdx)986; AVX512BW-FCP-NEXT: vzeroupper987; AVX512BW-FCP-NEXT: retq988;989; AVX512DQ-BW-LABEL: store_i32_stride2_vf32:990; AVX512DQ-BW: # %bb.0:991; AVX512DQ-BW-NEXT: vmovdqa64 (%rdi), %zmm0992; AVX512DQ-BW-NEXT: vmovdqa64 64(%rdi), %zmm1993; AVX512DQ-BW-NEXT: vmovdqa64 (%rsi), %zmm2994; AVX512DQ-BW-NEXT: vmovdqa64 64(%rsi), %zmm3995; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]996; AVX512DQ-BW-NEXT: vmovdqa64 %zmm0, %zmm5997; AVX512DQ-BW-NEXT: vpermt2d %zmm2, %zmm4, %zmm5998; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]999; AVX512DQ-BW-NEXT: vpermt2d %zmm2, %zmm6, %zmm01000; AVX512DQ-BW-NEXT: vpermi2d %zmm3, %zmm1, %zmm41001; AVX512DQ-BW-NEXT: vpermt2d %zmm3, %zmm6, %zmm11002; AVX512DQ-BW-NEXT: vmovdqa64 %zmm1, 128(%rdx)1003; AVX512DQ-BW-NEXT: vmovdqa64 %zmm4, 192(%rdx)1004; AVX512DQ-BW-NEXT: vmovdqa64 %zmm0, (%rdx)1005; AVX512DQ-BW-NEXT: vmovdqa64 %zmm5, 64(%rdx)1006; AVX512DQ-BW-NEXT: vzeroupper1007; AVX512DQ-BW-NEXT: retq1008;1009; AVX512DQ-BW-FCP-LABEL: store_i32_stride2_vf32:1010; AVX512DQ-BW-FCP: # %bb.0:1011; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm01012; AVX512DQ-BW-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11013; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rsi), %zmm21014; AVX512DQ-BW-FCP-NEXT: vmovdqa64 64(%rsi), %zmm31015; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm4 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1016; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm0, %zmm51017; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm2, %zmm4, %zmm51018; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm6 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1019; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm2, %zmm6, %zmm01020; AVX512DQ-BW-FCP-NEXT: vpermi2d %zmm3, %zmm1, %zmm41021; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm3, %zmm6, %zmm11022; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)1023; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)1024; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1025; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm5, 64(%rdx)1026; AVX512DQ-BW-FCP-NEXT: vzeroupper1027; AVX512DQ-BW-FCP-NEXT: retq1028 %in.vec0 = load <32 x i32>, ptr %in.vecptr0, align 641029 %in.vec1 = load <32 x i32>, ptr %in.vecptr1, align 641030 %1 = shufflevector <32 x i32> %in.vec0, <32 x i32> %in.vec1, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>1031 %interleaved.vec = shufflevector <64 x i32> %1, <64 x i32> poison, <64 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>1032 store <64 x i32> %interleaved.vec, ptr %out.vec, align 641033 ret void1034}1035 1036define void @store_i32_stride2_vf64(ptr %in.vecptr0, ptr %in.vecptr1, ptr %out.vec) nounwind {1037; SSE-LABEL: store_i32_stride2_vf64:1038; SSE: # %bb.0:1039; SSE-NEXT: subq $152, %rsp1040; SSE-NEXT: movaps 112(%rdi), %xmm141041; SSE-NEXT: movaps 96(%rdi), %xmm131042; SSE-NEXT: movaps 80(%rdi), %xmm111043; SSE-NEXT: movaps 64(%rdi), %xmm101044; SSE-NEXT: movaps (%rdi), %xmm71045; SSE-NEXT: movaps 16(%rdi), %xmm81046; SSE-NEXT: movaps 32(%rdi), %xmm91047; SSE-NEXT: movaps 48(%rdi), %xmm121048; SSE-NEXT: movaps 96(%rsi), %xmm01049; SSE-NEXT: movaps 80(%rsi), %xmm11050; SSE-NEXT: movaps 64(%rsi), %xmm21051; SSE-NEXT: movaps (%rsi), %xmm31052; SSE-NEXT: movaps 16(%rsi), %xmm41053; SSE-NEXT: movaps 32(%rsi), %xmm51054; SSE-NEXT: movaps 48(%rsi), %xmm61055; SSE-NEXT: movaps %xmm7, %xmm151056; SSE-NEXT: unpcklps {{.*#+}} xmm15 = xmm15[0],xmm3[0],xmm15[1],xmm3[1]1057; SSE-NEXT: movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1058; SSE-NEXT: unpckhps {{.*#+}} xmm7 = xmm7[2],xmm3[2],xmm7[3],xmm3[3]1059; SSE-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1060; SSE-NEXT: movaps %xmm8, %xmm71061; SSE-NEXT: unpcklps {{.*#+}} xmm7 = xmm7[0],xmm4[0],xmm7[1],xmm4[1]1062; SSE-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1063; SSE-NEXT: unpckhps {{.*#+}} xmm8 = xmm8[2],xmm4[2],xmm8[3],xmm4[3]1064; SSE-NEXT: movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1065; SSE-NEXT: movaps %xmm9, %xmm41066; SSE-NEXT: unpcklps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]1067; SSE-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1068; SSE-NEXT: unpckhps {{.*#+}} xmm9 = xmm9[2],xmm5[2],xmm9[3],xmm5[3]1069; SSE-NEXT: movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1070; SSE-NEXT: movaps %xmm12, %xmm41071; SSE-NEXT: unpcklps {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]1072; SSE-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1073; SSE-NEXT: unpckhps {{.*#+}} xmm12 = xmm12[2],xmm6[2],xmm12[3],xmm6[3]1074; SSE-NEXT: movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1075; SSE-NEXT: movaps %xmm10, %xmm31076; SSE-NEXT: unpcklps {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]1077; SSE-NEXT: movaps %xmm3, (%rsp) # 16-byte Spill1078; SSE-NEXT: unpckhps {{.*#+}} xmm10 = xmm10[2],xmm2[2],xmm10[3],xmm2[3]1079; SSE-NEXT: movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1080; SSE-NEXT: movaps %xmm11, %xmm21081; SSE-NEXT: unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]1082; SSE-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1083; SSE-NEXT: unpckhps {{.*#+}} xmm11 = xmm11[2],xmm1[2],xmm11[3],xmm1[3]1084; SSE-NEXT: movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1085; SSE-NEXT: movaps %xmm13, %xmm11086; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1087; SSE-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1088; SSE-NEXT: unpckhps {{.*#+}} xmm13 = xmm13[2],xmm0[2],xmm13[3],xmm0[3]1089; SSE-NEXT: movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1090; SSE-NEXT: movaps 112(%rsi), %xmm01091; SSE-NEXT: movaps %xmm14, %xmm11092; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1093; SSE-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1094; SSE-NEXT: unpckhps {{.*#+}} xmm14 = xmm14[2],xmm0[2],xmm14[3],xmm0[3]1095; SSE-NEXT: movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1096; SSE-NEXT: movaps 128(%rdi), %xmm151097; SSE-NEXT: movaps 128(%rsi), %xmm01098; SSE-NEXT: movaps %xmm15, %xmm11099; SSE-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1100; SSE-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1101; SSE-NEXT: unpckhps {{.*#+}} xmm15 = xmm15[2],xmm0[2],xmm15[3],xmm0[3]1102; SSE-NEXT: movaps 144(%rdi), %xmm131103; SSE-NEXT: movaps 144(%rsi), %xmm01104; SSE-NEXT: movaps %xmm13, %xmm141105; SSE-NEXT: unpcklps {{.*#+}} xmm14 = xmm14[0],xmm0[0],xmm14[1],xmm0[1]1106; SSE-NEXT: unpckhps {{.*#+}} xmm13 = xmm13[2],xmm0[2],xmm13[3],xmm0[3]1107; SSE-NEXT: movaps 160(%rdi), %xmm101108; SSE-NEXT: movaps 160(%rsi), %xmm01109; SSE-NEXT: movaps %xmm10, %xmm121110; SSE-NEXT: unpcklps {{.*#+}} xmm12 = xmm12[0],xmm0[0],xmm12[1],xmm0[1]1111; SSE-NEXT: unpckhps {{.*#+}} xmm10 = xmm10[2],xmm0[2],xmm10[3],xmm0[3]1112; SSE-NEXT: movaps 176(%rdi), %xmm81113; SSE-NEXT: movaps 176(%rsi), %xmm01114; SSE-NEXT: movaps %xmm8, %xmm111115; SSE-NEXT: unpcklps {{.*#+}} xmm11 = xmm11[0],xmm0[0],xmm11[1],xmm0[1]1116; SSE-NEXT: unpckhps {{.*#+}} xmm8 = xmm8[2],xmm0[2],xmm8[3],xmm0[3]1117; SSE-NEXT: movaps 192(%rdi), %xmm61118; SSE-NEXT: movaps 192(%rsi), %xmm01119; SSE-NEXT: movaps %xmm6, %xmm91120; SSE-NEXT: unpcklps {{.*#+}} xmm9 = xmm9[0],xmm0[0],xmm9[1],xmm0[1]1121; SSE-NEXT: unpckhps {{.*#+}} xmm6 = xmm6[2],xmm0[2],xmm6[3],xmm0[3]1122; SSE-NEXT: movaps 208(%rdi), %xmm51123; SSE-NEXT: movaps 208(%rsi), %xmm11124; SSE-NEXT: movaps %xmm5, %xmm71125; SSE-NEXT: unpcklps {{.*#+}} xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]1126; SSE-NEXT: unpckhps {{.*#+}} xmm5 = xmm5[2],xmm1[2],xmm5[3],xmm1[3]1127; SSE-NEXT: movaps 224(%rdi), %xmm11128; SSE-NEXT: movaps 224(%rsi), %xmm31129; SSE-NEXT: movaps %xmm1, %xmm21130; SSE-NEXT: unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]1131; SSE-NEXT: unpckhps {{.*#+}} xmm1 = xmm1[2],xmm3[2],xmm1[3],xmm3[3]1132; SSE-NEXT: movaps 240(%rdi), %xmm31133; SSE-NEXT: movaps 240(%rsi), %xmm41134; SSE-NEXT: movaps %xmm3, %xmm01135; SSE-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]1136; SSE-NEXT: unpckhps {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]1137; SSE-NEXT: movaps %xmm3, 496(%rdx)1138; SSE-NEXT: movaps %xmm0, 480(%rdx)1139; SSE-NEXT: movaps %xmm1, 464(%rdx)1140; SSE-NEXT: movaps %xmm2, 448(%rdx)1141; SSE-NEXT: movaps %xmm5, 432(%rdx)1142; SSE-NEXT: movaps %xmm7, 416(%rdx)1143; SSE-NEXT: movaps %xmm6, 400(%rdx)1144; SSE-NEXT: movaps %xmm9, 384(%rdx)1145; SSE-NEXT: movaps %xmm8, 368(%rdx)1146; SSE-NEXT: movaps %xmm11, 352(%rdx)1147; SSE-NEXT: movaps %xmm10, 336(%rdx)1148; SSE-NEXT: movaps %xmm12, 320(%rdx)1149; SSE-NEXT: movaps %xmm13, 304(%rdx)1150; SSE-NEXT: movaps %xmm14, 288(%rdx)1151; SSE-NEXT: movaps %xmm15, 272(%rdx)1152; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1153; SSE-NEXT: movaps %xmm0, 256(%rdx)1154; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1155; SSE-NEXT: movaps %xmm0, 240(%rdx)1156; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1157; SSE-NEXT: movaps %xmm0, 224(%rdx)1158; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1159; SSE-NEXT: movaps %xmm0, 208(%rdx)1160; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1161; SSE-NEXT: movaps %xmm0, 192(%rdx)1162; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1163; SSE-NEXT: movaps %xmm0, 176(%rdx)1164; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1165; SSE-NEXT: movaps %xmm0, 160(%rdx)1166; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1167; SSE-NEXT: movaps %xmm0, 144(%rdx)1168; SSE-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload1169; SSE-NEXT: movaps %xmm0, 128(%rdx)1170; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1171; SSE-NEXT: movaps %xmm0, 112(%rdx)1172; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1173; SSE-NEXT: movaps %xmm0, 96(%rdx)1174; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1175; SSE-NEXT: movaps %xmm0, 80(%rdx)1176; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1177; SSE-NEXT: movaps %xmm0, 64(%rdx)1178; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1179; SSE-NEXT: movaps %xmm0, 48(%rdx)1180; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1181; SSE-NEXT: movaps %xmm0, 32(%rdx)1182; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1183; SSE-NEXT: movaps %xmm0, 16(%rdx)1184; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1185; SSE-NEXT: movaps %xmm0, (%rdx)1186; SSE-NEXT: addq $152, %rsp1187; SSE-NEXT: retq1188;1189; AVX-LABEL: store_i32_stride2_vf64:1190; AVX: # %bb.0:1191; AVX-NEXT: vmovaps 224(%rdi), %ymm01192; AVX-NEXT: vmovaps 192(%rdi), %ymm11193; AVX-NEXT: vmovaps 160(%rdi), %ymm21194; AVX-NEXT: vmovaps 128(%rdi), %ymm51195; AVX-NEXT: vmovaps (%rdi), %ymm41196; AVX-NEXT: vmovaps 32(%rdi), %ymm61197; AVX-NEXT: vmovaps 64(%rdi), %ymm71198; AVX-NEXT: vmovaps 96(%rdi), %ymm81199; AVX-NEXT: vmovaps 192(%rsi), %ymm91200; AVX-NEXT: vmovaps 160(%rsi), %ymm101201; AVX-NEXT: vmovaps 128(%rsi), %ymm111202; AVX-NEXT: vmovaps (%rsi), %ymm121203; AVX-NEXT: vmovaps 32(%rsi), %ymm131204; AVX-NEXT: vmovaps 64(%rsi), %ymm141205; AVX-NEXT: vmovaps 96(%rsi), %ymm151206; AVX-NEXT: vunpcklps {{.*#+}} ymm3 = ymm4[0],ymm12[0],ymm4[1],ymm12[1],ymm4[4],ymm12[4],ymm4[5],ymm12[5]1207; AVX-NEXT: vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1208; AVX-NEXT: vunpckhps {{.*#+}} ymm4 = ymm4[2],ymm12[2],ymm4[3],ymm12[3],ymm4[6],ymm12[6],ymm4[7],ymm12[7]1209; AVX-NEXT: vunpcklps {{.*#+}} ymm3 = ymm6[0],ymm13[0],ymm6[1],ymm13[1],ymm6[4],ymm13[4],ymm6[5],ymm13[5]1210; AVX-NEXT: vmovups %ymm3, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1211; AVX-NEXT: vunpckhps {{.*#+}} ymm12 = ymm6[2],ymm13[2],ymm6[3],ymm13[3],ymm6[6],ymm13[6],ymm6[7],ymm13[7]1212; AVX-NEXT: vunpcklps {{.*#+}} ymm13 = ymm7[0],ymm14[0],ymm7[1],ymm14[1],ymm7[4],ymm14[4],ymm7[5],ymm14[5]1213; AVX-NEXT: vunpckhps {{.*#+}} ymm7 = ymm7[2],ymm14[2],ymm7[3],ymm14[3],ymm7[6],ymm14[6],ymm7[7],ymm14[7]1214; AVX-NEXT: vunpcklps {{.*#+}} ymm14 = ymm8[0],ymm15[0],ymm8[1],ymm15[1],ymm8[4],ymm15[4],ymm8[5],ymm15[5]1215; AVX-NEXT: vunpckhps {{.*#+}} ymm8 = ymm8[2],ymm15[2],ymm8[3],ymm15[3],ymm8[6],ymm15[6],ymm8[7],ymm15[7]1216; AVX-NEXT: vunpcklps {{.*#+}} ymm15 = ymm5[0],ymm11[0],ymm5[1],ymm11[1],ymm5[4],ymm11[4],ymm5[5],ymm11[5]1217; AVX-NEXT: vunpckhps {{.*#+}} ymm6 = ymm5[2],ymm11[2],ymm5[3],ymm11[3],ymm5[6],ymm11[6],ymm5[7],ymm11[7]1218; AVX-NEXT: vunpcklps {{.*#+}} ymm11 = ymm2[0],ymm10[0],ymm2[1],ymm10[1],ymm2[4],ymm10[4],ymm2[5],ymm10[5]1219; AVX-NEXT: vunpckhps {{.*#+}} ymm5 = ymm2[2],ymm10[2],ymm2[3],ymm10[3],ymm2[6],ymm10[6],ymm2[7],ymm10[7]1220; AVX-NEXT: vunpcklps {{.*#+}} ymm10 = ymm1[0],ymm9[0],ymm1[1],ymm9[1],ymm1[4],ymm9[4],ymm1[5],ymm9[5]1221; AVX-NEXT: vunpckhps {{.*#+}} ymm2 = ymm1[2],ymm9[2],ymm1[3],ymm9[3],ymm1[6],ymm9[6],ymm1[7],ymm9[7]1222; AVX-NEXT: vmovaps 224(%rsi), %ymm91223; AVX-NEXT: vunpcklps {{.*#+}} ymm3 = ymm0[0],ymm9[0],ymm0[1],ymm9[1],ymm0[4],ymm9[4],ymm0[5],ymm9[5]1224; AVX-NEXT: vunpckhps {{.*#+}} ymm1 = ymm0[2],ymm9[2],ymm0[3],ymm9[3],ymm0[6],ymm9[6],ymm0[7],ymm9[7]1225; AVX-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm9 # 32-byte Reload1226; AVX-NEXT: vmovaps %ymm4, %ymm01227; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm9, %ymm41228; AVX-NEXT: vmovups %ymm4, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1229; AVX-NEXT: vperm2f128 {{.*#+}} ymm9 = ymm9[2,3],ymm0[2,3]1230; AVX-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1231; AVX-NEXT: vinsertf128 $1, %xmm12, %ymm0, %ymm41232; AVX-NEXT: vmovups %ymm4, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1233; AVX-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3],ymm12[2,3]1234; AVX-NEXT: vinsertf128 $1, %xmm7, %ymm13, %ymm121235; AVX-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm13[2,3],ymm7[2,3]1236; AVX-NEXT: vinsertf128 $1, %xmm8, %ymm14, %ymm131237; AVX-NEXT: vperm2f128 {{.*#+}} ymm8 = ymm14[2,3],ymm8[2,3]1238; AVX-NEXT: vinsertf128 $1, %xmm6, %ymm15, %ymm141239; AVX-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm15[2,3],ymm6[2,3]1240; AVX-NEXT: vinsertf128 $1, %xmm5, %ymm11, %ymm151241; AVX-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm11[2,3],ymm5[2,3]1242; AVX-NEXT: vinsertf128 $1, %xmm2, %ymm10, %ymm111243; AVX-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm10[2,3],ymm2[2,3]1244; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm101245; AVX-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm3[2,3],ymm1[2,3]1246; AVX-NEXT: vmovaps %ymm0, 480(%rdx)1247; AVX-NEXT: vmovaps %ymm2, 416(%rdx)1248; AVX-NEXT: vmovaps %ymm5, 352(%rdx)1249; AVX-NEXT: vmovaps %ymm6, 288(%rdx)1250; AVX-NEXT: vmovaps %ymm8, 224(%rdx)1251; AVX-NEXT: vmovaps %ymm7, 160(%rdx)1252; AVX-NEXT: vmovaps %ymm4, 96(%rdx)1253; AVX-NEXT: vmovaps %ymm9, 32(%rdx)1254; AVX-NEXT: vmovaps %ymm10, 448(%rdx)1255; AVX-NEXT: vmovaps %ymm11, 384(%rdx)1256; AVX-NEXT: vmovaps %ymm15, 320(%rdx)1257; AVX-NEXT: vmovaps %ymm14, 256(%rdx)1258; AVX-NEXT: vmovaps %ymm13, 192(%rdx)1259; AVX-NEXT: vmovaps %ymm12, 128(%rdx)1260; AVX-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1261; AVX-NEXT: vmovaps %ymm0, 64(%rdx)1262; AVX-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1263; AVX-NEXT: vmovaps %ymm0, (%rdx)1264; AVX-NEXT: vzeroupper1265; AVX-NEXT: retq1266;1267; AVX2-LABEL: store_i32_stride2_vf64:1268; AVX2: # %bb.0:1269; AVX2-NEXT: vmovaps 224(%rdi), %ymm01270; AVX2-NEXT: vmovaps 192(%rdi), %ymm31271; AVX2-NEXT: vmovaps 160(%rdi), %ymm61272; AVX2-NEXT: vmovaps 128(%rdi), %ymm81273; AVX2-NEXT: vmovaps (%rdi), %ymm11274; AVX2-NEXT: vmovaps 32(%rdi), %ymm41275; AVX2-NEXT: vmovaps 64(%rdi), %ymm71276; AVX2-NEXT: vmovaps 96(%rdi), %ymm91277; AVX2-NEXT: vmovaps 192(%rsi), %ymm101278; AVX2-NEXT: vmovaps 160(%rsi), %ymm111279; AVX2-NEXT: vmovaps 128(%rsi), %ymm121280; AVX2-NEXT: vmovaps (%rsi), %ymm21281; AVX2-NEXT: vmovaps 32(%rsi), %ymm51282; AVX2-NEXT: vmovaps 64(%rsi), %ymm131283; AVX2-NEXT: vmovaps 96(%rsi), %ymm141284; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[6],ymm2[6],ymm1[7],ymm2[7]1285; AVX2-NEXT: vunpcklps {{.*#+}} ymm2 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[4],ymm2[4],ymm1[5],ymm2[5]1286; AVX2-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm2[2,3],ymm15[2,3]1287; AVX2-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1288; AVX2-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm2[0,1],ymm15[0,1]1289; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm4[2],ymm5[2],ymm4[3],ymm5[3],ymm4[6],ymm5[6],ymm4[7],ymm5[7]1290; AVX2-NEXT: vunpcklps {{.*#+}} ymm5 = ymm4[0],ymm5[0],ymm4[1],ymm5[1],ymm4[4],ymm5[4],ymm4[5],ymm5[5]1291; AVX2-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm5[2,3],ymm15[2,3]1292; AVX2-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm5[0,1],ymm15[0,1]1293; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm7[2],ymm13[2],ymm7[3],ymm13[3],ymm7[6],ymm13[6],ymm7[7],ymm13[7]1294; AVX2-NEXT: vunpcklps {{.*#+}} ymm13 = ymm7[0],ymm13[0],ymm7[1],ymm13[1],ymm7[4],ymm13[4],ymm7[5],ymm13[5]1295; AVX2-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm13[2,3],ymm15[2,3]1296; AVX2-NEXT: vperm2f128 {{.*#+}} ymm13 = ymm13[0,1],ymm15[0,1]1297; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm9[2],ymm14[2],ymm9[3],ymm14[3],ymm9[6],ymm14[6],ymm9[7],ymm14[7]1298; AVX2-NEXT: vunpcklps {{.*#+}} ymm9 = ymm9[0],ymm14[0],ymm9[1],ymm14[1],ymm9[4],ymm14[4],ymm9[5],ymm14[5]1299; AVX2-NEXT: vperm2f128 {{.*#+}} ymm14 = ymm9[2,3],ymm15[2,3]1300; AVX2-NEXT: vperm2f128 {{.*#+}} ymm9 = ymm9[0,1],ymm15[0,1]1301; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm8[2],ymm12[2],ymm8[3],ymm12[3],ymm8[6],ymm12[6],ymm8[7],ymm12[7]1302; AVX2-NEXT: vunpcklps {{.*#+}} ymm8 = ymm8[0],ymm12[0],ymm8[1],ymm12[1],ymm8[4],ymm12[4],ymm8[5],ymm12[5]1303; AVX2-NEXT: vperm2f128 {{.*#+}} ymm12 = ymm8[2,3],ymm15[2,3]1304; AVX2-NEXT: vperm2f128 {{.*#+}} ymm8 = ymm8[0,1],ymm15[0,1]1305; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm6[2],ymm11[2],ymm6[3],ymm11[3],ymm6[6],ymm11[6],ymm6[7],ymm11[7]1306; AVX2-NEXT: vunpcklps {{.*#+}} ymm6 = ymm6[0],ymm11[0],ymm6[1],ymm11[1],ymm6[4],ymm11[4],ymm6[5],ymm11[5]1307; AVX2-NEXT: vperm2f128 {{.*#+}} ymm11 = ymm6[2,3],ymm15[2,3]1308; AVX2-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm6[0,1],ymm15[0,1]1309; AVX2-NEXT: vunpckhps {{.*#+}} ymm15 = ymm3[2],ymm10[2],ymm3[3],ymm10[3],ymm3[6],ymm10[6],ymm3[7],ymm10[7]1310; AVX2-NEXT: vunpcklps {{.*#+}} ymm3 = ymm3[0],ymm10[0],ymm3[1],ymm10[1],ymm3[4],ymm10[4],ymm3[5],ymm10[5]1311; AVX2-NEXT: vperm2f128 {{.*#+}} ymm10 = ymm3[2,3],ymm15[2,3]1312; AVX2-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm3[0,1],ymm15[0,1]1313; AVX2-NEXT: vmovaps 224(%rsi), %ymm151314; AVX2-NEXT: vmovaps %ymm0, %ymm11315; AVX2-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm15[2],ymm0[3],ymm15[3],ymm0[6],ymm15[6],ymm0[7],ymm15[7]1316; AVX2-NEXT: vunpcklps {{.*#+}} ymm15 = ymm1[0],ymm15[0],ymm1[1],ymm15[1],ymm1[4],ymm15[4],ymm1[5],ymm15[5]1317; AVX2-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm15[2,3],ymm0[2,3]1318; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm15[0,1],ymm0[0,1]1319; AVX2-NEXT: vmovaps %ymm0, 448(%rdx)1320; AVX2-NEXT: vmovaps %ymm1, 480(%rdx)1321; AVX2-NEXT: vmovaps %ymm3, 384(%rdx)1322; AVX2-NEXT: vmovaps %ymm10, 416(%rdx)1323; AVX2-NEXT: vmovaps %ymm6, 320(%rdx)1324; AVX2-NEXT: vmovaps %ymm11, 352(%rdx)1325; AVX2-NEXT: vmovaps %ymm8, 256(%rdx)1326; AVX2-NEXT: vmovaps %ymm12, 288(%rdx)1327; AVX2-NEXT: vmovaps %ymm9, 192(%rdx)1328; AVX2-NEXT: vmovaps %ymm14, 224(%rdx)1329; AVX2-NEXT: vmovaps %ymm13, 128(%rdx)1330; AVX2-NEXT: vmovaps %ymm7, 160(%rdx)1331; AVX2-NEXT: vmovaps %ymm5, 64(%rdx)1332; AVX2-NEXT: vmovaps %ymm4, 96(%rdx)1333; AVX2-NEXT: vmovaps %ymm2, (%rdx)1334; AVX2-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1335; AVX2-NEXT: vmovaps %ymm0, 32(%rdx)1336; AVX2-NEXT: vzeroupper1337; AVX2-NEXT: retq1338;1339; AVX2-FP-LABEL: store_i32_stride2_vf64:1340; AVX2-FP: # %bb.0:1341; AVX2-FP-NEXT: vmovaps 224(%rdi), %ymm01342; AVX2-FP-NEXT: vmovaps 192(%rdi), %ymm31343; AVX2-FP-NEXT: vmovaps 160(%rdi), %ymm61344; AVX2-FP-NEXT: vmovaps 128(%rdi), %ymm81345; AVX2-FP-NEXT: vmovaps (%rdi), %ymm11346; AVX2-FP-NEXT: vmovaps 32(%rdi), %ymm41347; AVX2-FP-NEXT: vmovaps 64(%rdi), %ymm71348; AVX2-FP-NEXT: vmovaps 96(%rdi), %ymm91349; AVX2-FP-NEXT: vmovaps 192(%rsi), %ymm101350; AVX2-FP-NEXT: vmovaps 160(%rsi), %ymm111351; AVX2-FP-NEXT: vmovaps 128(%rsi), %ymm121352; AVX2-FP-NEXT: vmovaps (%rsi), %ymm21353; AVX2-FP-NEXT: vmovaps 32(%rsi), %ymm51354; AVX2-FP-NEXT: vmovaps 64(%rsi), %ymm131355; AVX2-FP-NEXT: vmovaps 96(%rsi), %ymm141356; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[6],ymm2[6],ymm1[7],ymm2[7]1357; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm2 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[4],ymm2[4],ymm1[5],ymm2[5]1358; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm2[2,3],ymm15[2,3]1359; AVX2-FP-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1360; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm2[0,1],ymm15[0,1]1361; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm4[2],ymm5[2],ymm4[3],ymm5[3],ymm4[6],ymm5[6],ymm4[7],ymm5[7]1362; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm5 = ymm4[0],ymm5[0],ymm4[1],ymm5[1],ymm4[4],ymm5[4],ymm4[5],ymm5[5]1363; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm5[2,3],ymm15[2,3]1364; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm5[0,1],ymm15[0,1]1365; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm7[2],ymm13[2],ymm7[3],ymm13[3],ymm7[6],ymm13[6],ymm7[7],ymm13[7]1366; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm13 = ymm7[0],ymm13[0],ymm7[1],ymm13[1],ymm7[4],ymm13[4],ymm7[5],ymm13[5]1367; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm13[2,3],ymm15[2,3]1368; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm13 = ymm13[0,1],ymm15[0,1]1369; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm9[2],ymm14[2],ymm9[3],ymm14[3],ymm9[6],ymm14[6],ymm9[7],ymm14[7]1370; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm9 = ymm9[0],ymm14[0],ymm9[1],ymm14[1],ymm9[4],ymm14[4],ymm9[5],ymm14[5]1371; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm14 = ymm9[2,3],ymm15[2,3]1372; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm9 = ymm9[0,1],ymm15[0,1]1373; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm8[2],ymm12[2],ymm8[3],ymm12[3],ymm8[6],ymm12[6],ymm8[7],ymm12[7]1374; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm8 = ymm8[0],ymm12[0],ymm8[1],ymm12[1],ymm8[4],ymm12[4],ymm8[5],ymm12[5]1375; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm12 = ymm8[2,3],ymm15[2,3]1376; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm8 = ymm8[0,1],ymm15[0,1]1377; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm6[2],ymm11[2],ymm6[3],ymm11[3],ymm6[6],ymm11[6],ymm6[7],ymm11[7]1378; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm6 = ymm6[0],ymm11[0],ymm6[1],ymm11[1],ymm6[4],ymm11[4],ymm6[5],ymm11[5]1379; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm11 = ymm6[2,3],ymm15[2,3]1380; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm6[0,1],ymm15[0,1]1381; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm3[2],ymm10[2],ymm3[3],ymm10[3],ymm3[6],ymm10[6],ymm3[7],ymm10[7]1382; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm3 = ymm3[0],ymm10[0],ymm3[1],ymm10[1],ymm3[4],ymm10[4],ymm3[5],ymm10[5]1383; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm10 = ymm3[2,3],ymm15[2,3]1384; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm3[0,1],ymm15[0,1]1385; AVX2-FP-NEXT: vmovaps 224(%rsi), %ymm151386; AVX2-FP-NEXT: vmovaps %ymm0, %ymm11387; AVX2-FP-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm15[2],ymm0[3],ymm15[3],ymm0[6],ymm15[6],ymm0[7],ymm15[7]1388; AVX2-FP-NEXT: vunpcklps {{.*#+}} ymm15 = ymm1[0],ymm15[0],ymm1[1],ymm15[1],ymm1[4],ymm15[4],ymm1[5],ymm15[5]1389; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm15[2,3],ymm0[2,3]1390; AVX2-FP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm15[0,1],ymm0[0,1]1391; AVX2-FP-NEXT: vmovaps %ymm0, 448(%rdx)1392; AVX2-FP-NEXT: vmovaps %ymm1, 480(%rdx)1393; AVX2-FP-NEXT: vmovaps %ymm3, 384(%rdx)1394; AVX2-FP-NEXT: vmovaps %ymm10, 416(%rdx)1395; AVX2-FP-NEXT: vmovaps %ymm6, 320(%rdx)1396; AVX2-FP-NEXT: vmovaps %ymm11, 352(%rdx)1397; AVX2-FP-NEXT: vmovaps %ymm8, 256(%rdx)1398; AVX2-FP-NEXT: vmovaps %ymm12, 288(%rdx)1399; AVX2-FP-NEXT: vmovaps %ymm9, 192(%rdx)1400; AVX2-FP-NEXT: vmovaps %ymm14, 224(%rdx)1401; AVX2-FP-NEXT: vmovaps %ymm13, 128(%rdx)1402; AVX2-FP-NEXT: vmovaps %ymm7, 160(%rdx)1403; AVX2-FP-NEXT: vmovaps %ymm5, 64(%rdx)1404; AVX2-FP-NEXT: vmovaps %ymm4, 96(%rdx)1405; AVX2-FP-NEXT: vmovaps %ymm2, (%rdx)1406; AVX2-FP-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1407; AVX2-FP-NEXT: vmovaps %ymm0, 32(%rdx)1408; AVX2-FP-NEXT: vzeroupper1409; AVX2-FP-NEXT: retq1410;1411; AVX2-FCP-LABEL: store_i32_stride2_vf64:1412; AVX2-FCP: # %bb.0:1413; AVX2-FCP-NEXT: vmovaps 224(%rdi), %ymm01414; AVX2-FCP-NEXT: vmovaps 192(%rdi), %ymm31415; AVX2-FCP-NEXT: vmovaps 160(%rdi), %ymm61416; AVX2-FCP-NEXT: vmovaps 128(%rdi), %ymm81417; AVX2-FCP-NEXT: vmovaps (%rdi), %ymm11418; AVX2-FCP-NEXT: vmovaps 32(%rdi), %ymm41419; AVX2-FCP-NEXT: vmovaps 64(%rdi), %ymm71420; AVX2-FCP-NEXT: vmovaps 96(%rdi), %ymm91421; AVX2-FCP-NEXT: vmovaps 192(%rsi), %ymm101422; AVX2-FCP-NEXT: vmovaps 160(%rsi), %ymm111423; AVX2-FCP-NEXT: vmovaps 128(%rsi), %ymm121424; AVX2-FCP-NEXT: vmovaps (%rsi), %ymm21425; AVX2-FCP-NEXT: vmovaps 32(%rsi), %ymm51426; AVX2-FCP-NEXT: vmovaps 64(%rsi), %ymm131427; AVX2-FCP-NEXT: vmovaps 96(%rsi), %ymm141428; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[6],ymm2[6],ymm1[7],ymm2[7]1429; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm2 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[4],ymm2[4],ymm1[5],ymm2[5]1430; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm2[2,3],ymm15[2,3]1431; AVX2-FCP-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1432; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm2[0,1],ymm15[0,1]1433; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm4[2],ymm5[2],ymm4[3],ymm5[3],ymm4[6],ymm5[6],ymm4[7],ymm5[7]1434; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm5 = ymm4[0],ymm5[0],ymm4[1],ymm5[1],ymm4[4],ymm5[4],ymm4[5],ymm5[5]1435; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm5[2,3],ymm15[2,3]1436; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm5[0,1],ymm15[0,1]1437; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm7[2],ymm13[2],ymm7[3],ymm13[3],ymm7[6],ymm13[6],ymm7[7],ymm13[7]1438; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm13 = ymm7[0],ymm13[0],ymm7[1],ymm13[1],ymm7[4],ymm13[4],ymm7[5],ymm13[5]1439; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm7 = ymm13[2,3],ymm15[2,3]1440; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm13 = ymm13[0,1],ymm15[0,1]1441; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm9[2],ymm14[2],ymm9[3],ymm14[3],ymm9[6],ymm14[6],ymm9[7],ymm14[7]1442; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm9 = ymm9[0],ymm14[0],ymm9[1],ymm14[1],ymm9[4],ymm14[4],ymm9[5],ymm14[5]1443; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm14 = ymm9[2,3],ymm15[2,3]1444; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm9 = ymm9[0,1],ymm15[0,1]1445; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm8[2],ymm12[2],ymm8[3],ymm12[3],ymm8[6],ymm12[6],ymm8[7],ymm12[7]1446; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm8 = ymm8[0],ymm12[0],ymm8[1],ymm12[1],ymm8[4],ymm12[4],ymm8[5],ymm12[5]1447; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm12 = ymm8[2,3],ymm15[2,3]1448; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm8 = ymm8[0,1],ymm15[0,1]1449; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm6[2],ymm11[2],ymm6[3],ymm11[3],ymm6[6],ymm11[6],ymm6[7],ymm11[7]1450; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm6 = ymm6[0],ymm11[0],ymm6[1],ymm11[1],ymm6[4],ymm11[4],ymm6[5],ymm11[5]1451; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm11 = ymm6[2,3],ymm15[2,3]1452; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm6[0,1],ymm15[0,1]1453; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm15 = ymm3[2],ymm10[2],ymm3[3],ymm10[3],ymm3[6],ymm10[6],ymm3[7],ymm10[7]1454; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm3 = ymm3[0],ymm10[0],ymm3[1],ymm10[1],ymm3[4],ymm10[4],ymm3[5],ymm10[5]1455; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm10 = ymm3[2,3],ymm15[2,3]1456; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm3[0,1],ymm15[0,1]1457; AVX2-FCP-NEXT: vmovaps 224(%rsi), %ymm151458; AVX2-FCP-NEXT: vmovaps %ymm0, %ymm11459; AVX2-FCP-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm15[2],ymm0[3],ymm15[3],ymm0[6],ymm15[6],ymm0[7],ymm15[7]1460; AVX2-FCP-NEXT: vunpcklps {{.*#+}} ymm15 = ymm1[0],ymm15[0],ymm1[1],ymm15[1],ymm1[4],ymm15[4],ymm1[5],ymm15[5]1461; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm15[2,3],ymm0[2,3]1462; AVX2-FCP-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm15[0,1],ymm0[0,1]1463; AVX2-FCP-NEXT: vmovaps %ymm0, 448(%rdx)1464; AVX2-FCP-NEXT: vmovaps %ymm1, 480(%rdx)1465; AVX2-FCP-NEXT: vmovaps %ymm3, 384(%rdx)1466; AVX2-FCP-NEXT: vmovaps %ymm10, 416(%rdx)1467; AVX2-FCP-NEXT: vmovaps %ymm6, 320(%rdx)1468; AVX2-FCP-NEXT: vmovaps %ymm11, 352(%rdx)1469; AVX2-FCP-NEXT: vmovaps %ymm8, 256(%rdx)1470; AVX2-FCP-NEXT: vmovaps %ymm12, 288(%rdx)1471; AVX2-FCP-NEXT: vmovaps %ymm9, 192(%rdx)1472; AVX2-FCP-NEXT: vmovaps %ymm14, 224(%rdx)1473; AVX2-FCP-NEXT: vmovaps %ymm13, 128(%rdx)1474; AVX2-FCP-NEXT: vmovaps %ymm7, 160(%rdx)1475; AVX2-FCP-NEXT: vmovaps %ymm5, 64(%rdx)1476; AVX2-FCP-NEXT: vmovaps %ymm4, 96(%rdx)1477; AVX2-FCP-NEXT: vmovaps %ymm2, (%rdx)1478; AVX2-FCP-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1479; AVX2-FCP-NEXT: vmovaps %ymm0, 32(%rdx)1480; AVX2-FCP-NEXT: vzeroupper1481; AVX2-FCP-NEXT: retq1482;1483; AVX512-LABEL: store_i32_stride2_vf64:1484; AVX512: # %bb.0:1485; AVX512-NEXT: vmovdqa64 (%rdi), %zmm01486; AVX512-NEXT: vmovdqa64 64(%rdi), %zmm11487; AVX512-NEXT: vmovdqa64 128(%rdi), %zmm21488; AVX512-NEXT: vmovdqa64 192(%rdi), %zmm31489; AVX512-NEXT: vmovdqa64 (%rsi), %zmm41490; AVX512-NEXT: vmovdqa64 64(%rsi), %zmm51491; AVX512-NEXT: vmovdqa64 128(%rsi), %zmm61492; AVX512-NEXT: vmovdqa64 192(%rsi), %zmm71493; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1494; AVX512-NEXT: vmovdqa64 %zmm0, %zmm91495; AVX512-NEXT: vpermt2d %zmm4, %zmm8, %zmm91496; AVX512-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1497; AVX512-NEXT: vpermt2d %zmm4, %zmm10, %zmm01498; AVX512-NEXT: vmovdqa64 %zmm1, %zmm41499; AVX512-NEXT: vpermt2d %zmm5, %zmm8, %zmm41500; AVX512-NEXT: vpermt2d %zmm5, %zmm10, %zmm11501; AVX512-NEXT: vmovdqa64 %zmm2, %zmm51502; AVX512-NEXT: vpermt2d %zmm6, %zmm8, %zmm51503; AVX512-NEXT: vpermt2d %zmm6, %zmm10, %zmm21504; AVX512-NEXT: vpermi2d %zmm7, %zmm3, %zmm81505; AVX512-NEXT: vpermt2d %zmm7, %zmm10, %zmm31506; AVX512-NEXT: vmovdqa64 %zmm3, 384(%rdx)1507; AVX512-NEXT: vmovdqa64 %zmm8, 448(%rdx)1508; AVX512-NEXT: vmovdqa64 %zmm2, 256(%rdx)1509; AVX512-NEXT: vmovdqa64 %zmm5, 320(%rdx)1510; AVX512-NEXT: vmovdqa64 %zmm1, 128(%rdx)1511; AVX512-NEXT: vmovdqa64 %zmm4, 192(%rdx)1512; AVX512-NEXT: vmovdqa64 %zmm0, (%rdx)1513; AVX512-NEXT: vmovdqa64 %zmm9, 64(%rdx)1514; AVX512-NEXT: vzeroupper1515; AVX512-NEXT: retq1516;1517; AVX512-FCP-LABEL: store_i32_stride2_vf64:1518; AVX512-FCP: # %bb.0:1519; AVX512-FCP-NEXT: vmovdqa64 (%rdi), %zmm01520; AVX512-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11521; AVX512-FCP-NEXT: vmovdqa64 128(%rdi), %zmm21522; AVX512-FCP-NEXT: vmovdqa64 192(%rdi), %zmm31523; AVX512-FCP-NEXT: vmovdqa64 (%rsi), %zmm41524; AVX512-FCP-NEXT: vmovdqa64 64(%rsi), %zmm51525; AVX512-FCP-NEXT: vmovdqa64 128(%rsi), %zmm61526; AVX512-FCP-NEXT: vmovdqa64 192(%rsi), %zmm71527; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1528; AVX512-FCP-NEXT: vmovdqa64 %zmm0, %zmm91529; AVX512-FCP-NEXT: vpermt2d %zmm4, %zmm8, %zmm91530; AVX512-FCP-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1531; AVX512-FCP-NEXT: vpermt2d %zmm4, %zmm10, %zmm01532; AVX512-FCP-NEXT: vmovdqa64 %zmm1, %zmm41533; AVX512-FCP-NEXT: vpermt2d %zmm5, %zmm8, %zmm41534; AVX512-FCP-NEXT: vpermt2d %zmm5, %zmm10, %zmm11535; AVX512-FCP-NEXT: vmovdqa64 %zmm2, %zmm51536; AVX512-FCP-NEXT: vpermt2d %zmm6, %zmm8, %zmm51537; AVX512-FCP-NEXT: vpermt2d %zmm6, %zmm10, %zmm21538; AVX512-FCP-NEXT: vpermi2d %zmm7, %zmm3, %zmm81539; AVX512-FCP-NEXT: vpermt2d %zmm7, %zmm10, %zmm31540; AVX512-FCP-NEXT: vmovdqa64 %zmm3, 384(%rdx)1541; AVX512-FCP-NEXT: vmovdqa64 %zmm8, 448(%rdx)1542; AVX512-FCP-NEXT: vmovdqa64 %zmm2, 256(%rdx)1543; AVX512-FCP-NEXT: vmovdqa64 %zmm5, 320(%rdx)1544; AVX512-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)1545; AVX512-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)1546; AVX512-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1547; AVX512-FCP-NEXT: vmovdqa64 %zmm9, 64(%rdx)1548; AVX512-FCP-NEXT: vzeroupper1549; AVX512-FCP-NEXT: retq1550;1551; AVX512DQ-LABEL: store_i32_stride2_vf64:1552; AVX512DQ: # %bb.0:1553; AVX512DQ-NEXT: vmovdqa64 (%rdi), %zmm01554; AVX512DQ-NEXT: vmovdqa64 64(%rdi), %zmm11555; AVX512DQ-NEXT: vmovdqa64 128(%rdi), %zmm21556; AVX512DQ-NEXT: vmovdqa64 192(%rdi), %zmm31557; AVX512DQ-NEXT: vmovdqa64 (%rsi), %zmm41558; AVX512DQ-NEXT: vmovdqa64 64(%rsi), %zmm51559; AVX512DQ-NEXT: vmovdqa64 128(%rsi), %zmm61560; AVX512DQ-NEXT: vmovdqa64 192(%rsi), %zmm71561; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1562; AVX512DQ-NEXT: vmovdqa64 %zmm0, %zmm91563; AVX512DQ-NEXT: vpermt2d %zmm4, %zmm8, %zmm91564; AVX512DQ-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1565; AVX512DQ-NEXT: vpermt2d %zmm4, %zmm10, %zmm01566; AVX512DQ-NEXT: vmovdqa64 %zmm1, %zmm41567; AVX512DQ-NEXT: vpermt2d %zmm5, %zmm8, %zmm41568; AVX512DQ-NEXT: vpermt2d %zmm5, %zmm10, %zmm11569; AVX512DQ-NEXT: vmovdqa64 %zmm2, %zmm51570; AVX512DQ-NEXT: vpermt2d %zmm6, %zmm8, %zmm51571; AVX512DQ-NEXT: vpermt2d %zmm6, %zmm10, %zmm21572; AVX512DQ-NEXT: vpermi2d %zmm7, %zmm3, %zmm81573; AVX512DQ-NEXT: vpermt2d %zmm7, %zmm10, %zmm31574; AVX512DQ-NEXT: vmovdqa64 %zmm3, 384(%rdx)1575; AVX512DQ-NEXT: vmovdqa64 %zmm8, 448(%rdx)1576; AVX512DQ-NEXT: vmovdqa64 %zmm2, 256(%rdx)1577; AVX512DQ-NEXT: vmovdqa64 %zmm5, 320(%rdx)1578; AVX512DQ-NEXT: vmovdqa64 %zmm1, 128(%rdx)1579; AVX512DQ-NEXT: vmovdqa64 %zmm4, 192(%rdx)1580; AVX512DQ-NEXT: vmovdqa64 %zmm0, (%rdx)1581; AVX512DQ-NEXT: vmovdqa64 %zmm9, 64(%rdx)1582; AVX512DQ-NEXT: vzeroupper1583; AVX512DQ-NEXT: retq1584;1585; AVX512DQ-FCP-LABEL: store_i32_stride2_vf64:1586; AVX512DQ-FCP: # %bb.0:1587; AVX512DQ-FCP-NEXT: vmovdqa64 (%rdi), %zmm01588; AVX512DQ-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11589; AVX512DQ-FCP-NEXT: vmovdqa64 128(%rdi), %zmm21590; AVX512DQ-FCP-NEXT: vmovdqa64 192(%rdi), %zmm31591; AVX512DQ-FCP-NEXT: vmovdqa64 (%rsi), %zmm41592; AVX512DQ-FCP-NEXT: vmovdqa64 64(%rsi), %zmm51593; AVX512DQ-FCP-NEXT: vmovdqa64 128(%rsi), %zmm61594; AVX512DQ-FCP-NEXT: vmovdqa64 192(%rsi), %zmm71595; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1596; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm0, %zmm91597; AVX512DQ-FCP-NEXT: vpermt2d %zmm4, %zmm8, %zmm91598; AVX512DQ-FCP-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1599; AVX512DQ-FCP-NEXT: vpermt2d %zmm4, %zmm10, %zmm01600; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm1, %zmm41601; AVX512DQ-FCP-NEXT: vpermt2d %zmm5, %zmm8, %zmm41602; AVX512DQ-FCP-NEXT: vpermt2d %zmm5, %zmm10, %zmm11603; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm2, %zmm51604; AVX512DQ-FCP-NEXT: vpermt2d %zmm6, %zmm8, %zmm51605; AVX512DQ-FCP-NEXT: vpermt2d %zmm6, %zmm10, %zmm21606; AVX512DQ-FCP-NEXT: vpermi2d %zmm7, %zmm3, %zmm81607; AVX512DQ-FCP-NEXT: vpermt2d %zmm7, %zmm10, %zmm31608; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm3, 384(%rdx)1609; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm8, 448(%rdx)1610; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm2, 256(%rdx)1611; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm5, 320(%rdx)1612; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)1613; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)1614; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1615; AVX512DQ-FCP-NEXT: vmovdqa64 %zmm9, 64(%rdx)1616; AVX512DQ-FCP-NEXT: vzeroupper1617; AVX512DQ-FCP-NEXT: retq1618;1619; AVX512BW-LABEL: store_i32_stride2_vf64:1620; AVX512BW: # %bb.0:1621; AVX512BW-NEXT: vmovdqa64 (%rdi), %zmm01622; AVX512BW-NEXT: vmovdqa64 64(%rdi), %zmm11623; AVX512BW-NEXT: vmovdqa64 128(%rdi), %zmm21624; AVX512BW-NEXT: vmovdqa64 192(%rdi), %zmm31625; AVX512BW-NEXT: vmovdqa64 (%rsi), %zmm41626; AVX512BW-NEXT: vmovdqa64 64(%rsi), %zmm51627; AVX512BW-NEXT: vmovdqa64 128(%rsi), %zmm61628; AVX512BW-NEXT: vmovdqa64 192(%rsi), %zmm71629; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1630; AVX512BW-NEXT: vmovdqa64 %zmm0, %zmm91631; AVX512BW-NEXT: vpermt2d %zmm4, %zmm8, %zmm91632; AVX512BW-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1633; AVX512BW-NEXT: vpermt2d %zmm4, %zmm10, %zmm01634; AVX512BW-NEXT: vmovdqa64 %zmm1, %zmm41635; AVX512BW-NEXT: vpermt2d %zmm5, %zmm8, %zmm41636; AVX512BW-NEXT: vpermt2d %zmm5, %zmm10, %zmm11637; AVX512BW-NEXT: vmovdqa64 %zmm2, %zmm51638; AVX512BW-NEXT: vpermt2d %zmm6, %zmm8, %zmm51639; AVX512BW-NEXT: vpermt2d %zmm6, %zmm10, %zmm21640; AVX512BW-NEXT: vpermi2d %zmm7, %zmm3, %zmm81641; AVX512BW-NEXT: vpermt2d %zmm7, %zmm10, %zmm31642; AVX512BW-NEXT: vmovdqa64 %zmm3, 384(%rdx)1643; AVX512BW-NEXT: vmovdqa64 %zmm8, 448(%rdx)1644; AVX512BW-NEXT: vmovdqa64 %zmm2, 256(%rdx)1645; AVX512BW-NEXT: vmovdqa64 %zmm5, 320(%rdx)1646; AVX512BW-NEXT: vmovdqa64 %zmm1, 128(%rdx)1647; AVX512BW-NEXT: vmovdqa64 %zmm4, 192(%rdx)1648; AVX512BW-NEXT: vmovdqa64 %zmm0, (%rdx)1649; AVX512BW-NEXT: vmovdqa64 %zmm9, 64(%rdx)1650; AVX512BW-NEXT: vzeroupper1651; AVX512BW-NEXT: retq1652;1653; AVX512BW-FCP-LABEL: store_i32_stride2_vf64:1654; AVX512BW-FCP: # %bb.0:1655; AVX512BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm01656; AVX512BW-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11657; AVX512BW-FCP-NEXT: vmovdqa64 128(%rdi), %zmm21658; AVX512BW-FCP-NEXT: vmovdqa64 192(%rdi), %zmm31659; AVX512BW-FCP-NEXT: vmovdqa64 (%rsi), %zmm41660; AVX512BW-FCP-NEXT: vmovdqa64 64(%rsi), %zmm51661; AVX512BW-FCP-NEXT: vmovdqa64 128(%rsi), %zmm61662; AVX512BW-FCP-NEXT: vmovdqa64 192(%rsi), %zmm71663; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1664; AVX512BW-FCP-NEXT: vmovdqa64 %zmm0, %zmm91665; AVX512BW-FCP-NEXT: vpermt2d %zmm4, %zmm8, %zmm91666; AVX512BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1667; AVX512BW-FCP-NEXT: vpermt2d %zmm4, %zmm10, %zmm01668; AVX512BW-FCP-NEXT: vmovdqa64 %zmm1, %zmm41669; AVX512BW-FCP-NEXT: vpermt2d %zmm5, %zmm8, %zmm41670; AVX512BW-FCP-NEXT: vpermt2d %zmm5, %zmm10, %zmm11671; AVX512BW-FCP-NEXT: vmovdqa64 %zmm2, %zmm51672; AVX512BW-FCP-NEXT: vpermt2d %zmm6, %zmm8, %zmm51673; AVX512BW-FCP-NEXT: vpermt2d %zmm6, %zmm10, %zmm21674; AVX512BW-FCP-NEXT: vpermi2d %zmm7, %zmm3, %zmm81675; AVX512BW-FCP-NEXT: vpermt2d %zmm7, %zmm10, %zmm31676; AVX512BW-FCP-NEXT: vmovdqa64 %zmm3, 384(%rdx)1677; AVX512BW-FCP-NEXT: vmovdqa64 %zmm8, 448(%rdx)1678; AVX512BW-FCP-NEXT: vmovdqa64 %zmm2, 256(%rdx)1679; AVX512BW-FCP-NEXT: vmovdqa64 %zmm5, 320(%rdx)1680; AVX512BW-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)1681; AVX512BW-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)1682; AVX512BW-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1683; AVX512BW-FCP-NEXT: vmovdqa64 %zmm9, 64(%rdx)1684; AVX512BW-FCP-NEXT: vzeroupper1685; AVX512BW-FCP-NEXT: retq1686;1687; AVX512DQ-BW-LABEL: store_i32_stride2_vf64:1688; AVX512DQ-BW: # %bb.0:1689; AVX512DQ-BW-NEXT: vmovdqa64 (%rdi), %zmm01690; AVX512DQ-BW-NEXT: vmovdqa64 64(%rdi), %zmm11691; AVX512DQ-BW-NEXT: vmovdqa64 128(%rdi), %zmm21692; AVX512DQ-BW-NEXT: vmovdqa64 192(%rdi), %zmm31693; AVX512DQ-BW-NEXT: vmovdqa64 (%rsi), %zmm41694; AVX512DQ-BW-NEXT: vmovdqa64 64(%rsi), %zmm51695; AVX512DQ-BW-NEXT: vmovdqa64 128(%rsi), %zmm61696; AVX512DQ-BW-NEXT: vmovdqa64 192(%rsi), %zmm71697; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1698; AVX512DQ-BW-NEXT: vmovdqa64 %zmm0, %zmm91699; AVX512DQ-BW-NEXT: vpermt2d %zmm4, %zmm8, %zmm91700; AVX512DQ-BW-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1701; AVX512DQ-BW-NEXT: vpermt2d %zmm4, %zmm10, %zmm01702; AVX512DQ-BW-NEXT: vmovdqa64 %zmm1, %zmm41703; AVX512DQ-BW-NEXT: vpermt2d %zmm5, %zmm8, %zmm41704; AVX512DQ-BW-NEXT: vpermt2d %zmm5, %zmm10, %zmm11705; AVX512DQ-BW-NEXT: vmovdqa64 %zmm2, %zmm51706; AVX512DQ-BW-NEXT: vpermt2d %zmm6, %zmm8, %zmm51707; AVX512DQ-BW-NEXT: vpermt2d %zmm6, %zmm10, %zmm21708; AVX512DQ-BW-NEXT: vpermi2d %zmm7, %zmm3, %zmm81709; AVX512DQ-BW-NEXT: vpermt2d %zmm7, %zmm10, %zmm31710; AVX512DQ-BW-NEXT: vmovdqa64 %zmm3, 384(%rdx)1711; AVX512DQ-BW-NEXT: vmovdqa64 %zmm8, 448(%rdx)1712; AVX512DQ-BW-NEXT: vmovdqa64 %zmm2, 256(%rdx)1713; AVX512DQ-BW-NEXT: vmovdqa64 %zmm5, 320(%rdx)1714; AVX512DQ-BW-NEXT: vmovdqa64 %zmm1, 128(%rdx)1715; AVX512DQ-BW-NEXT: vmovdqa64 %zmm4, 192(%rdx)1716; AVX512DQ-BW-NEXT: vmovdqa64 %zmm0, (%rdx)1717; AVX512DQ-BW-NEXT: vmovdqa64 %zmm9, 64(%rdx)1718; AVX512DQ-BW-NEXT: vzeroupper1719; AVX512DQ-BW-NEXT: retq1720;1721; AVX512DQ-BW-FCP-LABEL: store_i32_stride2_vf64:1722; AVX512DQ-BW-FCP: # %bb.0:1723; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rdi), %zmm01724; AVX512DQ-BW-FCP-NEXT: vmovdqa64 64(%rdi), %zmm11725; AVX512DQ-BW-FCP-NEXT: vmovdqa64 128(%rdi), %zmm21726; AVX512DQ-BW-FCP-NEXT: vmovdqa64 192(%rdi), %zmm31727; AVX512DQ-BW-FCP-NEXT: vmovdqa64 (%rsi), %zmm41728; AVX512DQ-BW-FCP-NEXT: vmovdqa64 64(%rsi), %zmm51729; AVX512DQ-BW-FCP-NEXT: vmovdqa64 128(%rsi), %zmm61730; AVX512DQ-BW-FCP-NEXT: vmovdqa64 192(%rsi), %zmm71731; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm8 = [8,24,9,25,10,26,11,27,12,28,13,29,14,30,15,31]1732; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm0, %zmm91733; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm4, %zmm8, %zmm91734; AVX512DQ-BW-FCP-NEXT: vpmovsxbd {{.*#+}} zmm10 = [0,16,1,17,2,18,3,19,4,20,5,21,6,22,7,23]1735; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm4, %zmm10, %zmm01736; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm1, %zmm41737; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm5, %zmm8, %zmm41738; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm5, %zmm10, %zmm11739; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm2, %zmm51740; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm6, %zmm8, %zmm51741; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm6, %zmm10, %zmm21742; AVX512DQ-BW-FCP-NEXT: vpermi2d %zmm7, %zmm3, %zmm81743; AVX512DQ-BW-FCP-NEXT: vpermt2d %zmm7, %zmm10, %zmm31744; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm3, 384(%rdx)1745; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm8, 448(%rdx)1746; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm2, 256(%rdx)1747; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm5, 320(%rdx)1748; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm1, 128(%rdx)1749; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm4, 192(%rdx)1750; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm0, (%rdx)1751; AVX512DQ-BW-FCP-NEXT: vmovdqa64 %zmm9, 64(%rdx)1752; AVX512DQ-BW-FCP-NEXT: vzeroupper1753; AVX512DQ-BW-FCP-NEXT: retq1754 %in.vec0 = load <64 x i32>, ptr %in.vecptr0, align 641755 %in.vec1 = load <64 x i32>, ptr %in.vecptr1, align 641756 %1 = shufflevector <64 x i32> %in.vec0, <64 x i32> %in.vec1, <128 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 75, i32 76, i32 77, i32 78, i32 79, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 91, i32 92, i32 93, i32 94, i32 95, i32 96, i32 97, i32 98, i32 99, i32 100, i32 101, i32 102, i32 103, i32 104, i32 105, i32 106, i32 107, i32 108, i32 109, i32 110, i32 111, i32 112, i32 113, i32 114, i32 115, i32 116, i32 117, i32 118, i32 119, i32 120, i32 121, i32 122, i32 123, i32 124, i32 125, i32 126, i32 127>1757 %interleaved.vec = shufflevector <128 x i32> %1, <128 x i32> poison, <128 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>1758 store <128 x i32> %interleaved.vec, ptr %out.vec, align 641759 ret void1760}1761