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