OSDN Git Service

[TargetLowering] SimplifyDemandedBits - legal checks for SIGN/ZERO_EXTEND -> ZERO...
[android-x86/external-llvm.git] / test / CodeGen / X86 / masked_expandload.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse2    | FileCheck %s --check-prefixes=SSE,SSE2
3 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse4.2  | FileCheck %s --check-prefixes=SSE,SSE42
4 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx     | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX1
5 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx2    | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX2
6 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512dq,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLDQ
8 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512bw,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLBW
9
10 ;
11 ; vXf64
12 ;
13
14 define <2 x double> @expandload_v2f64_v2i64(double* %base, <2 x double> %src0, <2 x i64> %trigger) {
15 ; SSE2-LABEL: expandload_v2f64_v2i64:
16 ; SSE2:       ## %bb.0:
17 ; SSE2-NEXT:    pxor %xmm2, %xmm2
18 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
19 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
20 ; SSE2-NEXT:    pand %xmm2, %xmm1
21 ; SSE2-NEXT:    movd %xmm1, %eax
22 ; SSE2-NEXT:    testb $1, %al
23 ; SSE2-NEXT:    je LBB0_2
24 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
25 ; SSE2-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
26 ; SSE2-NEXT:    addq $8, %rdi
27 ; SSE2-NEXT:  LBB0_2: ## %else
28 ; SSE2-NEXT:    pextrw $4, %xmm1, %eax
29 ; SSE2-NEXT:    testb $1, %al
30 ; SSE2-NEXT:    je LBB0_4
31 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
32 ; SSE2-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
33 ; SSE2-NEXT:  LBB0_4: ## %else2
34 ; SSE2-NEXT:    retq
35 ;
36 ; SSE42-LABEL: expandload_v2f64_v2i64:
37 ; SSE42:       ## %bb.0:
38 ; SSE42-NEXT:    pxor %xmm2, %xmm2
39 ; SSE42-NEXT:    pcmpeqq %xmm1, %xmm2
40 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
41 ; SSE42-NEXT:    testb $1, %al
42 ; SSE42-NEXT:    je LBB0_2
43 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
44 ; SSE42-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
45 ; SSE42-NEXT:    addq $8, %rdi
46 ; SSE42-NEXT:  LBB0_2: ## %else
47 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
48 ; SSE42-NEXT:    testb $1, %al
49 ; SSE42-NEXT:    je LBB0_4
50 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
51 ; SSE42-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
52 ; SSE42-NEXT:  LBB0_4: ## %else2
53 ; SSE42-NEXT:    retq
54 ;
55 ; AVX1OR2-LABEL: expandload_v2f64_v2i64:
56 ; AVX1OR2:       ## %bb.0:
57 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
58 ; AVX1OR2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
59 ; AVX1OR2-NEXT:    vpextrb $0, %xmm1, %eax
60 ; AVX1OR2-NEXT:    testb $1, %al
61 ; AVX1OR2-NEXT:    je LBB0_2
62 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
63 ; AVX1OR2-NEXT:    vmovlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
64 ; AVX1OR2-NEXT:    addq $8, %rdi
65 ; AVX1OR2-NEXT:  LBB0_2: ## %else
66 ; AVX1OR2-NEXT:    vpextrb $8, %xmm1, %eax
67 ; AVX1OR2-NEXT:    testb $1, %al
68 ; AVX1OR2-NEXT:    je LBB0_4
69 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
70 ; AVX1OR2-NEXT:    vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
71 ; AVX1OR2-NEXT:  LBB0_4: ## %else2
72 ; AVX1OR2-NEXT:    retq
73 ;
74 ; AVX512F-LABEL: expandload_v2f64_v2i64:
75 ; AVX512F:       ## %bb.0:
76 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
77 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
78 ; AVX512F-NEXT:    vptestnmq %zmm1, %zmm1, %k0
79 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
80 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
81 ; AVX512F-NEXT:    vexpandpd (%rdi), %zmm0 {%k1}
82 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
83 ; AVX512F-NEXT:    vzeroupper
84 ; AVX512F-NEXT:    retq
85 ;
86 ; AVX512VL-LABEL: expandload_v2f64_v2i64:
87 ; AVX512VL:       ## %bb.0:
88 ; AVX512VL-NEXT:    vptestnmq %xmm1, %xmm1, %k1
89 ; AVX512VL-NEXT:    vexpandpd (%rdi), %xmm0 {%k1}
90 ; AVX512VL-NEXT:    retq
91   %mask = icmp eq <2 x i64> %trigger, zeroinitializer
92   %res = call <2 x double> @llvm.masked.expandload.v2f64(double* %base, <2 x i1> %mask, <2 x double> %src0)
93   ret <2 x double>%res
94 }
95
96 define <4 x double> @expandload_v4f64_v4i64(double* %base, <4 x double> %src0, <4 x i64> %trigger) {
97 ; SSE2-LABEL: expandload_v4f64_v4i64:
98 ; SSE2:       ## %bb.0:
99 ; SSE2-NEXT:    pxor %xmm4, %xmm4
100 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
101 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,0,3,2]
102 ; SSE2-NEXT:    pand %xmm4, %xmm2
103 ; SSE2-NEXT:    movd %xmm2, %eax
104 ; SSE2-NEXT:    testb $1, %al
105 ; SSE2-NEXT:    je LBB1_2
106 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
107 ; SSE2-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
108 ; SSE2-NEXT:    addq $8, %rdi
109 ; SSE2-NEXT:  LBB1_2: ## %else
110 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
111 ; SSE2-NEXT:    testb $1, %al
112 ; SSE2-NEXT:    je LBB1_4
113 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
114 ; SSE2-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
115 ; SSE2-NEXT:    addq $8, %rdi
116 ; SSE2-NEXT:  LBB1_4: ## %else2
117 ; SSE2-NEXT:    pxor %xmm2, %xmm2
118 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
119 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,0,3,2]
120 ; SSE2-NEXT:    pand %xmm3, %xmm2
121 ; SSE2-NEXT:    pextrw $0, %xmm2, %eax
122 ; SSE2-NEXT:    testb $1, %al
123 ; SSE2-NEXT:    je LBB1_6
124 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
125 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
126 ; SSE2-NEXT:    addq $8, %rdi
127 ; SSE2-NEXT:  LBB1_6: ## %else6
128 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
129 ; SSE2-NEXT:    testb $1, %al
130 ; SSE2-NEXT:    je LBB1_8
131 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
132 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
133 ; SSE2-NEXT:  LBB1_8: ## %else10
134 ; SSE2-NEXT:    retq
135 ;
136 ; SSE42-LABEL: expandload_v4f64_v4i64:
137 ; SSE42:       ## %bb.0:
138 ; SSE42-NEXT:    pxor %xmm4, %xmm4
139 ; SSE42-NEXT:    pcmpeqq %xmm2, %xmm4
140 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
141 ; SSE42-NEXT:    testb $1, %al
142 ; SSE42-NEXT:    je LBB1_2
143 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
144 ; SSE42-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
145 ; SSE42-NEXT:    addq $8, %rdi
146 ; SSE42-NEXT:  LBB1_2: ## %else
147 ; SSE42-NEXT:    pextrb $8, %xmm4, %eax
148 ; SSE42-NEXT:    testb $1, %al
149 ; SSE42-NEXT:    je LBB1_4
150 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
151 ; SSE42-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
152 ; SSE42-NEXT:    addq $8, %rdi
153 ; SSE42-NEXT:  LBB1_4: ## %else2
154 ; SSE42-NEXT:    pxor %xmm2, %xmm2
155 ; SSE42-NEXT:    pcmpeqq %xmm2, %xmm3
156 ; SSE42-NEXT:    pextrb $0, %xmm3, %eax
157 ; SSE42-NEXT:    testb $1, %al
158 ; SSE42-NEXT:    je LBB1_6
159 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
160 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
161 ; SSE42-NEXT:    addq $8, %rdi
162 ; SSE42-NEXT:  LBB1_6: ## %else6
163 ; SSE42-NEXT:    pextrb $8, %xmm3, %eax
164 ; SSE42-NEXT:    testb $1, %al
165 ; SSE42-NEXT:    je LBB1_8
166 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
167 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
168 ; SSE42-NEXT:  LBB1_8: ## %else10
169 ; SSE42-NEXT:    retq
170 ;
171 ; AVX1-LABEL: expandload_v4f64_v4i64:
172 ; AVX1:       ## %bb.0:
173 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
174 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm3
175 ; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
176 ; AVX1-NEXT:    testb $1, %al
177 ; AVX1-NEXT:    je LBB1_2
178 ; AVX1-NEXT:  ## %bb.1: ## %cond.load
179 ; AVX1-NEXT:    vmovsd {{.*#+}} xmm3 = mem[0],zero
180 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm3[0,1],ymm0[2,3,4,5,6,7]
181 ; AVX1-NEXT:    addq $8, %rdi
182 ; AVX1-NEXT:  LBB1_2: ## %else
183 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm2
184 ; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
185 ; AVX1-NEXT:    testb $1, %al
186 ; AVX1-NEXT:    je LBB1_4
187 ; AVX1-NEXT:  ## %bb.3: ## %cond.load1
188 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm2 = xmm0[0],mem[0]
189 ; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm2[0,1],ymm0[2,3]
190 ; AVX1-NEXT:    addq $8, %rdi
191 ; AVX1-NEXT:  LBB1_4: ## %else2
192 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
193 ; AVX1-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
194 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
195 ; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
196 ; AVX1-NEXT:    testb $1, %al
197 ; AVX1-NEXT:    je LBB1_6
198 ; AVX1-NEXT:  ## %bb.5: ## %cond.load5
199 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
200 ; AVX1-NEXT:    vmovlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
201 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
202 ; AVX1-NEXT:    addq $8, %rdi
203 ; AVX1-NEXT:  LBB1_6: ## %else6
204 ; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
205 ; AVX1-NEXT:    testb $1, %al
206 ; AVX1-NEXT:    je LBB1_8
207 ; AVX1-NEXT:  ## %bb.7: ## %cond.load9
208 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
209 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
210 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
211 ; AVX1-NEXT:  LBB1_8: ## %else10
212 ; AVX1-NEXT:    retq
213 ;
214 ; AVX2-LABEL: expandload_v4f64_v4i64:
215 ; AVX2:       ## %bb.0:
216 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
217 ; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm1, %ymm2
218 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
219 ; AVX2-NEXT:    testb $1, %al
220 ; AVX2-NEXT:    je LBB1_2
221 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
222 ; AVX2-NEXT:    vmovsd {{.*#+}} xmm3 = mem[0],zero
223 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm3[0],ymm0[1,2,3]
224 ; AVX2-NEXT:    addq $8, %rdi
225 ; AVX2-NEXT:  LBB1_2: ## %else
226 ; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
227 ; AVX2-NEXT:    testb $1, %al
228 ; AVX2-NEXT:    je LBB1_4
229 ; AVX2-NEXT:  ## %bb.3: ## %cond.load1
230 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm2 = xmm0[0],mem[0]
231 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm2[0,1],ymm0[2,3]
232 ; AVX2-NEXT:    addq $8, %rdi
233 ; AVX2-NEXT:  LBB1_4: ## %else2
234 ; AVX2-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
235 ; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm1, %ymm1
236 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm1
237 ; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
238 ; AVX2-NEXT:    testb $1, %al
239 ; AVX2-NEXT:    je LBB1_6
240 ; AVX2-NEXT:  ## %bb.5: ## %cond.load5
241 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm2
242 ; AVX2-NEXT:    vmovlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
243 ; AVX2-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
244 ; AVX2-NEXT:    addq $8, %rdi
245 ; AVX2-NEXT:  LBB1_6: ## %else6
246 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
247 ; AVX2-NEXT:    testb $1, %al
248 ; AVX2-NEXT:    je LBB1_8
249 ; AVX2-NEXT:  ## %bb.7: ## %cond.load9
250 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
251 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
252 ; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
253 ; AVX2-NEXT:  LBB1_8: ## %else10
254 ; AVX2-NEXT:    retq
255 ;
256 ; AVX512F-LABEL: expandload_v4f64_v4i64:
257 ; AVX512F:       ## %bb.0:
258 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
259 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
260 ; AVX512F-NEXT:    vptestnmq %zmm1, %zmm1, %k0
261 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
262 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
263 ; AVX512F-NEXT:    vexpandpd (%rdi), %zmm0 {%k1}
264 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
265 ; AVX512F-NEXT:    retq
266 ;
267 ; AVX512VL-LABEL: expandload_v4f64_v4i64:
268 ; AVX512VL:       ## %bb.0:
269 ; AVX512VL-NEXT:    vptestnmq %ymm1, %ymm1, %k1
270 ; AVX512VL-NEXT:    vexpandpd (%rdi), %ymm0 {%k1}
271 ; AVX512VL-NEXT:    retq
272   %mask = icmp eq <4 x i64> %trigger, zeroinitializer
273   %res = call <4 x double> @llvm.masked.expandload.v4f64(double* %base, <4 x i1> %mask, <4 x double> %src0)
274   ret <4 x double>%res
275 }
276
277 define <8 x double> @expandload_v8f64_v8i1(double* %base, <8 x double> %src0, <8 x i1> %mask) {
278 ; SSE2-LABEL: expandload_v8f64_v8i1:
279 ; SSE2:       ## %bb.0:
280 ; SSE2-NEXT:    movd %xmm4, %eax
281 ; SSE2-NEXT:    testb $1, %al
282 ; SSE2-NEXT:    je LBB2_2
283 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
284 ; SSE2-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
285 ; SSE2-NEXT:    addq $8, %rdi
286 ; SSE2-NEXT:  LBB2_2: ## %else
287 ; SSE2-NEXT:    shrl $16, %eax
288 ; SSE2-NEXT:    testb $1, %al
289 ; SSE2-NEXT:    je LBB2_4
290 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
291 ; SSE2-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
292 ; SSE2-NEXT:    addq $8, %rdi
293 ; SSE2-NEXT:  LBB2_4: ## %else2
294 ; SSE2-NEXT:    pextrw $2, %xmm4, %eax
295 ; SSE2-NEXT:    testb $1, %al
296 ; SSE2-NEXT:    je LBB2_6
297 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
298 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
299 ; SSE2-NEXT:    addq $8, %rdi
300 ; SSE2-NEXT:  LBB2_6: ## %else6
301 ; SSE2-NEXT:    pextrw $3, %xmm4, %eax
302 ; SSE2-NEXT:    testb $1, %al
303 ; SSE2-NEXT:    je LBB2_8
304 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
305 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
306 ; SSE2-NEXT:    addq $8, %rdi
307 ; SSE2-NEXT:  LBB2_8: ## %else10
308 ; SSE2-NEXT:    pextrw $4, %xmm4, %eax
309 ; SSE2-NEXT:    testb $1, %al
310 ; SSE2-NEXT:    je LBB2_10
311 ; SSE2-NEXT:  ## %bb.9: ## %cond.load13
312 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
313 ; SSE2-NEXT:    addq $8, %rdi
314 ; SSE2-NEXT:  LBB2_10: ## %else14
315 ; SSE2-NEXT:    pextrw $5, %xmm4, %eax
316 ; SSE2-NEXT:    testb $1, %al
317 ; SSE2-NEXT:    je LBB2_12
318 ; SSE2-NEXT:  ## %bb.11: ## %cond.load17
319 ; SSE2-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
320 ; SSE2-NEXT:    addq $8, %rdi
321 ; SSE2-NEXT:  LBB2_12: ## %else18
322 ; SSE2-NEXT:    pextrw $6, %xmm4, %eax
323 ; SSE2-NEXT:    testb $1, %al
324 ; SSE2-NEXT:    je LBB2_14
325 ; SSE2-NEXT:  ## %bb.13: ## %cond.load21
326 ; SSE2-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
327 ; SSE2-NEXT:    addq $8, %rdi
328 ; SSE2-NEXT:  LBB2_14: ## %else22
329 ; SSE2-NEXT:    pextrw $7, %xmm4, %eax
330 ; SSE2-NEXT:    testb $1, %al
331 ; SSE2-NEXT:    je LBB2_16
332 ; SSE2-NEXT:  ## %bb.15: ## %cond.load25
333 ; SSE2-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
334 ; SSE2-NEXT:  LBB2_16: ## %else26
335 ; SSE2-NEXT:    retq
336 ;
337 ; SSE42-LABEL: expandload_v8f64_v8i1:
338 ; SSE42:       ## %bb.0:
339 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
340 ; SSE42-NEXT:    testb $1, %al
341 ; SSE42-NEXT:    je LBB2_2
342 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
343 ; SSE42-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
344 ; SSE42-NEXT:    addq $8, %rdi
345 ; SSE42-NEXT:  LBB2_2: ## %else
346 ; SSE42-NEXT:    pextrb $2, %xmm4, %eax
347 ; SSE42-NEXT:    testb $1, %al
348 ; SSE42-NEXT:    je LBB2_4
349 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
350 ; SSE42-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
351 ; SSE42-NEXT:    addq $8, %rdi
352 ; SSE42-NEXT:  LBB2_4: ## %else2
353 ; SSE42-NEXT:    pextrb $4, %xmm4, %eax
354 ; SSE42-NEXT:    testb $1, %al
355 ; SSE42-NEXT:    je LBB2_6
356 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
357 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
358 ; SSE42-NEXT:    addq $8, %rdi
359 ; SSE42-NEXT:  LBB2_6: ## %else6
360 ; SSE42-NEXT:    pextrb $6, %xmm4, %eax
361 ; SSE42-NEXT:    testb $1, %al
362 ; SSE42-NEXT:    je LBB2_8
363 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
364 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
365 ; SSE42-NEXT:    addq $8, %rdi
366 ; SSE42-NEXT:  LBB2_8: ## %else10
367 ; SSE42-NEXT:    pextrb $8, %xmm4, %eax
368 ; SSE42-NEXT:    testb $1, %al
369 ; SSE42-NEXT:    je LBB2_10
370 ; SSE42-NEXT:  ## %bb.9: ## %cond.load13
371 ; SSE42-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
372 ; SSE42-NEXT:    addq $8, %rdi
373 ; SSE42-NEXT:  LBB2_10: ## %else14
374 ; SSE42-NEXT:    pextrb $10, %xmm4, %eax
375 ; SSE42-NEXT:    testb $1, %al
376 ; SSE42-NEXT:    je LBB2_12
377 ; SSE42-NEXT:  ## %bb.11: ## %cond.load17
378 ; SSE42-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
379 ; SSE42-NEXT:    addq $8, %rdi
380 ; SSE42-NEXT:  LBB2_12: ## %else18
381 ; SSE42-NEXT:    pextrb $12, %xmm4, %eax
382 ; SSE42-NEXT:    testb $1, %al
383 ; SSE42-NEXT:    je LBB2_14
384 ; SSE42-NEXT:  ## %bb.13: ## %cond.load21
385 ; SSE42-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
386 ; SSE42-NEXT:    addq $8, %rdi
387 ; SSE42-NEXT:  LBB2_14: ## %else22
388 ; SSE42-NEXT:    pextrb $14, %xmm4, %eax
389 ; SSE42-NEXT:    testb $1, %al
390 ; SSE42-NEXT:    je LBB2_16
391 ; SSE42-NEXT:  ## %bb.15: ## %cond.load25
392 ; SSE42-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
393 ; SSE42-NEXT:  LBB2_16: ## %else26
394 ; SSE42-NEXT:    retq
395 ;
396 ; AVX1OR2-LABEL: expandload_v8f64_v8i1:
397 ; AVX1OR2:       ## %bb.0:
398 ; AVX1OR2-NEXT:    vpextrb $0, %xmm2, %eax
399 ; AVX1OR2-NEXT:    testb $1, %al
400 ; AVX1OR2-NEXT:    je LBB2_2
401 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
402 ; AVX1OR2-NEXT:    vmovsd {{.*#+}} xmm3 = mem[0],zero
403 ; AVX1OR2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm3[0],ymm0[1,2,3]
404 ; AVX1OR2-NEXT:    addq $8, %rdi
405 ; AVX1OR2-NEXT:  LBB2_2: ## %else
406 ; AVX1OR2-NEXT:    vpextrb $2, %xmm2, %eax
407 ; AVX1OR2-NEXT:    testb $1, %al
408 ; AVX1OR2-NEXT:    je LBB2_4
409 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
410 ; AVX1OR2-NEXT:    vmovhpd {{.*#+}} xmm3 = xmm0[0],mem[0]
411 ; AVX1OR2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm3[0,1],ymm0[2,3]
412 ; AVX1OR2-NEXT:    addq $8, %rdi
413 ; AVX1OR2-NEXT:  LBB2_4: ## %else2
414 ; AVX1OR2-NEXT:    vpextrb $4, %xmm2, %eax
415 ; AVX1OR2-NEXT:    testb $1, %al
416 ; AVX1OR2-NEXT:    je LBB2_6
417 ; AVX1OR2-NEXT:  ## %bb.5: ## %cond.load5
418 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm0, %xmm3
419 ; AVX1OR2-NEXT:    vmovlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
420 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0
421 ; AVX1OR2-NEXT:    addq $8, %rdi
422 ; AVX1OR2-NEXT:  LBB2_6: ## %else6
423 ; AVX1OR2-NEXT:    vpextrb $6, %xmm2, %eax
424 ; AVX1OR2-NEXT:    testb $1, %al
425 ; AVX1OR2-NEXT:    je LBB2_8
426 ; AVX1OR2-NEXT:  ## %bb.7: ## %cond.load9
427 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm0, %xmm3
428 ; AVX1OR2-NEXT:    vmovhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
429 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0
430 ; AVX1OR2-NEXT:    addq $8, %rdi
431 ; AVX1OR2-NEXT:  LBB2_8: ## %else10
432 ; AVX1OR2-NEXT:    vpextrb $8, %xmm2, %eax
433 ; AVX1OR2-NEXT:    testb $1, %al
434 ; AVX1OR2-NEXT:    je LBB2_10
435 ; AVX1OR2-NEXT:  ## %bb.9: ## %cond.load13
436 ; AVX1OR2-NEXT:    vmovsd {{.*#+}} xmm3 = mem[0],zero
437 ; AVX1OR2-NEXT:    vblendpd {{.*#+}} ymm1 = ymm3[0],ymm1[1,2,3]
438 ; AVX1OR2-NEXT:    addq $8, %rdi
439 ; AVX1OR2-NEXT:  LBB2_10: ## %else14
440 ; AVX1OR2-NEXT:    vpextrb $10, %xmm2, %eax
441 ; AVX1OR2-NEXT:    testb $1, %al
442 ; AVX1OR2-NEXT:    je LBB2_12
443 ; AVX1OR2-NEXT:  ## %bb.11: ## %cond.load17
444 ; AVX1OR2-NEXT:    vmovhpd {{.*#+}} xmm3 = xmm1[0],mem[0]
445 ; AVX1OR2-NEXT:    vblendpd {{.*#+}} ymm1 = ymm3[0,1],ymm1[2,3]
446 ; AVX1OR2-NEXT:    addq $8, %rdi
447 ; AVX1OR2-NEXT:  LBB2_12: ## %else18
448 ; AVX1OR2-NEXT:    vpextrb $12, %xmm2, %eax
449 ; AVX1OR2-NEXT:    testb $1, %al
450 ; AVX1OR2-NEXT:    je LBB2_14
451 ; AVX1OR2-NEXT:  ## %bb.13: ## %cond.load21
452 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm1, %xmm3
453 ; AVX1OR2-NEXT:    vmovlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
454 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
455 ; AVX1OR2-NEXT:    addq $8, %rdi
456 ; AVX1OR2-NEXT:  LBB2_14: ## %else22
457 ; AVX1OR2-NEXT:    vpextrb $14, %xmm2, %eax
458 ; AVX1OR2-NEXT:    testb $1, %al
459 ; AVX1OR2-NEXT:    je LBB2_16
460 ; AVX1OR2-NEXT:  ## %bb.15: ## %cond.load25
461 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm1, %xmm2
462 ; AVX1OR2-NEXT:    vmovhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
463 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
464 ; AVX1OR2-NEXT:  LBB2_16: ## %else26
465 ; AVX1OR2-NEXT:    retq
466 ;
467 ; AVX512F-LABEL: expandload_v8f64_v8i1:
468 ; AVX512F:       ## %bb.0:
469 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
470 ; AVX512F-NEXT:    vpsllq $63, %zmm1, %zmm1
471 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k1
472 ; AVX512F-NEXT:    vexpandpd (%rdi), %zmm0 {%k1}
473 ; AVX512F-NEXT:    retq
474 ;
475 ; AVX512VLDQ-LABEL: expandload_v8f64_v8i1:
476 ; AVX512VLDQ:       ## %bb.0:
477 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm1, %ymm1
478 ; AVX512VLDQ-NEXT:    vpslld $31, %ymm1, %ymm1
479 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm1, %k1
480 ; AVX512VLDQ-NEXT:    vexpandpd (%rdi), %zmm0 {%k1}
481 ; AVX512VLDQ-NEXT:    retq
482 ;
483 ; AVX512VLBW-LABEL: expandload_v8f64_v8i1:
484 ; AVX512VLBW:       ## %bb.0:
485 ; AVX512VLBW-NEXT:    vpsllw $15, %xmm1, %xmm1
486 ; AVX512VLBW-NEXT:    vpmovw2m %xmm1, %k1
487 ; AVX512VLBW-NEXT:    vexpandpd (%rdi), %zmm0 {%k1}
488 ; AVX512VLBW-NEXT:    retq
489   %res = call <8 x double> @llvm.masked.expandload.v8f64(double* %base, <8 x i1> %mask, <8 x double> %src0)
490   ret <8 x double>%res
491 }
492
493 define <16 x double> @expandload_v16f64_v16i32(double* %base, <16 x double> %src0, <16 x i32> %trigger) {
494 ; SSE2-LABEL: expandload_v16f64_v16i32:
495 ; SSE2:       ## %bb.0:
496 ; SSE2-NEXT:    movq %rdi, %rax
497 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
498 ; SSE2-NEXT:    pxor %xmm8, %xmm8
499 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
500 ; SSE2-NEXT:    movd %xmm8, %ecx
501 ; SSE2-NEXT:    testb $1, %cl
502 ; SSE2-NEXT:    je LBB3_2
503 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
504 ; SSE2-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
505 ; SSE2-NEXT:    addq $8, %rsi
506 ; SSE2-NEXT:  LBB3_2: ## %else
507 ; SSE2-NEXT:    pextrw $2, %xmm8, %ecx
508 ; SSE2-NEXT:    testb $1, %cl
509 ; SSE2-NEXT:    je LBB3_4
510 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
511 ; SSE2-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
512 ; SSE2-NEXT:    addq $8, %rsi
513 ; SSE2-NEXT:  LBB3_4: ## %else2
514 ; SSE2-NEXT:    pxor %xmm8, %xmm8
515 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
516 ; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
517 ; SSE2-NEXT:    testb $1, %cl
518 ; SSE2-NEXT:    je LBB3_6
519 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
520 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
521 ; SSE2-NEXT:    addq $8, %rsi
522 ; SSE2-NEXT:  LBB3_6: ## %else6
523 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
524 ; SSE2-NEXT:    pextrw $6, %xmm9, %ecx
525 ; SSE2-NEXT:    testb $1, %cl
526 ; SSE2-NEXT:    je LBB3_8
527 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
528 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
529 ; SSE2-NEXT:    addq $8, %rsi
530 ; SSE2-NEXT:  LBB3_8: ## %else10
531 ; SSE2-NEXT:    pxor %xmm9, %xmm9
532 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
533 ; SSE2-NEXT:    movd %xmm9, %ecx
534 ; SSE2-NEXT:    testb $1, %cl
535 ; SSE2-NEXT:    je LBB3_10
536 ; SSE2-NEXT:  ## %bb.9: ## %cond.load13
537 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
538 ; SSE2-NEXT:    addq $8, %rsi
539 ; SSE2-NEXT:  LBB3_10: ## %else14
540 ; SSE2-NEXT:    pextrw $2, %xmm9, %ecx
541 ; SSE2-NEXT:    testb $1, %cl
542 ; SSE2-NEXT:    je LBB3_12
543 ; SSE2-NEXT:  ## %bb.11: ## %cond.load17
544 ; SSE2-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
545 ; SSE2-NEXT:    addq $8, %rsi
546 ; SSE2-NEXT:  LBB3_12: ## %else18
547 ; SSE2-NEXT:    pxor %xmm9, %xmm9
548 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
549 ; SSE2-NEXT:    pextrw $4, %xmm8, %ecx
550 ; SSE2-NEXT:    testb $1, %cl
551 ; SSE2-NEXT:    je LBB3_14
552 ; SSE2-NEXT:  ## %bb.13: ## %cond.load21
553 ; SSE2-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
554 ; SSE2-NEXT:    addq $8, %rsi
555 ; SSE2-NEXT:  LBB3_14: ## %else22
556 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
557 ; SSE2-NEXT:    pextrw $6, %xmm8, %ecx
558 ; SSE2-NEXT:    testb $1, %cl
559 ; SSE2-NEXT:    je LBB3_16
560 ; SSE2-NEXT:  ## %bb.15: ## %cond.load25
561 ; SSE2-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
562 ; SSE2-NEXT:    addq $8, %rsi
563 ; SSE2-NEXT:  LBB3_16: ## %else26
564 ; SSE2-NEXT:    pxor %xmm8, %xmm8
565 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
566 ; SSE2-NEXT:    movd %xmm8, %ecx
567 ; SSE2-NEXT:    testb $1, %cl
568 ; SSE2-NEXT:    je LBB3_18
569 ; SSE2-NEXT:  ## %bb.17: ## %cond.load29
570 ; SSE2-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
571 ; SSE2-NEXT:    addq $8, %rsi
572 ; SSE2-NEXT:  LBB3_18: ## %else30
573 ; SSE2-NEXT:    pextrw $2, %xmm8, %ecx
574 ; SSE2-NEXT:    testb $1, %cl
575 ; SSE2-NEXT:    je LBB3_20
576 ; SSE2-NEXT:  ## %bb.19: ## %cond.load33
577 ; SSE2-NEXT:    movhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
578 ; SSE2-NEXT:    addq $8, %rsi
579 ; SSE2-NEXT:  LBB3_20: ## %else34
580 ; SSE2-NEXT:    pxor %xmm8, %xmm8
581 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
582 ; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
583 ; SSE2-NEXT:    testb $1, %cl
584 ; SSE2-NEXT:    je LBB3_22
585 ; SSE2-NEXT:  ## %bb.21: ## %cond.load37
586 ; SSE2-NEXT:    movlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
587 ; SSE2-NEXT:    addq $8, %rsi
588 ; SSE2-NEXT:  LBB3_22: ## %else38
589 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
590 ; SSE2-NEXT:    pextrw $6, %xmm9, %ecx
591 ; SSE2-NEXT:    testb $1, %cl
592 ; SSE2-NEXT:    je LBB3_24
593 ; SSE2-NEXT:  ## %bb.23: ## %cond.load41
594 ; SSE2-NEXT:    movhpd {{.*#+}} xmm5 = xmm5[0],mem[0]
595 ; SSE2-NEXT:    addq $8, %rsi
596 ; SSE2-NEXT:  LBB3_24: ## %else42
597 ; SSE2-NEXT:    pxor %xmm9, %xmm9
598 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
599 ; SSE2-NEXT:    movd %xmm9, %ecx
600 ; SSE2-NEXT:    testb $1, %cl
601 ; SSE2-NEXT:    je LBB3_26
602 ; SSE2-NEXT:  ## %bb.25: ## %cond.load45
603 ; SSE2-NEXT:    movlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
604 ; SSE2-NEXT:    addq $8, %rsi
605 ; SSE2-NEXT:  LBB3_26: ## %else46
606 ; SSE2-NEXT:    pextrw $2, %xmm9, %ecx
607 ; SSE2-NEXT:    testb $1, %cl
608 ; SSE2-NEXT:    je LBB3_28
609 ; SSE2-NEXT:  ## %bb.27: ## %cond.load49
610 ; SSE2-NEXT:    movhpd {{.*#+}} xmm6 = xmm6[0],mem[0]
611 ; SSE2-NEXT:    addq $8, %rsi
612 ; SSE2-NEXT:  LBB3_28: ## %else50
613 ; SSE2-NEXT:    pxor %xmm9, %xmm9
614 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
615 ; SSE2-NEXT:    pextrw $4, %xmm8, %ecx
616 ; SSE2-NEXT:    testb $1, %cl
617 ; SSE2-NEXT:    je LBB3_30
618 ; SSE2-NEXT:  ## %bb.29: ## %cond.load53
619 ; SSE2-NEXT:    movlpd {{.*#+}} xmm7 = mem[0],xmm7[1]
620 ; SSE2-NEXT:    addq $8, %rsi
621 ; SSE2-NEXT:  LBB3_30: ## %else54
622 ; SSE2-NEXT:    pextrw $6, %xmm8, %ecx
623 ; SSE2-NEXT:    testb $1, %cl
624 ; SSE2-NEXT:    je LBB3_32
625 ; SSE2-NEXT:  ## %bb.31: ## %cond.load57
626 ; SSE2-NEXT:    movhpd {{.*#+}} xmm7 = xmm7[0],mem[0]
627 ; SSE2-NEXT:  LBB3_32: ## %else58
628 ; SSE2-NEXT:    movapd %xmm0, (%rax)
629 ; SSE2-NEXT:    movapd %xmm1, 16(%rax)
630 ; SSE2-NEXT:    movapd %xmm2, 32(%rax)
631 ; SSE2-NEXT:    movapd %xmm3, 48(%rax)
632 ; SSE2-NEXT:    movapd %xmm4, 64(%rax)
633 ; SSE2-NEXT:    movapd %xmm5, 80(%rax)
634 ; SSE2-NEXT:    movapd %xmm6, 96(%rax)
635 ; SSE2-NEXT:    movapd %xmm7, 112(%rax)
636 ; SSE2-NEXT:    retq
637 ;
638 ; SSE42-LABEL: expandload_v16f64_v16i32:
639 ; SSE42:       ## %bb.0:
640 ; SSE42-NEXT:    movq %rdi, %rax
641 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
642 ; SSE42-NEXT:    pxor %xmm8, %xmm8
643 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
644 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
645 ; SSE42-NEXT:    testb $1, %cl
646 ; SSE42-NEXT:    je LBB3_2
647 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
648 ; SSE42-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
649 ; SSE42-NEXT:    addq $8, %rsi
650 ; SSE42-NEXT:  LBB3_2: ## %else
651 ; SSE42-NEXT:    pextrb $4, %xmm8, %ecx
652 ; SSE42-NEXT:    testb $1, %cl
653 ; SSE42-NEXT:    je LBB3_4
654 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
655 ; SSE42-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
656 ; SSE42-NEXT:    addq $8, %rsi
657 ; SSE42-NEXT:  LBB3_4: ## %else2
658 ; SSE42-NEXT:    pxor %xmm8, %xmm8
659 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
660 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
661 ; SSE42-NEXT:    testb $1, %cl
662 ; SSE42-NEXT:    je LBB3_6
663 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
664 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
665 ; SSE42-NEXT:    addq $8, %rsi
666 ; SSE42-NEXT:  LBB3_6: ## %else6
667 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
668 ; SSE42-NEXT:    pextrb $12, %xmm9, %ecx
669 ; SSE42-NEXT:    testb $1, %cl
670 ; SSE42-NEXT:    je LBB3_8
671 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
672 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
673 ; SSE42-NEXT:    addq $8, %rsi
674 ; SSE42-NEXT:  LBB3_8: ## %else10
675 ; SSE42-NEXT:    pxor %xmm9, %xmm9
676 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
677 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
678 ; SSE42-NEXT:    testb $1, %cl
679 ; SSE42-NEXT:    je LBB3_10
680 ; SSE42-NEXT:  ## %bb.9: ## %cond.load13
681 ; SSE42-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
682 ; SSE42-NEXT:    addq $8, %rsi
683 ; SSE42-NEXT:  LBB3_10: ## %else14
684 ; SSE42-NEXT:    pextrb $4, %xmm9, %ecx
685 ; SSE42-NEXT:    testb $1, %cl
686 ; SSE42-NEXT:    je LBB3_12
687 ; SSE42-NEXT:  ## %bb.11: ## %cond.load17
688 ; SSE42-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
689 ; SSE42-NEXT:    addq $8, %rsi
690 ; SSE42-NEXT:  LBB3_12: ## %else18
691 ; SSE42-NEXT:    pxor %xmm9, %xmm9
692 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
693 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
694 ; SSE42-NEXT:    testb $1, %cl
695 ; SSE42-NEXT:    je LBB3_14
696 ; SSE42-NEXT:  ## %bb.13: ## %cond.load21
697 ; SSE42-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
698 ; SSE42-NEXT:    addq $8, %rsi
699 ; SSE42-NEXT:  LBB3_14: ## %else22
700 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
701 ; SSE42-NEXT:    pextrb $12, %xmm8, %ecx
702 ; SSE42-NEXT:    testb $1, %cl
703 ; SSE42-NEXT:    je LBB3_16
704 ; SSE42-NEXT:  ## %bb.15: ## %cond.load25
705 ; SSE42-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
706 ; SSE42-NEXT:    addq $8, %rsi
707 ; SSE42-NEXT:  LBB3_16: ## %else26
708 ; SSE42-NEXT:    pxor %xmm8, %xmm8
709 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
710 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
711 ; SSE42-NEXT:    testb $1, %cl
712 ; SSE42-NEXT:    je LBB3_18
713 ; SSE42-NEXT:  ## %bb.17: ## %cond.load29
714 ; SSE42-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
715 ; SSE42-NEXT:    addq $8, %rsi
716 ; SSE42-NEXT:  LBB3_18: ## %else30
717 ; SSE42-NEXT:    pextrb $4, %xmm8, %ecx
718 ; SSE42-NEXT:    testb $1, %cl
719 ; SSE42-NEXT:    je LBB3_20
720 ; SSE42-NEXT:  ## %bb.19: ## %cond.load33
721 ; SSE42-NEXT:    movhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
722 ; SSE42-NEXT:    addq $8, %rsi
723 ; SSE42-NEXT:  LBB3_20: ## %else34
724 ; SSE42-NEXT:    pxor %xmm8, %xmm8
725 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
726 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
727 ; SSE42-NEXT:    testb $1, %cl
728 ; SSE42-NEXT:    je LBB3_22
729 ; SSE42-NEXT:  ## %bb.21: ## %cond.load37
730 ; SSE42-NEXT:    movlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
731 ; SSE42-NEXT:    addq $8, %rsi
732 ; SSE42-NEXT:  LBB3_22: ## %else38
733 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
734 ; SSE42-NEXT:    pextrb $12, %xmm9, %ecx
735 ; SSE42-NEXT:    testb $1, %cl
736 ; SSE42-NEXT:    je LBB3_24
737 ; SSE42-NEXT:  ## %bb.23: ## %cond.load41
738 ; SSE42-NEXT:    movhpd {{.*#+}} xmm5 = xmm5[0],mem[0]
739 ; SSE42-NEXT:    addq $8, %rsi
740 ; SSE42-NEXT:  LBB3_24: ## %else42
741 ; SSE42-NEXT:    pxor %xmm9, %xmm9
742 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
743 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
744 ; SSE42-NEXT:    testb $1, %cl
745 ; SSE42-NEXT:    je LBB3_26
746 ; SSE42-NEXT:  ## %bb.25: ## %cond.load45
747 ; SSE42-NEXT:    movlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
748 ; SSE42-NEXT:    addq $8, %rsi
749 ; SSE42-NEXT:  LBB3_26: ## %else46
750 ; SSE42-NEXT:    pextrb $4, %xmm9, %ecx
751 ; SSE42-NEXT:    testb $1, %cl
752 ; SSE42-NEXT:    je LBB3_28
753 ; SSE42-NEXT:  ## %bb.27: ## %cond.load49
754 ; SSE42-NEXT:    movhpd {{.*#+}} xmm6 = xmm6[0],mem[0]
755 ; SSE42-NEXT:    addq $8, %rsi
756 ; SSE42-NEXT:  LBB3_28: ## %else50
757 ; SSE42-NEXT:    pxor %xmm9, %xmm9
758 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
759 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
760 ; SSE42-NEXT:    testb $1, %cl
761 ; SSE42-NEXT:    je LBB3_30
762 ; SSE42-NEXT:  ## %bb.29: ## %cond.load53
763 ; SSE42-NEXT:    movlpd {{.*#+}} xmm7 = mem[0],xmm7[1]
764 ; SSE42-NEXT:    addq $8, %rsi
765 ; SSE42-NEXT:  LBB3_30: ## %else54
766 ; SSE42-NEXT:    pextrb $12, %xmm8, %ecx
767 ; SSE42-NEXT:    testb $1, %cl
768 ; SSE42-NEXT:    je LBB3_32
769 ; SSE42-NEXT:  ## %bb.31: ## %cond.load57
770 ; SSE42-NEXT:    movhpd {{.*#+}} xmm7 = xmm7[0],mem[0]
771 ; SSE42-NEXT:  LBB3_32: ## %else58
772 ; SSE42-NEXT:    movapd %xmm0, (%rax)
773 ; SSE42-NEXT:    movapd %xmm1, 16(%rax)
774 ; SSE42-NEXT:    movapd %xmm2, 32(%rax)
775 ; SSE42-NEXT:    movapd %xmm3, 48(%rax)
776 ; SSE42-NEXT:    movapd %xmm4, 64(%rax)
777 ; SSE42-NEXT:    movapd %xmm5, 80(%rax)
778 ; SSE42-NEXT:    movapd %xmm6, 96(%rax)
779 ; SSE42-NEXT:    movapd %xmm7, 112(%rax)
780 ; SSE42-NEXT:    retq
781 ;
782 ; AVX1-LABEL: expandload_v16f64_v16i32:
783 ; AVX1:       ## %bb.0:
784 ; AVX1-NEXT:    vpxor %xmm6, %xmm6, %xmm6
785 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm7
786 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm7, %xmm7
787 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
788 ; AVX1-NEXT:    vpextrb $0, %xmm7, %eax
789 ; AVX1-NEXT:    testb $1, %al
790 ; AVX1-NEXT:    je LBB3_2
791 ; AVX1-NEXT:  ## %bb.1: ## %cond.load
792 ; AVX1-NEXT:    vmovsd {{.*#+}} xmm7 = mem[0],zero
793 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm7[0,1],ymm0[2,3,4,5,6,7]
794 ; AVX1-NEXT:    addq $8, %rdi
795 ; AVX1-NEXT:  LBB3_2: ## %else
796 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm6
797 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
798 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
799 ; AVX1-NEXT:    vpextrb $1, %xmm6, %eax
800 ; AVX1-NEXT:    testb $1, %al
801 ; AVX1-NEXT:    je LBB3_4
802 ; AVX1-NEXT:  ## %bb.3: ## %cond.load1
803 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm6 = xmm0[0],mem[0]
804 ; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm6[0,1],ymm0[2,3]
805 ; AVX1-NEXT:    addq $8, %rdi
806 ; AVX1-NEXT:  LBB3_4: ## %else2
807 ; AVX1-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
808 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm7
809 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm7, %xmm7
810 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
811 ; AVX1-NEXT:    vpextrb $2, %xmm7, %eax
812 ; AVX1-NEXT:    testb $1, %al
813 ; AVX1-NEXT:    je LBB3_6
814 ; AVX1-NEXT:  ## %bb.5: ## %cond.load5
815 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
816 ; AVX1-NEXT:    vmovlpd {{.*#+}} xmm7 = mem[0],xmm7[1]
817 ; AVX1-NEXT:    vinsertf128 $1, %xmm7, %ymm0, %ymm0
818 ; AVX1-NEXT:    addq $8, %rdi
819 ; AVX1-NEXT:  LBB3_6: ## %else6
820 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm6
821 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
822 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
823 ; AVX1-NEXT:    vpextrb $3, %xmm6, %eax
824 ; AVX1-NEXT:    testb $1, %al
825 ; AVX1-NEXT:    je LBB3_8
826 ; AVX1-NEXT:  ## %bb.7: ## %cond.load9
827 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
828 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm6 = xmm6[0],mem[0]
829 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
830 ; AVX1-NEXT:    addq $8, %rdi
831 ; AVX1-NEXT:  LBB3_8: ## %else10
832 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
833 ; AVX1-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
834 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm6
835 ; AVX1-NEXT:    vpackssdw %xmm6, %xmm0, %xmm7
836 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
837 ; AVX1-NEXT:    vpextrb $4, %xmm7, %eax
838 ; AVX1-NEXT:    testb $1, %al
839 ; AVX1-NEXT:    je LBB3_10
840 ; AVX1-NEXT:  ## %bb.9: ## %cond.load13
841 ; AVX1-NEXT:    vmovsd {{.*#+}} xmm7 = mem[0],zero
842 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm7[0,1],ymm1[2,3,4,5,6,7]
843 ; AVX1-NEXT:    addq $8, %rdi
844 ; AVX1-NEXT:  LBB3_10: ## %else14
845 ; AVX1-NEXT:    vpackssdw %xmm6, %xmm0, %xmm6
846 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
847 ; AVX1-NEXT:    vpextrb $5, %xmm6, %eax
848 ; AVX1-NEXT:    testb $1, %al
849 ; AVX1-NEXT:    je LBB3_12
850 ; AVX1-NEXT:  ## %bb.11: ## %cond.load17
851 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm6 = xmm1[0],mem[0]
852 ; AVX1-NEXT:    vblendpd {{.*#+}} ymm1 = ymm6[0,1],ymm1[2,3]
853 ; AVX1-NEXT:    addq $8, %rdi
854 ; AVX1-NEXT:  LBB3_12: ## %else18
855 ; AVX1-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
856 ; AVX1-NEXT:    vpcmpeqd %xmm6, %xmm4, %xmm4
857 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm6
858 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
859 ; AVX1-NEXT:    vpextrb $6, %xmm6, %eax
860 ; AVX1-NEXT:    testb $1, %al
861 ; AVX1-NEXT:    je LBB3_14
862 ; AVX1-NEXT:  ## %bb.13: ## %cond.load21
863 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
864 ; AVX1-NEXT:    vmovlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
865 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm1, %ymm1
866 ; AVX1-NEXT:    addq $8, %rdi
867 ; AVX1-NEXT:  LBB3_14: ## %else22
868 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
869 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
870 ; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
871 ; AVX1-NEXT:    testb $1, %al
872 ; AVX1-NEXT:    je LBB3_16
873 ; AVX1-NEXT:  ## %bb.15: ## %cond.load25
874 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
875 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
876 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
877 ; AVX1-NEXT:    addq $8, %rdi
878 ; AVX1-NEXT:  LBB3_16: ## %else26
879 ; AVX1-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
880 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm6
881 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
882 ; AVX1-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
883 ; AVX1-NEXT:    vpextrb $8, %xmm6, %eax
884 ; AVX1-NEXT:    testb $1, %al
885 ; AVX1-NEXT:    je LBB3_18
886 ; AVX1-NEXT:  ## %bb.17: ## %cond.load29
887 ; AVX1-NEXT:    vmovsd {{.*#+}} xmm6 = mem[0],zero
888 ; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm6[0,1],ymm2[2,3,4,5,6,7]
889 ; AVX1-NEXT:    addq $8, %rdi
890 ; AVX1-NEXT:  LBB3_18: ## %else30
891 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm4
892 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
893 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
894 ; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
895 ; AVX1-NEXT:    testb $1, %al
896 ; AVX1-NEXT:    je LBB3_20
897 ; AVX1-NEXT:  ## %bb.19: ## %cond.load33
898 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm2[0],mem[0]
899 ; AVX1-NEXT:    vblendpd {{.*#+}} ymm2 = ymm4[0,1],ymm2[2,3]
900 ; AVX1-NEXT:    addq $8, %rdi
901 ; AVX1-NEXT:  LBB3_20: ## %else34
902 ; AVX1-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
903 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm6
904 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
905 ; AVX1-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
906 ; AVX1-NEXT:    vpextrb $10, %xmm6, %eax
907 ; AVX1-NEXT:    testb $1, %al
908 ; AVX1-NEXT:    je LBB3_22
909 ; AVX1-NEXT:  ## %bb.21: ## %cond.load37
910 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
911 ; AVX1-NEXT:    vmovlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
912 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm2, %ymm2
913 ; AVX1-NEXT:    addq $8, %rdi
914 ; AVX1-NEXT:  LBB3_22: ## %else38
915 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm5, %xmm4
916 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
917 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
918 ; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
919 ; AVX1-NEXT:    testb $1, %al
920 ; AVX1-NEXT:    je LBB3_24
921 ; AVX1-NEXT:  ## %bb.23: ## %cond.load41
922 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
923 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
924 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
925 ; AVX1-NEXT:    addq $8, %rdi
926 ; AVX1-NEXT:  LBB3_24: ## %else42
927 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm4
928 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
929 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm5
930 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm6
931 ; AVX1-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
932 ; AVX1-NEXT:    vpextrb $12, %xmm6, %eax
933 ; AVX1-NEXT:    testb $1, %al
934 ; AVX1-NEXT:    je LBB3_26
935 ; AVX1-NEXT:  ## %bb.25: ## %cond.load45
936 ; AVX1-NEXT:    vmovsd {{.*#+}} xmm6 = mem[0],zero
937 ; AVX1-NEXT:    vblendps {{.*#+}} ymm3 = ymm6[0,1],ymm3[2,3,4,5,6,7]
938 ; AVX1-NEXT:    addq $8, %rdi
939 ; AVX1-NEXT:  LBB3_26: ## %else46
940 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm5
941 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
942 ; AVX1-NEXT:    vpextrb $13, %xmm5, %eax
943 ; AVX1-NEXT:    testb $1, %al
944 ; AVX1-NEXT:    je LBB3_28
945 ; AVX1-NEXT:  ## %bb.27: ## %cond.load49
946 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm5 = xmm3[0],mem[0]
947 ; AVX1-NEXT:    vblendpd {{.*#+}} ymm3 = ymm5[0,1],ymm3[2,3]
948 ; AVX1-NEXT:    addq $8, %rdi
949 ; AVX1-NEXT:  LBB3_28: ## %else50
950 ; AVX1-NEXT:    vxorpd %xmm5, %xmm5, %xmm5
951 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
952 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
953 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
954 ; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
955 ; AVX1-NEXT:    testb $1, %al
956 ; AVX1-NEXT:    je LBB3_30
957 ; AVX1-NEXT:  ## %bb.29: ## %cond.load53
958 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
959 ; AVX1-NEXT:    vmovlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
960 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
961 ; AVX1-NEXT:    addq $8, %rdi
962 ; AVX1-NEXT:  LBB3_30: ## %else54
963 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
964 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
965 ; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
966 ; AVX1-NEXT:    testb $1, %al
967 ; AVX1-NEXT:    je LBB3_32
968 ; AVX1-NEXT:  ## %bb.31: ## %cond.load57
969 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
970 ; AVX1-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
971 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
972 ; AVX1-NEXT:  LBB3_32: ## %else58
973 ; AVX1-NEXT:    retq
974 ;
975 ; AVX2-LABEL: expandload_v16f64_v16i32:
976 ; AVX2:       ## %bb.0:
977 ; AVX2-NEXT:    vpxor %xmm6, %xmm6, %xmm6
978 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm6
979 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm7
980 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
981 ; AVX2-NEXT:    vpextrb $0, %xmm7, %eax
982 ; AVX2-NEXT:    testb $1, %al
983 ; AVX2-NEXT:    je LBB3_2
984 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
985 ; AVX2-NEXT:    vmovq {{.*#+}} xmm7 = mem[0],zero
986 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm7[0,1],ymm0[2,3,4,5,6,7]
987 ; AVX2-NEXT:    addq $8, %rdi
988 ; AVX2-NEXT:  LBB3_2: ## %else
989 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
990 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
991 ; AVX2-NEXT:    vpextrb $1, %xmm6, %eax
992 ; AVX2-NEXT:    testb $1, %al
993 ; AVX2-NEXT:    je LBB3_4
994 ; AVX2-NEXT:  ## %bb.3: ## %cond.load1
995 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm6 = xmm0[0],mem[0]
996 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm6[0,1],ymm0[2,3]
997 ; AVX2-NEXT:    addq $8, %rdi
998 ; AVX2-NEXT:  LBB3_4: ## %else2
999 ; AVX2-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
1000 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm6
1001 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm7
1002 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
1003 ; AVX2-NEXT:    vpextrb $2, %xmm7, %eax
1004 ; AVX2-NEXT:    testb $1, %al
1005 ; AVX2-NEXT:    je LBB3_6
1006 ; AVX2-NEXT:  ## %bb.5: ## %cond.load5
1007 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm7
1008 ; AVX2-NEXT:    vmovlpd {{.*#+}} xmm7 = mem[0],xmm7[1]
1009 ; AVX2-NEXT:    vinsertf128 $1, %xmm7, %ymm0, %ymm0
1010 ; AVX2-NEXT:    addq $8, %rdi
1011 ; AVX2-NEXT:  LBB3_6: ## %else6
1012 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm6, %xmm6
1013 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
1014 ; AVX2-NEXT:    vpextrb $3, %xmm6, %eax
1015 ; AVX2-NEXT:    testb $1, %al
1016 ; AVX2-NEXT:    je LBB3_8
1017 ; AVX2-NEXT:  ## %bb.7: ## %cond.load9
1018 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm6
1019 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm6 = xmm6[0],mem[0]
1020 ; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm0, %ymm0
1021 ; AVX2-NEXT:    addq $8, %rdi
1022 ; AVX2-NEXT:  LBB3_8: ## %else10
1023 ; AVX2-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
1024 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm6
1025 ; AVX2-NEXT:    vextracti128 $1, %ymm6, %xmm6
1026 ; AVX2-NEXT:    vpackssdw %xmm6, %xmm0, %xmm7
1027 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm7, %xmm7
1028 ; AVX2-NEXT:    vpextrb $4, %xmm7, %eax
1029 ; AVX2-NEXT:    testb $1, %al
1030 ; AVX2-NEXT:    je LBB3_10
1031 ; AVX2-NEXT:  ## %bb.9: ## %cond.load13
1032 ; AVX2-NEXT:    vmovq {{.*#+}} xmm7 = mem[0],zero
1033 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm7[0,1],ymm1[2,3,4,5,6,7]
1034 ; AVX2-NEXT:    addq $8, %rdi
1035 ; AVX2-NEXT:  LBB3_10: ## %else14
1036 ; AVX2-NEXT:    vpackssdw %xmm6, %xmm0, %xmm6
1037 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
1038 ; AVX2-NEXT:    vpextrb $5, %xmm6, %eax
1039 ; AVX2-NEXT:    testb $1, %al
1040 ; AVX2-NEXT:    je LBB3_12
1041 ; AVX2-NEXT:  ## %bb.11: ## %cond.load17
1042 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm6 = xmm1[0],mem[0]
1043 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm1 = ymm6[0,1],ymm1[2,3]
1044 ; AVX2-NEXT:    addq $8, %rdi
1045 ; AVX2-NEXT:  LBB3_12: ## %else18
1046 ; AVX2-NEXT:    vxorpd %xmm6, %xmm6, %xmm6
1047 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm4, %ymm4
1048 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
1049 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm6
1050 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
1051 ; AVX2-NEXT:    vpextrb $6, %xmm6, %eax
1052 ; AVX2-NEXT:    testb $1, %al
1053 ; AVX2-NEXT:    je LBB3_14
1054 ; AVX2-NEXT:  ## %bb.13: ## %cond.load21
1055 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm6
1056 ; AVX2-NEXT:    vmovlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
1057 ; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm1, %ymm1
1058 ; AVX2-NEXT:    addq $8, %rdi
1059 ; AVX2-NEXT:  LBB3_14: ## %else22
1060 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
1061 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
1062 ; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
1063 ; AVX2-NEXT:    testb $1, %al
1064 ; AVX2-NEXT:    je LBB3_16
1065 ; AVX2-NEXT:  ## %bb.15: ## %cond.load25
1066 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4
1067 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
1068 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
1069 ; AVX2-NEXT:    addq $8, %rdi
1070 ; AVX2-NEXT:  LBB3_16: ## %else26
1071 ; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
1072 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
1073 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm6
1074 ; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
1075 ; AVX2-NEXT:    vpextrb $8, %xmm6, %eax
1076 ; AVX2-NEXT:    testb $1, %al
1077 ; AVX2-NEXT:    je LBB3_18
1078 ; AVX2-NEXT:  ## %bb.17: ## %cond.load29
1079 ; AVX2-NEXT:    vmovq {{.*#+}} xmm6 = mem[0],zero
1080 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm2 = ymm6[0,1],ymm2[2,3,4,5,6,7]
1081 ; AVX2-NEXT:    addq $8, %rdi
1082 ; AVX2-NEXT:  LBB3_18: ## %else30
1083 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
1084 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
1085 ; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
1086 ; AVX2-NEXT:    testb $1, %al
1087 ; AVX2-NEXT:    je LBB3_20
1088 ; AVX2-NEXT:  ## %bb.19: ## %cond.load33
1089 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm2[0],mem[0]
1090 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm2 = ymm4[0,1],ymm2[2,3]
1091 ; AVX2-NEXT:    addq $8, %rdi
1092 ; AVX2-NEXT:  LBB3_20: ## %else34
1093 ; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
1094 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
1095 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm6
1096 ; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
1097 ; AVX2-NEXT:    vpextrb $10, %xmm6, %eax
1098 ; AVX2-NEXT:    testb $1, %al
1099 ; AVX2-NEXT:    je LBB3_22
1100 ; AVX2-NEXT:  ## %bb.21: ## %cond.load37
1101 ; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm6
1102 ; AVX2-NEXT:    vmovlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
1103 ; AVX2-NEXT:    vinsertf128 $1, %xmm6, %ymm2, %ymm2
1104 ; AVX2-NEXT:    addq $8, %rdi
1105 ; AVX2-NEXT:  LBB3_22: ## %else38
1106 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
1107 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
1108 ; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
1109 ; AVX2-NEXT:    testb $1, %al
1110 ; AVX2-NEXT:    je LBB3_24
1111 ; AVX2-NEXT:  ## %bb.23: ## %cond.load41
1112 ; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm4
1113 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
1114 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
1115 ; AVX2-NEXT:    addq $8, %rdi
1116 ; AVX2-NEXT:  LBB3_24: ## %else42
1117 ; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
1118 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
1119 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
1120 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm6
1121 ; AVX2-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
1122 ; AVX2-NEXT:    vpextrb $12, %xmm6, %eax
1123 ; AVX2-NEXT:    testb $1, %al
1124 ; AVX2-NEXT:    je LBB3_26
1125 ; AVX2-NEXT:  ## %bb.25: ## %cond.load45
1126 ; AVX2-NEXT:    vmovq {{.*#+}} xmm6 = mem[0],zero
1127 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm3 = ymm6[0,1],ymm3[2,3,4,5,6,7]
1128 ; AVX2-NEXT:    addq $8, %rdi
1129 ; AVX2-NEXT:  LBB3_26: ## %else46
1130 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
1131 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
1132 ; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
1133 ; AVX2-NEXT:    testb $1, %al
1134 ; AVX2-NEXT:    je LBB3_28
1135 ; AVX2-NEXT:  ## %bb.27: ## %cond.load49
1136 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm3[0],mem[0]
1137 ; AVX2-NEXT:    vblendpd {{.*#+}} ymm3 = ymm4[0,1],ymm3[2,3]
1138 ; AVX2-NEXT:    addq $8, %rdi
1139 ; AVX2-NEXT:  LBB3_28: ## %else50
1140 ; AVX2-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
1141 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
1142 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
1143 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
1144 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
1145 ; AVX2-NEXT:    vpextrb $14, %xmm5, %eax
1146 ; AVX2-NEXT:    testb $1, %al
1147 ; AVX2-NEXT:    je LBB3_30
1148 ; AVX2-NEXT:  ## %bb.29: ## %cond.load53
1149 ; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm5
1150 ; AVX2-NEXT:    vmovlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
1151 ; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
1152 ; AVX2-NEXT:    addq $8, %rdi
1153 ; AVX2-NEXT:  LBB3_30: ## %else54
1154 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
1155 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
1156 ; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
1157 ; AVX2-NEXT:    testb $1, %al
1158 ; AVX2-NEXT:    je LBB3_32
1159 ; AVX2-NEXT:  ## %bb.31: ## %cond.load57
1160 ; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm4
1161 ; AVX2-NEXT:    vmovhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
1162 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1163 ; AVX2-NEXT:  LBB3_32: ## %else58
1164 ; AVX2-NEXT:    retq
1165 ;
1166 ; AVX512F-LABEL: expandload_v16f64_v16i32:
1167 ; AVX512F:       ## %bb.0:
1168 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm2, %ymm3
1169 ; AVX512F-NEXT:    vptestnmd %zmm3, %zmm3, %k1
1170 ; AVX512F-NEXT:    vptestnmd %zmm2, %zmm2, %k2
1171 ; AVX512F-NEXT:    vexpandpd (%rdi), %zmm0 {%k2}
1172 ; AVX512F-NEXT:    kmovw %k2, %eax
1173 ; AVX512F-NEXT:    movzbl %al, %eax
1174 ; AVX512F-NEXT:    movl %eax, %ecx
1175 ; AVX512F-NEXT:    shrl %ecx
1176 ; AVX512F-NEXT:    andl $-43, %ecx
1177 ; AVX512F-NEXT:    subl %ecx, %eax
1178 ; AVX512F-NEXT:    movl %eax, %ecx
1179 ; AVX512F-NEXT:    andl $858993459, %ecx ## imm = 0x33333333
1180 ; AVX512F-NEXT:    shrl $2, %eax
1181 ; AVX512F-NEXT:    andl $858993459, %eax ## imm = 0x33333333
1182 ; AVX512F-NEXT:    addl %ecx, %eax
1183 ; AVX512F-NEXT:    movl %eax, %ecx
1184 ; AVX512F-NEXT:    shrl $4, %ecx
1185 ; AVX512F-NEXT:    addl %eax, %ecx
1186 ; AVX512F-NEXT:    andl $252645135, %ecx ## imm = 0xF0F0F0F
1187 ; AVX512F-NEXT:    imull $16843009, %ecx, %eax ## imm = 0x1010101
1188 ; AVX512F-NEXT:    shrl $24, %eax
1189 ; AVX512F-NEXT:    vexpandpd (%rdi,%rax,8), %zmm1 {%k1}
1190 ; AVX512F-NEXT:    retq
1191 ;
1192 ; AVX512VLDQ-LABEL: expandload_v16f64_v16i32:
1193 ; AVX512VLDQ:       ## %bb.0:
1194 ; AVX512VLDQ-NEXT:    vextracti64x4 $1, %zmm2, %ymm3
1195 ; AVX512VLDQ-NEXT:    vptestnmd %ymm3, %ymm3, %k1
1196 ; AVX512VLDQ-NEXT:    vptestnmd %ymm2, %ymm2, %k2
1197 ; AVX512VLDQ-NEXT:    kmovb %k2, %eax
1198 ; AVX512VLDQ-NEXT:    movl %eax, %ecx
1199 ; AVX512VLDQ-NEXT:    shrl %ecx
1200 ; AVX512VLDQ-NEXT:    andl $-43, %ecx
1201 ; AVX512VLDQ-NEXT:    subl %ecx, %eax
1202 ; AVX512VLDQ-NEXT:    movl %eax, %ecx
1203 ; AVX512VLDQ-NEXT:    andl $858993459, %ecx ## imm = 0x33333333
1204 ; AVX512VLDQ-NEXT:    shrl $2, %eax
1205 ; AVX512VLDQ-NEXT:    andl $858993459, %eax ## imm = 0x33333333
1206 ; AVX512VLDQ-NEXT:    addl %ecx, %eax
1207 ; AVX512VLDQ-NEXT:    movl %eax, %ecx
1208 ; AVX512VLDQ-NEXT:    shrl $4, %ecx
1209 ; AVX512VLDQ-NEXT:    addl %eax, %ecx
1210 ; AVX512VLDQ-NEXT:    andl $252645135, %ecx ## imm = 0xF0F0F0F
1211 ; AVX512VLDQ-NEXT:    imull $16843009, %ecx, %eax ## imm = 0x1010101
1212 ; AVX512VLDQ-NEXT:    shrl $24, %eax
1213 ; AVX512VLDQ-NEXT:    vexpandpd (%rdi,%rax,8), %zmm1 {%k1}
1214 ; AVX512VLDQ-NEXT:    vexpandpd (%rdi), %zmm0 {%k2}
1215 ; AVX512VLDQ-NEXT:    retq
1216 ;
1217 ; AVX512VLBW-LABEL: expandload_v16f64_v16i32:
1218 ; AVX512VLBW:       ## %bb.0:
1219 ; AVX512VLBW-NEXT:    vextracti64x4 $1, %zmm2, %ymm3
1220 ; AVX512VLBW-NEXT:    vptestnmd %ymm3, %ymm3, %k1
1221 ; AVX512VLBW-NEXT:    vptestnmd %ymm2, %ymm2, %k2
1222 ; AVX512VLBW-NEXT:    vexpandpd (%rdi), %zmm0 {%k2}
1223 ; AVX512VLBW-NEXT:    kmovd %k2, %eax
1224 ; AVX512VLBW-NEXT:    movzbl %al, %eax
1225 ; AVX512VLBW-NEXT:    movl %eax, %ecx
1226 ; AVX512VLBW-NEXT:    shrl %ecx
1227 ; AVX512VLBW-NEXT:    andl $-43, %ecx
1228 ; AVX512VLBW-NEXT:    subl %ecx, %eax
1229 ; AVX512VLBW-NEXT:    movl %eax, %ecx
1230 ; AVX512VLBW-NEXT:    andl $858993459, %ecx ## imm = 0x33333333
1231 ; AVX512VLBW-NEXT:    shrl $2, %eax
1232 ; AVX512VLBW-NEXT:    andl $858993459, %eax ## imm = 0x33333333
1233 ; AVX512VLBW-NEXT:    addl %ecx, %eax
1234 ; AVX512VLBW-NEXT:    movl %eax, %ecx
1235 ; AVX512VLBW-NEXT:    shrl $4, %ecx
1236 ; AVX512VLBW-NEXT:    addl %eax, %ecx
1237 ; AVX512VLBW-NEXT:    andl $252645135, %ecx ## imm = 0xF0F0F0F
1238 ; AVX512VLBW-NEXT:    imull $16843009, %ecx, %eax ## imm = 0x1010101
1239 ; AVX512VLBW-NEXT:    shrl $24, %eax
1240 ; AVX512VLBW-NEXT:    vexpandpd (%rdi,%rax,8), %zmm1 {%k1}
1241 ; AVX512VLBW-NEXT:    retq
1242   %mask = icmp eq <16 x i32> %trigger, zeroinitializer
1243   %res = call <16 x double> @llvm.masked.expandload.v16f64(double* %base, <16 x i1> %mask, <16 x double> %src0)
1244   ret <16 x double> %res
1245 }
1246
1247 ;
1248 ; vXf32
1249 ;
1250
1251 define <2 x float> @expandload_v2f32_v2i1(float* %base, <2 x float> %src0, <2 x i32> %trigger) {
1252 ; SSE2-LABEL: expandload_v2f32_v2i1:
1253 ; SSE2:       ## %bb.0:
1254 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
1255 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1256 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
1257 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
1258 ; SSE2-NEXT:    pand %xmm2, %xmm1
1259 ; SSE2-NEXT:    movd %xmm1, %eax
1260 ; SSE2-NEXT:    testb $1, %al
1261 ; SSE2-NEXT:    je LBB4_2
1262 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1263 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1264 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
1265 ; SSE2-NEXT:    addq $4, %rdi
1266 ; SSE2-NEXT:  LBB4_2: ## %else
1267 ; SSE2-NEXT:    pextrw $4, %xmm1, %eax
1268 ; SSE2-NEXT:    testb $1, %al
1269 ; SSE2-NEXT:    je LBB4_4
1270 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1271 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1272 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]
1273 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,0],xmm0[2,3]
1274 ; SSE2-NEXT:    movaps %xmm1, %xmm0
1275 ; SSE2-NEXT:  LBB4_4: ## %else2
1276 ; SSE2-NEXT:    retq
1277 ;
1278 ; SSE42-LABEL: expandload_v2f32_v2i1:
1279 ; SSE42:       ## %bb.0:
1280 ; SSE42-NEXT:    pxor %xmm2, %xmm2
1281 ; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
1282 ; SSE42-NEXT:    pcmpeqq %xmm2, %xmm1
1283 ; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1284 ; SSE42-NEXT:    testb $1, %al
1285 ; SSE42-NEXT:    je LBB4_2
1286 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1287 ; SSE42-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
1288 ; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3,4,5,6,7]
1289 ; SSE42-NEXT:    addq $4, %rdi
1290 ; SSE42-NEXT:  LBB4_2: ## %else
1291 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1292 ; SSE42-NEXT:    testb $1, %al
1293 ; SSE42-NEXT:    je LBB4_4
1294 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1295 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1296 ; SSE42-NEXT:  LBB4_4: ## %else2
1297 ; SSE42-NEXT:    retq
1298 ;
1299 ; AVX1-LABEL: expandload_v2f32_v2i1:
1300 ; AVX1:       ## %bb.0:
1301 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1302 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
1303 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
1304 ; AVX1-NEXT:    vpextrb $0, %xmm1, %eax
1305 ; AVX1-NEXT:    testb $1, %al
1306 ; AVX1-NEXT:    je LBB4_2
1307 ; AVX1-NEXT:  ## %bb.1: ## %cond.load
1308 ; AVX1-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
1309 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3,4,5,6,7]
1310 ; AVX1-NEXT:    addq $4, %rdi
1311 ; AVX1-NEXT:  LBB4_2: ## %else
1312 ; AVX1-NEXT:    vpextrb $8, %xmm1, %eax
1313 ; AVX1-NEXT:    testb $1, %al
1314 ; AVX1-NEXT:    je LBB4_4
1315 ; AVX1-NEXT:  ## %bb.3: ## %cond.load1
1316 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1317 ; AVX1-NEXT:  LBB4_4: ## %else2
1318 ; AVX1-NEXT:    retq
1319 ;
1320 ; AVX2-LABEL: expandload_v2f32_v2i1:
1321 ; AVX2:       ## %bb.0:
1322 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1323 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]
1324 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
1325 ; AVX2-NEXT:    vpextrb $0, %xmm1, %eax
1326 ; AVX2-NEXT:    testb $1, %al
1327 ; AVX2-NEXT:    je LBB4_2
1328 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
1329 ; AVX2-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
1330 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
1331 ; AVX2-NEXT:    addq $4, %rdi
1332 ; AVX2-NEXT:  LBB4_2: ## %else
1333 ; AVX2-NEXT:    vpextrb $8, %xmm1, %eax
1334 ; AVX2-NEXT:    testb $1, %al
1335 ; AVX2-NEXT:    je LBB4_4
1336 ; AVX2-NEXT:  ## %bb.3: ## %cond.load1
1337 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1338 ; AVX2-NEXT:  LBB4_4: ## %else2
1339 ; AVX2-NEXT:    retq
1340 ;
1341 ; AVX512F-LABEL: expandload_v2f32_v2i1:
1342 ; AVX512F:       ## %bb.0:
1343 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
1344 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1345 ; AVX512F-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]
1346 ; AVX512F-NEXT:    vptestnmq %zmm1, %zmm1, %k0
1347 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
1348 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
1349 ; AVX512F-NEXT:    vexpandps (%rdi), %zmm0 {%k1}
1350 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
1351 ; AVX512F-NEXT:    vzeroupper
1352 ; AVX512F-NEXT:    retq
1353 ;
1354 ; AVX512VL-LABEL: expandload_v2f32_v2i1:
1355 ; AVX512VL:       ## %bb.0:
1356 ; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1357 ; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3]
1358 ; AVX512VL-NEXT:    vptestnmq %xmm1, %xmm1, %k1
1359 ; AVX512VL-NEXT:    vexpandps (%rdi), %xmm0 {%k1}
1360 ; AVX512VL-NEXT:    retq
1361   %mask = icmp eq <2 x i32> %trigger, zeroinitializer
1362   %res = call <2 x float> @llvm.masked.expandload.v2f32(float* %base, <2 x i1> %mask, <2 x float> %src0)
1363   ret <2 x float> %res
1364 }
1365
1366 define <4 x float> @expandload_v4f32_const(float* %base, <4 x float> %src0) {
1367 ; SSE2-LABEL: expandload_v4f32_const:
1368 ; SSE2:       ## %bb.0: ## %cond.load
1369 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1370 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1371 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm2[0,0]
1372 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1373 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[3,0]
1374 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,0],xmm2[0,2]
1375 ; SSE2-NEXT:    movaps %xmm1, %xmm0
1376 ; SSE2-NEXT:    retq
1377 ;
1378 ; SSE42-LABEL: expandload_v4f32_const:
1379 ; SSE42:       ## %bb.0: ## %cond.load
1380 ; SSE42-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1381 ; SSE42-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
1382 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1383 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
1384 ; SSE42-NEXT:    retq
1385 ;
1386 ; AVX1OR2-LABEL: expandload_v4f32_const:
1387 ; AVX1OR2:       ## %bb.0: ## %cond.load
1388 ; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1389 ; AVX1OR2-NEXT:    vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
1390 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1391 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
1392 ; AVX1OR2-NEXT:    retq
1393 ;
1394 ; AVX512F-LABEL: expandload_v4f32_const:
1395 ; AVX512F:       ## %bb.0:
1396 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
1397 ; AVX512F-NEXT:    movw $7, %ax
1398 ; AVX512F-NEXT:    kmovw %eax, %k1
1399 ; AVX512F-NEXT:    vexpandps (%rdi), %zmm0 {%k1}
1400 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
1401 ; AVX512F-NEXT:    vzeroupper
1402 ; AVX512F-NEXT:    retq
1403 ;
1404 ; AVX512VLDQ-LABEL: expandload_v4f32_const:
1405 ; AVX512VLDQ:       ## %bb.0:
1406 ; AVX512VLDQ-NEXT:    movb $7, %al
1407 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
1408 ; AVX512VLDQ-NEXT:    vexpandps (%rdi), %xmm0 {%k1}
1409 ; AVX512VLDQ-NEXT:    retq
1410 ;
1411 ; AVX512VLBW-LABEL: expandload_v4f32_const:
1412 ; AVX512VLBW:       ## %bb.0:
1413 ; AVX512VLBW-NEXT:    movb $7, %al
1414 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
1415 ; AVX512VLBW-NEXT:    vexpandps (%rdi), %xmm0 {%k1}
1416 ; AVX512VLBW-NEXT:    retq
1417   %res = call <4 x float> @llvm.masked.expandload.v4f32(float* %base, <4 x i1> <i1 true, i1 true, i1 true, i1 false>, <4 x float> %src0)
1418   ret <4 x float>%res
1419 }
1420
1421 define <16 x float> @expandload_v16f32_const(float* %base, <16 x float> %src0) {
1422 ; SSE2-LABEL: expandload_v16f32_const:
1423 ; SSE2:       ## %bb.0: ## %cond.load
1424 ; SSE2-NEXT:    movups (%rdi), %xmm0
1425 ; SSE2-NEXT:    movups 16(%rdi), %xmm1
1426 ; SSE2-NEXT:    movss {{.*#+}} xmm5 = mem[0],zero,zero,zero
1427 ; SSE2-NEXT:    movss {{.*#+}} xmm4 = mem[0],zero,zero,zero
1428 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,0],xmm5[0,0]
1429 ; SSE2-NEXT:    movss {{.*#+}} xmm5 = mem[0],zero,zero,zero
1430 ; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,0],xmm2[3,0]
1431 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[2,0],xmm5[0,2]
1432 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1433 ; SSE2-NEXT:    movss {{.*#+}} xmm5 = mem[0],zero,zero,zero
1434 ; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,0],xmm2[0,0]
1435 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1436 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm3[3,0]
1437 ; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[2,0],xmm2[0,2]
1438 ; SSE2-NEXT:    movaps %xmm4, %xmm2
1439 ; SSE2-NEXT:    movaps %xmm5, %xmm3
1440 ; SSE2-NEXT:    retq
1441 ;
1442 ; SSE42-LABEL: expandload_v16f32_const:
1443 ; SSE42:       ## %bb.0: ## %cond.load
1444 ; SSE42-NEXT:    movups (%rdi), %xmm0
1445 ; SSE42-NEXT:    movups 16(%rdi), %xmm1
1446 ; SSE42-NEXT:    movss {{.*#+}} xmm4 = mem[0],zero,zero,zero
1447 ; SSE42-NEXT:    blendps {{.*#+}} xmm2 = xmm4[0],xmm2[1,2,3]
1448 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
1449 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1450 ; SSE42-NEXT:    movss {{.*#+}} xmm4 = mem[0],zero,zero,zero
1451 ; SSE42-NEXT:    blendps {{.*#+}} xmm3 = xmm4[0],xmm3[1,2,3]
1452 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],mem[0],xmm3[2,3]
1453 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]
1454 ; SSE42-NEXT:    retq
1455 ;
1456 ; AVX1OR2-LABEL: expandload_v16f32_const:
1457 ; AVX1OR2:       ## %bb.0: ## %cond.load
1458 ; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1459 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm2[0],ymm0[1,2,3,4,5,6,7]
1460 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm0[0],mem[0],xmm0[2,3]
1461 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1462 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
1463 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1464 ; AVX1OR2-NEXT:    vmovsd {{.*#+}} xmm2 = mem[0],zero
1465 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1466 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
1467 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1468 ; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1469 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0],ymm1[1,2,3,4,5,6,7]
1470 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm1[0],mem[0],xmm1[2,3]
1471 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1472 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1473 ; AVX1OR2-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1474 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm1, %xmm1
1475 ; AVX1OR2-NEXT:    vblendps {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
1476 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]
1477 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]
1478 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
1479 ; AVX1OR2-NEXT:    retq
1480 ;
1481 ; AVX512F-LABEL: expandload_v16f32_const:
1482 ; AVX512F:       ## %bb.0:
1483 ; AVX512F-NEXT:    movw $30719, %ax ## imm = 0x77FF
1484 ; AVX512F-NEXT:    kmovw %eax, %k1
1485 ; AVX512F-NEXT:    vexpandps (%rdi), %zmm0 {%k1}
1486 ; AVX512F-NEXT:    retq
1487 ;
1488 ; AVX512VLDQ-LABEL: expandload_v16f32_const:
1489 ; AVX512VLDQ:       ## %bb.0:
1490 ; AVX512VLDQ-NEXT:    movw $30719, %ax ## imm = 0x77FF
1491 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
1492 ; AVX512VLDQ-NEXT:    vexpandps (%rdi), %zmm0 {%k1}
1493 ; AVX512VLDQ-NEXT:    retq
1494 ;
1495 ; AVX512VLBW-LABEL: expandload_v16f32_const:
1496 ; AVX512VLBW:       ## %bb.0:
1497 ; AVX512VLBW-NEXT:    movw $30719, %ax ## imm = 0x77FF
1498 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
1499 ; AVX512VLBW-NEXT:    vexpandps (%rdi), %zmm0 {%k1}
1500 ; AVX512VLBW-NEXT:    retq
1501   %res = call <16 x float> @llvm.masked.expandload.v16f32(float* %base, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>, <16 x float> %src0)
1502   ret <16 x float>%res
1503 }
1504
1505 define <16 x float> @expandload_v16f32_const_undef(float* %base) {
1506 ; SSE2-LABEL: expandload_v16f32_const_undef:
1507 ; SSE2:       ## %bb.0: ## %cond.load
1508 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1509 ; SSE2-NEXT:    movsd {{.*#+}} xmm2 = mem[0],zero
1510 ; SSE2-NEXT:    movlhps {{.*#+}} xmm2 = xmm2[0],xmm0[0]
1511 ; SSE2-NEXT:    movups (%rdi), %xmm0
1512 ; SSE2-NEXT:    movups 16(%rdi), %xmm1
1513 ; SSE2-NEXT:    movups 44(%rdi), %xmm3
1514 ; SSE2-NEXT:    retq
1515 ;
1516 ; SSE42-LABEL: expandload_v16f32_const_undef:
1517 ; SSE42:       ## %bb.0: ## %cond.load
1518 ; SSE42-NEXT:    movsd {{.*#+}} xmm2 = mem[0],zero
1519 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1520 ; SSE42-NEXT:    movups (%rdi), %xmm0
1521 ; SSE42-NEXT:    movups 16(%rdi), %xmm1
1522 ; SSE42-NEXT:    movups 44(%rdi), %xmm3
1523 ; SSE42-NEXT:    retq
1524 ;
1525 ; AVX1OR2-LABEL: expandload_v16f32_const_undef:
1526 ; AVX1OR2:       ## %bb.0: ## %cond.load
1527 ; AVX1OR2-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
1528 ; AVX1OR2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
1529 ; AVX1OR2-NEXT:    vinsertf128 $1, 44(%rdi), %ymm0, %ymm1
1530 ; AVX1OR2-NEXT:    vmovups (%rdi), %ymm0
1531 ; AVX1OR2-NEXT:    retq
1532 ;
1533 ; AVX512F-LABEL: expandload_v16f32_const_undef:
1534 ; AVX512F:       ## %bb.0:
1535 ; AVX512F-NEXT:    movw $-2049, %ax ## imm = 0xF7FF
1536 ; AVX512F-NEXT:    kmovw %eax, %k1
1537 ; AVX512F-NEXT:    vexpandps (%rdi), %zmm0 {%k1} {z}
1538 ; AVX512F-NEXT:    retq
1539 ;
1540 ; AVX512VLDQ-LABEL: expandload_v16f32_const_undef:
1541 ; AVX512VLDQ:       ## %bb.0:
1542 ; AVX512VLDQ-NEXT:    movw $-2049, %ax ## imm = 0xF7FF
1543 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
1544 ; AVX512VLDQ-NEXT:    vexpandps (%rdi), %zmm0 {%k1} {z}
1545 ; AVX512VLDQ-NEXT:    retq
1546 ;
1547 ; AVX512VLBW-LABEL: expandload_v16f32_const_undef:
1548 ; AVX512VLBW:       ## %bb.0:
1549 ; AVX512VLBW-NEXT:    movw $-2049, %ax ## imm = 0xF7FF
1550 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
1551 ; AVX512VLBW-NEXT:    vexpandps (%rdi), %zmm0 {%k1} {z}
1552 ; AVX512VLBW-NEXT:    retq
1553   %res = call <16 x float> @llvm.masked.expandload.v16f32(float* %base, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 true>, <16 x float> undef)
1554   ret <16 x float>%res
1555 }
1556
1557
1558 define <32 x float> @expandload_v32f32_v32i32(float* %base, <32 x float> %src0, <32 x i32> %trigger) {
1559 ; SSE2-LABEL: expandload_v32f32_v32i32:
1560 ; SSE2:       ## %bb.0:
1561 ; SSE2-NEXT:    movq %rdi, %rax
1562 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1563 ; SSE2-NEXT:    pxor %xmm8, %xmm8
1564 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1565 ; SSE2-NEXT:    movd %xmm8, %ecx
1566 ; SSE2-NEXT:    testb $1, %cl
1567 ; SSE2-NEXT:    je LBB8_2
1568 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1569 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1570 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm10[0],xmm0[1,2,3]
1571 ; SSE2-NEXT:    addq $4, %rsi
1572 ; SSE2-NEXT:  LBB8_2: ## %else
1573 ; SSE2-NEXT:    pextrw $2, %xmm8, %ecx
1574 ; SSE2-NEXT:    testb $1, %cl
1575 ; SSE2-NEXT:    je LBB8_4
1576 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1577 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1578 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm0[0,0]
1579 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[2,0],xmm0[2,3]
1580 ; SSE2-NEXT:    addq $4, %rsi
1581 ; SSE2-NEXT:    movaps %xmm8, %xmm0
1582 ; SSE2-NEXT:  LBB8_4: ## %else2
1583 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1584 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1585 ; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
1586 ; SSE2-NEXT:    testb $1, %cl
1587 ; SSE2-NEXT:    je LBB8_6
1588 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
1589 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1590 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm0[3,0]
1591 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm8[0,2]
1592 ; SSE2-NEXT:    addq $4, %rsi
1593 ; SSE2-NEXT:  LBB8_6: ## %else6
1594 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1595 ; SSE2-NEXT:    pextrw $6, %xmm9, %ecx
1596 ; SSE2-NEXT:    testb $1, %cl
1597 ; SSE2-NEXT:    je LBB8_8
1598 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
1599 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1600 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm0[2,0]
1601 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm9[2,0]
1602 ; SSE2-NEXT:    addq $4, %rsi
1603 ; SSE2-NEXT:  LBB8_8: ## %else10
1604 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1605 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1606 ; SSE2-NEXT:    movd %xmm9, %ecx
1607 ; SSE2-NEXT:    testb $1, %cl
1608 ; SSE2-NEXT:    je LBB8_10
1609 ; SSE2-NEXT:  ## %bb.9: ## %cond.load13
1610 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1611 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm10[0],xmm1[1,2,3]
1612 ; SSE2-NEXT:    addq $4, %rsi
1613 ; SSE2-NEXT:  LBB8_10: ## %else14
1614 ; SSE2-NEXT:    pextrw $2, %xmm9, %ecx
1615 ; SSE2-NEXT:    testb $1, %cl
1616 ; SSE2-NEXT:    je LBB8_12
1617 ; SSE2-NEXT:  ## %bb.11: ## %cond.load17
1618 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1619 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm1[0,0]
1620 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[2,0],xmm1[2,3]
1621 ; SSE2-NEXT:    addq $4, %rsi
1622 ; SSE2-NEXT:    movaps %xmm9, %xmm1
1623 ; SSE2-NEXT:  LBB8_12: ## %else18
1624 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1625 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1626 ; SSE2-NEXT:    pextrw $4, %xmm8, %ecx
1627 ; SSE2-NEXT:    testb $1, %cl
1628 ; SSE2-NEXT:    je LBB8_14
1629 ; SSE2-NEXT:  ## %bb.13: ## %cond.load21
1630 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1631 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm1[3,0]
1632 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm9[0,2]
1633 ; SSE2-NEXT:    addq $4, %rsi
1634 ; SSE2-NEXT:  LBB8_14: ## %else22
1635 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1636 ; SSE2-NEXT:    pextrw $6, %xmm8, %ecx
1637 ; SSE2-NEXT:    testb $1, %cl
1638 ; SSE2-NEXT:    je LBB8_16
1639 ; SSE2-NEXT:  ## %bb.15: ## %cond.load25
1640 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1641 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm1[2,0]
1642 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm8[2,0]
1643 ; SSE2-NEXT:    addq $4, %rsi
1644 ; SSE2-NEXT:  LBB8_16: ## %else26
1645 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1646 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1647 ; SSE2-NEXT:    movd %xmm8, %ecx
1648 ; SSE2-NEXT:    testb $1, %cl
1649 ; SSE2-NEXT:    je LBB8_18
1650 ; SSE2-NEXT:  ## %bb.17: ## %cond.load29
1651 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1652 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = xmm10[0],xmm2[1,2,3]
1653 ; SSE2-NEXT:    addq $4, %rsi
1654 ; SSE2-NEXT:  LBB8_18: ## %else30
1655 ; SSE2-NEXT:    pextrw $2, %xmm8, %ecx
1656 ; SSE2-NEXT:    testb $1, %cl
1657 ; SSE2-NEXT:    je LBB8_20
1658 ; SSE2-NEXT:  ## %bb.19: ## %cond.load33
1659 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1660 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm2[0,0]
1661 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[2,0],xmm2[2,3]
1662 ; SSE2-NEXT:    addq $4, %rsi
1663 ; SSE2-NEXT:    movaps %xmm8, %xmm2
1664 ; SSE2-NEXT:  LBB8_20: ## %else34
1665 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1666 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1667 ; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
1668 ; SSE2-NEXT:    testb $1, %cl
1669 ; SSE2-NEXT:    je LBB8_22
1670 ; SSE2-NEXT:  ## %bb.21: ## %cond.load37
1671 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1672 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm2[3,0]
1673 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm8[0,2]
1674 ; SSE2-NEXT:    addq $4, %rsi
1675 ; SSE2-NEXT:  LBB8_22: ## %else38
1676 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1677 ; SSE2-NEXT:    pextrw $6, %xmm9, %ecx
1678 ; SSE2-NEXT:    testb $1, %cl
1679 ; SSE2-NEXT:    je LBB8_24
1680 ; SSE2-NEXT:  ## %bb.23: ## %cond.load41
1681 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1682 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm2[2,0]
1683 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm9[2,0]
1684 ; SSE2-NEXT:    addq $4, %rsi
1685 ; SSE2-NEXT:  LBB8_24: ## %else42
1686 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1687 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1688 ; SSE2-NEXT:    movd %xmm9, %ecx
1689 ; SSE2-NEXT:    testb $1, %cl
1690 ; SSE2-NEXT:    je LBB8_26
1691 ; SSE2-NEXT:  ## %bb.25: ## %cond.load45
1692 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1693 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = xmm10[0],xmm3[1,2,3]
1694 ; SSE2-NEXT:    addq $4, %rsi
1695 ; SSE2-NEXT:  LBB8_26: ## %else46
1696 ; SSE2-NEXT:    pextrw $2, %xmm9, %ecx
1697 ; SSE2-NEXT:    testb $1, %cl
1698 ; SSE2-NEXT:    je LBB8_28
1699 ; SSE2-NEXT:  ## %bb.27: ## %cond.load49
1700 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1701 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm3[0,0]
1702 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[2,0],xmm3[2,3]
1703 ; SSE2-NEXT:    addq $4, %rsi
1704 ; SSE2-NEXT:    movaps %xmm9, %xmm3
1705 ; SSE2-NEXT:  LBB8_28: ## %else50
1706 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1707 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1708 ; SSE2-NEXT:    pextrw $4, %xmm8, %ecx
1709 ; SSE2-NEXT:    testb $1, %cl
1710 ; SSE2-NEXT:    je LBB8_30
1711 ; SSE2-NEXT:  ## %bb.29: ## %cond.load53
1712 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1713 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm3[3,0]
1714 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,1],xmm9[0,2]
1715 ; SSE2-NEXT:    addq $4, %rsi
1716 ; SSE2-NEXT:  LBB8_30: ## %else54
1717 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1718 ; SSE2-NEXT:    pextrw $6, %xmm8, %ecx
1719 ; SSE2-NEXT:    testb $1, %cl
1720 ; SSE2-NEXT:    je LBB8_32
1721 ; SSE2-NEXT:  ## %bb.31: ## %cond.load57
1722 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1723 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm3[2,0]
1724 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,1],xmm8[2,0]
1725 ; SSE2-NEXT:    addq $4, %rsi
1726 ; SSE2-NEXT:  LBB8_32: ## %else58
1727 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1728 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1729 ; SSE2-NEXT:    movd %xmm8, %ecx
1730 ; SSE2-NEXT:    testb $1, %cl
1731 ; SSE2-NEXT:    je LBB8_34
1732 ; SSE2-NEXT:  ## %bb.33: ## %cond.load61
1733 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1734 ; SSE2-NEXT:    movss {{.*#+}} xmm4 = xmm10[0],xmm4[1,2,3]
1735 ; SSE2-NEXT:    addq $4, %rsi
1736 ; SSE2-NEXT:  LBB8_34: ## %else62
1737 ; SSE2-NEXT:    pextrw $2, %xmm8, %ecx
1738 ; SSE2-NEXT:    testb $1, %cl
1739 ; SSE2-NEXT:    je LBB8_36
1740 ; SSE2-NEXT:  ## %bb.35: ## %cond.load65
1741 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1742 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm4[0,0]
1743 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[2,0],xmm4[2,3]
1744 ; SSE2-NEXT:    addq $4, %rsi
1745 ; SSE2-NEXT:    movaps %xmm8, %xmm4
1746 ; SSE2-NEXT:  LBB8_36: ## %else66
1747 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1748 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1749 ; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
1750 ; SSE2-NEXT:    testb $1, %cl
1751 ; SSE2-NEXT:    je LBB8_38
1752 ; SSE2-NEXT:  ## %bb.37: ## %cond.load69
1753 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1754 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm4[3,0]
1755 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,1],xmm8[0,2]
1756 ; SSE2-NEXT:    addq $4, %rsi
1757 ; SSE2-NEXT:  LBB8_38: ## %else70
1758 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1759 ; SSE2-NEXT:    pextrw $6, %xmm9, %ecx
1760 ; SSE2-NEXT:    testb $1, %cl
1761 ; SSE2-NEXT:    je LBB8_40
1762 ; SSE2-NEXT:  ## %bb.39: ## %cond.load73
1763 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1764 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm4[2,0]
1765 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,1],xmm9[2,0]
1766 ; SSE2-NEXT:    addq $4, %rsi
1767 ; SSE2-NEXT:  LBB8_40: ## %else74
1768 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1769 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1770 ; SSE2-NEXT:    movd %xmm9, %ecx
1771 ; SSE2-NEXT:    testb $1, %cl
1772 ; SSE2-NEXT:    je LBB8_42
1773 ; SSE2-NEXT:  ## %bb.41: ## %cond.load77
1774 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1775 ; SSE2-NEXT:    movss {{.*#+}} xmm5 = xmm10[0],xmm5[1,2,3]
1776 ; SSE2-NEXT:    addq $4, %rsi
1777 ; SSE2-NEXT:  LBB8_42: ## %else78
1778 ; SSE2-NEXT:    pextrw $2, %xmm9, %ecx
1779 ; SSE2-NEXT:    testb $1, %cl
1780 ; SSE2-NEXT:    je LBB8_44
1781 ; SSE2-NEXT:  ## %bb.43: ## %cond.load81
1782 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1783 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm5[0,0]
1784 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[2,0],xmm5[2,3]
1785 ; SSE2-NEXT:    addq $4, %rsi
1786 ; SSE2-NEXT:    movaps %xmm9, %xmm5
1787 ; SSE2-NEXT:  LBB8_44: ## %else82
1788 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1789 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1790 ; SSE2-NEXT:    pextrw $4, %xmm8, %ecx
1791 ; SSE2-NEXT:    testb $1, %cl
1792 ; SSE2-NEXT:    je LBB8_46
1793 ; SSE2-NEXT:  ## %bb.45: ## %cond.load85
1794 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1795 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm5[3,0]
1796 ; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,1],xmm9[0,2]
1797 ; SSE2-NEXT:    addq $4, %rsi
1798 ; SSE2-NEXT:  LBB8_46: ## %else86
1799 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1800 ; SSE2-NEXT:    pextrw $6, %xmm8, %ecx
1801 ; SSE2-NEXT:    testb $1, %cl
1802 ; SSE2-NEXT:    je LBB8_48
1803 ; SSE2-NEXT:  ## %bb.47: ## %cond.load89
1804 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1805 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm5[2,0]
1806 ; SSE2-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,1],xmm8[2,0]
1807 ; SSE2-NEXT:    addq $4, %rsi
1808 ; SSE2-NEXT:  LBB8_48: ## %else90
1809 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1810 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1811 ; SSE2-NEXT:    movd %xmm8, %ecx
1812 ; SSE2-NEXT:    testb $1, %cl
1813 ; SSE2-NEXT:    je LBB8_50
1814 ; SSE2-NEXT:  ## %bb.49: ## %cond.load93
1815 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1816 ; SSE2-NEXT:    movss {{.*#+}} xmm6 = xmm10[0],xmm6[1,2,3]
1817 ; SSE2-NEXT:    addq $4, %rsi
1818 ; SSE2-NEXT:  LBB8_50: ## %else94
1819 ; SSE2-NEXT:    pextrw $2, %xmm8, %ecx
1820 ; SSE2-NEXT:    testb $1, %cl
1821 ; SSE2-NEXT:    je LBB8_52
1822 ; SSE2-NEXT:  ## %bb.51: ## %cond.load97
1823 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1824 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm6[0,0]
1825 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[2,0],xmm6[2,3]
1826 ; SSE2-NEXT:    addq $4, %rsi
1827 ; SSE2-NEXT:    movaps %xmm8, %xmm6
1828 ; SSE2-NEXT:  LBB8_52: ## %else98
1829 ; SSE2-NEXT:    xorps %xmm8, %xmm8
1830 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1831 ; SSE2-NEXT:    pextrw $4, %xmm9, %ecx
1832 ; SSE2-NEXT:    testb $1, %cl
1833 ; SSE2-NEXT:    je LBB8_54
1834 ; SSE2-NEXT:  ## %bb.53: ## %cond.load101
1835 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1836 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm6[3,0]
1837 ; SSE2-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,1],xmm8[0,2]
1838 ; SSE2-NEXT:    addq $4, %rsi
1839 ; SSE2-NEXT:  LBB8_54: ## %else102
1840 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1841 ; SSE2-NEXT:    pextrw $6, %xmm9, %ecx
1842 ; SSE2-NEXT:    testb $1, %cl
1843 ; SSE2-NEXT:    je LBB8_56
1844 ; SSE2-NEXT:  ## %bb.55: ## %cond.load105
1845 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1846 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm6[2,0]
1847 ; SSE2-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,1],xmm9[2,0]
1848 ; SSE2-NEXT:    addq $4, %rsi
1849 ; SSE2-NEXT:  LBB8_56: ## %else106
1850 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1851 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
1852 ; SSE2-NEXT:    movd %xmm9, %ecx
1853 ; SSE2-NEXT:    testb $1, %cl
1854 ; SSE2-NEXT:    je LBB8_58
1855 ; SSE2-NEXT:  ## %bb.57: ## %cond.load109
1856 ; SSE2-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1857 ; SSE2-NEXT:    movss {{.*#+}} xmm7 = xmm10[0],xmm7[1,2,3]
1858 ; SSE2-NEXT:    addq $4, %rsi
1859 ; SSE2-NEXT:  LBB8_58: ## %else110
1860 ; SSE2-NEXT:    pextrw $2, %xmm9, %ecx
1861 ; SSE2-NEXT:    testb $1, %cl
1862 ; SSE2-NEXT:    je LBB8_60
1863 ; SSE2-NEXT:  ## %bb.59: ## %cond.load113
1864 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1865 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm7[0,0]
1866 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[2,0],xmm7[2,3]
1867 ; SSE2-NEXT:    addq $4, %rsi
1868 ; SSE2-NEXT:    movaps %xmm9, %xmm7
1869 ; SSE2-NEXT:  LBB8_60: ## %else114
1870 ; SSE2-NEXT:    xorps %xmm9, %xmm9
1871 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm8
1872 ; SSE2-NEXT:    pextrw $4, %xmm8, %ecx
1873 ; SSE2-NEXT:    testb $1, %cl
1874 ; SSE2-NEXT:    je LBB8_62
1875 ; SSE2-NEXT:  ## %bb.61: ## %cond.load117
1876 ; SSE2-NEXT:    movss {{.*#+}} xmm9 = mem[0],zero,zero,zero
1877 ; SSE2-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,0],xmm7[3,0]
1878 ; SSE2-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,1],xmm9[0,2]
1879 ; SSE2-NEXT:    addq $4, %rsi
1880 ; SSE2-NEXT:  LBB8_62: ## %else118
1881 ; SSE2-NEXT:    pextrw $6, %xmm8, %ecx
1882 ; SSE2-NEXT:    testb $1, %cl
1883 ; SSE2-NEXT:    je LBB8_64
1884 ; SSE2-NEXT:  ## %bb.63: ## %cond.load121
1885 ; SSE2-NEXT:    movss {{.*#+}} xmm8 = mem[0],zero,zero,zero
1886 ; SSE2-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,0],xmm7[2,0]
1887 ; SSE2-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,1],xmm8[2,0]
1888 ; SSE2-NEXT:  LBB8_64: ## %else122
1889 ; SSE2-NEXT:    movaps %xmm0, (%rax)
1890 ; SSE2-NEXT:    movaps %xmm1, 16(%rax)
1891 ; SSE2-NEXT:    movaps %xmm2, 32(%rax)
1892 ; SSE2-NEXT:    movaps %xmm3, 48(%rax)
1893 ; SSE2-NEXT:    movaps %xmm4, 64(%rax)
1894 ; SSE2-NEXT:    movaps %xmm5, 80(%rax)
1895 ; SSE2-NEXT:    movaps %xmm6, 96(%rax)
1896 ; SSE2-NEXT:    movaps %xmm7, 112(%rax)
1897 ; SSE2-NEXT:    retq
1898 ;
1899 ; SSE42-LABEL: expandload_v32f32_v32i32:
1900 ; SSE42:       ## %bb.0:
1901 ; SSE42-NEXT:    movq %rdi, %rax
1902 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1903 ; SSE42-NEXT:    pxor %xmm8, %xmm8
1904 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
1905 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
1906 ; SSE42-NEXT:    testb $1, %cl
1907 ; SSE42-NEXT:    je LBB8_2
1908 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1909 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1910 ; SSE42-NEXT:    blendps {{.*#+}} xmm0 = xmm10[0],xmm0[1,2,3]
1911 ; SSE42-NEXT:    addq $4, %rsi
1912 ; SSE42-NEXT:  LBB8_2: ## %else
1913 ; SSE42-NEXT:    pextrb $4, %xmm8, %ecx
1914 ; SSE42-NEXT:    testb $1, %cl
1915 ; SSE42-NEXT:    je LBB8_4
1916 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1917 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1918 ; SSE42-NEXT:    addq $4, %rsi
1919 ; SSE42-NEXT:  LBB8_4: ## %else2
1920 ; SSE42-NEXT:    pxor %xmm8, %xmm8
1921 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
1922 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
1923 ; SSE42-NEXT:    testb $1, %cl
1924 ; SSE42-NEXT:    je LBB8_6
1925 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
1926 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
1927 ; SSE42-NEXT:    addq $4, %rsi
1928 ; SSE42-NEXT:  LBB8_6: ## %else6
1929 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1930 ; SSE42-NEXT:    pextrb $12, %xmm9, %ecx
1931 ; SSE42-NEXT:    testb $1, %cl
1932 ; SSE42-NEXT:    je LBB8_8
1933 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
1934 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]
1935 ; SSE42-NEXT:    addq $4, %rsi
1936 ; SSE42-NEXT:  LBB8_8: ## %else10
1937 ; SSE42-NEXT:    pxor %xmm9, %xmm9
1938 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
1939 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
1940 ; SSE42-NEXT:    testb $1, %cl
1941 ; SSE42-NEXT:    je LBB8_10
1942 ; SSE42-NEXT:  ## %bb.9: ## %cond.load13
1943 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1944 ; SSE42-NEXT:    blendps {{.*#+}} xmm1 = xmm10[0],xmm1[1,2,3]
1945 ; SSE42-NEXT:    addq $4, %rsi
1946 ; SSE42-NEXT:  LBB8_10: ## %else14
1947 ; SSE42-NEXT:    pextrb $4, %xmm9, %ecx
1948 ; SSE42-NEXT:    testb $1, %cl
1949 ; SSE42-NEXT:    je LBB8_12
1950 ; SSE42-NEXT:  ## %bb.11: ## %cond.load17
1951 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]
1952 ; SSE42-NEXT:    addq $4, %rsi
1953 ; SSE42-NEXT:  LBB8_12: ## %else18
1954 ; SSE42-NEXT:    pxor %xmm9, %xmm9
1955 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
1956 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
1957 ; SSE42-NEXT:    testb $1, %cl
1958 ; SSE42-NEXT:    je LBB8_14
1959 ; SSE42-NEXT:  ## %bb.13: ## %cond.load21
1960 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]
1961 ; SSE42-NEXT:    addq $4, %rsi
1962 ; SSE42-NEXT:  LBB8_14: ## %else22
1963 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1964 ; SSE42-NEXT:    pextrb $12, %xmm8, %ecx
1965 ; SSE42-NEXT:    testb $1, %cl
1966 ; SSE42-NEXT:    je LBB8_16
1967 ; SSE42-NEXT:  ## %bb.15: ## %cond.load25
1968 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]
1969 ; SSE42-NEXT:    addq $4, %rsi
1970 ; SSE42-NEXT:  LBB8_16: ## %else26
1971 ; SSE42-NEXT:    pxor %xmm8, %xmm8
1972 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
1973 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
1974 ; SSE42-NEXT:    testb $1, %cl
1975 ; SSE42-NEXT:    je LBB8_18
1976 ; SSE42-NEXT:  ## %bb.17: ## %cond.load29
1977 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
1978 ; SSE42-NEXT:    blendps {{.*#+}} xmm2 = xmm10[0],xmm2[1,2,3]
1979 ; SSE42-NEXT:    addq $4, %rsi
1980 ; SSE42-NEXT:  LBB8_18: ## %else30
1981 ; SSE42-NEXT:    pextrb $4, %xmm8, %ecx
1982 ; SSE42-NEXT:    testb $1, %cl
1983 ; SSE42-NEXT:    je LBB8_20
1984 ; SSE42-NEXT:  ## %bb.19: ## %cond.load33
1985 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
1986 ; SSE42-NEXT:    addq $4, %rsi
1987 ; SSE42-NEXT:  LBB8_20: ## %else34
1988 ; SSE42-NEXT:    pxor %xmm8, %xmm8
1989 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
1990 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
1991 ; SSE42-NEXT:    testb $1, %cl
1992 ; SSE42-NEXT:    je LBB8_22
1993 ; SSE42-NEXT:  ## %bb.21: ## %cond.load37
1994 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1995 ; SSE42-NEXT:    addq $4, %rsi
1996 ; SSE42-NEXT:  LBB8_22: ## %else38
1997 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1998 ; SSE42-NEXT:    pextrb $12, %xmm9, %ecx
1999 ; SSE42-NEXT:    testb $1, %cl
2000 ; SSE42-NEXT:    je LBB8_24
2001 ; SSE42-NEXT:  ## %bb.23: ## %cond.load41
2002 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
2003 ; SSE42-NEXT:    addq $4, %rsi
2004 ; SSE42-NEXT:  LBB8_24: ## %else42
2005 ; SSE42-NEXT:    pxor %xmm9, %xmm9
2006 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
2007 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
2008 ; SSE42-NEXT:    testb $1, %cl
2009 ; SSE42-NEXT:    je LBB8_26
2010 ; SSE42-NEXT:  ## %bb.25: ## %cond.load45
2011 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
2012 ; SSE42-NEXT:    blendps {{.*#+}} xmm3 = xmm10[0],xmm3[1,2,3]
2013 ; SSE42-NEXT:    addq $4, %rsi
2014 ; SSE42-NEXT:  LBB8_26: ## %else46
2015 ; SSE42-NEXT:    pextrb $4, %xmm9, %ecx
2016 ; SSE42-NEXT:    testb $1, %cl
2017 ; SSE42-NEXT:    je LBB8_28
2018 ; SSE42-NEXT:  ## %bb.27: ## %cond.load49
2019 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],mem[0],xmm3[2,3]
2020 ; SSE42-NEXT:    addq $4, %rsi
2021 ; SSE42-NEXT:  LBB8_28: ## %else50
2022 ; SSE42-NEXT:    pxor %xmm9, %xmm9
2023 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
2024 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
2025 ; SSE42-NEXT:    testb $1, %cl
2026 ; SSE42-NEXT:    je LBB8_30
2027 ; SSE42-NEXT:  ## %bb.29: ## %cond.load53
2028 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]
2029 ; SSE42-NEXT:    addq $4, %rsi
2030 ; SSE42-NEXT:  LBB8_30: ## %else54
2031 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
2032 ; SSE42-NEXT:    pextrb $12, %xmm8, %ecx
2033 ; SSE42-NEXT:    testb $1, %cl
2034 ; SSE42-NEXT:    je LBB8_32
2035 ; SSE42-NEXT:  ## %bb.31: ## %cond.load57
2036 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1,2],mem[0]
2037 ; SSE42-NEXT:    addq $4, %rsi
2038 ; SSE42-NEXT:  LBB8_32: ## %else58
2039 ; SSE42-NEXT:    pxor %xmm8, %xmm8
2040 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
2041 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
2042 ; SSE42-NEXT:    testb $1, %cl
2043 ; SSE42-NEXT:    je LBB8_34
2044 ; SSE42-NEXT:  ## %bb.33: ## %cond.load61
2045 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
2046 ; SSE42-NEXT:    blendps {{.*#+}} xmm4 = xmm10[0],xmm4[1,2,3]
2047 ; SSE42-NEXT:    addq $4, %rsi
2048 ; SSE42-NEXT:  LBB8_34: ## %else62
2049 ; SSE42-NEXT:    pextrb $4, %xmm8, %ecx
2050 ; SSE42-NEXT:    testb $1, %cl
2051 ; SSE42-NEXT:    je LBB8_36
2052 ; SSE42-NEXT:  ## %bb.35: ## %cond.load65
2053 ; SSE42-NEXT:    insertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2054 ; SSE42-NEXT:    addq $4, %rsi
2055 ; SSE42-NEXT:  LBB8_36: ## %else66
2056 ; SSE42-NEXT:    pxor %xmm8, %xmm8
2057 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
2058 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
2059 ; SSE42-NEXT:    testb $1, %cl
2060 ; SSE42-NEXT:    je LBB8_38
2061 ; SSE42-NEXT:  ## %bb.37: ## %cond.load69
2062 ; SSE42-NEXT:    insertps {{.*#+}} xmm4 = xmm4[0,1],mem[0],xmm4[3]
2063 ; SSE42-NEXT:    addq $4, %rsi
2064 ; SSE42-NEXT:  LBB8_38: ## %else70
2065 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
2066 ; SSE42-NEXT:    pextrb $12, %xmm9, %ecx
2067 ; SSE42-NEXT:    testb $1, %cl
2068 ; SSE42-NEXT:    je LBB8_40
2069 ; SSE42-NEXT:  ## %bb.39: ## %cond.load73
2070 ; SSE42-NEXT:    insertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2071 ; SSE42-NEXT:    addq $4, %rsi
2072 ; SSE42-NEXT:  LBB8_40: ## %else74
2073 ; SSE42-NEXT:    pxor %xmm9, %xmm9
2074 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
2075 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
2076 ; SSE42-NEXT:    testb $1, %cl
2077 ; SSE42-NEXT:    je LBB8_42
2078 ; SSE42-NEXT:  ## %bb.41: ## %cond.load77
2079 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
2080 ; SSE42-NEXT:    blendps {{.*#+}} xmm5 = xmm10[0],xmm5[1,2,3]
2081 ; SSE42-NEXT:    addq $4, %rsi
2082 ; SSE42-NEXT:  LBB8_42: ## %else78
2083 ; SSE42-NEXT:    pextrb $4, %xmm9, %ecx
2084 ; SSE42-NEXT:    testb $1, %cl
2085 ; SSE42-NEXT:    je LBB8_44
2086 ; SSE42-NEXT:  ## %bb.43: ## %cond.load81
2087 ; SSE42-NEXT:    insertps {{.*#+}} xmm5 = xmm5[0],mem[0],xmm5[2,3]
2088 ; SSE42-NEXT:    addq $4, %rsi
2089 ; SSE42-NEXT:  LBB8_44: ## %else82
2090 ; SSE42-NEXT:    pxor %xmm9, %xmm9
2091 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
2092 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
2093 ; SSE42-NEXT:    testb $1, %cl
2094 ; SSE42-NEXT:    je LBB8_46
2095 ; SSE42-NEXT:  ## %bb.45: ## %cond.load85
2096 ; SSE42-NEXT:    insertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2097 ; SSE42-NEXT:    addq $4, %rsi
2098 ; SSE42-NEXT:  LBB8_46: ## %else86
2099 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
2100 ; SSE42-NEXT:    pextrb $12, %xmm8, %ecx
2101 ; SSE42-NEXT:    testb $1, %cl
2102 ; SSE42-NEXT:    je LBB8_48
2103 ; SSE42-NEXT:  ## %bb.47: ## %cond.load89
2104 ; SSE42-NEXT:    insertps {{.*#+}} xmm5 = xmm5[0,1,2],mem[0]
2105 ; SSE42-NEXT:    addq $4, %rsi
2106 ; SSE42-NEXT:  LBB8_48: ## %else90
2107 ; SSE42-NEXT:    pxor %xmm8, %xmm8
2108 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
2109 ; SSE42-NEXT:    pextrb $0, %xmm8, %ecx
2110 ; SSE42-NEXT:    testb $1, %cl
2111 ; SSE42-NEXT:    je LBB8_50
2112 ; SSE42-NEXT:  ## %bb.49: ## %cond.load93
2113 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
2114 ; SSE42-NEXT:    blendps {{.*#+}} xmm6 = xmm10[0],xmm6[1,2,3]
2115 ; SSE42-NEXT:    addq $4, %rsi
2116 ; SSE42-NEXT:  LBB8_50: ## %else94
2117 ; SSE42-NEXT:    pextrb $4, %xmm8, %ecx
2118 ; SSE42-NEXT:    testb $1, %cl
2119 ; SSE42-NEXT:    je LBB8_52
2120 ; SSE42-NEXT:  ## %bb.51: ## %cond.load97
2121 ; SSE42-NEXT:    insertps {{.*#+}} xmm6 = xmm6[0],mem[0],xmm6[2,3]
2122 ; SSE42-NEXT:    addq $4, %rsi
2123 ; SSE42-NEXT:  LBB8_52: ## %else98
2124 ; SSE42-NEXT:    pxor %xmm8, %xmm8
2125 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
2126 ; SSE42-NEXT:    pextrb $8, %xmm9, %ecx
2127 ; SSE42-NEXT:    testb $1, %cl
2128 ; SSE42-NEXT:    je LBB8_54
2129 ; SSE42-NEXT:  ## %bb.53: ## %cond.load101
2130 ; SSE42-NEXT:    insertps {{.*#+}} xmm6 = xmm6[0,1],mem[0],xmm6[3]
2131 ; SSE42-NEXT:    addq $4, %rsi
2132 ; SSE42-NEXT:  LBB8_54: ## %else102
2133 ; SSE42-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
2134 ; SSE42-NEXT:    pextrb $12, %xmm9, %ecx
2135 ; SSE42-NEXT:    testb $1, %cl
2136 ; SSE42-NEXT:    je LBB8_56
2137 ; SSE42-NEXT:  ## %bb.55: ## %cond.load105
2138 ; SSE42-NEXT:    insertps {{.*#+}} xmm6 = xmm6[0,1,2],mem[0]
2139 ; SSE42-NEXT:    addq $4, %rsi
2140 ; SSE42-NEXT:  LBB8_56: ## %else106
2141 ; SSE42-NEXT:    pxor %xmm9, %xmm9
2142 ; SSE42-NEXT:    pcmpeqd %xmm8, %xmm9
2143 ; SSE42-NEXT:    pextrb $0, %xmm9, %ecx
2144 ; SSE42-NEXT:    testb $1, %cl
2145 ; SSE42-NEXT:    je LBB8_58
2146 ; SSE42-NEXT:  ## %bb.57: ## %cond.load109
2147 ; SSE42-NEXT:    movss {{.*#+}} xmm10 = mem[0],zero,zero,zero
2148 ; SSE42-NEXT:    blendps {{.*#+}} xmm7 = xmm10[0],xmm7[1,2,3]
2149 ; SSE42-NEXT:    addq $4, %rsi
2150 ; SSE42-NEXT:  LBB8_58: ## %else110
2151 ; SSE42-NEXT:    pextrb $4, %xmm9, %ecx
2152 ; SSE42-NEXT:    testb $1, %cl
2153 ; SSE42-NEXT:    je LBB8_60
2154 ; SSE42-NEXT:  ## %bb.59: ## %cond.load113
2155 ; SSE42-NEXT:    insertps {{.*#+}} xmm7 = xmm7[0],mem[0],xmm7[2,3]
2156 ; SSE42-NEXT:    addq $4, %rsi
2157 ; SSE42-NEXT:  LBB8_60: ## %else114
2158 ; SSE42-NEXT:    pxor %xmm9, %xmm9
2159 ; SSE42-NEXT:    pcmpeqd %xmm9, %xmm8
2160 ; SSE42-NEXT:    pextrb $8, %xmm8, %ecx
2161 ; SSE42-NEXT:    testb $1, %cl
2162 ; SSE42-NEXT:    je LBB8_62
2163 ; SSE42-NEXT:  ## %bb.61: ## %cond.load117
2164 ; SSE42-NEXT:    insertps {{.*#+}} xmm7 = xmm7[0,1],mem[0],xmm7[3]
2165 ; SSE42-NEXT:    addq $4, %rsi
2166 ; SSE42-NEXT:  LBB8_62: ## %else118
2167 ; SSE42-NEXT:    pextrb $12, %xmm8, %ecx
2168 ; SSE42-NEXT:    testb $1, %cl
2169 ; SSE42-NEXT:    je LBB8_64
2170 ; SSE42-NEXT:  ## %bb.63: ## %cond.load121
2171 ; SSE42-NEXT:    insertps {{.*#+}} xmm7 = xmm7[0,1,2],mem[0]
2172 ; SSE42-NEXT:  LBB8_64: ## %else122
2173 ; SSE42-NEXT:    movaps %xmm0, (%rax)
2174 ; SSE42-NEXT:    movaps %xmm1, 16(%rax)
2175 ; SSE42-NEXT:    movaps %xmm2, 32(%rax)
2176 ; SSE42-NEXT:    movaps %xmm3, 48(%rax)
2177 ; SSE42-NEXT:    movaps %xmm4, 64(%rax)
2178 ; SSE42-NEXT:    movaps %xmm5, 80(%rax)
2179 ; SSE42-NEXT:    movaps %xmm6, 96(%rax)
2180 ; SSE42-NEXT:    movaps %xmm7, 112(%rax)
2181 ; SSE42-NEXT:    retq
2182 ;
2183 ; AVX1-LABEL: expandload_v32f32_v32i32:
2184 ; AVX1:       ## %bb.0:
2185 ; AVX1-NEXT:    vpxor %xmm8, %xmm8, %xmm8
2186 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm9
2187 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm9, %xmm9
2188 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
2189 ; AVX1-NEXT:    vpextrb $0, %xmm9, %eax
2190 ; AVX1-NEXT:    testb $1, %al
2191 ; AVX1-NEXT:    je LBB8_2
2192 ; AVX1-NEXT:  ## %bb.1: ## %cond.load
2193 ; AVX1-NEXT:    vmovss {{.*#+}} xmm9 = mem[0],zero,zero,zero
2194 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm9[0],ymm0[1,2,3,4,5,6,7]
2195 ; AVX1-NEXT:    addq $4, %rdi
2196 ; AVX1-NEXT:  LBB8_2: ## %else
2197 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm8
2198 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
2199 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
2200 ; AVX1-NEXT:    vpextrb $1, %xmm8, %eax
2201 ; AVX1-NEXT:    testb $1, %al
2202 ; AVX1-NEXT:    je LBB8_4
2203 ; AVX1-NEXT:  ## %bb.3: ## %cond.load1
2204 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm8 = xmm0[0],mem[0],xmm0[2,3]
2205 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm8[0,1,2,3],ymm0[4,5,6,7]
2206 ; AVX1-NEXT:    addq $4, %rdi
2207 ; AVX1-NEXT:  LBB8_4: ## %else2
2208 ; AVX1-NEXT:    vxorps %xmm8, %xmm8, %xmm8
2209 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm9
2210 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm9, %xmm9
2211 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
2212 ; AVX1-NEXT:    vpextrb $2, %xmm9, %eax
2213 ; AVX1-NEXT:    testb $1, %al
2214 ; AVX1-NEXT:    je LBB8_6
2215 ; AVX1-NEXT:  ## %bb.5: ## %cond.load5
2216 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm9 = xmm0[0,1],mem[0],xmm0[3]
2217 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm9[0,1,2,3],ymm0[4,5,6,7]
2218 ; AVX1-NEXT:    addq $4, %rdi
2219 ; AVX1-NEXT:  LBB8_6: ## %else6
2220 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm4, %xmm8
2221 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
2222 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
2223 ; AVX1-NEXT:    vpextrb $3, %xmm8, %eax
2224 ; AVX1-NEXT:    testb $1, %al
2225 ; AVX1-NEXT:    je LBB8_8
2226 ; AVX1-NEXT:  ## %bb.7: ## %cond.load9
2227 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm8 = xmm0[0,1,2],mem[0]
2228 ; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm8[0,1,2,3],ymm0[4,5,6,7]
2229 ; AVX1-NEXT:    addq $4, %rdi
2230 ; AVX1-NEXT:  LBB8_8: ## %else10
2231 ; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm8
2232 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2233 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm9
2234 ; AVX1-NEXT:    vpackssdw %xmm9, %xmm0, %xmm4
2235 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2236 ; AVX1-NEXT:    vpextrb $4, %xmm4, %eax
2237 ; AVX1-NEXT:    testb $1, %al
2238 ; AVX1-NEXT:    je LBB8_10
2239 ; AVX1-NEXT:  ## %bb.9: ## %cond.load13
2240 ; AVX1-NEXT:    vmovd {{.*#+}} xmm10 = mem[0],zero,zero,zero
2241 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2242 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm10[0,1],xmm4[2,3,4,5,6,7]
2243 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2244 ; AVX1-NEXT:    addq $4, %rdi
2245 ; AVX1-NEXT:  LBB8_10: ## %else14
2246 ; AVX1-NEXT:    vpackssdw %xmm9, %xmm0, %xmm4
2247 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2248 ; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
2249 ; AVX1-NEXT:    testb $1, %al
2250 ; AVX1-NEXT:    je LBB8_12
2251 ; AVX1-NEXT:  ## %bb.11: ## %cond.load17
2252 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2253 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2254 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2255 ; AVX1-NEXT:    addq $4, %rdi
2256 ; AVX1-NEXT:  LBB8_12: ## %else18
2257 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2258 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm8
2259 ; AVX1-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
2260 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2261 ; AVX1-NEXT:    vpextrb $6, %xmm4, %eax
2262 ; AVX1-NEXT:    testb $1, %al
2263 ; AVX1-NEXT:    je LBB8_14
2264 ; AVX1-NEXT:  ## %bb.13: ## %cond.load21
2265 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2266 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],mem[0],xmm4[3]
2267 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2268 ; AVX1-NEXT:    addq $4, %rdi
2269 ; AVX1-NEXT:  LBB8_14: ## %else22
2270 ; AVX1-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
2271 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2272 ; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
2273 ; AVX1-NEXT:    testb $1, %al
2274 ; AVX1-NEXT:    je LBB8_16
2275 ; AVX1-NEXT:  ## %bb.15: ## %cond.load25
2276 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2277 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2278 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2279 ; AVX1-NEXT:    addq $4, %rdi
2280 ; AVX1-NEXT:  LBB8_16: ## %else26
2281 ; AVX1-NEXT:    vpxor %xmm8, %xmm8, %xmm8
2282 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
2283 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2284 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2285 ; AVX1-NEXT:    vpextrb $8, %xmm4, %eax
2286 ; AVX1-NEXT:    testb $1, %al
2287 ; AVX1-NEXT:    je LBB8_18
2288 ; AVX1-NEXT:  ## %bb.17: ## %cond.load29
2289 ; AVX1-NEXT:    vmovss {{.*#+}} xmm4 = mem[0],zero,zero,zero
2290 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0],ymm1[1,2,3,4,5,6,7]
2291 ; AVX1-NEXT:    addq $4, %rdi
2292 ; AVX1-NEXT:  LBB8_18: ## %else30
2293 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
2294 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2295 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2296 ; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
2297 ; AVX1-NEXT:    testb $1, %al
2298 ; AVX1-NEXT:    je LBB8_20
2299 ; AVX1-NEXT:  ## %bb.19: ## %cond.load33
2300 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm1[0],mem[0],xmm1[2,3]
2301 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
2302 ; AVX1-NEXT:    addq $4, %rdi
2303 ; AVX1-NEXT:  LBB8_20: ## %else34
2304 ; AVX1-NEXT:    vpxor %xmm8, %xmm8, %xmm8
2305 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
2306 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2307 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2308 ; AVX1-NEXT:    vpextrb $10, %xmm4, %eax
2309 ; AVX1-NEXT:    testb $1, %al
2310 ; AVX1-NEXT:    je LBB8_22
2311 ; AVX1-NEXT:  ## %bb.21: ## %cond.load37
2312 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm1[0,1],mem[0],xmm1[3]
2313 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
2314 ; AVX1-NEXT:    addq $4, %rdi
2315 ; AVX1-NEXT:  LBB8_22: ## %else38
2316 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm5, %xmm4
2317 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2318 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2319 ; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
2320 ; AVX1-NEXT:    testb $1, %al
2321 ; AVX1-NEXT:    je LBB8_24
2322 ; AVX1-NEXT:  ## %bb.23: ## %cond.load41
2323 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm1[0,1,2],mem[0]
2324 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
2325 ; AVX1-NEXT:    addq $4, %rdi
2326 ; AVX1-NEXT:  LBB8_24: ## %else42
2327 ; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm8
2328 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
2329 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm8, %xmm5
2330 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm4
2331 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2332 ; AVX1-NEXT:    vpextrb $12, %xmm4, %eax
2333 ; AVX1-NEXT:    testb $1, %al
2334 ; AVX1-NEXT:    je LBB8_26
2335 ; AVX1-NEXT:  ## %bb.25: ## %cond.load45
2336 ; AVX1-NEXT:    vmovd {{.*#+}} xmm9 = mem[0],zero,zero,zero
2337 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
2338 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm9[0,1],xmm4[2,3,4,5,6,7]
2339 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2340 ; AVX1-NEXT:    addq $4, %rdi
2341 ; AVX1-NEXT:  LBB8_26: ## %else46
2342 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm4
2343 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2344 ; AVX1-NEXT:    vpextrb $13, %xmm4, %eax
2345 ; AVX1-NEXT:    testb $1, %al
2346 ; AVX1-NEXT:    je LBB8_28
2347 ; AVX1-NEXT:  ## %bb.27: ## %cond.load49
2348 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
2349 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2350 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2351 ; AVX1-NEXT:    addq $4, %rdi
2352 ; AVX1-NEXT:  LBB8_28: ## %else50
2353 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2354 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm4
2355 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2356 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2357 ; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
2358 ; AVX1-NEXT:    testb $1, %al
2359 ; AVX1-NEXT:    je LBB8_30
2360 ; AVX1-NEXT:  ## %bb.29: ## %cond.load53
2361 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
2362 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2363 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1
2364 ; AVX1-NEXT:    addq $4, %rdi
2365 ; AVX1-NEXT:  LBB8_30: ## %else54
2366 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2367 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2368 ; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
2369 ; AVX1-NEXT:    testb $1, %al
2370 ; AVX1-NEXT:    je LBB8_32
2371 ; AVX1-NEXT:  ## %bb.31: ## %cond.load57
2372 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
2373 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2374 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2375 ; AVX1-NEXT:    addq $4, %rdi
2376 ; AVX1-NEXT:  LBB8_32: ## %else58
2377 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2378 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm5
2379 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
2380 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2381 ; AVX1-NEXT:    vpextrb $0, %xmm5, %eax
2382 ; AVX1-NEXT:    testb $1, %al
2383 ; AVX1-NEXT:    je LBB8_34
2384 ; AVX1-NEXT:  ## %bb.33: ## %cond.load61
2385 ; AVX1-NEXT:    vmovss {{.*#+}} xmm5 = mem[0],zero,zero,zero
2386 ; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm5[0],ymm2[1,2,3,4,5,6,7]
2387 ; AVX1-NEXT:    addq $4, %rdi
2388 ; AVX1-NEXT:  LBB8_34: ## %else62
2389 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm4
2390 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2391 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2392 ; AVX1-NEXT:    vpextrb $1, %xmm4, %eax
2393 ; AVX1-NEXT:    testb $1, %al
2394 ; AVX1-NEXT:    je LBB8_36
2395 ; AVX1-NEXT:  ## %bb.35: ## %cond.load65
2396 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm2[0],mem[0],xmm2[2,3]
2397 ; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm4[0,1,2,3],ymm2[4,5,6,7]
2398 ; AVX1-NEXT:    addq $4, %rdi
2399 ; AVX1-NEXT:  LBB8_36: ## %else66
2400 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2401 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm5
2402 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
2403 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2404 ; AVX1-NEXT:    vpextrb $2, %xmm5, %eax
2405 ; AVX1-NEXT:    testb $1, %al
2406 ; AVX1-NEXT:    je LBB8_38
2407 ; AVX1-NEXT:  ## %bb.37: ## %cond.load69
2408 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm2[0,1],mem[0],xmm2[3]
2409 ; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
2410 ; AVX1-NEXT:    addq $4, %rdi
2411 ; AVX1-NEXT:  LBB8_38: ## %else70
2412 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm4
2413 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2414 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2415 ; AVX1-NEXT:    vpextrb $3, %xmm4, %eax
2416 ; AVX1-NEXT:    testb $1, %al
2417 ; AVX1-NEXT:    je LBB8_40
2418 ; AVX1-NEXT:  ## %bb.39: ## %cond.load73
2419 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm2[0,1,2],mem[0]
2420 ; AVX1-NEXT:    vblendps {{.*#+}} ymm2 = ymm4[0,1,2,3],ymm2[4,5,6,7]
2421 ; AVX1-NEXT:    addq $4, %rdi
2422 ; AVX1-NEXT:  LBB8_40: ## %else74
2423 ; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm8
2424 ; AVX1-NEXT:    vxorps %xmm5, %xmm5, %xmm5
2425 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm8, %xmm5
2426 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm6
2427 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm6, %xmm6
2428 ; AVX1-NEXT:    vpextrb $4, %xmm6, %eax
2429 ; AVX1-NEXT:    testb $1, %al
2430 ; AVX1-NEXT:    je LBB8_42
2431 ; AVX1-NEXT:  ## %bb.41: ## %cond.load77
2432 ; AVX1-NEXT:    vmovss {{.*#+}} xmm6 = mem[0],zero,zero,zero
2433 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
2434 ; AVX1-NEXT:    vblendps {{.*#+}} xmm4 = xmm6[0],xmm4[1,2,3]
2435 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
2436 ; AVX1-NEXT:    addq $4, %rdi
2437 ; AVX1-NEXT:  LBB8_42: ## %else78
2438 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm4
2439 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2440 ; AVX1-NEXT:    vpextrb $5, %xmm4, %eax
2441 ; AVX1-NEXT:    testb $1, %al
2442 ; AVX1-NEXT:    je LBB8_44
2443 ; AVX1-NEXT:  ## %bb.43: ## %cond.load81
2444 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
2445 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2446 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
2447 ; AVX1-NEXT:    addq $4, %rdi
2448 ; AVX1-NEXT:  LBB8_44: ## %else82
2449 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2450 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm8, %xmm4
2451 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2452 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2453 ; AVX1-NEXT:    vpextrb $6, %xmm5, %eax
2454 ; AVX1-NEXT:    testb $1, %al
2455 ; AVX1-NEXT:    je LBB8_46
2456 ; AVX1-NEXT:  ## %bb.45: ## %cond.load85
2457 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
2458 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2459 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm2, %ymm2
2460 ; AVX1-NEXT:    addq $4, %rdi
2461 ; AVX1-NEXT:  LBB8_46: ## %else86
2462 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2463 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2464 ; AVX1-NEXT:    vpextrb $7, %xmm4, %eax
2465 ; AVX1-NEXT:    testb $1, %al
2466 ; AVX1-NEXT:    je LBB8_48
2467 ; AVX1-NEXT:  ## %bb.47: ## %cond.load89
2468 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
2469 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2470 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
2471 ; AVX1-NEXT:    addq $4, %rdi
2472 ; AVX1-NEXT:  LBB8_48: ## %else90
2473 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2474 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm5
2475 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
2476 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2477 ; AVX1-NEXT:    vpextrb $8, %xmm5, %eax
2478 ; AVX1-NEXT:    testb $1, %al
2479 ; AVX1-NEXT:    je LBB8_50
2480 ; AVX1-NEXT:  ## %bb.49: ## %cond.load93
2481 ; AVX1-NEXT:    vmovss {{.*#+}} xmm5 = mem[0],zero,zero,zero
2482 ; AVX1-NEXT:    vblendps {{.*#+}} ymm3 = ymm5[0],ymm3[1,2,3,4,5,6,7]
2483 ; AVX1-NEXT:    addq $4, %rdi
2484 ; AVX1-NEXT:  LBB8_50: ## %else94
2485 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm4
2486 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2487 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2488 ; AVX1-NEXT:    vpextrb $9, %xmm4, %eax
2489 ; AVX1-NEXT:    testb $1, %al
2490 ; AVX1-NEXT:    je LBB8_52
2491 ; AVX1-NEXT:  ## %bb.51: ## %cond.load97
2492 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm3[0],mem[0],xmm3[2,3]
2493 ; AVX1-NEXT:    vblendps {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
2494 ; AVX1-NEXT:    addq $4, %rdi
2495 ; AVX1-NEXT:  LBB8_52: ## %else98
2496 ; AVX1-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2497 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm5
2498 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm5, %xmm5
2499 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2500 ; AVX1-NEXT:    vpextrb $10, %xmm5, %eax
2501 ; AVX1-NEXT:    testb $1, %al
2502 ; AVX1-NEXT:    je LBB8_54
2503 ; AVX1-NEXT:  ## %bb.53: ## %cond.load101
2504 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm3[0,1],mem[0],xmm3[3]
2505 ; AVX1-NEXT:    vblendps {{.*#+}} ymm3 = ymm5[0,1,2,3],ymm3[4,5,6,7]
2506 ; AVX1-NEXT:    addq $4, %rdi
2507 ; AVX1-NEXT:  LBB8_54: ## %else102
2508 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm4
2509 ; AVX1-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2510 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2511 ; AVX1-NEXT:    vpextrb $11, %xmm4, %eax
2512 ; AVX1-NEXT:    testb $1, %al
2513 ; AVX1-NEXT:    je LBB8_56
2514 ; AVX1-NEXT:  ## %bb.55: ## %cond.load105
2515 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm3[0,1,2],mem[0]
2516 ; AVX1-NEXT:    vblendps {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
2517 ; AVX1-NEXT:    addq $4, %rdi
2518 ; AVX1-NEXT:  LBB8_56: ## %else106
2519 ; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm4
2520 ; AVX1-NEXT:    vxorps %xmm5, %xmm5, %xmm5
2521 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm5
2522 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm6
2523 ; AVX1-NEXT:    vpacksswb %xmm6, %xmm0, %xmm6
2524 ; AVX1-NEXT:    vpextrb $12, %xmm6, %eax
2525 ; AVX1-NEXT:    testb $1, %al
2526 ; AVX1-NEXT:    je LBB8_58
2527 ; AVX1-NEXT:  ## %bb.57: ## %cond.load109
2528 ; AVX1-NEXT:    vmovd {{.*#+}} xmm6 = mem[0],zero,zero,zero
2529 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
2530 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm6 = xmm6[0,1],xmm7[2,3,4,5,6,7]
2531 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm3, %ymm3
2532 ; AVX1-NEXT:    addq $4, %rdi
2533 ; AVX1-NEXT:  LBB8_58: ## %else110
2534 ; AVX1-NEXT:    vpackssdw %xmm5, %xmm0, %xmm5
2535 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2536 ; AVX1-NEXT:    vpextrb $13, %xmm5, %eax
2537 ; AVX1-NEXT:    testb $1, %al
2538 ; AVX1-NEXT:    je LBB8_60
2539 ; AVX1-NEXT:  ## %bb.59: ## %cond.load113
2540 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
2541 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0],mem[0],xmm5[2,3]
2542 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
2543 ; AVX1-NEXT:    addq $4, %rdi
2544 ; AVX1-NEXT:  LBB8_60: ## %else114
2545 ; AVX1-NEXT:    vxorps %xmm5, %xmm5, %xmm5
2546 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm4
2547 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2548 ; AVX1-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2549 ; AVX1-NEXT:    vpextrb $14, %xmm5, %eax
2550 ; AVX1-NEXT:    testb $1, %al
2551 ; AVX1-NEXT:    je LBB8_62
2552 ; AVX1-NEXT:  ## %bb.61: ## %cond.load117
2553 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
2554 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2555 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
2556 ; AVX1-NEXT:    addq $4, %rdi
2557 ; AVX1-NEXT:  LBB8_62: ## %else118
2558 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2559 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2560 ; AVX1-NEXT:    vpextrb $15, %xmm4, %eax
2561 ; AVX1-NEXT:    testb $1, %al
2562 ; AVX1-NEXT:    je LBB8_64
2563 ; AVX1-NEXT:  ## %bb.63: ## %cond.load121
2564 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
2565 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2566 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
2567 ; AVX1-NEXT:  LBB8_64: ## %else122
2568 ; AVX1-NEXT:    retq
2569 ;
2570 ; AVX2-LABEL: expandload_v32f32_v32i32:
2571 ; AVX2:       ## %bb.0:
2572 ; AVX2-NEXT:    vpxor %xmm8, %xmm8, %xmm8
2573 ; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
2574 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm9
2575 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
2576 ; AVX2-NEXT:    vpextrb $0, %xmm9, %eax
2577 ; AVX2-NEXT:    testb $1, %al
2578 ; AVX2-NEXT:    je LBB8_2
2579 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
2580 ; AVX2-NEXT:    vmovd {{.*#+}} xmm9 = mem[0],zero,zero,zero
2581 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm9[0],ymm0[1,2,3,4,5,6,7]
2582 ; AVX2-NEXT:    addq $4, %rdi
2583 ; AVX2-NEXT:  LBB8_2: ## %else
2584 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
2585 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
2586 ; AVX2-NEXT:    vpextrb $1, %xmm8, %eax
2587 ; AVX2-NEXT:    testb $1, %al
2588 ; AVX2-NEXT:    je LBB8_4
2589 ; AVX2-NEXT:  ## %bb.3: ## %cond.load1
2590 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm8 = xmm0[0],mem[0],xmm0[2,3]
2591 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm8[0,1,2,3],ymm0[4,5,6,7]
2592 ; AVX2-NEXT:    addq $4, %rdi
2593 ; AVX2-NEXT:  LBB8_4: ## %else2
2594 ; AVX2-NEXT:    vxorps %xmm8, %xmm8, %xmm8
2595 ; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
2596 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm9
2597 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
2598 ; AVX2-NEXT:    vpextrb $2, %xmm9, %eax
2599 ; AVX2-NEXT:    testb $1, %al
2600 ; AVX2-NEXT:    je LBB8_6
2601 ; AVX2-NEXT:  ## %bb.5: ## %cond.load5
2602 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm9 = xmm0[0,1],mem[0],xmm0[3]
2603 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm9[0,1,2,3],ymm0[4,5,6,7]
2604 ; AVX2-NEXT:    addq $4, %rdi
2605 ; AVX2-NEXT:  LBB8_6: ## %else6
2606 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm8
2607 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
2608 ; AVX2-NEXT:    vpextrb $3, %xmm8, %eax
2609 ; AVX2-NEXT:    testb $1, %al
2610 ; AVX2-NEXT:    je LBB8_8
2611 ; AVX2-NEXT:  ## %bb.7: ## %cond.load9
2612 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm8 = xmm0[0,1,2],mem[0]
2613 ; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm8[0,1,2,3],ymm0[4,5,6,7]
2614 ; AVX2-NEXT:    addq $4, %rdi
2615 ; AVX2-NEXT:  LBB8_8: ## %else10
2616 ; AVX2-NEXT:    vxorps %xmm8, %xmm8, %xmm8
2617 ; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm8
2618 ; AVX2-NEXT:    vextracti128 $1, %ymm8, %xmm8
2619 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm9
2620 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm9, %xmm9
2621 ; AVX2-NEXT:    vpextrb $4, %xmm9, %eax
2622 ; AVX2-NEXT:    testb $1, %al
2623 ; AVX2-NEXT:    je LBB8_10
2624 ; AVX2-NEXT:  ## %bb.9: ## %cond.load13
2625 ; AVX2-NEXT:    vmovss {{.*#+}} xmm9 = mem[0],zero,zero,zero
2626 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm10
2627 ; AVX2-NEXT:    vblendps {{.*#+}} xmm9 = xmm9[0],xmm10[1,2,3]
2628 ; AVX2-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm0
2629 ; AVX2-NEXT:    addq $4, %rdi
2630 ; AVX2-NEXT:  LBB8_10: ## %else14
2631 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm8
2632 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm8, %xmm8
2633 ; AVX2-NEXT:    vpextrb $5, %xmm8, %eax
2634 ; AVX2-NEXT:    testb $1, %al
2635 ; AVX2-NEXT:    je LBB8_12
2636 ; AVX2-NEXT:  ## %bb.11: ## %cond.load17
2637 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm8
2638 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm8 = xmm8[0],mem[0],xmm8[2,3]
2639 ; AVX2-NEXT:    vinsertf128 $1, %xmm8, %ymm0, %ymm0
2640 ; AVX2-NEXT:    addq $4, %rdi
2641 ; AVX2-NEXT:  LBB8_12: ## %else18
2642 ; AVX2-NEXT:    vxorps %xmm8, %xmm8, %xmm8
2643 ; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm4, %ymm4
2644 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm8
2645 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
2646 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2647 ; AVX2-NEXT:    vpextrb $6, %xmm4, %eax
2648 ; AVX2-NEXT:    testb $1, %al
2649 ; AVX2-NEXT:    je LBB8_14
2650 ; AVX2-NEXT:  ## %bb.13: ## %cond.load21
2651 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4
2652 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],mem[0],xmm4[3]
2653 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2654 ; AVX2-NEXT:    addq $4, %rdi
2655 ; AVX2-NEXT:  LBB8_14: ## %else22
2656 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
2657 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2658 ; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
2659 ; AVX2-NEXT:    testb $1, %al
2660 ; AVX2-NEXT:    je LBB8_16
2661 ; AVX2-NEXT:  ## %bb.15: ## %cond.load25
2662 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4
2663 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2664 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2665 ; AVX2-NEXT:    addq $4, %rdi
2666 ; AVX2-NEXT:  LBB8_16: ## %else26
2667 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2668 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm8
2669 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
2670 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2671 ; AVX2-NEXT:    vpextrb $8, %xmm4, %eax
2672 ; AVX2-NEXT:    testb $1, %al
2673 ; AVX2-NEXT:    je LBB8_18
2674 ; AVX2-NEXT:  ## %bb.17: ## %cond.load29
2675 ; AVX2-NEXT:    vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero
2676 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm4[0],ymm1[1,2,3,4,5,6,7]
2677 ; AVX2-NEXT:    addq $4, %rdi
2678 ; AVX2-NEXT:  LBB8_18: ## %else30
2679 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
2680 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2681 ; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
2682 ; AVX2-NEXT:    testb $1, %al
2683 ; AVX2-NEXT:    je LBB8_20
2684 ; AVX2-NEXT:  ## %bb.19: ## %cond.load33
2685 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm1[0],mem[0],xmm1[2,3]
2686 ; AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
2687 ; AVX2-NEXT:    addq $4, %rdi
2688 ; AVX2-NEXT:  LBB8_20: ## %else34
2689 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2690 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm8
2691 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
2692 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2693 ; AVX2-NEXT:    vpextrb $10, %xmm4, %eax
2694 ; AVX2-NEXT:    testb $1, %al
2695 ; AVX2-NEXT:    je LBB8_22
2696 ; AVX2-NEXT:  ## %bb.21: ## %cond.load37
2697 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm1[0,1],mem[0],xmm1[3]
2698 ; AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
2699 ; AVX2-NEXT:    addq $4, %rdi
2700 ; AVX2-NEXT:  LBB8_22: ## %else38
2701 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm8, %xmm4
2702 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2703 ; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
2704 ; AVX2-NEXT:    testb $1, %al
2705 ; AVX2-NEXT:    je LBB8_24
2706 ; AVX2-NEXT:  ## %bb.23: ## %cond.load41
2707 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm1[0,1,2],mem[0]
2708 ; AVX2-NEXT:    vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
2709 ; AVX2-NEXT:    addq $4, %rdi
2710 ; AVX2-NEXT:  LBB8_24: ## %else42
2711 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2712 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
2713 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm8
2714 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
2715 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2716 ; AVX2-NEXT:    vpextrb $12, %xmm4, %eax
2717 ; AVX2-NEXT:    testb $1, %al
2718 ; AVX2-NEXT:    je LBB8_26
2719 ; AVX2-NEXT:  ## %bb.25: ## %cond.load45
2720 ; AVX2-NEXT:    vmovss {{.*#+}} xmm9 = mem[0],zero,zero,zero
2721 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4
2722 ; AVX2-NEXT:    vblendps {{.*#+}} xmm4 = xmm9[0],xmm4[1,2,3]
2723 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2724 ; AVX2-NEXT:    addq $4, %rdi
2725 ; AVX2-NEXT:  LBB8_26: ## %else46
2726 ; AVX2-NEXT:    vpackssdw %xmm8, %xmm0, %xmm4
2727 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2728 ; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
2729 ; AVX2-NEXT:    testb $1, %al
2730 ; AVX2-NEXT:    je LBB8_28
2731 ; AVX2-NEXT:  ## %bb.27: ## %cond.load49
2732 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4
2733 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2734 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2735 ; AVX2-NEXT:    addq $4, %rdi
2736 ; AVX2-NEXT:  LBB8_28: ## %else50
2737 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2738 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
2739 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
2740 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2741 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2742 ; AVX2-NEXT:    vpextrb $14, %xmm5, %eax
2743 ; AVX2-NEXT:    testb $1, %al
2744 ; AVX2-NEXT:    je LBB8_30
2745 ; AVX2-NEXT:  ## %bb.29: ## %cond.load53
2746 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm5
2747 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2748 ; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1
2749 ; AVX2-NEXT:    addq $4, %rdi
2750 ; AVX2-NEXT:  LBB8_30: ## %else54
2751 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2752 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2753 ; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
2754 ; AVX2-NEXT:    testb $1, %al
2755 ; AVX2-NEXT:    je LBB8_32
2756 ; AVX2-NEXT:  ## %bb.31: ## %cond.load57
2757 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4
2758 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2759 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2760 ; AVX2-NEXT:    addq $4, %rdi
2761 ; AVX2-NEXT:  LBB8_32: ## %else58
2762 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2763 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
2764 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
2765 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2766 ; AVX2-NEXT:    vpextrb $0, %xmm5, %eax
2767 ; AVX2-NEXT:    testb $1, %al
2768 ; AVX2-NEXT:    je LBB8_34
2769 ; AVX2-NEXT:  ## %bb.33: ## %cond.load61
2770 ; AVX2-NEXT:    vmovd {{.*#+}} xmm5 = mem[0],zero,zero,zero
2771 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm2 = ymm5[0],ymm2[1,2,3,4,5,6,7]
2772 ; AVX2-NEXT:    addq $4, %rdi
2773 ; AVX2-NEXT:  LBB8_34: ## %else62
2774 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2775 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2776 ; AVX2-NEXT:    vpextrb $1, %xmm4, %eax
2777 ; AVX2-NEXT:    testb $1, %al
2778 ; AVX2-NEXT:    je LBB8_36
2779 ; AVX2-NEXT:  ## %bb.35: ## %cond.load65
2780 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm2[0],mem[0],xmm2[2,3]
2781 ; AVX2-NEXT:    vblendps {{.*#+}} ymm2 = ymm4[0,1,2,3],ymm2[4,5,6,7]
2782 ; AVX2-NEXT:    addq $4, %rdi
2783 ; AVX2-NEXT:  LBB8_36: ## %else66
2784 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2785 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
2786 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
2787 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2788 ; AVX2-NEXT:    vpextrb $2, %xmm5, %eax
2789 ; AVX2-NEXT:    testb $1, %al
2790 ; AVX2-NEXT:    je LBB8_38
2791 ; AVX2-NEXT:  ## %bb.37: ## %cond.load69
2792 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm2[0,1],mem[0],xmm2[3]
2793 ; AVX2-NEXT:    vblendps {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
2794 ; AVX2-NEXT:    addq $4, %rdi
2795 ; AVX2-NEXT:  LBB8_38: ## %else70
2796 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2797 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2798 ; AVX2-NEXT:    vpextrb $3, %xmm4, %eax
2799 ; AVX2-NEXT:    testb $1, %al
2800 ; AVX2-NEXT:    je LBB8_40
2801 ; AVX2-NEXT:  ## %bb.39: ## %cond.load73
2802 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm2[0,1,2],mem[0]
2803 ; AVX2-NEXT:    vblendps {{.*#+}} ymm2 = ymm4[0,1,2,3],ymm2[4,5,6,7]
2804 ; AVX2-NEXT:    addq $4, %rdi
2805 ; AVX2-NEXT:  LBB8_40: ## %else74
2806 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2807 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
2808 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
2809 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2810 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2811 ; AVX2-NEXT:    vpextrb $4, %xmm5, %eax
2812 ; AVX2-NEXT:    testb $1, %al
2813 ; AVX2-NEXT:    je LBB8_42
2814 ; AVX2-NEXT:  ## %bb.41: ## %cond.load77
2815 ; AVX2-NEXT:    vmovss {{.*#+}} xmm8 = mem[0],zero,zero,zero
2816 ; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm5
2817 ; AVX2-NEXT:    vblendps {{.*#+}} xmm5 = xmm8[0],xmm5[1,2,3]
2818 ; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm2, %ymm2
2819 ; AVX2-NEXT:    addq $4, %rdi
2820 ; AVX2-NEXT:  LBB8_42: ## %else78
2821 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2822 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2823 ; AVX2-NEXT:    vpextrb $5, %xmm4, %eax
2824 ; AVX2-NEXT:    testb $1, %al
2825 ; AVX2-NEXT:    je LBB8_44
2826 ; AVX2-NEXT:  ## %bb.43: ## %cond.load81
2827 ; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm4
2828 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2829 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
2830 ; AVX2-NEXT:    addq $4, %rdi
2831 ; AVX2-NEXT:  LBB8_44: ## %else82
2832 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2833 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm6, %ymm4
2834 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
2835 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2836 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm5, %xmm5
2837 ; AVX2-NEXT:    vpextrb $6, %xmm5, %eax
2838 ; AVX2-NEXT:    testb $1, %al
2839 ; AVX2-NEXT:    je LBB8_46
2840 ; AVX2-NEXT:  ## %bb.45: ## %cond.load85
2841 ; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm5
2842 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2843 ; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm2, %ymm2
2844 ; AVX2-NEXT:    addq $4, %rdi
2845 ; AVX2-NEXT:  LBB8_46: ## %else86
2846 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2847 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm4, %xmm4
2848 ; AVX2-NEXT:    vpextrb $7, %xmm4, %eax
2849 ; AVX2-NEXT:    testb $1, %al
2850 ; AVX2-NEXT:    je LBB8_48
2851 ; AVX2-NEXT:  ## %bb.47: ## %cond.load89
2852 ; AVX2-NEXT:    vextractf128 $1, %ymm2, %xmm4
2853 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2854 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm2
2855 ; AVX2-NEXT:    addq $4, %rdi
2856 ; AVX2-NEXT:  LBB8_48: ## %else90
2857 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2858 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
2859 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
2860 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2861 ; AVX2-NEXT:    vpextrb $8, %xmm5, %eax
2862 ; AVX2-NEXT:    testb $1, %al
2863 ; AVX2-NEXT:    je LBB8_50
2864 ; AVX2-NEXT:  ## %bb.49: ## %cond.load93
2865 ; AVX2-NEXT:    vmovd {{.*#+}} xmm5 = mem[0],zero,zero,zero
2866 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm3 = ymm5[0],ymm3[1,2,3,4,5,6,7]
2867 ; AVX2-NEXT:    addq $4, %rdi
2868 ; AVX2-NEXT:  LBB8_50: ## %else94
2869 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2870 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2871 ; AVX2-NEXT:    vpextrb $9, %xmm4, %eax
2872 ; AVX2-NEXT:    testb $1, %al
2873 ; AVX2-NEXT:    je LBB8_52
2874 ; AVX2-NEXT:  ## %bb.51: ## %cond.load97
2875 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm3[0],mem[0],xmm3[2,3]
2876 ; AVX2-NEXT:    vblendps {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
2877 ; AVX2-NEXT:    addq $4, %rdi
2878 ; AVX2-NEXT:  LBB8_52: ## %else98
2879 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2880 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
2881 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm5
2882 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2883 ; AVX2-NEXT:    vpextrb $10, %xmm5, %eax
2884 ; AVX2-NEXT:    testb $1, %al
2885 ; AVX2-NEXT:    je LBB8_54
2886 ; AVX2-NEXT:  ## %bb.53: ## %cond.load101
2887 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm3[0,1],mem[0],xmm3[3]
2888 ; AVX2-NEXT:    vblendps {{.*#+}} ymm3 = ymm5[0,1,2,3],ymm3[4,5,6,7]
2889 ; AVX2-NEXT:    addq $4, %rdi
2890 ; AVX2-NEXT:  LBB8_54: ## %else102
2891 ; AVX2-NEXT:    vpackssdw %xmm0, %xmm4, %xmm4
2892 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2893 ; AVX2-NEXT:    vpextrb $11, %xmm4, %eax
2894 ; AVX2-NEXT:    testb $1, %al
2895 ; AVX2-NEXT:    je LBB8_56
2896 ; AVX2-NEXT:  ## %bb.55: ## %cond.load105
2897 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm3[0,1,2],mem[0]
2898 ; AVX2-NEXT:    vblendps {{.*#+}} ymm3 = ymm4[0,1,2,3],ymm3[4,5,6,7]
2899 ; AVX2-NEXT:    addq $4, %rdi
2900 ; AVX2-NEXT:  LBB8_56: ## %else106
2901 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2902 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
2903 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
2904 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2905 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2906 ; AVX2-NEXT:    vpextrb $12, %xmm5, %eax
2907 ; AVX2-NEXT:    testb $1, %al
2908 ; AVX2-NEXT:    je LBB8_58
2909 ; AVX2-NEXT:  ## %bb.57: ## %cond.load109
2910 ; AVX2-NEXT:    vmovss {{.*#+}} xmm5 = mem[0],zero,zero,zero
2911 ; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm6
2912 ; AVX2-NEXT:    vblendps {{.*#+}} xmm5 = xmm5[0],xmm6[1,2,3]
2913 ; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
2914 ; AVX2-NEXT:    addq $4, %rdi
2915 ; AVX2-NEXT:  LBB8_58: ## %else110
2916 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2917 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2918 ; AVX2-NEXT:    vpextrb $13, %xmm4, %eax
2919 ; AVX2-NEXT:    testb $1, %al
2920 ; AVX2-NEXT:    je LBB8_60
2921 ; AVX2-NEXT:  ## %bb.59: ## %cond.load113
2922 ; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm4
2923 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]
2924 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
2925 ; AVX2-NEXT:    addq $4, %rdi
2926 ; AVX2-NEXT:  LBB8_60: ## %else114
2927 ; AVX2-NEXT:    vxorps %xmm4, %xmm4, %xmm4
2928 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm7, %ymm4
2929 ; AVX2-NEXT:    vextracti128 $1, %ymm4, %xmm4
2930 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm5
2931 ; AVX2-NEXT:    vpacksswb %xmm5, %xmm0, %xmm5
2932 ; AVX2-NEXT:    vpextrb $14, %xmm5, %eax
2933 ; AVX2-NEXT:    testb $1, %al
2934 ; AVX2-NEXT:    je LBB8_62
2935 ; AVX2-NEXT:  ## %bb.61: ## %cond.load117
2936 ; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm5
2937 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm5 = xmm5[0,1],mem[0],xmm5[3]
2938 ; AVX2-NEXT:    vinsertf128 $1, %xmm5, %ymm3, %ymm3
2939 ; AVX2-NEXT:    addq $4, %rdi
2940 ; AVX2-NEXT:  LBB8_62: ## %else118
2941 ; AVX2-NEXT:    vpackssdw %xmm4, %xmm0, %xmm4
2942 ; AVX2-NEXT:    vpacksswb %xmm4, %xmm0, %xmm4
2943 ; AVX2-NEXT:    vpextrb $15, %xmm4, %eax
2944 ; AVX2-NEXT:    testb $1, %al
2945 ; AVX2-NEXT:    je LBB8_64
2946 ; AVX2-NEXT:  ## %bb.63: ## %cond.load121
2947 ; AVX2-NEXT:    vextractf128 $1, %ymm3, %xmm4
2948 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]
2949 ; AVX2-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
2950 ; AVX2-NEXT:  LBB8_64: ## %else122
2951 ; AVX2-NEXT:    retq
2952 ;
2953 ; AVX512-LABEL: expandload_v32f32_v32i32:
2954 ; AVX512:       ## %bb.0:
2955 ; AVX512-NEXT:    vptestnmd %zmm3, %zmm3, %k2
2956 ; AVX512-NEXT:    vptestnmd %zmm2, %zmm2, %k1
2957 ; AVX512-NEXT:    kmovw %k1, %eax
2958 ; AVX512-NEXT:    movl %eax, %ecx
2959 ; AVX512-NEXT:    shrl %ecx
2960 ; AVX512-NEXT:    andl $21845, %ecx ## imm = 0x5555
2961 ; AVX512-NEXT:    subl %ecx, %eax
2962 ; AVX512-NEXT:    movl %eax, %ecx
2963 ; AVX512-NEXT:    andl $858993459, %ecx ## imm = 0x33333333
2964 ; AVX512-NEXT:    shrl $2, %eax
2965 ; AVX512-NEXT:    andl $858993459, %eax ## imm = 0x33333333
2966 ; AVX512-NEXT:    addl %ecx, %eax
2967 ; AVX512-NEXT:    movl %eax, %ecx
2968 ; AVX512-NEXT:    shrl $4, %ecx
2969 ; AVX512-NEXT:    addl %eax, %ecx
2970 ; AVX512-NEXT:    andl $252645135, %ecx ## imm = 0xF0F0F0F
2971 ; AVX512-NEXT:    imull $16843009, %ecx, %eax ## imm = 0x1010101
2972 ; AVX512-NEXT:    shrl $24, %eax
2973 ; AVX512-NEXT:    vexpandps (%rdi,%rax,4), %zmm1 {%k2}
2974 ; AVX512-NEXT:    vexpandps (%rdi), %zmm0 {%k1}
2975 ; AVX512-NEXT:    retq
2976   %mask = icmp eq <32 x i32> %trigger, zeroinitializer
2977   %res = call <32 x float> @llvm.masked.expandload.v32f32(float* %base, <32 x i1> %mask, <32 x float> %src0)
2978   ret <32 x float> %res
2979 }
2980
2981 ;
2982 ; vXi64
2983 ;
2984
2985 define <2 x i64> @expandload_v2i64_const(i64* %base, <2 x i64> %src0) {
2986 ; SSE2-LABEL: expandload_v2i64_const:
2987 ; SSE2:       ## %bb.0: ## %else
2988 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
2989 ; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2990 ; SSE2-NEXT:    retq
2991 ;
2992 ; SSE42-LABEL: expandload_v2i64_const:
2993 ; SSE42:       ## %bb.0: ## %else
2994 ; SSE42-NEXT:    pinsrq $1, (%rdi), %xmm0
2995 ; SSE42-NEXT:    retq
2996 ;
2997 ; AVX1OR2-LABEL: expandload_v2i64_const:
2998 ; AVX1OR2:       ## %bb.0: ## %else
2999 ; AVX1OR2-NEXT:    vpinsrq $1, (%rdi), %xmm0, %xmm0
3000 ; AVX1OR2-NEXT:    retq
3001 ;
3002 ; AVX512F-LABEL: expandload_v2i64_const:
3003 ; AVX512F:       ## %bb.0:
3004 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
3005 ; AVX512F-NEXT:    movb $2, %al
3006 ; AVX512F-NEXT:    kmovw %eax, %k1
3007 ; AVX512F-NEXT:    vpexpandq (%rdi), %zmm0 {%k1}
3008 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
3009 ; AVX512F-NEXT:    vzeroupper
3010 ; AVX512F-NEXT:    retq
3011 ;
3012 ; AVX512VLDQ-LABEL: expandload_v2i64_const:
3013 ; AVX512VLDQ:       ## %bb.0:
3014 ; AVX512VLDQ-NEXT:    movb $2, %al
3015 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
3016 ; AVX512VLDQ-NEXT:    vpexpandq (%rdi), %xmm0 {%k1}
3017 ; AVX512VLDQ-NEXT:    retq
3018 ;
3019 ; AVX512VLBW-LABEL: expandload_v2i64_const:
3020 ; AVX512VLBW:       ## %bb.0:
3021 ; AVX512VLBW-NEXT:    movb $2, %al
3022 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
3023 ; AVX512VLBW-NEXT:    vpexpandq (%rdi), %xmm0 {%k1}
3024 ; AVX512VLBW-NEXT:    retq
3025   %res = call <2 x i64> @llvm.masked.expandload.v2i64(i64* %base, <2 x i1> <i1 false, i1 true>, <2 x i64> %src0)
3026   ret <2 x i64>%res
3027 }
3028
3029 ;
3030 ; vXi32
3031 ;
3032
3033 define <4 x i32> @expandload_v4i32_v4i32(i32* %base, <4 x i32> %src0, <4 x i32> %trigger) {
3034 ; SSE2-LABEL: expandload_v4i32_v4i32:
3035 ; SSE2:       ## %bb.0:
3036 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3037 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
3038 ; SSE2-NEXT:    movd %xmm2, %eax
3039 ; SSE2-NEXT:    testb $1, %al
3040 ; SSE2-NEXT:    je LBB10_2
3041 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
3042 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
3043 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm3[0],xmm0[1,2,3]
3044 ; SSE2-NEXT:    addq $4, %rdi
3045 ; SSE2-NEXT:  LBB10_2: ## %else
3046 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
3047 ; SSE2-NEXT:    testb $1, %al
3048 ; SSE2-NEXT:    je LBB10_4
3049 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
3050 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
3051 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[0,0]
3052 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm0[2,3]
3053 ; SSE2-NEXT:    addq $4, %rdi
3054 ; SSE2-NEXT:    movaps %xmm2, %xmm0
3055 ; SSE2-NEXT:  LBB10_4: ## %else2
3056 ; SSE2-NEXT:    xorps %xmm2, %xmm2
3057 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm1
3058 ; SSE2-NEXT:    pextrw $4, %xmm1, %eax
3059 ; SSE2-NEXT:    testb $1, %al
3060 ; SSE2-NEXT:    je LBB10_6
3061 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
3062 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
3063 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[3,0]
3064 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0,2]
3065 ; SSE2-NEXT:    addq $4, %rdi
3066 ; SSE2-NEXT:  LBB10_6: ## %else6
3067 ; SSE2-NEXT:    pextrw $6, %xmm1, %eax
3068 ; SSE2-NEXT:    testb $1, %al
3069 ; SSE2-NEXT:    je LBB10_8
3070 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
3071 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
3072 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0]
3073 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0]
3074 ; SSE2-NEXT:  LBB10_8: ## %else10
3075 ; SSE2-NEXT:    retq
3076 ;
3077 ; SSE42-LABEL: expandload_v4i32_v4i32:
3078 ; SSE42:       ## %bb.0:
3079 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3080 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm2
3081 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
3082 ; SSE42-NEXT:    testb $1, %al
3083 ; SSE42-NEXT:    je LBB10_2
3084 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
3085 ; SSE42-NEXT:    pinsrd $0, (%rdi), %xmm0
3086 ; SSE42-NEXT:    addq $4, %rdi
3087 ; SSE42-NEXT:  LBB10_2: ## %else
3088 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
3089 ; SSE42-NEXT:    testb $1, %al
3090 ; SSE42-NEXT:    je LBB10_4
3091 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
3092 ; SSE42-NEXT:    pinsrd $1, (%rdi), %xmm0
3093 ; SSE42-NEXT:    addq $4, %rdi
3094 ; SSE42-NEXT:  LBB10_4: ## %else2
3095 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3096 ; SSE42-NEXT:    pcmpeqd %xmm2, %xmm1
3097 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
3098 ; SSE42-NEXT:    testb $1, %al
3099 ; SSE42-NEXT:    je LBB10_6
3100 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
3101 ; SSE42-NEXT:    pinsrd $2, (%rdi), %xmm0
3102 ; SSE42-NEXT:    addq $4, %rdi
3103 ; SSE42-NEXT:  LBB10_6: ## %else6
3104 ; SSE42-NEXT:    pextrb $12, %xmm1, %eax
3105 ; SSE42-NEXT:    testb $1, %al
3106 ; SSE42-NEXT:    je LBB10_8
3107 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
3108 ; SSE42-NEXT:    pinsrd $3, (%rdi), %xmm0
3109 ; SSE42-NEXT:  LBB10_8: ## %else10
3110 ; SSE42-NEXT:    retq
3111 ;
3112 ; AVX1OR2-LABEL: expandload_v4i32_v4i32:
3113 ; AVX1OR2:       ## %bb.0:
3114 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3115 ; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm2
3116 ; AVX1OR2-NEXT:    vpextrb $0, %xmm2, %eax
3117 ; AVX1OR2-NEXT:    testb $1, %al
3118 ; AVX1OR2-NEXT:    je LBB10_2
3119 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
3120 ; AVX1OR2-NEXT:    vpinsrd $0, (%rdi), %xmm0, %xmm0
3121 ; AVX1OR2-NEXT:    addq $4, %rdi
3122 ; AVX1OR2-NEXT:  LBB10_2: ## %else
3123 ; AVX1OR2-NEXT:    vpextrb $4, %xmm2, %eax
3124 ; AVX1OR2-NEXT:    testb $1, %al
3125 ; AVX1OR2-NEXT:    je LBB10_4
3126 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
3127 ; AVX1OR2-NEXT:    vpinsrd $1, (%rdi), %xmm0, %xmm0
3128 ; AVX1OR2-NEXT:    addq $4, %rdi
3129 ; AVX1OR2-NEXT:  LBB10_4: ## %else2
3130 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3131 ; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
3132 ; AVX1OR2-NEXT:    vpextrb $8, %xmm1, %eax
3133 ; AVX1OR2-NEXT:    testb $1, %al
3134 ; AVX1OR2-NEXT:    je LBB10_6
3135 ; AVX1OR2-NEXT:  ## %bb.5: ## %cond.load5
3136 ; AVX1OR2-NEXT:    vpinsrd $2, (%rdi), %xmm0, %xmm0
3137 ; AVX1OR2-NEXT:    addq $4, %rdi
3138 ; AVX1OR2-NEXT:  LBB10_6: ## %else6
3139 ; AVX1OR2-NEXT:    vpextrb $12, %xmm1, %eax
3140 ; AVX1OR2-NEXT:    testb $1, %al
3141 ; AVX1OR2-NEXT:    je LBB10_8
3142 ; AVX1OR2-NEXT:  ## %bb.7: ## %cond.load9
3143 ; AVX1OR2-NEXT:    vpinsrd $3, (%rdi), %xmm0, %xmm0
3144 ; AVX1OR2-NEXT:  LBB10_8: ## %else10
3145 ; AVX1OR2-NEXT:    retq
3146 ;
3147 ; AVX512F-LABEL: expandload_v4i32_v4i32:
3148 ; AVX512F:       ## %bb.0:
3149 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
3150 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
3151 ; AVX512F-NEXT:    vptestnmd %zmm1, %zmm1, %k0
3152 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
3153 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
3154 ; AVX512F-NEXT:    vpexpandd (%rdi), %zmm0 {%k1}
3155 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
3156 ; AVX512F-NEXT:    vzeroupper
3157 ; AVX512F-NEXT:    retq
3158 ;
3159 ; AVX512VL-LABEL: expandload_v4i32_v4i32:
3160 ; AVX512VL:       ## %bb.0:
3161 ; AVX512VL-NEXT:    vptestnmd %xmm1, %xmm1, %k1
3162 ; AVX512VL-NEXT:    vpexpandd (%rdi), %xmm0 {%k1}
3163 ; AVX512VL-NEXT:    retq
3164   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
3165   %res = call <4 x i32> @llvm.masked.expandload.v4i32(i32* %base, <4 x i1> %mask, <4 x i32> %src0)
3166   ret <4 x i32>%res
3167 }
3168
3169 ;
3170 ; vXi16
3171 ;
3172
3173 define <8 x i16> @expandload_v8i16_v8i16(i16* %base, <8 x i16> %src0, <8 x i16> %trigger) {
3174 ; SSE2-LABEL: expandload_v8i16_v8i16:
3175 ; SSE2:       ## %bb.0:
3176 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3177 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2
3178 ; SSE2-NEXT:    movd %xmm2, %eax
3179 ; SSE2-NEXT:    testb $1, %al
3180 ; SSE2-NEXT:    je LBB11_2
3181 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
3182 ; SSE2-NEXT:    pinsrw $0, (%rdi), %xmm0
3183 ; SSE2-NEXT:    addq $2, %rdi
3184 ; SSE2-NEXT:  LBB11_2: ## %else
3185 ; SSE2-NEXT:    shrl $16, %eax
3186 ; SSE2-NEXT:    testb $1, %al
3187 ; SSE2-NEXT:    je LBB11_4
3188 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
3189 ; SSE2-NEXT:    pinsrw $1, (%rdi), %xmm0
3190 ; SSE2-NEXT:    addq $2, %rdi
3191 ; SSE2-NEXT:  LBB11_4: ## %else2
3192 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3193 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2
3194 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
3195 ; SSE2-NEXT:    testb $1, %al
3196 ; SSE2-NEXT:    je LBB11_6
3197 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
3198 ; SSE2-NEXT:    pinsrw $2, (%rdi), %xmm0
3199 ; SSE2-NEXT:    addq $2, %rdi
3200 ; SSE2-NEXT:  LBB11_6: ## %else6
3201 ; SSE2-NEXT:    pextrw $3, %xmm2, %eax
3202 ; SSE2-NEXT:    testb $1, %al
3203 ; SSE2-NEXT:    je LBB11_8
3204 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
3205 ; SSE2-NEXT:    pinsrw $3, (%rdi), %xmm0
3206 ; SSE2-NEXT:    addq $2, %rdi
3207 ; SSE2-NEXT:  LBB11_8: ## %else10
3208 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3209 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2
3210 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
3211 ; SSE2-NEXT:    testb $1, %al
3212 ; SSE2-NEXT:    je LBB11_10
3213 ; SSE2-NEXT:  ## %bb.9: ## %cond.load13
3214 ; SSE2-NEXT:    pinsrw $4, (%rdi), %xmm0
3215 ; SSE2-NEXT:    addq $2, %rdi
3216 ; SSE2-NEXT:  LBB11_10: ## %else14
3217 ; SSE2-NEXT:    pextrw $5, %xmm2, %eax
3218 ; SSE2-NEXT:    testb $1, %al
3219 ; SSE2-NEXT:    je LBB11_12
3220 ; SSE2-NEXT:  ## %bb.11: ## %cond.load17
3221 ; SSE2-NEXT:    pinsrw $5, (%rdi), %xmm0
3222 ; SSE2-NEXT:    addq $2, %rdi
3223 ; SSE2-NEXT:  LBB11_12: ## %else18
3224 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3225 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm1
3226 ; SSE2-NEXT:    pextrw $6, %xmm1, %eax
3227 ; SSE2-NEXT:    testb $1, %al
3228 ; SSE2-NEXT:    je LBB11_14
3229 ; SSE2-NEXT:  ## %bb.13: ## %cond.load21
3230 ; SSE2-NEXT:    pinsrw $6, (%rdi), %xmm0
3231 ; SSE2-NEXT:    addq $2, %rdi
3232 ; SSE2-NEXT:  LBB11_14: ## %else22
3233 ; SSE2-NEXT:    pextrw $7, %xmm1, %eax
3234 ; SSE2-NEXT:    testb $1, %al
3235 ; SSE2-NEXT:    je LBB11_16
3236 ; SSE2-NEXT:  ## %bb.15: ## %cond.load25
3237 ; SSE2-NEXT:    pinsrw $7, (%rdi), %xmm0
3238 ; SSE2-NEXT:  LBB11_16: ## %else26
3239 ; SSE2-NEXT:    retq
3240 ;
3241 ; SSE42-LABEL: expandload_v8i16_v8i16:
3242 ; SSE42:       ## %bb.0:
3243 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3244 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm2
3245 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
3246 ; SSE42-NEXT:    testb $1, %al
3247 ; SSE42-NEXT:    je LBB11_2
3248 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
3249 ; SSE42-NEXT:    pinsrw $0, (%rdi), %xmm0
3250 ; SSE42-NEXT:    addq $2, %rdi
3251 ; SSE42-NEXT:  LBB11_2: ## %else
3252 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
3253 ; SSE42-NEXT:    testb $1, %al
3254 ; SSE42-NEXT:    je LBB11_4
3255 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
3256 ; SSE42-NEXT:    pinsrw $1, (%rdi), %xmm0
3257 ; SSE42-NEXT:    addq $2, %rdi
3258 ; SSE42-NEXT:  LBB11_4: ## %else2
3259 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3260 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm2
3261 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
3262 ; SSE42-NEXT:    testb $1, %al
3263 ; SSE42-NEXT:    je LBB11_6
3264 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
3265 ; SSE42-NEXT:    pinsrw $2, (%rdi), %xmm0
3266 ; SSE42-NEXT:    addq $2, %rdi
3267 ; SSE42-NEXT:  LBB11_6: ## %else6
3268 ; SSE42-NEXT:    pextrb $6, %xmm2, %eax
3269 ; SSE42-NEXT:    testb $1, %al
3270 ; SSE42-NEXT:    je LBB11_8
3271 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
3272 ; SSE42-NEXT:    pinsrw $3, (%rdi), %xmm0
3273 ; SSE42-NEXT:    addq $2, %rdi
3274 ; SSE42-NEXT:  LBB11_8: ## %else10
3275 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3276 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm2
3277 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
3278 ; SSE42-NEXT:    testb $1, %al
3279 ; SSE42-NEXT:    je LBB11_10
3280 ; SSE42-NEXT:  ## %bb.9: ## %cond.load13
3281 ; SSE42-NEXT:    pinsrw $4, (%rdi), %xmm0
3282 ; SSE42-NEXT:    addq $2, %rdi
3283 ; SSE42-NEXT:  LBB11_10: ## %else14
3284 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
3285 ; SSE42-NEXT:    testb $1, %al
3286 ; SSE42-NEXT:    je LBB11_12
3287 ; SSE42-NEXT:  ## %bb.11: ## %cond.load17
3288 ; SSE42-NEXT:    pinsrw $5, (%rdi), %xmm0
3289 ; SSE42-NEXT:    addq $2, %rdi
3290 ; SSE42-NEXT:  LBB11_12: ## %else18
3291 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3292 ; SSE42-NEXT:    pcmpeqw %xmm2, %xmm1
3293 ; SSE42-NEXT:    pextrb $12, %xmm1, %eax
3294 ; SSE42-NEXT:    testb $1, %al
3295 ; SSE42-NEXT:    je LBB11_14
3296 ; SSE42-NEXT:  ## %bb.13: ## %cond.load21
3297 ; SSE42-NEXT:    pinsrw $6, (%rdi), %xmm0
3298 ; SSE42-NEXT:    addq $2, %rdi
3299 ; SSE42-NEXT:  LBB11_14: ## %else22
3300 ; SSE42-NEXT:    pextrb $14, %xmm1, %eax
3301 ; SSE42-NEXT:    testb $1, %al
3302 ; SSE42-NEXT:    je LBB11_16
3303 ; SSE42-NEXT:  ## %bb.15: ## %cond.load25
3304 ; SSE42-NEXT:    pinsrw $7, (%rdi), %xmm0
3305 ; SSE42-NEXT:  LBB11_16: ## %else26
3306 ; SSE42-NEXT:    retq
3307 ;
3308 ; AVX1OR2-LABEL: expandload_v8i16_v8i16:
3309 ; AVX1OR2:       ## %bb.0:
3310 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3311 ; AVX1OR2-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3312 ; AVX1OR2-NEXT:    vpextrb $0, %xmm2, %eax
3313 ; AVX1OR2-NEXT:    testb $1, %al
3314 ; AVX1OR2-NEXT:    je LBB11_2
3315 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
3316 ; AVX1OR2-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0
3317 ; AVX1OR2-NEXT:    addq $2, %rdi
3318 ; AVX1OR2-NEXT:  LBB11_2: ## %else
3319 ; AVX1OR2-NEXT:    vpextrb $2, %xmm2, %eax
3320 ; AVX1OR2-NEXT:    testb $1, %al
3321 ; AVX1OR2-NEXT:    je LBB11_4
3322 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
3323 ; AVX1OR2-NEXT:    vpinsrw $1, (%rdi), %xmm0, %xmm0
3324 ; AVX1OR2-NEXT:    addq $2, %rdi
3325 ; AVX1OR2-NEXT:  LBB11_4: ## %else2
3326 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3327 ; AVX1OR2-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3328 ; AVX1OR2-NEXT:    vpextrb $4, %xmm2, %eax
3329 ; AVX1OR2-NEXT:    testb $1, %al
3330 ; AVX1OR2-NEXT:    je LBB11_6
3331 ; AVX1OR2-NEXT:  ## %bb.5: ## %cond.load5
3332 ; AVX1OR2-NEXT:    vpinsrw $2, (%rdi), %xmm0, %xmm0
3333 ; AVX1OR2-NEXT:    addq $2, %rdi
3334 ; AVX1OR2-NEXT:  LBB11_6: ## %else6
3335 ; AVX1OR2-NEXT:    vpextrb $6, %xmm2, %eax
3336 ; AVX1OR2-NEXT:    testb $1, %al
3337 ; AVX1OR2-NEXT:    je LBB11_8
3338 ; AVX1OR2-NEXT:  ## %bb.7: ## %cond.load9
3339 ; AVX1OR2-NEXT:    vpinsrw $3, (%rdi), %xmm0, %xmm0
3340 ; AVX1OR2-NEXT:    addq $2, %rdi
3341 ; AVX1OR2-NEXT:  LBB11_8: ## %else10
3342 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3343 ; AVX1OR2-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3344 ; AVX1OR2-NEXT:    vpextrb $8, %xmm2, %eax
3345 ; AVX1OR2-NEXT:    testb $1, %al
3346 ; AVX1OR2-NEXT:    je LBB11_10
3347 ; AVX1OR2-NEXT:  ## %bb.9: ## %cond.load13
3348 ; AVX1OR2-NEXT:    vpinsrw $4, (%rdi), %xmm0, %xmm0
3349 ; AVX1OR2-NEXT:    addq $2, %rdi
3350 ; AVX1OR2-NEXT:  LBB11_10: ## %else14
3351 ; AVX1OR2-NEXT:    vpextrb $10, %xmm2, %eax
3352 ; AVX1OR2-NEXT:    testb $1, %al
3353 ; AVX1OR2-NEXT:    je LBB11_12
3354 ; AVX1OR2-NEXT:  ## %bb.11: ## %cond.load17
3355 ; AVX1OR2-NEXT:    vpinsrw $5, (%rdi), %xmm0, %xmm0
3356 ; AVX1OR2-NEXT:    addq $2, %rdi
3357 ; AVX1OR2-NEXT:  LBB11_12: ## %else18
3358 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3359 ; AVX1OR2-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
3360 ; AVX1OR2-NEXT:    vpextrb $12, %xmm1, %eax
3361 ; AVX1OR2-NEXT:    testb $1, %al
3362 ; AVX1OR2-NEXT:    je LBB11_14
3363 ; AVX1OR2-NEXT:  ## %bb.13: ## %cond.load21
3364 ; AVX1OR2-NEXT:    vpinsrw $6, (%rdi), %xmm0, %xmm0
3365 ; AVX1OR2-NEXT:    addq $2, %rdi
3366 ; AVX1OR2-NEXT:  LBB11_14: ## %else22
3367 ; AVX1OR2-NEXT:    vpextrb $14, %xmm1, %eax
3368 ; AVX1OR2-NEXT:    testb $1, %al
3369 ; AVX1OR2-NEXT:    je LBB11_16
3370 ; AVX1OR2-NEXT:  ## %bb.15: ## %cond.load25
3371 ; AVX1OR2-NEXT:    vpinsrw $7, (%rdi), %xmm0, %xmm0
3372 ; AVX1OR2-NEXT:  LBB11_16: ## %else26
3373 ; AVX1OR2-NEXT:    retq
3374 ;
3375 ; AVX512F-LABEL: expandload_v8i16_v8i16:
3376 ; AVX512F:       ## %bb.0:
3377 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3378 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3379 ; AVX512F-NEXT:    vpmovsxwq %xmm2, %zmm2
3380 ; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0
3381 ; AVX512F-NEXT:    kmovw %k0, %eax
3382 ; AVX512F-NEXT:    testb $1, %al
3383 ; AVX512F-NEXT:    je LBB11_2
3384 ; AVX512F-NEXT:  ## %bb.1: ## %cond.load
3385 ; AVX512F-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0
3386 ; AVX512F-NEXT:    addq $2, %rdi
3387 ; AVX512F-NEXT:  LBB11_2: ## %else
3388 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
3389 ; AVX512F-NEXT:    kmovw %k0, %eax
3390 ; AVX512F-NEXT:    testb $1, %al
3391 ; AVX512F-NEXT:    je LBB11_4
3392 ; AVX512F-NEXT:  ## %bb.3: ## %cond.load1
3393 ; AVX512F-NEXT:    vpinsrw $1, (%rdi), %xmm0, %xmm0
3394 ; AVX512F-NEXT:    addq $2, %rdi
3395 ; AVX512F-NEXT:  LBB11_4: ## %else2
3396 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3397 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3398 ; AVX512F-NEXT:    vpmovsxwq %xmm2, %zmm2
3399 ; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0
3400 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
3401 ; AVX512F-NEXT:    kmovw %k1, %eax
3402 ; AVX512F-NEXT:    testb $1, %al
3403 ; AVX512F-NEXT:    je LBB11_6
3404 ; AVX512F-NEXT:  ## %bb.5: ## %cond.load5
3405 ; AVX512F-NEXT:    vpinsrw $2, (%rdi), %xmm0, %xmm0
3406 ; AVX512F-NEXT:    addq $2, %rdi
3407 ; AVX512F-NEXT:  LBB11_6: ## %else6
3408 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
3409 ; AVX512F-NEXT:    kmovw %k0, %eax
3410 ; AVX512F-NEXT:    testb $1, %al
3411 ; AVX512F-NEXT:    je LBB11_8
3412 ; AVX512F-NEXT:  ## %bb.7: ## %cond.load9
3413 ; AVX512F-NEXT:    vpinsrw $3, (%rdi), %xmm0, %xmm0
3414 ; AVX512F-NEXT:    addq $2, %rdi
3415 ; AVX512F-NEXT:  LBB11_8: ## %else10
3416 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3417 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3418 ; AVX512F-NEXT:    vpmovsxwq %xmm2, %zmm2
3419 ; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0
3420 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
3421 ; AVX512F-NEXT:    kmovw %k1, %eax
3422 ; AVX512F-NEXT:    testb $1, %al
3423 ; AVX512F-NEXT:    je LBB11_10
3424 ; AVX512F-NEXT:  ## %bb.9: ## %cond.load13
3425 ; AVX512F-NEXT:    vpinsrw $4, (%rdi), %xmm0, %xmm0
3426 ; AVX512F-NEXT:    addq $2, %rdi
3427 ; AVX512F-NEXT:  LBB11_10: ## %else14
3428 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
3429 ; AVX512F-NEXT:    kmovw %k0, %eax
3430 ; AVX512F-NEXT:    testb $1, %al
3431 ; AVX512F-NEXT:    je LBB11_12
3432 ; AVX512F-NEXT:  ## %bb.11: ## %cond.load17
3433 ; AVX512F-NEXT:    vpinsrw $5, (%rdi), %xmm0, %xmm0
3434 ; AVX512F-NEXT:    addq $2, %rdi
3435 ; AVX512F-NEXT:  LBB11_12: ## %else18
3436 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3437 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
3438 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
3439 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
3440 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
3441 ; AVX512F-NEXT:    kmovw %k1, %eax
3442 ; AVX512F-NEXT:    testb $1, %al
3443 ; AVX512F-NEXT:    je LBB11_14
3444 ; AVX512F-NEXT:  ## %bb.13: ## %cond.load21
3445 ; AVX512F-NEXT:    vpinsrw $6, (%rdi), %xmm0, %xmm0
3446 ; AVX512F-NEXT:    addq $2, %rdi
3447 ; AVX512F-NEXT:  LBB11_14: ## %else22
3448 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
3449 ; AVX512F-NEXT:    kmovw %k0, %eax
3450 ; AVX512F-NEXT:    testb $1, %al
3451 ; AVX512F-NEXT:    je LBB11_16
3452 ; AVX512F-NEXT:  ## %bb.15: ## %cond.load25
3453 ; AVX512F-NEXT:    vpinsrw $7, (%rdi), %xmm0, %xmm0
3454 ; AVX512F-NEXT:  LBB11_16: ## %else26
3455 ; AVX512F-NEXT:    vzeroupper
3456 ; AVX512F-NEXT:    retq
3457 ;
3458 ; AVX512VLDQ-LABEL: expandload_v8i16_v8i16:
3459 ; AVX512VLDQ:       ## %bb.0:
3460 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3461 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3462 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm2, %ymm2
3463 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k0
3464 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3465 ; AVX512VLDQ-NEXT:    testb $1, %al
3466 ; AVX512VLDQ-NEXT:    je LBB11_2
3467 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.load
3468 ; AVX512VLDQ-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0
3469 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3470 ; AVX512VLDQ-NEXT:  LBB11_2: ## %else
3471 ; AVX512VLDQ-NEXT:    kshiftrb $1, %k0, %k0
3472 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3473 ; AVX512VLDQ-NEXT:    testb $1, %al
3474 ; AVX512VLDQ-NEXT:    je LBB11_4
3475 ; AVX512VLDQ-NEXT:  ## %bb.3: ## %cond.load1
3476 ; AVX512VLDQ-NEXT:    vpinsrw $1, (%rdi), %xmm0, %xmm0
3477 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3478 ; AVX512VLDQ-NEXT:  LBB11_4: ## %else2
3479 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3480 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3481 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm2, %ymm2
3482 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k0
3483 ; AVX512VLDQ-NEXT:    kshiftrb $2, %k0, %k1
3484 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3485 ; AVX512VLDQ-NEXT:    testb $1, %al
3486 ; AVX512VLDQ-NEXT:    je LBB11_6
3487 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.load5
3488 ; AVX512VLDQ-NEXT:    vpinsrw $2, (%rdi), %xmm0, %xmm0
3489 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3490 ; AVX512VLDQ-NEXT:  LBB11_6: ## %else6
3491 ; AVX512VLDQ-NEXT:    kshiftrb $3, %k0, %k0
3492 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3493 ; AVX512VLDQ-NEXT:    testb $1, %al
3494 ; AVX512VLDQ-NEXT:    je LBB11_8
3495 ; AVX512VLDQ-NEXT:  ## %bb.7: ## %cond.load9
3496 ; AVX512VLDQ-NEXT:    vpinsrw $3, (%rdi), %xmm0, %xmm0
3497 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3498 ; AVX512VLDQ-NEXT:  LBB11_8: ## %else10
3499 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3500 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm2
3501 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm2, %ymm2
3502 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k0
3503 ; AVX512VLDQ-NEXT:    kshiftrb $4, %k0, %k1
3504 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3505 ; AVX512VLDQ-NEXT:    testb $1, %al
3506 ; AVX512VLDQ-NEXT:    je LBB11_10
3507 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.load13
3508 ; AVX512VLDQ-NEXT:    vpinsrw $4, (%rdi), %xmm0, %xmm0
3509 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3510 ; AVX512VLDQ-NEXT:  LBB11_10: ## %else14
3511 ; AVX512VLDQ-NEXT:    kshiftrb $5, %k0, %k0
3512 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3513 ; AVX512VLDQ-NEXT:    testb $1, %al
3514 ; AVX512VLDQ-NEXT:    je LBB11_12
3515 ; AVX512VLDQ-NEXT:  ## %bb.11: ## %cond.load17
3516 ; AVX512VLDQ-NEXT:    vpinsrw $5, (%rdi), %xmm0, %xmm0
3517 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3518 ; AVX512VLDQ-NEXT:  LBB11_12: ## %else18
3519 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3520 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
3521 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm1, %ymm1
3522 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm1, %k0
3523 ; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1
3524 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3525 ; AVX512VLDQ-NEXT:    testb $1, %al
3526 ; AVX512VLDQ-NEXT:    je LBB11_14
3527 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.load21
3528 ; AVX512VLDQ-NEXT:    vpinsrw $6, (%rdi), %xmm0, %xmm0
3529 ; AVX512VLDQ-NEXT:    addq $2, %rdi
3530 ; AVX512VLDQ-NEXT:  LBB11_14: ## %else22
3531 ; AVX512VLDQ-NEXT:    kshiftrb $7, %k0, %k0
3532 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3533 ; AVX512VLDQ-NEXT:    testb $1, %al
3534 ; AVX512VLDQ-NEXT:    je LBB11_16
3535 ; AVX512VLDQ-NEXT:  ## %bb.15: ## %cond.load25
3536 ; AVX512VLDQ-NEXT:    vpinsrw $7, (%rdi), %xmm0, %xmm0
3537 ; AVX512VLDQ-NEXT:  LBB11_16: ## %else26
3538 ; AVX512VLDQ-NEXT:    vzeroupper
3539 ; AVX512VLDQ-NEXT:    retq
3540 ;
3541 ; AVX512VLBW-LABEL: expandload_v8i16_v8i16:
3542 ; AVX512VLBW:       ## %bb.0:
3543 ; AVX512VLBW-NEXT:    vptestnmw %xmm1, %xmm1, %k0
3544 ; AVX512VLBW-NEXT:    kmovd %k0, %eax
3545 ; AVX512VLBW-NEXT:    testb $1, %al
3546 ; AVX512VLBW-NEXT:    je LBB11_2
3547 ; AVX512VLBW-NEXT:  ## %bb.1: ## %cond.load
3548 ; AVX512VLBW-NEXT:    vpinsrw $0, (%rdi), %xmm0, %xmm0
3549 ; AVX512VLBW-NEXT:    addq $2, %rdi
3550 ; AVX512VLBW-NEXT:  LBB11_2: ## %else
3551 ; AVX512VLBW-NEXT:    kshiftrw $1, %k0, %k1
3552 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
3553 ; AVX512VLBW-NEXT:    testb $1, %al
3554 ; AVX512VLBW-NEXT:    je LBB11_4
3555 ; AVX512VLBW-NEXT:  ## %bb.3: ## %cond.load1
3556 ; AVX512VLBW-NEXT:    vpinsrw $1, (%rdi), %xmm0, %xmm0
3557 ; AVX512VLBW-NEXT:    addq $2, %rdi
3558 ; AVX512VLBW-NEXT:  LBB11_4: ## %else2
3559 ; AVX512VLBW-NEXT:    kshiftrw $2, %k0, %k1
3560 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
3561 ; AVX512VLBW-NEXT:    testb $1, %al
3562 ; AVX512VLBW-NEXT:    je LBB11_6
3563 ; AVX512VLBW-NEXT:  ## %bb.5: ## %cond.load5
3564 ; AVX512VLBW-NEXT:    vpinsrw $2, (%rdi), %xmm0, %xmm0
3565 ; AVX512VLBW-NEXT:    addq $2, %rdi
3566 ; AVX512VLBW-NEXT:  LBB11_6: ## %else6
3567 ; AVX512VLBW-NEXT:    kshiftrw $3, %k0, %k1
3568 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
3569 ; AVX512VLBW-NEXT:    testb $1, %al
3570 ; AVX512VLBW-NEXT:    je LBB11_8
3571 ; AVX512VLBW-NEXT:  ## %bb.7: ## %cond.load9
3572 ; AVX512VLBW-NEXT:    vpinsrw $3, (%rdi), %xmm0, %xmm0
3573 ; AVX512VLBW-NEXT:    addq $2, %rdi
3574 ; AVX512VLBW-NEXT:  LBB11_8: ## %else10
3575 ; AVX512VLBW-NEXT:    kshiftrw $4, %k0, %k1
3576 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
3577 ; AVX512VLBW-NEXT:    testb $1, %al
3578 ; AVX512VLBW-NEXT:    je LBB11_10
3579 ; AVX512VLBW-NEXT:  ## %bb.9: ## %cond.load13
3580 ; AVX512VLBW-NEXT:    vpinsrw $4, (%rdi), %xmm0, %xmm0
3581 ; AVX512VLBW-NEXT:    addq $2, %rdi
3582 ; AVX512VLBW-NEXT:  LBB11_10: ## %else14
3583 ; AVX512VLBW-NEXT:    kshiftrw $5, %k0, %k1
3584 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
3585 ; AVX512VLBW-NEXT:    testb $1, %al
3586 ; AVX512VLBW-NEXT:    je LBB11_12
3587 ; AVX512VLBW-NEXT:  ## %bb.11: ## %cond.load17
3588 ; AVX512VLBW-NEXT:    vpinsrw $5, (%rdi), %xmm0, %xmm0
3589 ; AVX512VLBW-NEXT:    addq $2, %rdi
3590 ; AVX512VLBW-NEXT:  LBB11_12: ## %else18
3591 ; AVX512VLBW-NEXT:    kshiftrw $6, %k0, %k1
3592 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
3593 ; AVX512VLBW-NEXT:    testb $1, %al
3594 ; AVX512VLBW-NEXT:    je LBB11_14
3595 ; AVX512VLBW-NEXT:  ## %bb.13: ## %cond.load21
3596 ; AVX512VLBW-NEXT:    vpinsrw $6, (%rdi), %xmm0, %xmm0
3597 ; AVX512VLBW-NEXT:    addq $2, %rdi
3598 ; AVX512VLBW-NEXT:  LBB11_14: ## %else22
3599 ; AVX512VLBW-NEXT:    kshiftrw $7, %k0, %k0
3600 ; AVX512VLBW-NEXT:    kmovd %k0, %eax
3601 ; AVX512VLBW-NEXT:    testb $1, %al
3602 ; AVX512VLBW-NEXT:    je LBB11_16
3603 ; AVX512VLBW-NEXT:  ## %bb.15: ## %cond.load25
3604 ; AVX512VLBW-NEXT:    vpinsrw $7, (%rdi), %xmm0, %xmm0
3605 ; AVX512VLBW-NEXT:  LBB11_16: ## %else26
3606 ; AVX512VLBW-NEXT:    retq
3607   %mask = icmp eq <8 x i16> %trigger, zeroinitializer
3608   %res = call <8 x i16> @llvm.masked.expandload.v8i16(i16* %base, <8 x i1> %mask, <8 x i16> %src0)
3609   ret <8 x i16>%res
3610 }
3611
3612 ;
3613 ; vXi8
3614 ;
3615
3616 define <16 x i8> @expandload_v16i8_v16i8(i8* %base, <16 x i8> %src0, <16 x i8> %trigger) {
3617 ; SSE2-LABEL: expandload_v16i8_v16i8:
3618 ; SSE2:       ## %bb.0:
3619 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3620 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3621 ; SSE2-NEXT:    movd %xmm2, %eax
3622 ; SSE2-NEXT:    testb $1, %al
3623 ; SSE2-NEXT:    je LBB12_2
3624 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
3625 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3626 ; SSE2-NEXT:    pand %xmm2, %xmm0
3627 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3628 ; SSE2-NEXT:    movd %ecx, %xmm3
3629 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3630 ; SSE2-NEXT:    por %xmm2, %xmm0
3631 ; SSE2-NEXT:    incq %rdi
3632 ; SSE2-NEXT:  LBB12_2: ## %else
3633 ; SSE2-NEXT:    shrl $8, %eax
3634 ; SSE2-NEXT:    testb $1, %al
3635 ; SSE2-NEXT:    je LBB12_4
3636 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
3637 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3638 ; SSE2-NEXT:    pand %xmm2, %xmm0
3639 ; SSE2-NEXT:    movzbl (%rdi), %eax
3640 ; SSE2-NEXT:    movd %eax, %xmm3
3641 ; SSE2-NEXT:    psllw $8, %xmm3
3642 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3643 ; SSE2-NEXT:    por %xmm2, %xmm0
3644 ; SSE2-NEXT:    incq %rdi
3645 ; SSE2-NEXT:  LBB12_4: ## %else2
3646 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3647 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3648 ; SSE2-NEXT:    movd %xmm2, %eax
3649 ; SSE2-NEXT:    movl %eax, %ecx
3650 ; SSE2-NEXT:    shrl $16, %ecx
3651 ; SSE2-NEXT:    testb $1, %cl
3652 ; SSE2-NEXT:    je LBB12_6
3653 ; SSE2-NEXT:  ## %bb.5: ## %cond.load5
3654 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
3655 ; SSE2-NEXT:    pand %xmm2, %xmm0
3656 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3657 ; SSE2-NEXT:    movd %ecx, %xmm3
3658 ; SSE2-NEXT:    pslld $16, %xmm3
3659 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3660 ; SSE2-NEXT:    por %xmm2, %xmm0
3661 ; SSE2-NEXT:    incq %rdi
3662 ; SSE2-NEXT:  LBB12_6: ## %else6
3663 ; SSE2-NEXT:    shrl $24, %eax
3664 ; SSE2-NEXT:    testb $1, %al
3665 ; SSE2-NEXT:    je LBB12_8
3666 ; SSE2-NEXT:  ## %bb.7: ## %cond.load9
3667 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
3668 ; SSE2-NEXT:    pand %xmm2, %xmm0
3669 ; SSE2-NEXT:    movzbl (%rdi), %eax
3670 ; SSE2-NEXT:    movd %eax, %xmm3
3671 ; SSE2-NEXT:    pslld $24, %xmm3
3672 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3673 ; SSE2-NEXT:    por %xmm2, %xmm0
3674 ; SSE2-NEXT:    incq %rdi
3675 ; SSE2-NEXT:  LBB12_8: ## %else10
3676 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3677 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3678 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
3679 ; SSE2-NEXT:    testb $1, %al
3680 ; SSE2-NEXT:    je LBB12_10
3681 ; SSE2-NEXT:  ## %bb.9: ## %cond.load13
3682 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
3683 ; SSE2-NEXT:    pand %xmm2, %xmm0
3684 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3685 ; SSE2-NEXT:    movd %ecx, %xmm3
3686 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
3687 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3688 ; SSE2-NEXT:    por %xmm2, %xmm0
3689 ; SSE2-NEXT:    incq %rdi
3690 ; SSE2-NEXT:  LBB12_10: ## %else14
3691 ; SSE2-NEXT:    shrl $8, %eax
3692 ; SSE2-NEXT:    testb $1, %al
3693 ; SSE2-NEXT:    je LBB12_12
3694 ; SSE2-NEXT:  ## %bb.11: ## %cond.load17
3695 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
3696 ; SSE2-NEXT:    pand %xmm2, %xmm0
3697 ; SSE2-NEXT:    movzbl (%rdi), %eax
3698 ; SSE2-NEXT:    movd %eax, %xmm3
3699 ; SSE2-NEXT:    psllq $40, %xmm3
3700 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3701 ; SSE2-NEXT:    por %xmm2, %xmm0
3702 ; SSE2-NEXT:    incq %rdi
3703 ; SSE2-NEXT:  LBB12_12: ## %else18
3704 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3705 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3706 ; SSE2-NEXT:    pextrw $3, %xmm2, %eax
3707 ; SSE2-NEXT:    testb $1, %al
3708 ; SSE2-NEXT:    je LBB12_14
3709 ; SSE2-NEXT:  ## %bb.13: ## %cond.load21
3710 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
3711 ; SSE2-NEXT:    pand %xmm2, %xmm0
3712 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3713 ; SSE2-NEXT:    movd %ecx, %xmm3
3714 ; SSE2-NEXT:    psllq $48, %xmm3
3715 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3716 ; SSE2-NEXT:    por %xmm2, %xmm0
3717 ; SSE2-NEXT:    incq %rdi
3718 ; SSE2-NEXT:  LBB12_14: ## %else22
3719 ; SSE2-NEXT:    shrl $8, %eax
3720 ; SSE2-NEXT:    testb $1, %al
3721 ; SSE2-NEXT:    je LBB12_16
3722 ; SSE2-NEXT:  ## %bb.15: ## %cond.load25
3723 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
3724 ; SSE2-NEXT:    pand %xmm2, %xmm0
3725 ; SSE2-NEXT:    movzbl (%rdi), %eax
3726 ; SSE2-NEXT:    movd %eax, %xmm3
3727 ; SSE2-NEXT:    psllq $56, %xmm3
3728 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3729 ; SSE2-NEXT:    por %xmm2, %xmm0
3730 ; SSE2-NEXT:    incq %rdi
3731 ; SSE2-NEXT:  LBB12_16: ## %else26
3732 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3733 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3734 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
3735 ; SSE2-NEXT:    testb $1, %al
3736 ; SSE2-NEXT:    je LBB12_18
3737 ; SSE2-NEXT:  ## %bb.17: ## %cond.load29
3738 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
3739 ; SSE2-NEXT:    pand %xmm2, %xmm0
3740 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3741 ; SSE2-NEXT:    movd %ecx, %xmm3
3742 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,0,1]
3743 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3744 ; SSE2-NEXT:    por %xmm2, %xmm0
3745 ; SSE2-NEXT:    incq %rdi
3746 ; SSE2-NEXT:  LBB12_18: ## %else30
3747 ; SSE2-NEXT:    shrl $8, %eax
3748 ; SSE2-NEXT:    testb $1, %al
3749 ; SSE2-NEXT:    je LBB12_20
3750 ; SSE2-NEXT:  ## %bb.19: ## %cond.load33
3751 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
3752 ; SSE2-NEXT:    pand %xmm2, %xmm0
3753 ; SSE2-NEXT:    movzbl (%rdi), %eax
3754 ; SSE2-NEXT:    movd %eax, %xmm3
3755 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4,5,6]
3756 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3757 ; SSE2-NEXT:    por %xmm2, %xmm0
3758 ; SSE2-NEXT:    incq %rdi
3759 ; SSE2-NEXT:  LBB12_20: ## %else34
3760 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3761 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3762 ; SSE2-NEXT:    pextrw $5, %xmm2, %eax
3763 ; SSE2-NEXT:    testb $1, %al
3764 ; SSE2-NEXT:    je LBB12_22
3765 ; SSE2-NEXT:  ## %bb.21: ## %cond.load37
3766 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
3767 ; SSE2-NEXT:    pand %xmm2, %xmm0
3768 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3769 ; SSE2-NEXT:    movd %ecx, %xmm3
3770 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4,5]
3771 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3772 ; SSE2-NEXT:    por %xmm2, %xmm0
3773 ; SSE2-NEXT:    incq %rdi
3774 ; SSE2-NEXT:  LBB12_22: ## %else38
3775 ; SSE2-NEXT:    shrl $8, %eax
3776 ; SSE2-NEXT:    testb $1, %al
3777 ; SSE2-NEXT:    je LBB12_24
3778 ; SSE2-NEXT:  ## %bb.23: ## %cond.load41
3779 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]
3780 ; SSE2-NEXT:    pand %xmm2, %xmm0
3781 ; SSE2-NEXT:    movzbl (%rdi), %eax
3782 ; SSE2-NEXT:    movd %eax, %xmm3
3783 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4]
3784 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3785 ; SSE2-NEXT:    por %xmm2, %xmm0
3786 ; SSE2-NEXT:    incq %rdi
3787 ; SSE2-NEXT:  LBB12_24: ## %else42
3788 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3789 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
3790 ; SSE2-NEXT:    pextrw $6, %xmm2, %eax
3791 ; SSE2-NEXT:    testb $1, %al
3792 ; SSE2-NEXT:    je LBB12_26
3793 ; SSE2-NEXT:  ## %bb.25: ## %cond.load45
3794 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
3795 ; SSE2-NEXT:    pand %xmm2, %xmm0
3796 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3797 ; SSE2-NEXT:    movd %ecx, %xmm3
3798 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,0]
3799 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3800 ; SSE2-NEXT:    por %xmm2, %xmm0
3801 ; SSE2-NEXT:    incq %rdi
3802 ; SSE2-NEXT:  LBB12_26: ## %else46
3803 ; SSE2-NEXT:    shrl $8, %eax
3804 ; SSE2-NEXT:    testb $1, %al
3805 ; SSE2-NEXT:    je LBB12_28
3806 ; SSE2-NEXT:  ## %bb.27: ## %cond.load49
3807 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
3808 ; SSE2-NEXT:    pand %xmm2, %xmm0
3809 ; SSE2-NEXT:    movzbl (%rdi), %eax
3810 ; SSE2-NEXT:    movd %eax, %xmm3
3811 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2]
3812 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3813 ; SSE2-NEXT:    por %xmm2, %xmm0
3814 ; SSE2-NEXT:    incq %rdi
3815 ; SSE2-NEXT:  LBB12_28: ## %else50
3816 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3817 ; SSE2-NEXT:    pcmpeqb %xmm2, %xmm1
3818 ; SSE2-NEXT:    pextrw $7, %xmm1, %eax
3819 ; SSE2-NEXT:    testb $1, %al
3820 ; SSE2-NEXT:    je LBB12_30
3821 ; SSE2-NEXT:  ## %bb.29: ## %cond.load53
3822 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
3823 ; SSE2-NEXT:    pand %xmm1, %xmm0
3824 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3825 ; SSE2-NEXT:    movd %ecx, %xmm2
3826 ; SSE2-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1]
3827 ; SSE2-NEXT:    pandn %xmm2, %xmm1
3828 ; SSE2-NEXT:    por %xmm1, %xmm0
3829 ; SSE2-NEXT:    incq %rdi
3830 ; SSE2-NEXT:  LBB12_30: ## %else54
3831 ; SSE2-NEXT:    shrl $8, %eax
3832 ; SSE2-NEXT:    testb $1, %al
3833 ; SSE2-NEXT:    je LBB12_32
3834 ; SSE2-NEXT:  ## %bb.31: ## %cond.load57
3835 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
3836 ; SSE2-NEXT:    movzbl (%rdi), %eax
3837 ; SSE2-NEXT:    movd %eax, %xmm1
3838 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]
3839 ; SSE2-NEXT:    por %xmm1, %xmm0
3840 ; SSE2-NEXT:  LBB12_32: ## %else58
3841 ; SSE2-NEXT:    retq
3842 ;
3843 ; SSE42-LABEL: expandload_v16i8_v16i8:
3844 ; SSE42:       ## %bb.0:
3845 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3846 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3847 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
3848 ; SSE42-NEXT:    testb $1, %al
3849 ; SSE42-NEXT:    je LBB12_2
3850 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
3851 ; SSE42-NEXT:    pinsrb $0, (%rdi), %xmm0
3852 ; SSE42-NEXT:    incq %rdi
3853 ; SSE42-NEXT:  LBB12_2: ## %else
3854 ; SSE42-NEXT:    pextrb $1, %xmm2, %eax
3855 ; SSE42-NEXT:    testb $1, %al
3856 ; SSE42-NEXT:    je LBB12_4
3857 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
3858 ; SSE42-NEXT:    pinsrb $1, (%rdi), %xmm0
3859 ; SSE42-NEXT:    incq %rdi
3860 ; SSE42-NEXT:  LBB12_4: ## %else2
3861 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3862 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3863 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
3864 ; SSE42-NEXT:    testb $1, %al
3865 ; SSE42-NEXT:    je LBB12_6
3866 ; SSE42-NEXT:  ## %bb.5: ## %cond.load5
3867 ; SSE42-NEXT:    pinsrb $2, (%rdi), %xmm0
3868 ; SSE42-NEXT:    incq %rdi
3869 ; SSE42-NEXT:  LBB12_6: ## %else6
3870 ; SSE42-NEXT:    pextrb $3, %xmm2, %eax
3871 ; SSE42-NEXT:    testb $1, %al
3872 ; SSE42-NEXT:    je LBB12_8
3873 ; SSE42-NEXT:  ## %bb.7: ## %cond.load9
3874 ; SSE42-NEXT:    pinsrb $3, (%rdi), %xmm0
3875 ; SSE42-NEXT:    incq %rdi
3876 ; SSE42-NEXT:  LBB12_8: ## %else10
3877 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3878 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3879 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
3880 ; SSE42-NEXT:    testb $1, %al
3881 ; SSE42-NEXT:    je LBB12_10
3882 ; SSE42-NEXT:  ## %bb.9: ## %cond.load13
3883 ; SSE42-NEXT:    pinsrb $4, (%rdi), %xmm0
3884 ; SSE42-NEXT:    incq %rdi
3885 ; SSE42-NEXT:  LBB12_10: ## %else14
3886 ; SSE42-NEXT:    pextrb $5, %xmm2, %eax
3887 ; SSE42-NEXT:    testb $1, %al
3888 ; SSE42-NEXT:    je LBB12_12
3889 ; SSE42-NEXT:  ## %bb.11: ## %cond.load17
3890 ; SSE42-NEXT:    pinsrb $5, (%rdi), %xmm0
3891 ; SSE42-NEXT:    incq %rdi
3892 ; SSE42-NEXT:  LBB12_12: ## %else18
3893 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3894 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3895 ; SSE42-NEXT:    pextrb $6, %xmm2, %eax
3896 ; SSE42-NEXT:    testb $1, %al
3897 ; SSE42-NEXT:    je LBB12_14
3898 ; SSE42-NEXT:  ## %bb.13: ## %cond.load21
3899 ; SSE42-NEXT:    pinsrb $6, (%rdi), %xmm0
3900 ; SSE42-NEXT:    incq %rdi
3901 ; SSE42-NEXT:  LBB12_14: ## %else22
3902 ; SSE42-NEXT:    pextrb $7, %xmm2, %eax
3903 ; SSE42-NEXT:    testb $1, %al
3904 ; SSE42-NEXT:    je LBB12_16
3905 ; SSE42-NEXT:  ## %bb.15: ## %cond.load25
3906 ; SSE42-NEXT:    pinsrb $7, (%rdi), %xmm0
3907 ; SSE42-NEXT:    incq %rdi
3908 ; SSE42-NEXT:  LBB12_16: ## %else26
3909 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3910 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3911 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
3912 ; SSE42-NEXT:    testb $1, %al
3913 ; SSE42-NEXT:    je LBB12_18
3914 ; SSE42-NEXT:  ## %bb.17: ## %cond.load29
3915 ; SSE42-NEXT:    pinsrb $8, (%rdi), %xmm0
3916 ; SSE42-NEXT:    incq %rdi
3917 ; SSE42-NEXT:  LBB12_18: ## %else30
3918 ; SSE42-NEXT:    pextrb $9, %xmm2, %eax
3919 ; SSE42-NEXT:    testb $1, %al
3920 ; SSE42-NEXT:    je LBB12_20
3921 ; SSE42-NEXT:  ## %bb.19: ## %cond.load33
3922 ; SSE42-NEXT:    pinsrb $9, (%rdi), %xmm0
3923 ; SSE42-NEXT:    incq %rdi
3924 ; SSE42-NEXT:  LBB12_20: ## %else34
3925 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3926 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3927 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
3928 ; SSE42-NEXT:    testb $1, %al
3929 ; SSE42-NEXT:    je LBB12_22
3930 ; SSE42-NEXT:  ## %bb.21: ## %cond.load37
3931 ; SSE42-NEXT:    pinsrb $10, (%rdi), %xmm0
3932 ; SSE42-NEXT:    incq %rdi
3933 ; SSE42-NEXT:  LBB12_22: ## %else38
3934 ; SSE42-NEXT:    pextrb $11, %xmm2, %eax
3935 ; SSE42-NEXT:    testb $1, %al
3936 ; SSE42-NEXT:    je LBB12_24
3937 ; SSE42-NEXT:  ## %bb.23: ## %cond.load41
3938 ; SSE42-NEXT:    pinsrb $11, (%rdi), %xmm0
3939 ; SSE42-NEXT:    incq %rdi
3940 ; SSE42-NEXT:  LBB12_24: ## %else42
3941 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3942 ; SSE42-NEXT:    pcmpeqb %xmm1, %xmm2
3943 ; SSE42-NEXT:    pextrb $12, %xmm2, %eax
3944 ; SSE42-NEXT:    testb $1, %al
3945 ; SSE42-NEXT:    je LBB12_26
3946 ; SSE42-NEXT:  ## %bb.25: ## %cond.load45
3947 ; SSE42-NEXT:    pinsrb $12, (%rdi), %xmm0
3948 ; SSE42-NEXT:    incq %rdi
3949 ; SSE42-NEXT:  LBB12_26: ## %else46
3950 ; SSE42-NEXT:    pextrb $13, %xmm2, %eax
3951 ; SSE42-NEXT:    testb $1, %al
3952 ; SSE42-NEXT:    je LBB12_28
3953 ; SSE42-NEXT:  ## %bb.27: ## %cond.load49
3954 ; SSE42-NEXT:    pinsrb $13, (%rdi), %xmm0
3955 ; SSE42-NEXT:    incq %rdi
3956 ; SSE42-NEXT:  LBB12_28: ## %else50
3957 ; SSE42-NEXT:    pxor %xmm2, %xmm2
3958 ; SSE42-NEXT:    pcmpeqb %xmm2, %xmm1
3959 ; SSE42-NEXT:    pextrb $14, %xmm1, %eax
3960 ; SSE42-NEXT:    testb $1, %al
3961 ; SSE42-NEXT:    je LBB12_30
3962 ; SSE42-NEXT:  ## %bb.29: ## %cond.load53
3963 ; SSE42-NEXT:    pinsrb $14, (%rdi), %xmm0
3964 ; SSE42-NEXT:    incq %rdi
3965 ; SSE42-NEXT:  LBB12_30: ## %else54
3966 ; SSE42-NEXT:    pextrb $15, %xmm1, %eax
3967 ; SSE42-NEXT:    testb $1, %al
3968 ; SSE42-NEXT:    je LBB12_32
3969 ; SSE42-NEXT:  ## %bb.31: ## %cond.load57
3970 ; SSE42-NEXT:    pinsrb $15, (%rdi), %xmm0
3971 ; SSE42-NEXT:  LBB12_32: ## %else58
3972 ; SSE42-NEXT:    retq
3973 ;
3974 ; AVX1OR2-LABEL: expandload_v16i8_v16i8:
3975 ; AVX1OR2:       ## %bb.0:
3976 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3977 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
3978 ; AVX1OR2-NEXT:    vpextrb $0, %xmm2, %eax
3979 ; AVX1OR2-NEXT:    testb $1, %al
3980 ; AVX1OR2-NEXT:    je LBB12_2
3981 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
3982 ; AVX1OR2-NEXT:    vpinsrb $0, (%rdi), %xmm0, %xmm0
3983 ; AVX1OR2-NEXT:    incq %rdi
3984 ; AVX1OR2-NEXT:  LBB12_2: ## %else
3985 ; AVX1OR2-NEXT:    vpextrb $1, %xmm2, %eax
3986 ; AVX1OR2-NEXT:    testb $1, %al
3987 ; AVX1OR2-NEXT:    je LBB12_4
3988 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
3989 ; AVX1OR2-NEXT:    vpinsrb $1, (%rdi), %xmm0, %xmm0
3990 ; AVX1OR2-NEXT:    incq %rdi
3991 ; AVX1OR2-NEXT:  LBB12_4: ## %else2
3992 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3993 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
3994 ; AVX1OR2-NEXT:    vpextrb $2, %xmm2, %eax
3995 ; AVX1OR2-NEXT:    testb $1, %al
3996 ; AVX1OR2-NEXT:    je LBB12_6
3997 ; AVX1OR2-NEXT:  ## %bb.5: ## %cond.load5
3998 ; AVX1OR2-NEXT:    vpinsrb $2, (%rdi), %xmm0, %xmm0
3999 ; AVX1OR2-NEXT:    incq %rdi
4000 ; AVX1OR2-NEXT:  LBB12_6: ## %else6
4001 ; AVX1OR2-NEXT:    vpextrb $3, %xmm2, %eax
4002 ; AVX1OR2-NEXT:    testb $1, %al
4003 ; AVX1OR2-NEXT:    je LBB12_8
4004 ; AVX1OR2-NEXT:  ## %bb.7: ## %cond.load9
4005 ; AVX1OR2-NEXT:    vpinsrb $3, (%rdi), %xmm0, %xmm0
4006 ; AVX1OR2-NEXT:    incq %rdi
4007 ; AVX1OR2-NEXT:  LBB12_8: ## %else10
4008 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4009 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4010 ; AVX1OR2-NEXT:    vpextrb $4, %xmm2, %eax
4011 ; AVX1OR2-NEXT:    testb $1, %al
4012 ; AVX1OR2-NEXT:    je LBB12_10
4013 ; AVX1OR2-NEXT:  ## %bb.9: ## %cond.load13
4014 ; AVX1OR2-NEXT:    vpinsrb $4, (%rdi), %xmm0, %xmm0
4015 ; AVX1OR2-NEXT:    incq %rdi
4016 ; AVX1OR2-NEXT:  LBB12_10: ## %else14
4017 ; AVX1OR2-NEXT:    vpextrb $5, %xmm2, %eax
4018 ; AVX1OR2-NEXT:    testb $1, %al
4019 ; AVX1OR2-NEXT:    je LBB12_12
4020 ; AVX1OR2-NEXT:  ## %bb.11: ## %cond.load17
4021 ; AVX1OR2-NEXT:    vpinsrb $5, (%rdi), %xmm0, %xmm0
4022 ; AVX1OR2-NEXT:    incq %rdi
4023 ; AVX1OR2-NEXT:  LBB12_12: ## %else18
4024 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4025 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4026 ; AVX1OR2-NEXT:    vpextrb $6, %xmm2, %eax
4027 ; AVX1OR2-NEXT:    testb $1, %al
4028 ; AVX1OR2-NEXT:    je LBB12_14
4029 ; AVX1OR2-NEXT:  ## %bb.13: ## %cond.load21
4030 ; AVX1OR2-NEXT:    vpinsrb $6, (%rdi), %xmm0, %xmm0
4031 ; AVX1OR2-NEXT:    incq %rdi
4032 ; AVX1OR2-NEXT:  LBB12_14: ## %else22
4033 ; AVX1OR2-NEXT:    vpextrb $7, %xmm2, %eax
4034 ; AVX1OR2-NEXT:    testb $1, %al
4035 ; AVX1OR2-NEXT:    je LBB12_16
4036 ; AVX1OR2-NEXT:  ## %bb.15: ## %cond.load25
4037 ; AVX1OR2-NEXT:    vpinsrb $7, (%rdi), %xmm0, %xmm0
4038 ; AVX1OR2-NEXT:    incq %rdi
4039 ; AVX1OR2-NEXT:  LBB12_16: ## %else26
4040 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4041 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4042 ; AVX1OR2-NEXT:    vpextrb $8, %xmm2, %eax
4043 ; AVX1OR2-NEXT:    testb $1, %al
4044 ; AVX1OR2-NEXT:    je LBB12_18
4045 ; AVX1OR2-NEXT:  ## %bb.17: ## %cond.load29
4046 ; AVX1OR2-NEXT:    vpinsrb $8, (%rdi), %xmm0, %xmm0
4047 ; AVX1OR2-NEXT:    incq %rdi
4048 ; AVX1OR2-NEXT:  LBB12_18: ## %else30
4049 ; AVX1OR2-NEXT:    vpextrb $9, %xmm2, %eax
4050 ; AVX1OR2-NEXT:    testb $1, %al
4051 ; AVX1OR2-NEXT:    je LBB12_20
4052 ; AVX1OR2-NEXT:  ## %bb.19: ## %cond.load33
4053 ; AVX1OR2-NEXT:    vpinsrb $9, (%rdi), %xmm0, %xmm0
4054 ; AVX1OR2-NEXT:    incq %rdi
4055 ; AVX1OR2-NEXT:  LBB12_20: ## %else34
4056 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4057 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4058 ; AVX1OR2-NEXT:    vpextrb $10, %xmm2, %eax
4059 ; AVX1OR2-NEXT:    testb $1, %al
4060 ; AVX1OR2-NEXT:    je LBB12_22
4061 ; AVX1OR2-NEXT:  ## %bb.21: ## %cond.load37
4062 ; AVX1OR2-NEXT:    vpinsrb $10, (%rdi), %xmm0, %xmm0
4063 ; AVX1OR2-NEXT:    incq %rdi
4064 ; AVX1OR2-NEXT:  LBB12_22: ## %else38
4065 ; AVX1OR2-NEXT:    vpextrb $11, %xmm2, %eax
4066 ; AVX1OR2-NEXT:    testb $1, %al
4067 ; AVX1OR2-NEXT:    je LBB12_24
4068 ; AVX1OR2-NEXT:  ## %bb.23: ## %cond.load41
4069 ; AVX1OR2-NEXT:    vpinsrb $11, (%rdi), %xmm0, %xmm0
4070 ; AVX1OR2-NEXT:    incq %rdi
4071 ; AVX1OR2-NEXT:  LBB12_24: ## %else42
4072 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4073 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4074 ; AVX1OR2-NEXT:    vpextrb $12, %xmm2, %eax
4075 ; AVX1OR2-NEXT:    testb $1, %al
4076 ; AVX1OR2-NEXT:    je LBB12_26
4077 ; AVX1OR2-NEXT:  ## %bb.25: ## %cond.load45
4078 ; AVX1OR2-NEXT:    vpinsrb $12, (%rdi), %xmm0, %xmm0
4079 ; AVX1OR2-NEXT:    incq %rdi
4080 ; AVX1OR2-NEXT:  LBB12_26: ## %else46
4081 ; AVX1OR2-NEXT:    vpextrb $13, %xmm2, %eax
4082 ; AVX1OR2-NEXT:    testb $1, %al
4083 ; AVX1OR2-NEXT:    je LBB12_28
4084 ; AVX1OR2-NEXT:  ## %bb.27: ## %cond.load49
4085 ; AVX1OR2-NEXT:    vpinsrb $13, (%rdi), %xmm0, %xmm0
4086 ; AVX1OR2-NEXT:    incq %rdi
4087 ; AVX1OR2-NEXT:  LBB12_28: ## %else50
4088 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4089 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
4090 ; AVX1OR2-NEXT:    vpextrb $14, %xmm1, %eax
4091 ; AVX1OR2-NEXT:    testb $1, %al
4092 ; AVX1OR2-NEXT:    je LBB12_30
4093 ; AVX1OR2-NEXT:  ## %bb.29: ## %cond.load53
4094 ; AVX1OR2-NEXT:    vpinsrb $14, (%rdi), %xmm0, %xmm0
4095 ; AVX1OR2-NEXT:    incq %rdi
4096 ; AVX1OR2-NEXT:  LBB12_30: ## %else54
4097 ; AVX1OR2-NEXT:    vpextrb $15, %xmm1, %eax
4098 ; AVX1OR2-NEXT:    testb $1, %al
4099 ; AVX1OR2-NEXT:    je LBB12_32
4100 ; AVX1OR2-NEXT:  ## %bb.31: ## %cond.load57
4101 ; AVX1OR2-NEXT:    vpinsrb $15, (%rdi), %xmm0, %xmm0
4102 ; AVX1OR2-NEXT:  LBB12_32: ## %else58
4103 ; AVX1OR2-NEXT:    retq
4104 ;
4105 ; AVX512F-LABEL: expandload_v16i8_v16i8:
4106 ; AVX512F:       ## %bb.0:
4107 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4108 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4109 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4110 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4111 ; AVX512F-NEXT:    kmovw %k0, %eax
4112 ; AVX512F-NEXT:    testb $1, %al
4113 ; AVX512F-NEXT:    je LBB12_2
4114 ; AVX512F-NEXT:  ## %bb.1: ## %cond.load
4115 ; AVX512F-NEXT:    vpinsrb $0, (%rdi), %xmm0, %xmm0
4116 ; AVX512F-NEXT:    incq %rdi
4117 ; AVX512F-NEXT:  LBB12_2: ## %else
4118 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
4119 ; AVX512F-NEXT:    kmovw %k0, %eax
4120 ; AVX512F-NEXT:    testb $1, %al
4121 ; AVX512F-NEXT:    je LBB12_4
4122 ; AVX512F-NEXT:  ## %bb.3: ## %cond.load1
4123 ; AVX512F-NEXT:    vpinsrb $1, (%rdi), %xmm0, %xmm0
4124 ; AVX512F-NEXT:    incq %rdi
4125 ; AVX512F-NEXT:  LBB12_4: ## %else2
4126 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4127 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4128 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4129 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4130 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
4131 ; AVX512F-NEXT:    kmovw %k1, %eax
4132 ; AVX512F-NEXT:    testb $1, %al
4133 ; AVX512F-NEXT:    je LBB12_6
4134 ; AVX512F-NEXT:  ## %bb.5: ## %cond.load5
4135 ; AVX512F-NEXT:    vpinsrb $2, (%rdi), %xmm0, %xmm0
4136 ; AVX512F-NEXT:    incq %rdi
4137 ; AVX512F-NEXT:  LBB12_6: ## %else6
4138 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
4139 ; AVX512F-NEXT:    kmovw %k0, %eax
4140 ; AVX512F-NEXT:    testb $1, %al
4141 ; AVX512F-NEXT:    je LBB12_8
4142 ; AVX512F-NEXT:  ## %bb.7: ## %cond.load9
4143 ; AVX512F-NEXT:    vpinsrb $3, (%rdi), %xmm0, %xmm0
4144 ; AVX512F-NEXT:    incq %rdi
4145 ; AVX512F-NEXT:  LBB12_8: ## %else10
4146 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4147 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4148 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4149 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4150 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
4151 ; AVX512F-NEXT:    kmovw %k1, %eax
4152 ; AVX512F-NEXT:    testb $1, %al
4153 ; AVX512F-NEXT:    je LBB12_10
4154 ; AVX512F-NEXT:  ## %bb.9: ## %cond.load13
4155 ; AVX512F-NEXT:    vpinsrb $4, (%rdi), %xmm0, %xmm0
4156 ; AVX512F-NEXT:    incq %rdi
4157 ; AVX512F-NEXT:  LBB12_10: ## %else14
4158 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
4159 ; AVX512F-NEXT:    kmovw %k0, %eax
4160 ; AVX512F-NEXT:    testb $1, %al
4161 ; AVX512F-NEXT:    je LBB12_12
4162 ; AVX512F-NEXT:  ## %bb.11: ## %cond.load17
4163 ; AVX512F-NEXT:    vpinsrb $5, (%rdi), %xmm0, %xmm0
4164 ; AVX512F-NEXT:    incq %rdi
4165 ; AVX512F-NEXT:  LBB12_12: ## %else18
4166 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4167 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4168 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4169 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4170 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
4171 ; AVX512F-NEXT:    kmovw %k1, %eax
4172 ; AVX512F-NEXT:    testb $1, %al
4173 ; AVX512F-NEXT:    je LBB12_14
4174 ; AVX512F-NEXT:  ## %bb.13: ## %cond.load21
4175 ; AVX512F-NEXT:    vpinsrb $6, (%rdi), %xmm0, %xmm0
4176 ; AVX512F-NEXT:    incq %rdi
4177 ; AVX512F-NEXT:  LBB12_14: ## %else22
4178 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
4179 ; AVX512F-NEXT:    kmovw %k0, %eax
4180 ; AVX512F-NEXT:    testb $1, %al
4181 ; AVX512F-NEXT:    je LBB12_16
4182 ; AVX512F-NEXT:  ## %bb.15: ## %cond.load25
4183 ; AVX512F-NEXT:    vpinsrb $7, (%rdi), %xmm0, %xmm0
4184 ; AVX512F-NEXT:    incq %rdi
4185 ; AVX512F-NEXT:  LBB12_16: ## %else26
4186 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4187 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4188 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4189 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4190 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
4191 ; AVX512F-NEXT:    kmovw %k1, %eax
4192 ; AVX512F-NEXT:    testb $1, %al
4193 ; AVX512F-NEXT:    je LBB12_18
4194 ; AVX512F-NEXT:  ## %bb.17: ## %cond.load29
4195 ; AVX512F-NEXT:    vpinsrb $8, (%rdi), %xmm0, %xmm0
4196 ; AVX512F-NEXT:    incq %rdi
4197 ; AVX512F-NEXT:  LBB12_18: ## %else30
4198 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
4199 ; AVX512F-NEXT:    kmovw %k0, %eax
4200 ; AVX512F-NEXT:    testb $1, %al
4201 ; AVX512F-NEXT:    je LBB12_20
4202 ; AVX512F-NEXT:  ## %bb.19: ## %cond.load33
4203 ; AVX512F-NEXT:    vpinsrb $9, (%rdi), %xmm0, %xmm0
4204 ; AVX512F-NEXT:    incq %rdi
4205 ; AVX512F-NEXT:  LBB12_20: ## %else34
4206 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4207 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4208 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4209 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4210 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k1
4211 ; AVX512F-NEXT:    kmovw %k1, %eax
4212 ; AVX512F-NEXT:    testb $1, %al
4213 ; AVX512F-NEXT:    je LBB12_22
4214 ; AVX512F-NEXT:  ## %bb.21: ## %cond.load37
4215 ; AVX512F-NEXT:    vpinsrb $10, (%rdi), %xmm0, %xmm0
4216 ; AVX512F-NEXT:    incq %rdi
4217 ; AVX512F-NEXT:  LBB12_22: ## %else38
4218 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
4219 ; AVX512F-NEXT:    kmovw %k0, %eax
4220 ; AVX512F-NEXT:    testb $1, %al
4221 ; AVX512F-NEXT:    je LBB12_24
4222 ; AVX512F-NEXT:  ## %bb.23: ## %cond.load41
4223 ; AVX512F-NEXT:    vpinsrb $11, (%rdi), %xmm0, %xmm0
4224 ; AVX512F-NEXT:    incq %rdi
4225 ; AVX512F-NEXT:  LBB12_24: ## %else42
4226 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4227 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4228 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4229 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4230 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
4231 ; AVX512F-NEXT:    kmovw %k1, %eax
4232 ; AVX512F-NEXT:    testb $1, %al
4233 ; AVX512F-NEXT:    je LBB12_26
4234 ; AVX512F-NEXT:  ## %bb.25: ## %cond.load45
4235 ; AVX512F-NEXT:    vpinsrb $12, (%rdi), %xmm0, %xmm0
4236 ; AVX512F-NEXT:    incq %rdi
4237 ; AVX512F-NEXT:  LBB12_26: ## %else46
4238 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
4239 ; AVX512F-NEXT:    kmovw %k0, %eax
4240 ; AVX512F-NEXT:    testb $1, %al
4241 ; AVX512F-NEXT:    je LBB12_28
4242 ; AVX512F-NEXT:  ## %bb.27: ## %cond.load49
4243 ; AVX512F-NEXT:    vpinsrb $13, (%rdi), %xmm0, %xmm0
4244 ; AVX512F-NEXT:    incq %rdi
4245 ; AVX512F-NEXT:  LBB12_28: ## %else50
4246 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4247 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
4248 ; AVX512F-NEXT:    vpmovsxbd %xmm1, %zmm1
4249 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4250 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
4251 ; AVX512F-NEXT:    kmovw %k1, %eax
4252 ; AVX512F-NEXT:    testb $1, %al
4253 ; AVX512F-NEXT:    je LBB12_30
4254 ; AVX512F-NEXT:  ## %bb.29: ## %cond.load53
4255 ; AVX512F-NEXT:    vpinsrb $14, (%rdi), %xmm0, %xmm0
4256 ; AVX512F-NEXT:    incq %rdi
4257 ; AVX512F-NEXT:  LBB12_30: ## %else54
4258 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
4259 ; AVX512F-NEXT:    kmovw %k0, %eax
4260 ; AVX512F-NEXT:    testb $1, %al
4261 ; AVX512F-NEXT:    je LBB12_32
4262 ; AVX512F-NEXT:  ## %bb.31: ## %cond.load57
4263 ; AVX512F-NEXT:    vpinsrb $15, (%rdi), %xmm0, %xmm0
4264 ; AVX512F-NEXT:  LBB12_32: ## %else58
4265 ; AVX512F-NEXT:    vzeroupper
4266 ; AVX512F-NEXT:    retq
4267 ;
4268 ; AVX512VLDQ-LABEL: expandload_v16i8_v16i8:
4269 ; AVX512VLDQ:       ## %bb.0:
4270 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4271 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4272 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4273 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4274 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4275 ; AVX512VLDQ-NEXT:    testb $1, %al
4276 ; AVX512VLDQ-NEXT:    je LBB12_2
4277 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.load
4278 ; AVX512VLDQ-NEXT:    vpinsrb $0, (%rdi), %xmm0, %xmm0
4279 ; AVX512VLDQ-NEXT:    incq %rdi
4280 ; AVX512VLDQ-NEXT:  LBB12_2: ## %else
4281 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
4282 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4283 ; AVX512VLDQ-NEXT:    testb $1, %al
4284 ; AVX512VLDQ-NEXT:    je LBB12_4
4285 ; AVX512VLDQ-NEXT:  ## %bb.3: ## %cond.load1
4286 ; AVX512VLDQ-NEXT:    vpinsrb $1, (%rdi), %xmm0, %xmm0
4287 ; AVX512VLDQ-NEXT:    incq %rdi
4288 ; AVX512VLDQ-NEXT:  LBB12_4: ## %else2
4289 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4290 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4291 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4292 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4293 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k1
4294 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4295 ; AVX512VLDQ-NEXT:    testb $1, %al
4296 ; AVX512VLDQ-NEXT:    je LBB12_6
4297 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.load5
4298 ; AVX512VLDQ-NEXT:    vpinsrb $2, (%rdi), %xmm0, %xmm0
4299 ; AVX512VLDQ-NEXT:    incq %rdi
4300 ; AVX512VLDQ-NEXT:  LBB12_6: ## %else6
4301 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
4302 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4303 ; AVX512VLDQ-NEXT:    testb $1, %al
4304 ; AVX512VLDQ-NEXT:    je LBB12_8
4305 ; AVX512VLDQ-NEXT:  ## %bb.7: ## %cond.load9
4306 ; AVX512VLDQ-NEXT:    vpinsrb $3, (%rdi), %xmm0, %xmm0
4307 ; AVX512VLDQ-NEXT:    incq %rdi
4308 ; AVX512VLDQ-NEXT:  LBB12_8: ## %else10
4309 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4310 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4311 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4312 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4313 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k1
4314 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4315 ; AVX512VLDQ-NEXT:    testb $1, %al
4316 ; AVX512VLDQ-NEXT:    je LBB12_10
4317 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.load13
4318 ; AVX512VLDQ-NEXT:    vpinsrb $4, (%rdi), %xmm0, %xmm0
4319 ; AVX512VLDQ-NEXT:    incq %rdi
4320 ; AVX512VLDQ-NEXT:  LBB12_10: ## %else14
4321 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
4322 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4323 ; AVX512VLDQ-NEXT:    testb $1, %al
4324 ; AVX512VLDQ-NEXT:    je LBB12_12
4325 ; AVX512VLDQ-NEXT:  ## %bb.11: ## %cond.load17
4326 ; AVX512VLDQ-NEXT:    vpinsrb $5, (%rdi), %xmm0, %xmm0
4327 ; AVX512VLDQ-NEXT:    incq %rdi
4328 ; AVX512VLDQ-NEXT:  LBB12_12: ## %else18
4329 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4330 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4331 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4332 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4333 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k1
4334 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4335 ; AVX512VLDQ-NEXT:    testb $1, %al
4336 ; AVX512VLDQ-NEXT:    je LBB12_14
4337 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.load21
4338 ; AVX512VLDQ-NEXT:    vpinsrb $6, (%rdi), %xmm0, %xmm0
4339 ; AVX512VLDQ-NEXT:    incq %rdi
4340 ; AVX512VLDQ-NEXT:  LBB12_14: ## %else22
4341 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
4342 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4343 ; AVX512VLDQ-NEXT:    testb $1, %al
4344 ; AVX512VLDQ-NEXT:    je LBB12_16
4345 ; AVX512VLDQ-NEXT:  ## %bb.15: ## %cond.load25
4346 ; AVX512VLDQ-NEXT:    vpinsrb $7, (%rdi), %xmm0, %xmm0
4347 ; AVX512VLDQ-NEXT:    incq %rdi
4348 ; AVX512VLDQ-NEXT:  LBB12_16: ## %else26
4349 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4350 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4351 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4352 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4353 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k1
4354 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4355 ; AVX512VLDQ-NEXT:    testb $1, %al
4356 ; AVX512VLDQ-NEXT:    je LBB12_18
4357 ; AVX512VLDQ-NEXT:  ## %bb.17: ## %cond.load29
4358 ; AVX512VLDQ-NEXT:    vpinsrb $8, (%rdi), %xmm0, %xmm0
4359 ; AVX512VLDQ-NEXT:    incq %rdi
4360 ; AVX512VLDQ-NEXT:  LBB12_18: ## %else30
4361 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
4362 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4363 ; AVX512VLDQ-NEXT:    testb $1, %al
4364 ; AVX512VLDQ-NEXT:    je LBB12_20
4365 ; AVX512VLDQ-NEXT:  ## %bb.19: ## %cond.load33
4366 ; AVX512VLDQ-NEXT:    vpinsrb $9, (%rdi), %xmm0, %xmm0
4367 ; AVX512VLDQ-NEXT:    incq %rdi
4368 ; AVX512VLDQ-NEXT:  LBB12_20: ## %else34
4369 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4370 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4371 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4372 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4373 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k1
4374 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4375 ; AVX512VLDQ-NEXT:    testb $1, %al
4376 ; AVX512VLDQ-NEXT:    je LBB12_22
4377 ; AVX512VLDQ-NEXT:  ## %bb.21: ## %cond.load37
4378 ; AVX512VLDQ-NEXT:    vpinsrb $10, (%rdi), %xmm0, %xmm0
4379 ; AVX512VLDQ-NEXT:    incq %rdi
4380 ; AVX512VLDQ-NEXT:  LBB12_22: ## %else38
4381 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
4382 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4383 ; AVX512VLDQ-NEXT:    testb $1, %al
4384 ; AVX512VLDQ-NEXT:    je LBB12_24
4385 ; AVX512VLDQ-NEXT:  ## %bb.23: ## %cond.load41
4386 ; AVX512VLDQ-NEXT:    vpinsrb $11, (%rdi), %xmm0, %xmm0
4387 ; AVX512VLDQ-NEXT:    incq %rdi
4388 ; AVX512VLDQ-NEXT:  LBB12_24: ## %else42
4389 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4390 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm2
4391 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4392 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4393 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k1
4394 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4395 ; AVX512VLDQ-NEXT:    testb $1, %al
4396 ; AVX512VLDQ-NEXT:    je LBB12_26
4397 ; AVX512VLDQ-NEXT:  ## %bb.25: ## %cond.load45
4398 ; AVX512VLDQ-NEXT:    vpinsrb $12, (%rdi), %xmm0, %xmm0
4399 ; AVX512VLDQ-NEXT:    incq %rdi
4400 ; AVX512VLDQ-NEXT:  LBB12_26: ## %else46
4401 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
4402 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4403 ; AVX512VLDQ-NEXT:    testb $1, %al
4404 ; AVX512VLDQ-NEXT:    je LBB12_28
4405 ; AVX512VLDQ-NEXT:  ## %bb.27: ## %cond.load49
4406 ; AVX512VLDQ-NEXT:    vpinsrb $13, (%rdi), %xmm0, %xmm0
4407 ; AVX512VLDQ-NEXT:    incq %rdi
4408 ; AVX512VLDQ-NEXT:  LBB12_28: ## %else50
4409 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4410 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
4411 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm1, %zmm1
4412 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm1, %k0
4413 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k1
4414 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4415 ; AVX512VLDQ-NEXT:    testb $1, %al
4416 ; AVX512VLDQ-NEXT:    je LBB12_30
4417 ; AVX512VLDQ-NEXT:  ## %bb.29: ## %cond.load53
4418 ; AVX512VLDQ-NEXT:    vpinsrb $14, (%rdi), %xmm0, %xmm0
4419 ; AVX512VLDQ-NEXT:    incq %rdi
4420 ; AVX512VLDQ-NEXT:  LBB12_30: ## %else54
4421 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
4422 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4423 ; AVX512VLDQ-NEXT:    testb $1, %al
4424 ; AVX512VLDQ-NEXT:    je LBB12_32
4425 ; AVX512VLDQ-NEXT:  ## %bb.31: ## %cond.load57
4426 ; AVX512VLDQ-NEXT:    vpinsrb $15, (%rdi), %xmm0, %xmm0
4427 ; AVX512VLDQ-NEXT:  LBB12_32: ## %else58
4428 ; AVX512VLDQ-NEXT:    vzeroupper
4429 ; AVX512VLDQ-NEXT:    retq
4430 ;
4431 ; AVX512VLBW-LABEL: expandload_v16i8_v16i8:
4432 ; AVX512VLBW:       ## %bb.0:
4433 ; AVX512VLBW-NEXT:    vptestnmb %xmm1, %xmm1, %k0
4434 ; AVX512VLBW-NEXT:    kmovd %k0, %eax
4435 ; AVX512VLBW-NEXT:    testb $1, %al
4436 ; AVX512VLBW-NEXT:    je LBB12_2
4437 ; AVX512VLBW-NEXT:  ## %bb.1: ## %cond.load
4438 ; AVX512VLBW-NEXT:    vpinsrb $0, (%rdi), %xmm0, %xmm0
4439 ; AVX512VLBW-NEXT:    incq %rdi
4440 ; AVX512VLBW-NEXT:  LBB12_2: ## %else
4441 ; AVX512VLBW-NEXT:    kshiftrw $1, %k0, %k1
4442 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4443 ; AVX512VLBW-NEXT:    testb $1, %al
4444 ; AVX512VLBW-NEXT:    je LBB12_4
4445 ; AVX512VLBW-NEXT:  ## %bb.3: ## %cond.load1
4446 ; AVX512VLBW-NEXT:    vpinsrb $1, (%rdi), %xmm0, %xmm0
4447 ; AVX512VLBW-NEXT:    incq %rdi
4448 ; AVX512VLBW-NEXT:  LBB12_4: ## %else2
4449 ; AVX512VLBW-NEXT:    kshiftrw $2, %k0, %k1
4450 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4451 ; AVX512VLBW-NEXT:    testb $1, %al
4452 ; AVX512VLBW-NEXT:    je LBB12_6
4453 ; AVX512VLBW-NEXT:  ## %bb.5: ## %cond.load5
4454 ; AVX512VLBW-NEXT:    vpinsrb $2, (%rdi), %xmm0, %xmm0
4455 ; AVX512VLBW-NEXT:    incq %rdi
4456 ; AVX512VLBW-NEXT:  LBB12_6: ## %else6
4457 ; AVX512VLBW-NEXT:    kshiftrw $3, %k0, %k1
4458 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4459 ; AVX512VLBW-NEXT:    testb $1, %al
4460 ; AVX512VLBW-NEXT:    je LBB12_8
4461 ; AVX512VLBW-NEXT:  ## %bb.7: ## %cond.load9
4462 ; AVX512VLBW-NEXT:    vpinsrb $3, (%rdi), %xmm0, %xmm0
4463 ; AVX512VLBW-NEXT:    incq %rdi
4464 ; AVX512VLBW-NEXT:  LBB12_8: ## %else10
4465 ; AVX512VLBW-NEXT:    kshiftrw $4, %k0, %k1
4466 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4467 ; AVX512VLBW-NEXT:    testb $1, %al
4468 ; AVX512VLBW-NEXT:    je LBB12_10
4469 ; AVX512VLBW-NEXT:  ## %bb.9: ## %cond.load13
4470 ; AVX512VLBW-NEXT:    vpinsrb $4, (%rdi), %xmm0, %xmm0
4471 ; AVX512VLBW-NEXT:    incq %rdi
4472 ; AVX512VLBW-NEXT:  LBB12_10: ## %else14
4473 ; AVX512VLBW-NEXT:    kshiftrw $5, %k0, %k1
4474 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4475 ; AVX512VLBW-NEXT:    testb $1, %al
4476 ; AVX512VLBW-NEXT:    je LBB12_12
4477 ; AVX512VLBW-NEXT:  ## %bb.11: ## %cond.load17
4478 ; AVX512VLBW-NEXT:    vpinsrb $5, (%rdi), %xmm0, %xmm0
4479 ; AVX512VLBW-NEXT:    incq %rdi
4480 ; AVX512VLBW-NEXT:  LBB12_12: ## %else18
4481 ; AVX512VLBW-NEXT:    kshiftrw $6, %k0, %k1
4482 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4483 ; AVX512VLBW-NEXT:    testb $1, %al
4484 ; AVX512VLBW-NEXT:    je LBB12_14
4485 ; AVX512VLBW-NEXT:  ## %bb.13: ## %cond.load21
4486 ; AVX512VLBW-NEXT:    vpinsrb $6, (%rdi), %xmm0, %xmm0
4487 ; AVX512VLBW-NEXT:    incq %rdi
4488 ; AVX512VLBW-NEXT:  LBB12_14: ## %else22
4489 ; AVX512VLBW-NEXT:    kshiftrw $7, %k0, %k1
4490 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4491 ; AVX512VLBW-NEXT:    testb $1, %al
4492 ; AVX512VLBW-NEXT:    je LBB12_16
4493 ; AVX512VLBW-NEXT:  ## %bb.15: ## %cond.load25
4494 ; AVX512VLBW-NEXT:    vpinsrb $7, (%rdi), %xmm0, %xmm0
4495 ; AVX512VLBW-NEXT:    incq %rdi
4496 ; AVX512VLBW-NEXT:  LBB12_16: ## %else26
4497 ; AVX512VLBW-NEXT:    kshiftrw $8, %k0, %k1
4498 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4499 ; AVX512VLBW-NEXT:    testb $1, %al
4500 ; AVX512VLBW-NEXT:    je LBB12_18
4501 ; AVX512VLBW-NEXT:  ## %bb.17: ## %cond.load29
4502 ; AVX512VLBW-NEXT:    vpinsrb $8, (%rdi), %xmm0, %xmm0
4503 ; AVX512VLBW-NEXT:    incq %rdi
4504 ; AVX512VLBW-NEXT:  LBB12_18: ## %else30
4505 ; AVX512VLBW-NEXT:    kshiftrw $9, %k0, %k1
4506 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4507 ; AVX512VLBW-NEXT:    testb $1, %al
4508 ; AVX512VLBW-NEXT:    je LBB12_20
4509 ; AVX512VLBW-NEXT:  ## %bb.19: ## %cond.load33
4510 ; AVX512VLBW-NEXT:    vpinsrb $9, (%rdi), %xmm0, %xmm0
4511 ; AVX512VLBW-NEXT:    incq %rdi
4512 ; AVX512VLBW-NEXT:  LBB12_20: ## %else34
4513 ; AVX512VLBW-NEXT:    kshiftrw $10, %k0, %k1
4514 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4515 ; AVX512VLBW-NEXT:    testb $1, %al
4516 ; AVX512VLBW-NEXT:    je LBB12_22
4517 ; AVX512VLBW-NEXT:  ## %bb.21: ## %cond.load37
4518 ; AVX512VLBW-NEXT:    vpinsrb $10, (%rdi), %xmm0, %xmm0
4519 ; AVX512VLBW-NEXT:    incq %rdi
4520 ; AVX512VLBW-NEXT:  LBB12_22: ## %else38
4521 ; AVX512VLBW-NEXT:    kshiftrw $11, %k0, %k1
4522 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4523 ; AVX512VLBW-NEXT:    testb $1, %al
4524 ; AVX512VLBW-NEXT:    je LBB12_24
4525 ; AVX512VLBW-NEXT:  ## %bb.23: ## %cond.load41
4526 ; AVX512VLBW-NEXT:    vpinsrb $11, (%rdi), %xmm0, %xmm0
4527 ; AVX512VLBW-NEXT:    incq %rdi
4528 ; AVX512VLBW-NEXT:  LBB12_24: ## %else42
4529 ; AVX512VLBW-NEXT:    kshiftrw $12, %k0, %k1
4530 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4531 ; AVX512VLBW-NEXT:    testb $1, %al
4532 ; AVX512VLBW-NEXT:    je LBB12_26
4533 ; AVX512VLBW-NEXT:  ## %bb.25: ## %cond.load45
4534 ; AVX512VLBW-NEXT:    vpinsrb $12, (%rdi), %xmm0, %xmm0
4535 ; AVX512VLBW-NEXT:    incq %rdi
4536 ; AVX512VLBW-NEXT:  LBB12_26: ## %else46
4537 ; AVX512VLBW-NEXT:    kshiftrw $13, %k0, %k1
4538 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4539 ; AVX512VLBW-NEXT:    testb $1, %al
4540 ; AVX512VLBW-NEXT:    je LBB12_28
4541 ; AVX512VLBW-NEXT:  ## %bb.27: ## %cond.load49
4542 ; AVX512VLBW-NEXT:    vpinsrb $13, (%rdi), %xmm0, %xmm0
4543 ; AVX512VLBW-NEXT:    incq %rdi
4544 ; AVX512VLBW-NEXT:  LBB12_28: ## %else50
4545 ; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1
4546 ; AVX512VLBW-NEXT:    kmovd %k1, %eax
4547 ; AVX512VLBW-NEXT:    testb $1, %al
4548 ; AVX512VLBW-NEXT:    je LBB12_30
4549 ; AVX512VLBW-NEXT:  ## %bb.29: ## %cond.load53
4550 ; AVX512VLBW-NEXT:    vpinsrb $14, (%rdi), %xmm0, %xmm0
4551 ; AVX512VLBW-NEXT:    incq %rdi
4552 ; AVX512VLBW-NEXT:  LBB12_30: ## %else54
4553 ; AVX512VLBW-NEXT:    kshiftrw $15, %k0, %k0
4554 ; AVX512VLBW-NEXT:    kmovd %k0, %eax
4555 ; AVX512VLBW-NEXT:    testb $1, %al
4556 ; AVX512VLBW-NEXT:    je LBB12_32
4557 ; AVX512VLBW-NEXT:  ## %bb.31: ## %cond.load57
4558 ; AVX512VLBW-NEXT:    vpinsrb $15, (%rdi), %xmm0, %xmm0
4559 ; AVX512VLBW-NEXT:  LBB12_32: ## %else58
4560 ; AVX512VLBW-NEXT:    retq
4561   %mask = icmp eq <16 x i8> %trigger, zeroinitializer
4562   %res = call <16 x i8> @llvm.masked.expandload.v16i8(i8* %base, <16 x i1> %mask, <16 x i8> %src0)
4563   ret <16 x i8>%res
4564 }
4565
4566 declare <16 x double> @llvm.masked.expandload.v16f64(double*, <16 x i1>, <16 x double>)
4567 declare <8 x double> @llvm.masked.expandload.v8f64(double*, <8 x i1>, <8 x double>)
4568 declare <4 x double> @llvm.masked.expandload.v4f64(double*, <4 x i1>, <4 x double>)
4569 declare <2 x double> @llvm.masked.expandload.v2f64(double*, <2 x i1>, <2 x double>)
4570 declare <1 x double> @llvm.masked.expandload.v1f64(double*, <1 x i1>, <1 x double>)
4571
4572 declare <32 x float> @llvm.masked.expandload.v32f32(float*, <32 x i1>, <32 x float>)
4573 declare <16 x float> @llvm.masked.expandload.v16f32(float*, <16 x i1>, <16 x float>)
4574 declare <8 x float> @llvm.masked.expandload.v8f32(float*, <8 x i1>, <8 x float>)
4575 declare <4 x float> @llvm.masked.expandload.v4f32(float*, <4 x i1>, <4 x float>)
4576 declare <2 x float> @llvm.masked.expandload.v2f32(float*, <2 x i1>, <2 x float>)
4577
4578 declare <8 x i64> @llvm.masked.expandload.v8i64(i64*, <8 x i1>, <8 x i64>)
4579 declare <4 x i64> @llvm.masked.expandload.v4i64(i64*, <4 x i1>, <4 x i64>)
4580 declare <2 x i64> @llvm.masked.expandload.v2i64(i64*, <2 x i1>, <2 x i64>)
4581 declare <1 x i64> @llvm.masked.expandload.v1i64(i64*, <1 x i1>, <1 x i64>)
4582
4583 declare <16 x i32> @llvm.masked.expandload.v16i32(i32*, <16 x i1>, <16 x i32>)
4584 declare <8 x i32> @llvm.masked.expandload.v8i32(i32*, <8 x i1>, <8 x i32>)
4585 declare <4 x i32> @llvm.masked.expandload.v4i32(i32*, <4 x i1>, <4 x i32>)
4586 declare <2 x i32> @llvm.masked.expandload.v2i32(i32*, <2 x i1>, <2 x i32>)
4587
4588 declare <32 x i16> @llvm.masked.expandload.v32i16(i16*, <32 x i1>, <32 x i16>)
4589 declare <16 x i16> @llvm.masked.expandload.v16i16(i16*, <16 x i1>, <16 x i16>)
4590 declare <8 x i16> @llvm.masked.expandload.v8i16(i16*, <8 x i1>, <8 x i16>)
4591 declare <4 x i16> @llvm.masked.expandload.v4i16(i16*, <4 x i1>, <4 x i16>)
4592
4593 declare <64 x i8> @llvm.masked.expandload.v64i8(i8*, <64 x i1>, <64 x i8>)
4594 declare <32 x i8> @llvm.masked.expandload.v32i8(i8*, <32 x i1>, <32 x i8>)
4595 declare <16 x i8> @llvm.masked.expandload.v16i8(i8*, <16 x i1>, <16 x i8>)
4596 declare <8 x i8> @llvm.masked.expandload.v8i8(i8*, <8 x i1>, <8 x i8>)