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