Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-interleaved-store-i8-stride-3.ll
blob035db822be5180b81868ff377f73ed46dc572163
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,FALLBACK0
3 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx  | FileCheck %s --check-prefixes=AVX,AVX1,AVX1-ONLY,FALLBACK1
4 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX1,AVX2,AVX2-ONLY,AVX2-SLOW,FALLBACK2
5 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX1,AVX2,AVX2-ONLY,AVX2-FAST,FALLBACK3
6 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX1,AVX2,AVX2-ONLY,AVX2-FAST-PERLANE,FALLBACK4
7 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512F,AVX512-SLOW,AVX512F-SLOW,AVX512F-ONLY-SLOW,FALLBACK5
8 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512F,AVX512-FAST,AVX512F-FAST,AVX512F-ONLY-FAST,FALLBACK6
9 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512F,AVX512-SLOW,AVX512F-SLOW,AVX512DQ-SLOW,FALLBACK7
10 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512F,AVX512-FAST,AVX512F-FAST,AVX512DQ-FAST,FALLBACK8
11 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512BW,AVX512-SLOW,AVX512BW-SLOW,AVX512BW-ONLY-SLOW,FALLBACK9
12 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512BW,AVX512-FAST,AVX512BW-FAST,AVX512BW-ONLY-FAST,FALLBACK10
13 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512BW,AVX512-SLOW,AVX512BW-SLOW,AVX512DQBW-SLOW,FALLBACK11
14 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512vl,+avx512dq,+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX512,AVX512BW,AVX512-FAST,AVX512BW-FAST,AVX512DQBW-FAST,FALLBACK12
16 ; These patterns are produced by LoopVectorizer for interleaved stores.
18 define void @store_i8_stride3_vf2(ptr %in.vecptr0, ptr %in.vecptr1, ptr %in.vecptr2, ptr %out.vec) nounwind {
19 ; SSE-LABEL: store_i8_stride3_vf2:
20 ; SSE:       # %bb.0:
21 ; SSE-NEXT:    movdqa (%rdi), %xmm0
22 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
23 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = mem[0,0,0,0,4,5,6,7]
24 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,0,255,255,0,255,255,255,255,255,255,255,255,255,255]
25 ; SSE-NEXT:    pxor %xmm3, %xmm3
26 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
27 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,3,1,4,5,6,7]
28 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
29 ; SSE-NEXT:    packuswb %xmm0, %xmm0
30 ; SSE-NEXT:    pand %xmm2, %xmm0
31 ; SSE-NEXT:    pandn %xmm1, %xmm2
32 ; SSE-NEXT:    por %xmm0, %xmm2
33 ; SSE-NEXT:    movd %xmm2, (%rcx)
34 ; SSE-NEXT:    pextrw $2, %xmm2, %eax
35 ; SSE-NEXT:    movw %ax, 4(%rcx)
36 ; SSE-NEXT:    retq
38 ; AVX-LABEL: store_i8_stride3_vf2:
39 ; AVX:       # %bb.0:
40 ; AVX-NEXT:    vmovdqa (%rdi), %xmm0
41 ; AVX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
42 ; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7]
43 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,1,2,6,3,u,u,u,u,u,u,u,u,u,u]
44 ; AVX-NEXT:    vpextrw $2, %xmm0, 4(%rcx)
45 ; AVX-NEXT:    vmovd %xmm0, (%rcx)
46 ; AVX-NEXT:    retq
47   %in.vec0 = load <2 x i8>, ptr %in.vecptr0, align 64
48   %in.vec1 = load <2 x i8>, ptr %in.vecptr1, align 64
49   %in.vec2 = load <2 x i8>, ptr %in.vecptr2, align 64
50   %1 = shufflevector <2 x i8> %in.vec0, <2 x i8> %in.vec1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
51   %2 = shufflevector <2 x i8> %in.vec2, <2 x i8> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
52   %3 = shufflevector <4 x i8> %1, <4 x i8> %2, <6 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>
53   %interleaved.vec = shufflevector <6 x i8> %3, <6 x i8> poison, <6 x i32> <i32 0, i32 2, i32 4, i32 1, i32 3, i32 5>
54   store <6 x i8> %interleaved.vec, ptr %out.vec, align 64
55   ret void
58 define void @store_i8_stride3_vf4(ptr %in.vecptr0, ptr %in.vecptr1, ptr %in.vecptr2, ptr %out.vec) nounwind {
59 ; SSE-LABEL: store_i8_stride3_vf4:
60 ; SSE:       # %bb.0:
61 ; SSE-NEXT:    movdqa (%rdi), %xmm0
62 ; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
63 ; SSE-NEXT:    pxor %xmm1, %xmm1
64 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
65 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
66 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,3,1,3,4,5,6,7]
67 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,4,7]
68 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,3,2,1]
69 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,1,4,5,6,7]
70 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,5,6,4]
71 ; SSE-NEXT:    packuswb %xmm1, %xmm0
72 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,0,255,255,0,255,255,0,255,255,0,255,255,255,255]
73 ; SSE-NEXT:    pand %xmm1, %xmm0
74 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = mem[0,0,1,1,4,5,6,7]
75 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,0,1,3]
76 ; SSE-NEXT:    pandn %xmm2, %xmm1
77 ; SSE-NEXT:    por %xmm0, %xmm1
78 ; SSE-NEXT:    movq %xmm1, (%rcx)
79 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
80 ; SSE-NEXT:    movd %xmm0, 8(%rcx)
81 ; SSE-NEXT:    retq
83 ; AVX-LABEL: store_i8_stride3_vf4:
84 ; AVX:       # %bb.0:
85 ; AVX-NEXT:    vmovdqa (%rdi), %xmm0
86 ; AVX-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
87 ; AVX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7]
88 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,1,2,10,3,4,12,5,6,14,7,u,u,u,u]
89 ; AVX-NEXT:    vpextrd $2, %xmm0, 8(%rcx)
90 ; AVX-NEXT:    vmovq %xmm0, (%rcx)
91 ; AVX-NEXT:    retq
92   %in.vec0 = load <4 x i8>, ptr %in.vecptr0, align 64
93   %in.vec1 = load <4 x i8>, ptr %in.vecptr1, align 64
94   %in.vec2 = load <4 x i8>, ptr %in.vecptr2, align 64
95   %1 = shufflevector <4 x i8> %in.vec0, <4 x i8> %in.vec1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
96   %2 = shufflevector <4 x i8> %in.vec2, <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
97   %3 = shufflevector <8 x i8> %1, <8 x i8> %2, <12 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>
98   %interleaved.vec = shufflevector <12 x i8> %3, <12 x i8> poison, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>
99   store <12 x i8> %interleaved.vec, ptr %out.vec, align 64
100   ret void
103 define void @store_i8_stride3_vf8(ptr %in.vecptr0, ptr %in.vecptr1, ptr %in.vecptr2, ptr %out.vec) nounwind {
104 ; SSE-LABEL: store_i8_stride3_vf8:
105 ; SSE:       # %bb.0:
106 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
107 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
108 ; SSE-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero
109 ; SSE-NEXT:    pxor %xmm3, %xmm3
110 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
111 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,2,2]
112 ; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [65535,65535,0,65535,65535,0,65535,65535]
113 ; SSE-NEXT:    pand %xmm5, %xmm4
114 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
115 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[3,3,3,3,4,5,6,7]
116 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,4,4,4]
117 ; SSE-NEXT:    pandn %xmm3, %xmm5
118 ; SSE-NEXT:    por %xmm4, %xmm5
119 ; SSE-NEXT:    movdqa %xmm2, %xmm3
120 ; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
121 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,1]
122 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,2,2,4,5,6,7]
123 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,4,5]
124 ; SSE-NEXT:    packuswb %xmm5, %xmm3
125 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,0,255,255,0,255,255,0,255,255,0,255,255,0,255]
126 ; SSE-NEXT:    pand %xmm4, %xmm3
127 ; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,1,0,1]
128 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,0,0,0,4,5,6,7]
129 ; SSE-NEXT:    pshufhw {{.*#+}} xmm5 = xmm5[0,1,2,3,5,5,6,6]
130 ; SSE-NEXT:    pandn %xmm5, %xmm4
131 ; SSE-NEXT:    por %xmm3, %xmm4
132 ; SSE-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
133 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,1,3,3]
134 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[2,1,1,0,4,5,6,7]
135 ; SSE-NEXT:    packuswb %xmm1, %xmm1
136 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,0,255,255,0,255,255,0,255,255,255,255,255,255,255,255]
137 ; SSE-NEXT:    pand %xmm2, %xmm1
138 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[2,1,3,3,4,5,6,7]
139 ; SSE-NEXT:    pandn %xmm0, %xmm2
140 ; SSE-NEXT:    por %xmm1, %xmm2
141 ; SSE-NEXT:    movq %xmm2, 16(%rcx)
142 ; SSE-NEXT:    movdqa %xmm4, (%rcx)
143 ; SSE-NEXT:    retq
145 ; AVX1-ONLY-LABEL: store_i8_stride3_vf8:
146 ; AVX1-ONLY:       # %bb.0:
147 ; AVX1-ONLY-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
148 ; AVX1-ONLY-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
149 ; AVX1-ONLY-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero
150 ; AVX1-ONLY-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
151 ; AVX1-ONLY-NEXT:    vpshufb {{.*#+}} xmm2 = xmm1[0,8],zero,xmm1[1,9],zero,xmm1[2,10],zero,xmm1[3,11],zero,xmm1[4,12],zero,xmm1[5]
152 ; AVX1-ONLY-NEXT:    vpshufb {{.*#+}} xmm3 = zero,zero,xmm0[0],zero,zero,xmm0[1],zero,zero,xmm0[2],zero,zero,xmm0[3],zero,zero,xmm0[4],zero
153 ; AVX1-ONLY-NEXT:    vpor %xmm3, %xmm2, %xmm2
154 ; AVX1-ONLY-NEXT:    vpshufb {{.*#+}} xmm1 = xmm1[13],zero,xmm1[6,14],zero,xmm1[7,15],zero,xmm1[u,u,u,u,u,u,u,u]
155 ; AVX1-ONLY-NEXT:    vpshufb {{.*#+}} xmm0 = zero,xmm0[5],zero,zero,xmm0[6],zero,zero,xmm0[7,u,u,u,u,u,u,u,u]
156 ; AVX1-ONLY-NEXT:    vpor %xmm0, %xmm1, %xmm0
157 ; AVX1-ONLY-NEXT:    vmovq %xmm0, 16(%rcx)
158 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, (%rcx)
159 ; AVX1-ONLY-NEXT:    retq
161 ; AVX2-ONLY-LABEL: store_i8_stride3_vf8:
162 ; AVX2-ONLY:       # %bb.0:
163 ; AVX2-ONLY-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
164 ; AVX2-ONLY-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
165 ; AVX2-ONLY-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero
166 ; AVX2-ONLY-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
167 ; AVX2-ONLY-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
168 ; AVX2-ONLY-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,8],zero,ymm0[1,9],zero,ymm0[2,10],zero,ymm0[3,11],zero,ymm0[4,12],zero,ymm0[5],zero,ymm0[21],zero,zero,ymm0[22],zero,zero,ymm0[23],zero,zero,zero,zero,zero,zero,zero,zero
169 ; AVX2-ONLY-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,0,1]
170 ; AVX2-ONLY-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,ymm0[0],zero,zero,ymm0[1],zero,zero,ymm0[2],zero,zero,ymm0[3],zero,zero,ymm0[4],zero,ymm0[29],zero,ymm0[22,30],zero,ymm0[23,31],zero,zero,zero,zero,zero,zero,zero,zero,zero
171 ; AVX2-ONLY-NEXT:    vpor %ymm0, %ymm1, %ymm0
172 ; AVX2-ONLY-NEXT:    vextracti128 $1, %ymm0, %xmm1
173 ; AVX2-ONLY-NEXT:    vmovq %xmm1, 16(%rcx)
174 ; AVX2-ONLY-NEXT:    vmovdqa %xmm0, (%rcx)
175 ; AVX2-ONLY-NEXT:    vzeroupper
176 ; AVX2-ONLY-NEXT:    retq
178 ; AVX512F-LABEL: store_i8_stride3_vf8:
179 ; AVX512F:       # %bb.0:
180 ; AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
181 ; AVX512F-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
182 ; AVX512F-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero
183 ; AVX512F-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
184 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
185 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,8],zero,ymm0[1,9],zero,ymm0[2,10],zero,ymm0[3,11],zero,ymm0[4,12],zero,ymm0[5],zero,ymm0[21],zero,zero,ymm0[22],zero,zero,ymm0[23,u,u,u,u,u,u,u,u]
186 ; AVX512F-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,0,1]
187 ; AVX512F-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,ymm0[0],zero,zero,ymm0[1],zero,zero,ymm0[2],zero,zero,ymm0[3],zero,zero,ymm0[4],zero,ymm0[29],zero,ymm0[22,30],zero,ymm0[23,31],zero,zero,zero,zero,zero,zero,zero,zero,zero
188 ; AVX512F-NEXT:    vpor %ymm0, %ymm1, %ymm0
189 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
190 ; AVX512F-NEXT:    vmovq %xmm1, 16(%rcx)
191 ; AVX512F-NEXT:    vmovdqa %xmm0, (%rcx)
192 ; AVX512F-NEXT:    vzeroupper
193 ; AVX512F-NEXT:    retq
195 ; AVX512BW-LABEL: store_i8_stride3_vf8:
196 ; AVX512BW:       # %bb.0:
197 ; AVX512BW-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
198 ; AVX512BW-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
199 ; AVX512BW-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero
200 ; AVX512BW-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
201 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
202 ; AVX512BW-NEXT:    vpshufb {{.*#+}} ymm1 = ymm0[0,8],zero,ymm0[1,9],zero,ymm0[2,10],zero,ymm0[3,11],zero,ymm0[4,12],zero,ymm0[5],zero,ymm0[21],zero,zero,ymm0[22],zero,zero,ymm0[23],zero,zero,zero,zero,zero,zero,zero,zero
203 ; AVX512BW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[2,3,0,1]
204 ; AVX512BW-NEXT:    vpshufb {{.*#+}} ymm0 = zero,zero,ymm0[0],zero,zero,ymm0[1],zero,zero,ymm0[2],zero,zero,ymm0[3],zero,zero,ymm0[4],zero,ymm0[29],zero,ymm0[22,30],zero,ymm0[23,31],zero,zero,zero,zero,zero,zero,zero,zero,zero
205 ; AVX512BW-NEXT:    vpor %ymm1, %ymm0, %ymm0
206 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
207 ; AVX512BW-NEXT:    vmovq %xmm1, 16(%rcx)
208 ; AVX512BW-NEXT:    vmovdqa %xmm0, (%rcx)
209 ; AVX512BW-NEXT:    vzeroupper
210 ; AVX512BW-NEXT:    retq
211   %in.vec0 = load <8 x i8>, ptr %in.vecptr0, align 64
212   %in.vec1 = load <8 x i8>, ptr %in.vecptr1, align 64
213   %in.vec2 = load <8 x i8>, ptr %in.vecptr2, align 64
214   %1 = shufflevector <8 x i8> %in.vec0, <8 x i8> %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>
215   %2 = shufflevector <8 x i8> %in.vec2, <8 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
216   %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <24 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>
217   %interleaved.vec = shufflevector <24 x i8> %3, <24 x i8> poison, <24 x i32> <i32 0, i32 8, i32 16, i32 1, i32 9, i32 17, i32 2, i32 10, i32 18, i32 3, i32 11, i32 19, i32 4, i32 12, i32 20, i32 5, i32 13, i32 21, i32 6, i32 14, i32 22, i32 7, i32 15, i32 23>
218   store <24 x i8> %interleaved.vec, ptr %out.vec, align 64
219   ret void
222 define void @store_i8_stride3_vf16(ptr %in.vecptr0, ptr %in.vecptr1, ptr %in.vecptr2, ptr %out.vec) nounwind {
223 ; SSE-LABEL: store_i8_stride3_vf16:
224 ; SSE:       # %bb.0:
225 ; SSE-NEXT:    movdqa (%rdi), %xmm2
226 ; SSE-NEXT:    movdqa (%rsi), %xmm4
227 ; SSE-NEXT:    movdqa (%rdx), %xmm1
228 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm2[3,3,3,3,4,5,6,7]
229 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm0[0,1,2,3,4,4,6,5]
230 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,0,255,255,0,255,255,0,255,255,0,255,255,0,255]
231 ; SSE-NEXT:    movdqa %xmm0, %xmm5
232 ; SSE-NEXT:    pandn %xmm3, %xmm5
233 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[2,1,2,3]
234 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
235 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
236 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,2,2,3,4,5,6,7]
237 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm3[0,1,2,3,4,5,5,6]
238 ; SSE-NEXT:    pand %xmm0, %xmm6
239 ; SSE-NEXT:    por %xmm5, %xmm6
240 ; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [255,0,255,255,0,255,255,0,255,255,0,255,255,0,255,255]
241 ; SSE-NEXT:    pand %xmm5, %xmm6
242 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm1[2,1,3,3,4,5,6,7]
243 ; SSE-NEXT:    pshufhw {{.*#+}} xmm7 = xmm3[0,1,2,3,4,4,4,4]
244 ; SSE-NEXT:    movdqa %xmm5, %xmm3
245 ; SSE-NEXT:    pandn %xmm7, %xmm3
246 ; SSE-NEXT:    por %xmm6, %xmm3
247 ; SSE-NEXT:    movdqa %xmm4, %xmm6
248 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm4[0],xmm6[1],xmm4[1],xmm6[2],xmm4[2],xmm6[3],xmm4[3],xmm6[4],xmm4[4],xmm6[5],xmm4[5],xmm6[6],xmm4[6],xmm6[7],xmm4[7]
249 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,1,1,2]
250 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm6[0,1,1,2,4,5,6,7]
251 ; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[0,1,0,1]
252 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[0,0,2,1,4,5,6,7]
253 ; SSE-NEXT:    pshufhw {{.*#+}} xmm7 = xmm7[0,1,2,3,5,5,6,6]
254 ; SSE-NEXT:    pand %xmm5, %xmm7
255 ; SSE-NEXT:    pandn %xmm6, %xmm5
256 ; SSE-NEXT:    por %xmm7, %xmm5
257 ; SSE-NEXT:    pand %xmm0, %xmm5
258 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,1,0,1]
259 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm6[0,0,0,0,4,5,6,7]
260 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,5,5,6,6]
261 ; SSE-NEXT:    movdqa %xmm0, %xmm7
262 ; SSE-NEXT:    pandn %xmm6, %xmm7
263 ; SSE-NEXT:    por %xmm5, %xmm7
264 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm4 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
265 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,2,2,3]
266 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,5,6,6,7]
267 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]
268 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,1,2,2,4,5,6,7]
269 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,7,7,7]
270 ; SSE-NEXT:    pand %xmm0, %xmm2
271 ; SSE-NEXT:    pandn %xmm4, %xmm0
272 ; SSE-NEXT:    por %xmm2, %xmm0
273 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,255,255,0,255,255,0,255,255,0,255,255,0,255,255,0]
274 ; SSE-NEXT:    pand %xmm2, %xmm0
275 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
276 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,1,2,2,4,5,6,7]
277 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,6,5,7,7]
278 ; SSE-NEXT:    pandn %xmm1, %xmm2
279 ; SSE-NEXT:    por %xmm0, %xmm2
280 ; SSE-NEXT:    movdqa %xmm2, 32(%rcx)
281 ; SSE-NEXT:    movdqa %xmm7, (%rcx)
282 ; SSE-NEXT:    movdqa %xmm3, 16(%rcx)
283 ; SSE-NEXT:    retq
285 ; AVX1-LABEL: store_i8_stride3_vf16:
286 ; AVX1:       # %bb.0:
287 ; AVX1-NEXT:    vmovdqa (%rdi), %xmm0
288 ; AVX1-NEXT:    vmovdqa (%rsi), %xmm1
289 ; AVX1-NEXT:    vmovdqa (%rdx), %xmm2
290 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
291 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm3 = xmm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10]
292 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm4 = xmm0[5,6,7,8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4]
293 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm3[5,6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4]
294 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4]
295 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm1 = xmm4[5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4]
296 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
297 ; AVX1-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
298 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[5,6,7,8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4]
299 ; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
300 ; AVX1-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[5,6,7,8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4]
301 ; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
302 ; AVX1-NEXT:    vmovdqa %xmm0, 16(%rcx)
303 ; AVX1-NEXT:    vmovdqa %xmm1, (%rcx)
304 ; AVX1-NEXT:    vmovdqa %xmm2, 32(%rcx)
305 ; AVX1-NEXT:    retq
307 ; AVX512-LABEL: store_i8_stride3_vf16:
308 ; AVX512:       # %bb.0:
309 ; AVX512-NEXT:    vmovdqa (%rdi), %xmm0
310 ; AVX512-NEXT:    vmovdqa (%rsi), %xmm1
311 ; AVX512-NEXT:    vmovdqa (%rdx), %xmm2
312 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
313 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm3 = xmm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10]
314 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm4 = xmm0[5,6,7,8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4]
315 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm0 = xmm3[5,6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4]
316 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4]
317 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm1 = xmm4[5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4]
318 ; AVX512-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
319 ; AVX512-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
320 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[5,6,7,8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4]
321 ; AVX512-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
322 ; AVX512-NEXT:    vpalignr {{.*#+}} xmm2 = xmm2[5,6,7,8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4]
323 ; AVX512-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
324 ; AVX512-NEXT:    vinserti32x4 $1, %xmm0, %zmm1, %zmm0
325 ; AVX512-NEXT:    vmovdqa %xmm2, 32(%rcx)
326 ; AVX512-NEXT:    vmovdqa %ymm0, (%rcx)
327 ; AVX512-NEXT:    vzeroupper
328 ; AVX512-NEXT:    retq
329   %in.vec0 = load <16 x i8>, ptr %in.vecptr0, align 64
330   %in.vec1 = load <16 x i8>, ptr %in.vecptr1, align 64
331   %in.vec2 = load <16 x i8>, ptr %in.vecptr2, align 64
332   %1 = shufflevector <16 x i8> %in.vec0, <16 x i8> %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>
333   %2 = shufflevector <16 x i8> %in.vec2, <16 x i8> poison, <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 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
334   %3 = shufflevector <32 x i8> %1, <32 x i8> %2, <48 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>
335   %interleaved.vec = shufflevector <48 x i8> %3, <48 x i8> poison, <48 x i32> <i32 0, i32 16, i32 32, i32 1, i32 17, i32 33, i32 2, i32 18, i32 34, i32 3, i32 19, i32 35, i32 4, i32 20, i32 36, i32 5, i32 21, i32 37, i32 6, i32 22, i32 38, i32 7, i32 23, i32 39, i32 8, i32 24, i32 40, i32 9, i32 25, i32 41, i32 10, i32 26, i32 42, i32 11, i32 27, i32 43, i32 12, i32 28, i32 44, i32 13, i32 29, i32 45, i32 14, i32 30, i32 46, i32 15, i32 31, i32 47>
336   store <48 x i8> %interleaved.vec, ptr %out.vec, align 64
337   ret void
340 define void @store_i8_stride3_vf32(ptr %in.vecptr0, ptr %in.vecptr1, ptr %in.vecptr2, ptr %out.vec) nounwind {
341 ; SSE-LABEL: store_i8_stride3_vf32:
342 ; SSE:       # %bb.0:
343 ; SSE-NEXT:    movdqa (%rdi), %xmm2
344 ; SSE-NEXT:    movdqa 16(%rdi), %xmm8
345 ; SSE-NEXT:    movdqa (%rsi), %xmm4
346 ; SSE-NEXT:    movdqa 16(%rsi), %xmm10
347 ; SSE-NEXT:    movdqa (%rdx), %xmm1
348 ; SSE-NEXT:    movdqa 16(%rdx), %xmm7
349 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm8[3,3,3,3,4,5,6,7]
350 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm0[0,1,2,3,4,4,6,5]
351 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,0,255,255,0,255,255,0,255,255,0,255,255,0,255]
352 ; SSE-NEXT:    movdqa %xmm0, %xmm5
353 ; SSE-NEXT:    pandn %xmm3, %xmm5
354 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm10[2,1,2,3]
355 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
356 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
357 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,2,2,3,4,5,6,7]
358 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm3[0,1,2,3,4,5,5,6]
359 ; SSE-NEXT:    pand %xmm0, %xmm6
360 ; SSE-NEXT:    por %xmm5, %xmm6
361 ; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [255,0,255,255,0,255,255,0,255,255,0,255,255,0,255,255]
362 ; SSE-NEXT:    pand %xmm5, %xmm6
363 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm7[2,1,3,3,4,5,6,7]
364 ; SSE-NEXT:    pshufhw {{.*#+}} xmm9 = xmm3[0,1,2,3,4,4,4,4]
365 ; SSE-NEXT:    movdqa %xmm5, %xmm3
366 ; SSE-NEXT:    pandn %xmm9, %xmm3
367 ; SSE-NEXT:    por %xmm6, %xmm3
368 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm2[3,3,3,3,4,5,6,7]
369 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,4,4,6,5]
370 ; SSE-NEXT:    movdqa %xmm0, %xmm9
371 ; SSE-NEXT:    pandn %xmm6, %xmm9
372 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[2,1,2,3]
373 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
374 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[2,3,0,1]
375 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm6[1,2,2,3,4,5,6,7]
376 ; SSE-NEXT:    pshufhw {{.*#+}} xmm11 = xmm6[0,1,2,3,4,5,5,6]
377 ; SSE-NEXT:    pand %xmm0, %xmm11
378 ; SSE-NEXT:    por %xmm9, %xmm11
379 ; SSE-NEXT:    pand %xmm5, %xmm11
380 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm1[2,1,3,3,4,5,6,7]
381 ; SSE-NEXT:    pshufhw {{.*#+}} xmm9 = xmm6[0,1,2,3,4,4,4,4]
382 ; SSE-NEXT:    movdqa %xmm5, %xmm6
383 ; SSE-NEXT:    pandn %xmm9, %xmm6
384 ; SSE-NEXT:    por %xmm11, %xmm6
385 ; SSE-NEXT:    movdqa %xmm10, %xmm9
386 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8],xmm10[8],xmm9[9],xmm10[9],xmm9[10],xmm10[10],xmm9[11],xmm10[11],xmm9[12],xmm10[12],xmm9[13],xmm10[13],xmm9[14],xmm10[14],xmm9[15],xmm10[15]
387 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,2,2,3]
388 ; SSE-NEXT:    pshufhw {{.*#+}} xmm9 = xmm9[0,1,2,3,5,6,6,7]
389 ; SSE-NEXT:    movdqa %xmm0, %xmm11
390 ; SSE-NEXT:    pandn %xmm9, %xmm11
391 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[2,3,2,3]
392 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm9[1,1,2,2,4,5,6,7]
393 ; SSE-NEXT:    pshufhw {{.*#+}} xmm12 = xmm9[0,1,2,3,7,7,7,7]
394 ; SSE-NEXT:    pand %xmm0, %xmm12
395 ; SSE-NEXT:    por %xmm11, %xmm12
396 ; SSE-NEXT:    movdqa {{.*#+}} xmm9 = [0,255,255,0,255,255,0,255,255,0,255,255,0,255,255,0]
397 ; SSE-NEXT:    pand %xmm9, %xmm12
398 ; SSE-NEXT:    pshufd {{.*#+}} xmm11 = xmm7[2,3,2,3]
399 ; SSE-NEXT:    pshuflw {{.*#+}} xmm11 = xmm11[1,1,2,2,4,5,6,7]
400 ; SSE-NEXT:    pshufhw {{.*#+}} xmm13 = xmm11[0,1,2,3,6,5,7,7]
401 ; SSE-NEXT:    movdqa %xmm9, %xmm11
402 ; SSE-NEXT:    pandn %xmm13, %xmm11
403 ; SSE-NEXT:    por %xmm12, %xmm11
404 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm10 = xmm10[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
405 ; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[0,1,1,2]
406 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm10[0,1,1,2,4,5,6,7]
407 ; SSE-NEXT:    movdqa %xmm5, %xmm12
408 ; SSE-NEXT:    pandn %xmm10, %xmm12
409 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,1,0,1]
410 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[0,0,2,1,4,5,6,7]
411 ; SSE-NEXT:    pshufhw {{.*#+}} xmm8 = xmm8[0,1,2,3,5,5,6,6]
412 ; SSE-NEXT:    pand %xmm5, %xmm8
413 ; SSE-NEXT:    por %xmm12, %xmm8
414 ; SSE-NEXT:    pand %xmm0, %xmm8
415 ; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,1,0,1]
416 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[0,0,0,0,4,5,6,7]
417 ; SSE-NEXT:    pshufhw {{.*#+}} xmm10 = xmm7[0,1,2,3,5,5,6,6]
418 ; SSE-NEXT:    movdqa %xmm0, %xmm7
419 ; SSE-NEXT:    pandn %xmm10, %xmm7
420 ; SSE-NEXT:    por %xmm8, %xmm7
421 ; SSE-NEXT:    movdqa %xmm4, %xmm8
422 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm8 = xmm8[8],xmm4[8],xmm8[9],xmm4[9],xmm8[10],xmm4[10],xmm8[11],xmm4[11],xmm8[12],xmm4[12],xmm8[13],xmm4[13],xmm8[14],xmm4[14],xmm8[15],xmm4[15]
423 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[1,2,2,3]
424 ; SSE-NEXT:    pshufhw {{.*#+}} xmm8 = xmm8[0,1,2,3,5,6,6,7]
425 ; SSE-NEXT:    movdqa %xmm0, %xmm10
426 ; SSE-NEXT:    pandn %xmm8, %xmm10
427 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm2[2,3,2,3]
428 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[1,1,2,2,4,5,6,7]
429 ; SSE-NEXT:    pshufhw {{.*#+}} xmm8 = xmm8[0,1,2,3,7,7,7,7]
430 ; SSE-NEXT:    pand %xmm0, %xmm8
431 ; SSE-NEXT:    por %xmm10, %xmm8
432 ; SSE-NEXT:    pand %xmm9, %xmm8
433 ; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[2,3,2,3]
434 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm10[1,1,2,2,4,5,6,7]
435 ; SSE-NEXT:    pshufhw {{.*#+}} xmm10 = xmm10[0,1,2,3,6,5,7,7]
436 ; SSE-NEXT:    pandn %xmm10, %xmm9
437 ; SSE-NEXT:    por %xmm8, %xmm9
438 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
439 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,1,1,2]
440 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,2,4,5,6,7]
441 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,1,0,1]
442 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,0,2,1,4,5,6,7]
443 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,5,6,6]
444 ; SSE-NEXT:    pand %xmm5, %xmm2
445 ; SSE-NEXT:    pandn %xmm4, %xmm5
446 ; SSE-NEXT:    por %xmm2, %xmm5
447 ; SSE-NEXT:    pand %xmm0, %xmm5
448 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]
449 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
450 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,5,6,6]
451 ; SSE-NEXT:    pandn %xmm1, %xmm0
452 ; SSE-NEXT:    por %xmm5, %xmm0
453 ; SSE-NEXT:    movdqa %xmm0, (%rcx)
454 ; SSE-NEXT:    movdqa %xmm9, 32(%rcx)
455 ; SSE-NEXT:    movdqa %xmm7, 48(%rcx)
456 ; SSE-NEXT:    movdqa %xmm11, 80(%rcx)
457 ; SSE-NEXT:    movdqa %xmm6, 16(%rcx)
458 ; SSE-NEXT:    movdqa %xmm3, 64(%rcx)
459 ; SSE-NEXT:    retq
461 ; AVX1-ONLY-LABEL: store_i8_stride3_vf32:
462 ; AVX1-ONLY:       # %bb.0:
463 ; AVX1-ONLY-NEXT:    vmovdqa (%rdi), %xmm0
464 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm1
465 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
466 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5]
467 ; AVX1-ONLY-NEXT:    vmovdqa (%rsi), %xmm2
468 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rsi), %xmm3
469 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm4 = xmm3[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10]
470 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm5 = xmm2[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10]
471 ; AVX1-ONLY-NEXT:    vmovdqa (%rdx), %xmm6
472 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdx), %xmm7
473 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm8 = xmm0[5,6,7,8,9,10,11,12,13,14,15],xmm6[0,1,2,3,4]
474 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm9 = xmm1[5,6,7,8,9,10,11,12,13,14,15],xmm7[0,1,2,3,4]
475 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm0 = xmm5[5,6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4]
476 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm1 = xmm4[5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4]
477 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm5 = xmm6[5,6,7,8,9,10,11,12,13,14,15],xmm5[0,1,2,3,4]
478 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm4 = xmm7[5,6,7,8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4]
479 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm3 = xmm9[5,6,7,8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4]
480 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm2 = xmm8[5,6,7,8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4]
481 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[5,6,7,8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4]
482 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[5,6,7,8,9,10,11,12,13,14,15],xmm5[0,1,2,3,4]
483 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm4 = xmm4[5,6,7,8,9,10,11,12,13,14,15],xmm9[0,1,2,3,4]
484 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm5 = xmm5[5,6,7,8,9,10,11,12,13,14,15],xmm8[0,1,2,3,4]
485 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
486 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm0, %xmm0
487 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm2, %xmm2
488 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm5, %xmm5
489 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm3, %xmm3
490 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm4, %xmm4
491 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm1, %xmm1
492 ; AVX1-ONLY-NEXT:    vmovdqa %xmm1, 64(%rcx)
493 ; AVX1-ONLY-NEXT:    vmovdqa %xmm4, 80(%rcx)
494 ; AVX1-ONLY-NEXT:    vmovdqa %xmm3, 48(%rcx)
495 ; AVX1-ONLY-NEXT:    vmovdqa %xmm5, 32(%rcx)
496 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, (%rcx)
497 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, 16(%rcx)
498 ; AVX1-ONLY-NEXT:    retq
500 ; AVX2-ONLY-LABEL: store_i8_stride3_vf32:
501 ; AVX2-ONLY:       # %bb.0:
502 ; AVX2-ONLY-NEXT:    vmovdqa (%rdi), %ymm0
503 ; AVX2-ONLY-NEXT:    vmovdqa (%rsi), %ymm1
504 ; AVX2-ONLY-NEXT:    vmovdqa (%rdx), %ymm2
505 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]
506 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm3 = ymm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
507 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm4 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
508 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm0 = ymm3[5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4],ymm3[21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20]
509 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm2 = ymm2[5,6,7,8,9,10,11,12,13,14,15],ymm3[0,1,2,3,4],ymm2[21,22,23,24,25,26,27,28,29,30,31],ymm3[16,17,18,19,20]
510 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm1 = ymm4[5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3,4],ymm4[21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19,20]
511 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
512 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm2 = ymm2[5,6,7,8,9,10,11,12,13,14,15],ymm4[0,1,2,3,4],ymm2[21,22,23,24,25,26,27,28,29,30,31],ymm4[16,17,18,19,20]
513 ; AVX2-ONLY-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm3
514 ; AVX2-ONLY-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
515 ; AVX2-ONLY-NEXT:    # ymm4 = mem[0,1,0,1]
516 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm3, %ymm3
517 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
518 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm1, %ymm1
519 ; AVX2-ONLY-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]
520 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm0, %ymm0
521 ; AVX2-ONLY-NEXT:    vmovdqa %ymm1, 32(%rcx)
522 ; AVX2-ONLY-NEXT:    vmovdqa %ymm0, 64(%rcx)
523 ; AVX2-ONLY-NEXT:    vmovdqa %ymm3, (%rcx)
524 ; AVX2-ONLY-NEXT:    vzeroupper
525 ; AVX2-ONLY-NEXT:    retq
527 ; AVX512F-LABEL: store_i8_stride3_vf32:
528 ; AVX512F:       # %bb.0:
529 ; AVX512F-NEXT:    vmovdqa (%rdi), %ymm0
530 ; AVX512F-NEXT:    vmovdqa (%rsi), %ymm1
531 ; AVX512F-NEXT:    vmovdqa (%rdx), %ymm2
532 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]
533 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm3 = ymm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
534 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm4 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
535 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm0 = ymm3[5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4],ymm3[21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20]
536 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm2 = ymm2[5,6,7,8,9,10,11,12,13,14,15],ymm3[0,1,2,3,4],ymm2[21,22,23,24,25,26,27,28,29,30,31],ymm3[16,17,18,19,20]
537 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm1 = ymm4[5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3,4],ymm4[21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19,20]
538 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
539 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm2 = ymm2[5,6,7,8,9,10,11,12,13,14,15],ymm4[0,1,2,3,4],ymm2[21,22,23,24,25,26,27,28,29,30,31],ymm4[16,17,18,19,20]
540 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm3
541 ; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm4 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
542 ; AVX512F-NEXT:    # ymm4 = mem[0,1,0,1]
543 ; AVX512F-NEXT:    vpshufb %ymm4, %ymm3, %ymm3
544 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
545 ; AVX512F-NEXT:    vpshufb %ymm4, %ymm1, %ymm1
546 ; AVX512F-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]
547 ; AVX512F-NEXT:    vpshufb %ymm4, %ymm0, %ymm0
548 ; AVX512F-NEXT:    vmovdqa %ymm1, 32(%rcx)
549 ; AVX512F-NEXT:    vmovdqa %ymm0, 64(%rcx)
550 ; AVX512F-NEXT:    vmovdqa %ymm3, (%rcx)
551 ; AVX512F-NEXT:    vzeroupper
552 ; AVX512F-NEXT:    retq
554 ; AVX512BW-LABEL: store_i8_stride3_vf32:
555 ; AVX512BW:       # %bb.0:
556 ; AVX512BW-NEXT:    vmovdqa (%rdi), %ymm0
557 ; AVX512BW-NEXT:    vmovdqa (%rsi), %ymm1
558 ; AVX512BW-NEXT:    vmovdqa (%rdx), %ymm2
559 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]
560 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm3 = ymm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
561 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm4 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
562 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm0 = ymm3[5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4],ymm3[21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20]
563 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm2 = ymm2[5,6,7,8,9,10,11,12,13,14,15],ymm3[0,1,2,3,4],ymm2[21,22,23,24,25,26,27,28,29,30,31],ymm3[16,17,18,19,20]
564 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm1 = ymm4[5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3,4],ymm4[21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19,20]
565 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
566 ; AVX512BW-NEXT:    vpalignr {{.*#+}} ymm2 = ymm2[5,6,7,8,9,10,11,12,13,14,15],ymm4[0,1,2,3,4],ymm2[21,22,23,24,25,26,27,28,29,30,31],ymm4[16,17,18,19,20]
567 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm3
568 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
569 ; AVX512BW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]
570 ; AVX512BW-NEXT:    vbroadcasti64x4 {{.*#+}} zmm2 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
571 ; AVX512BW-NEXT:    # zmm2 = mem[0,1,2,3,0,1,2,3]
572 ; AVX512BW-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
573 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm1, %zmm3, %zmm1
574 ; AVX512BW-NEXT:    vpshufb %zmm2, %zmm1, %zmm1
575 ; AVX512BW-NEXT:    vmovdqa %ymm0, 64(%rcx)
576 ; AVX512BW-NEXT:    vmovdqa64 %zmm1, (%rcx)
577 ; AVX512BW-NEXT:    vzeroupper
578 ; AVX512BW-NEXT:    retq
579   %in.vec0 = load <32 x i8>, ptr %in.vecptr0, align 64
580   %in.vec1 = load <32 x i8>, ptr %in.vecptr1, align 64
581   %in.vec2 = load <32 x i8>, ptr %in.vecptr2, align 64
582   %1 = shufflevector <32 x i8> %in.vec0, <32 x i8> %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>
583   %2 = shufflevector <32 x i8> %in.vec2, <32 x i8> poison, <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 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
584   %3 = shufflevector <64 x i8> %1, <64 x i8> %2, <96 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>
585   %interleaved.vec = shufflevector <96 x i8> %3, <96 x i8> poison, <96 x i32> <i32 0, i32 32, i32 64, i32 1, i32 33, i32 65, i32 2, i32 34, i32 66, i32 3, i32 35, i32 67, i32 4, i32 36, i32 68, i32 5, i32 37, i32 69, i32 6, i32 38, i32 70, i32 7, i32 39, i32 71, i32 8, i32 40, i32 72, i32 9, i32 41, i32 73, i32 10, i32 42, i32 74, i32 11, i32 43, i32 75, i32 12, i32 44, i32 76, i32 13, i32 45, i32 77, i32 14, i32 46, i32 78, i32 15, i32 47, i32 79, i32 16, i32 48, i32 80, i32 17, i32 49, i32 81, i32 18, i32 50, i32 82, i32 19, i32 51, i32 83, i32 20, i32 52, i32 84, i32 21, i32 53, i32 85, i32 22, i32 54, i32 86, i32 23, i32 55, i32 87, i32 24, i32 56, i32 88, i32 25, i32 57, i32 89, i32 26, i32 58, i32 90, i32 27, i32 59, i32 91, i32 28, i32 60, i32 92, i32 29, i32 61, i32 93, i32 30, i32 62, i32 94, i32 31, i32 63, i32 95>
586   store <96 x i8> %interleaved.vec, ptr %out.vec, align 64
587   ret void
590 define void @store_i8_stride3_vf64(ptr %in.vecptr0, ptr %in.vecptr1, ptr %in.vecptr2, ptr %out.vec) nounwind {
591 ; SSE-LABEL: store_i8_stride3_vf64:
592 ; SSE:       # %bb.0:
593 ; SSE-NEXT:    movdqa 16(%rdi), %xmm10
594 ; SSE-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
595 ; SSE-NEXT:    movdqa 32(%rdi), %xmm12
596 ; SSE-NEXT:    movdqa 48(%rdi), %xmm5
597 ; SSE-NEXT:    movdqa 16(%rsi), %xmm9
598 ; SSE-NEXT:    movdqa 32(%rsi), %xmm14
599 ; SSE-NEXT:    movdqa 48(%rsi), %xmm4
600 ; SSE-NEXT:    movdqa 16(%rdx), %xmm8
601 ; SSE-NEXT:    movdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
602 ; SSE-NEXT:    movdqa 32(%rdx), %xmm11
603 ; SSE-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
604 ; SSE-NEXT:    movdqa 48(%rdx), %xmm7
605 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm5[3,3,3,3,4,5,6,7]
606 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm0[0,1,2,3,4,4,6,5]
607 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,0,255,255,0,255,255,0,255,255,0,255,255,0,255]
608 ; SSE-NEXT:    movdqa %xmm1, %xmm3
609 ; SSE-NEXT:    pandn %xmm2, %xmm3
610 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[2,1,2,3]
611 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
612 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
613 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,2,2,3,4,5,6,7]
614 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm2[0,1,2,3,4,5,5,6]
615 ; SSE-NEXT:    pand %xmm1, %xmm6
616 ; SSE-NEXT:    por %xmm3, %xmm6
617 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,0,255,255,0,255,255,0,255,255,0,255,255,0,255,255]
618 ; SSE-NEXT:    pand %xmm2, %xmm6
619 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm7[2,1,3,3,4,5,6,7]
620 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,4,4,4]
621 ; SSE-NEXT:    movdqa %xmm2, %xmm0
622 ; SSE-NEXT:    pandn %xmm3, %xmm0
623 ; SSE-NEXT:    por %xmm6, %xmm0
624 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
625 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm12[3,3,3,3,4,5,6,7]
626 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,4,6,5]
627 ; SSE-NEXT:    movdqa %xmm1, %xmm6
628 ; SSE-NEXT:    pandn %xmm3, %xmm6
629 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm14[2,1,2,3]
630 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
631 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
632 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,2,2,3,4,5,6,7]
633 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,5,5,6]
634 ; SSE-NEXT:    pand %xmm1, %xmm3
635 ; SSE-NEXT:    por %xmm6, %xmm3
636 ; SSE-NEXT:    pand %xmm2, %xmm3
637 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm11[2,1,3,3,4,5,6,7]
638 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,4,4,4,4]
639 ; SSE-NEXT:    movdqa %xmm2, %xmm0
640 ; SSE-NEXT:    pandn %xmm6, %xmm0
641 ; SSE-NEXT:    por %xmm3, %xmm0
642 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
643 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm10[3,3,3,3,4,5,6,7]
644 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,4,6,5]
645 ; SSE-NEXT:    movdqa %xmm1, %xmm6
646 ; SSE-NEXT:    pandn %xmm3, %xmm6
647 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[2,1,2,3]
648 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
649 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
650 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,2,2,3,4,5,6,7]
651 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,5,5,6]
652 ; SSE-NEXT:    pand %xmm1, %xmm3
653 ; SSE-NEXT:    por %xmm6, %xmm3
654 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm8[2,1,3,3,4,5,6,7]
655 ; SSE-NEXT:    pshufhw {{.*#+}} xmm8 = xmm6[0,1,2,3,4,4,4,4]
656 ; SSE-NEXT:    movdqa %xmm2, %xmm13
657 ; SSE-NEXT:    pandn %xmm8, %xmm13
658 ; SSE-NEXT:    movdqa (%rdi), %xmm0
659 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
660 ; SSE-NEXT:    pand %xmm2, %xmm3
661 ; SSE-NEXT:    por %xmm3, %xmm13
662 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[3,3,3,3,4,5,6,7]
663 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,4,6,5]
664 ; SSE-NEXT:    movdqa %xmm1, %xmm8
665 ; SSE-NEXT:    pandn %xmm3, %xmm8
666 ; SSE-NEXT:    movdqa (%rsi), %xmm11
667 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm11[2,1,2,3]
668 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
669 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
670 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,2,2,3,4,5,6,7]
671 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,5,5,6]
672 ; SSE-NEXT:    pand %xmm1, %xmm3
673 ; SSE-NEXT:    por %xmm8, %xmm3
674 ; SSE-NEXT:    movdqa (%rdx), %xmm0
675 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
676 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm0[2,1,3,3,4,5,6,7]
677 ; SSE-NEXT:    pshufhw {{.*#+}} xmm15 = xmm8[0,1,2,3,4,4,4,4]
678 ; SSE-NEXT:    movdqa %xmm2, %xmm10
679 ; SSE-NEXT:    pandn %xmm15, %xmm10
680 ; SSE-NEXT:    pand %xmm2, %xmm3
681 ; SSE-NEXT:    por %xmm3, %xmm10
682 ; SSE-NEXT:    movdqa %xmm4, %xmm3
683 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm4[8],xmm3[9],xmm4[9],xmm3[10],xmm4[10],xmm3[11],xmm4[11],xmm3[12],xmm4[12],xmm3[13],xmm4[13],xmm3[14],xmm4[14],xmm3[15],xmm4[15]
684 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,2,2,3]
685 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,6,6,7]
686 ; SSE-NEXT:    movdqa %xmm1, %xmm15
687 ; SSE-NEXT:    pandn %xmm3, %xmm15
688 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm5[2,3,2,3]
689 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,1,2,2,4,5,6,7]
690 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm3[0,1,2,3,7,7,7,7]
691 ; SSE-NEXT:    pand %xmm1, %xmm0
692 ; SSE-NEXT:    por %xmm15, %xmm0
693 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[2,3,2,3]
694 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,1,2,2,4,5,6,7]
695 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,6,5,7,7]
696 ; SSE-NEXT:    movdqa {{.*#+}} xmm15 = [0,255,255,0,255,255,0,255,255,0,255,255,0,255,255,0]
697 ; SSE-NEXT:    movdqa %xmm15, %xmm8
698 ; SSE-NEXT:    pandn %xmm3, %xmm8
699 ; SSE-NEXT:    pand %xmm15, %xmm0
700 ; SSE-NEXT:    por %xmm0, %xmm8
701 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
702 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,1,1,2]
703 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,2,4,5,6,7]
704 ; SSE-NEXT:    movdqa %xmm2, %xmm3
705 ; SSE-NEXT:    pandn %xmm0, %xmm3
706 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,1,0,1]
707 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]
708 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm0[0,1,2,3,5,5,6,6]
709 ; SSE-NEXT:    pand %xmm2, %xmm4
710 ; SSE-NEXT:    por %xmm3, %xmm4
711 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,1,0,1]
712 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
713 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm0[0,1,2,3,5,5,6,6]
714 ; SSE-NEXT:    movdqa %xmm1, %xmm6
715 ; SSE-NEXT:    pandn %xmm3, %xmm6
716 ; SSE-NEXT:    pand %xmm1, %xmm4
717 ; SSE-NEXT:    por %xmm4, %xmm6
718 ; SSE-NEXT:    movdqa %xmm14, %xmm3
719 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm14[8],xmm3[9],xmm14[9],xmm3[10],xmm14[10],xmm3[11],xmm14[11],xmm3[12],xmm14[12],xmm3[13],xmm14[13],xmm3[14],xmm14[14],xmm3[15],xmm14[15]
720 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,2,2,3]
721 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,6,6,7]
722 ; SSE-NEXT:    movdqa %xmm1, %xmm4
723 ; SSE-NEXT:    pandn %xmm3, %xmm4
724 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm12[2,3,2,3]
725 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,1,2,2,4,5,6,7]
726 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,7,7,7]
727 ; SSE-NEXT:    pand %xmm1, %xmm3
728 ; SSE-NEXT:    por %xmm4, %xmm3
729 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
730 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[2,3,2,3]
731 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,1,2,2,4,5,6,7]
732 ; SSE-NEXT:    pshufhw {{.*#+}} xmm5 = xmm4[0,1,2,3,6,5,7,7]
733 ; SSE-NEXT:    movdqa %xmm15, %xmm4
734 ; SSE-NEXT:    pandn %xmm5, %xmm4
735 ; SSE-NEXT:    pand %xmm15, %xmm3
736 ; SSE-NEXT:    por %xmm3, %xmm4
737 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm14 = xmm14[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
738 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm14[0,1,1,2]
739 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,2,4,5,6,7]
740 ; SSE-NEXT:    movdqa %xmm2, %xmm5
741 ; SSE-NEXT:    pandn %xmm3, %xmm5
742 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm12[0,1,0,1]
743 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,0,2,1,4,5,6,7]
744 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,5,6,6]
745 ; SSE-NEXT:    pand %xmm2, %xmm3
746 ; SSE-NEXT:    por %xmm5, %xmm3
747 ; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[0,1,0,1]
748 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,0,0,0,4,5,6,7]
749 ; SSE-NEXT:    pshufhw {{.*#+}} xmm7 = xmm5[0,1,2,3,5,5,6,6]
750 ; SSE-NEXT:    movdqa %xmm1, %xmm5
751 ; SSE-NEXT:    pandn %xmm7, %xmm5
752 ; SSE-NEXT:    pand %xmm1, %xmm3
753 ; SSE-NEXT:    por %xmm3, %xmm5
754 ; SSE-NEXT:    movdqa %xmm9, %xmm3
755 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm9[8],xmm3[9],xmm9[9],xmm3[10],xmm9[10],xmm3[11],xmm9[11],xmm3[12],xmm9[12],xmm3[13],xmm9[13],xmm3[14],xmm9[14],xmm3[15],xmm9[15]
756 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,2,2,3]
757 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,6,6,7]
758 ; SSE-NEXT:    movdqa %xmm1, %xmm7
759 ; SSE-NEXT:    pandn %xmm3, %xmm7
760 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
761 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]
762 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,1,2,2,4,5,6,7]
763 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,7,7,7]
764 ; SSE-NEXT:    pand %xmm1, %xmm3
765 ; SSE-NEXT:    por %xmm7, %xmm3
766 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
767 ; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm14[2,3,2,3]
768 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[1,1,2,2,4,5,6,7]
769 ; SSE-NEXT:    pshufhw {{.*#+}} xmm7 = xmm7[0,1,2,3,6,5,7,7]
770 ; SSE-NEXT:    movdqa %xmm15, %xmm12
771 ; SSE-NEXT:    pandn %xmm7, %xmm12
772 ; SSE-NEXT:    pand %xmm15, %xmm3
773 ; SSE-NEXT:    por %xmm3, %xmm12
774 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm9 = xmm9[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
775 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[0,1,1,2]
776 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,2,4,5,6,7]
777 ; SSE-NEXT:    movdqa %xmm2, %xmm7
778 ; SSE-NEXT:    pandn %xmm3, %xmm7
779 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,1,0,1]
780 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,0,2,1,4,5,6,7]
781 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,5,6,6]
782 ; SSE-NEXT:    pand %xmm2, %xmm3
783 ; SSE-NEXT:    por %xmm7, %xmm3
784 ; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm14[0,1,0,1]
785 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[0,0,0,0,4,5,6,7]
786 ; SSE-NEXT:    pshufhw {{.*#+}} xmm9 = xmm7[0,1,2,3,5,5,6,6]
787 ; SSE-NEXT:    movdqa %xmm1, %xmm7
788 ; SSE-NEXT:    pandn %xmm9, %xmm7
789 ; SSE-NEXT:    pand %xmm1, %xmm3
790 ; SSE-NEXT:    por %xmm3, %xmm7
791 ; SSE-NEXT:    movdqa %xmm11, %xmm3
792 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm11[8],xmm3[9],xmm11[9],xmm3[10],xmm11[10],xmm3[11],xmm11[11],xmm3[12],xmm11[12],xmm3[13],xmm11[13],xmm3[14],xmm11[14],xmm3[15],xmm11[15]
793 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,2,2,3]
794 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,6,6,7]
795 ; SSE-NEXT:    movdqa %xmm1, %xmm9
796 ; SSE-NEXT:    pandn %xmm3, %xmm9
797 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
798 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]
799 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,1,2,2,4,5,6,7]
800 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,7,7,7]
801 ; SSE-NEXT:    pand %xmm1, %xmm3
802 ; SSE-NEXT:    por %xmm9, %xmm3
803 ; SSE-NEXT:    pand %xmm15, %xmm3
804 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
805 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm14[2,3,2,3]
806 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm9[1,1,2,2,4,5,6,7]
807 ; SSE-NEXT:    pshufhw {{.*#+}} xmm9 = xmm9[0,1,2,3,6,5,7,7]
808 ; SSE-NEXT:    pandn %xmm9, %xmm15
809 ; SSE-NEXT:    por %xmm3, %xmm15
810 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm11 = xmm11[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
811 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm11[0,1,1,2]
812 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,1,2,4,5,6,7]
813 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,1,0,1]
814 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm9[0,0,2,1,4,5,6,7]
815 ; SSE-NEXT:    pshufhw {{.*#+}} xmm9 = xmm9[0,1,2,3,5,5,6,6]
816 ; SSE-NEXT:    pand %xmm2, %xmm9
817 ; SSE-NEXT:    pandn %xmm3, %xmm2
818 ; SSE-NEXT:    por %xmm9, %xmm2
819 ; SSE-NEXT:    pand %xmm1, %xmm2
820 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm14[0,1,0,1]
821 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,0,0,0,4,5,6,7]
822 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,5,6,6]
823 ; SSE-NEXT:    pandn %xmm3, %xmm1
824 ; SSE-NEXT:    por %xmm2, %xmm1
825 ; SSE-NEXT:    movdqa %xmm1, (%rcx)
826 ; SSE-NEXT:    movdqa %xmm15, 32(%rcx)
827 ; SSE-NEXT:    movdqa %xmm7, 48(%rcx)
828 ; SSE-NEXT:    movdqa %xmm12, 80(%rcx)
829 ; SSE-NEXT:    movdqa %xmm5, 96(%rcx)
830 ; SSE-NEXT:    movdqa %xmm4, 128(%rcx)
831 ; SSE-NEXT:    movdqa %xmm6, 144(%rcx)
832 ; SSE-NEXT:    movdqa %xmm8, 176(%rcx)
833 ; SSE-NEXT:    movdqa %xmm10, 16(%rcx)
834 ; SSE-NEXT:    movdqa %xmm13, 64(%rcx)
835 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
836 ; SSE-NEXT:    movaps %xmm0, 112(%rcx)
837 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
838 ; SSE-NEXT:    movaps %xmm0, 160(%rcx)
839 ; SSE-NEXT:    retq
841 ; AVX1-ONLY-LABEL: store_i8_stride3_vf64:
842 ; AVX1-ONLY:       # %bb.0:
843 ; AVX1-ONLY-NEXT:    subq $24, %rsp
844 ; AVX1-ONLY-NEXT:    vmovdqa (%rdi), %xmm7
845 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm9
846 ; AVX1-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm6
847 ; AVX1-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm2
848 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm8 = [11,12,13,14,15,0,1,2,3,4,5,128,128,128,128,128]
849 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm7, %xmm0
850 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
851 ; AVX1-ONLY-NEXT:    vmovdqa (%rdx), %xmm3
852 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdx), %xmm1
853 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm9, %xmm0
854 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
855 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm6, %xmm0
856 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
857 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm2, %xmm8
858 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm10 = <u,u,u,u,u,128,128,128,128,128,128,6,7,8,9,10>
859 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm2, %xmm2
860 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm11 = <u,u,u,u,u,5,6,7,8,9,10,128,128,128,128,128>
861 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rsi), %xmm12
862 ; AVX1-ONLY-NEXT:    vmovdqa 32(%rsi), %xmm13
863 ; AVX1-ONLY-NEXT:    vmovdqa 48(%rsi), %xmm14
864 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm14, %xmm15
865 ; AVX1-ONLY-NEXT:    vpor %xmm2, %xmm15, %xmm0
866 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill
867 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm6, %xmm6
868 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm13, %xmm15
869 ; AVX1-ONLY-NEXT:    vpor %xmm6, %xmm15, %xmm0
870 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
871 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm9, %xmm9
872 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm12, %xmm15
873 ; AVX1-ONLY-NEXT:    vpor %xmm9, %xmm15, %xmm0
874 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
875 ; AVX1-ONLY-NEXT:    vmovdqa (%rsi), %xmm15
876 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm7, %xmm7
877 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm15, %xmm10
878 ; AVX1-ONLY-NEXT:    vpor %xmm7, %xmm10, %xmm0
879 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
880 ; AVX1-ONLY-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm3[8],xmm15[8],xmm3[9],xmm15[9],xmm3[10],xmm15[10],xmm3[11],xmm15[11],xmm3[12],xmm15[12],xmm3[13],xmm15[13],xmm3[14],xmm15[14],xmm3[15],xmm15[15]
881 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm10 = <u,u,u,u,u,4,6,8,10,12,14,7,9,11,13,15>
882 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm7, %xmm6
883 ; AVX1-ONLY-NEXT:    vmovdqa %xmm1, %xmm0
884 ; AVX1-ONLY-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm1[8],xmm12[8],xmm1[9],xmm12[9],xmm1[10],xmm12[10],xmm1[11],xmm12[11],xmm1[12],xmm12[12],xmm1[13],xmm12[13],xmm1[14],xmm12[14],xmm1[15],xmm12[15]
885 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm7, %xmm5
886 ; AVX1-ONLY-NEXT:    vmovdqa 32(%rdx), %xmm11
887 ; AVX1-ONLY-NEXT:    vpunpckhbw {{.*#+}} xmm7 = xmm11[8],xmm13[8],xmm11[9],xmm13[9],xmm11[10],xmm13[10],xmm11[11],xmm13[11],xmm11[12],xmm13[12],xmm11[13],xmm13[13],xmm11[14],xmm13[14],xmm11[15],xmm13[15]
888 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm7, %xmm4
889 ; AVX1-ONLY-NEXT:    vmovdqa 48(%rdx), %xmm7
890 ; AVX1-ONLY-NEXT:    vpunpckhbw {{.*#+}} xmm9 = xmm7[8],xmm14[8],xmm7[9],xmm14[9],xmm7[10],xmm14[10],xmm7[11],xmm14[11],xmm7[12],xmm14[12],xmm7[13],xmm14[13],xmm7[14],xmm14[14],xmm7[15],xmm14[15]
891 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm9, %xmm9
892 ; AVX1-ONLY-NEXT:    vpslldq {{.*#+}} xmm10 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm7[0,1,2,3,4]
893 ; AVX1-ONLY-NEXT:    vpor %xmm10, %xmm8, %xmm10
894 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm1 = xmm10[5,6,7,8,9,10,11,12,13,14,15],xmm14[0,1,2,3,4]
895 ; AVX1-ONLY-NEXT:    vmovdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
896 ; AVX1-ONLY-NEXT:    vpslldq {{.*#+}} xmm14 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm11[0,1,2,3,4]
897 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
898 ; AVX1-ONLY-NEXT:    vpor %xmm2, %xmm14, %xmm14
899 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm13 = xmm14[5,6,7,8,9,10,11,12,13,14,15],xmm13[0,1,2,3,4]
900 ; AVX1-ONLY-NEXT:    vpslldq {{.*#+}} xmm14 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4]
901 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, %xmm10
902 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
903 ; AVX1-ONLY-NEXT:    vpor %xmm1, %xmm14, %xmm14
904 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm12 = xmm14[5,6,7,8,9,10,11,12,13,14,15],xmm12[0,1,2,3,4]
905 ; AVX1-ONLY-NEXT:    vpslldq {{.*#+}} xmm14 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4]
906 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
907 ; AVX1-ONLY-NEXT:    vpor %xmm0, %xmm14, %xmm14
908 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm14 = xmm14[5,6,7,8,9,10,11,12,13,14,15],xmm15[0,1,2,3,4]
909 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm8 = xmm9[5,6,7,8,9,10,11,12,13,14,15],xmm8[0,1,2,3,4]
910 ; AVX1-ONLY-NEXT:    vmovdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
911 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm15 = xmm4[5,6,7,8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4]
912 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm2 = xmm5[5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1,2,3,4]
913 ; AVX1-ONLY-NEXT:    vpalignr {{.*#+}} xmm4 = xmm6[5,6,7,8,9,10,11,12,13,14,15],xmm0[0,1,2,3,4]
914 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm5 = [5,128,11,6,128,12,7,128,13,8,128,14,9,128,15,10]
915 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
916 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm0, %xmm6
917 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm9 = [128,5,128,128,6,128,128,7,128,128,8,128,128,9,128,128]
918 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm3, %xmm1
919 ; AVX1-ONLY-NEXT:    vpor %xmm1, %xmm6, %xmm1
920 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
921 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm0, %xmm6
922 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm10, %xmm3
923 ; AVX1-ONLY-NEXT:    vpor %xmm3, %xmm6, %xmm3
924 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
925 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm0, %xmm6
926 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm11, %xmm11
927 ; AVX1-ONLY-NEXT:    vpor %xmm6, %xmm11, %xmm6
928 ; AVX1-ONLY-NEXT:    vmovdqa {{.*#+}} xmm11 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
929 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm14, %xmm14
930 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm4, %xmm4
931 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm12, %xmm12
932 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm2, %xmm2
933 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm13, %xmm13
934 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm15, %xmm0
935 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
936 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm8, %xmm10
937 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
938 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm8, %xmm8
939 ; AVX1-ONLY-NEXT:    vmovdqa (%rsp), %xmm11 # 16-byte Reload
940 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm11, %xmm5
941 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm7, %xmm7
942 ; AVX1-ONLY-NEXT:    vpor %xmm7, %xmm5, %xmm5
943 ; AVX1-ONLY-NEXT:    vmovdqa %xmm3, 64(%rcx)
944 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, 80(%rcx)
945 ; AVX1-ONLY-NEXT:    vmovdqa %xmm14, (%rcx)
946 ; AVX1-ONLY-NEXT:    vmovdqa %xmm1, 16(%rcx)
947 ; AVX1-ONLY-NEXT:    vmovdqa %xmm4, 32(%rcx)
948 ; AVX1-ONLY-NEXT:    vmovdqa %xmm12, 48(%rcx)
949 ; AVX1-ONLY-NEXT:    vmovdqa %xmm5, 160(%rcx)
950 ; AVX1-ONLY-NEXT:    vmovdqa %xmm8, 176(%rcx)
951 ; AVX1-ONLY-NEXT:    vmovdqa %xmm13, 96(%rcx)
952 ; AVX1-ONLY-NEXT:    vmovdqa %xmm6, 112(%rcx)
953 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, 128(%rcx)
954 ; AVX1-ONLY-NEXT:    vmovdqa %xmm10, 144(%rcx)
955 ; AVX1-ONLY-NEXT:    addq $24, %rsp
956 ; AVX1-ONLY-NEXT:    retq
958 ; AVX2-ONLY-LABEL: store_i8_stride3_vf64:
959 ; AVX2-ONLY:       # %bb.0:
960 ; AVX2-ONLY-NEXT:    vmovdqa (%rdi), %ymm0
961 ; AVX2-ONLY-NEXT:    vmovdqa 32(%rdi), %ymm1
962 ; AVX2-ONLY-NEXT:    vmovdqa (%rsi), %ymm2
963 ; AVX2-ONLY-NEXT:    vmovdqa 32(%rsi), %ymm3
964 ; AVX2-ONLY-NEXT:    vmovdqa (%rdx), %ymm4
965 ; AVX2-ONLY-NEXT:    vmovdqa 32(%rdx), %ymm5
966 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm6 = ymm0[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
967 ; AVX2-ONLY-NEXT:    vpslldq {{.*#+}} ymm7 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm4[0,1,2,3,4],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm4[16,17,18,19,20]
968 ; AVX2-ONLY-NEXT:    vbroadcasti128 {{.*#+}} ymm8 = [255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0]
969 ; AVX2-ONLY-NEXT:    # ymm8 = mem[0,1,0,1]
970 ; AVX2-ONLY-NEXT:    vpblendvb %ymm8, %ymm6, %ymm7, %ymm7
971 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm9 = ymm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
972 ; AVX2-ONLY-NEXT:    vpslldq {{.*#+}} ymm10 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm5[0,1,2,3,4],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm5[16,17,18,19,20]
973 ; AVX2-ONLY-NEXT:    vpblendvb %ymm8, %ymm9, %ymm10, %ymm10
974 ; AVX2-ONLY-NEXT:    vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7,8,9,10],zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23,24,25,26]
975 ; AVX2-ONLY-NEXT:    vbroadcasti128 {{.*#+}} ymm11 = [0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0]
976 ; AVX2-ONLY-NEXT:    # ymm11 = mem[0,1,0,1]
977 ; AVX2-ONLY-NEXT:    vpblendvb %ymm11, %ymm2, %ymm0, %ymm0
978 ; AVX2-ONLY-NEXT:    vpslldq {{.*#+}} ymm1 = zero,zero,zero,zero,zero,ymm1[0,1,2,3,4,5,6,7,8,9,10],zero,zero,zero,zero,zero,ymm1[16,17,18,19,20,21,22,23,24,25,26]
979 ; AVX2-ONLY-NEXT:    vpblendvb %ymm11, %ymm3, %ymm1, %ymm1
980 ; AVX2-ONLY-NEXT:    vpsrldq {{.*#+}} ymm11 = ymm4[5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,ymm4[21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero
981 ; AVX2-ONLY-NEXT:    vbroadcasti128 {{.*#+}} ymm12 = [0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255]
982 ; AVX2-ONLY-NEXT:    # ymm12 = mem[0,1,0,1]
983 ; AVX2-ONLY-NEXT:    vpblendvb %ymm12, %ymm2, %ymm11, %ymm11
984 ; AVX2-ONLY-NEXT:    vpsrldq {{.*#+}} ymm13 = ymm5[5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,ymm5[21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero
985 ; AVX2-ONLY-NEXT:    vpblendvb %ymm12, %ymm3, %ymm13, %ymm12
986 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm3 = ymm10[5,6,7,8,9,10,11,12,13,14,15],ymm3[0,1,2,3,4],ymm10[21,22,23,24,25,26,27,28,29,30,31],ymm3[16,17,18,19,20]
987 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm2 = ymm7[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm7[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
988 ; AVX2-ONLY-NEXT:    vpsrldq {{.*#+}} ymm1 = ymm1[5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,ymm1[21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero
989 ; AVX2-ONLY-NEXT:    vpslldq {{.*#+}} ymm5 = zero,zero,zero,zero,zero,zero,ymm5[0,1,2,3,4,5,6,7,8,9],zero,zero,zero,zero,zero,zero,ymm5[16,17,18,19,20,21,22,23,24,25]
990 ; AVX2-ONLY-NEXT:    vpblendvb %ymm8, %ymm1, %ymm5, %ymm1
991 ; AVX2-ONLY-NEXT:    vpsrldq {{.*#+}} ymm0 = ymm0[5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,ymm0[21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero
992 ; AVX2-ONLY-NEXT:    vpslldq {{.*#+}} ymm4 = zero,zero,zero,zero,zero,zero,ymm4[0,1,2,3,4,5,6,7,8,9],zero,zero,zero,zero,zero,zero,ymm4[16,17,18,19,20,21,22,23,24,25]
993 ; AVX2-ONLY-NEXT:    vpblendvb %ymm8, %ymm0, %ymm4, %ymm0
994 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm4 = ymm12[5,6,7,8,9,10,11,12,13,14,15],ymm9[0,1,2,3,4],ymm12[21,22,23,24,25,26,27,28,29,30,31],ymm9[16,17,18,19,20]
995 ; AVX2-ONLY-NEXT:    vpalignr {{.*#+}} ymm5 = ymm11[5,6,7,8,9,10,11,12,13,14,15],ymm6[0,1,2,3,4],ymm11[21,22,23,24,25,26,27,28,29,30,31],ymm6[16,17,18,19,20]
996 ; AVX2-ONLY-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm6
997 ; AVX2-ONLY-NEXT:    vbroadcasti128 {{.*#+}} ymm7 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
998 ; AVX2-ONLY-NEXT:    # ymm7 = mem[0,1,0,1]
999 ; AVX2-ONLY-NEXT:    vpshufb %ymm7, %ymm6, %ymm6
1000 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
1001 ; AVX2-ONLY-NEXT:    vpshufb %ymm7, %ymm2, %ymm2
1002 ; AVX2-ONLY-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm5[2,3]
1003 ; AVX2-ONLY-NEXT:    vpshufb %ymm7, %ymm0, %ymm0
1004 ; AVX2-ONLY-NEXT:    vinserti128 $1, %xmm1, %ymm3, %ymm5
1005 ; AVX2-ONLY-NEXT:    vpshufb %ymm7, %ymm5, %ymm5
1006 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
1007 ; AVX2-ONLY-NEXT:    vpshufb %ymm7, %ymm3, %ymm3
1008 ; AVX2-ONLY-NEXT:    vperm2i128 {{.*#+}} ymm1 = ymm1[2,3],ymm4[2,3]
1009 ; AVX2-ONLY-NEXT:    vpshufb %ymm7, %ymm1, %ymm1
1010 ; AVX2-ONLY-NEXT:    vmovdqa %ymm2, 32(%rcx)
1011 ; AVX2-ONLY-NEXT:    vmovdqa %ymm3, 128(%rcx)
1012 ; AVX2-ONLY-NEXT:    vmovdqa %ymm0, 64(%rcx)
1013 ; AVX2-ONLY-NEXT:    vmovdqa %ymm1, 160(%rcx)
1014 ; AVX2-ONLY-NEXT:    vmovdqa %ymm6, (%rcx)
1015 ; AVX2-ONLY-NEXT:    vmovdqa %ymm5, 96(%rcx)
1016 ; AVX2-ONLY-NEXT:    vzeroupper
1017 ; AVX2-ONLY-NEXT:    retq
1019 ; AVX512F-LABEL: store_i8_stride3_vf64:
1020 ; AVX512F:       # %bb.0:
1021 ; AVX512F-NEXT:    vmovdqa (%rdi), %ymm0
1022 ; AVX512F-NEXT:    vmovdqa 32(%rdi), %ymm1
1023 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm1 = ymm1[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]
1024 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21]
1025 ; AVX512F-NEXT:    vmovdqa (%rsi), %ymm2
1026 ; AVX512F-NEXT:    vmovdqa 32(%rsi), %ymm3
1027 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm4 = ymm3[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
1028 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm5 = ymm2[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26]
1029 ; AVX512F-NEXT:    vmovdqa (%rdx), %ymm6
1030 ; AVX512F-NEXT:    vmovdqa 32(%rdx), %ymm7
1031 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm8 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm6[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm6[16,17,18,19,20]
1032 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm9 = ymm1[5,6,7,8,9,10,11,12,13,14,15],ymm7[0,1,2,3,4],ymm1[21,22,23,24,25,26,27,28,29,30,31],ymm7[16,17,18,19,20]
1033 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm0 = ymm5[5,6,7,8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4],ymm5[21,22,23,24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20]
1034 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm1 = ymm4[5,6,7,8,9,10,11,12,13,14,15],ymm1[0,1,2,3,4],ymm4[21,22,23,24,25,26,27,28,29,30,31],ymm1[16,17,18,19,20]
1035 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm5 = ymm6[5,6,7,8,9,10,11,12,13,14,15],ymm5[0,1,2,3,4],ymm6[21,22,23,24,25,26,27,28,29,30,31],ymm5[16,17,18,19,20]
1036 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm4 = ymm7[5,6,7,8,9,10,11,12,13,14,15],ymm4[0,1,2,3,4],ymm7[21,22,23,24,25,26,27,28,29,30,31],ymm4[16,17,18,19,20]
1037 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm3 = ymm9[5,6,7,8,9,10,11,12,13,14,15],ymm3[0,1,2,3,4],ymm9[21,22,23,24,25,26,27,28,29,30,31],ymm3[16,17,18,19,20]
1038 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm2 = ymm8[5,6,7,8,9,10,11,12,13,14,15],ymm2[0,1,2,3,4],ymm8[21,22,23,24,25,26,27,28,29,30,31],ymm2[16,17,18,19,20]
1039 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm1 = ymm1[5,6,7,8,9,10,11,12,13,14,15],ymm4[0,1,2,3,4],ymm1[21,22,23,24,25,26,27,28,29,30,31],ymm4[16,17,18,19,20]
1040 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm0 = ymm0[5,6,7,8,9,10,11,12,13,14,15],ymm5[0,1,2,3,4],ymm0[21,22,23,24,25,26,27,28,29,30,31],ymm5[16,17,18,19,20]
1041 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm4 = ymm4[5,6,7,8,9,10,11,12,13,14,15],ymm9[0,1,2,3,4],ymm4[21,22,23,24,25,26,27,28,29,30,31],ymm9[16,17,18,19,20]
1042 ; AVX512F-NEXT:    vpalignr {{.*#+}} ymm5 = ymm5[5,6,7,8,9,10,11,12,13,14,15],ymm8[0,1,2,3,4],ymm5[21,22,23,24,25,26,27,28,29,30,31],ymm8[16,17,18,19,20]
1043 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm6
1044 ; AVX512F-NEXT:    vbroadcasti128 {{.*#+}} ymm7 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
1045 ; AVX512F-NEXT:    # ymm7 = mem[0,1,0,1]
1046 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm6, %ymm6
1047 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
1048 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm2, %ymm2
1049 ; AVX512F-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm5[2,3]
1050 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm0, %ymm0
1051 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm3, %ymm5
1052 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm5, %ymm5
1053 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
1054 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm3, %ymm3
1055 ; AVX512F-NEXT:    vperm2i128 {{.*#+}} ymm1 = ymm1[2,3],ymm4[2,3]
1056 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm1, %ymm1
1057 ; AVX512F-NEXT:    vmovdqa %ymm3, 128(%rcx)
1058 ; AVX512F-NEXT:    vmovdqa %ymm1, 160(%rcx)
1059 ; AVX512F-NEXT:    vmovdqa %ymm0, 64(%rcx)
1060 ; AVX512F-NEXT:    vmovdqa %ymm2, 32(%rcx)
1061 ; AVX512F-NEXT:    vmovdqa %ymm5, 96(%rcx)
1062 ; AVX512F-NEXT:    vmovdqa %ymm6, (%rcx)
1063 ; AVX512F-NEXT:    vzeroupper
1064 ; AVX512F-NEXT:    retq
1066 ; AVX512BW-LABEL: store_i8_stride3_vf64:
1067 ; AVX512BW:       # %bb.0:
1068 ; AVX512BW-NEXT:    vmovdqa64 (%rdi), %zmm0
1069 ; AVX512BW-NEXT:    vmovdqa64 (%rsi), %zmm1
1070 ; AVX512BW-NEXT:    vmovdqa64 (%rdx), %zmm2
1071 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm0 = zmm0[6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,22,23,24,25,26,27,28,29,30,31,16,17,18,19,20,21,38,39,40,41,42,43,44,45,46,47,32,33,34,35,36,37,54,55,56,57,58,59,60,61,62,63,48,49,50,51,52,53]
1072 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm3 = zmm1[11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,27,28,29,30,31,16,17,18,19,20,21,22,23,24,25,26,43,44,45,46,47,32,33,34,35,36,37,38,39,40,41,42,59,60,61,62,63,48,49,50,51,52,53,54,55,56,57,58]
1073 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm4 = zmm0[5,6,7,8,9,10,11,12,13,14,15],zmm2[0,1,2,3,4],zmm0[21,22,23,24,25,26,27,28,29,30,31],zmm2[16,17,18,19,20],zmm0[37,38,39,40,41,42,43,44,45,46,47],zmm2[32,33,34,35,36],zmm0[53,54,55,56,57,58,59,60,61,62,63],zmm2[48,49,50,51,52]
1074 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm0 = zmm3[5,6,7,8,9,10,11,12,13,14,15],zmm0[0,1,2,3,4],zmm3[21,22,23,24,25,26,27,28,29,30,31],zmm0[16,17,18,19,20],zmm3[37,38,39,40,41,42,43,44,45,46,47],zmm0[32,33,34,35,36],zmm3[53,54,55,56,57,58,59,60,61,62,63],zmm0[48,49,50,51,52]
1075 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm2 = zmm2[5,6,7,8,9,10,11,12,13,14,15],zmm3[0,1,2,3,4],zmm2[21,22,23,24,25,26,27,28,29,30,31],zmm3[16,17,18,19,20],zmm2[37,38,39,40,41,42,43,44,45,46,47],zmm3[32,33,34,35,36],zmm2[53,54,55,56,57,58,59,60,61,62,63],zmm3[48,49,50,51,52]
1076 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm1 = zmm4[5,6,7,8,9,10,11,12,13,14,15],zmm1[0,1,2,3,4],zmm4[21,22,23,24,25,26,27,28,29,30,31],zmm1[16,17,18,19,20],zmm4[37,38,39,40,41,42,43,44,45,46,47],zmm1[32,33,34,35,36],zmm4[53,54,55,56,57,58,59,60,61,62,63],zmm1[48,49,50,51,52]
1077 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm0 = zmm0[5,6,7,8,9,10,11,12,13,14,15],zmm2[0,1,2,3,4],zmm0[21,22,23,24,25,26,27,28,29,30,31],zmm2[16,17,18,19,20],zmm0[37,38,39,40,41,42,43,44,45,46,47],zmm2[32,33,34,35,36],zmm0[53,54,55,56,57,58,59,60,61,62,63],zmm2[48,49,50,51,52]
1078 ; AVX512BW-NEXT:    vpalignr {{.*#+}} zmm2 = zmm2[5,6,7,8,9,10,11,12,13,14,15],zmm4[0,1,2,3,4],zmm2[21,22,23,24,25,26,27,28,29,30,31],zmm4[16,17,18,19,20],zmm2[37,38,39,40,41,42,43,44,45,46,47],zmm4[32,33,34,35,36],zmm2[53,54,55,56,57,58,59,60,61,62,63],zmm4[48,49,50,51,52]
1079 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm3
1080 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm4 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1081 ; AVX512BW-NEXT:    vperm2i128 {{.*#+}} ymm5 = ymm0[2,3],ymm2[2,3]
1082 ; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm0
1083 ; AVX512BW-NEXT:    vextracti64x4 $1, %zmm1, %ymm1
1084 ; AVX512BW-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm6
1085 ; AVX512BW-NEXT:    vextracti64x4 $1, %zmm2, %ymm2
1086 ; AVX512BW-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1087 ; AVX512BW-NEXT:    vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm2[2,3]
1088 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm4, %zmm3, %zmm2
1089 ; AVX512BW-NEXT:    vbroadcasti64x4 {{.*#+}} zmm3 = [0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15,10,5]
1090 ; AVX512BW-NEXT:    # zmm3 = mem[0,1,2,3,0,1,2,3]
1091 ; AVX512BW-NEXT:    vpshufb %zmm3, %zmm2, %zmm2
1092 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm6, %zmm5, %zmm4
1093 ; AVX512BW-NEXT:    vpshufb %zmm3, %zmm4, %zmm4
1094 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm1, %zmm0
1095 ; AVX512BW-NEXT:    vpshufb %zmm3, %zmm0, %zmm0
1096 ; AVX512BW-NEXT:    vmovdqa64 %zmm0, 128(%rcx)
1097 ; AVX512BW-NEXT:    vmovdqa64 %zmm4, 64(%rcx)
1098 ; AVX512BW-NEXT:    vmovdqa64 %zmm2, (%rcx)
1099 ; AVX512BW-NEXT:    vzeroupper
1100 ; AVX512BW-NEXT:    retq
1101   %in.vec0 = load <64 x i8>, ptr %in.vecptr0, align 64
1102   %in.vec1 = load <64 x i8>, ptr %in.vecptr1, align 64
1103   %in.vec2 = load <64 x i8>, ptr %in.vecptr2, align 64
1104   %1 = shufflevector <64 x i8> %in.vec0, <64 x i8> %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>
1105   %2 = shufflevector <64 x i8> %in.vec2, <64 x i8> poison, <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 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1106   %3 = shufflevector <128 x i8> %1, <128 x i8> %2, <192 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, i32 128, i32 129, i32 130, i32 131, i32 132, i32 133, i32 134, i32 135, i32 136, i32 137, i32 138, i32 139, i32 140, i32 141, i32 142, i32 143, i32 144, i32 145, i32 146, i32 147, i32 148, i32 149, i32 150, i32 151, i32 152, i32 153, i32 154, i32 155, i32 156, i32 157, i32 158, i32 159, i32 160, i32 161, i32 162, i32 163, i32 164, i32 165, i32 166, i32 167, i32 168, i32 169, i32 170, i32 171, i32 172, i32 173, i32 174, i32 175, i32 176, i32 177, i32 178, i32 179, i32 180, i32 181, i32 182, i32 183, i32 184, i32 185, i32 186, i32 187, i32 188, i32 189, i32 190, i32 191>
1107   %interleaved.vec = shufflevector <192 x i8> %3, <192 x i8> poison, <192 x i32> <i32 0, i32 64, i32 128, i32 1, i32 65, i32 129, i32 2, i32 66, i32 130, i32 3, i32 67, i32 131, i32 4, i32 68, i32 132, i32 5, i32 69, i32 133, i32 6, i32 70, i32 134, i32 7, i32 71, i32 135, i32 8, i32 72, i32 136, i32 9, i32 73, i32 137, i32 10, i32 74, i32 138, i32 11, i32 75, i32 139, i32 12, i32 76, i32 140, i32 13, i32 77, i32 141, i32 14, i32 78, i32 142, i32 15, i32 79, i32 143, i32 16, i32 80, i32 144, i32 17, i32 81, i32 145, i32 18, i32 82, i32 146, i32 19, i32 83, i32 147, i32 20, i32 84, i32 148, i32 21, i32 85, i32 149, i32 22, i32 86, i32 150, i32 23, i32 87, i32 151, i32 24, i32 88, i32 152, i32 25, i32 89, i32 153, i32 26, i32 90, i32 154, i32 27, i32 91, i32 155, i32 28, i32 92, i32 156, i32 29, i32 93, i32 157, i32 30, i32 94, i32 158, i32 31, i32 95, i32 159, i32 32, i32 96, i32 160, i32 33, i32 97, i32 161, i32 34, i32 98, i32 162, i32 35, i32 99, i32 163, i32 36, i32 100, i32 164, i32 37, i32 101, i32 165, i32 38, i32 102, i32 166, i32 39, i32 103, i32 167, i32 40, i32 104, i32 168, i32 41, i32 105, i32 169, i32 42, i32 106, i32 170, i32 43, i32 107, i32 171, i32 44, i32 108, i32 172, i32 45, i32 109, i32 173, i32 46, i32 110, i32 174, i32 47, i32 111, i32 175, i32 48, i32 112, i32 176, i32 49, i32 113, i32 177, i32 50, i32 114, i32 178, i32 51, i32 115, i32 179, i32 52, i32 116, i32 180, i32 53, i32 117, i32 181, i32 54, i32 118, i32 182, i32 55, i32 119, i32 183, i32 56, i32 120, i32 184, i32 57, i32 121, i32 185, i32 58, i32 122, i32 186, i32 59, i32 123, i32 187, i32 60, i32 124, i32 188, i32 61, i32 125, i32 189, i32 62, i32 126, i32 190, i32 63, i32 127, i32 191>
1108   store <192 x i8> %interleaved.vec, ptr %out.vec, align 64
1109   ret void
1111 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1112 ; AVX2: {{.*}}
1113 ; AVX2-FAST: {{.*}}
1114 ; AVX2-FAST-PERLANE: {{.*}}
1115 ; AVX2-SLOW: {{.*}}
1116 ; AVX512-FAST: {{.*}}
1117 ; AVX512-SLOW: {{.*}}
1118 ; AVX512BW-FAST: {{.*}}
1119 ; AVX512BW-ONLY-FAST: {{.*}}
1120 ; AVX512BW-ONLY-SLOW: {{.*}}
1121 ; AVX512BW-SLOW: {{.*}}
1122 ; AVX512DQ-FAST: {{.*}}
1123 ; AVX512DQ-SLOW: {{.*}}
1124 ; AVX512DQBW-FAST: {{.*}}
1125 ; AVX512DQBW-SLOW: {{.*}}
1126 ; AVX512F-FAST: {{.*}}
1127 ; AVX512F-ONLY-FAST: {{.*}}
1128 ; AVX512F-ONLY-SLOW: {{.*}}
1129 ; AVX512F-SLOW: {{.*}}
1130 ; FALLBACK0: {{.*}}
1131 ; FALLBACK1: {{.*}}
1132 ; FALLBACK10: {{.*}}
1133 ; FALLBACK11: {{.*}}
1134 ; FALLBACK12: {{.*}}
1135 ; FALLBACK2: {{.*}}
1136 ; FALLBACK3: {{.*}}
1137 ; FALLBACK4: {{.*}}
1138 ; FALLBACK5: {{.*}}
1139 ; FALLBACK6: {{.*}}
1140 ; FALLBACK7: {{.*}}
1141 ; FALLBACK8: {{.*}}
1142 ; FALLBACK9: {{.*}}