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