Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-interleaved-load-i8-stride-4.ll
blobdf33d3b9d8fd4b1fe62c0b0a9daa482795c4eff5
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 loads.
18 define void @load_i8_stride4_vf2(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr %out.vec2, ptr %out.vec3) nounwind {
19 ; SSE-LABEL: load_i8_stride4_vf2:
20 ; SSE:       # %bb.0:
21 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
22 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [255,0,255,0,255,0,255,0]
23 ; SSE-NEXT:    pand %xmm0, %xmm1
24 ; SSE-NEXT:    packuswb %xmm1, %xmm1
25 ; SSE-NEXT:    packuswb %xmm1, %xmm1
26 ; SSE-NEXT:    pxor %xmm2, %xmm2
27 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[1,3,2,3,4,5,6,7]
28 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
29 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[0,2,2,3]
30 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,3,2,3,4,5,6,7]
31 ; SSE-NEXT:    packuswb %xmm2, %xmm2
32 ; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
33 ; SSE-NEXT:    packuswb %xmm3, %xmm3
34 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
35 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
36 ; SSE-NEXT:    packuswb %xmm0, %xmm0
37 ; SSE-NEXT:    movd %xmm1, %eax
38 ; SSE-NEXT:    movw %ax, (%rsi)
39 ; SSE-NEXT:    movd %xmm2, %eax
40 ; SSE-NEXT:    movw %ax, (%rdx)
41 ; SSE-NEXT:    movd %xmm3, %eax
42 ; SSE-NEXT:    movw %ax, (%rcx)
43 ; SSE-NEXT:    movd %xmm0, %eax
44 ; SSE-NEXT:    movw %ax, (%r8)
45 ; SSE-NEXT:    retq
47 ; AVX1-LABEL: load_i8_stride4_vf2:
48 ; AVX1:       # %bb.0:
49 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
50 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,4,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
51 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm2 = xmm0[1,5,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
52 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm3 = xmm0[2,6,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
53 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,7,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
54 ; AVX1-NEXT:    vpextrw $0, %xmm1, (%rsi)
55 ; AVX1-NEXT:    vpextrw $0, %xmm2, (%rdx)
56 ; AVX1-NEXT:    vpextrw $0, %xmm3, (%rcx)
57 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%r8)
58 ; AVX1-NEXT:    retq
60 ; AVX512-LABEL: load_i8_stride4_vf2:
61 ; AVX512:       # %bb.0:
62 ; AVX512-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
63 ; AVX512-NEXT:    vpmovdb %xmm0, %xmm1
64 ; AVX512-NEXT:    vpshufb {{.*#+}} xmm2 = xmm0[1,5,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
65 ; AVX512-NEXT:    vpshufb {{.*#+}} xmm3 = xmm0[2,6,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
66 ; AVX512-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,7,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
67 ; AVX512-NEXT:    vpextrw $0, %xmm1, (%rsi)
68 ; AVX512-NEXT:    vpextrw $0, %xmm2, (%rdx)
69 ; AVX512-NEXT:    vpextrw $0, %xmm3, (%rcx)
70 ; AVX512-NEXT:    vpextrw $0, %xmm0, (%r8)
71 ; AVX512-NEXT:    retq
72   %wide.vec = load <8 x i8>, ptr %in.vec, align 64
73   %strided.vec0 = shufflevector <8 x i8> %wide.vec, <8 x i8> poison, <2 x i32> <i32 0, i32 4>
74   %strided.vec1 = shufflevector <8 x i8> %wide.vec, <8 x i8> poison, <2 x i32> <i32 1, i32 5>
75   %strided.vec2 = shufflevector <8 x i8> %wide.vec, <8 x i8> poison, <2 x i32> <i32 2, i32 6>
76   %strided.vec3 = shufflevector <8 x i8> %wide.vec, <8 x i8> poison, <2 x i32> <i32 3, i32 7>
77   store <2 x i8> %strided.vec0, ptr %out.vec0, align 64
78   store <2 x i8> %strided.vec1, ptr %out.vec1, align 64
79   store <2 x i8> %strided.vec2, ptr %out.vec2, align 64
80   store <2 x i8> %strided.vec3, ptr %out.vec3, align 64
81   ret void
84 define void @load_i8_stride4_vf4(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr %out.vec2, ptr %out.vec3) nounwind {
85 ; SSE-LABEL: load_i8_stride4_vf4:
86 ; SSE:       # %bb.0:
87 ; SSE-NEXT:    movdqa (%rdi), %xmm1
88 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,0,255,0,255,0,255,0]
89 ; SSE-NEXT:    pand %xmm1, %xmm0
90 ; SSE-NEXT:    packuswb %xmm0, %xmm0
91 ; SSE-NEXT:    packuswb %xmm0, %xmm0
92 ; SSE-NEXT:    pxor %xmm2, %xmm2
93 ; SSE-NEXT:    movdqa %xmm1, %xmm3
94 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
95 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,2,2,3]
96 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,3,2,3,4,5,6,7]
97 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm1[3,1,2,3,4,5,6,7]
98 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
99 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,2,2,3]
100 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,3,2,3,4,5,6,7]
101 ; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
102 ; SSE-NEXT:    packuswb %xmm2, %xmm2
103 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm5[0,1,2,3,7,5,6,7]
104 ; SSE-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
105 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
106 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,0,3,2,4,5,6,7]
107 ; SSE-NEXT:    packuswb %xmm4, %xmm4
108 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[3,1,2,3]
109 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,1,2,3,4,5,6,7]
110 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[3,1,2,3]
111 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,1,2,3,4,5,6,7]
112 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
113 ; SSE-NEXT:    packuswb %xmm1, %xmm1
114 ; SSE-NEXT:    movd %xmm0, (%rsi)
115 ; SSE-NEXT:    movd %xmm2, (%rdx)
116 ; SSE-NEXT:    movd %xmm4, (%rcx)
117 ; SSE-NEXT:    movd %xmm1, (%r8)
118 ; SSE-NEXT:    retq
120 ; AVX1-LABEL: load_i8_stride4_vf4:
121 ; AVX1:       # %bb.0:
122 ; AVX1-NEXT:    vmovdqa (%rdi), %xmm0
123 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
124 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm2 = xmm0[1,5,9,13,u,u,u,u,u,u,u,u,u,u,u,u]
125 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm3 = xmm0[2,6,10,14,u,u,u,u,u,u,u,u,u,u,u,u]
126 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,7,11,15,u,u,u,u,u,u,u,u,u,u,u,u]
127 ; AVX1-NEXT:    vmovd %xmm1, (%rsi)
128 ; AVX1-NEXT:    vmovd %xmm2, (%rdx)
129 ; AVX1-NEXT:    vmovd %xmm3, (%rcx)
130 ; AVX1-NEXT:    vmovd %xmm0, (%r8)
131 ; AVX1-NEXT:    retq
133 ; AVX512-LABEL: load_i8_stride4_vf4:
134 ; AVX512:       # %bb.0:
135 ; AVX512-NEXT:    vmovdqa (%rdi), %xmm0
136 ; AVX512-NEXT:    vpshufb {{.*#+}} xmm1 = xmm0[1,5,9,13,u,u,u,u,u,u,u,u,u,u,u,u]
137 ; AVX512-NEXT:    vpshufb {{.*#+}} xmm2 = xmm0[2,6,10,14,u,u,u,u,u,u,u,u,u,u,u,u]
138 ; AVX512-NEXT:    vpshufb {{.*#+}} xmm3 = xmm0[3,7,11,15,u,u,u,u,u,u,u,u,u,u,u,u]
139 ; AVX512-NEXT:    vpmovdb %xmm0, (%rsi)
140 ; AVX512-NEXT:    vmovd %xmm1, (%rdx)
141 ; AVX512-NEXT:    vmovd %xmm2, (%rcx)
142 ; AVX512-NEXT:    vmovd %xmm3, (%r8)
143 ; AVX512-NEXT:    retq
144   %wide.vec = load <16 x i8>, ptr %in.vec, align 64
145   %strided.vec0 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
146   %strided.vec1 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
147   %strided.vec2 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
148   %strided.vec3 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
149   store <4 x i8> %strided.vec0, ptr %out.vec0, align 64
150   store <4 x i8> %strided.vec1, ptr %out.vec1, align 64
151   store <4 x i8> %strided.vec2, ptr %out.vec2, align 64
152   store <4 x i8> %strided.vec3, ptr %out.vec3, align 64
153   ret void
156 define void @load_i8_stride4_vf8(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr %out.vec2, ptr %out.vec3) nounwind {
157 ; SSE-LABEL: load_i8_stride4_vf8:
158 ; SSE:       # %bb.0:
159 ; SSE-NEXT:    movdqa (%rdi), %xmm1
160 ; SSE-NEXT:    movdqa 16(%rdi), %xmm4
161 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,0,255,0,255,0,255,0]
162 ; SSE-NEXT:    movdqa %xmm4, %xmm2
163 ; SSE-NEXT:    pand %xmm0, %xmm2
164 ; SSE-NEXT:    pand %xmm1, %xmm0
165 ; SSE-NEXT:    packuswb %xmm2, %xmm0
166 ; SSE-NEXT:    packuswb %xmm0, %xmm0
167 ; SSE-NEXT:    pxor %xmm7, %xmm7
168 ; SSE-NEXT:    movdqa %xmm4, %xmm2
169 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm7[8],xmm2[9],xmm7[9],xmm2[10],xmm7[10],xmm2[11],xmm7[11],xmm2[12],xmm7[12],xmm2[13],xmm7[13],xmm2[14],xmm7[14],xmm2[15],xmm7[15]
170 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,2,2,3]
171 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm3[0,1,1,3,4,5,6,7]
172 ; SSE-NEXT:    movdqa %xmm4, %xmm3
173 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm7[0],xmm3[1],xmm7[1],xmm3[2],xmm7[2],xmm3[3],xmm7[3],xmm3[4],xmm7[4],xmm3[5],xmm7[5],xmm3[6],xmm7[6],xmm3[7],xmm7[7]
174 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,2,2,3]
175 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm6[0,1,1,3,4,5,6,7]
176 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm5[0],xmm8[1],xmm5[1]
177 ; SSE-NEXT:    movdqa %xmm1, %xmm5
178 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm7[8],xmm5[9],xmm7[9],xmm5[10],xmm7[10],xmm5[11],xmm7[11],xmm5[12],xmm7[12],xmm5[13],xmm7[13],xmm5[14],xmm7[14],xmm5[15],xmm7[15]
179 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,2,2,3]
180 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm6[1,3,2,3,4,5,6,7]
181 ; SSE-NEXT:    movdqa %xmm1, %xmm6
182 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1],xmm6[2],xmm7[2],xmm6[3],xmm7[3],xmm6[4],xmm7[4],xmm6[5],xmm7[5],xmm6[6],xmm7[6],xmm6[7],xmm7[7]
183 ; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,2,2,3]
184 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[1,3,2,3,4,5,6,7]
185 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm9[0],xmm7[1],xmm9[1]
186 ; SSE-NEXT:    packuswb %xmm8, %xmm7
187 ; SSE-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[0,3,2,3]
188 ; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,255,255,255,255,255,255,255]
189 ; SSE-NEXT:    pand %xmm8, %xmm4
190 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
191 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,5,6,7]
192 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,1,2,0]
193 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
194 ; SSE-NEXT:    pand %xmm8, %xmm1
195 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,1,2,3,4,5,6,7]
196 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]
197 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
198 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
199 ; SSE-NEXT:    packuswb %xmm4, %xmm1
200 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,3,2,3]
201 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[3,1,2,3]
202 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
203 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[3,1,2,3]
204 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,3,1,4,5,6,7]
205 ; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
206 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[3,1,2,3]
207 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
208 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[3,1,2,3]
209 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
210 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
211 ; SSE-NEXT:    packuswb %xmm3, %xmm4
212 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[0,3,2,3]
213 ; SSE-NEXT:    movq %xmm0, (%rsi)
214 ; SSE-NEXT:    movq %xmm7, (%rdx)
215 ; SSE-NEXT:    movq %xmm1, (%rcx)
216 ; SSE-NEXT:    movq %xmm2, (%r8)
217 ; SSE-NEXT:    retq
219 ; AVX1-ONLY-LABEL: load_i8_stride4_vf8:
220 ; AVX1-ONLY:       # %bb.0:
221 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm0 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
222 ; AVX1-ONLY-NEXT:    vmovdqa (%rdi), %xmm1
223 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm2
224 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm2, %xmm3
225 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm1, %xmm0
226 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
227 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm3 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
228 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm2, %xmm4
229 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm1, %xmm3
230 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
231 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm4 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
232 ; AVX1-ONLY-NEXT:    vpshufb %xmm4, %xmm2, %xmm5
233 ; AVX1-ONLY-NEXT:    vpshufb %xmm4, %xmm1, %xmm4
234 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
235 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm5 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
236 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
237 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
238 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
239 ; AVX1-ONLY-NEXT:    vmovq %xmm0, (%rsi)
240 ; AVX1-ONLY-NEXT:    vmovq %xmm3, (%rdx)
241 ; AVX1-ONLY-NEXT:    vmovq %xmm4, (%rcx)
242 ; AVX1-ONLY-NEXT:    vmovq %xmm1, (%r8)
243 ; AVX1-ONLY-NEXT:    retq
245 ; AVX2-ONLY-LABEL: load_i8_stride4_vf8:
246 ; AVX2-ONLY:       # %bb.0:
247 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm0 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
248 ; AVX2-ONLY-NEXT:    vmovdqa (%rdi), %xmm1
249 ; AVX2-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm2
250 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm2, %xmm3
251 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm1, %xmm0
252 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
253 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
254 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm2, %xmm4
255 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm1, %xmm3
256 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
257 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm4 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
258 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm2, %xmm5
259 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm1, %xmm4
260 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
261 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm5 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
262 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
263 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
264 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
265 ; AVX2-ONLY-NEXT:    vmovq %xmm0, (%rsi)
266 ; AVX2-ONLY-NEXT:    vmovq %xmm3, (%rdx)
267 ; AVX2-ONLY-NEXT:    vmovq %xmm4, (%rcx)
268 ; AVX2-ONLY-NEXT:    vmovq %xmm1, (%r8)
269 ; AVX2-ONLY-NEXT:    retq
271 ; AVX512-LABEL: load_i8_stride4_vf8:
272 ; AVX512:       # %bb.0:
273 ; AVX512-NEXT:    vmovdqa (%rdi), %ymm0
274 ; AVX512-NEXT:    vpsrld $8, %ymm0, %ymm1
275 ; AVX512-NEXT:    vpsrld $16, %ymm0, %ymm2
276 ; AVX512-NEXT:    vpsrld $24, %ymm0, %ymm3
277 ; AVX512-NEXT:    vpmovdb %ymm0, (%rsi)
278 ; AVX512-NEXT:    vpmovdb %ymm1, (%rdx)
279 ; AVX512-NEXT:    vpmovdb %ymm2, (%rcx)
280 ; AVX512-NEXT:    vpmovdb %ymm3, (%r8)
281 ; AVX512-NEXT:    vzeroupper
282 ; AVX512-NEXT:    retq
283   %wide.vec = load <32 x i8>, ptr %in.vec, align 64
284   %strided.vec0 = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <8 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28>
285   %strided.vec1 = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <8 x i32> <i32 1, i32 5, i32 9, i32 13, i32 17, i32 21, i32 25, i32 29>
286   %strided.vec2 = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <8 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30>
287   %strided.vec3 = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <8 x i32> <i32 3, i32 7, i32 11, i32 15, i32 19, i32 23, i32 27, i32 31>
288   store <8 x i8> %strided.vec0, ptr %out.vec0, align 64
289   store <8 x i8> %strided.vec1, ptr %out.vec1, align 64
290   store <8 x i8> %strided.vec2, ptr %out.vec2, align 64
291   store <8 x i8> %strided.vec3, ptr %out.vec3, align 64
292   ret void
295 define void @load_i8_stride4_vf16(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr %out.vec2, ptr %out.vec3) nounwind {
296 ; SSE-LABEL: load_i8_stride4_vf16:
297 ; SSE:       # %bb.0:
298 ; SSE-NEXT:    movdqa (%rdi), %xmm1
299 ; SSE-NEXT:    movdqa 16(%rdi), %xmm2
300 ; SSE-NEXT:    movdqa 32(%rdi), %xmm8
301 ; SSE-NEXT:    movdqa 48(%rdi), %xmm13
302 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,0,255,0,255,0,255,0]
303 ; SSE-NEXT:    movdqa %xmm13, %xmm3
304 ; SSE-NEXT:    pand %xmm0, %xmm3
305 ; SSE-NEXT:    movdqa %xmm8, %xmm4
306 ; SSE-NEXT:    pand %xmm0, %xmm4
307 ; SSE-NEXT:    packuswb %xmm3, %xmm4
308 ; SSE-NEXT:    movdqa %xmm2, %xmm3
309 ; SSE-NEXT:    pand %xmm0, %xmm3
310 ; SSE-NEXT:    pand %xmm1, %xmm0
311 ; SSE-NEXT:    packuswb %xmm3, %xmm0
312 ; SSE-NEXT:    packuswb %xmm4, %xmm0
313 ; SSE-NEXT:    pxor %xmm10, %xmm10
314 ; SSE-NEXT:    movdqa %xmm13, %xmm3
315 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm10[8],xmm3[9],xmm10[9],xmm3[10],xmm10[10],xmm3[11],xmm10[11],xmm3[12],xmm10[12],xmm3[13],xmm10[13],xmm3[14],xmm10[14],xmm3[15],xmm10[15]
316 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,2,2,3]
317 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm4[0,1,1,3,4,5,6,7]
318 ; SSE-NEXT:    movdqa %xmm13, %xmm4
319 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm10[0],xmm4[1],xmm10[1],xmm4[2],xmm10[2],xmm4[3],xmm10[3],xmm4[4],xmm10[4],xmm4[5],xmm10[5],xmm4[6],xmm10[6],xmm4[7],xmm10[7]
320 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,2,2,3]
321 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm6[0,1,1,3,4,5,6,7]
322 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm5[0],xmm7[1],xmm5[1]
323 ; SSE-NEXT:    movdqa %xmm8, %xmm5
324 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm10[8],xmm5[9],xmm10[9],xmm5[10],xmm10[10],xmm5[11],xmm10[11],xmm5[12],xmm10[12],xmm5[13],xmm10[13],xmm5[14],xmm10[14],xmm5[15],xmm10[15]
325 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,2,2,3]
326 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm6[1,3,2,3,4,5,6,7]
327 ; SSE-NEXT:    movdqa %xmm8, %xmm6
328 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm10[0],xmm6[1],xmm10[1],xmm6[2],xmm10[2],xmm6[3],xmm10[3],xmm6[4],xmm10[4],xmm6[5],xmm10[5],xmm6[6],xmm10[6],xmm6[7],xmm10[7]
329 ; SSE-NEXT:    pshufd {{.*#+}} xmm11 = xmm6[0,2,2,3]
330 ; SSE-NEXT:    pshuflw {{.*#+}} xmm14 = xmm11[1,3,2,3,4,5,6,7]
331 ; SSE-NEXT:    punpckldq {{.*#+}} xmm14 = xmm14[0],xmm9[0],xmm14[1],xmm9[1]
332 ; SSE-NEXT:    packuswb %xmm7, %xmm14
333 ; SSE-NEXT:    movdqa %xmm2, %xmm7
334 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm7 = xmm7[8],xmm10[8],xmm7[9],xmm10[9],xmm7[10],xmm10[10],xmm7[11],xmm10[11],xmm7[12],xmm10[12],xmm7[13],xmm10[13],xmm7[14],xmm10[14],xmm7[15],xmm10[15]
335 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,2,2,3]
336 ; SSE-NEXT:    pshuflw {{.*#+}} xmm11 = xmm9[0,1,1,3,4,5,6,7]
337 ; SSE-NEXT:    movdqa %xmm2, %xmm9
338 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1],xmm9[2],xmm10[2],xmm9[3],xmm10[3],xmm9[4],xmm10[4],xmm9[5],xmm10[5],xmm9[6],xmm10[6],xmm9[7],xmm10[7]
339 ; SSE-NEXT:    pshufd {{.*#+}} xmm12 = xmm9[0,2,2,3]
340 ; SSE-NEXT:    pshuflw {{.*#+}} xmm15 = xmm12[0,1,1,3,4,5,6,7]
341 ; SSE-NEXT:    punpckldq {{.*#+}} xmm15 = xmm15[0],xmm11[0],xmm15[1],xmm11[1]
342 ; SSE-NEXT:    movdqa %xmm1, %xmm12
343 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
344 ; SSE-NEXT:    movdqa %xmm1, %xmm11
345 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm11 = xmm11[8],xmm10[8],xmm11[9],xmm10[9],xmm11[10],xmm10[10],xmm11[11],xmm10[11],xmm11[12],xmm10[12],xmm11[13],xmm10[13],xmm11[14],xmm10[14],xmm11[15],xmm10[15]
346 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm12 = xmm12[0],xmm10[0],xmm12[1],xmm10[1],xmm12[2],xmm10[2],xmm12[3],xmm10[3],xmm12[4],xmm10[4],xmm12[5],xmm10[5],xmm12[6],xmm10[6],xmm12[7],xmm10[7]
347 ; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[0,2,2,3]
348 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm10[1,3,2,3,4,5,6,7]
349 ; SSE-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[0,2,2,3]
350 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm10[1,3,2,3,4,5,6,7]
351 ; SSE-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm1[0],xmm10[1],xmm1[1]
352 ; SSE-NEXT:    packuswb %xmm15, %xmm10
353 ; SSE-NEXT:    shufps {{.*#+}} xmm10 = xmm10[0,3],xmm14[0,3]
354 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255]
355 ; SSE-NEXT:    pand %xmm1, %xmm13
356 ; SSE-NEXT:    pshuflw {{.*#+}} xmm13 = xmm13[3,1,2,3,4,5,6,7]
357 ; SSE-NEXT:    pshufhw {{.*#+}} xmm13 = xmm13[0,1,2,3,7,5,6,7]
358 ; SSE-NEXT:    pshufd {{.*#+}} xmm13 = xmm13[0,1,2,0]
359 ; SSE-NEXT:    pshufhw {{.*#+}} xmm13 = xmm13[0,1,2,3,7,6,5,4]
360 ; SSE-NEXT:    pand %xmm1, %xmm8
361 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[3,1,2,3,4,5,6,7]
362 ; SSE-NEXT:    pshufhw {{.*#+}} xmm8 = xmm8[0,1,2,3,7,5,6,7]
363 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[0,2,2,3]
364 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[1,0,3,2,4,5,6,7]
365 ; SSE-NEXT:    packuswb %xmm13, %xmm8
366 ; SSE-NEXT:    pand %xmm1, %xmm2
367 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
368 ; SSE-NEXT:    pand %xmm1, %xmm13
369 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm2[3,1,2,3,4,5,6,7]
370 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]
371 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]
372 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm1[0,1,2,3,7,6,5,4]
373 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[3,1,2,3,4,5,6,7]
374 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]
375 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
376 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
377 ; SSE-NEXT:    packuswb %xmm2, %xmm1
378 ; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm8[0,3]
379 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[3,1,2,3]
380 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
381 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[3,1,2,3]
382 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,3,1,4,5,6,7]
383 ; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
384 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm5[3,1,2,3]
385 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
386 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[3,1,2,3]
387 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
388 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
389 ; SSE-NEXT:    packuswb %xmm3, %xmm4
390 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm7[3,1,2,3]
391 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
392 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm9[3,1,2,3]
393 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,1,3,1,4,5,6,7]
394 ; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
395 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm11[3,1,2,3]
396 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
397 ; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm12[3,1,2,3]
398 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[3,1,2,3,4,5,6,7]
399 ; SSE-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
400 ; SSE-NEXT:    packuswb %xmm3, %xmm5
401 ; SSE-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,3],xmm4[0,3]
402 ; SSE-NEXT:    movdqa %xmm0, (%rsi)
403 ; SSE-NEXT:    movaps %xmm10, (%rdx)
404 ; SSE-NEXT:    movaps %xmm1, (%rcx)
405 ; SSE-NEXT:    movaps %xmm5, (%r8)
406 ; SSE-NEXT:    retq
408 ; AVX1-ONLY-LABEL: load_i8_stride4_vf16:
409 ; AVX1-ONLY:       # %bb.0:
410 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm2 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
411 ; AVX1-ONLY-NEXT:    vmovdqa (%rdi), %xmm0
412 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm1
413 ; AVX1-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm3
414 ; AVX1-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm4
415 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm4, %xmm5
416 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
417 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
418 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm5 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
419 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm1, %xmm6
420 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm0, %xmm5
421 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1]
422 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm2 = xmm5[0,1,2,3],xmm2[4,5,6,7]
423 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm5 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
424 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm4, %xmm6
425 ; AVX1-ONLY-NEXT:    vpshufb %xmm5, %xmm3, %xmm5
426 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1]
427 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm6 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
428 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm1, %xmm7
429 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm0, %xmm6
430 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]
431 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm5 = xmm6[0,1,2,3],xmm5[4,5,6,7]
432 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm6 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
433 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm4, %xmm7
434 ; AVX1-ONLY-NEXT:    vpshufb %xmm6, %xmm3, %xmm6
435 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]
436 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm7 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
437 ; AVX1-ONLY-NEXT:    vpshufb %xmm7, %xmm1, %xmm8
438 ; AVX1-ONLY-NEXT:    vpshufb %xmm7, %xmm0, %xmm7
439 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm7 = xmm7[0],xmm8[0],xmm7[1],xmm8[1]
440 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm6 = xmm7[0,1,2,3],xmm6[4,5,6,7]
441 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm7 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
442 ; AVX1-ONLY-NEXT:    vpshufb %xmm7, %xmm4, %xmm4
443 ; AVX1-ONLY-NEXT:    vpshufb %xmm7, %xmm3, %xmm3
444 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
445 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm4 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
446 ; AVX1-ONLY-NEXT:    vpshufb %xmm4, %xmm1, %xmm1
447 ; AVX1-ONLY-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
448 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
449 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7]
450 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, (%rsi)
451 ; AVX1-ONLY-NEXT:    vmovdqa %xmm5, (%rdx)
452 ; AVX1-ONLY-NEXT:    vmovdqa %xmm6, (%rcx)
453 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, (%r8)
454 ; AVX1-ONLY-NEXT:    retq
456 ; AVX2-ONLY-LABEL: load_i8_stride4_vf16:
457 ; AVX2-ONLY:       # %bb.0:
458 ; AVX2-ONLY-NEXT:    vmovdqa (%rdi), %xmm0
459 ; AVX2-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm1
460 ; AVX2-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm2
461 ; AVX2-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm3
462 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm4 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
463 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm3, %xmm5
464 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm2, %xmm4
465 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
466 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm5 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
467 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm1, %xmm6
468 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm0, %xmm5
469 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1]
470 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm4 = xmm5[0,1],xmm4[2,3]
471 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm5 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
472 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm3, %xmm6
473 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm2, %xmm5
474 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm5[0],xmm6[0],xmm5[1],xmm6[1]
475 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm6 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
476 ; AVX2-ONLY-NEXT:    vpshufb %xmm6, %xmm1, %xmm7
477 ; AVX2-ONLY-NEXT:    vpshufb %xmm6, %xmm0, %xmm6
478 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]
479 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm5 = xmm6[0,1],xmm5[2,3]
480 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm6 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
481 ; AVX2-ONLY-NEXT:    vpshufb %xmm6, %xmm3, %xmm7
482 ; AVX2-ONLY-NEXT:    vpshufb %xmm6, %xmm2, %xmm6
483 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]
484 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm7 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
485 ; AVX2-ONLY-NEXT:    vpshufb %xmm7, %xmm1, %xmm8
486 ; AVX2-ONLY-NEXT:    vpshufb %xmm7, %xmm0, %xmm7
487 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm7 = xmm7[0],xmm8[0],xmm7[1],xmm8[1]
488 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm6 = xmm7[0,1],xmm6[2,3]
489 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm7 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
490 ; AVX2-ONLY-NEXT:    vpshufb %xmm7, %xmm3, %xmm3
491 ; AVX2-ONLY-NEXT:    vpshufb %xmm7, %xmm2, %xmm2
492 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
493 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
494 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
495 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
496 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
497 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3]
498 ; AVX2-ONLY-NEXT:    vmovdqa %xmm4, (%rsi)
499 ; AVX2-ONLY-NEXT:    vmovdqa %xmm5, (%rdx)
500 ; AVX2-ONLY-NEXT:    vmovdqa %xmm6, (%rcx)
501 ; AVX2-ONLY-NEXT:    vmovdqa %xmm0, (%r8)
502 ; AVX2-ONLY-NEXT:    retq
504 ; AVX512-LABEL: load_i8_stride4_vf16:
505 ; AVX512:       # %bb.0:
506 ; AVX512-NEXT:    vmovdqa64 (%rdi), %zmm0
507 ; AVX512-NEXT:    vpsrld $8, %zmm0, %zmm1
508 ; AVX512-NEXT:    vpsrld $16, %zmm0, %zmm2
509 ; AVX512-NEXT:    vpsrld $24, %zmm0, %zmm3
510 ; AVX512-NEXT:    vpmovdb %zmm0, (%rsi)
511 ; AVX512-NEXT:    vpmovdb %zmm1, (%rdx)
512 ; AVX512-NEXT:    vpmovdb %zmm2, (%rcx)
513 ; AVX512-NEXT:    vpmovdb %zmm3, (%r8)
514 ; AVX512-NEXT:    vzeroupper
515 ; AVX512-NEXT:    retq
516   %wide.vec = load <64 x i8>, ptr %in.vec, align 64
517   %strided.vec0 = shufflevector <64 x i8> %wide.vec, <64 x i8> poison, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 32, i32 36, i32 40, i32 44, i32 48, i32 52, i32 56, i32 60>
518   %strided.vec1 = shufflevector <64 x i8> %wide.vec, <64 x i8> poison, <16 x i32> <i32 1, i32 5, i32 9, i32 13, i32 17, i32 21, i32 25, i32 29, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61>
519   %strided.vec2 = shufflevector <64 x i8> %wide.vec, <64 x i8> poison, <16 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 34, i32 38, i32 42, i32 46, i32 50, i32 54, i32 58, i32 62>
520   %strided.vec3 = shufflevector <64 x i8> %wide.vec, <64 x i8> poison, <16 x i32> <i32 3, i32 7, i32 11, i32 15, i32 19, i32 23, i32 27, i32 31, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63>
521   store <16 x i8> %strided.vec0, ptr %out.vec0, align 64
522   store <16 x i8> %strided.vec1, ptr %out.vec1, align 64
523   store <16 x i8> %strided.vec2, ptr %out.vec2, align 64
524   store <16 x i8> %strided.vec3, ptr %out.vec3, align 64
525   ret void
528 define void @load_i8_stride4_vf32(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr %out.vec2, ptr %out.vec3) nounwind {
529 ; SSE-LABEL: load_i8_stride4_vf32:
530 ; SSE:       # %bb.0:
531 ; SSE-NEXT:    subq $136, %rsp
532 ; SSE-NEXT:    movdqa 64(%rdi), %xmm4
533 ; SSE-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
534 ; SSE-NEXT:    movdqa 80(%rdi), %xmm5
535 ; SSE-NEXT:    movdqa 96(%rdi), %xmm15
536 ; SSE-NEXT:    movdqa 112(%rdi), %xmm14
537 ; SSE-NEXT:    movdqa (%rdi), %xmm12
538 ; SSE-NEXT:    movdqa 16(%rdi), %xmm11
539 ; SSE-NEXT:    movdqa 32(%rdi), %xmm7
540 ; SSE-NEXT:    movdqa 48(%rdi), %xmm3
541 ; SSE-NEXT:    movdqa {{.*#+}} xmm6 = [255,0,255,0,255,0,255,0]
542 ; SSE-NEXT:    movdqa %xmm3, %xmm0
543 ; SSE-NEXT:    pand %xmm6, %xmm0
544 ; SSE-NEXT:    movdqa %xmm7, %xmm1
545 ; SSE-NEXT:    pand %xmm6, %xmm1
546 ; SSE-NEXT:    packuswb %xmm0, %xmm1
547 ; SSE-NEXT:    movdqa %xmm11, %xmm0
548 ; SSE-NEXT:    pand %xmm6, %xmm0
549 ; SSE-NEXT:    movdqa %xmm12, %xmm2
550 ; SSE-NEXT:    pand %xmm6, %xmm2
551 ; SSE-NEXT:    packuswb %xmm0, %xmm2
552 ; SSE-NEXT:    packuswb %xmm1, %xmm2
553 ; SSE-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
554 ; SSE-NEXT:    movdqa %xmm14, %xmm0
555 ; SSE-NEXT:    pand %xmm6, %xmm0
556 ; SSE-NEXT:    movdqa %xmm15, %xmm1
557 ; SSE-NEXT:    pand %xmm6, %xmm1
558 ; SSE-NEXT:    packuswb %xmm0, %xmm1
559 ; SSE-NEXT:    movdqa %xmm5, %xmm0
560 ; SSE-NEXT:    movdqa %xmm5, %xmm2
561 ; SSE-NEXT:    pand %xmm6, %xmm0
562 ; SSE-NEXT:    pand %xmm4, %xmm6
563 ; SSE-NEXT:    packuswb %xmm0, %xmm6
564 ; SSE-NEXT:    packuswb %xmm1, %xmm6
565 ; SSE-NEXT:    pxor %xmm4, %xmm4
566 ; SSE-NEXT:    movdqa %xmm3, %xmm0
567 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
568 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
569 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
570 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
571 ; SSE-NEXT:    movdqa %xmm3, %xmm1
572 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
573 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
574 ; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
575 ; SSE-NEXT:    pshuflw {{.*#+}} xmm5 = xmm5[0,1,1,3,4,5,6,7]
576 ; SSE-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1]
577 ; SSE-NEXT:    movdqa %xmm7, %xmm0
578 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
579 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
580 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
581 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
582 ; SSE-NEXT:    movdqa %xmm7, %xmm1
583 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
584 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
585 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm1[0,2,2,3]
586 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[1,3,2,3,4,5,6,7]
587 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm0[0],xmm8[1],xmm0[1]
588 ; SSE-NEXT:    packuswb %xmm5, %xmm8
589 ; SSE-NEXT:    movdqa %xmm11, %xmm0
590 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
591 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
592 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
593 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
594 ; SSE-NEXT:    movdqa %xmm11, %xmm1
595 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
596 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
597 ; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
598 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm5[0,1,1,3,4,5,6,7]
599 ; SSE-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm0[0],xmm9[1],xmm0[1]
600 ; SSE-NEXT:    movdqa %xmm12, %xmm0
601 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
602 ; SSE-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
603 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
604 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
605 ; SSE-NEXT:    movdqa %xmm12, %xmm1
606 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
607 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
608 ; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,2,2,3]
609 ; SSE-NEXT:    pshuflw {{.*#+}} xmm13 = xmm5[1,3,2,3,4,5,6,7]
610 ; SSE-NEXT:    punpckldq {{.*#+}} xmm13 = xmm13[0],xmm0[0],xmm13[1],xmm0[1]
611 ; SSE-NEXT:    packuswb %xmm9, %xmm13
612 ; SSE-NEXT:    shufps {{.*#+}} xmm13 = xmm13[0,3],xmm8[0,3]
613 ; SSE-NEXT:    movdqa %xmm14, %xmm0
614 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
615 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
616 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
617 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
618 ; SSE-NEXT:    movdqa %xmm14, %xmm1
619 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
620 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
621 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm1[0,2,2,3]
622 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[0,1,1,3,4,5,6,7]
623 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm0[0],xmm8[1],xmm0[1]
624 ; SSE-NEXT:    movdqa %xmm15, %xmm0
625 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
626 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
627 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
628 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm0[1,3,2,3,4,5,6,7]
629 ; SSE-NEXT:    movdqa %xmm15, %xmm0
630 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
631 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
632 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,2,2,3]
633 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm9[1,3,2,3,4,5,6,7]
634 ; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm10[0],xmm0[1],xmm10[1]
635 ; SSE-NEXT:    packuswb %xmm8, %xmm0
636 ; SSE-NEXT:    movdqa %xmm2, %xmm1
637 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm4[8],xmm1[9],xmm4[9],xmm1[10],xmm4[10],xmm1[11],xmm4[11],xmm1[12],xmm4[12],xmm1[13],xmm4[13],xmm1[14],xmm4[14],xmm1[15],xmm4[15]
638 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
639 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm1[0,2,2,3]
640 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[0,1,1,3,4,5,6,7]
641 ; SSE-NEXT:    movdqa %xmm2, %xmm1
642 ; SSE-NEXT:    movdqa %xmm2, %xmm10
643 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
644 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
645 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm1[0,2,2,3]
646 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm9[0,1,1,3,4,5,6,7]
647 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm8[0],xmm1[1],xmm8[1]
648 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
649 ; SSE-NEXT:    movdqa %xmm5, %xmm9
650 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm9 = xmm9[8],xmm4[8],xmm9[9],xmm4[9],xmm9[10],xmm4[10],xmm9[11],xmm4[11],xmm9[12],xmm4[12],xmm9[13],xmm4[13],xmm9[14],xmm4[14],xmm9[15],xmm4[15]
651 ; SSE-NEXT:    movdqa %xmm5, %xmm8
652 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm8 = xmm8[0],xmm4[0],xmm8[1],xmm4[1],xmm8[2],xmm4[2],xmm8[3],xmm4[3],xmm8[4],xmm4[4],xmm8[5],xmm4[5],xmm8[6],xmm4[6],xmm8[7],xmm4[7]
653 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[0,2,2,3]
654 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm4[1,3,2,3,4,5,6,7]
655 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[0,2,2,3]
656 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,3,2,3,4,5,6,7]
657 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
658 ; SSE-NEXT:    packuswb %xmm1, %xmm4
659 ; SSE-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,3],xmm0[0,3]
660 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]
661 ; SSE-NEXT:    pand %xmm0, %xmm3
662 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm3[3,1,2,3,4,5,6,7]
663 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]
664 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]
665 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
666 ; SSE-NEXT:    pand %xmm0, %xmm7
667 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm7[3,1,2,3,4,5,6,7]
668 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
669 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
670 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]
671 ; SSE-NEXT:    packuswb %xmm1, %xmm2
672 ; SSE-NEXT:    pand %xmm0, %xmm11
673 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm11[3,1,2,3,4,5,6,7]
674 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]
675 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,1,2,0]
676 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm1[0,1,2,3,7,6,5,4]
677 ; SSE-NEXT:    pand %xmm0, %xmm12
678 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm12[3,1,2,3,4,5,6,7]
679 ; SSE-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,5,6,7]
680 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
681 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
682 ; SSE-NEXT:    packuswb %xmm3, %xmm1
683 ; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm2[0,3]
684 ; SSE-NEXT:    pand %xmm0, %xmm14
685 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm14[3,1,2,3,4,5,6,7]
686 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
687 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,1,2,0]
688 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
689 ; SSE-NEXT:    pand %xmm0, %xmm15
690 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm15[3,1,2,3,4,5,6,7]
691 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,6,7]
692 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
693 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm3[1,0,3,2,4,5,6,7]
694 ; SSE-NEXT:    packuswb %xmm2, %xmm7
695 ; SSE-NEXT:    pand %xmm0, %xmm10
696 ; SSE-NEXT:    pand %xmm0, %xmm5
697 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm10[3,1,2,3,4,5,6,7]
698 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,7]
699 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]
700 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
701 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm5[3,1,2,3,4,5,6,7]
702 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
703 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
704 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm2[1,0,3,2,4,5,6,7]
705 ; SSE-NEXT:    packuswb %xmm0, %xmm3
706 ; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm7[0,3]
707 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
708 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
709 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,1,4,5,6,7]
710 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
711 ; SSE-NEXT:    # xmm2 = mem[3,1,2,3]
712 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
713 ; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
714 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
715 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
716 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
717 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
718 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
719 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[3,1,2,3,4,5,6,7]
720 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm0[0],xmm7[1],xmm0[1]
721 ; SSE-NEXT:    packuswb %xmm2, %xmm7
722 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
723 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
724 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,1,4,5,6,7]
725 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
726 ; SSE-NEXT:    # xmm2 = mem[3,1,2,3]
727 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
728 ; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
729 ; SSE-NEXT:    pshufd $231, (%rsp), %xmm0 # 16-byte Folded Reload
730 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
731 ; SSE-NEXT:    pshuflw {{.*#+}} xmm11 = xmm0[3,1,2,3,4,5,6,7]
732 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
733 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
734 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
735 ; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm11[0],xmm0[1],xmm11[1]
736 ; SSE-NEXT:    packuswb %xmm2, %xmm0
737 ; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm7[0,3]
738 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
739 ; SSE-NEXT:    # xmm2 = mem[3,1,2,3]
740 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
741 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
742 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
743 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[0,1,3,1,4,5,6,7]
744 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm2[0],xmm7[1],xmm2[1]
745 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
746 ; SSE-NEXT:    # xmm2 = mem[3,1,2,3]
747 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
748 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Folded Reload
749 ; SSE-NEXT:    # xmm11 = mem[3,1,2,3]
750 ; SSE-NEXT:    pshuflw {{.*#+}} xmm11 = xmm11[3,1,2,3,4,5,6,7]
751 ; SSE-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm2[0],xmm11[1],xmm2[1]
752 ; SSE-NEXT:    packuswb %xmm7, %xmm11
753 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Folded Reload
754 ; SSE-NEXT:    # xmm2 = mem[3,1,2,3]
755 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[0,1,3,1,4,5,6,7]
756 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
757 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
758 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[0,1,3,1,4,5,6,7]
759 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm2[0],xmm7[1],xmm2[1]
760 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm9[3,1,2,3]
761 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
762 ; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm8[3,1,2,3]
763 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[3,1,2,3,4,5,6,7]
764 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm2[0],xmm8[1],xmm2[1]
765 ; SSE-NEXT:    packuswb %xmm7, %xmm8
766 ; SSE-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,3],xmm11[0,3]
767 ; SSE-NEXT:    movdqa %xmm6, 16(%rsi)
768 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
769 ; SSE-NEXT:    movaps %xmm2, (%rsi)
770 ; SSE-NEXT:    movaps %xmm4, 16(%rdx)
771 ; SSE-NEXT:    movaps %xmm13, (%rdx)
772 ; SSE-NEXT:    movaps %xmm3, 16(%rcx)
773 ; SSE-NEXT:    movaps %xmm1, (%rcx)
774 ; SSE-NEXT:    movaps %xmm8, 16(%r8)
775 ; SSE-NEXT:    movaps %xmm0, (%r8)
776 ; SSE-NEXT:    addq $136, %rsp
777 ; SSE-NEXT:    retq
779 ; AVX1-ONLY-LABEL: load_i8_stride4_vf32:
780 ; AVX1-ONLY:       # %bb.0:
781 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm8 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
782 ; AVX1-ONLY-NEXT:    vmovdqa 112(%rdi), %xmm0
783 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm0, %xmm1
784 ; AVX1-ONLY-NEXT:    vmovdqa 96(%rdi), %xmm2
785 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm2, %xmm3
786 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
787 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm9 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
788 ; AVX1-ONLY-NEXT:    vmovdqa 80(%rdi), %xmm3
789 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm3, %xmm4
790 ; AVX1-ONLY-NEXT:    vmovdqa 64(%rdi), %xmm5
791 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm5, %xmm6
792 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm6[0],xmm4[0],xmm6[1],xmm4[1]
793 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm4[0,1,2,3],xmm1[4,5,6,7]
794 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm10
795 ; AVX1-ONLY-NEXT:    vmovdqa (%rdi), %xmm1
796 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm4
797 ; AVX1-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm6
798 ; AVX1-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm7
799 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm7, %xmm11
800 ; AVX1-ONLY-NEXT:    vpshufb %xmm8, %xmm6, %xmm8
801 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm8 = xmm8[0],xmm11[0],xmm8[1],xmm11[1]
802 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm4, %xmm11
803 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm1, %xmm9
804 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm9 = xmm9[0],xmm11[0],xmm9[1],xmm11[1]
805 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm8 = xmm9[0,1,2,3],xmm8[4,5,6,7]
806 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm8 = ymm8[0,1,2,3],ymm10[4,5,6,7]
807 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm9 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
808 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm0, %xmm10
809 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm2, %xmm11
810 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm10 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
811 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm11 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
812 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm3, %xmm12
813 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm5, %xmm13
814 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm12 = xmm13[0],xmm12[0],xmm13[1],xmm12[1]
815 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm10 = xmm12[0,1,2,3],xmm10[4,5,6,7]
816 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm10, %ymm0, %ymm10
817 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm7, %xmm12
818 ; AVX1-ONLY-NEXT:    vpshufb %xmm9, %xmm6, %xmm9
819 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm9 = xmm9[0],xmm12[0],xmm9[1],xmm12[1]
820 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm4, %xmm12
821 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm1, %xmm11
822 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm11 = xmm11[0],xmm12[0],xmm11[1],xmm12[1]
823 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm9 = xmm11[0,1,2,3],xmm9[4,5,6,7]
824 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm9 = ymm9[0,1,2,3],ymm10[4,5,6,7]
825 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm10 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
826 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm0, %xmm11
827 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm2, %xmm12
828 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm11 = xmm12[0],xmm11[0],xmm12[1],xmm11[1]
829 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm12 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
830 ; AVX1-ONLY-NEXT:    vpshufb %xmm12, %xmm3, %xmm13
831 ; AVX1-ONLY-NEXT:    vpshufb %xmm12, %xmm5, %xmm14
832 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm13 = xmm14[0],xmm13[0],xmm14[1],xmm13[1]
833 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm11 = xmm13[0,1,2,3],xmm11[4,5,6,7]
834 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm11, %ymm0, %ymm11
835 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm7, %xmm13
836 ; AVX1-ONLY-NEXT:    vpshufb %xmm10, %xmm6, %xmm10
837 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm10 = xmm10[0],xmm13[0],xmm10[1],xmm13[1]
838 ; AVX1-ONLY-NEXT:    vpshufb %xmm12, %xmm4, %xmm13
839 ; AVX1-ONLY-NEXT:    vpshufb %xmm12, %xmm1, %xmm12
840 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm12 = xmm12[0],xmm13[0],xmm12[1],xmm13[1]
841 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm10 = xmm12[0,1,2,3],xmm10[4,5,6,7]
842 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm10 = ymm10[0,1,2,3],ymm11[4,5,6,7]
843 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm11 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
844 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm0, %xmm0
845 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm2, %xmm2
846 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
847 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
848 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm3, %xmm3
849 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm5, %xmm5
850 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
851 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]
852 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
853 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm7, %xmm3
854 ; AVX1-ONLY-NEXT:    vpshufb %xmm11, %xmm6, %xmm5
855 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
856 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm4, %xmm4
857 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
858 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
859 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]
860 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
861 ; AVX1-ONLY-NEXT:    vmovaps %ymm8, (%rsi)
862 ; AVX1-ONLY-NEXT:    vmovaps %ymm9, (%rdx)
863 ; AVX1-ONLY-NEXT:    vmovaps %ymm10, (%rcx)
864 ; AVX1-ONLY-NEXT:    vmovaps %ymm0, (%r8)
865 ; AVX1-ONLY-NEXT:    vzeroupper
866 ; AVX1-ONLY-NEXT:    retq
868 ; AVX2-ONLY-LABEL: load_i8_stride4_vf32:
869 ; AVX2-ONLY:       # %bb.0:
870 ; AVX2-ONLY-NEXT:    vmovdqa 64(%rdi), %ymm0
871 ; AVX2-ONLY-NEXT:    vmovdqa 96(%rdi), %ymm1
872 ; AVX2-ONLY-NEXT:    vmovdqa (%rdi), %xmm2
873 ; AVX2-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm3
874 ; AVX2-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm4
875 ; AVX2-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm5
876 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm6 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
877 ; AVX2-ONLY-NEXT:    vpshufb %xmm6, %xmm5, %xmm7
878 ; AVX2-ONLY-NEXT:    vpshufb %xmm6, %xmm4, %xmm6
879 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]
880 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm7 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
881 ; AVX2-ONLY-NEXT:    vpshufb %xmm7, %xmm3, %xmm8
882 ; AVX2-ONLY-NEXT:    vpshufb %xmm7, %xmm2, %xmm7
883 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm7 = xmm7[0],xmm8[0],xmm7[1],xmm8[1]
884 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm7 = xmm7[0,1],xmm6[2,3]
885 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm8 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
886 ; AVX2-ONLY-NEXT:    vpshufb %ymm8, %ymm1, %ymm9
887 ; AVX2-ONLY-NEXT:    vpbroadcastq {{.*#+}} ymm6 = [0,4,0,4,0,4,0,4]
888 ; AVX2-ONLY-NEXT:    vpermd %ymm9, %ymm6, %ymm9
889 ; AVX2-ONLY-NEXT:    vpshufb %ymm8, %ymm0, %ymm8
890 ; AVX2-ONLY-NEXT:    vpermd %ymm8, %ymm6, %ymm8
891 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm8 = ymm8[0,1,2,3,4,5],ymm9[6,7]
892 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm7 = ymm7[0,1,2,3],ymm8[4,5,6,7]
893 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm8 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
894 ; AVX2-ONLY-NEXT:    vpshufb %xmm8, %xmm5, %xmm9
895 ; AVX2-ONLY-NEXT:    vpshufb %xmm8, %xmm4, %xmm8
896 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm8 = xmm8[0],xmm9[0],xmm8[1],xmm9[1]
897 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm9 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
898 ; AVX2-ONLY-NEXT:    vpshufb %xmm9, %xmm3, %xmm10
899 ; AVX2-ONLY-NEXT:    vpshufb %xmm9, %xmm2, %xmm9
900 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
901 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm8 = xmm9[0,1],xmm8[2,3]
902 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm9 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
903 ; AVX2-ONLY-NEXT:    vpshufb %ymm9, %ymm1, %ymm10
904 ; AVX2-ONLY-NEXT:    vpermd %ymm10, %ymm6, %ymm10
905 ; AVX2-ONLY-NEXT:    vpshufb %ymm9, %ymm0, %ymm9
906 ; AVX2-ONLY-NEXT:    vpermd %ymm9, %ymm6, %ymm9
907 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm9 = ymm9[0,1,2,3,4,5],ymm10[6,7]
908 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm8 = ymm8[0,1,2,3],ymm9[4,5,6,7]
909 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm9 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
910 ; AVX2-ONLY-NEXT:    vpshufb %xmm9, %xmm5, %xmm10
911 ; AVX2-ONLY-NEXT:    vpshufb %xmm9, %xmm4, %xmm9
912 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm9 = xmm9[0],xmm10[0],xmm9[1],xmm10[1]
913 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm10 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
914 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm3, %xmm11
915 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm2, %xmm10
916 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm10 = xmm10[0],xmm11[0],xmm10[1],xmm11[1]
917 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm9 = xmm10[0,1],xmm9[2,3]
918 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm10 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
919 ; AVX2-ONLY-NEXT:    vpshufb %ymm10, %ymm1, %ymm11
920 ; AVX2-ONLY-NEXT:    vpermd %ymm11, %ymm6, %ymm11
921 ; AVX2-ONLY-NEXT:    vpshufb %ymm10, %ymm0, %ymm10
922 ; AVX2-ONLY-NEXT:    vpermd %ymm10, %ymm6, %ymm10
923 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm10 = ymm10[0,1,2,3,4,5],ymm11[6,7]
924 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm9 = ymm9[0,1,2,3],ymm10[4,5,6,7]
925 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm10 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
926 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm5, %xmm5
927 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm4, %xmm4
928 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
929 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm5 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
930 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm3, %xmm3
931 ; AVX2-ONLY-NEXT:    vpshufb %xmm5, %xmm2, %xmm2
932 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
933 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3]
934 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm3 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
935 ; AVX2-ONLY-NEXT:    vpshufb %ymm3, %ymm1, %ymm1
936 ; AVX2-ONLY-NEXT:    vpermd %ymm1, %ymm6, %ymm1
937 ; AVX2-ONLY-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
938 ; AVX2-ONLY-NEXT:    vpermd %ymm0, %ymm6, %ymm0
939 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
940 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
941 ; AVX2-ONLY-NEXT:    vmovdqa %ymm7, (%rsi)
942 ; AVX2-ONLY-NEXT:    vmovdqa %ymm8, (%rdx)
943 ; AVX2-ONLY-NEXT:    vmovdqa %ymm9, (%rcx)
944 ; AVX2-ONLY-NEXT:    vmovdqa %ymm0, (%r8)
945 ; AVX2-ONLY-NEXT:    vzeroupper
946 ; AVX2-ONLY-NEXT:    retq
948 ; AVX512F-LABEL: load_i8_stride4_vf32:
949 ; AVX512F:       # %bb.0:
950 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm0 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
951 ; AVX512F-NEXT:    vmovdqa 96(%rdi), %ymm1
952 ; AVX512F-NEXT:    vpshufb %ymm0, %ymm1, %ymm2
953 ; AVX512F-NEXT:    vmovdqa 64(%rdi), %ymm3
954 ; AVX512F-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
955 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,4,0,4,0,4,8,12]
956 ; AVX512F-NEXT:    vpermt2d %ymm2, %ymm4, %ymm0
957 ; AVX512F-NEXT:    vmovdqa64 (%rdi), %zmm2
958 ; AVX512F-NEXT:    vpmovdb %zmm2, %xmm5
959 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm0 = ymm5[0,1,2,3],ymm0[4,5,6,7]
960 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
961 ; AVX512F-NEXT:    vpshufb %ymm5, %ymm1, %ymm6
962 ; AVX512F-NEXT:    vpshufb %ymm5, %ymm3, %ymm5
963 ; AVX512F-NEXT:    vpermt2d %ymm6, %ymm4, %ymm5
964 ; AVX512F-NEXT:    vpsrld $8, %zmm2, %zmm6
965 ; AVX512F-NEXT:    vpmovdb %zmm6, %xmm6
966 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm5 = ymm6[0,1,2,3],ymm5[4,5,6,7]
967 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm6 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
968 ; AVX512F-NEXT:    vpshufb %ymm6, %ymm1, %ymm7
969 ; AVX512F-NEXT:    vpshufb %ymm6, %ymm3, %ymm6
970 ; AVX512F-NEXT:    vpermt2d %ymm7, %ymm4, %ymm6
971 ; AVX512F-NEXT:    vpsrld $16, %zmm2, %zmm7
972 ; AVX512F-NEXT:    vpmovdb %zmm7, %xmm7
973 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm6 = ymm7[0,1,2,3],ymm6[4,5,6,7]
974 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm7 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
975 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm1, %ymm1
976 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm3, %ymm3
977 ; AVX512F-NEXT:    vpermt2d %ymm1, %ymm4, %ymm3
978 ; AVX512F-NEXT:    vpsrld $24, %zmm2, %zmm1
979 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
980 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm3[4,5,6,7]
981 ; AVX512F-NEXT:    vmovdqa %ymm0, (%rsi)
982 ; AVX512F-NEXT:    vmovdqa %ymm5, (%rdx)
983 ; AVX512F-NEXT:    vmovdqa %ymm6, (%rcx)
984 ; AVX512F-NEXT:    vmovdqa %ymm1, (%r8)
985 ; AVX512F-NEXT:    vzeroupper
986 ; AVX512F-NEXT:    retq
988 ; AVX512BW-LABEL: load_i8_stride4_vf32:
989 ; AVX512BW:       # %bb.0:
990 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} ymm0 = [0,4,8,12,1,5,9,13]
991 ; AVX512BW-NEXT:    vmovdqa64 (%rdi), %zmm1
992 ; AVX512BW-NEXT:    vmovdqa64 64(%rdi), %zmm2
993 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm3 = zero,zero,zero,zero,zmm2[0,4,8,12,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[16,20,24,28,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[32,36,40,44,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[48,52,56,60,u,u,u,u,u,u,u,u]
994 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm4 = zmm1[0,4,8,12],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,16,20,24,28],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,32,36,40,44],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,48,52,56,60],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u]
995 ; AVX512BW-NEXT:    vporq %zmm3, %zmm4, %zmm3
996 ; AVX512BW-NEXT:    vpermd %zmm3, %zmm0, %zmm3
997 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm4 = zero,zero,zero,zero,zmm2[1,5,9,13,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[17,21,25,29,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[33,37,41,45,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[49,53,57,61,u,u,u,u,u,u,u,u]
998 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm5 = zmm1[1,5,9,13],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,17,21,25,29],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,33,37,41,45],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,49,53,57,61],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u]
999 ; AVX512BW-NEXT:    vporq %zmm4, %zmm5, %zmm4
1000 ; AVX512BW-NEXT:    vpermd %zmm4, %zmm0, %zmm4
1001 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm5 = zero,zero,zero,zero,zmm2[2,6,10,14,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[18,22,26,30,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[34,38,42,46,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[50,54,58,62,u,u,u,u,u,u,u,u]
1002 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm6 = zmm1[2,6,10,14],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,18,22,26,30],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,34,38,42,46],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,50,54,58,62],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u]
1003 ; AVX512BW-NEXT:    vporq %zmm5, %zmm6, %zmm5
1004 ; AVX512BW-NEXT:    vpermd %zmm5, %zmm0, %zmm5
1005 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm2 = zero,zero,zero,zero,zmm2[3,7,11,15,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[19,23,27,31,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[35,39,43,47,u,u,u,u,u,u,u,u],zero,zero,zero,zero,zmm2[51,55,59,63,u,u,u,u,u,u,u,u]
1006 ; AVX512BW-NEXT:    vpshufb {{.*#+}} zmm1 = zmm1[3,7,11,15],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,19,23,27,31],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,35,39,43,47],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u,51,55,59,63],zero,zero,zero,zero,zmm1[u,u,u,u,u,u,u,u]
1007 ; AVX512BW-NEXT:    vporq %zmm2, %zmm1, %zmm1
1008 ; AVX512BW-NEXT:    vpermd %zmm1, %zmm0, %zmm0
1009 ; AVX512BW-NEXT:    vmovdqa %ymm3, (%rsi)
1010 ; AVX512BW-NEXT:    vmovdqa %ymm4, (%rdx)
1011 ; AVX512BW-NEXT:    vmovdqa %ymm5, (%rcx)
1012 ; AVX512BW-NEXT:    vmovdqa %ymm0, (%r8)
1013 ; AVX512BW-NEXT:    vzeroupper
1014 ; AVX512BW-NEXT:    retq
1015   %wide.vec = load <128 x i8>, ptr %in.vec, align 64
1016   %strided.vec0 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <32 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 32, i32 36, i32 40, i32 44, i32 48, i32 52, i32 56, i32 60, i32 64, i32 68, i32 72, i32 76, i32 80, i32 84, i32 88, i32 92, i32 96, i32 100, i32 104, i32 108, i32 112, i32 116, i32 120, i32 124>
1017   %strided.vec1 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <32 x i32> <i32 1, i32 5, i32 9, i32 13, i32 17, i32 21, i32 25, i32 29, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61, i32 65, i32 69, i32 73, i32 77, i32 81, i32 85, i32 89, i32 93, i32 97, i32 101, i32 105, i32 109, i32 113, i32 117, i32 121, i32 125>
1018   %strided.vec2 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <32 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 34, i32 38, i32 42, i32 46, i32 50, i32 54, i32 58, i32 62, i32 66, i32 70, i32 74, i32 78, i32 82, i32 86, i32 90, i32 94, i32 98, i32 102, i32 106, i32 110, i32 114, i32 118, i32 122, i32 126>
1019   %strided.vec3 = shufflevector <128 x i8> %wide.vec, <128 x i8> poison, <32 x i32> <i32 3, i32 7, i32 11, i32 15, i32 19, i32 23, i32 27, i32 31, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63, i32 67, i32 71, i32 75, i32 79, i32 83, i32 87, i32 91, i32 95, i32 99, i32 103, i32 107, i32 111, i32 115, i32 119, i32 123, i32 127>
1020   store <32 x i8> %strided.vec0, ptr %out.vec0, align 64
1021   store <32 x i8> %strided.vec1, ptr %out.vec1, align 64
1022   store <32 x i8> %strided.vec2, ptr %out.vec2, align 64
1023   store <32 x i8> %strided.vec3, ptr %out.vec3, align 64
1024   ret void
1027 define void @load_i8_stride4_vf64(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr %out.vec2, ptr %out.vec3) nounwind {
1028 ; SSE-LABEL: load_i8_stride4_vf64:
1029 ; SSE:       # %bb.0:
1030 ; SSE-NEXT:    subq $664, %rsp # imm = 0x298
1031 ; SSE-NEXT:    movdqa 16(%rdi), %xmm8
1032 ; SSE-NEXT:    movdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1033 ; SSE-NEXT:    movdqa 32(%rdi), %xmm6
1034 ; SSE-NEXT:    movdqa 48(%rdi), %xmm14
1035 ; SSE-NEXT:    movdqa 128(%rdi), %xmm15
1036 ; SSE-NEXT:    movdqa 144(%rdi), %xmm10
1037 ; SSE-NEXT:    movdqa 160(%rdi), %xmm11
1038 ; SSE-NEXT:    movdqa 176(%rdi), %xmm3
1039 ; SSE-NEXT:    movdqa 64(%rdi), %xmm13
1040 ; SSE-NEXT:    movdqa 80(%rdi), %xmm7
1041 ; SSE-NEXT:    movdqa 96(%rdi), %xmm2
1042 ; SSE-NEXT:    movdqa 112(%rdi), %xmm1
1043 ; SSE-NEXT:    movdqa {{.*#+}} xmm5 = [255,0,255,0,255,0,255,0]
1044 ; SSE-NEXT:    movdqa %xmm1, %xmm0
1045 ; SSE-NEXT:    movdqa %xmm1, %xmm4
1046 ; SSE-NEXT:    pand %xmm5, %xmm0
1047 ; SSE-NEXT:    movdqa %xmm2, %xmm1
1048 ; SSE-NEXT:    movdqa %xmm2, %xmm9
1049 ; SSE-NEXT:    pand %xmm5, %xmm1
1050 ; SSE-NEXT:    packuswb %xmm0, %xmm1
1051 ; SSE-NEXT:    movdqa %xmm7, %xmm0
1052 ; SSE-NEXT:    pand %xmm5, %xmm0
1053 ; SSE-NEXT:    movdqa %xmm13, %xmm2
1054 ; SSE-NEXT:    pand %xmm5, %xmm2
1055 ; SSE-NEXT:    packuswb %xmm0, %xmm2
1056 ; SSE-NEXT:    packuswb %xmm1, %xmm2
1057 ; SSE-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1058 ; SSE-NEXT:    movdqa %xmm3, %xmm0
1059 ; SSE-NEXT:    pand %xmm5, %xmm0
1060 ; SSE-NEXT:    movdqa %xmm11, %xmm1
1061 ; SSE-NEXT:    pand %xmm5, %xmm1
1062 ; SSE-NEXT:    packuswb %xmm0, %xmm1
1063 ; SSE-NEXT:    movdqa %xmm10, %xmm0
1064 ; SSE-NEXT:    pand %xmm5, %xmm0
1065 ; SSE-NEXT:    movdqa %xmm15, %xmm2
1066 ; SSE-NEXT:    pand %xmm5, %xmm2
1067 ; SSE-NEXT:    packuswb %xmm0, %xmm2
1068 ; SSE-NEXT:    packuswb %xmm1, %xmm2
1069 ; SSE-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1070 ; SSE-NEXT:    movdqa %xmm14, %xmm0
1071 ; SSE-NEXT:    pand %xmm5, %xmm0
1072 ; SSE-NEXT:    movdqa %xmm6, %xmm1
1073 ; SSE-NEXT:    pand %xmm5, %xmm1
1074 ; SSE-NEXT:    packuswb %xmm0, %xmm1
1075 ; SSE-NEXT:    movdqa %xmm8, %xmm0
1076 ; SSE-NEXT:    pand %xmm5, %xmm0
1077 ; SSE-NEXT:    movdqa (%rdi), %xmm12
1078 ; SSE-NEXT:    movdqa %xmm12, %xmm2
1079 ; SSE-NEXT:    pand %xmm5, %xmm2
1080 ; SSE-NEXT:    packuswb %xmm0, %xmm2
1081 ; SSE-NEXT:    packuswb %xmm1, %xmm2
1082 ; SSE-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1083 ; SSE-NEXT:    movdqa 240(%rdi), %xmm8
1084 ; SSE-NEXT:    movdqa %xmm8, %xmm0
1085 ; SSE-NEXT:    pand %xmm5, %xmm0
1086 ; SSE-NEXT:    movdqa 224(%rdi), %xmm1
1087 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1088 ; SSE-NEXT:    pand %xmm5, %xmm1
1089 ; SSE-NEXT:    packuswb %xmm0, %xmm1
1090 ; SSE-NEXT:    movdqa 208(%rdi), %xmm0
1091 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1092 ; SSE-NEXT:    pand %xmm5, %xmm0
1093 ; SSE-NEXT:    movdqa 192(%rdi), %xmm2
1094 ; SSE-NEXT:    movdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1095 ; SSE-NEXT:    pand %xmm2, %xmm5
1096 ; SSE-NEXT:    packuswb %xmm0, %xmm5
1097 ; SSE-NEXT:    packuswb %xmm1, %xmm5
1098 ; SSE-NEXT:    pxor %xmm2, %xmm2
1099 ; SSE-NEXT:    movdqa %xmm4, %xmm1
1100 ; SSE-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1101 ; SSE-NEXT:    movdqa %xmm4, %xmm0
1102 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1103 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1104 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1105 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
1106 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1107 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1108 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,2,2,3]
1109 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,3,4,5,6,7]
1110 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1111 ; SSE-NEXT:    movdqa %xmm9, %xmm1
1112 ; SSE-NEXT:    movdqa %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1113 ; SSE-NEXT:    movdqa %xmm9, %xmm0
1114 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1115 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1116 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1117 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
1118 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1119 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1120 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm1[0,2,2,3]
1121 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm9[1,3,2,3,4,5,6,7]
1122 ; SSE-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm0[0],xmm9[1],xmm0[1]
1123 ; SSE-NEXT:    packuswb %xmm4, %xmm9
1124 ; SSE-NEXT:    movdqa %xmm7, %xmm1
1125 ; SSE-NEXT:    movdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1126 ; SSE-NEXT:    movdqa %xmm7, %xmm0
1127 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1128 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1129 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1130 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
1131 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1132 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1133 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,2,2,3]
1134 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,3,4,5,6,7]
1135 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1136 ; SSE-NEXT:    movdqa %xmm13, %xmm1
1137 ; SSE-NEXT:    movdqa %xmm13, (%rsp) # 16-byte Spill
1138 ; SSE-NEXT:    movdqa %xmm13, %xmm0
1139 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1140 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1141 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1142 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
1143 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1144 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1145 ; SSE-NEXT:    pshufd {{.*#+}} xmm13 = xmm1[0,2,2,3]
1146 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[1,3,2,3,4,5,6,7]
1147 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
1148 ; SSE-NEXT:    packuswb %xmm4, %xmm1
1149 ; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm9[0,3]
1150 ; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1151 ; SSE-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1152 ; SSE-NEXT:    movdqa %xmm3, %xmm0
1153 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1154 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1155 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1156 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
1157 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1158 ; SSE-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1159 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,2,2,3]
1160 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,3,4,5,6,7]
1161 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1162 ; SSE-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1163 ; SSE-NEXT:    movdqa %xmm11, %xmm0
1164 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1165 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1166 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1167 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
1168 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm11 = xmm11[0],xmm2[0],xmm11[1],xmm2[1],xmm11[2],xmm2[2],xmm11[3],xmm2[3],xmm11[4],xmm2[4],xmm11[5],xmm2[5],xmm11[6],xmm2[6],xmm11[7],xmm2[7]
1169 ; SSE-NEXT:    movdqa %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1170 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm11[0,2,2,3]
1171 ; SSE-NEXT:    pshuflw {{.*#+}} xmm9 = xmm9[1,3,2,3,4,5,6,7]
1172 ; SSE-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm0[0],xmm9[1],xmm0[1]
1173 ; SSE-NEXT:    packuswb %xmm4, %xmm9
1174 ; SSE-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1175 ; SSE-NEXT:    movdqa %xmm10, %xmm0
1176 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1177 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1178 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1179 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
1180 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm10 = xmm10[0],xmm2[0],xmm10[1],xmm2[1],xmm10[2],xmm2[2],xmm10[3],xmm2[3],xmm10[4],xmm2[4],xmm10[5],xmm2[5],xmm10[6],xmm2[6],xmm10[7],xmm2[7]
1181 ; SSE-NEXT:    movdqa %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1182 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[0,2,2,3]
1183 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,3,4,5,6,7]
1184 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1185 ; SSE-NEXT:    movdqa %xmm15, %xmm1
1186 ; SSE-NEXT:    movdqa %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1187 ; SSE-NEXT:    movdqa %xmm15, %xmm0
1188 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1189 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1190 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1191 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
1192 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1193 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1194 ; SSE-NEXT:    pshufd {{.*#+}} xmm13 = xmm1[0,2,2,3]
1195 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm13[1,3,2,3,4,5,6,7]
1196 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
1197 ; SSE-NEXT:    packuswb %xmm4, %xmm1
1198 ; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm9[0,3]
1199 ; SSE-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1200 ; SSE-NEXT:    movdqa %xmm14, %xmm0
1201 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1202 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1203 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1204 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
1205 ; SSE-NEXT:    movdqa %xmm14, %xmm1
1206 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1207 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1208 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,2,2,3]
1209 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,3,4,5,6,7]
1210 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1211 ; SSE-NEXT:    movdqa %xmm6, %xmm7
1212 ; SSE-NEXT:    movdqa %xmm6, %xmm0
1213 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1214 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1215 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1216 ; SSE-NEXT:    pshuflw {{.*#+}} xmm13 = xmm0[1,3,2,3,4,5,6,7]
1217 ; SSE-NEXT:    movdqa %xmm6, %xmm0
1218 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1219 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1220 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,2,2,3]
1221 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm9[1,3,2,3,4,5,6,7]
1222 ; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm13[0],xmm0[1],xmm13[1]
1223 ; SSE-NEXT:    packuswb %xmm4, %xmm0
1224 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
1225 ; SSE-NEXT:    movdqa %xmm6, %xmm1
1226 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]
1227 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1228 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,2,2,3]
1229 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,1,3,4,5,6,7]
1230 ; SSE-NEXT:    movdqa %xmm6, %xmm1
1231 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1232 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1233 ; SSE-NEXT:    pshufd {{.*#+}} xmm9 = xmm1[0,2,2,3]
1234 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm9[0,1,1,3,4,5,6,7]
1235 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
1236 ; SSE-NEXT:    movdqa %xmm12, %xmm3
1237 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
1238 ; SSE-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1239 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,2,2,3]
1240 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm4[1,3,2,3,4,5,6,7]
1241 ; SSE-NEXT:    movdqa %xmm12, %xmm4
1242 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
1243 ; SSE-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1244 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
1245 ; SSE-NEXT:    pshuflw {{.*#+}} xmm15 = xmm4[1,3,2,3,4,5,6,7]
1246 ; SSE-NEXT:    punpckldq {{.*#+}} xmm15 = xmm15[0],xmm3[0],xmm15[1],xmm3[1]
1247 ; SSE-NEXT:    packuswb %xmm1, %xmm15
1248 ; SSE-NEXT:    shufps {{.*#+}} xmm15 = xmm15[0,3],xmm0[0,3]
1249 ; SSE-NEXT:    movdqa %xmm8, %xmm0
1250 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1251 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1252 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1253 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,1,3,4,5,6,7]
1254 ; SSE-NEXT:    movdqa %xmm8, %xmm1
1255 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1256 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1257 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1258 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,1,1,3,4,5,6,7]
1259 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
1260 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
1261 ; SSE-NEXT:    movdqa %xmm10, %xmm0
1262 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1263 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1264 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1265 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,3,4,5,6,7]
1266 ; SSE-NEXT:    movdqa %xmm10, %xmm3
1267 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1268 ; SSE-NEXT:    movdqa %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1269 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
1270 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,3,2,3,4,5,6,7]
1271 ; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
1272 ; SSE-NEXT:    packuswb %xmm1, %xmm3
1273 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
1274 ; SSE-NEXT:    movdqa %xmm11, %xmm0
1275 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
1276 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1277 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1278 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm0[0,1,1,3,4,5,6,7]
1279 ; SSE-NEXT:    movdqa %xmm11, %xmm0
1280 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1281 ; SSE-NEXT:    movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1282 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]
1283 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm1[0,1,1,3,4,5,6,7]
1284 ; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
1285 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
1286 ; SSE-NEXT:    movdqa %xmm9, %xmm1
1287 ; SSE-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]
1288 ; SSE-NEXT:    movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1289 ; SSE-NEXT:    movdqa %xmm9, %xmm4
1290 ; SSE-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
1291 ; SSE-NEXT:    movdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1292 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1293 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm1[1,3,2,3,4,5,6,7]
1294 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[0,2,2,3]
1295 ; SSE-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,3,2,3,4,5,6,7]
1296 ; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1297 ; SSE-NEXT:    packuswb %xmm0, %xmm1
1298 ; SSE-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,3],xmm3[0,3]
1299 ; SSE-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]
1300 ; SSE-NEXT:    pand %xmm0, %xmm14
1301 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm14[3,1,2,3,4,5,6,7]
1302 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
1303 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,1,2,0]
1304 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1305 ; SSE-NEXT:    pand %xmm0, %xmm7
1306 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm7[3,1,2,3,4,5,6,7]
1307 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,6,7]
1308 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
1309 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
1310 ; SSE-NEXT:    packuswb %xmm2, %xmm3
1311 ; SSE-NEXT:    pand %xmm0, %xmm6
1312 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm6[3,1,2,3,4,5,6,7]
1313 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
1314 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,1,2,0]
1315 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1316 ; SSE-NEXT:    pand %xmm0, %xmm12
1317 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm12[3,1,2,3,4,5,6,7]
1318 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,5,6,7]
1319 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
1320 ; SSE-NEXT:    pshuflw {{.*#+}} xmm12 = xmm4[1,0,3,2,4,5,6,7]
1321 ; SSE-NEXT:    packuswb %xmm2, %xmm12
1322 ; SSE-NEXT:    shufps {{.*#+}} xmm12 = xmm12[0,3],xmm3[0,3]
1323 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
1324 ; SSE-NEXT:    pand %xmm0, %xmm2
1325 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
1326 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
1327 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,1,2,0]
1328 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
1329 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1330 ; SSE-NEXT:    pand %xmm0, %xmm3
1331 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,1,2,3,4,5,6,7]
1332 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,6,7]
1333 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
1334 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
1335 ; SSE-NEXT:    packuswb %xmm2, %xmm3
1336 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
1337 ; SSE-NEXT:    pand %xmm0, %xmm2
1338 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
1339 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
1340 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,1,2,0]
1341 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm2[0,1,2,3,7,6,5,4]
1342 ; SSE-NEXT:    movdqa (%rsp), %xmm2 # 16-byte Reload
1343 ; SSE-NEXT:    pand %xmm0, %xmm2
1344 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,1,2,3,4,5,6,7]
1345 ; SSE-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,5,6,7]
1346 ; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
1347 ; SSE-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]
1348 ; SSE-NEXT:    packuswb %xmm4, %xmm2
1349 ; SSE-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,3],xmm3[0,3]
1350 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1351 ; SSE-NEXT:    pand %xmm0, %xmm3
1352 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,1,2,3,4,5,6,7]
1353 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,6,7]
1354 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,0]
1355 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
1356 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
1357 ; SSE-NEXT:    pand %xmm0, %xmm4
1358 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1359 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,5,6,7]
1360 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
1361 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[1,0,3,2,4,5,6,7]
1362 ; SSE-NEXT:    packuswb %xmm3, %xmm4
1363 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1364 ; SSE-NEXT:    pand %xmm0, %xmm3
1365 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,1,2,3,4,5,6,7]
1366 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,6,7]
1367 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,0]
1368 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm3[0,1,2,3,7,6,5,4]
1369 ; SSE-NEXT:    movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1370 ; SSE-NEXT:    pand %xmm0, %xmm3
1371 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,1,2,3,4,5,6,7]
1372 ; SSE-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,5,6,7]
1373 ; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
1374 ; SSE-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
1375 ; SSE-NEXT:    packuswb %xmm6, %xmm3
1376 ; SSE-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,3],xmm4[0,3]
1377 ; SSE-NEXT:    pand %xmm0, %xmm8
1378 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm8[3,1,2,3,4,5,6,7]
1379 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,5,6,7]
1380 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,1,2,0]
1381 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,6,5,4]
1382 ; SSE-NEXT:    pand %xmm0, %xmm10
1383 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm10[3,1,2,3,4,5,6,7]
1384 ; SSE-NEXT:    pshufhw {{.*#+}} xmm6 = xmm6[0,1,2,3,7,5,6,7]
1385 ; SSE-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[0,2,2,3]
1386 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm6[1,0,3,2,4,5,6,7]
1387 ; SSE-NEXT:    packuswb %xmm4, %xmm7
1388 ; SSE-NEXT:    pand %xmm0, %xmm11
1389 ; SSE-NEXT:    pand %xmm0, %xmm9
1390 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm11[3,1,2,3,4,5,6,7]
1391 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,5,6,7]
1392 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,2,0]
1393 ; SSE-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
1394 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm9[3,1,2,3,4,5,6,7]
1395 ; SSE-NEXT:    pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,7,5,6,7]
1396 ; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
1397 ; SSE-NEXT:    pshuflw {{.*#+}} xmm6 = xmm4[1,0,3,2,4,5,6,7]
1398 ; SSE-NEXT:    packuswb %xmm0, %xmm6
1399 ; SSE-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,3],xmm7[0,3]
1400 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
1401 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
1402 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,1,4,5,6,7]
1403 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1404 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1405 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1406 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1407 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
1408 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
1409 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
1410 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
1411 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
1412 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[3,1,2,3,4,5,6,7]
1413 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm0[0],xmm7[1],xmm0[1]
1414 ; SSE-NEXT:    packuswb %xmm4, %xmm7
1415 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
1416 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
1417 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,3,1,4,5,6,7]
1418 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1419 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1420 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1421 ; SSE-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1]
1422 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
1423 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
1424 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm0[3,1,2,3,4,5,6,7]
1425 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
1426 ; SSE-NEXT:    # xmm0 = mem[3,1,2,3]
1427 ; SSE-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,3,4,5,6,7]
1428 ; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm8[0],xmm0[1],xmm8[1]
1429 ; SSE-NEXT:    packuswb %xmm4, %xmm0
1430 ; SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm7[0,3]
1431 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1432 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1433 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1434 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
1435 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
1436 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[0,1,3,1,4,5,6,7]
1437 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm4[0],xmm7[1],xmm4[1]
1438 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1439 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1440 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1441 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
1442 ; SSE-NEXT:    # xmm8 = mem[3,1,2,3]
1443 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[3,1,2,3,4,5,6,7]
1444 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm4[0],xmm8[1],xmm4[1]
1445 ; SSE-NEXT:    packuswb %xmm7, %xmm8
1446 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1447 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1448 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1449 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
1450 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
1451 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm7[0,1,3,1,4,5,6,7]
1452 ; SSE-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm4[0],xmm10[1],xmm4[1]
1453 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1454 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1455 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1456 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Folded Reload
1457 ; SSE-NEXT:    # xmm7 = mem[3,1,2,3]
1458 ; SSE-NEXT:    pshuflw {{.*#+}} xmm7 = xmm7[3,1,2,3,4,5,6,7]
1459 ; SSE-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm4[0],xmm7[1],xmm4[1]
1460 ; SSE-NEXT:    packuswb %xmm10, %xmm7
1461 ; SSE-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,3],xmm8[0,3]
1462 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1463 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1464 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1465 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
1466 ; SSE-NEXT:    # xmm8 = mem[3,1,2,3]
1467 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[0,1,3,1,4,5,6,7]
1468 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm4[0],xmm8[1],xmm4[1]
1469 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1470 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1471 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1472 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Folded Reload
1473 ; SSE-NEXT:    # xmm10 = mem[3,1,2,3]
1474 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm10[3,1,2,3,4,5,6,7]
1475 ; SSE-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm4[0],xmm10[1],xmm4[1]
1476 ; SSE-NEXT:    packuswb %xmm8, %xmm10
1477 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1478 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1479 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1480 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
1481 ; SSE-NEXT:    # xmm8 = mem[3,1,2,3]
1482 ; SSE-NEXT:    pshuflw {{.*#+}} xmm11 = xmm8[0,1,3,1,4,5,6,7]
1483 ; SSE-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm4[0],xmm11[1],xmm4[1]
1484 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1485 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1486 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1487 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Folded Reload
1488 ; SSE-NEXT:    # xmm8 = mem[3,1,2,3]
1489 ; SSE-NEXT:    pshuflw {{.*#+}} xmm8 = xmm8[3,1,2,3,4,5,6,7]
1490 ; SSE-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm4[0],xmm8[1],xmm4[1]
1491 ; SSE-NEXT:    packuswb %xmm11, %xmm8
1492 ; SSE-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,3],xmm10[0,3]
1493 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1494 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1495 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1496 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Folded Reload
1497 ; SSE-NEXT:    # xmm10 = mem[3,1,2,3]
1498 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm10[0,1,3,1,4,5,6,7]
1499 ; SSE-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm4[0],xmm10[1],xmm4[1]
1500 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1501 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1502 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1503 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Folded Reload
1504 ; SSE-NEXT:    # xmm11 = mem[3,1,2,3]
1505 ; SSE-NEXT:    pshuflw {{.*#+}} xmm11 = xmm11[3,1,2,3,4,5,6,7]
1506 ; SSE-NEXT:    punpckldq {{.*#+}} xmm11 = xmm11[0],xmm4[0],xmm11[1],xmm4[1]
1507 ; SSE-NEXT:    packuswb %xmm10, %xmm11
1508 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1509 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1510 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[0,1,3,1,4,5,6,7]
1511 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Folded Reload
1512 ; SSE-NEXT:    # xmm10 = mem[3,1,2,3]
1513 ; SSE-NEXT:    pshuflw {{.*#+}} xmm10 = xmm10[0,1,3,1,4,5,6,7]
1514 ; SSE-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm4[0],xmm10[1],xmm4[1]
1515 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Folded Reload
1516 ; SSE-NEXT:    # xmm4 = mem[3,1,2,3]
1517 ; SSE-NEXT:    pshuflw {{.*#+}} xmm4 = xmm4[3,1,2,3,4,5,6,7]
1518 ; SSE-NEXT:    pshufd $231, {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Folded Reload
1519 ; SSE-NEXT:    # xmm13 = mem[3,1,2,3]
1520 ; SSE-NEXT:    pshuflw {{.*#+}} xmm13 = xmm13[3,1,2,3,4,5,6,7]
1521 ; SSE-NEXT:    punpckldq {{.*#+}} xmm13 = xmm13[0],xmm4[0],xmm13[1],xmm4[1]
1522 ; SSE-NEXT:    packuswb %xmm10, %xmm13
1523 ; SSE-NEXT:    shufps {{.*#+}} xmm13 = xmm13[0,3],xmm11[0,3]
1524 ; SSE-NEXT:    movdqa %xmm5, 48(%rsi)
1525 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
1526 ; SSE-NEXT:    movaps %xmm4, (%rsi)
1527 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
1528 ; SSE-NEXT:    movaps %xmm4, 32(%rsi)
1529 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
1530 ; SSE-NEXT:    movaps %xmm4, 16(%rsi)
1531 ; SSE-NEXT:    movaps %xmm1, 48(%rdx)
1532 ; SSE-NEXT:    movaps %xmm15, (%rdx)
1533 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1534 ; SSE-NEXT:    movaps %xmm1, 32(%rdx)
1535 ; SSE-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1536 ; SSE-NEXT:    movaps %xmm1, 16(%rdx)
1537 ; SSE-NEXT:    movaps %xmm6, 48(%rcx)
1538 ; SSE-NEXT:    movaps %xmm3, 32(%rcx)
1539 ; SSE-NEXT:    movaps %xmm2, 16(%rcx)
1540 ; SSE-NEXT:    movaps %xmm12, (%rcx)
1541 ; SSE-NEXT:    movaps %xmm13, 48(%r8)
1542 ; SSE-NEXT:    movaps %xmm8, 32(%r8)
1543 ; SSE-NEXT:    movaps %xmm7, 16(%r8)
1544 ; SSE-NEXT:    movaps %xmm0, (%r8)
1545 ; SSE-NEXT:    addq $664, %rsp # imm = 0x298
1546 ; SSE-NEXT:    retq
1548 ; AVX1-ONLY-LABEL: load_i8_stride4_vf64:
1549 ; AVX1-ONLY:       # %bb.0:
1550 ; AVX1-ONLY-NEXT:    subq $328, %rsp # imm = 0x148
1551 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm1 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
1552 ; AVX1-ONLY-NEXT:    vmovdqa 112(%rdi), %xmm2
1553 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm2, %xmm0
1554 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, %xmm6
1555 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1556 ; AVX1-ONLY-NEXT:    vmovdqa 96(%rdi), %xmm3
1557 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm3, %xmm2
1558 ; AVX1-ONLY-NEXT:    vmovdqa %xmm3, %xmm8
1559 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
1560 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm3 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
1561 ; AVX1-ONLY-NEXT:    vmovdqa 80(%rdi), %xmm0
1562 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1563 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm5
1564 ; AVX1-ONLY-NEXT:    vmovdqa 64(%rdi), %xmm0
1565 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1566 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm7
1567 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm7[0],xmm5[0],xmm7[1],xmm5[1]
1568 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm2 = xmm5[0,1,2,3],xmm2[4,5,6,7]
1569 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm9
1570 ; AVX1-ONLY-NEXT:    vmovdqa (%rdi), %xmm0
1571 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1572 ; AVX1-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm2
1573 ; AVX1-ONLY-NEXT:    vmovdqa %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1574 ; AVX1-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm4
1575 ; AVX1-ONLY-NEXT:    vmovdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1576 ; AVX1-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm5
1577 ; AVX1-ONLY-NEXT:    vmovdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1578 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm5, %xmm10
1579 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm4, %xmm11
1580 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm10 = xmm11[0],xmm10[0],xmm11[1],xmm10[1]
1581 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm2, %xmm11
1582 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm12
1583 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm11 = xmm12[0],xmm11[0],xmm12[1],xmm11[1]
1584 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm10 = xmm11[0,1,2,3],xmm10[4,5,6,7]
1585 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm0 = ymm10[0,1,2,3],ymm9[4,5,6,7]
1586 ; AVX1-ONLY-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1587 ; AVX1-ONLY-NEXT:    vmovdqa 240(%rdi), %xmm0
1588 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1589 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm0, %xmm11
1590 ; AVX1-ONLY-NEXT:    vmovdqa 224(%rdi), %xmm0
1591 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1592 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm0, %xmm12
1593 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm13 = xmm12[0],xmm11[0],xmm12[1],xmm11[1]
1594 ; AVX1-ONLY-NEXT:    vmovdqa 208(%rdi), %xmm0
1595 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1596 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm14
1597 ; AVX1-ONLY-NEXT:    vmovdqa 192(%rdi), %xmm0
1598 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1599 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm15
1600 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm14 = xmm15[0],xmm14[0],xmm15[1],xmm14[1]
1601 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm2 = xmm14[0,1,2,3],xmm13[4,5,6,7]
1602 ; AVX1-ONLY-NEXT:    vmovdqa 176(%rdi), %xmm0
1603 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill
1604 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm0, %xmm15
1605 ; AVX1-ONLY-NEXT:    vmovdqa 160(%rdi), %xmm0
1606 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1607 ; AVX1-ONLY-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
1608 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],xmm15[0],xmm1[1],xmm15[1]
1609 ; AVX1-ONLY-NEXT:    vmovdqa 144(%rdi), %xmm0
1610 ; AVX1-ONLY-NEXT:    vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1611 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1612 ; AVX1-ONLY-NEXT:    vmovdqa 128(%rdi), %xmm4
1613 ; AVX1-ONLY-NEXT:    vmovdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1614 ; AVX1-ONLY-NEXT:    vpshufb %xmm3, %xmm4, %xmm3
1615 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
1616 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1617 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm1
1618 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1619 ; AVX1-ONLY-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1620 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm0 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
1621 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm6, %xmm1
1622 ; AVX1-ONLY-NEXT:    vmovdqa %xmm8, %xmm4
1623 ; AVX1-ONLY-NEXT:    vmovdqa %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1624 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm8, %xmm2
1625 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1626 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm2 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
1627 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload
1628 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm7, %xmm3
1629 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
1630 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm8, %xmm5
1631 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1632 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm3[0,1,2,3],xmm1[4,5,6,7]
1633 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
1634 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm12, %xmm3
1635 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
1636 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm11, %xmm5
1637 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1638 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
1639 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm10, %xmm5
1640 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
1641 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm9, %xmm6
1642 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
1643 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]
1644 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
1645 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
1646 ; AVX1-ONLY-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1647 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
1648 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm13, %xmm1
1649 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
1650 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm14, %xmm3
1651 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
1652 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
1653 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm15, %xmm3
1654 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1655 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm5, %xmm5
1656 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1657 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm3[0,1,2,3],xmm1[4,5,6,7]
1658 ; AVX1-ONLY-NEXT:    vmovdqa (%rsp), %xmm3 # 16-byte Reload
1659 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm3, %xmm3
1660 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1661 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm5, %xmm0
1662 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1663 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1664 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm3, %xmm3
1665 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1666 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
1667 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
1668 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1,2,3],xmm0[4,5,6,7]
1669 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
1670 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1671 ; AVX1-ONLY-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1672 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm0 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
1673 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1674 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm1, %xmm1
1675 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm4, %xmm2
1676 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1677 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm2 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
1678 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm7, %xmm3
1679 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm8, %xmm5
1680 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1681 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm3[0,1,2,3],xmm1[4,5,6,7]
1682 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm12, %xmm3
1683 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm11, %xmm5
1684 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1685 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm10, %xmm5
1686 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm9, %xmm6
1687 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
1688 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]
1689 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
1690 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
1691 ; AVX1-ONLY-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1692 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm13, %xmm1
1693 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm14, %xmm3
1694 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
1695 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm15, %xmm3
1696 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
1697 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm4, %xmm5
1698 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1699 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm3[0,1,2,3],xmm1[4,5,6,7]
1700 ; AVX1-ONLY-NEXT:    vmovdqa (%rsp), %xmm7 # 16-byte Reload
1701 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm7, %xmm3
1702 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
1703 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm8, %xmm0
1704 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1705 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
1706 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm9, %xmm3
1707 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
1708 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm10, %xmm2
1709 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
1710 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1,2,3],xmm0[4,5,6,7]
1711 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
1712 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1713 ; AVX1-ONLY-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1714 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm0 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
1715 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1716 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm1, %xmm1
1717 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
1718 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm2, %xmm2
1719 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1720 ; AVX1-ONLY-NEXT:    vbroadcastss {{.*#+}} xmm2 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
1721 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1722 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm3, %xmm3
1723 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1724 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm5, %xmm5
1725 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1726 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm3[0,1,2,3],xmm1[4,5,6,7]
1727 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm12, %xmm3
1728 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm11, %xmm5
1729 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1730 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1731 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm5, %xmm5
1732 ; AVX1-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
1733 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm6, %xmm6
1734 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
1735 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]
1736 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1
1737 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
1738 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm13, %xmm3
1739 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm14, %xmm5
1740 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
1741 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm15, %xmm5
1742 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm4, %xmm6
1743 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
1744 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm3 = xmm5[0,1,2,3],xmm3[4,5,6,7]
1745 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm7, %xmm5
1746 ; AVX1-ONLY-NEXT:    vpshufb %xmm0, %xmm8, %xmm0
1747 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
1748 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm9, %xmm5
1749 ; AVX1-ONLY-NEXT:    vpshufb %xmm2, %xmm10, %xmm2
1750 ; AVX1-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1]
1751 ; AVX1-ONLY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1,2,3],xmm0[4,5,6,7]
1752 ; AVX1-ONLY-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm2
1753 ; AVX1-ONLY-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1754 ; AVX1-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm2 # 32-byte Reload
1755 ; AVX1-ONLY-NEXT:    vmovaps %ymm2, 32(%rsi)
1756 ; AVX1-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm2 # 32-byte Reload
1757 ; AVX1-ONLY-NEXT:    vmovaps %ymm2, (%rsi)
1758 ; AVX1-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm2 # 32-byte Reload
1759 ; AVX1-ONLY-NEXT:    vmovaps %ymm2, 32(%rdx)
1760 ; AVX1-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm2 # 32-byte Reload
1761 ; AVX1-ONLY-NEXT:    vmovaps %ymm2, (%rdx)
1762 ; AVX1-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm2 # 32-byte Reload
1763 ; AVX1-ONLY-NEXT:    vmovaps %ymm2, 32(%rcx)
1764 ; AVX1-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm2 # 32-byte Reload
1765 ; AVX1-ONLY-NEXT:    vmovaps %ymm2, (%rcx)
1766 ; AVX1-ONLY-NEXT:    vmovaps %ymm0, 32(%r8)
1767 ; AVX1-ONLY-NEXT:    vmovaps %ymm1, (%r8)
1768 ; AVX1-ONLY-NEXT:    addq $328, %rsp # imm = 0x148
1769 ; AVX1-ONLY-NEXT:    vzeroupper
1770 ; AVX1-ONLY-NEXT:    retq
1772 ; AVX2-ONLY-LABEL: load_i8_stride4_vf64:
1773 ; AVX2-ONLY:       # %bb.0:
1774 ; AVX2-ONLY-NEXT:    subq $168, %rsp
1775 ; AVX2-ONLY-NEXT:    vmovdqa 64(%rdi), %ymm0
1776 ; AVX2-ONLY-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1777 ; AVX2-ONLY-NEXT:    vmovdqa 96(%rdi), %ymm2
1778 ; AVX2-ONLY-NEXT:    vmovdqa (%rdi), %xmm4
1779 ; AVX2-ONLY-NEXT:    vmovdqa %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1780 ; AVX2-ONLY-NEXT:    vmovdqa 16(%rdi), %xmm5
1781 ; AVX2-ONLY-NEXT:    vmovdqa 32(%rdi), %xmm6
1782 ; AVX2-ONLY-NEXT:    vmovdqa 48(%rdi), %xmm7
1783 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
1784 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm7, %xmm1
1785 ; AVX2-ONLY-NEXT:    vmovdqa %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1786 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm6, %xmm8
1787 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm8[0],xmm1[0],xmm8[1],xmm1[1]
1788 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm10 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
1789 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm5, %xmm8
1790 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm4, %xmm9
1791 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm8 = xmm9[0],xmm8[0],xmm9[1],xmm8[1]
1792 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm8 = xmm8[0,1],xmm1[2,3]
1793 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm13 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
1794 ; AVX2-ONLY-NEXT:    vpshufb %ymm13, %ymm2, %ymm9
1795 ; AVX2-ONLY-NEXT:    vmovdqa %ymm2, %ymm4
1796 ; AVX2-ONLY-NEXT:    vmovdqu %ymm2, (%rsp) # 32-byte Spill
1797 ; AVX2-ONLY-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [0,4,0,4,0,4,0,4]
1798 ; AVX2-ONLY-NEXT:    vpermd %ymm9, %ymm1, %ymm9
1799 ; AVX2-ONLY-NEXT:    vpshufb %ymm13, %ymm0, %ymm11
1800 ; AVX2-ONLY-NEXT:    vpermd %ymm11, %ymm1, %ymm11
1801 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm9 = ymm11[0,1,2,3,4,5],ymm9[6,7]
1802 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm8[0,1,2,3],ymm9[4,5,6,7]
1803 ; AVX2-ONLY-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1804 ; AVX2-ONLY-NEXT:    vmovdqa 176(%rdi), %xmm8
1805 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm8, %xmm11
1806 ; AVX2-ONLY-NEXT:    vmovdqa 160(%rdi), %xmm9
1807 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm9, %xmm3
1808 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm3[0],xmm11[0],xmm3[1],xmm11[1]
1809 ; AVX2-ONLY-NEXT:    vmovdqa 144(%rdi), %xmm11
1810 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm11, %xmm14
1811 ; AVX2-ONLY-NEXT:    vmovdqa 128(%rdi), %xmm12
1812 ; AVX2-ONLY-NEXT:    vpshufb %xmm10, %xmm12, %xmm10
1813 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm14 = xmm10[0],xmm14[0],xmm10[1],xmm14[1]
1814 ; AVX2-ONLY-NEXT:    vmovdqa 224(%rdi), %ymm10
1815 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm3 = xmm14[0,1],xmm3[2,3]
1816 ; AVX2-ONLY-NEXT:    vpshufb %ymm13, %ymm10, %ymm14
1817 ; AVX2-ONLY-NEXT:    vpermd %ymm14, %ymm1, %ymm15
1818 ; AVX2-ONLY-NEXT:    vmovdqa 192(%rdi), %ymm0
1819 ; AVX2-ONLY-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1820 ; AVX2-ONLY-NEXT:    vpshufb %ymm13, %ymm0, %ymm13
1821 ; AVX2-ONLY-NEXT:    vpermd %ymm13, %ymm1, %ymm13
1822 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm13 = ymm13[0,1,2,3,4,5],ymm15[6,7]
1823 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm13[4,5,6,7]
1824 ; AVX2-ONLY-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1825 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
1826 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm7, %xmm13
1827 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm6, %xmm15
1828 ; AVX2-ONLY-NEXT:    vmovdqa %xmm6, %xmm7
1829 ; AVX2-ONLY-NEXT:    vmovdqa %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1830 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm13 = xmm15[0],xmm13[0],xmm15[1],xmm13[1]
1831 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm15 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
1832 ; AVX2-ONLY-NEXT:    vpshufb %xmm15, %xmm5, %xmm0
1833 ; AVX2-ONLY-NEXT:    vmovdqa %xmm5, %xmm14
1834 ; AVX2-ONLY-NEXT:    vmovdqa %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1835 ; AVX2-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1836 ; AVX2-ONLY-NEXT:    vpshufb %xmm15, %xmm5, %xmm2
1837 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
1838 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm13[2,3]
1839 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
1840 ; AVX2-ONLY-NEXT:    vpshufb %ymm2, %ymm4, %ymm13
1841 ; AVX2-ONLY-NEXT:    vpermd %ymm13, %ymm1, %ymm13
1842 ; AVX2-ONLY-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm6 # 32-byte Reload
1843 ; AVX2-ONLY-NEXT:    vpshufb %ymm2, %ymm6, %ymm4
1844 ; AVX2-ONLY-NEXT:    vpermd %ymm4, %ymm1, %ymm4
1845 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm4 = ymm4[0,1,2,3,4,5],ymm13[6,7]
1846 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm4[4,5,6,7]
1847 ; AVX2-ONLY-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1848 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm8, %xmm0
1849 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm9, %xmm3
1850 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
1851 ; AVX2-ONLY-NEXT:    vpshufb %xmm15, %xmm11, %xmm3
1852 ; AVX2-ONLY-NEXT:    vpshufb %xmm15, %xmm12, %xmm4
1853 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm3 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
1854 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm0 = xmm3[0,1],xmm0[2,3]
1855 ; AVX2-ONLY-NEXT:    vpshufb %ymm2, %ymm10, %ymm3
1856 ; AVX2-ONLY-NEXT:    vpermd %ymm3, %ymm1, %ymm3
1857 ; AVX2-ONLY-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm4 # 32-byte Reload
1858 ; AVX2-ONLY-NEXT:    vpshufb %ymm2, %ymm4, %ymm2
1859 ; AVX2-ONLY-NEXT:    vpermd %ymm2, %ymm1, %ymm2
1860 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3,4,5],ymm3[6,7]
1861 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1862 ; AVX2-ONLY-NEXT:    vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1863 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm0 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
1864 ; AVX2-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
1865 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm2, %xmm2
1866 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm7, %xmm3
1867 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
1868 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
1869 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm14, %xmm4
1870 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm5, %xmm13
1871 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm13[0],xmm4[0],xmm13[1],xmm4[1]
1872 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm2 = xmm4[0,1],xmm2[2,3]
1873 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm4 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
1874 ; AVX2-ONLY-NEXT:    vmovdqu (%rsp), %ymm7 # 32-byte Reload
1875 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm7, %ymm13
1876 ; AVX2-ONLY-NEXT:    vpermd %ymm13, %ymm1, %ymm13
1877 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm6, %ymm15
1878 ; AVX2-ONLY-NEXT:    vpermd %ymm15, %ymm1, %ymm15
1879 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm13 = ymm15[0,1,2,3,4,5],ymm13[6,7]
1880 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm13 = ymm2[0,1,2,3],ymm13[4,5,6,7]
1881 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm8, %xmm2
1882 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm9, %xmm0
1883 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1884 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm11, %xmm2
1885 ; AVX2-ONLY-NEXT:    vpshufb %xmm3, %xmm12, %xmm3
1886 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
1887 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3]
1888 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm10, %ymm2
1889 ; AVX2-ONLY-NEXT:    vpermd %ymm2, %ymm1, %ymm2
1890 ; AVX2-ONLY-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm14 # 32-byte Reload
1891 ; AVX2-ONLY-NEXT:    vpshufb %ymm4, %ymm14, %ymm3
1892 ; AVX2-ONLY-NEXT:    vpermd %ymm3, %ymm1, %ymm3
1893 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm2 = ymm3[0,1,2,3,4,5],ymm2[6,7]
1894 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm3 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1895 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm0 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
1896 ; AVX2-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
1897 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm2, %xmm2
1898 ; AVX2-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload
1899 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm4, %xmm4
1900 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
1901 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} xmm4 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
1902 ; AVX2-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload
1903 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm5, %xmm5
1904 ; AVX2-ONLY-NEXT:    vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload
1905 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm6, %xmm6
1906 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm5 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
1907 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm2 = xmm5[0,1],xmm2[2,3]
1908 ; AVX2-ONLY-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
1909 ; AVX2-ONLY-NEXT:    vpshufb %ymm5, %ymm7, %ymm6
1910 ; AVX2-ONLY-NEXT:    vpermd %ymm6, %ymm1, %ymm6
1911 ; AVX2-ONLY-NEXT:    vmovdqu {{[-0-9]+}}(%r{{[sb]}}p), %ymm7 # 32-byte Reload
1912 ; AVX2-ONLY-NEXT:    vpshufb %ymm5, %ymm7, %ymm7
1913 ; AVX2-ONLY-NEXT:    vpermd %ymm7, %ymm1, %ymm7
1914 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm6 = ymm7[0,1,2,3,4,5],ymm6[6,7]
1915 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm6[4,5,6,7]
1916 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm8, %xmm6
1917 ; AVX2-ONLY-NEXT:    vpshufb %xmm0, %xmm9, %xmm0
1918 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm6[0],xmm0[1],xmm6[1]
1919 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm11, %xmm6
1920 ; AVX2-ONLY-NEXT:    vpshufb %xmm4, %xmm12, %xmm4
1921 ; AVX2-ONLY-NEXT:    vpunpckldq {{.*#+}} xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1]
1922 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} xmm0 = xmm4[0,1],xmm0[2,3]
1923 ; AVX2-ONLY-NEXT:    vpshufb %ymm5, %ymm10, %ymm4
1924 ; AVX2-ONLY-NEXT:    vpshufb %ymm5, %ymm14, %ymm5
1925 ; AVX2-ONLY-NEXT:    vpermd %ymm4, %ymm1, %ymm4
1926 ; AVX2-ONLY-NEXT:    vpermd %ymm5, %ymm1, %ymm1
1927 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm4[6,7]
1928 ; AVX2-ONLY-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]
1929 ; AVX2-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
1930 ; AVX2-ONLY-NEXT:    vmovaps %ymm1, 32(%rsi)
1931 ; AVX2-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
1932 ; AVX2-ONLY-NEXT:    vmovaps %ymm1, (%rsi)
1933 ; AVX2-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
1934 ; AVX2-ONLY-NEXT:    vmovaps %ymm1, 32(%rdx)
1935 ; AVX2-ONLY-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 # 32-byte Reload
1936 ; AVX2-ONLY-NEXT:    vmovaps %ymm1, (%rdx)
1937 ; AVX2-ONLY-NEXT:    vmovdqa %ymm3, 32(%rcx)
1938 ; AVX2-ONLY-NEXT:    vmovdqa %ymm13, (%rcx)
1939 ; AVX2-ONLY-NEXT:    vmovdqa %ymm0, 32(%r8)
1940 ; AVX2-ONLY-NEXT:    vmovdqa %ymm2, (%r8)
1941 ; AVX2-ONLY-NEXT:    addq $168, %rsp
1942 ; AVX2-ONLY-NEXT:    vzeroupper
1943 ; AVX2-ONLY-NEXT:    retq
1945 ; AVX512F-LABEL: load_i8_stride4_vf64:
1946 ; AVX512F:       # %bb.0:
1947 ; AVX512F-NEXT:    vmovdqa64 (%rdi), %zmm0
1948 ; AVX512F-NEXT:    vmovdqa64 128(%rdi), %zmm2
1949 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm7 = [0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12]
1950 ; AVX512F-NEXT:    vmovdqa 224(%rdi), %ymm3
1951 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm3, %ymm5
1952 ; AVX512F-NEXT:    vmovdqa 192(%rdi), %ymm4
1953 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm4, %ymm6
1954 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,4,0,4,0,4,8,12]
1955 ; AVX512F-NEXT:    vpermt2d %ymm5, %ymm1, %ymm6
1956 ; AVX512F-NEXT:    vpmovdb %zmm2, %xmm5
1957 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm5 = ymm5[0,1,2,3],ymm6[4,5,6,7]
1958 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm5, %zmm0, %zmm8
1959 ; AVX512F-NEXT:    vmovdqa 96(%rdi), %ymm5
1960 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm5, %ymm9
1961 ; AVX512F-NEXT:    vmovdqa 64(%rdi), %ymm6
1962 ; AVX512F-NEXT:    vpshufb %ymm7, %ymm6, %ymm7
1963 ; AVX512F-NEXT:    vpermt2d %ymm9, %ymm1, %ymm7
1964 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm9
1965 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm7 = ymm9[0,1,2,3],ymm7[4,5,6,7]
1966 ; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm7 = zmm7[0,1,2,3],zmm8[4,5,6,7]
1967 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm8 = [1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13,1,5,9,13]
1968 ; AVX512F-NEXT:    vpshufb %ymm8, %ymm3, %ymm9
1969 ; AVX512F-NEXT:    vpshufb %ymm8, %ymm4, %ymm10
1970 ; AVX512F-NEXT:    vpermt2d %ymm9, %ymm1, %ymm10
1971 ; AVX512F-NEXT:    vpsrld $8, %zmm2, %zmm9
1972 ; AVX512F-NEXT:    vpmovdb %zmm9, %xmm9
1973 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm9 = ymm9[0,1,2,3],ymm10[4,5,6,7]
1974 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm9, %zmm0, %zmm9
1975 ; AVX512F-NEXT:    vpshufb %ymm8, %ymm5, %ymm10
1976 ; AVX512F-NEXT:    vpshufb %ymm8, %ymm6, %ymm8
1977 ; AVX512F-NEXT:    vpermt2d %ymm10, %ymm1, %ymm8
1978 ; AVX512F-NEXT:    vpsrld $8, %zmm0, %zmm10
1979 ; AVX512F-NEXT:    vpmovdb %zmm10, %xmm10
1980 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm8 = ymm10[0,1,2,3],ymm8[4,5,6,7]
1981 ; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm8 = zmm8[0,1,2,3],zmm9[4,5,6,7]
1982 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm9 = [2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14,2,6,10,14]
1983 ; AVX512F-NEXT:    vpshufb %ymm9, %ymm3, %ymm10
1984 ; AVX512F-NEXT:    vpshufb %ymm9, %ymm4, %ymm11
1985 ; AVX512F-NEXT:    vpermt2d %ymm10, %ymm1, %ymm11
1986 ; AVX512F-NEXT:    vpsrld $16, %zmm2, %zmm10
1987 ; AVX512F-NEXT:    vpmovdb %zmm10, %xmm10
1988 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm10 = ymm10[0,1,2,3],ymm11[4,5,6,7]
1989 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm10, %zmm0, %zmm10
1990 ; AVX512F-NEXT:    vpshufb %ymm9, %ymm5, %ymm11
1991 ; AVX512F-NEXT:    vpshufb %ymm9, %ymm6, %ymm9
1992 ; AVX512F-NEXT:    vpermt2d %ymm11, %ymm1, %ymm9
1993 ; AVX512F-NEXT:    vpsrld $16, %zmm0, %zmm11
1994 ; AVX512F-NEXT:    vpmovdb %zmm11, %xmm11
1995 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm9 = ymm11[0,1,2,3],ymm9[4,5,6,7]
1996 ; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm9 = zmm9[0,1,2,3],zmm10[4,5,6,7]
1997 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm10 = [3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15,3,7,11,15]
1998 ; AVX512F-NEXT:    vpshufb %ymm10, %ymm3, %ymm3
1999 ; AVX512F-NEXT:    vpshufb %ymm10, %ymm4, %ymm4
2000 ; AVX512F-NEXT:    vpermt2d %ymm3, %ymm1, %ymm4
2001 ; AVX512F-NEXT:    vpsrld $24, %zmm2, %zmm2
2002 ; AVX512F-NEXT:    vpmovdb %zmm2, %xmm2
2003 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm4[4,5,6,7]
2004 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm2
2005 ; AVX512F-NEXT:    vpshufb %ymm10, %ymm5, %ymm3
2006 ; AVX512F-NEXT:    vpshufb %ymm10, %ymm6, %ymm4
2007 ; AVX512F-NEXT:    vpermt2d %ymm3, %ymm1, %ymm4
2008 ; AVX512F-NEXT:    vpsrld $24, %zmm0, %zmm0
2009 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2010 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm4[4,5,6,7]
2011 ; AVX512F-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm2[4,5,6,7]
2012 ; AVX512F-NEXT:    vmovdqa64 %zmm7, (%rsi)
2013 ; AVX512F-NEXT:    vmovdqa64 %zmm8, (%rdx)
2014 ; AVX512F-NEXT:    vmovdqa64 %zmm9, (%rcx)
2015 ; AVX512F-NEXT:    vmovdqa64 %zmm0, (%r8)
2016 ; AVX512F-NEXT:    vzeroupper
2017 ; AVX512F-NEXT:    retq
2019 ; AVX512BW-LABEL: load_i8_stride4_vf64:
2020 ; AVX512BW:       # %bb.0:
2021 ; AVX512BW-NEXT:    vmovdqa64 (%rdi), %zmm0
2022 ; AVX512BW-NEXT:    vmovdqa64 64(%rdi), %zmm1
2023 ; AVX512BW-NEXT:    vmovdqa64 128(%rdi), %zmm2
2024 ; AVX512BW-NEXT:    vmovdqa64 192(%rdi), %zmm3
2025 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm4 = <128,128,128,128,0,4,8,12,u,u,u,u,u,u,u,u,128,128,128,128,16,20,24,28,u,u,u,u,u,u,u,u,128,128,128,128,32,36,40,44,u,u,u,u,u,u,u,u,128,128,128,128,48,52,56,60,u,u,u,u,u,u,u,u>
2026 ; AVX512BW-NEXT:    vpshufb %zmm4, %zmm3, %zmm5
2027 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm6 = <0,4,8,12,128,128,128,128,u,u,u,u,u,u,u,u,16,20,24,28,128,128,128,128,u,u,u,u,u,u,u,u,32,36,40,44,128,128,128,128,u,u,u,u,u,u,u,u,48,52,56,60,128,128,128,128,u,u,u,u,u,u,u,u>
2028 ; AVX512BW-NEXT:    vpshufb %zmm6, %zmm2, %zmm7
2029 ; AVX512BW-NEXT:    vporq %zmm5, %zmm7, %zmm5
2030 ; AVX512BW-NEXT:    vpshufb %zmm4, %zmm1, %zmm4
2031 ; AVX512BW-NEXT:    vpshufb %zmm6, %zmm0, %zmm6
2032 ; AVX512BW-NEXT:    vporq %zmm4, %zmm6, %zmm4
2033 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm6 = [0,4,8,12,1,5,9,13,16,20,24,28,17,21,25,29]
2034 ; AVX512BW-NEXT:    vpermt2d %zmm5, %zmm6, %zmm4
2035 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm5 = <128,128,128,128,1,5,9,13,u,u,u,u,u,u,u,u,128,128,128,128,17,21,25,29,u,u,u,u,u,u,u,u,128,128,128,128,33,37,41,45,u,u,u,u,u,u,u,u,128,128,128,128,49,53,57,61,u,u,u,u,u,u,u,u>
2036 ; AVX512BW-NEXT:    vpshufb %zmm5, %zmm3, %zmm7
2037 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm8 = <1,5,9,13,128,128,128,128,u,u,u,u,u,u,u,u,17,21,25,29,128,128,128,128,u,u,u,u,u,u,u,u,33,37,41,45,128,128,128,128,u,u,u,u,u,u,u,u,49,53,57,61,128,128,128,128,u,u,u,u,u,u,u,u>
2038 ; AVX512BW-NEXT:    vpshufb %zmm8, %zmm2, %zmm9
2039 ; AVX512BW-NEXT:    vporq %zmm7, %zmm9, %zmm7
2040 ; AVX512BW-NEXT:    vpshufb %zmm5, %zmm1, %zmm5
2041 ; AVX512BW-NEXT:    vpshufb %zmm8, %zmm0, %zmm8
2042 ; AVX512BW-NEXT:    vporq %zmm5, %zmm8, %zmm5
2043 ; AVX512BW-NEXT:    vpermt2d %zmm7, %zmm6, %zmm5
2044 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm7 = <128,128,128,128,2,6,10,14,u,u,u,u,u,u,u,u,128,128,128,128,18,22,26,30,u,u,u,u,u,u,u,u,128,128,128,128,34,38,42,46,u,u,u,u,u,u,u,u,128,128,128,128,50,54,58,62,u,u,u,u,u,u,u,u>
2045 ; AVX512BW-NEXT:    vpshufb %zmm7, %zmm3, %zmm8
2046 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm9 = <2,6,10,14,128,128,128,128,u,u,u,u,u,u,u,u,18,22,26,30,128,128,128,128,u,u,u,u,u,u,u,u,34,38,42,46,128,128,128,128,u,u,u,u,u,u,u,u,50,54,58,62,128,128,128,128,u,u,u,u,u,u,u,u>
2047 ; AVX512BW-NEXT:    vpshufb %zmm9, %zmm2, %zmm10
2048 ; AVX512BW-NEXT:    vporq %zmm8, %zmm10, %zmm8
2049 ; AVX512BW-NEXT:    vpshufb %zmm7, %zmm1, %zmm7
2050 ; AVX512BW-NEXT:    vpshufb %zmm9, %zmm0, %zmm9
2051 ; AVX512BW-NEXT:    vporq %zmm7, %zmm9, %zmm7
2052 ; AVX512BW-NEXT:    vpermt2d %zmm8, %zmm6, %zmm7
2053 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm8 = <128,128,128,128,3,7,11,15,u,u,u,u,u,u,u,u,128,128,128,128,19,23,27,31,u,u,u,u,u,u,u,u,128,128,128,128,35,39,43,47,u,u,u,u,u,u,u,u,128,128,128,128,51,55,59,63,u,u,u,u,u,u,u,u>
2054 ; AVX512BW-NEXT:    vpshufb %zmm8, %zmm3, %zmm3
2055 ; AVX512BW-NEXT:    vmovdqa64 {{.*#+}} zmm9 = <3,7,11,15,128,128,128,128,u,u,u,u,u,u,u,u,19,23,27,31,128,128,128,128,u,u,u,u,u,u,u,u,35,39,43,47,128,128,128,128,u,u,u,u,u,u,u,u,51,55,59,63,128,128,128,128,u,u,u,u,u,u,u,u>
2056 ; AVX512BW-NEXT:    vpshufb %zmm9, %zmm2, %zmm2
2057 ; AVX512BW-NEXT:    vporq %zmm3, %zmm2, %zmm2
2058 ; AVX512BW-NEXT:    vpshufb %zmm8, %zmm1, %zmm1
2059 ; AVX512BW-NEXT:    vpshufb %zmm9, %zmm0, %zmm0
2060 ; AVX512BW-NEXT:    vporq %zmm1, %zmm0, %zmm0
2061 ; AVX512BW-NEXT:    vpermt2d %zmm2, %zmm6, %zmm0
2062 ; AVX512BW-NEXT:    vmovdqa64 %zmm4, (%rsi)
2063 ; AVX512BW-NEXT:    vmovdqa64 %zmm5, (%rdx)
2064 ; AVX512BW-NEXT:    vmovdqa64 %zmm7, (%rcx)
2065 ; AVX512BW-NEXT:    vmovdqa64 %zmm0, (%r8)
2066 ; AVX512BW-NEXT:    vzeroupper
2067 ; AVX512BW-NEXT:    retq
2068   %wide.vec = load <256 x i8>, ptr %in.vec, align 64
2069   %strided.vec0 = shufflevector <256 x i8> %wide.vec, <256 x i8> poison, <64 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 20, i32 24, i32 28, i32 32, i32 36, i32 40, i32 44, i32 48, i32 52, i32 56, i32 60, i32 64, i32 68, i32 72, i32 76, i32 80, i32 84, i32 88, i32 92, i32 96, i32 100, i32 104, i32 108, i32 112, i32 116, i32 120, i32 124, i32 128, i32 132, i32 136, i32 140, i32 144, i32 148, i32 152, i32 156, i32 160, i32 164, i32 168, i32 172, i32 176, i32 180, i32 184, i32 188, i32 192, i32 196, i32 200, i32 204, i32 208, i32 212, i32 216, i32 220, i32 224, i32 228, i32 232, i32 236, i32 240, i32 244, i32 248, i32 252>
2070   %strided.vec1 = shufflevector <256 x i8> %wide.vec, <256 x i8> poison, <64 x i32> <i32 1, i32 5, i32 9, i32 13, i32 17, i32 21, i32 25, i32 29, i32 33, i32 37, i32 41, i32 45, i32 49, i32 53, i32 57, i32 61, i32 65, i32 69, i32 73, i32 77, i32 81, i32 85, i32 89, i32 93, i32 97, i32 101, i32 105, i32 109, i32 113, i32 117, i32 121, i32 125, i32 129, i32 133, i32 137, i32 141, i32 145, i32 149, i32 153, i32 157, i32 161, i32 165, i32 169, i32 173, i32 177, i32 181, i32 185, i32 189, i32 193, i32 197, i32 201, i32 205, i32 209, i32 213, i32 217, i32 221, i32 225, i32 229, i32 233, i32 237, i32 241, i32 245, i32 249, i32 253>
2071   %strided.vec2 = shufflevector <256 x i8> %wide.vec, <256 x i8> poison, <64 x i32> <i32 2, i32 6, i32 10, i32 14, i32 18, i32 22, i32 26, i32 30, i32 34, i32 38, i32 42, i32 46, i32 50, i32 54, i32 58, i32 62, i32 66, i32 70, i32 74, i32 78, i32 82, i32 86, i32 90, i32 94, i32 98, i32 102, i32 106, i32 110, i32 114, i32 118, i32 122, i32 126, i32 130, i32 134, i32 138, i32 142, i32 146, i32 150, i32 154, i32 158, i32 162, i32 166, i32 170, i32 174, i32 178, i32 182, i32 186, i32 190, i32 194, i32 198, i32 202, i32 206, i32 210, i32 214, i32 218, i32 222, i32 226, i32 230, i32 234, i32 238, i32 242, i32 246, i32 250, i32 254>
2072   %strided.vec3 = shufflevector <256 x i8> %wide.vec, <256 x i8> poison, <64 x i32> <i32 3, i32 7, i32 11, i32 15, i32 19, i32 23, i32 27, i32 31, i32 35, i32 39, i32 43, i32 47, i32 51, i32 55, i32 59, i32 63, i32 67, i32 71, i32 75, i32 79, i32 83, i32 87, i32 91, i32 95, i32 99, i32 103, i32 107, i32 111, i32 115, i32 119, i32 123, i32 127, i32 131, i32 135, i32 139, i32 143, i32 147, i32 151, i32 155, i32 159, i32 163, i32 167, i32 171, i32 175, i32 179, i32 183, i32 187, i32 191, i32 195, i32 199, i32 203, i32 207, i32 211, i32 215, i32 219, i32 223, i32 227, i32 231, i32 235, i32 239, i32 243, i32 247, i32 251, i32 255>
2073   store <64 x i8> %strided.vec0, ptr %out.vec0, align 64
2074   store <64 x i8> %strided.vec1, ptr %out.vec1, align 64
2075   store <64 x i8> %strided.vec2, ptr %out.vec2, align 64
2076   store <64 x i8> %strided.vec3, ptr %out.vec3, align 64
2077   ret void
2079 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
2080 ; AVX: {{.*}}
2081 ; AVX2: {{.*}}
2082 ; AVX2-FAST: {{.*}}
2083 ; AVX2-FAST-PERLANE: {{.*}}
2084 ; AVX2-SLOW: {{.*}}
2085 ; AVX512-FAST: {{.*}}
2086 ; AVX512-SLOW: {{.*}}
2087 ; AVX512BW-FAST: {{.*}}
2088 ; AVX512BW-ONLY-FAST: {{.*}}
2089 ; AVX512BW-ONLY-SLOW: {{.*}}
2090 ; AVX512BW-SLOW: {{.*}}
2091 ; AVX512DQ-FAST: {{.*}}
2092 ; AVX512DQ-SLOW: {{.*}}
2093 ; AVX512DQBW-FAST: {{.*}}
2094 ; AVX512DQBW-SLOW: {{.*}}
2095 ; AVX512F-FAST: {{.*}}
2096 ; AVX512F-ONLY-FAST: {{.*}}
2097 ; AVX512F-ONLY-SLOW: {{.*}}
2098 ; AVX512F-SLOW: {{.*}}
2099 ; FALLBACK0: {{.*}}
2100 ; FALLBACK1: {{.*}}
2101 ; FALLBACK10: {{.*}}
2102 ; FALLBACK11: {{.*}}
2103 ; FALLBACK12: {{.*}}
2104 ; FALLBACK2: {{.*}}
2105 ; FALLBACK3: {{.*}}
2106 ; FALLBACK4: {{.*}}
2107 ; FALLBACK5: {{.*}}
2108 ; FALLBACK6: {{.*}}
2109 ; FALLBACK7: {{.*}}
2110 ; FALLBACK8: {{.*}}
2111 ; FALLBACK9: {{.*}}