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