1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=sse2 | FileCheck %s --check-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4
4 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX1
5 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=avx2 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX2
6 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512dq,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLDQ
8 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512bw,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLBW
9 ; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=avx512f,avx512bw,avx512dq,avx512vl | FileCheck %s --check-prefixes=X86-AVX512
15 define void @store_v1f64_v1i64(<1 x i64> %trigger, ptr %addr, <1 x double> %val) {
16 ; SSE-LABEL: store_v1f64_v1i64:
18 ; SSE-NEXT: testq %rdi, %rdi
19 ; SSE-NEXT: jns LBB0_2
20 ; SSE-NEXT: ## %bb.1: ## %cond.store
21 ; SSE-NEXT: movsd %xmm0, (%rsi)
22 ; SSE-NEXT: LBB0_2: ## %else
25 ; AVX-LABEL: store_v1f64_v1i64:
27 ; AVX-NEXT: testq %rdi, %rdi
28 ; AVX-NEXT: jns LBB0_2
29 ; AVX-NEXT: ## %bb.1: ## %cond.store
30 ; AVX-NEXT: vmovsd %xmm0, (%rsi)
31 ; AVX-NEXT: LBB0_2: ## %else
34 ; X86-AVX512-LABEL: store_v1f64_v1i64:
35 ; X86-AVX512: ## %bb.0:
36 ; X86-AVX512-NEXT: cmpl $0, {{[0-9]+}}(%esp)
37 ; X86-AVX512-NEXT: jns LBB0_2
38 ; X86-AVX512-NEXT: ## %bb.1: ## %cond.store
39 ; X86-AVX512-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
40 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
41 ; X86-AVX512-NEXT: vmovsd %xmm0, (%eax)
42 ; X86-AVX512-NEXT: LBB0_2: ## %else
43 ; X86-AVX512-NEXT: retl
44 %mask = icmp slt <1 x i64> %trigger, zeroinitializer
45 call void @llvm.masked.store.v1f64.p0(<1 x double> %val, ptr %addr, i32 4, <1 x i1> %mask)
49 define void @store_v2f64_v2i64(<2 x i64> %trigger, ptr %addr, <2 x double> %val) {
50 ; SSE-LABEL: store_v2f64_v2i64:
52 ; SSE-NEXT: movmskpd %xmm0, %eax
53 ; SSE-NEXT: testb $1, %al
54 ; SSE-NEXT: jne LBB1_1
55 ; SSE-NEXT: ## %bb.2: ## %else
56 ; SSE-NEXT: testb $2, %al
57 ; SSE-NEXT: jne LBB1_3
58 ; SSE-NEXT: LBB1_4: ## %else2
60 ; SSE-NEXT: LBB1_1: ## %cond.store
61 ; SSE-NEXT: movlps %xmm1, (%rdi)
62 ; SSE-NEXT: testb $2, %al
64 ; SSE-NEXT: LBB1_3: ## %cond.store1
65 ; SSE-NEXT: movhps %xmm1, 8(%rdi)
68 ; AVX1OR2-LABEL: store_v2f64_v2i64:
70 ; AVX1OR2-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi)
73 ; AVX512F-LABEL: store_v2f64_v2i64:
75 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
76 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
77 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
78 ; AVX512F-NEXT: vpcmpgtq %zmm0, %zmm2, %k0
79 ; AVX512F-NEXT: kshiftlw $14, %k0, %k0
80 ; AVX512F-NEXT: kshiftrw $14, %k0, %k1
81 ; AVX512F-NEXT: vmovupd %zmm1, (%rdi) {%k1}
82 ; AVX512F-NEXT: vzeroupper
85 ; AVX512VLDQ-LABEL: store_v2f64_v2i64:
86 ; AVX512VLDQ: ## %bb.0:
87 ; AVX512VLDQ-NEXT: vpmovq2m %xmm0, %k1
88 ; AVX512VLDQ-NEXT: vmovupd %xmm1, (%rdi) {%k1}
89 ; AVX512VLDQ-NEXT: retq
91 ; AVX512VLBW-LABEL: store_v2f64_v2i64:
92 ; AVX512VLBW: ## %bb.0:
93 ; AVX512VLBW-NEXT: vpxor %xmm2, %xmm2, %xmm2
94 ; AVX512VLBW-NEXT: vpcmpgtq %xmm0, %xmm2, %k1
95 ; AVX512VLBW-NEXT: vmovupd %xmm1, (%rdi) {%k1}
96 ; AVX512VLBW-NEXT: retq
98 ; X86-AVX512-LABEL: store_v2f64_v2i64:
99 ; X86-AVX512: ## %bb.0:
100 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
101 ; X86-AVX512-NEXT: vpmovq2m %xmm0, %k1
102 ; X86-AVX512-NEXT: vmovupd %xmm1, (%eax) {%k1}
103 ; X86-AVX512-NEXT: retl
104 %mask = icmp slt <2 x i64> %trigger, zeroinitializer
105 call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %addr, i32 4, <2 x i1> %mask)
109 define void @store_v4f64_v4i64(<4 x i64> %trigger, ptr %addr, <4 x double> %val) {
110 ; SSE2-LABEL: store_v4f64_v4i64:
112 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]
113 ; SSE2-NEXT: movmskps %xmm0, %eax
114 ; SSE2-NEXT: testb $1, %al
115 ; SSE2-NEXT: jne LBB2_1
116 ; SSE2-NEXT: ## %bb.2: ## %else
117 ; SSE2-NEXT: testb $2, %al
118 ; SSE2-NEXT: jne LBB2_3
119 ; SSE2-NEXT: LBB2_4: ## %else2
120 ; SSE2-NEXT: testb $4, %al
121 ; SSE2-NEXT: jne LBB2_5
122 ; SSE2-NEXT: LBB2_6: ## %else4
123 ; SSE2-NEXT: testb $8, %al
124 ; SSE2-NEXT: jne LBB2_7
125 ; SSE2-NEXT: LBB2_8: ## %else6
127 ; SSE2-NEXT: LBB2_1: ## %cond.store
128 ; SSE2-NEXT: movlps %xmm2, (%rdi)
129 ; SSE2-NEXT: testb $2, %al
130 ; SSE2-NEXT: je LBB2_4
131 ; SSE2-NEXT: LBB2_3: ## %cond.store1
132 ; SSE2-NEXT: movhps %xmm2, 8(%rdi)
133 ; SSE2-NEXT: testb $4, %al
134 ; SSE2-NEXT: je LBB2_6
135 ; SSE2-NEXT: LBB2_5: ## %cond.store3
136 ; SSE2-NEXT: movlps %xmm3, 16(%rdi)
137 ; SSE2-NEXT: testb $8, %al
138 ; SSE2-NEXT: je LBB2_8
139 ; SSE2-NEXT: LBB2_7: ## %cond.store5
140 ; SSE2-NEXT: movhps %xmm3, 24(%rdi)
143 ; SSE4-LABEL: store_v4f64_v4i64:
145 ; SSE4-NEXT: packssdw %xmm1, %xmm0
146 ; SSE4-NEXT: movmskps %xmm0, %eax
147 ; SSE4-NEXT: testb $1, %al
148 ; SSE4-NEXT: jne LBB2_1
149 ; SSE4-NEXT: ## %bb.2: ## %else
150 ; SSE4-NEXT: testb $2, %al
151 ; SSE4-NEXT: jne LBB2_3
152 ; SSE4-NEXT: LBB2_4: ## %else2
153 ; SSE4-NEXT: testb $4, %al
154 ; SSE4-NEXT: jne LBB2_5
155 ; SSE4-NEXT: LBB2_6: ## %else4
156 ; SSE4-NEXT: testb $8, %al
157 ; SSE4-NEXT: jne LBB2_7
158 ; SSE4-NEXT: LBB2_8: ## %else6
160 ; SSE4-NEXT: LBB2_1: ## %cond.store
161 ; SSE4-NEXT: movlps %xmm2, (%rdi)
162 ; SSE4-NEXT: testb $2, %al
163 ; SSE4-NEXT: je LBB2_4
164 ; SSE4-NEXT: LBB2_3: ## %cond.store1
165 ; SSE4-NEXT: movhps %xmm2, 8(%rdi)
166 ; SSE4-NEXT: testb $4, %al
167 ; SSE4-NEXT: je LBB2_6
168 ; SSE4-NEXT: LBB2_5: ## %cond.store3
169 ; SSE4-NEXT: movlps %xmm3, 16(%rdi)
170 ; SSE4-NEXT: testb $8, %al
171 ; SSE4-NEXT: je LBB2_8
172 ; SSE4-NEXT: LBB2_7: ## %cond.store5
173 ; SSE4-NEXT: movhps %xmm3, 24(%rdi)
176 ; AVX1OR2-LABEL: store_v4f64_v4i64:
178 ; AVX1OR2-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi)
179 ; AVX1OR2-NEXT: vzeroupper
182 ; AVX512F-LABEL: store_v4f64_v4i64:
184 ; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm1
185 ; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0
186 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
187 ; AVX512F-NEXT: vpcmpgtq %zmm0, %zmm2, %k0
188 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
189 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
190 ; AVX512F-NEXT: vmovupd %zmm1, (%rdi) {%k1}
191 ; AVX512F-NEXT: vzeroupper
194 ; AVX512VLDQ-LABEL: store_v4f64_v4i64:
195 ; AVX512VLDQ: ## %bb.0:
196 ; AVX512VLDQ-NEXT: vpmovq2m %ymm0, %k1
197 ; AVX512VLDQ-NEXT: vmovupd %ymm1, (%rdi) {%k1}
198 ; AVX512VLDQ-NEXT: vzeroupper
199 ; AVX512VLDQ-NEXT: retq
201 ; AVX512VLBW-LABEL: store_v4f64_v4i64:
202 ; AVX512VLBW: ## %bb.0:
203 ; AVX512VLBW-NEXT: vpxor %xmm2, %xmm2, %xmm2
204 ; AVX512VLBW-NEXT: vpcmpgtq %ymm0, %ymm2, %k1
205 ; AVX512VLBW-NEXT: vmovupd %ymm1, (%rdi) {%k1}
206 ; AVX512VLBW-NEXT: vzeroupper
207 ; AVX512VLBW-NEXT: retq
209 ; X86-AVX512-LABEL: store_v4f64_v4i64:
210 ; X86-AVX512: ## %bb.0:
211 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
212 ; X86-AVX512-NEXT: vpmovq2m %ymm0, %k1
213 ; X86-AVX512-NEXT: vmovupd %ymm1, (%eax) {%k1}
214 ; X86-AVX512-NEXT: vzeroupper
215 ; X86-AVX512-NEXT: retl
216 %mask = icmp slt <4 x i64> %trigger, zeroinitializer
217 call void @llvm.masked.store.v4f64.p0(<4 x double> %val, ptr %addr, i32 4, <4 x i1> %mask)
225 define void @store_v2f32_v2i32(<2 x i32> %trigger, ptr %addr, <2 x float> %val) {
226 ; SSE2-LABEL: store_v2f32_v2i32:
228 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
229 ; SSE2-NEXT: pxor %xmm2, %xmm2
230 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm2
231 ; SSE2-NEXT: movmskpd %xmm2, %eax
232 ; SSE2-NEXT: testb $1, %al
233 ; SSE2-NEXT: jne LBB3_1
234 ; SSE2-NEXT: ## %bb.2: ## %else
235 ; SSE2-NEXT: testb $2, %al
236 ; SSE2-NEXT: jne LBB3_3
237 ; SSE2-NEXT: LBB3_4: ## %else2
239 ; SSE2-NEXT: LBB3_1: ## %cond.store
240 ; SSE2-NEXT: movss %xmm1, (%rdi)
241 ; SSE2-NEXT: testb $2, %al
242 ; SSE2-NEXT: je LBB3_4
243 ; SSE2-NEXT: LBB3_3: ## %cond.store1
244 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1,1,1]
245 ; SSE2-NEXT: movss %xmm1, 4(%rdi)
248 ; SSE4-LABEL: store_v2f32_v2i32:
250 ; SSE4-NEXT: pxor %xmm2, %xmm2
251 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm2
252 ; SSE4-NEXT: pmovsxdq %xmm2, %xmm0
253 ; SSE4-NEXT: movmskpd %xmm0, %eax
254 ; SSE4-NEXT: testb $1, %al
255 ; SSE4-NEXT: jne LBB3_1
256 ; SSE4-NEXT: ## %bb.2: ## %else
257 ; SSE4-NEXT: testb $2, %al
258 ; SSE4-NEXT: jne LBB3_3
259 ; SSE4-NEXT: LBB3_4: ## %else2
261 ; SSE4-NEXT: LBB3_1: ## %cond.store
262 ; SSE4-NEXT: movss %xmm1, (%rdi)
263 ; SSE4-NEXT: testb $2, %al
264 ; SSE4-NEXT: je LBB3_4
265 ; SSE4-NEXT: LBB3_3: ## %cond.store1
266 ; SSE4-NEXT: extractps $1, %xmm1, 4(%rdi)
269 ; AVX1OR2-LABEL: store_v2f32_v2i32:
271 ; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2
272 ; AVX1OR2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
273 ; AVX1OR2-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero
274 ; AVX1OR2-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi)
277 ; AVX512F-LABEL: store_v2f32_v2i32:
279 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
280 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
281 ; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0
282 ; AVX512F-NEXT: kshiftlw $14, %k0, %k0
283 ; AVX512F-NEXT: kshiftrw $14, %k0, %k1
284 ; AVX512F-NEXT: vmovups %zmm1, (%rdi) {%k1}
285 ; AVX512F-NEXT: vzeroupper
288 ; AVX512VLDQ-LABEL: store_v2f32_v2i32:
289 ; AVX512VLDQ: ## %bb.0:
290 ; AVX512VLDQ-NEXT: vptestnmd %xmm0, %xmm0, %k0
291 ; AVX512VLDQ-NEXT: kshiftlb $6, %k0, %k0
292 ; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k1
293 ; AVX512VLDQ-NEXT: vmovups %xmm1, (%rdi) {%k1}
294 ; AVX512VLDQ-NEXT: retq
296 ; AVX512VLBW-LABEL: store_v2f32_v2i32:
297 ; AVX512VLBW: ## %bb.0:
298 ; AVX512VLBW-NEXT: vptestnmd %xmm0, %xmm0, %k0
299 ; AVX512VLBW-NEXT: kshiftlw $14, %k0, %k0
300 ; AVX512VLBW-NEXT: kshiftrw $14, %k0, %k1
301 ; AVX512VLBW-NEXT: vmovups %xmm1, (%rdi) {%k1}
302 ; AVX512VLBW-NEXT: retq
304 ; X86-AVX512-LABEL: store_v2f32_v2i32:
305 ; X86-AVX512: ## %bb.0:
306 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
307 ; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k0
308 ; X86-AVX512-NEXT: kshiftlb $6, %k0, %k0
309 ; X86-AVX512-NEXT: kshiftrb $6, %k0, %k1
310 ; X86-AVX512-NEXT: vmovups %xmm1, (%eax) {%k1}
311 ; X86-AVX512-NEXT: retl
312 %mask = icmp eq <2 x i32> %trigger, zeroinitializer
313 call void @llvm.masked.store.v2f32.p0(<2 x float> %val, ptr %addr, i32 4, <2 x i1> %mask)
317 define void @store_v4f32_v4i32(<4 x float> %x, ptr %ptr, <4 x float> %y, <4 x i32> %mask) {
318 ; SSE2-LABEL: store_v4f32_v4i32:
320 ; SSE2-NEXT: movmskps %xmm2, %eax
321 ; SSE2-NEXT: testb $1, %al
322 ; SSE2-NEXT: jne LBB4_1
323 ; SSE2-NEXT: ## %bb.2: ## %else
324 ; SSE2-NEXT: testb $2, %al
325 ; SSE2-NEXT: jne LBB4_3
326 ; SSE2-NEXT: LBB4_4: ## %else2
327 ; SSE2-NEXT: testb $4, %al
328 ; SSE2-NEXT: jne LBB4_5
329 ; SSE2-NEXT: LBB4_6: ## %else4
330 ; SSE2-NEXT: testb $8, %al
331 ; SSE2-NEXT: jne LBB4_7
332 ; SSE2-NEXT: LBB4_8: ## %else6
334 ; SSE2-NEXT: LBB4_1: ## %cond.store
335 ; SSE2-NEXT: movss %xmm0, (%rdi)
336 ; SSE2-NEXT: testb $2, %al
337 ; SSE2-NEXT: je LBB4_4
338 ; SSE2-NEXT: LBB4_3: ## %cond.store1
339 ; SSE2-NEXT: movaps %xmm0, %xmm1
340 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]
341 ; SSE2-NEXT: movss %xmm1, 4(%rdi)
342 ; SSE2-NEXT: testb $4, %al
343 ; SSE2-NEXT: je LBB4_6
344 ; SSE2-NEXT: LBB4_5: ## %cond.store3
345 ; SSE2-NEXT: movaps %xmm0, %xmm1
346 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1]
347 ; SSE2-NEXT: movss %xmm1, 8(%rdi)
348 ; SSE2-NEXT: testb $8, %al
349 ; SSE2-NEXT: je LBB4_8
350 ; SSE2-NEXT: LBB4_7: ## %cond.store5
351 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
352 ; SSE2-NEXT: movss %xmm0, 12(%rdi)
355 ; SSE4-LABEL: store_v4f32_v4i32:
357 ; SSE4-NEXT: movmskps %xmm2, %eax
358 ; SSE4-NEXT: testb $1, %al
359 ; SSE4-NEXT: jne LBB4_1
360 ; SSE4-NEXT: ## %bb.2: ## %else
361 ; SSE4-NEXT: testb $2, %al
362 ; SSE4-NEXT: jne LBB4_3
363 ; SSE4-NEXT: LBB4_4: ## %else2
364 ; SSE4-NEXT: testb $4, %al
365 ; SSE4-NEXT: jne LBB4_5
366 ; SSE4-NEXT: LBB4_6: ## %else4
367 ; SSE4-NEXT: testb $8, %al
368 ; SSE4-NEXT: jne LBB4_7
369 ; SSE4-NEXT: LBB4_8: ## %else6
371 ; SSE4-NEXT: LBB4_1: ## %cond.store
372 ; SSE4-NEXT: movss %xmm0, (%rdi)
373 ; SSE4-NEXT: testb $2, %al
374 ; SSE4-NEXT: je LBB4_4
375 ; SSE4-NEXT: LBB4_3: ## %cond.store1
376 ; SSE4-NEXT: extractps $1, %xmm0, 4(%rdi)
377 ; SSE4-NEXT: testb $4, %al
378 ; SSE4-NEXT: je LBB4_6
379 ; SSE4-NEXT: LBB4_5: ## %cond.store3
380 ; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)
381 ; SSE4-NEXT: testb $8, %al
382 ; SSE4-NEXT: je LBB4_8
383 ; SSE4-NEXT: LBB4_7: ## %cond.store5
384 ; SSE4-NEXT: extractps $3, %xmm0, 12(%rdi)
387 ; AVX1OR2-LABEL: store_v4f32_v4i32:
389 ; AVX1OR2-NEXT: vmaskmovps %xmm0, %xmm2, (%rdi)
392 ; AVX512F-LABEL: store_v4f32_v4i32:
394 ; AVX512F-NEXT: ## kill: def $xmm2 killed $xmm2 def $zmm2
395 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
396 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
397 ; AVX512F-NEXT: vpcmpgtd %zmm2, %zmm1, %k0
398 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
399 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
400 ; AVX512F-NEXT: vmovups %zmm0, (%rdi) {%k1}
401 ; AVX512F-NEXT: vzeroupper
404 ; AVX512VLDQ-LABEL: store_v4f32_v4i32:
405 ; AVX512VLDQ: ## %bb.0:
406 ; AVX512VLDQ-NEXT: vpmovd2m %xmm2, %k1
407 ; AVX512VLDQ-NEXT: vmovups %xmm0, (%rdi) {%k1}
408 ; AVX512VLDQ-NEXT: retq
410 ; AVX512VLBW-LABEL: store_v4f32_v4i32:
411 ; AVX512VLBW: ## %bb.0:
412 ; AVX512VLBW-NEXT: vpxor %xmm1, %xmm1, %xmm1
413 ; AVX512VLBW-NEXT: vpcmpgtd %xmm2, %xmm1, %k1
414 ; AVX512VLBW-NEXT: vmovups %xmm0, (%rdi) {%k1}
415 ; AVX512VLBW-NEXT: retq
417 ; X86-AVX512-LABEL: store_v4f32_v4i32:
418 ; X86-AVX512: ## %bb.0:
419 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
420 ; X86-AVX512-NEXT: vpmovd2m %xmm2, %k1
421 ; X86-AVX512-NEXT: vmovups %xmm0, (%eax) {%k1}
422 ; X86-AVX512-NEXT: retl
423 %bool_mask = icmp slt <4 x i32> %mask, zeroinitializer
424 call void @llvm.masked.store.v4f32.p0(<4 x float> %x, ptr %ptr, i32 1, <4 x i1> %bool_mask)
428 define void @store_v8f32_v8i32(<8 x float> %x, ptr %ptr, <8 x float> %y, <8 x i32> %mask) {
429 ; SSE2-LABEL: store_v8f32_v8i32:
431 ; SSE2-NEXT: packssdw %xmm5, %xmm4
432 ; SSE2-NEXT: packsswb %xmm4, %xmm4
433 ; SSE2-NEXT: pmovmskb %xmm4, %eax
434 ; SSE2-NEXT: testb $1, %al
435 ; SSE2-NEXT: jne LBB5_1
436 ; SSE2-NEXT: ## %bb.2: ## %else
437 ; SSE2-NEXT: testb $2, %al
438 ; SSE2-NEXT: jne LBB5_3
439 ; SSE2-NEXT: LBB5_4: ## %else2
440 ; SSE2-NEXT: testb $4, %al
441 ; SSE2-NEXT: jne LBB5_5
442 ; SSE2-NEXT: LBB5_6: ## %else4
443 ; SSE2-NEXT: testb $8, %al
444 ; SSE2-NEXT: jne LBB5_7
445 ; SSE2-NEXT: LBB5_8: ## %else6
446 ; SSE2-NEXT: testb $16, %al
447 ; SSE2-NEXT: jne LBB5_9
448 ; SSE2-NEXT: LBB5_10: ## %else8
449 ; SSE2-NEXT: testb $32, %al
450 ; SSE2-NEXT: jne LBB5_11
451 ; SSE2-NEXT: LBB5_12: ## %else10
452 ; SSE2-NEXT: testb $64, %al
453 ; SSE2-NEXT: jne LBB5_13
454 ; SSE2-NEXT: LBB5_14: ## %else12
455 ; SSE2-NEXT: testb $-128, %al
456 ; SSE2-NEXT: jne LBB5_15
457 ; SSE2-NEXT: LBB5_16: ## %else14
459 ; SSE2-NEXT: LBB5_1: ## %cond.store
460 ; SSE2-NEXT: movd %xmm0, (%rdi)
461 ; SSE2-NEXT: testb $2, %al
462 ; SSE2-NEXT: je LBB5_4
463 ; SSE2-NEXT: LBB5_3: ## %cond.store1
464 ; SSE2-NEXT: movdqa %xmm0, %xmm2
465 ; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[1,1],xmm0[1,1]
466 ; SSE2-NEXT: movss %xmm2, 4(%rdi)
467 ; SSE2-NEXT: testb $4, %al
468 ; SSE2-NEXT: je LBB5_6
469 ; SSE2-NEXT: LBB5_5: ## %cond.store3
470 ; SSE2-NEXT: movaps %xmm0, %xmm2
471 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]
472 ; SSE2-NEXT: movss %xmm2, 8(%rdi)
473 ; SSE2-NEXT: testb $8, %al
474 ; SSE2-NEXT: je LBB5_8
475 ; SSE2-NEXT: LBB5_7: ## %cond.store5
476 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
477 ; SSE2-NEXT: movss %xmm0, 12(%rdi)
478 ; SSE2-NEXT: testb $16, %al
479 ; SSE2-NEXT: je LBB5_10
480 ; SSE2-NEXT: LBB5_9: ## %cond.store7
481 ; SSE2-NEXT: movss %xmm1, 16(%rdi)
482 ; SSE2-NEXT: testb $32, %al
483 ; SSE2-NEXT: je LBB5_12
484 ; SSE2-NEXT: LBB5_11: ## %cond.store9
485 ; SSE2-NEXT: movaps %xmm1, %xmm0
486 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]
487 ; SSE2-NEXT: movss %xmm0, 20(%rdi)
488 ; SSE2-NEXT: testb $64, %al
489 ; SSE2-NEXT: je LBB5_14
490 ; SSE2-NEXT: LBB5_13: ## %cond.store11
491 ; SSE2-NEXT: movaps %xmm1, %xmm0
492 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
493 ; SSE2-NEXT: movss %xmm0, 24(%rdi)
494 ; SSE2-NEXT: testb $-128, %al
495 ; SSE2-NEXT: je LBB5_16
496 ; SSE2-NEXT: LBB5_15: ## %cond.store13
497 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]
498 ; SSE2-NEXT: movss %xmm1, 28(%rdi)
501 ; SSE4-LABEL: store_v8f32_v8i32:
503 ; SSE4-NEXT: packssdw %xmm5, %xmm4
504 ; SSE4-NEXT: packsswb %xmm4, %xmm4
505 ; SSE4-NEXT: pmovmskb %xmm4, %eax
506 ; SSE4-NEXT: testb $1, %al
507 ; SSE4-NEXT: jne LBB5_1
508 ; SSE4-NEXT: ## %bb.2: ## %else
509 ; SSE4-NEXT: testb $2, %al
510 ; SSE4-NEXT: jne LBB5_3
511 ; SSE4-NEXT: LBB5_4: ## %else2
512 ; SSE4-NEXT: testb $4, %al
513 ; SSE4-NEXT: jne LBB5_5
514 ; SSE4-NEXT: LBB5_6: ## %else4
515 ; SSE4-NEXT: testb $8, %al
516 ; SSE4-NEXT: jne LBB5_7
517 ; SSE4-NEXT: LBB5_8: ## %else6
518 ; SSE4-NEXT: testb $16, %al
519 ; SSE4-NEXT: jne LBB5_9
520 ; SSE4-NEXT: LBB5_10: ## %else8
521 ; SSE4-NEXT: testb $32, %al
522 ; SSE4-NEXT: jne LBB5_11
523 ; SSE4-NEXT: LBB5_12: ## %else10
524 ; SSE4-NEXT: testb $64, %al
525 ; SSE4-NEXT: jne LBB5_13
526 ; SSE4-NEXT: LBB5_14: ## %else12
527 ; SSE4-NEXT: testb $-128, %al
528 ; SSE4-NEXT: jne LBB5_15
529 ; SSE4-NEXT: LBB5_16: ## %else14
531 ; SSE4-NEXT: LBB5_1: ## %cond.store
532 ; SSE4-NEXT: movd %xmm0, (%rdi)
533 ; SSE4-NEXT: testb $2, %al
534 ; SSE4-NEXT: je LBB5_4
535 ; SSE4-NEXT: LBB5_3: ## %cond.store1
536 ; SSE4-NEXT: pextrd $1, %xmm0, 4(%rdi)
537 ; SSE4-NEXT: testb $4, %al
538 ; SSE4-NEXT: je LBB5_6
539 ; SSE4-NEXT: LBB5_5: ## %cond.store3
540 ; SSE4-NEXT: pextrd $2, %xmm0, 8(%rdi)
541 ; SSE4-NEXT: testb $8, %al
542 ; SSE4-NEXT: je LBB5_8
543 ; SSE4-NEXT: LBB5_7: ## %cond.store5
544 ; SSE4-NEXT: pextrd $3, %xmm0, 12(%rdi)
545 ; SSE4-NEXT: testb $16, %al
546 ; SSE4-NEXT: je LBB5_10
547 ; SSE4-NEXT: LBB5_9: ## %cond.store7
548 ; SSE4-NEXT: movss %xmm1, 16(%rdi)
549 ; SSE4-NEXT: testb $32, %al
550 ; SSE4-NEXT: je LBB5_12
551 ; SSE4-NEXT: LBB5_11: ## %cond.store9
552 ; SSE4-NEXT: extractps $1, %xmm1, 20(%rdi)
553 ; SSE4-NEXT: testb $64, %al
554 ; SSE4-NEXT: je LBB5_14
555 ; SSE4-NEXT: LBB5_13: ## %cond.store11
556 ; SSE4-NEXT: extractps $2, %xmm1, 24(%rdi)
557 ; SSE4-NEXT: testb $-128, %al
558 ; SSE4-NEXT: je LBB5_16
559 ; SSE4-NEXT: LBB5_15: ## %cond.store13
560 ; SSE4-NEXT: extractps $3, %xmm1, 28(%rdi)
563 ; AVX1OR2-LABEL: store_v8f32_v8i32:
565 ; AVX1OR2-NEXT: vmaskmovps %ymm0, %ymm2, (%rdi)
566 ; AVX1OR2-NEXT: vzeroupper
569 ; AVX512F-LABEL: store_v8f32_v8i32:
571 ; AVX512F-NEXT: ## kill: def $ymm2 killed $ymm2 def $zmm2
572 ; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0
573 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
574 ; AVX512F-NEXT: vpcmpgtd %zmm2, %zmm1, %k0
575 ; AVX512F-NEXT: kshiftlw $8, %k0, %k0
576 ; AVX512F-NEXT: kshiftrw $8, %k0, %k1
577 ; AVX512F-NEXT: vmovups %zmm0, (%rdi) {%k1}
578 ; AVX512F-NEXT: vzeroupper
581 ; AVX512VLDQ-LABEL: store_v8f32_v8i32:
582 ; AVX512VLDQ: ## %bb.0:
583 ; AVX512VLDQ-NEXT: vpmovd2m %ymm2, %k1
584 ; AVX512VLDQ-NEXT: vmovups %ymm0, (%rdi) {%k1}
585 ; AVX512VLDQ-NEXT: vzeroupper
586 ; AVX512VLDQ-NEXT: retq
588 ; AVX512VLBW-LABEL: store_v8f32_v8i32:
589 ; AVX512VLBW: ## %bb.0:
590 ; AVX512VLBW-NEXT: vpxor %xmm1, %xmm1, %xmm1
591 ; AVX512VLBW-NEXT: vpcmpgtd %ymm2, %ymm1, %k1
592 ; AVX512VLBW-NEXT: vmovups %ymm0, (%rdi) {%k1}
593 ; AVX512VLBW-NEXT: vzeroupper
594 ; AVX512VLBW-NEXT: retq
596 ; X86-AVX512-LABEL: store_v8f32_v8i32:
597 ; X86-AVX512: ## %bb.0:
598 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
599 ; X86-AVX512-NEXT: vpmovd2m %ymm2, %k1
600 ; X86-AVX512-NEXT: vmovups %ymm0, (%eax) {%k1}
601 ; X86-AVX512-NEXT: vzeroupper
602 ; X86-AVX512-NEXT: retl
603 %bool_mask = icmp slt <8 x i32> %mask, zeroinitializer
604 call void @llvm.masked.store.v8f32.p0(<8 x float> %x, ptr %ptr, i32 1, <8 x i1> %bool_mask)
608 define void @store_v16f32_v16i32(<16 x float> %x, ptr %ptr, <16 x float> %y, <16 x i32> %mask) {
609 ; SSE2-LABEL: store_v16f32_v16i32:
611 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm4
612 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm5
613 ; SSE2-NEXT: packssdw {{[0-9]+}}(%rsp), %xmm5
614 ; SSE2-NEXT: packssdw {{[0-9]+}}(%rsp), %xmm4
615 ; SSE2-NEXT: packsswb %xmm5, %xmm4
616 ; SSE2-NEXT: pmovmskb %xmm4, %eax
617 ; SSE2-NEXT: testb $1, %al
618 ; SSE2-NEXT: jne LBB6_1
619 ; SSE2-NEXT: ## %bb.2: ## %else
620 ; SSE2-NEXT: testb $2, %al
621 ; SSE2-NEXT: jne LBB6_3
622 ; SSE2-NEXT: LBB6_4: ## %else2
623 ; SSE2-NEXT: testb $4, %al
624 ; SSE2-NEXT: jne LBB6_5
625 ; SSE2-NEXT: LBB6_6: ## %else4
626 ; SSE2-NEXT: testb $8, %al
627 ; SSE2-NEXT: jne LBB6_7
628 ; SSE2-NEXT: LBB6_8: ## %else6
629 ; SSE2-NEXT: testb $16, %al
630 ; SSE2-NEXT: jne LBB6_9
631 ; SSE2-NEXT: LBB6_10: ## %else8
632 ; SSE2-NEXT: testb $32, %al
633 ; SSE2-NEXT: jne LBB6_11
634 ; SSE2-NEXT: LBB6_12: ## %else10
635 ; SSE2-NEXT: testb $64, %al
636 ; SSE2-NEXT: jne LBB6_13
637 ; SSE2-NEXT: LBB6_14: ## %else12
638 ; SSE2-NEXT: testb %al, %al
639 ; SSE2-NEXT: js LBB6_15
640 ; SSE2-NEXT: LBB6_16: ## %else14
641 ; SSE2-NEXT: testl $256, %eax ## imm = 0x100
642 ; SSE2-NEXT: jne LBB6_17
643 ; SSE2-NEXT: LBB6_18: ## %else16
644 ; SSE2-NEXT: testl $512, %eax ## imm = 0x200
645 ; SSE2-NEXT: jne LBB6_19
646 ; SSE2-NEXT: LBB6_20: ## %else18
647 ; SSE2-NEXT: testl $1024, %eax ## imm = 0x400
648 ; SSE2-NEXT: jne LBB6_21
649 ; SSE2-NEXT: LBB6_22: ## %else20
650 ; SSE2-NEXT: testl $2048, %eax ## imm = 0x800
651 ; SSE2-NEXT: jne LBB6_23
652 ; SSE2-NEXT: LBB6_24: ## %else22
653 ; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000
654 ; SSE2-NEXT: jne LBB6_25
655 ; SSE2-NEXT: LBB6_26: ## %else24
656 ; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000
657 ; SSE2-NEXT: jne LBB6_27
658 ; SSE2-NEXT: LBB6_28: ## %else26
659 ; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
660 ; SSE2-NEXT: jne LBB6_29
661 ; SSE2-NEXT: LBB6_30: ## %else28
662 ; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
663 ; SSE2-NEXT: jne LBB6_31
664 ; SSE2-NEXT: LBB6_32: ## %else30
666 ; SSE2-NEXT: LBB6_1: ## %cond.store
667 ; SSE2-NEXT: movss %xmm0, (%rdi)
668 ; SSE2-NEXT: testb $2, %al
669 ; SSE2-NEXT: je LBB6_4
670 ; SSE2-NEXT: LBB6_3: ## %cond.store1
671 ; SSE2-NEXT: movaps %xmm0, %xmm4
672 ; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,1],xmm0[1,1]
673 ; SSE2-NEXT: movss %xmm4, 4(%rdi)
674 ; SSE2-NEXT: testb $4, %al
675 ; SSE2-NEXT: je LBB6_6
676 ; SSE2-NEXT: LBB6_5: ## %cond.store3
677 ; SSE2-NEXT: movaps %xmm0, %xmm4
678 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1]
679 ; SSE2-NEXT: movss %xmm4, 8(%rdi)
680 ; SSE2-NEXT: testb $8, %al
681 ; SSE2-NEXT: je LBB6_8
682 ; SSE2-NEXT: LBB6_7: ## %cond.store5
683 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
684 ; SSE2-NEXT: movss %xmm0, 12(%rdi)
685 ; SSE2-NEXT: testb $16, %al
686 ; SSE2-NEXT: je LBB6_10
687 ; SSE2-NEXT: LBB6_9: ## %cond.store7
688 ; SSE2-NEXT: movss %xmm1, 16(%rdi)
689 ; SSE2-NEXT: testb $32, %al
690 ; SSE2-NEXT: je LBB6_12
691 ; SSE2-NEXT: LBB6_11: ## %cond.store9
692 ; SSE2-NEXT: movaps %xmm1, %xmm0
693 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]
694 ; SSE2-NEXT: movss %xmm0, 20(%rdi)
695 ; SSE2-NEXT: testb $64, %al
696 ; SSE2-NEXT: je LBB6_14
697 ; SSE2-NEXT: LBB6_13: ## %cond.store11
698 ; SSE2-NEXT: movaps %xmm1, %xmm0
699 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
700 ; SSE2-NEXT: movss %xmm0, 24(%rdi)
701 ; SSE2-NEXT: testb %al, %al
702 ; SSE2-NEXT: jns LBB6_16
703 ; SSE2-NEXT: LBB6_15: ## %cond.store13
704 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]
705 ; SSE2-NEXT: movss %xmm1, 28(%rdi)
706 ; SSE2-NEXT: testl $256, %eax ## imm = 0x100
707 ; SSE2-NEXT: je LBB6_18
708 ; SSE2-NEXT: LBB6_17: ## %cond.store15
709 ; SSE2-NEXT: movss %xmm2, 32(%rdi)
710 ; SSE2-NEXT: testl $512, %eax ## imm = 0x200
711 ; SSE2-NEXT: je LBB6_20
712 ; SSE2-NEXT: LBB6_19: ## %cond.store17
713 ; SSE2-NEXT: movaps %xmm2, %xmm0
714 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm2[1,1]
715 ; SSE2-NEXT: movss %xmm0, 36(%rdi)
716 ; SSE2-NEXT: testl $1024, %eax ## imm = 0x400
717 ; SSE2-NEXT: je LBB6_22
718 ; SSE2-NEXT: LBB6_21: ## %cond.store19
719 ; SSE2-NEXT: movaps %xmm2, %xmm0
720 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm2[1]
721 ; SSE2-NEXT: movss %xmm0, 40(%rdi)
722 ; SSE2-NEXT: testl $2048, %eax ## imm = 0x800
723 ; SSE2-NEXT: je LBB6_24
724 ; SSE2-NEXT: LBB6_23: ## %cond.store21
725 ; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[3,3,3,3]
726 ; SSE2-NEXT: movss %xmm2, 44(%rdi)
727 ; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000
728 ; SSE2-NEXT: je LBB6_26
729 ; SSE2-NEXT: LBB6_25: ## %cond.store23
730 ; SSE2-NEXT: movss %xmm3, 48(%rdi)
731 ; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000
732 ; SSE2-NEXT: je LBB6_28
733 ; SSE2-NEXT: LBB6_27: ## %cond.store25
734 ; SSE2-NEXT: movaps %xmm3, %xmm0
735 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm3[1,1]
736 ; SSE2-NEXT: movss %xmm0, 52(%rdi)
737 ; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
738 ; SSE2-NEXT: je LBB6_30
739 ; SSE2-NEXT: LBB6_29: ## %cond.store27
740 ; SSE2-NEXT: movaps %xmm3, %xmm0
741 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm3[1]
742 ; SSE2-NEXT: movss %xmm0, 56(%rdi)
743 ; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
744 ; SSE2-NEXT: je LBB6_32
745 ; SSE2-NEXT: LBB6_31: ## %cond.store29
746 ; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3,3,3]
747 ; SSE2-NEXT: movss %xmm3, 60(%rdi)
750 ; SSE4-LABEL: store_v16f32_v16i32:
752 ; SSE4-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm4
753 ; SSE4-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm5
754 ; SSE4-NEXT: packssdw {{[0-9]+}}(%rsp), %xmm5
755 ; SSE4-NEXT: packssdw {{[0-9]+}}(%rsp), %xmm4
756 ; SSE4-NEXT: packsswb %xmm5, %xmm4
757 ; SSE4-NEXT: pmovmskb %xmm4, %eax
758 ; SSE4-NEXT: testb $1, %al
759 ; SSE4-NEXT: jne LBB6_1
760 ; SSE4-NEXT: ## %bb.2: ## %else
761 ; SSE4-NEXT: testb $2, %al
762 ; SSE4-NEXT: jne LBB6_3
763 ; SSE4-NEXT: LBB6_4: ## %else2
764 ; SSE4-NEXT: testb $4, %al
765 ; SSE4-NEXT: jne LBB6_5
766 ; SSE4-NEXT: LBB6_6: ## %else4
767 ; SSE4-NEXT: testb $8, %al
768 ; SSE4-NEXT: jne LBB6_7
769 ; SSE4-NEXT: LBB6_8: ## %else6
770 ; SSE4-NEXT: testb $16, %al
771 ; SSE4-NEXT: jne LBB6_9
772 ; SSE4-NEXT: LBB6_10: ## %else8
773 ; SSE4-NEXT: testb $32, %al
774 ; SSE4-NEXT: jne LBB6_11
775 ; SSE4-NEXT: LBB6_12: ## %else10
776 ; SSE4-NEXT: testb $64, %al
777 ; SSE4-NEXT: jne LBB6_13
778 ; SSE4-NEXT: LBB6_14: ## %else12
779 ; SSE4-NEXT: testb %al, %al
780 ; SSE4-NEXT: js LBB6_15
781 ; SSE4-NEXT: LBB6_16: ## %else14
782 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
783 ; SSE4-NEXT: jne LBB6_17
784 ; SSE4-NEXT: LBB6_18: ## %else16
785 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
786 ; SSE4-NEXT: jne LBB6_19
787 ; SSE4-NEXT: LBB6_20: ## %else18
788 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
789 ; SSE4-NEXT: jne LBB6_21
790 ; SSE4-NEXT: LBB6_22: ## %else20
791 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
792 ; SSE4-NEXT: jne LBB6_23
793 ; SSE4-NEXT: LBB6_24: ## %else22
794 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
795 ; SSE4-NEXT: jne LBB6_25
796 ; SSE4-NEXT: LBB6_26: ## %else24
797 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
798 ; SSE4-NEXT: jne LBB6_27
799 ; SSE4-NEXT: LBB6_28: ## %else26
800 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
801 ; SSE4-NEXT: jne LBB6_29
802 ; SSE4-NEXT: LBB6_30: ## %else28
803 ; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
804 ; SSE4-NEXT: jne LBB6_31
805 ; SSE4-NEXT: LBB6_32: ## %else30
807 ; SSE4-NEXT: LBB6_1: ## %cond.store
808 ; SSE4-NEXT: movss %xmm0, (%rdi)
809 ; SSE4-NEXT: testb $2, %al
810 ; SSE4-NEXT: je LBB6_4
811 ; SSE4-NEXT: LBB6_3: ## %cond.store1
812 ; SSE4-NEXT: extractps $1, %xmm0, 4(%rdi)
813 ; SSE4-NEXT: testb $4, %al
814 ; SSE4-NEXT: je LBB6_6
815 ; SSE4-NEXT: LBB6_5: ## %cond.store3
816 ; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)
817 ; SSE4-NEXT: testb $8, %al
818 ; SSE4-NEXT: je LBB6_8
819 ; SSE4-NEXT: LBB6_7: ## %cond.store5
820 ; SSE4-NEXT: extractps $3, %xmm0, 12(%rdi)
821 ; SSE4-NEXT: testb $16, %al
822 ; SSE4-NEXT: je LBB6_10
823 ; SSE4-NEXT: LBB6_9: ## %cond.store7
824 ; SSE4-NEXT: movss %xmm1, 16(%rdi)
825 ; SSE4-NEXT: testb $32, %al
826 ; SSE4-NEXT: je LBB6_12
827 ; SSE4-NEXT: LBB6_11: ## %cond.store9
828 ; SSE4-NEXT: extractps $1, %xmm1, 20(%rdi)
829 ; SSE4-NEXT: testb $64, %al
830 ; SSE4-NEXT: je LBB6_14
831 ; SSE4-NEXT: LBB6_13: ## %cond.store11
832 ; SSE4-NEXT: extractps $2, %xmm1, 24(%rdi)
833 ; SSE4-NEXT: testb %al, %al
834 ; SSE4-NEXT: jns LBB6_16
835 ; SSE4-NEXT: LBB6_15: ## %cond.store13
836 ; SSE4-NEXT: extractps $3, %xmm1, 28(%rdi)
837 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
838 ; SSE4-NEXT: je LBB6_18
839 ; SSE4-NEXT: LBB6_17: ## %cond.store15
840 ; SSE4-NEXT: movss %xmm2, 32(%rdi)
841 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
842 ; SSE4-NEXT: je LBB6_20
843 ; SSE4-NEXT: LBB6_19: ## %cond.store17
844 ; SSE4-NEXT: extractps $1, %xmm2, 36(%rdi)
845 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
846 ; SSE4-NEXT: je LBB6_22
847 ; SSE4-NEXT: LBB6_21: ## %cond.store19
848 ; SSE4-NEXT: extractps $2, %xmm2, 40(%rdi)
849 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
850 ; SSE4-NEXT: je LBB6_24
851 ; SSE4-NEXT: LBB6_23: ## %cond.store21
852 ; SSE4-NEXT: extractps $3, %xmm2, 44(%rdi)
853 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
854 ; SSE4-NEXT: je LBB6_26
855 ; SSE4-NEXT: LBB6_25: ## %cond.store23
856 ; SSE4-NEXT: movss %xmm3, 48(%rdi)
857 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
858 ; SSE4-NEXT: je LBB6_28
859 ; SSE4-NEXT: LBB6_27: ## %cond.store25
860 ; SSE4-NEXT: extractps $1, %xmm3, 52(%rdi)
861 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
862 ; SSE4-NEXT: je LBB6_30
863 ; SSE4-NEXT: LBB6_29: ## %cond.store27
864 ; SSE4-NEXT: extractps $2, %xmm3, 56(%rdi)
865 ; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
866 ; SSE4-NEXT: je LBB6_32
867 ; SSE4-NEXT: LBB6_31: ## %cond.store29
868 ; SSE4-NEXT: extractps $3, %xmm3, 60(%rdi)
871 ; AVX1OR2-LABEL: store_v16f32_v16i32:
873 ; AVX1OR2-NEXT: vmaskmovps %ymm1, %ymm5, 32(%rdi)
874 ; AVX1OR2-NEXT: vmaskmovps %ymm0, %ymm4, (%rdi)
875 ; AVX1OR2-NEXT: vzeroupper
878 ; AVX512F-LABEL: store_v16f32_v16i32:
880 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
881 ; AVX512F-NEXT: vpcmpgtd %zmm2, %zmm1, %k1
882 ; AVX512F-NEXT: vmovups %zmm0, (%rdi) {%k1}
883 ; AVX512F-NEXT: vzeroupper
886 ; AVX512VLDQ-LABEL: store_v16f32_v16i32:
887 ; AVX512VLDQ: ## %bb.0:
888 ; AVX512VLDQ-NEXT: vpmovd2m %zmm2, %k1
889 ; AVX512VLDQ-NEXT: vmovups %zmm0, (%rdi) {%k1}
890 ; AVX512VLDQ-NEXT: vzeroupper
891 ; AVX512VLDQ-NEXT: retq
893 ; AVX512VLBW-LABEL: store_v16f32_v16i32:
894 ; AVX512VLBW: ## %bb.0:
895 ; AVX512VLBW-NEXT: vpxor %xmm1, %xmm1, %xmm1
896 ; AVX512VLBW-NEXT: vpcmpgtd %zmm2, %zmm1, %k1
897 ; AVX512VLBW-NEXT: vmovups %zmm0, (%rdi) {%k1}
898 ; AVX512VLBW-NEXT: vzeroupper
899 ; AVX512VLBW-NEXT: retq
901 ; X86-AVX512-LABEL: store_v16f32_v16i32:
902 ; X86-AVX512: ## %bb.0:
903 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
904 ; X86-AVX512-NEXT: vpmovd2m %zmm2, %k1
905 ; X86-AVX512-NEXT: vmovups %zmm0, (%eax) {%k1}
906 ; X86-AVX512-NEXT: vzeroupper
907 ; X86-AVX512-NEXT: retl
908 %bool_mask = icmp slt <16 x i32> %mask, zeroinitializer
909 call void @llvm.masked.store.v16f32.p0(<16 x float> %x, ptr %ptr, i32 1, <16 x i1> %bool_mask)
917 define void @store_v2i64_v2i64(<2 x i64> %trigger, ptr %addr, <2 x i64> %val) {
918 ; SSE2-LABEL: store_v2i64_v2i64:
920 ; SSE2-NEXT: movmskpd %xmm0, %eax
921 ; SSE2-NEXT: testb $1, %al
922 ; SSE2-NEXT: jne LBB7_1
923 ; SSE2-NEXT: ## %bb.2: ## %else
924 ; SSE2-NEXT: testb $2, %al
925 ; SSE2-NEXT: jne LBB7_3
926 ; SSE2-NEXT: LBB7_4: ## %else2
928 ; SSE2-NEXT: LBB7_1: ## %cond.store
929 ; SSE2-NEXT: movq %xmm1, (%rdi)
930 ; SSE2-NEXT: testb $2, %al
931 ; SSE2-NEXT: je LBB7_4
932 ; SSE2-NEXT: LBB7_3: ## %cond.store1
933 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
934 ; SSE2-NEXT: movq %xmm0, 8(%rdi)
937 ; SSE4-LABEL: store_v2i64_v2i64:
939 ; SSE4-NEXT: movmskpd %xmm0, %eax
940 ; SSE4-NEXT: testb $1, %al
941 ; SSE4-NEXT: jne LBB7_1
942 ; SSE4-NEXT: ## %bb.2: ## %else
943 ; SSE4-NEXT: testb $2, %al
944 ; SSE4-NEXT: jne LBB7_3
945 ; SSE4-NEXT: LBB7_4: ## %else2
947 ; SSE4-NEXT: LBB7_1: ## %cond.store
948 ; SSE4-NEXT: movq %xmm1, (%rdi)
949 ; SSE4-NEXT: testb $2, %al
950 ; SSE4-NEXT: je LBB7_4
951 ; SSE4-NEXT: LBB7_3: ## %cond.store1
952 ; SSE4-NEXT: pextrq $1, %xmm1, 8(%rdi)
955 ; AVX1-LABEL: store_v2i64_v2i64:
957 ; AVX1-NEXT: vmaskmovpd %xmm1, %xmm0, (%rdi)
960 ; AVX2-LABEL: store_v2i64_v2i64:
962 ; AVX2-NEXT: vpmaskmovq %xmm1, %xmm0, (%rdi)
965 ; AVX512F-LABEL: store_v2i64_v2i64:
967 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
968 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
969 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
970 ; AVX512F-NEXT: vpcmpgtq %zmm0, %zmm2, %k0
971 ; AVX512F-NEXT: kshiftlw $14, %k0, %k0
972 ; AVX512F-NEXT: kshiftrw $14, %k0, %k1
973 ; AVX512F-NEXT: vmovdqu64 %zmm1, (%rdi) {%k1}
974 ; AVX512F-NEXT: vzeroupper
977 ; AVX512VLDQ-LABEL: store_v2i64_v2i64:
978 ; AVX512VLDQ: ## %bb.0:
979 ; AVX512VLDQ-NEXT: vpmovq2m %xmm0, %k1
980 ; AVX512VLDQ-NEXT: vmovdqu64 %xmm1, (%rdi) {%k1}
981 ; AVX512VLDQ-NEXT: retq
983 ; AVX512VLBW-LABEL: store_v2i64_v2i64:
984 ; AVX512VLBW: ## %bb.0:
985 ; AVX512VLBW-NEXT: vpxor %xmm2, %xmm2, %xmm2
986 ; AVX512VLBW-NEXT: vpcmpgtq %xmm0, %xmm2, %k1
987 ; AVX512VLBW-NEXT: vmovdqu64 %xmm1, (%rdi) {%k1}
988 ; AVX512VLBW-NEXT: retq
990 ; X86-AVX512-LABEL: store_v2i64_v2i64:
991 ; X86-AVX512: ## %bb.0:
992 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
993 ; X86-AVX512-NEXT: vpmovq2m %xmm0, %k1
994 ; X86-AVX512-NEXT: vmovdqu64 %xmm1, (%eax) {%k1}
995 ; X86-AVX512-NEXT: retl
996 %mask = icmp slt <2 x i64> %trigger, zeroinitializer
997 call void @llvm.masked.store.v2i64.p0(<2 x i64> %val, ptr %addr, i32 4, <2 x i1> %mask)
1001 define void @store_v4i64_v4i64(<4 x i64> %trigger, ptr %addr, <4 x i64> %val) {
1002 ; SSE2-LABEL: store_v4i64_v4i64:
1004 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3],xmm1[1,3]
1005 ; SSE2-NEXT: movmskps %xmm0, %eax
1006 ; SSE2-NEXT: testb $1, %al
1007 ; SSE2-NEXT: jne LBB8_1
1008 ; SSE2-NEXT: ## %bb.2: ## %else
1009 ; SSE2-NEXT: testb $2, %al
1010 ; SSE2-NEXT: jne LBB8_3
1011 ; SSE2-NEXT: LBB8_4: ## %else2
1012 ; SSE2-NEXT: testb $4, %al
1013 ; SSE2-NEXT: jne LBB8_5
1014 ; SSE2-NEXT: LBB8_6: ## %else4
1015 ; SSE2-NEXT: testb $8, %al
1016 ; SSE2-NEXT: jne LBB8_7
1017 ; SSE2-NEXT: LBB8_8: ## %else6
1019 ; SSE2-NEXT: LBB8_1: ## %cond.store
1020 ; SSE2-NEXT: movq %xmm2, (%rdi)
1021 ; SSE2-NEXT: testb $2, %al
1022 ; SSE2-NEXT: je LBB8_4
1023 ; SSE2-NEXT: LBB8_3: ## %cond.store1
1024 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
1025 ; SSE2-NEXT: movq %xmm0, 8(%rdi)
1026 ; SSE2-NEXT: testb $4, %al
1027 ; SSE2-NEXT: je LBB8_6
1028 ; SSE2-NEXT: LBB8_5: ## %cond.store3
1029 ; SSE2-NEXT: movq %xmm3, 16(%rdi)
1030 ; SSE2-NEXT: testb $8, %al
1031 ; SSE2-NEXT: je LBB8_8
1032 ; SSE2-NEXT: LBB8_7: ## %cond.store5
1033 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[2,3,2,3]
1034 ; SSE2-NEXT: movq %xmm0, 24(%rdi)
1037 ; SSE4-LABEL: store_v4i64_v4i64:
1039 ; SSE4-NEXT: packssdw %xmm1, %xmm0
1040 ; SSE4-NEXT: movmskps %xmm0, %eax
1041 ; SSE4-NEXT: testb $1, %al
1042 ; SSE4-NEXT: jne LBB8_1
1043 ; SSE4-NEXT: ## %bb.2: ## %else
1044 ; SSE4-NEXT: testb $2, %al
1045 ; SSE4-NEXT: jne LBB8_3
1046 ; SSE4-NEXT: LBB8_4: ## %else2
1047 ; SSE4-NEXT: testb $4, %al
1048 ; SSE4-NEXT: jne LBB8_5
1049 ; SSE4-NEXT: LBB8_6: ## %else4
1050 ; SSE4-NEXT: testb $8, %al
1051 ; SSE4-NEXT: jne LBB8_7
1052 ; SSE4-NEXT: LBB8_8: ## %else6
1054 ; SSE4-NEXT: LBB8_1: ## %cond.store
1055 ; SSE4-NEXT: movq %xmm2, (%rdi)
1056 ; SSE4-NEXT: testb $2, %al
1057 ; SSE4-NEXT: je LBB8_4
1058 ; SSE4-NEXT: LBB8_3: ## %cond.store1
1059 ; SSE4-NEXT: pextrq $1, %xmm2, 8(%rdi)
1060 ; SSE4-NEXT: testb $4, %al
1061 ; SSE4-NEXT: je LBB8_6
1062 ; SSE4-NEXT: LBB8_5: ## %cond.store3
1063 ; SSE4-NEXT: movq %xmm3, 16(%rdi)
1064 ; SSE4-NEXT: testb $8, %al
1065 ; SSE4-NEXT: je LBB8_8
1066 ; SSE4-NEXT: LBB8_7: ## %cond.store5
1067 ; SSE4-NEXT: pextrq $1, %xmm3, 24(%rdi)
1070 ; AVX1-LABEL: store_v4i64_v4i64:
1072 ; AVX1-NEXT: vmaskmovpd %ymm1, %ymm0, (%rdi)
1073 ; AVX1-NEXT: vzeroupper
1076 ; AVX2-LABEL: store_v4i64_v4i64:
1078 ; AVX2-NEXT: vpmaskmovq %ymm1, %ymm0, (%rdi)
1079 ; AVX2-NEXT: vzeroupper
1082 ; AVX512F-LABEL: store_v4i64_v4i64:
1083 ; AVX512F: ## %bb.0:
1084 ; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm1
1085 ; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0
1086 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
1087 ; AVX512F-NEXT: vpcmpgtq %zmm0, %zmm2, %k0
1088 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
1089 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
1090 ; AVX512F-NEXT: vmovdqu64 %zmm1, (%rdi) {%k1}
1091 ; AVX512F-NEXT: vzeroupper
1092 ; AVX512F-NEXT: retq
1094 ; AVX512VLDQ-LABEL: store_v4i64_v4i64:
1095 ; AVX512VLDQ: ## %bb.0:
1096 ; AVX512VLDQ-NEXT: vpmovq2m %ymm0, %k1
1097 ; AVX512VLDQ-NEXT: vmovdqu64 %ymm1, (%rdi) {%k1}
1098 ; AVX512VLDQ-NEXT: vzeroupper
1099 ; AVX512VLDQ-NEXT: retq
1101 ; AVX512VLBW-LABEL: store_v4i64_v4i64:
1102 ; AVX512VLBW: ## %bb.0:
1103 ; AVX512VLBW-NEXT: vpxor %xmm2, %xmm2, %xmm2
1104 ; AVX512VLBW-NEXT: vpcmpgtq %ymm0, %ymm2, %k1
1105 ; AVX512VLBW-NEXT: vmovdqu64 %ymm1, (%rdi) {%k1}
1106 ; AVX512VLBW-NEXT: vzeroupper
1107 ; AVX512VLBW-NEXT: retq
1109 ; X86-AVX512-LABEL: store_v4i64_v4i64:
1110 ; X86-AVX512: ## %bb.0:
1111 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1112 ; X86-AVX512-NEXT: vpmovq2m %ymm0, %k1
1113 ; X86-AVX512-NEXT: vmovdqu64 %ymm1, (%eax) {%k1}
1114 ; X86-AVX512-NEXT: vzeroupper
1115 ; X86-AVX512-NEXT: retl
1116 %mask = icmp slt <4 x i64> %trigger, zeroinitializer
1117 call void @llvm.masked.store.v4i64.p0(<4 x i64> %val, ptr %addr, i32 4, <4 x i1> %mask)
1125 define void @store_v1i32_v1i32(<1 x i32> %trigger, ptr %addr, <1 x i32> %val) {
1126 ; SSE-LABEL: store_v1i32_v1i32:
1128 ; SSE-NEXT: testl %edi, %edi
1129 ; SSE-NEXT: jne LBB9_2
1130 ; SSE-NEXT: ## %bb.1: ## %cond.store
1131 ; SSE-NEXT: movl %edx, (%rsi)
1132 ; SSE-NEXT: LBB9_2: ## %else
1135 ; AVX-LABEL: store_v1i32_v1i32:
1137 ; AVX-NEXT: testl %edi, %edi
1138 ; AVX-NEXT: jne LBB9_2
1139 ; AVX-NEXT: ## %bb.1: ## %cond.store
1140 ; AVX-NEXT: movl %edx, (%rsi)
1141 ; AVX-NEXT: LBB9_2: ## %else
1144 ; X86-AVX512-LABEL: store_v1i32_v1i32:
1145 ; X86-AVX512: ## %bb.0:
1146 ; X86-AVX512-NEXT: cmpl $0, {{[0-9]+}}(%esp)
1147 ; X86-AVX512-NEXT: jne LBB9_2
1148 ; X86-AVX512-NEXT: ## %bb.1: ## %cond.store
1149 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1150 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %ecx
1151 ; X86-AVX512-NEXT: movl %eax, (%ecx)
1152 ; X86-AVX512-NEXT: LBB9_2: ## %else
1153 ; X86-AVX512-NEXT: retl
1154 %mask = icmp eq <1 x i32> %trigger, zeroinitializer
1155 call void @llvm.masked.store.v1i32.p0(<1 x i32> %val, ptr %addr, i32 4, <1 x i1> %mask)
1159 define void @store_v2i32_v2i32(<2 x i32> %trigger, ptr %addr, <2 x i32> %val) {
1160 ; SSE2-LABEL: store_v2i32_v2i32:
1162 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
1163 ; SSE2-NEXT: pxor %xmm2, %xmm2
1164 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm2
1165 ; SSE2-NEXT: movmskpd %xmm2, %eax
1166 ; SSE2-NEXT: testb $1, %al
1167 ; SSE2-NEXT: jne LBB10_1
1168 ; SSE2-NEXT: ## %bb.2: ## %else
1169 ; SSE2-NEXT: testb $2, %al
1170 ; SSE2-NEXT: jne LBB10_3
1171 ; SSE2-NEXT: LBB10_4: ## %else2
1173 ; SSE2-NEXT: LBB10_1: ## %cond.store
1174 ; SSE2-NEXT: movd %xmm1, (%rdi)
1175 ; SSE2-NEXT: testb $2, %al
1176 ; SSE2-NEXT: je LBB10_4
1177 ; SSE2-NEXT: LBB10_3: ## %cond.store1
1178 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
1179 ; SSE2-NEXT: movd %xmm0, 4(%rdi)
1182 ; SSE4-LABEL: store_v2i32_v2i32:
1184 ; SSE4-NEXT: pxor %xmm2, %xmm2
1185 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm2
1186 ; SSE4-NEXT: pmovsxdq %xmm2, %xmm0
1187 ; SSE4-NEXT: movmskpd %xmm0, %eax
1188 ; SSE4-NEXT: testb $1, %al
1189 ; SSE4-NEXT: jne LBB10_1
1190 ; SSE4-NEXT: ## %bb.2: ## %else
1191 ; SSE4-NEXT: testb $2, %al
1192 ; SSE4-NEXT: jne LBB10_3
1193 ; SSE4-NEXT: LBB10_4: ## %else2
1195 ; SSE4-NEXT: LBB10_1: ## %cond.store
1196 ; SSE4-NEXT: movss %xmm1, (%rdi)
1197 ; SSE4-NEXT: testb $2, %al
1198 ; SSE4-NEXT: je LBB10_4
1199 ; SSE4-NEXT: LBB10_3: ## %cond.store1
1200 ; SSE4-NEXT: extractps $1, %xmm1, 4(%rdi)
1203 ; AVX1-LABEL: store_v2i32_v2i32:
1205 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
1206 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
1207 ; AVX1-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero
1208 ; AVX1-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi)
1211 ; AVX2-LABEL: store_v2i32_v2i32:
1213 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1214 ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
1215 ; AVX2-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero
1216 ; AVX2-NEXT: vpmaskmovd %xmm1, %xmm0, (%rdi)
1219 ; AVX512F-LABEL: store_v2i32_v2i32:
1220 ; AVX512F: ## %bb.0:
1221 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
1222 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
1223 ; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0
1224 ; AVX512F-NEXT: kshiftlw $14, %k0, %k0
1225 ; AVX512F-NEXT: kshiftrw $14, %k0, %k1
1226 ; AVX512F-NEXT: vmovdqu32 %zmm1, (%rdi) {%k1}
1227 ; AVX512F-NEXT: vzeroupper
1228 ; AVX512F-NEXT: retq
1230 ; AVX512VLDQ-LABEL: store_v2i32_v2i32:
1231 ; AVX512VLDQ: ## %bb.0:
1232 ; AVX512VLDQ-NEXT: vptestnmd %xmm0, %xmm0, %k0
1233 ; AVX512VLDQ-NEXT: kshiftlb $6, %k0, %k0
1234 ; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k1
1235 ; AVX512VLDQ-NEXT: vmovdqu32 %xmm1, (%rdi) {%k1}
1236 ; AVX512VLDQ-NEXT: retq
1238 ; AVX512VLBW-LABEL: store_v2i32_v2i32:
1239 ; AVX512VLBW: ## %bb.0:
1240 ; AVX512VLBW-NEXT: vptestnmd %xmm0, %xmm0, %k0
1241 ; AVX512VLBW-NEXT: kshiftlw $14, %k0, %k0
1242 ; AVX512VLBW-NEXT: kshiftrw $14, %k0, %k1
1243 ; AVX512VLBW-NEXT: vmovdqu32 %xmm1, (%rdi) {%k1}
1244 ; AVX512VLBW-NEXT: retq
1246 ; X86-AVX512-LABEL: store_v2i32_v2i32:
1247 ; X86-AVX512: ## %bb.0:
1248 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1249 ; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k0
1250 ; X86-AVX512-NEXT: kshiftlb $6, %k0, %k0
1251 ; X86-AVX512-NEXT: kshiftrb $6, %k0, %k1
1252 ; X86-AVX512-NEXT: vmovdqu32 %xmm1, (%eax) {%k1}
1253 ; X86-AVX512-NEXT: retl
1254 %mask = icmp eq <2 x i32> %trigger, zeroinitializer
1255 call void @llvm.masked.store.v2i32.p0(<2 x i32> %val, ptr %addr, i32 4, <2 x i1> %mask)
1259 define void @store_v4i32_v4i32(<4 x i32> %trigger, ptr %addr, <4 x i32> %val) {
1260 ; SSE2-LABEL: store_v4i32_v4i32:
1262 ; SSE2-NEXT: pxor %xmm2, %xmm2
1263 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm2
1264 ; SSE2-NEXT: movmskps %xmm2, %eax
1265 ; SSE2-NEXT: testb $1, %al
1266 ; SSE2-NEXT: jne LBB11_1
1267 ; SSE2-NEXT: ## %bb.2: ## %else
1268 ; SSE2-NEXT: testb $2, %al
1269 ; SSE2-NEXT: jne LBB11_3
1270 ; SSE2-NEXT: LBB11_4: ## %else2
1271 ; SSE2-NEXT: testb $4, %al
1272 ; SSE2-NEXT: jne LBB11_5
1273 ; SSE2-NEXT: LBB11_6: ## %else4
1274 ; SSE2-NEXT: testb $8, %al
1275 ; SSE2-NEXT: jne LBB11_7
1276 ; SSE2-NEXT: LBB11_8: ## %else6
1278 ; SSE2-NEXT: LBB11_1: ## %cond.store
1279 ; SSE2-NEXT: movd %xmm1, (%rdi)
1280 ; SSE2-NEXT: testb $2, %al
1281 ; SSE2-NEXT: je LBB11_4
1282 ; SSE2-NEXT: LBB11_3: ## %cond.store1
1283 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
1284 ; SSE2-NEXT: movd %xmm0, 4(%rdi)
1285 ; SSE2-NEXT: testb $4, %al
1286 ; SSE2-NEXT: je LBB11_6
1287 ; SSE2-NEXT: LBB11_5: ## %cond.store3
1288 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
1289 ; SSE2-NEXT: movd %xmm0, 8(%rdi)
1290 ; SSE2-NEXT: testb $8, %al
1291 ; SSE2-NEXT: je LBB11_8
1292 ; SSE2-NEXT: LBB11_7: ## %cond.store5
1293 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[3,3,3,3]
1294 ; SSE2-NEXT: movd %xmm0, 12(%rdi)
1297 ; SSE4-LABEL: store_v4i32_v4i32:
1299 ; SSE4-NEXT: pxor %xmm2, %xmm2
1300 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm2
1301 ; SSE4-NEXT: movmskps %xmm2, %eax
1302 ; SSE4-NEXT: testb $1, %al
1303 ; SSE4-NEXT: jne LBB11_1
1304 ; SSE4-NEXT: ## %bb.2: ## %else
1305 ; SSE4-NEXT: testb $2, %al
1306 ; SSE4-NEXT: jne LBB11_3
1307 ; SSE4-NEXT: LBB11_4: ## %else2
1308 ; SSE4-NEXT: testb $4, %al
1309 ; SSE4-NEXT: jne LBB11_5
1310 ; SSE4-NEXT: LBB11_6: ## %else4
1311 ; SSE4-NEXT: testb $8, %al
1312 ; SSE4-NEXT: jne LBB11_7
1313 ; SSE4-NEXT: LBB11_8: ## %else6
1315 ; SSE4-NEXT: LBB11_1: ## %cond.store
1316 ; SSE4-NEXT: movss %xmm1, (%rdi)
1317 ; SSE4-NEXT: testb $2, %al
1318 ; SSE4-NEXT: je LBB11_4
1319 ; SSE4-NEXT: LBB11_3: ## %cond.store1
1320 ; SSE4-NEXT: extractps $1, %xmm1, 4(%rdi)
1321 ; SSE4-NEXT: testb $4, %al
1322 ; SSE4-NEXT: je LBB11_6
1323 ; SSE4-NEXT: LBB11_5: ## %cond.store3
1324 ; SSE4-NEXT: extractps $2, %xmm1, 8(%rdi)
1325 ; SSE4-NEXT: testb $8, %al
1326 ; SSE4-NEXT: je LBB11_8
1327 ; SSE4-NEXT: LBB11_7: ## %cond.store5
1328 ; SSE4-NEXT: extractps $3, %xmm1, 12(%rdi)
1331 ; AVX1-LABEL: store_v4i32_v4i32:
1333 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
1334 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
1335 ; AVX1-NEXT: vmaskmovps %xmm1, %xmm0, (%rdi)
1338 ; AVX2-LABEL: store_v4i32_v4i32:
1340 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1341 ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
1342 ; AVX2-NEXT: vpmaskmovd %xmm1, %xmm0, (%rdi)
1345 ; AVX512F-LABEL: store_v4i32_v4i32:
1346 ; AVX512F: ## %bb.0:
1347 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
1348 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
1349 ; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0
1350 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
1351 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
1352 ; AVX512F-NEXT: vmovdqu32 %zmm1, (%rdi) {%k1}
1353 ; AVX512F-NEXT: vzeroupper
1354 ; AVX512F-NEXT: retq
1356 ; AVX512VL-LABEL: store_v4i32_v4i32:
1357 ; AVX512VL: ## %bb.0:
1358 ; AVX512VL-NEXT: vptestnmd %xmm0, %xmm0, %k1
1359 ; AVX512VL-NEXT: vmovdqu32 %xmm1, (%rdi) {%k1}
1360 ; AVX512VL-NEXT: retq
1362 ; X86-AVX512-LABEL: store_v4i32_v4i32:
1363 ; X86-AVX512: ## %bb.0:
1364 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1365 ; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k1
1366 ; X86-AVX512-NEXT: vmovdqu32 %xmm1, (%eax) {%k1}
1367 ; X86-AVX512-NEXT: retl
1368 %mask = icmp eq <4 x i32> %trigger, zeroinitializer
1369 call void @llvm.masked.store.v4i32.p0(<4 x i32> %val, ptr %addr, i32 4, <4 x i1> %mask)
1373 define void @store_v8i32_v8i32(<8 x i32> %trigger, ptr %addr, <8 x i32> %val) {
1374 ; SSE2-LABEL: store_v8i32_v8i32:
1376 ; SSE2-NEXT: pxor %xmm4, %xmm4
1377 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm1
1378 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm0
1379 ; SSE2-NEXT: packssdw %xmm1, %xmm0
1380 ; SSE2-NEXT: packsswb %xmm0, %xmm0
1381 ; SSE2-NEXT: pmovmskb %xmm0, %eax
1382 ; SSE2-NEXT: testb $1, %al
1383 ; SSE2-NEXT: jne LBB12_1
1384 ; SSE2-NEXT: ## %bb.2: ## %else
1385 ; SSE2-NEXT: testb $2, %al
1386 ; SSE2-NEXT: jne LBB12_3
1387 ; SSE2-NEXT: LBB12_4: ## %else2
1388 ; SSE2-NEXT: testb $4, %al
1389 ; SSE2-NEXT: jne LBB12_5
1390 ; SSE2-NEXT: LBB12_6: ## %else4
1391 ; SSE2-NEXT: testb $8, %al
1392 ; SSE2-NEXT: jne LBB12_7
1393 ; SSE2-NEXT: LBB12_8: ## %else6
1394 ; SSE2-NEXT: testb $16, %al
1395 ; SSE2-NEXT: jne LBB12_9
1396 ; SSE2-NEXT: LBB12_10: ## %else8
1397 ; SSE2-NEXT: testb $32, %al
1398 ; SSE2-NEXT: jne LBB12_11
1399 ; SSE2-NEXT: LBB12_12: ## %else10
1400 ; SSE2-NEXT: testb $64, %al
1401 ; SSE2-NEXT: jne LBB12_13
1402 ; SSE2-NEXT: LBB12_14: ## %else12
1403 ; SSE2-NEXT: testb $-128, %al
1404 ; SSE2-NEXT: jne LBB12_15
1405 ; SSE2-NEXT: LBB12_16: ## %else14
1407 ; SSE2-NEXT: LBB12_1: ## %cond.store
1408 ; SSE2-NEXT: movd %xmm2, (%rdi)
1409 ; SSE2-NEXT: testb $2, %al
1410 ; SSE2-NEXT: je LBB12_4
1411 ; SSE2-NEXT: LBB12_3: ## %cond.store1
1412 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
1413 ; SSE2-NEXT: movd %xmm0, 4(%rdi)
1414 ; SSE2-NEXT: testb $4, %al
1415 ; SSE2-NEXT: je LBB12_6
1416 ; SSE2-NEXT: LBB12_5: ## %cond.store3
1417 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
1418 ; SSE2-NEXT: movd %xmm0, 8(%rdi)
1419 ; SSE2-NEXT: testb $8, %al
1420 ; SSE2-NEXT: je LBB12_8
1421 ; SSE2-NEXT: LBB12_7: ## %cond.store5
1422 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]
1423 ; SSE2-NEXT: movd %xmm0, 12(%rdi)
1424 ; SSE2-NEXT: testb $16, %al
1425 ; SSE2-NEXT: je LBB12_10
1426 ; SSE2-NEXT: LBB12_9: ## %cond.store7
1427 ; SSE2-NEXT: movd %xmm3, 16(%rdi)
1428 ; SSE2-NEXT: testb $32, %al
1429 ; SSE2-NEXT: je LBB12_12
1430 ; SSE2-NEXT: LBB12_11: ## %cond.store9
1431 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,1,1]
1432 ; SSE2-NEXT: movd %xmm0, 20(%rdi)
1433 ; SSE2-NEXT: testb $64, %al
1434 ; SSE2-NEXT: je LBB12_14
1435 ; SSE2-NEXT: LBB12_13: ## %cond.store11
1436 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[2,3,2,3]
1437 ; SSE2-NEXT: movd %xmm0, 24(%rdi)
1438 ; SSE2-NEXT: testb $-128, %al
1439 ; SSE2-NEXT: je LBB12_16
1440 ; SSE2-NEXT: LBB12_15: ## %cond.store13
1441 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[3,3,3,3]
1442 ; SSE2-NEXT: movd %xmm0, 28(%rdi)
1445 ; SSE4-LABEL: store_v8i32_v8i32:
1447 ; SSE4-NEXT: pxor %xmm4, %xmm4
1448 ; SSE4-NEXT: pcmpeqd %xmm4, %xmm1
1449 ; SSE4-NEXT: pcmpeqd %xmm4, %xmm0
1450 ; SSE4-NEXT: packssdw %xmm1, %xmm0
1451 ; SSE4-NEXT: packsswb %xmm0, %xmm0
1452 ; SSE4-NEXT: pmovmskb %xmm0, %eax
1453 ; SSE4-NEXT: testb $1, %al
1454 ; SSE4-NEXT: jne LBB12_1
1455 ; SSE4-NEXT: ## %bb.2: ## %else
1456 ; SSE4-NEXT: testb $2, %al
1457 ; SSE4-NEXT: jne LBB12_3
1458 ; SSE4-NEXT: LBB12_4: ## %else2
1459 ; SSE4-NEXT: testb $4, %al
1460 ; SSE4-NEXT: jne LBB12_5
1461 ; SSE4-NEXT: LBB12_6: ## %else4
1462 ; SSE4-NEXT: testb $8, %al
1463 ; SSE4-NEXT: jne LBB12_7
1464 ; SSE4-NEXT: LBB12_8: ## %else6
1465 ; SSE4-NEXT: testb $16, %al
1466 ; SSE4-NEXT: jne LBB12_9
1467 ; SSE4-NEXT: LBB12_10: ## %else8
1468 ; SSE4-NEXT: testb $32, %al
1469 ; SSE4-NEXT: jne LBB12_11
1470 ; SSE4-NEXT: LBB12_12: ## %else10
1471 ; SSE4-NEXT: testb $64, %al
1472 ; SSE4-NEXT: jne LBB12_13
1473 ; SSE4-NEXT: LBB12_14: ## %else12
1474 ; SSE4-NEXT: testb $-128, %al
1475 ; SSE4-NEXT: jne LBB12_15
1476 ; SSE4-NEXT: LBB12_16: ## %else14
1478 ; SSE4-NEXT: LBB12_1: ## %cond.store
1479 ; SSE4-NEXT: movss %xmm2, (%rdi)
1480 ; SSE4-NEXT: testb $2, %al
1481 ; SSE4-NEXT: je LBB12_4
1482 ; SSE4-NEXT: LBB12_3: ## %cond.store1
1483 ; SSE4-NEXT: extractps $1, %xmm2, 4(%rdi)
1484 ; SSE4-NEXT: testb $4, %al
1485 ; SSE4-NEXT: je LBB12_6
1486 ; SSE4-NEXT: LBB12_5: ## %cond.store3
1487 ; SSE4-NEXT: extractps $2, %xmm2, 8(%rdi)
1488 ; SSE4-NEXT: testb $8, %al
1489 ; SSE4-NEXT: je LBB12_8
1490 ; SSE4-NEXT: LBB12_7: ## %cond.store5
1491 ; SSE4-NEXT: extractps $3, %xmm2, 12(%rdi)
1492 ; SSE4-NEXT: testb $16, %al
1493 ; SSE4-NEXT: je LBB12_10
1494 ; SSE4-NEXT: LBB12_9: ## %cond.store7
1495 ; SSE4-NEXT: movss %xmm3, 16(%rdi)
1496 ; SSE4-NEXT: testb $32, %al
1497 ; SSE4-NEXT: je LBB12_12
1498 ; SSE4-NEXT: LBB12_11: ## %cond.store9
1499 ; SSE4-NEXT: extractps $1, %xmm3, 20(%rdi)
1500 ; SSE4-NEXT: testb $64, %al
1501 ; SSE4-NEXT: je LBB12_14
1502 ; SSE4-NEXT: LBB12_13: ## %cond.store11
1503 ; SSE4-NEXT: extractps $2, %xmm3, 24(%rdi)
1504 ; SSE4-NEXT: testb $-128, %al
1505 ; SSE4-NEXT: je LBB12_16
1506 ; SSE4-NEXT: LBB12_15: ## %cond.store13
1507 ; SSE4-NEXT: extractps $3, %xmm3, 28(%rdi)
1510 ; AVX1-LABEL: store_v8i32_v8i32:
1512 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1513 ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
1514 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm2
1515 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0
1516 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1517 ; AVX1-NEXT: vmaskmovps %ymm1, %ymm0, (%rdi)
1518 ; AVX1-NEXT: vzeroupper
1521 ; AVX2-LABEL: store_v8i32_v8i32:
1523 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1524 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm0
1525 ; AVX2-NEXT: vpmaskmovd %ymm1, %ymm0, (%rdi)
1526 ; AVX2-NEXT: vzeroupper
1529 ; AVX512F-LABEL: store_v8i32_v8i32:
1530 ; AVX512F: ## %bb.0:
1531 ; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm1
1532 ; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0
1533 ; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0
1534 ; AVX512F-NEXT: kshiftlw $8, %k0, %k0
1535 ; AVX512F-NEXT: kshiftrw $8, %k0, %k1
1536 ; AVX512F-NEXT: vmovdqu32 %zmm1, (%rdi) {%k1}
1537 ; AVX512F-NEXT: vzeroupper
1538 ; AVX512F-NEXT: retq
1540 ; AVX512VL-LABEL: store_v8i32_v8i32:
1541 ; AVX512VL: ## %bb.0:
1542 ; AVX512VL-NEXT: vptestnmd %ymm0, %ymm0, %k1
1543 ; AVX512VL-NEXT: vmovdqu32 %ymm1, (%rdi) {%k1}
1544 ; AVX512VL-NEXT: vzeroupper
1545 ; AVX512VL-NEXT: retq
1547 ; X86-AVX512-LABEL: store_v8i32_v8i32:
1548 ; X86-AVX512: ## %bb.0:
1549 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1550 ; X86-AVX512-NEXT: vptestnmd %ymm0, %ymm0, %k1
1551 ; X86-AVX512-NEXT: vmovdqu32 %ymm1, (%eax) {%k1}
1552 ; X86-AVX512-NEXT: vzeroupper
1553 ; X86-AVX512-NEXT: retl
1554 %mask = icmp eq <8 x i32> %trigger, zeroinitializer
1555 call void @llvm.masked.store.v8i32.p0(<8 x i32> %val, ptr %addr, i32 4, <8 x i1> %mask)
1563 define void @store_v8i16_v8i16(<8 x i16> %trigger, ptr %addr, <8 x i16> %val) {
1564 ; SSE2-LABEL: store_v8i16_v8i16:
1566 ; SSE2-NEXT: pxor %xmm2, %xmm2
1567 ; SSE2-NEXT: pcmpeqw %xmm0, %xmm2
1568 ; SSE2-NEXT: packsswb %xmm2, %xmm2
1569 ; SSE2-NEXT: pmovmskb %xmm2, %eax
1570 ; SSE2-NEXT: testb $1, %al
1571 ; SSE2-NEXT: jne LBB13_1
1572 ; SSE2-NEXT: ## %bb.2: ## %else
1573 ; SSE2-NEXT: testb $2, %al
1574 ; SSE2-NEXT: jne LBB13_3
1575 ; SSE2-NEXT: LBB13_4: ## %else2
1576 ; SSE2-NEXT: testb $4, %al
1577 ; SSE2-NEXT: jne LBB13_5
1578 ; SSE2-NEXT: LBB13_6: ## %else4
1579 ; SSE2-NEXT: testb $8, %al
1580 ; SSE2-NEXT: jne LBB13_7
1581 ; SSE2-NEXT: LBB13_8: ## %else6
1582 ; SSE2-NEXT: testb $16, %al
1583 ; SSE2-NEXT: jne LBB13_9
1584 ; SSE2-NEXT: LBB13_10: ## %else8
1585 ; SSE2-NEXT: testb $32, %al
1586 ; SSE2-NEXT: jne LBB13_11
1587 ; SSE2-NEXT: LBB13_12: ## %else10
1588 ; SSE2-NEXT: testb $64, %al
1589 ; SSE2-NEXT: jne LBB13_13
1590 ; SSE2-NEXT: LBB13_14: ## %else12
1591 ; SSE2-NEXT: testb $-128, %al
1592 ; SSE2-NEXT: jne LBB13_15
1593 ; SSE2-NEXT: LBB13_16: ## %else14
1595 ; SSE2-NEXT: LBB13_1: ## %cond.store
1596 ; SSE2-NEXT: movd %xmm1, %ecx
1597 ; SSE2-NEXT: movw %cx, (%rdi)
1598 ; SSE2-NEXT: testb $2, %al
1599 ; SSE2-NEXT: je LBB13_4
1600 ; SSE2-NEXT: LBB13_3: ## %cond.store1
1601 ; SSE2-NEXT: pextrw $1, %xmm1, %ecx
1602 ; SSE2-NEXT: movw %cx, 2(%rdi)
1603 ; SSE2-NEXT: testb $4, %al
1604 ; SSE2-NEXT: je LBB13_6
1605 ; SSE2-NEXT: LBB13_5: ## %cond.store3
1606 ; SSE2-NEXT: pextrw $2, %xmm1, %ecx
1607 ; SSE2-NEXT: movw %cx, 4(%rdi)
1608 ; SSE2-NEXT: testb $8, %al
1609 ; SSE2-NEXT: je LBB13_8
1610 ; SSE2-NEXT: LBB13_7: ## %cond.store5
1611 ; SSE2-NEXT: pextrw $3, %xmm1, %ecx
1612 ; SSE2-NEXT: movw %cx, 6(%rdi)
1613 ; SSE2-NEXT: testb $16, %al
1614 ; SSE2-NEXT: je LBB13_10
1615 ; SSE2-NEXT: LBB13_9: ## %cond.store7
1616 ; SSE2-NEXT: pextrw $4, %xmm1, %ecx
1617 ; SSE2-NEXT: movw %cx, 8(%rdi)
1618 ; SSE2-NEXT: testb $32, %al
1619 ; SSE2-NEXT: je LBB13_12
1620 ; SSE2-NEXT: LBB13_11: ## %cond.store9
1621 ; SSE2-NEXT: pextrw $5, %xmm1, %ecx
1622 ; SSE2-NEXT: movw %cx, 10(%rdi)
1623 ; SSE2-NEXT: testb $64, %al
1624 ; SSE2-NEXT: je LBB13_14
1625 ; SSE2-NEXT: LBB13_13: ## %cond.store11
1626 ; SSE2-NEXT: pextrw $6, %xmm1, %ecx
1627 ; SSE2-NEXT: movw %cx, 12(%rdi)
1628 ; SSE2-NEXT: testb $-128, %al
1629 ; SSE2-NEXT: je LBB13_16
1630 ; SSE2-NEXT: LBB13_15: ## %cond.store13
1631 ; SSE2-NEXT: pextrw $7, %xmm1, %eax
1632 ; SSE2-NEXT: movw %ax, 14(%rdi)
1635 ; SSE4-LABEL: store_v8i16_v8i16:
1637 ; SSE4-NEXT: pxor %xmm2, %xmm2
1638 ; SSE4-NEXT: pcmpeqw %xmm0, %xmm2
1639 ; SSE4-NEXT: packsswb %xmm2, %xmm2
1640 ; SSE4-NEXT: pmovmskb %xmm2, %eax
1641 ; SSE4-NEXT: testb $1, %al
1642 ; SSE4-NEXT: jne LBB13_1
1643 ; SSE4-NEXT: ## %bb.2: ## %else
1644 ; SSE4-NEXT: testb $2, %al
1645 ; SSE4-NEXT: jne LBB13_3
1646 ; SSE4-NEXT: LBB13_4: ## %else2
1647 ; SSE4-NEXT: testb $4, %al
1648 ; SSE4-NEXT: jne LBB13_5
1649 ; SSE4-NEXT: LBB13_6: ## %else4
1650 ; SSE4-NEXT: testb $8, %al
1651 ; SSE4-NEXT: jne LBB13_7
1652 ; SSE4-NEXT: LBB13_8: ## %else6
1653 ; SSE4-NEXT: testb $16, %al
1654 ; SSE4-NEXT: jne LBB13_9
1655 ; SSE4-NEXT: LBB13_10: ## %else8
1656 ; SSE4-NEXT: testb $32, %al
1657 ; SSE4-NEXT: jne LBB13_11
1658 ; SSE4-NEXT: LBB13_12: ## %else10
1659 ; SSE4-NEXT: testb $64, %al
1660 ; SSE4-NEXT: jne LBB13_13
1661 ; SSE4-NEXT: LBB13_14: ## %else12
1662 ; SSE4-NEXT: testb $-128, %al
1663 ; SSE4-NEXT: jne LBB13_15
1664 ; SSE4-NEXT: LBB13_16: ## %else14
1666 ; SSE4-NEXT: LBB13_1: ## %cond.store
1667 ; SSE4-NEXT: pextrw $0, %xmm1, (%rdi)
1668 ; SSE4-NEXT: testb $2, %al
1669 ; SSE4-NEXT: je LBB13_4
1670 ; SSE4-NEXT: LBB13_3: ## %cond.store1
1671 ; SSE4-NEXT: pextrw $1, %xmm1, 2(%rdi)
1672 ; SSE4-NEXT: testb $4, %al
1673 ; SSE4-NEXT: je LBB13_6
1674 ; SSE4-NEXT: LBB13_5: ## %cond.store3
1675 ; SSE4-NEXT: pextrw $2, %xmm1, 4(%rdi)
1676 ; SSE4-NEXT: testb $8, %al
1677 ; SSE4-NEXT: je LBB13_8
1678 ; SSE4-NEXT: LBB13_7: ## %cond.store5
1679 ; SSE4-NEXT: pextrw $3, %xmm1, 6(%rdi)
1680 ; SSE4-NEXT: testb $16, %al
1681 ; SSE4-NEXT: je LBB13_10
1682 ; SSE4-NEXT: LBB13_9: ## %cond.store7
1683 ; SSE4-NEXT: pextrw $4, %xmm1, 8(%rdi)
1684 ; SSE4-NEXT: testb $32, %al
1685 ; SSE4-NEXT: je LBB13_12
1686 ; SSE4-NEXT: LBB13_11: ## %cond.store9
1687 ; SSE4-NEXT: pextrw $5, %xmm1, 10(%rdi)
1688 ; SSE4-NEXT: testb $64, %al
1689 ; SSE4-NEXT: je LBB13_14
1690 ; SSE4-NEXT: LBB13_13: ## %cond.store11
1691 ; SSE4-NEXT: pextrw $6, %xmm1, 12(%rdi)
1692 ; SSE4-NEXT: testb $-128, %al
1693 ; SSE4-NEXT: je LBB13_16
1694 ; SSE4-NEXT: LBB13_15: ## %cond.store13
1695 ; SSE4-NEXT: pextrw $7, %xmm1, 14(%rdi)
1698 ; AVX1OR2-LABEL: store_v8i16_v8i16:
1699 ; AVX1OR2: ## %bb.0:
1700 ; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1701 ; AVX1OR2-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0
1702 ; AVX1OR2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
1703 ; AVX1OR2-NEXT: vpmovmskb %xmm0, %eax
1704 ; AVX1OR2-NEXT: testb $1, %al
1705 ; AVX1OR2-NEXT: jne LBB13_1
1706 ; AVX1OR2-NEXT: ## %bb.2: ## %else
1707 ; AVX1OR2-NEXT: testb $2, %al
1708 ; AVX1OR2-NEXT: jne LBB13_3
1709 ; AVX1OR2-NEXT: LBB13_4: ## %else2
1710 ; AVX1OR2-NEXT: testb $4, %al
1711 ; AVX1OR2-NEXT: jne LBB13_5
1712 ; AVX1OR2-NEXT: LBB13_6: ## %else4
1713 ; AVX1OR2-NEXT: testb $8, %al
1714 ; AVX1OR2-NEXT: jne LBB13_7
1715 ; AVX1OR2-NEXT: LBB13_8: ## %else6
1716 ; AVX1OR2-NEXT: testb $16, %al
1717 ; AVX1OR2-NEXT: jne LBB13_9
1718 ; AVX1OR2-NEXT: LBB13_10: ## %else8
1719 ; AVX1OR2-NEXT: testb $32, %al
1720 ; AVX1OR2-NEXT: jne LBB13_11
1721 ; AVX1OR2-NEXT: LBB13_12: ## %else10
1722 ; AVX1OR2-NEXT: testb $64, %al
1723 ; AVX1OR2-NEXT: jne LBB13_13
1724 ; AVX1OR2-NEXT: LBB13_14: ## %else12
1725 ; AVX1OR2-NEXT: testb $-128, %al
1726 ; AVX1OR2-NEXT: jne LBB13_15
1727 ; AVX1OR2-NEXT: LBB13_16: ## %else14
1728 ; AVX1OR2-NEXT: retq
1729 ; AVX1OR2-NEXT: LBB13_1: ## %cond.store
1730 ; AVX1OR2-NEXT: vpextrw $0, %xmm1, (%rdi)
1731 ; AVX1OR2-NEXT: testb $2, %al
1732 ; AVX1OR2-NEXT: je LBB13_4
1733 ; AVX1OR2-NEXT: LBB13_3: ## %cond.store1
1734 ; AVX1OR2-NEXT: vpextrw $1, %xmm1, 2(%rdi)
1735 ; AVX1OR2-NEXT: testb $4, %al
1736 ; AVX1OR2-NEXT: je LBB13_6
1737 ; AVX1OR2-NEXT: LBB13_5: ## %cond.store3
1738 ; AVX1OR2-NEXT: vpextrw $2, %xmm1, 4(%rdi)
1739 ; AVX1OR2-NEXT: testb $8, %al
1740 ; AVX1OR2-NEXT: je LBB13_8
1741 ; AVX1OR2-NEXT: LBB13_7: ## %cond.store5
1742 ; AVX1OR2-NEXT: vpextrw $3, %xmm1, 6(%rdi)
1743 ; AVX1OR2-NEXT: testb $16, %al
1744 ; AVX1OR2-NEXT: je LBB13_10
1745 ; AVX1OR2-NEXT: LBB13_9: ## %cond.store7
1746 ; AVX1OR2-NEXT: vpextrw $4, %xmm1, 8(%rdi)
1747 ; AVX1OR2-NEXT: testb $32, %al
1748 ; AVX1OR2-NEXT: je LBB13_12
1749 ; AVX1OR2-NEXT: LBB13_11: ## %cond.store9
1750 ; AVX1OR2-NEXT: vpextrw $5, %xmm1, 10(%rdi)
1751 ; AVX1OR2-NEXT: testb $64, %al
1752 ; AVX1OR2-NEXT: je LBB13_14
1753 ; AVX1OR2-NEXT: LBB13_13: ## %cond.store11
1754 ; AVX1OR2-NEXT: vpextrw $6, %xmm1, 12(%rdi)
1755 ; AVX1OR2-NEXT: testb $-128, %al
1756 ; AVX1OR2-NEXT: je LBB13_16
1757 ; AVX1OR2-NEXT: LBB13_15: ## %cond.store13
1758 ; AVX1OR2-NEXT: vpextrw $7, %xmm1, 14(%rdi)
1759 ; AVX1OR2-NEXT: retq
1761 ; AVX512F-LABEL: store_v8i16_v8i16:
1762 ; AVX512F: ## %bb.0:
1763 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
1764 ; AVX512F-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0
1765 ; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm0
1766 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
1767 ; AVX512F-NEXT: kmovw %k0, %eax
1768 ; AVX512F-NEXT: testb $1, %al
1769 ; AVX512F-NEXT: jne LBB13_1
1770 ; AVX512F-NEXT: ## %bb.2: ## %else
1771 ; AVX512F-NEXT: testb $2, %al
1772 ; AVX512F-NEXT: jne LBB13_3
1773 ; AVX512F-NEXT: LBB13_4: ## %else2
1774 ; AVX512F-NEXT: testb $4, %al
1775 ; AVX512F-NEXT: jne LBB13_5
1776 ; AVX512F-NEXT: LBB13_6: ## %else4
1777 ; AVX512F-NEXT: testb $8, %al
1778 ; AVX512F-NEXT: jne LBB13_7
1779 ; AVX512F-NEXT: LBB13_8: ## %else6
1780 ; AVX512F-NEXT: testb $16, %al
1781 ; AVX512F-NEXT: jne LBB13_9
1782 ; AVX512F-NEXT: LBB13_10: ## %else8
1783 ; AVX512F-NEXT: testb $32, %al
1784 ; AVX512F-NEXT: jne LBB13_11
1785 ; AVX512F-NEXT: LBB13_12: ## %else10
1786 ; AVX512F-NEXT: testb $64, %al
1787 ; AVX512F-NEXT: jne LBB13_13
1788 ; AVX512F-NEXT: LBB13_14: ## %else12
1789 ; AVX512F-NEXT: testb $-128, %al
1790 ; AVX512F-NEXT: jne LBB13_15
1791 ; AVX512F-NEXT: LBB13_16: ## %else14
1792 ; AVX512F-NEXT: vzeroupper
1793 ; AVX512F-NEXT: retq
1794 ; AVX512F-NEXT: LBB13_1: ## %cond.store
1795 ; AVX512F-NEXT: vpextrw $0, %xmm1, (%rdi)
1796 ; AVX512F-NEXT: testb $2, %al
1797 ; AVX512F-NEXT: je LBB13_4
1798 ; AVX512F-NEXT: LBB13_3: ## %cond.store1
1799 ; AVX512F-NEXT: vpextrw $1, %xmm1, 2(%rdi)
1800 ; AVX512F-NEXT: testb $4, %al
1801 ; AVX512F-NEXT: je LBB13_6
1802 ; AVX512F-NEXT: LBB13_5: ## %cond.store3
1803 ; AVX512F-NEXT: vpextrw $2, %xmm1, 4(%rdi)
1804 ; AVX512F-NEXT: testb $8, %al
1805 ; AVX512F-NEXT: je LBB13_8
1806 ; AVX512F-NEXT: LBB13_7: ## %cond.store5
1807 ; AVX512F-NEXT: vpextrw $3, %xmm1, 6(%rdi)
1808 ; AVX512F-NEXT: testb $16, %al
1809 ; AVX512F-NEXT: je LBB13_10
1810 ; AVX512F-NEXT: LBB13_9: ## %cond.store7
1811 ; AVX512F-NEXT: vpextrw $4, %xmm1, 8(%rdi)
1812 ; AVX512F-NEXT: testb $32, %al
1813 ; AVX512F-NEXT: je LBB13_12
1814 ; AVX512F-NEXT: LBB13_11: ## %cond.store9
1815 ; AVX512F-NEXT: vpextrw $5, %xmm1, 10(%rdi)
1816 ; AVX512F-NEXT: testb $64, %al
1817 ; AVX512F-NEXT: je LBB13_14
1818 ; AVX512F-NEXT: LBB13_13: ## %cond.store11
1819 ; AVX512F-NEXT: vpextrw $6, %xmm1, 12(%rdi)
1820 ; AVX512F-NEXT: testb $-128, %al
1821 ; AVX512F-NEXT: je LBB13_16
1822 ; AVX512F-NEXT: LBB13_15: ## %cond.store13
1823 ; AVX512F-NEXT: vpextrw $7, %xmm1, 14(%rdi)
1824 ; AVX512F-NEXT: vzeroupper
1825 ; AVX512F-NEXT: retq
1827 ; AVX512VLDQ-LABEL: store_v8i16_v8i16:
1828 ; AVX512VLDQ: ## %bb.0:
1829 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
1830 ; AVX512VLDQ-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0
1831 ; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm0
1832 ; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k0
1833 ; AVX512VLDQ-NEXT: kmovw %k0, %eax
1834 ; AVX512VLDQ-NEXT: testb $1, %al
1835 ; AVX512VLDQ-NEXT: jne LBB13_1
1836 ; AVX512VLDQ-NEXT: ## %bb.2: ## %else
1837 ; AVX512VLDQ-NEXT: testb $2, %al
1838 ; AVX512VLDQ-NEXT: jne LBB13_3
1839 ; AVX512VLDQ-NEXT: LBB13_4: ## %else2
1840 ; AVX512VLDQ-NEXT: testb $4, %al
1841 ; AVX512VLDQ-NEXT: jne LBB13_5
1842 ; AVX512VLDQ-NEXT: LBB13_6: ## %else4
1843 ; AVX512VLDQ-NEXT: testb $8, %al
1844 ; AVX512VLDQ-NEXT: jne LBB13_7
1845 ; AVX512VLDQ-NEXT: LBB13_8: ## %else6
1846 ; AVX512VLDQ-NEXT: testb $16, %al
1847 ; AVX512VLDQ-NEXT: jne LBB13_9
1848 ; AVX512VLDQ-NEXT: LBB13_10: ## %else8
1849 ; AVX512VLDQ-NEXT: testb $32, %al
1850 ; AVX512VLDQ-NEXT: jne LBB13_11
1851 ; AVX512VLDQ-NEXT: LBB13_12: ## %else10
1852 ; AVX512VLDQ-NEXT: testb $64, %al
1853 ; AVX512VLDQ-NEXT: jne LBB13_13
1854 ; AVX512VLDQ-NEXT: LBB13_14: ## %else12
1855 ; AVX512VLDQ-NEXT: testb $-128, %al
1856 ; AVX512VLDQ-NEXT: jne LBB13_15
1857 ; AVX512VLDQ-NEXT: LBB13_16: ## %else14
1858 ; AVX512VLDQ-NEXT: vzeroupper
1859 ; AVX512VLDQ-NEXT: retq
1860 ; AVX512VLDQ-NEXT: LBB13_1: ## %cond.store
1861 ; AVX512VLDQ-NEXT: vpextrw $0, %xmm1, (%rdi)
1862 ; AVX512VLDQ-NEXT: testb $2, %al
1863 ; AVX512VLDQ-NEXT: je LBB13_4
1864 ; AVX512VLDQ-NEXT: LBB13_3: ## %cond.store1
1865 ; AVX512VLDQ-NEXT: vpextrw $1, %xmm1, 2(%rdi)
1866 ; AVX512VLDQ-NEXT: testb $4, %al
1867 ; AVX512VLDQ-NEXT: je LBB13_6
1868 ; AVX512VLDQ-NEXT: LBB13_5: ## %cond.store3
1869 ; AVX512VLDQ-NEXT: vpextrw $2, %xmm1, 4(%rdi)
1870 ; AVX512VLDQ-NEXT: testb $8, %al
1871 ; AVX512VLDQ-NEXT: je LBB13_8
1872 ; AVX512VLDQ-NEXT: LBB13_7: ## %cond.store5
1873 ; AVX512VLDQ-NEXT: vpextrw $3, %xmm1, 6(%rdi)
1874 ; AVX512VLDQ-NEXT: testb $16, %al
1875 ; AVX512VLDQ-NEXT: je LBB13_10
1876 ; AVX512VLDQ-NEXT: LBB13_9: ## %cond.store7
1877 ; AVX512VLDQ-NEXT: vpextrw $4, %xmm1, 8(%rdi)
1878 ; AVX512VLDQ-NEXT: testb $32, %al
1879 ; AVX512VLDQ-NEXT: je LBB13_12
1880 ; AVX512VLDQ-NEXT: LBB13_11: ## %cond.store9
1881 ; AVX512VLDQ-NEXT: vpextrw $5, %xmm1, 10(%rdi)
1882 ; AVX512VLDQ-NEXT: testb $64, %al
1883 ; AVX512VLDQ-NEXT: je LBB13_14
1884 ; AVX512VLDQ-NEXT: LBB13_13: ## %cond.store11
1885 ; AVX512VLDQ-NEXT: vpextrw $6, %xmm1, 12(%rdi)
1886 ; AVX512VLDQ-NEXT: testb $-128, %al
1887 ; AVX512VLDQ-NEXT: je LBB13_16
1888 ; AVX512VLDQ-NEXT: LBB13_15: ## %cond.store13
1889 ; AVX512VLDQ-NEXT: vpextrw $7, %xmm1, 14(%rdi)
1890 ; AVX512VLDQ-NEXT: vzeroupper
1891 ; AVX512VLDQ-NEXT: retq
1893 ; AVX512VLBW-LABEL: store_v8i16_v8i16:
1894 ; AVX512VLBW: ## %bb.0:
1895 ; AVX512VLBW-NEXT: vptestnmw %xmm0, %xmm0, %k1
1896 ; AVX512VLBW-NEXT: vmovdqu16 %xmm1, (%rdi) {%k1}
1897 ; AVX512VLBW-NEXT: retq
1899 ; X86-AVX512-LABEL: store_v8i16_v8i16:
1900 ; X86-AVX512: ## %bb.0:
1901 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
1902 ; X86-AVX512-NEXT: vptestnmw %xmm0, %xmm0, %k1
1903 ; X86-AVX512-NEXT: vmovdqu16 %xmm1, (%eax) {%k1}
1904 ; X86-AVX512-NEXT: retl
1905 %mask = icmp eq <8 x i16> %trigger, zeroinitializer
1906 call void @llvm.masked.store.v8i16.p0(<8 x i16> %val, ptr %addr, i32 4, <8 x i1> %mask)
1910 define void @store_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %val) {
1911 ; SSE2-LABEL: store_v16i16_v16i16:
1913 ; SSE2-NEXT: pxor %xmm4, %xmm4
1914 ; SSE2-NEXT: pcmpeqw %xmm4, %xmm1
1915 ; SSE2-NEXT: pcmpeqw %xmm4, %xmm0
1916 ; SSE2-NEXT: packsswb %xmm1, %xmm0
1917 ; SSE2-NEXT: pmovmskb %xmm0, %eax
1918 ; SSE2-NEXT: testb $1, %al
1919 ; SSE2-NEXT: jne LBB14_1
1920 ; SSE2-NEXT: ## %bb.2: ## %else
1921 ; SSE2-NEXT: testb $2, %al
1922 ; SSE2-NEXT: jne LBB14_3
1923 ; SSE2-NEXT: LBB14_4: ## %else2
1924 ; SSE2-NEXT: testb $4, %al
1925 ; SSE2-NEXT: jne LBB14_5
1926 ; SSE2-NEXT: LBB14_6: ## %else4
1927 ; SSE2-NEXT: testb $8, %al
1928 ; SSE2-NEXT: jne LBB14_7
1929 ; SSE2-NEXT: LBB14_8: ## %else6
1930 ; SSE2-NEXT: testb $16, %al
1931 ; SSE2-NEXT: jne LBB14_9
1932 ; SSE2-NEXT: LBB14_10: ## %else8
1933 ; SSE2-NEXT: testb $32, %al
1934 ; SSE2-NEXT: jne LBB14_11
1935 ; SSE2-NEXT: LBB14_12: ## %else10
1936 ; SSE2-NEXT: testb $64, %al
1937 ; SSE2-NEXT: jne LBB14_13
1938 ; SSE2-NEXT: LBB14_14: ## %else12
1939 ; SSE2-NEXT: testb %al, %al
1940 ; SSE2-NEXT: js LBB14_15
1941 ; SSE2-NEXT: LBB14_16: ## %else14
1942 ; SSE2-NEXT: testl $256, %eax ## imm = 0x100
1943 ; SSE2-NEXT: jne LBB14_17
1944 ; SSE2-NEXT: LBB14_18: ## %else16
1945 ; SSE2-NEXT: testl $512, %eax ## imm = 0x200
1946 ; SSE2-NEXT: jne LBB14_19
1947 ; SSE2-NEXT: LBB14_20: ## %else18
1948 ; SSE2-NEXT: testl $1024, %eax ## imm = 0x400
1949 ; SSE2-NEXT: jne LBB14_21
1950 ; SSE2-NEXT: LBB14_22: ## %else20
1951 ; SSE2-NEXT: testl $2048, %eax ## imm = 0x800
1952 ; SSE2-NEXT: jne LBB14_23
1953 ; SSE2-NEXT: LBB14_24: ## %else22
1954 ; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000
1955 ; SSE2-NEXT: jne LBB14_25
1956 ; SSE2-NEXT: LBB14_26: ## %else24
1957 ; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000
1958 ; SSE2-NEXT: jne LBB14_27
1959 ; SSE2-NEXT: LBB14_28: ## %else26
1960 ; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
1961 ; SSE2-NEXT: jne LBB14_29
1962 ; SSE2-NEXT: LBB14_30: ## %else28
1963 ; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
1964 ; SSE2-NEXT: jne LBB14_31
1965 ; SSE2-NEXT: LBB14_32: ## %else30
1967 ; SSE2-NEXT: LBB14_1: ## %cond.store
1968 ; SSE2-NEXT: movd %xmm2, %ecx
1969 ; SSE2-NEXT: movw %cx, (%rdi)
1970 ; SSE2-NEXT: testb $2, %al
1971 ; SSE2-NEXT: je LBB14_4
1972 ; SSE2-NEXT: LBB14_3: ## %cond.store1
1973 ; SSE2-NEXT: pextrw $1, %xmm2, %ecx
1974 ; SSE2-NEXT: movw %cx, 2(%rdi)
1975 ; SSE2-NEXT: testb $4, %al
1976 ; SSE2-NEXT: je LBB14_6
1977 ; SSE2-NEXT: LBB14_5: ## %cond.store3
1978 ; SSE2-NEXT: pextrw $2, %xmm2, %ecx
1979 ; SSE2-NEXT: movw %cx, 4(%rdi)
1980 ; SSE2-NEXT: testb $8, %al
1981 ; SSE2-NEXT: je LBB14_8
1982 ; SSE2-NEXT: LBB14_7: ## %cond.store5
1983 ; SSE2-NEXT: pextrw $3, %xmm2, %ecx
1984 ; SSE2-NEXT: movw %cx, 6(%rdi)
1985 ; SSE2-NEXT: testb $16, %al
1986 ; SSE2-NEXT: je LBB14_10
1987 ; SSE2-NEXT: LBB14_9: ## %cond.store7
1988 ; SSE2-NEXT: pextrw $4, %xmm2, %ecx
1989 ; SSE2-NEXT: movw %cx, 8(%rdi)
1990 ; SSE2-NEXT: testb $32, %al
1991 ; SSE2-NEXT: je LBB14_12
1992 ; SSE2-NEXT: LBB14_11: ## %cond.store9
1993 ; SSE2-NEXT: pextrw $5, %xmm2, %ecx
1994 ; SSE2-NEXT: movw %cx, 10(%rdi)
1995 ; SSE2-NEXT: testb $64, %al
1996 ; SSE2-NEXT: je LBB14_14
1997 ; SSE2-NEXT: LBB14_13: ## %cond.store11
1998 ; SSE2-NEXT: pextrw $6, %xmm2, %ecx
1999 ; SSE2-NEXT: movw %cx, 12(%rdi)
2000 ; SSE2-NEXT: testb %al, %al
2001 ; SSE2-NEXT: jns LBB14_16
2002 ; SSE2-NEXT: LBB14_15: ## %cond.store13
2003 ; SSE2-NEXT: pextrw $7, %xmm2, %ecx
2004 ; SSE2-NEXT: movw %cx, 14(%rdi)
2005 ; SSE2-NEXT: testl $256, %eax ## imm = 0x100
2006 ; SSE2-NEXT: je LBB14_18
2007 ; SSE2-NEXT: LBB14_17: ## %cond.store15
2008 ; SSE2-NEXT: movd %xmm3, %ecx
2009 ; SSE2-NEXT: movw %cx, 16(%rdi)
2010 ; SSE2-NEXT: testl $512, %eax ## imm = 0x200
2011 ; SSE2-NEXT: je LBB14_20
2012 ; SSE2-NEXT: LBB14_19: ## %cond.store17
2013 ; SSE2-NEXT: pextrw $1, %xmm3, %ecx
2014 ; SSE2-NEXT: movw %cx, 18(%rdi)
2015 ; SSE2-NEXT: testl $1024, %eax ## imm = 0x400
2016 ; SSE2-NEXT: je LBB14_22
2017 ; SSE2-NEXT: LBB14_21: ## %cond.store19
2018 ; SSE2-NEXT: pextrw $2, %xmm3, %ecx
2019 ; SSE2-NEXT: movw %cx, 20(%rdi)
2020 ; SSE2-NEXT: testl $2048, %eax ## imm = 0x800
2021 ; SSE2-NEXT: je LBB14_24
2022 ; SSE2-NEXT: LBB14_23: ## %cond.store21
2023 ; SSE2-NEXT: pextrw $3, %xmm3, %ecx
2024 ; SSE2-NEXT: movw %cx, 22(%rdi)
2025 ; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000
2026 ; SSE2-NEXT: je LBB14_26
2027 ; SSE2-NEXT: LBB14_25: ## %cond.store23
2028 ; SSE2-NEXT: pextrw $4, %xmm3, %ecx
2029 ; SSE2-NEXT: movw %cx, 24(%rdi)
2030 ; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000
2031 ; SSE2-NEXT: je LBB14_28
2032 ; SSE2-NEXT: LBB14_27: ## %cond.store25
2033 ; SSE2-NEXT: pextrw $5, %xmm3, %ecx
2034 ; SSE2-NEXT: movw %cx, 26(%rdi)
2035 ; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
2036 ; SSE2-NEXT: je LBB14_30
2037 ; SSE2-NEXT: LBB14_29: ## %cond.store27
2038 ; SSE2-NEXT: pextrw $6, %xmm3, %ecx
2039 ; SSE2-NEXT: movw %cx, 28(%rdi)
2040 ; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
2041 ; SSE2-NEXT: je LBB14_32
2042 ; SSE2-NEXT: LBB14_31: ## %cond.store29
2043 ; SSE2-NEXT: pextrw $7, %xmm3, %eax
2044 ; SSE2-NEXT: movw %ax, 30(%rdi)
2047 ; SSE4-LABEL: store_v16i16_v16i16:
2049 ; SSE4-NEXT: pxor %xmm4, %xmm4
2050 ; SSE4-NEXT: pcmpeqw %xmm4, %xmm1
2051 ; SSE4-NEXT: pcmpeqw %xmm4, %xmm0
2052 ; SSE4-NEXT: packsswb %xmm1, %xmm0
2053 ; SSE4-NEXT: pmovmskb %xmm0, %eax
2054 ; SSE4-NEXT: testb $1, %al
2055 ; SSE4-NEXT: jne LBB14_1
2056 ; SSE4-NEXT: ## %bb.2: ## %else
2057 ; SSE4-NEXT: testb $2, %al
2058 ; SSE4-NEXT: jne LBB14_3
2059 ; SSE4-NEXT: LBB14_4: ## %else2
2060 ; SSE4-NEXT: testb $4, %al
2061 ; SSE4-NEXT: jne LBB14_5
2062 ; SSE4-NEXT: LBB14_6: ## %else4
2063 ; SSE4-NEXT: testb $8, %al
2064 ; SSE4-NEXT: jne LBB14_7
2065 ; SSE4-NEXT: LBB14_8: ## %else6
2066 ; SSE4-NEXT: testb $16, %al
2067 ; SSE4-NEXT: jne LBB14_9
2068 ; SSE4-NEXT: LBB14_10: ## %else8
2069 ; SSE4-NEXT: testb $32, %al
2070 ; SSE4-NEXT: jne LBB14_11
2071 ; SSE4-NEXT: LBB14_12: ## %else10
2072 ; SSE4-NEXT: testb $64, %al
2073 ; SSE4-NEXT: jne LBB14_13
2074 ; SSE4-NEXT: LBB14_14: ## %else12
2075 ; SSE4-NEXT: testb %al, %al
2076 ; SSE4-NEXT: js LBB14_15
2077 ; SSE4-NEXT: LBB14_16: ## %else14
2078 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
2079 ; SSE4-NEXT: jne LBB14_17
2080 ; SSE4-NEXT: LBB14_18: ## %else16
2081 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
2082 ; SSE4-NEXT: jne LBB14_19
2083 ; SSE4-NEXT: LBB14_20: ## %else18
2084 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
2085 ; SSE4-NEXT: jne LBB14_21
2086 ; SSE4-NEXT: LBB14_22: ## %else20
2087 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
2088 ; SSE4-NEXT: jne LBB14_23
2089 ; SSE4-NEXT: LBB14_24: ## %else22
2090 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
2091 ; SSE4-NEXT: jne LBB14_25
2092 ; SSE4-NEXT: LBB14_26: ## %else24
2093 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
2094 ; SSE4-NEXT: jne LBB14_27
2095 ; SSE4-NEXT: LBB14_28: ## %else26
2096 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
2097 ; SSE4-NEXT: jne LBB14_29
2098 ; SSE4-NEXT: LBB14_30: ## %else28
2099 ; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
2100 ; SSE4-NEXT: jne LBB14_31
2101 ; SSE4-NEXT: LBB14_32: ## %else30
2103 ; SSE4-NEXT: LBB14_1: ## %cond.store
2104 ; SSE4-NEXT: pextrw $0, %xmm2, (%rdi)
2105 ; SSE4-NEXT: testb $2, %al
2106 ; SSE4-NEXT: je LBB14_4
2107 ; SSE4-NEXT: LBB14_3: ## %cond.store1
2108 ; SSE4-NEXT: pextrw $1, %xmm2, 2(%rdi)
2109 ; SSE4-NEXT: testb $4, %al
2110 ; SSE4-NEXT: je LBB14_6
2111 ; SSE4-NEXT: LBB14_5: ## %cond.store3
2112 ; SSE4-NEXT: pextrw $2, %xmm2, 4(%rdi)
2113 ; SSE4-NEXT: testb $8, %al
2114 ; SSE4-NEXT: je LBB14_8
2115 ; SSE4-NEXT: LBB14_7: ## %cond.store5
2116 ; SSE4-NEXT: pextrw $3, %xmm2, 6(%rdi)
2117 ; SSE4-NEXT: testb $16, %al
2118 ; SSE4-NEXT: je LBB14_10
2119 ; SSE4-NEXT: LBB14_9: ## %cond.store7
2120 ; SSE4-NEXT: pextrw $4, %xmm2, 8(%rdi)
2121 ; SSE4-NEXT: testb $32, %al
2122 ; SSE4-NEXT: je LBB14_12
2123 ; SSE4-NEXT: LBB14_11: ## %cond.store9
2124 ; SSE4-NEXT: pextrw $5, %xmm2, 10(%rdi)
2125 ; SSE4-NEXT: testb $64, %al
2126 ; SSE4-NEXT: je LBB14_14
2127 ; SSE4-NEXT: LBB14_13: ## %cond.store11
2128 ; SSE4-NEXT: pextrw $6, %xmm2, 12(%rdi)
2129 ; SSE4-NEXT: testb %al, %al
2130 ; SSE4-NEXT: jns LBB14_16
2131 ; SSE4-NEXT: LBB14_15: ## %cond.store13
2132 ; SSE4-NEXT: pextrw $7, %xmm2, 14(%rdi)
2133 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
2134 ; SSE4-NEXT: je LBB14_18
2135 ; SSE4-NEXT: LBB14_17: ## %cond.store15
2136 ; SSE4-NEXT: pextrw $0, %xmm3, 16(%rdi)
2137 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
2138 ; SSE4-NEXT: je LBB14_20
2139 ; SSE4-NEXT: LBB14_19: ## %cond.store17
2140 ; SSE4-NEXT: pextrw $1, %xmm3, 18(%rdi)
2141 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
2142 ; SSE4-NEXT: je LBB14_22
2143 ; SSE4-NEXT: LBB14_21: ## %cond.store19
2144 ; SSE4-NEXT: pextrw $2, %xmm3, 20(%rdi)
2145 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
2146 ; SSE4-NEXT: je LBB14_24
2147 ; SSE4-NEXT: LBB14_23: ## %cond.store21
2148 ; SSE4-NEXT: pextrw $3, %xmm3, 22(%rdi)
2149 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
2150 ; SSE4-NEXT: je LBB14_26
2151 ; SSE4-NEXT: LBB14_25: ## %cond.store23
2152 ; SSE4-NEXT: pextrw $4, %xmm3, 24(%rdi)
2153 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
2154 ; SSE4-NEXT: je LBB14_28
2155 ; SSE4-NEXT: LBB14_27: ## %cond.store25
2156 ; SSE4-NEXT: pextrw $5, %xmm3, 26(%rdi)
2157 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
2158 ; SSE4-NEXT: je LBB14_30
2159 ; SSE4-NEXT: LBB14_29: ## %cond.store27
2160 ; SSE4-NEXT: pextrw $6, %xmm3, 28(%rdi)
2161 ; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
2162 ; SSE4-NEXT: je LBB14_32
2163 ; SSE4-NEXT: LBB14_31: ## %cond.store29
2164 ; SSE4-NEXT: pextrw $7, %xmm3, 30(%rdi)
2167 ; AVX1-LABEL: store_v16i16_v16i16:
2169 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
2170 ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
2171 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm2, %xmm2
2172 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm0
2173 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
2174 ; AVX1-NEXT: vpmovmskb %xmm0, %eax
2175 ; AVX1-NEXT: testb $1, %al
2176 ; AVX1-NEXT: jne LBB14_1
2177 ; AVX1-NEXT: ## %bb.2: ## %else
2178 ; AVX1-NEXT: testb $2, %al
2179 ; AVX1-NEXT: jne LBB14_3
2180 ; AVX1-NEXT: LBB14_4: ## %else2
2181 ; AVX1-NEXT: testb $4, %al
2182 ; AVX1-NEXT: jne LBB14_5
2183 ; AVX1-NEXT: LBB14_6: ## %else4
2184 ; AVX1-NEXT: testb $8, %al
2185 ; AVX1-NEXT: jne LBB14_7
2186 ; AVX1-NEXT: LBB14_8: ## %else6
2187 ; AVX1-NEXT: testb $16, %al
2188 ; AVX1-NEXT: jne LBB14_9
2189 ; AVX1-NEXT: LBB14_10: ## %else8
2190 ; AVX1-NEXT: testb $32, %al
2191 ; AVX1-NEXT: jne LBB14_11
2192 ; AVX1-NEXT: LBB14_12: ## %else10
2193 ; AVX1-NEXT: testb $64, %al
2194 ; AVX1-NEXT: jne LBB14_13
2195 ; AVX1-NEXT: LBB14_14: ## %else12
2196 ; AVX1-NEXT: testb %al, %al
2197 ; AVX1-NEXT: jns LBB14_16
2198 ; AVX1-NEXT: LBB14_15: ## %cond.store13
2199 ; AVX1-NEXT: vpextrw $7, %xmm1, 14(%rdi)
2200 ; AVX1-NEXT: LBB14_16: ## %else14
2201 ; AVX1-NEXT: testl $256, %eax ## imm = 0x100
2202 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
2203 ; AVX1-NEXT: jne LBB14_17
2204 ; AVX1-NEXT: ## %bb.18: ## %else16
2205 ; AVX1-NEXT: testl $512, %eax ## imm = 0x200
2206 ; AVX1-NEXT: jne LBB14_19
2207 ; AVX1-NEXT: LBB14_20: ## %else18
2208 ; AVX1-NEXT: testl $1024, %eax ## imm = 0x400
2209 ; AVX1-NEXT: jne LBB14_21
2210 ; AVX1-NEXT: LBB14_22: ## %else20
2211 ; AVX1-NEXT: testl $2048, %eax ## imm = 0x800
2212 ; AVX1-NEXT: jne LBB14_23
2213 ; AVX1-NEXT: LBB14_24: ## %else22
2214 ; AVX1-NEXT: testl $4096, %eax ## imm = 0x1000
2215 ; AVX1-NEXT: jne LBB14_25
2216 ; AVX1-NEXT: LBB14_26: ## %else24
2217 ; AVX1-NEXT: testl $8192, %eax ## imm = 0x2000
2218 ; AVX1-NEXT: jne LBB14_27
2219 ; AVX1-NEXT: LBB14_28: ## %else26
2220 ; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
2221 ; AVX1-NEXT: jne LBB14_29
2222 ; AVX1-NEXT: LBB14_30: ## %else28
2223 ; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
2224 ; AVX1-NEXT: jne LBB14_31
2225 ; AVX1-NEXT: LBB14_32: ## %else30
2226 ; AVX1-NEXT: vzeroupper
2228 ; AVX1-NEXT: LBB14_1: ## %cond.store
2229 ; AVX1-NEXT: vpextrw $0, %xmm1, (%rdi)
2230 ; AVX1-NEXT: testb $2, %al
2231 ; AVX1-NEXT: je LBB14_4
2232 ; AVX1-NEXT: LBB14_3: ## %cond.store1
2233 ; AVX1-NEXT: vpextrw $1, %xmm1, 2(%rdi)
2234 ; AVX1-NEXT: testb $4, %al
2235 ; AVX1-NEXT: je LBB14_6
2236 ; AVX1-NEXT: LBB14_5: ## %cond.store3
2237 ; AVX1-NEXT: vpextrw $2, %xmm1, 4(%rdi)
2238 ; AVX1-NEXT: testb $8, %al
2239 ; AVX1-NEXT: je LBB14_8
2240 ; AVX1-NEXT: LBB14_7: ## %cond.store5
2241 ; AVX1-NEXT: vpextrw $3, %xmm1, 6(%rdi)
2242 ; AVX1-NEXT: testb $16, %al
2243 ; AVX1-NEXT: je LBB14_10
2244 ; AVX1-NEXT: LBB14_9: ## %cond.store7
2245 ; AVX1-NEXT: vpextrw $4, %xmm1, 8(%rdi)
2246 ; AVX1-NEXT: testb $32, %al
2247 ; AVX1-NEXT: je LBB14_12
2248 ; AVX1-NEXT: LBB14_11: ## %cond.store9
2249 ; AVX1-NEXT: vpextrw $5, %xmm1, 10(%rdi)
2250 ; AVX1-NEXT: testb $64, %al
2251 ; AVX1-NEXT: je LBB14_14
2252 ; AVX1-NEXT: LBB14_13: ## %cond.store11
2253 ; AVX1-NEXT: vpextrw $6, %xmm1, 12(%rdi)
2254 ; AVX1-NEXT: testb %al, %al
2255 ; AVX1-NEXT: js LBB14_15
2256 ; AVX1-NEXT: jmp LBB14_16
2257 ; AVX1-NEXT: LBB14_17: ## %cond.store15
2258 ; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
2259 ; AVX1-NEXT: testl $512, %eax ## imm = 0x200
2260 ; AVX1-NEXT: je LBB14_20
2261 ; AVX1-NEXT: LBB14_19: ## %cond.store17
2262 ; AVX1-NEXT: vpextrw $1, %xmm0, 18(%rdi)
2263 ; AVX1-NEXT: testl $1024, %eax ## imm = 0x400
2264 ; AVX1-NEXT: je LBB14_22
2265 ; AVX1-NEXT: LBB14_21: ## %cond.store19
2266 ; AVX1-NEXT: vpextrw $2, %xmm0, 20(%rdi)
2267 ; AVX1-NEXT: testl $2048, %eax ## imm = 0x800
2268 ; AVX1-NEXT: je LBB14_24
2269 ; AVX1-NEXT: LBB14_23: ## %cond.store21
2270 ; AVX1-NEXT: vpextrw $3, %xmm0, 22(%rdi)
2271 ; AVX1-NEXT: testl $4096, %eax ## imm = 0x1000
2272 ; AVX1-NEXT: je LBB14_26
2273 ; AVX1-NEXT: LBB14_25: ## %cond.store23
2274 ; AVX1-NEXT: vpextrw $4, %xmm0, 24(%rdi)
2275 ; AVX1-NEXT: testl $8192, %eax ## imm = 0x2000
2276 ; AVX1-NEXT: je LBB14_28
2277 ; AVX1-NEXT: LBB14_27: ## %cond.store25
2278 ; AVX1-NEXT: vpextrw $5, %xmm0, 26(%rdi)
2279 ; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
2280 ; AVX1-NEXT: je LBB14_30
2281 ; AVX1-NEXT: LBB14_29: ## %cond.store27
2282 ; AVX1-NEXT: vpextrw $6, %xmm0, 28(%rdi)
2283 ; AVX1-NEXT: testl $32768, %eax ## imm = 0x8000
2284 ; AVX1-NEXT: je LBB14_32
2285 ; AVX1-NEXT: LBB14_31: ## %cond.store29
2286 ; AVX1-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2287 ; AVX1-NEXT: vzeroupper
2290 ; AVX2-LABEL: store_v16i16_v16i16:
2292 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
2293 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
2294 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
2295 ; AVX2-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
2296 ; AVX2-NEXT: vpmovmskb %xmm0, %eax
2297 ; AVX2-NEXT: testb $1, %al
2298 ; AVX2-NEXT: jne LBB14_1
2299 ; AVX2-NEXT: ## %bb.2: ## %else
2300 ; AVX2-NEXT: testb $2, %al
2301 ; AVX2-NEXT: jne LBB14_3
2302 ; AVX2-NEXT: LBB14_4: ## %else2
2303 ; AVX2-NEXT: testb $4, %al
2304 ; AVX2-NEXT: jne LBB14_5
2305 ; AVX2-NEXT: LBB14_6: ## %else4
2306 ; AVX2-NEXT: testb $8, %al
2307 ; AVX2-NEXT: jne LBB14_7
2308 ; AVX2-NEXT: LBB14_8: ## %else6
2309 ; AVX2-NEXT: testb $16, %al
2310 ; AVX2-NEXT: jne LBB14_9
2311 ; AVX2-NEXT: LBB14_10: ## %else8
2312 ; AVX2-NEXT: testb $32, %al
2313 ; AVX2-NEXT: jne LBB14_11
2314 ; AVX2-NEXT: LBB14_12: ## %else10
2315 ; AVX2-NEXT: testb $64, %al
2316 ; AVX2-NEXT: jne LBB14_13
2317 ; AVX2-NEXT: LBB14_14: ## %else12
2318 ; AVX2-NEXT: testb %al, %al
2319 ; AVX2-NEXT: jns LBB14_16
2320 ; AVX2-NEXT: LBB14_15: ## %cond.store13
2321 ; AVX2-NEXT: vpextrw $7, %xmm1, 14(%rdi)
2322 ; AVX2-NEXT: LBB14_16: ## %else14
2323 ; AVX2-NEXT: testl $256, %eax ## imm = 0x100
2324 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
2325 ; AVX2-NEXT: jne LBB14_17
2326 ; AVX2-NEXT: ## %bb.18: ## %else16
2327 ; AVX2-NEXT: testl $512, %eax ## imm = 0x200
2328 ; AVX2-NEXT: jne LBB14_19
2329 ; AVX2-NEXT: LBB14_20: ## %else18
2330 ; AVX2-NEXT: testl $1024, %eax ## imm = 0x400
2331 ; AVX2-NEXT: jne LBB14_21
2332 ; AVX2-NEXT: LBB14_22: ## %else20
2333 ; AVX2-NEXT: testl $2048, %eax ## imm = 0x800
2334 ; AVX2-NEXT: jne LBB14_23
2335 ; AVX2-NEXT: LBB14_24: ## %else22
2336 ; AVX2-NEXT: testl $4096, %eax ## imm = 0x1000
2337 ; AVX2-NEXT: jne LBB14_25
2338 ; AVX2-NEXT: LBB14_26: ## %else24
2339 ; AVX2-NEXT: testl $8192, %eax ## imm = 0x2000
2340 ; AVX2-NEXT: jne LBB14_27
2341 ; AVX2-NEXT: LBB14_28: ## %else26
2342 ; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
2343 ; AVX2-NEXT: jne LBB14_29
2344 ; AVX2-NEXT: LBB14_30: ## %else28
2345 ; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
2346 ; AVX2-NEXT: jne LBB14_31
2347 ; AVX2-NEXT: LBB14_32: ## %else30
2348 ; AVX2-NEXT: vzeroupper
2350 ; AVX2-NEXT: LBB14_1: ## %cond.store
2351 ; AVX2-NEXT: vpextrw $0, %xmm1, (%rdi)
2352 ; AVX2-NEXT: testb $2, %al
2353 ; AVX2-NEXT: je LBB14_4
2354 ; AVX2-NEXT: LBB14_3: ## %cond.store1
2355 ; AVX2-NEXT: vpextrw $1, %xmm1, 2(%rdi)
2356 ; AVX2-NEXT: testb $4, %al
2357 ; AVX2-NEXT: je LBB14_6
2358 ; AVX2-NEXT: LBB14_5: ## %cond.store3
2359 ; AVX2-NEXT: vpextrw $2, %xmm1, 4(%rdi)
2360 ; AVX2-NEXT: testb $8, %al
2361 ; AVX2-NEXT: je LBB14_8
2362 ; AVX2-NEXT: LBB14_7: ## %cond.store5
2363 ; AVX2-NEXT: vpextrw $3, %xmm1, 6(%rdi)
2364 ; AVX2-NEXT: testb $16, %al
2365 ; AVX2-NEXT: je LBB14_10
2366 ; AVX2-NEXT: LBB14_9: ## %cond.store7
2367 ; AVX2-NEXT: vpextrw $4, %xmm1, 8(%rdi)
2368 ; AVX2-NEXT: testb $32, %al
2369 ; AVX2-NEXT: je LBB14_12
2370 ; AVX2-NEXT: LBB14_11: ## %cond.store9
2371 ; AVX2-NEXT: vpextrw $5, %xmm1, 10(%rdi)
2372 ; AVX2-NEXT: testb $64, %al
2373 ; AVX2-NEXT: je LBB14_14
2374 ; AVX2-NEXT: LBB14_13: ## %cond.store11
2375 ; AVX2-NEXT: vpextrw $6, %xmm1, 12(%rdi)
2376 ; AVX2-NEXT: testb %al, %al
2377 ; AVX2-NEXT: js LBB14_15
2378 ; AVX2-NEXT: jmp LBB14_16
2379 ; AVX2-NEXT: LBB14_17: ## %cond.store15
2380 ; AVX2-NEXT: vpextrw $0, %xmm0, 16(%rdi)
2381 ; AVX2-NEXT: testl $512, %eax ## imm = 0x200
2382 ; AVX2-NEXT: je LBB14_20
2383 ; AVX2-NEXT: LBB14_19: ## %cond.store17
2384 ; AVX2-NEXT: vpextrw $1, %xmm0, 18(%rdi)
2385 ; AVX2-NEXT: testl $1024, %eax ## imm = 0x400
2386 ; AVX2-NEXT: je LBB14_22
2387 ; AVX2-NEXT: LBB14_21: ## %cond.store19
2388 ; AVX2-NEXT: vpextrw $2, %xmm0, 20(%rdi)
2389 ; AVX2-NEXT: testl $2048, %eax ## imm = 0x800
2390 ; AVX2-NEXT: je LBB14_24
2391 ; AVX2-NEXT: LBB14_23: ## %cond.store21
2392 ; AVX2-NEXT: vpextrw $3, %xmm0, 22(%rdi)
2393 ; AVX2-NEXT: testl $4096, %eax ## imm = 0x1000
2394 ; AVX2-NEXT: je LBB14_26
2395 ; AVX2-NEXT: LBB14_25: ## %cond.store23
2396 ; AVX2-NEXT: vpextrw $4, %xmm0, 24(%rdi)
2397 ; AVX2-NEXT: testl $8192, %eax ## imm = 0x2000
2398 ; AVX2-NEXT: je LBB14_28
2399 ; AVX2-NEXT: LBB14_27: ## %cond.store25
2400 ; AVX2-NEXT: vpextrw $5, %xmm0, 26(%rdi)
2401 ; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
2402 ; AVX2-NEXT: je LBB14_30
2403 ; AVX2-NEXT: LBB14_29: ## %cond.store27
2404 ; AVX2-NEXT: vpextrw $6, %xmm0, 28(%rdi)
2405 ; AVX2-NEXT: testl $32768, %eax ## imm = 0x8000
2406 ; AVX2-NEXT: je LBB14_32
2407 ; AVX2-NEXT: LBB14_31: ## %cond.store29
2408 ; AVX2-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2409 ; AVX2-NEXT: vzeroupper
2412 ; AVX512F-LABEL: store_v16i16_v16i16:
2413 ; AVX512F: ## %bb.0:
2414 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
2415 ; AVX512F-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
2416 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0
2417 ; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k0
2418 ; AVX512F-NEXT: kmovw %k0, %eax
2419 ; AVX512F-NEXT: testb $1, %al
2420 ; AVX512F-NEXT: jne LBB14_1
2421 ; AVX512F-NEXT: ## %bb.2: ## %else
2422 ; AVX512F-NEXT: testb $2, %al
2423 ; AVX512F-NEXT: jne LBB14_3
2424 ; AVX512F-NEXT: LBB14_4: ## %else2
2425 ; AVX512F-NEXT: testb $4, %al
2426 ; AVX512F-NEXT: jne LBB14_5
2427 ; AVX512F-NEXT: LBB14_6: ## %else4
2428 ; AVX512F-NEXT: testb $8, %al
2429 ; AVX512F-NEXT: jne LBB14_7
2430 ; AVX512F-NEXT: LBB14_8: ## %else6
2431 ; AVX512F-NEXT: testb $16, %al
2432 ; AVX512F-NEXT: jne LBB14_9
2433 ; AVX512F-NEXT: LBB14_10: ## %else8
2434 ; AVX512F-NEXT: testb $32, %al
2435 ; AVX512F-NEXT: jne LBB14_11
2436 ; AVX512F-NEXT: LBB14_12: ## %else10
2437 ; AVX512F-NEXT: testb $64, %al
2438 ; AVX512F-NEXT: jne LBB14_13
2439 ; AVX512F-NEXT: LBB14_14: ## %else12
2440 ; AVX512F-NEXT: testb %al, %al
2441 ; AVX512F-NEXT: jns LBB14_16
2442 ; AVX512F-NEXT: LBB14_15: ## %cond.store13
2443 ; AVX512F-NEXT: vpextrw $7, %xmm1, 14(%rdi)
2444 ; AVX512F-NEXT: LBB14_16: ## %else14
2445 ; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
2446 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm0
2447 ; AVX512F-NEXT: jne LBB14_17
2448 ; AVX512F-NEXT: ## %bb.18: ## %else16
2449 ; AVX512F-NEXT: testl $512, %eax ## imm = 0x200
2450 ; AVX512F-NEXT: jne LBB14_19
2451 ; AVX512F-NEXT: LBB14_20: ## %else18
2452 ; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400
2453 ; AVX512F-NEXT: jne LBB14_21
2454 ; AVX512F-NEXT: LBB14_22: ## %else20
2455 ; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800
2456 ; AVX512F-NEXT: jne LBB14_23
2457 ; AVX512F-NEXT: LBB14_24: ## %else22
2458 ; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000
2459 ; AVX512F-NEXT: jne LBB14_25
2460 ; AVX512F-NEXT: LBB14_26: ## %else24
2461 ; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000
2462 ; AVX512F-NEXT: jne LBB14_27
2463 ; AVX512F-NEXT: LBB14_28: ## %else26
2464 ; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
2465 ; AVX512F-NEXT: jne LBB14_29
2466 ; AVX512F-NEXT: LBB14_30: ## %else28
2467 ; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
2468 ; AVX512F-NEXT: jne LBB14_31
2469 ; AVX512F-NEXT: LBB14_32: ## %else30
2470 ; AVX512F-NEXT: vzeroupper
2471 ; AVX512F-NEXT: retq
2472 ; AVX512F-NEXT: LBB14_1: ## %cond.store
2473 ; AVX512F-NEXT: vpextrw $0, %xmm1, (%rdi)
2474 ; AVX512F-NEXT: testb $2, %al
2475 ; AVX512F-NEXT: je LBB14_4
2476 ; AVX512F-NEXT: LBB14_3: ## %cond.store1
2477 ; AVX512F-NEXT: vpextrw $1, %xmm1, 2(%rdi)
2478 ; AVX512F-NEXT: testb $4, %al
2479 ; AVX512F-NEXT: je LBB14_6
2480 ; AVX512F-NEXT: LBB14_5: ## %cond.store3
2481 ; AVX512F-NEXT: vpextrw $2, %xmm1, 4(%rdi)
2482 ; AVX512F-NEXT: testb $8, %al
2483 ; AVX512F-NEXT: je LBB14_8
2484 ; AVX512F-NEXT: LBB14_7: ## %cond.store5
2485 ; AVX512F-NEXT: vpextrw $3, %xmm1, 6(%rdi)
2486 ; AVX512F-NEXT: testb $16, %al
2487 ; AVX512F-NEXT: je LBB14_10
2488 ; AVX512F-NEXT: LBB14_9: ## %cond.store7
2489 ; AVX512F-NEXT: vpextrw $4, %xmm1, 8(%rdi)
2490 ; AVX512F-NEXT: testb $32, %al
2491 ; AVX512F-NEXT: je LBB14_12
2492 ; AVX512F-NEXT: LBB14_11: ## %cond.store9
2493 ; AVX512F-NEXT: vpextrw $5, %xmm1, 10(%rdi)
2494 ; AVX512F-NEXT: testb $64, %al
2495 ; AVX512F-NEXT: je LBB14_14
2496 ; AVX512F-NEXT: LBB14_13: ## %cond.store11
2497 ; AVX512F-NEXT: vpextrw $6, %xmm1, 12(%rdi)
2498 ; AVX512F-NEXT: testb %al, %al
2499 ; AVX512F-NEXT: js LBB14_15
2500 ; AVX512F-NEXT: jmp LBB14_16
2501 ; AVX512F-NEXT: LBB14_17: ## %cond.store15
2502 ; AVX512F-NEXT: vpextrw $0, %xmm0, 16(%rdi)
2503 ; AVX512F-NEXT: testl $512, %eax ## imm = 0x200
2504 ; AVX512F-NEXT: je LBB14_20
2505 ; AVX512F-NEXT: LBB14_19: ## %cond.store17
2506 ; AVX512F-NEXT: vpextrw $1, %xmm0, 18(%rdi)
2507 ; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400
2508 ; AVX512F-NEXT: je LBB14_22
2509 ; AVX512F-NEXT: LBB14_21: ## %cond.store19
2510 ; AVX512F-NEXT: vpextrw $2, %xmm0, 20(%rdi)
2511 ; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800
2512 ; AVX512F-NEXT: je LBB14_24
2513 ; AVX512F-NEXT: LBB14_23: ## %cond.store21
2514 ; AVX512F-NEXT: vpextrw $3, %xmm0, 22(%rdi)
2515 ; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000
2516 ; AVX512F-NEXT: je LBB14_26
2517 ; AVX512F-NEXT: LBB14_25: ## %cond.store23
2518 ; AVX512F-NEXT: vpextrw $4, %xmm0, 24(%rdi)
2519 ; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000
2520 ; AVX512F-NEXT: je LBB14_28
2521 ; AVX512F-NEXT: LBB14_27: ## %cond.store25
2522 ; AVX512F-NEXT: vpextrw $5, %xmm0, 26(%rdi)
2523 ; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
2524 ; AVX512F-NEXT: je LBB14_30
2525 ; AVX512F-NEXT: LBB14_29: ## %cond.store27
2526 ; AVX512F-NEXT: vpextrw $6, %xmm0, 28(%rdi)
2527 ; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
2528 ; AVX512F-NEXT: je LBB14_32
2529 ; AVX512F-NEXT: LBB14_31: ## %cond.store29
2530 ; AVX512F-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2531 ; AVX512F-NEXT: vzeroupper
2532 ; AVX512F-NEXT: retq
2534 ; AVX512VLDQ-LABEL: store_v16i16_v16i16:
2535 ; AVX512VLDQ: ## %bb.0:
2536 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
2537 ; AVX512VLDQ-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
2538 ; AVX512VLDQ-NEXT: vpmovsxwd %ymm0, %zmm0
2539 ; AVX512VLDQ-NEXT: vpmovd2m %zmm0, %k0
2540 ; AVX512VLDQ-NEXT: kmovw %k0, %eax
2541 ; AVX512VLDQ-NEXT: testb $1, %al
2542 ; AVX512VLDQ-NEXT: jne LBB14_1
2543 ; AVX512VLDQ-NEXT: ## %bb.2: ## %else
2544 ; AVX512VLDQ-NEXT: testb $2, %al
2545 ; AVX512VLDQ-NEXT: jne LBB14_3
2546 ; AVX512VLDQ-NEXT: LBB14_4: ## %else2
2547 ; AVX512VLDQ-NEXT: testb $4, %al
2548 ; AVX512VLDQ-NEXT: jne LBB14_5
2549 ; AVX512VLDQ-NEXT: LBB14_6: ## %else4
2550 ; AVX512VLDQ-NEXT: testb $8, %al
2551 ; AVX512VLDQ-NEXT: jne LBB14_7
2552 ; AVX512VLDQ-NEXT: LBB14_8: ## %else6
2553 ; AVX512VLDQ-NEXT: testb $16, %al
2554 ; AVX512VLDQ-NEXT: jne LBB14_9
2555 ; AVX512VLDQ-NEXT: LBB14_10: ## %else8
2556 ; AVX512VLDQ-NEXT: testb $32, %al
2557 ; AVX512VLDQ-NEXT: jne LBB14_11
2558 ; AVX512VLDQ-NEXT: LBB14_12: ## %else10
2559 ; AVX512VLDQ-NEXT: testb $64, %al
2560 ; AVX512VLDQ-NEXT: jne LBB14_13
2561 ; AVX512VLDQ-NEXT: LBB14_14: ## %else12
2562 ; AVX512VLDQ-NEXT: testb %al, %al
2563 ; AVX512VLDQ-NEXT: jns LBB14_16
2564 ; AVX512VLDQ-NEXT: LBB14_15: ## %cond.store13
2565 ; AVX512VLDQ-NEXT: vpextrw $7, %xmm1, 14(%rdi)
2566 ; AVX512VLDQ-NEXT: LBB14_16: ## %else14
2567 ; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
2568 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm0
2569 ; AVX512VLDQ-NEXT: jne LBB14_17
2570 ; AVX512VLDQ-NEXT: ## %bb.18: ## %else16
2571 ; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200
2572 ; AVX512VLDQ-NEXT: jne LBB14_19
2573 ; AVX512VLDQ-NEXT: LBB14_20: ## %else18
2574 ; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400
2575 ; AVX512VLDQ-NEXT: jne LBB14_21
2576 ; AVX512VLDQ-NEXT: LBB14_22: ## %else20
2577 ; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800
2578 ; AVX512VLDQ-NEXT: jne LBB14_23
2579 ; AVX512VLDQ-NEXT: LBB14_24: ## %else22
2580 ; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000
2581 ; AVX512VLDQ-NEXT: jne LBB14_25
2582 ; AVX512VLDQ-NEXT: LBB14_26: ## %else24
2583 ; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000
2584 ; AVX512VLDQ-NEXT: jne LBB14_27
2585 ; AVX512VLDQ-NEXT: LBB14_28: ## %else26
2586 ; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
2587 ; AVX512VLDQ-NEXT: jne LBB14_29
2588 ; AVX512VLDQ-NEXT: LBB14_30: ## %else28
2589 ; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
2590 ; AVX512VLDQ-NEXT: jne LBB14_31
2591 ; AVX512VLDQ-NEXT: LBB14_32: ## %else30
2592 ; AVX512VLDQ-NEXT: vzeroupper
2593 ; AVX512VLDQ-NEXT: retq
2594 ; AVX512VLDQ-NEXT: LBB14_1: ## %cond.store
2595 ; AVX512VLDQ-NEXT: vpextrw $0, %xmm1, (%rdi)
2596 ; AVX512VLDQ-NEXT: testb $2, %al
2597 ; AVX512VLDQ-NEXT: je LBB14_4
2598 ; AVX512VLDQ-NEXT: LBB14_3: ## %cond.store1
2599 ; AVX512VLDQ-NEXT: vpextrw $1, %xmm1, 2(%rdi)
2600 ; AVX512VLDQ-NEXT: testb $4, %al
2601 ; AVX512VLDQ-NEXT: je LBB14_6
2602 ; AVX512VLDQ-NEXT: LBB14_5: ## %cond.store3
2603 ; AVX512VLDQ-NEXT: vpextrw $2, %xmm1, 4(%rdi)
2604 ; AVX512VLDQ-NEXT: testb $8, %al
2605 ; AVX512VLDQ-NEXT: je LBB14_8
2606 ; AVX512VLDQ-NEXT: LBB14_7: ## %cond.store5
2607 ; AVX512VLDQ-NEXT: vpextrw $3, %xmm1, 6(%rdi)
2608 ; AVX512VLDQ-NEXT: testb $16, %al
2609 ; AVX512VLDQ-NEXT: je LBB14_10
2610 ; AVX512VLDQ-NEXT: LBB14_9: ## %cond.store7
2611 ; AVX512VLDQ-NEXT: vpextrw $4, %xmm1, 8(%rdi)
2612 ; AVX512VLDQ-NEXT: testb $32, %al
2613 ; AVX512VLDQ-NEXT: je LBB14_12
2614 ; AVX512VLDQ-NEXT: LBB14_11: ## %cond.store9
2615 ; AVX512VLDQ-NEXT: vpextrw $5, %xmm1, 10(%rdi)
2616 ; AVX512VLDQ-NEXT: testb $64, %al
2617 ; AVX512VLDQ-NEXT: je LBB14_14
2618 ; AVX512VLDQ-NEXT: LBB14_13: ## %cond.store11
2619 ; AVX512VLDQ-NEXT: vpextrw $6, %xmm1, 12(%rdi)
2620 ; AVX512VLDQ-NEXT: testb %al, %al
2621 ; AVX512VLDQ-NEXT: js LBB14_15
2622 ; AVX512VLDQ-NEXT: jmp LBB14_16
2623 ; AVX512VLDQ-NEXT: LBB14_17: ## %cond.store15
2624 ; AVX512VLDQ-NEXT: vpextrw $0, %xmm0, 16(%rdi)
2625 ; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200
2626 ; AVX512VLDQ-NEXT: je LBB14_20
2627 ; AVX512VLDQ-NEXT: LBB14_19: ## %cond.store17
2628 ; AVX512VLDQ-NEXT: vpextrw $1, %xmm0, 18(%rdi)
2629 ; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400
2630 ; AVX512VLDQ-NEXT: je LBB14_22
2631 ; AVX512VLDQ-NEXT: LBB14_21: ## %cond.store19
2632 ; AVX512VLDQ-NEXT: vpextrw $2, %xmm0, 20(%rdi)
2633 ; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800
2634 ; AVX512VLDQ-NEXT: je LBB14_24
2635 ; AVX512VLDQ-NEXT: LBB14_23: ## %cond.store21
2636 ; AVX512VLDQ-NEXT: vpextrw $3, %xmm0, 22(%rdi)
2637 ; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000
2638 ; AVX512VLDQ-NEXT: je LBB14_26
2639 ; AVX512VLDQ-NEXT: LBB14_25: ## %cond.store23
2640 ; AVX512VLDQ-NEXT: vpextrw $4, %xmm0, 24(%rdi)
2641 ; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000
2642 ; AVX512VLDQ-NEXT: je LBB14_28
2643 ; AVX512VLDQ-NEXT: LBB14_27: ## %cond.store25
2644 ; AVX512VLDQ-NEXT: vpextrw $5, %xmm0, 26(%rdi)
2645 ; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
2646 ; AVX512VLDQ-NEXT: je LBB14_30
2647 ; AVX512VLDQ-NEXT: LBB14_29: ## %cond.store27
2648 ; AVX512VLDQ-NEXT: vpextrw $6, %xmm0, 28(%rdi)
2649 ; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
2650 ; AVX512VLDQ-NEXT: je LBB14_32
2651 ; AVX512VLDQ-NEXT: LBB14_31: ## %cond.store29
2652 ; AVX512VLDQ-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2653 ; AVX512VLDQ-NEXT: vzeroupper
2654 ; AVX512VLDQ-NEXT: retq
2656 ; AVX512VLBW-LABEL: store_v16i16_v16i16:
2657 ; AVX512VLBW: ## %bb.0:
2658 ; AVX512VLBW-NEXT: vptestnmw %ymm0, %ymm0, %k1
2659 ; AVX512VLBW-NEXT: vmovdqu16 %ymm1, (%rdi) {%k1}
2660 ; AVX512VLBW-NEXT: vzeroupper
2661 ; AVX512VLBW-NEXT: retq
2663 ; X86-AVX512-LABEL: store_v16i16_v16i16:
2664 ; X86-AVX512: ## %bb.0:
2665 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
2666 ; X86-AVX512-NEXT: vptestnmw %ymm0, %ymm0, %k1
2667 ; X86-AVX512-NEXT: vmovdqu16 %ymm1, (%eax) {%k1}
2668 ; X86-AVX512-NEXT: vzeroupper
2669 ; X86-AVX512-NEXT: retl
2670 %mask = icmp eq <16 x i16> %trigger, zeroinitializer
2671 call void @llvm.masked.store.v16i16.p0(<16 x i16> %val, ptr %addr, i32 4, <16 x i1> %mask)
2679 define void @store_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %val) {
2680 ; SSE2-LABEL: store_v16i8_v16i8:
2682 ; SSE2-NEXT: pxor %xmm2, %xmm2
2683 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2684 ; SSE2-NEXT: pmovmskb %xmm2, %eax
2685 ; SSE2-NEXT: testb $1, %al
2686 ; SSE2-NEXT: movd %xmm1, %ecx
2687 ; SSE2-NEXT: jne LBB15_1
2688 ; SSE2-NEXT: ## %bb.2: ## %else
2689 ; SSE2-NEXT: testb $2, %al
2690 ; SSE2-NEXT: jne LBB15_3
2691 ; SSE2-NEXT: LBB15_4: ## %else2
2692 ; SSE2-NEXT: testb $4, %al
2693 ; SSE2-NEXT: jne LBB15_5
2694 ; SSE2-NEXT: LBB15_6: ## %else4
2695 ; SSE2-NEXT: testb $8, %al
2696 ; SSE2-NEXT: je LBB15_8
2697 ; SSE2-NEXT: LBB15_7: ## %cond.store5
2698 ; SSE2-NEXT: shrl $24, %ecx
2699 ; SSE2-NEXT: movb %cl, 3(%rdi)
2700 ; SSE2-NEXT: LBB15_8: ## %else6
2701 ; SSE2-NEXT: testb $16, %al
2702 ; SSE2-NEXT: pextrw $2, %xmm1, %ecx
2703 ; SSE2-NEXT: je LBB15_10
2704 ; SSE2-NEXT: ## %bb.9: ## %cond.store7
2705 ; SSE2-NEXT: movb %cl, 4(%rdi)
2706 ; SSE2-NEXT: LBB15_10: ## %else8
2707 ; SSE2-NEXT: testb $32, %al
2708 ; SSE2-NEXT: je LBB15_12
2709 ; SSE2-NEXT: ## %bb.11: ## %cond.store9
2710 ; SSE2-NEXT: movb %ch, 5(%rdi)
2711 ; SSE2-NEXT: LBB15_12: ## %else10
2712 ; SSE2-NEXT: testb $64, %al
2713 ; SSE2-NEXT: pextrw $3, %xmm1, %ecx
2714 ; SSE2-NEXT: je LBB15_14
2715 ; SSE2-NEXT: ## %bb.13: ## %cond.store11
2716 ; SSE2-NEXT: movb %cl, 6(%rdi)
2717 ; SSE2-NEXT: LBB15_14: ## %else12
2718 ; SSE2-NEXT: testb %al, %al
2719 ; SSE2-NEXT: jns LBB15_16
2720 ; SSE2-NEXT: ## %bb.15: ## %cond.store13
2721 ; SSE2-NEXT: movb %ch, 7(%rdi)
2722 ; SSE2-NEXT: LBB15_16: ## %else14
2723 ; SSE2-NEXT: testl $256, %eax ## imm = 0x100
2724 ; SSE2-NEXT: pextrw $4, %xmm1, %ecx
2725 ; SSE2-NEXT: je LBB15_18
2726 ; SSE2-NEXT: ## %bb.17: ## %cond.store15
2727 ; SSE2-NEXT: movb %cl, 8(%rdi)
2728 ; SSE2-NEXT: LBB15_18: ## %else16
2729 ; SSE2-NEXT: testl $512, %eax ## imm = 0x200
2730 ; SSE2-NEXT: je LBB15_20
2731 ; SSE2-NEXT: ## %bb.19: ## %cond.store17
2732 ; SSE2-NEXT: movb %ch, 9(%rdi)
2733 ; SSE2-NEXT: LBB15_20: ## %else18
2734 ; SSE2-NEXT: testl $1024, %eax ## imm = 0x400
2735 ; SSE2-NEXT: pextrw $5, %xmm1, %ecx
2736 ; SSE2-NEXT: je LBB15_22
2737 ; SSE2-NEXT: ## %bb.21: ## %cond.store19
2738 ; SSE2-NEXT: movb %cl, 10(%rdi)
2739 ; SSE2-NEXT: LBB15_22: ## %else20
2740 ; SSE2-NEXT: testl $2048, %eax ## imm = 0x800
2741 ; SSE2-NEXT: je LBB15_24
2742 ; SSE2-NEXT: ## %bb.23: ## %cond.store21
2743 ; SSE2-NEXT: movb %ch, 11(%rdi)
2744 ; SSE2-NEXT: LBB15_24: ## %else22
2745 ; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000
2746 ; SSE2-NEXT: pextrw $6, %xmm1, %ecx
2747 ; SSE2-NEXT: je LBB15_26
2748 ; SSE2-NEXT: ## %bb.25: ## %cond.store23
2749 ; SSE2-NEXT: movb %cl, 12(%rdi)
2750 ; SSE2-NEXT: LBB15_26: ## %else24
2751 ; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000
2752 ; SSE2-NEXT: je LBB15_28
2753 ; SSE2-NEXT: ## %bb.27: ## %cond.store25
2754 ; SSE2-NEXT: movb %ch, 13(%rdi)
2755 ; SSE2-NEXT: LBB15_28: ## %else26
2756 ; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
2757 ; SSE2-NEXT: pextrw $7, %xmm1, %ecx
2758 ; SSE2-NEXT: jne LBB15_29
2759 ; SSE2-NEXT: ## %bb.30: ## %else28
2760 ; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
2761 ; SSE2-NEXT: jne LBB15_31
2762 ; SSE2-NEXT: LBB15_32: ## %else30
2764 ; SSE2-NEXT: LBB15_1: ## %cond.store
2765 ; SSE2-NEXT: movb %cl, (%rdi)
2766 ; SSE2-NEXT: testb $2, %al
2767 ; SSE2-NEXT: je LBB15_4
2768 ; SSE2-NEXT: LBB15_3: ## %cond.store1
2769 ; SSE2-NEXT: movb %ch, 1(%rdi)
2770 ; SSE2-NEXT: testb $4, %al
2771 ; SSE2-NEXT: je LBB15_6
2772 ; SSE2-NEXT: LBB15_5: ## %cond.store3
2773 ; SSE2-NEXT: movl %ecx, %edx
2774 ; SSE2-NEXT: shrl $16, %edx
2775 ; SSE2-NEXT: movb %dl, 2(%rdi)
2776 ; SSE2-NEXT: testb $8, %al
2777 ; SSE2-NEXT: jne LBB15_7
2778 ; SSE2-NEXT: jmp LBB15_8
2779 ; SSE2-NEXT: LBB15_29: ## %cond.store27
2780 ; SSE2-NEXT: movb %cl, 14(%rdi)
2781 ; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000
2782 ; SSE2-NEXT: je LBB15_32
2783 ; SSE2-NEXT: LBB15_31: ## %cond.store29
2784 ; SSE2-NEXT: movb %ch, 15(%rdi)
2787 ; SSE4-LABEL: store_v16i8_v16i8:
2789 ; SSE4-NEXT: pxor %xmm2, %xmm2
2790 ; SSE4-NEXT: pcmpeqb %xmm0, %xmm2
2791 ; SSE4-NEXT: pmovmskb %xmm2, %eax
2792 ; SSE4-NEXT: testb $1, %al
2793 ; SSE4-NEXT: jne LBB15_1
2794 ; SSE4-NEXT: ## %bb.2: ## %else
2795 ; SSE4-NEXT: testb $2, %al
2796 ; SSE4-NEXT: jne LBB15_3
2797 ; SSE4-NEXT: LBB15_4: ## %else2
2798 ; SSE4-NEXT: testb $4, %al
2799 ; SSE4-NEXT: jne LBB15_5
2800 ; SSE4-NEXT: LBB15_6: ## %else4
2801 ; SSE4-NEXT: testb $8, %al
2802 ; SSE4-NEXT: jne LBB15_7
2803 ; SSE4-NEXT: LBB15_8: ## %else6
2804 ; SSE4-NEXT: testb $16, %al
2805 ; SSE4-NEXT: jne LBB15_9
2806 ; SSE4-NEXT: LBB15_10: ## %else8
2807 ; SSE4-NEXT: testb $32, %al
2808 ; SSE4-NEXT: jne LBB15_11
2809 ; SSE4-NEXT: LBB15_12: ## %else10
2810 ; SSE4-NEXT: testb $64, %al
2811 ; SSE4-NEXT: jne LBB15_13
2812 ; SSE4-NEXT: LBB15_14: ## %else12
2813 ; SSE4-NEXT: testb %al, %al
2814 ; SSE4-NEXT: js LBB15_15
2815 ; SSE4-NEXT: LBB15_16: ## %else14
2816 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
2817 ; SSE4-NEXT: jne LBB15_17
2818 ; SSE4-NEXT: LBB15_18: ## %else16
2819 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
2820 ; SSE4-NEXT: jne LBB15_19
2821 ; SSE4-NEXT: LBB15_20: ## %else18
2822 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
2823 ; SSE4-NEXT: jne LBB15_21
2824 ; SSE4-NEXT: LBB15_22: ## %else20
2825 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
2826 ; SSE4-NEXT: jne LBB15_23
2827 ; SSE4-NEXT: LBB15_24: ## %else22
2828 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
2829 ; SSE4-NEXT: jne LBB15_25
2830 ; SSE4-NEXT: LBB15_26: ## %else24
2831 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
2832 ; SSE4-NEXT: jne LBB15_27
2833 ; SSE4-NEXT: LBB15_28: ## %else26
2834 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
2835 ; SSE4-NEXT: jne LBB15_29
2836 ; SSE4-NEXT: LBB15_30: ## %else28
2837 ; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
2838 ; SSE4-NEXT: jne LBB15_31
2839 ; SSE4-NEXT: LBB15_32: ## %else30
2841 ; SSE4-NEXT: LBB15_1: ## %cond.store
2842 ; SSE4-NEXT: pextrb $0, %xmm1, (%rdi)
2843 ; SSE4-NEXT: testb $2, %al
2844 ; SSE4-NEXT: je LBB15_4
2845 ; SSE4-NEXT: LBB15_3: ## %cond.store1
2846 ; SSE4-NEXT: pextrb $1, %xmm1, 1(%rdi)
2847 ; SSE4-NEXT: testb $4, %al
2848 ; SSE4-NEXT: je LBB15_6
2849 ; SSE4-NEXT: LBB15_5: ## %cond.store3
2850 ; SSE4-NEXT: pextrb $2, %xmm1, 2(%rdi)
2851 ; SSE4-NEXT: testb $8, %al
2852 ; SSE4-NEXT: je LBB15_8
2853 ; SSE4-NEXT: LBB15_7: ## %cond.store5
2854 ; SSE4-NEXT: pextrb $3, %xmm1, 3(%rdi)
2855 ; SSE4-NEXT: testb $16, %al
2856 ; SSE4-NEXT: je LBB15_10
2857 ; SSE4-NEXT: LBB15_9: ## %cond.store7
2858 ; SSE4-NEXT: pextrb $4, %xmm1, 4(%rdi)
2859 ; SSE4-NEXT: testb $32, %al
2860 ; SSE4-NEXT: je LBB15_12
2861 ; SSE4-NEXT: LBB15_11: ## %cond.store9
2862 ; SSE4-NEXT: pextrb $5, %xmm1, 5(%rdi)
2863 ; SSE4-NEXT: testb $64, %al
2864 ; SSE4-NEXT: je LBB15_14
2865 ; SSE4-NEXT: LBB15_13: ## %cond.store11
2866 ; SSE4-NEXT: pextrb $6, %xmm1, 6(%rdi)
2867 ; SSE4-NEXT: testb %al, %al
2868 ; SSE4-NEXT: jns LBB15_16
2869 ; SSE4-NEXT: LBB15_15: ## %cond.store13
2870 ; SSE4-NEXT: pextrb $7, %xmm1, 7(%rdi)
2871 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
2872 ; SSE4-NEXT: je LBB15_18
2873 ; SSE4-NEXT: LBB15_17: ## %cond.store15
2874 ; SSE4-NEXT: pextrb $8, %xmm1, 8(%rdi)
2875 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
2876 ; SSE4-NEXT: je LBB15_20
2877 ; SSE4-NEXT: LBB15_19: ## %cond.store17
2878 ; SSE4-NEXT: pextrb $9, %xmm1, 9(%rdi)
2879 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
2880 ; SSE4-NEXT: je LBB15_22
2881 ; SSE4-NEXT: LBB15_21: ## %cond.store19
2882 ; SSE4-NEXT: pextrb $10, %xmm1, 10(%rdi)
2883 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
2884 ; SSE4-NEXT: je LBB15_24
2885 ; SSE4-NEXT: LBB15_23: ## %cond.store21
2886 ; SSE4-NEXT: pextrb $11, %xmm1, 11(%rdi)
2887 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
2888 ; SSE4-NEXT: je LBB15_26
2889 ; SSE4-NEXT: LBB15_25: ## %cond.store23
2890 ; SSE4-NEXT: pextrb $12, %xmm1, 12(%rdi)
2891 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
2892 ; SSE4-NEXT: je LBB15_28
2893 ; SSE4-NEXT: LBB15_27: ## %cond.store25
2894 ; SSE4-NEXT: pextrb $13, %xmm1, 13(%rdi)
2895 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
2896 ; SSE4-NEXT: je LBB15_30
2897 ; SSE4-NEXT: LBB15_29: ## %cond.store27
2898 ; SSE4-NEXT: pextrb $14, %xmm1, 14(%rdi)
2899 ; SSE4-NEXT: testl $32768, %eax ## imm = 0x8000
2900 ; SSE4-NEXT: je LBB15_32
2901 ; SSE4-NEXT: LBB15_31: ## %cond.store29
2902 ; SSE4-NEXT: pextrb $15, %xmm1, 15(%rdi)
2905 ; AVX1OR2-LABEL: store_v16i8_v16i8:
2906 ; AVX1OR2: ## %bb.0:
2907 ; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2
2908 ; AVX1OR2-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
2909 ; AVX1OR2-NEXT: vpmovmskb %xmm0, %eax
2910 ; AVX1OR2-NEXT: testb $1, %al
2911 ; AVX1OR2-NEXT: jne LBB15_1
2912 ; AVX1OR2-NEXT: ## %bb.2: ## %else
2913 ; AVX1OR2-NEXT: testb $2, %al
2914 ; AVX1OR2-NEXT: jne LBB15_3
2915 ; AVX1OR2-NEXT: LBB15_4: ## %else2
2916 ; AVX1OR2-NEXT: testb $4, %al
2917 ; AVX1OR2-NEXT: jne LBB15_5
2918 ; AVX1OR2-NEXT: LBB15_6: ## %else4
2919 ; AVX1OR2-NEXT: testb $8, %al
2920 ; AVX1OR2-NEXT: jne LBB15_7
2921 ; AVX1OR2-NEXT: LBB15_8: ## %else6
2922 ; AVX1OR2-NEXT: testb $16, %al
2923 ; AVX1OR2-NEXT: jne LBB15_9
2924 ; AVX1OR2-NEXT: LBB15_10: ## %else8
2925 ; AVX1OR2-NEXT: testb $32, %al
2926 ; AVX1OR2-NEXT: jne LBB15_11
2927 ; AVX1OR2-NEXT: LBB15_12: ## %else10
2928 ; AVX1OR2-NEXT: testb $64, %al
2929 ; AVX1OR2-NEXT: jne LBB15_13
2930 ; AVX1OR2-NEXT: LBB15_14: ## %else12
2931 ; AVX1OR2-NEXT: testb %al, %al
2932 ; AVX1OR2-NEXT: js LBB15_15
2933 ; AVX1OR2-NEXT: LBB15_16: ## %else14
2934 ; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
2935 ; AVX1OR2-NEXT: jne LBB15_17
2936 ; AVX1OR2-NEXT: LBB15_18: ## %else16
2937 ; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x200
2938 ; AVX1OR2-NEXT: jne LBB15_19
2939 ; AVX1OR2-NEXT: LBB15_20: ## %else18
2940 ; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x400
2941 ; AVX1OR2-NEXT: jne LBB15_21
2942 ; AVX1OR2-NEXT: LBB15_22: ## %else20
2943 ; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x800
2944 ; AVX1OR2-NEXT: jne LBB15_23
2945 ; AVX1OR2-NEXT: LBB15_24: ## %else22
2946 ; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x1000
2947 ; AVX1OR2-NEXT: jne LBB15_25
2948 ; AVX1OR2-NEXT: LBB15_26: ## %else24
2949 ; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x2000
2950 ; AVX1OR2-NEXT: jne LBB15_27
2951 ; AVX1OR2-NEXT: LBB15_28: ## %else26
2952 ; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x4000
2953 ; AVX1OR2-NEXT: jne LBB15_29
2954 ; AVX1OR2-NEXT: LBB15_30: ## %else28
2955 ; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x8000
2956 ; AVX1OR2-NEXT: jne LBB15_31
2957 ; AVX1OR2-NEXT: LBB15_32: ## %else30
2958 ; AVX1OR2-NEXT: retq
2959 ; AVX1OR2-NEXT: LBB15_1: ## %cond.store
2960 ; AVX1OR2-NEXT: vpextrb $0, %xmm1, (%rdi)
2961 ; AVX1OR2-NEXT: testb $2, %al
2962 ; AVX1OR2-NEXT: je LBB15_4
2963 ; AVX1OR2-NEXT: LBB15_3: ## %cond.store1
2964 ; AVX1OR2-NEXT: vpextrb $1, %xmm1, 1(%rdi)
2965 ; AVX1OR2-NEXT: testb $4, %al
2966 ; AVX1OR2-NEXT: je LBB15_6
2967 ; AVX1OR2-NEXT: LBB15_5: ## %cond.store3
2968 ; AVX1OR2-NEXT: vpextrb $2, %xmm1, 2(%rdi)
2969 ; AVX1OR2-NEXT: testb $8, %al
2970 ; AVX1OR2-NEXT: je LBB15_8
2971 ; AVX1OR2-NEXT: LBB15_7: ## %cond.store5
2972 ; AVX1OR2-NEXT: vpextrb $3, %xmm1, 3(%rdi)
2973 ; AVX1OR2-NEXT: testb $16, %al
2974 ; AVX1OR2-NEXT: je LBB15_10
2975 ; AVX1OR2-NEXT: LBB15_9: ## %cond.store7
2976 ; AVX1OR2-NEXT: vpextrb $4, %xmm1, 4(%rdi)
2977 ; AVX1OR2-NEXT: testb $32, %al
2978 ; AVX1OR2-NEXT: je LBB15_12
2979 ; AVX1OR2-NEXT: LBB15_11: ## %cond.store9
2980 ; AVX1OR2-NEXT: vpextrb $5, %xmm1, 5(%rdi)
2981 ; AVX1OR2-NEXT: testb $64, %al
2982 ; AVX1OR2-NEXT: je LBB15_14
2983 ; AVX1OR2-NEXT: LBB15_13: ## %cond.store11
2984 ; AVX1OR2-NEXT: vpextrb $6, %xmm1, 6(%rdi)
2985 ; AVX1OR2-NEXT: testb %al, %al
2986 ; AVX1OR2-NEXT: jns LBB15_16
2987 ; AVX1OR2-NEXT: LBB15_15: ## %cond.store13
2988 ; AVX1OR2-NEXT: vpextrb $7, %xmm1, 7(%rdi)
2989 ; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100
2990 ; AVX1OR2-NEXT: je LBB15_18
2991 ; AVX1OR2-NEXT: LBB15_17: ## %cond.store15
2992 ; AVX1OR2-NEXT: vpextrb $8, %xmm1, 8(%rdi)
2993 ; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x200
2994 ; AVX1OR2-NEXT: je LBB15_20
2995 ; AVX1OR2-NEXT: LBB15_19: ## %cond.store17
2996 ; AVX1OR2-NEXT: vpextrb $9, %xmm1, 9(%rdi)
2997 ; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x400
2998 ; AVX1OR2-NEXT: je LBB15_22
2999 ; AVX1OR2-NEXT: LBB15_21: ## %cond.store19
3000 ; AVX1OR2-NEXT: vpextrb $10, %xmm1, 10(%rdi)
3001 ; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x800
3002 ; AVX1OR2-NEXT: je LBB15_24
3003 ; AVX1OR2-NEXT: LBB15_23: ## %cond.store21
3004 ; AVX1OR2-NEXT: vpextrb $11, %xmm1, 11(%rdi)
3005 ; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x1000
3006 ; AVX1OR2-NEXT: je LBB15_26
3007 ; AVX1OR2-NEXT: LBB15_25: ## %cond.store23
3008 ; AVX1OR2-NEXT: vpextrb $12, %xmm1, 12(%rdi)
3009 ; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x2000
3010 ; AVX1OR2-NEXT: je LBB15_28
3011 ; AVX1OR2-NEXT: LBB15_27: ## %cond.store25
3012 ; AVX1OR2-NEXT: vpextrb $13, %xmm1, 13(%rdi)
3013 ; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x4000
3014 ; AVX1OR2-NEXT: je LBB15_30
3015 ; AVX1OR2-NEXT: LBB15_29: ## %cond.store27
3016 ; AVX1OR2-NEXT: vpextrb $14, %xmm1, 14(%rdi)
3017 ; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x8000
3018 ; AVX1OR2-NEXT: je LBB15_32
3019 ; AVX1OR2-NEXT: LBB15_31: ## %cond.store29
3020 ; AVX1OR2-NEXT: vpextrb $15, %xmm1, 15(%rdi)
3021 ; AVX1OR2-NEXT: retq
3023 ; AVX512F-LABEL: store_v16i8_v16i8:
3024 ; AVX512F: ## %bb.0:
3025 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
3026 ; AVX512F-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
3027 ; AVX512F-NEXT: vpmovmskb %xmm0, %eax
3028 ; AVX512F-NEXT: testb $1, %al
3029 ; AVX512F-NEXT: jne LBB15_1
3030 ; AVX512F-NEXT: ## %bb.2: ## %else
3031 ; AVX512F-NEXT: testb $2, %al
3032 ; AVX512F-NEXT: jne LBB15_3
3033 ; AVX512F-NEXT: LBB15_4: ## %else2
3034 ; AVX512F-NEXT: testb $4, %al
3035 ; AVX512F-NEXT: jne LBB15_5
3036 ; AVX512F-NEXT: LBB15_6: ## %else4
3037 ; AVX512F-NEXT: testb $8, %al
3038 ; AVX512F-NEXT: jne LBB15_7
3039 ; AVX512F-NEXT: LBB15_8: ## %else6
3040 ; AVX512F-NEXT: testb $16, %al
3041 ; AVX512F-NEXT: jne LBB15_9
3042 ; AVX512F-NEXT: LBB15_10: ## %else8
3043 ; AVX512F-NEXT: testb $32, %al
3044 ; AVX512F-NEXT: jne LBB15_11
3045 ; AVX512F-NEXT: LBB15_12: ## %else10
3046 ; AVX512F-NEXT: testb $64, %al
3047 ; AVX512F-NEXT: jne LBB15_13
3048 ; AVX512F-NEXT: LBB15_14: ## %else12
3049 ; AVX512F-NEXT: testb %al, %al
3050 ; AVX512F-NEXT: js LBB15_15
3051 ; AVX512F-NEXT: LBB15_16: ## %else14
3052 ; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
3053 ; AVX512F-NEXT: jne LBB15_17
3054 ; AVX512F-NEXT: LBB15_18: ## %else16
3055 ; AVX512F-NEXT: testl $512, %eax ## imm = 0x200
3056 ; AVX512F-NEXT: jne LBB15_19
3057 ; AVX512F-NEXT: LBB15_20: ## %else18
3058 ; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400
3059 ; AVX512F-NEXT: jne LBB15_21
3060 ; AVX512F-NEXT: LBB15_22: ## %else20
3061 ; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800
3062 ; AVX512F-NEXT: jne LBB15_23
3063 ; AVX512F-NEXT: LBB15_24: ## %else22
3064 ; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000
3065 ; AVX512F-NEXT: jne LBB15_25
3066 ; AVX512F-NEXT: LBB15_26: ## %else24
3067 ; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000
3068 ; AVX512F-NEXT: jne LBB15_27
3069 ; AVX512F-NEXT: LBB15_28: ## %else26
3070 ; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
3071 ; AVX512F-NEXT: jne LBB15_29
3072 ; AVX512F-NEXT: LBB15_30: ## %else28
3073 ; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
3074 ; AVX512F-NEXT: jne LBB15_31
3075 ; AVX512F-NEXT: LBB15_32: ## %else30
3076 ; AVX512F-NEXT: retq
3077 ; AVX512F-NEXT: LBB15_1: ## %cond.store
3078 ; AVX512F-NEXT: vpextrb $0, %xmm1, (%rdi)
3079 ; AVX512F-NEXT: testb $2, %al
3080 ; AVX512F-NEXT: je LBB15_4
3081 ; AVX512F-NEXT: LBB15_3: ## %cond.store1
3082 ; AVX512F-NEXT: vpextrb $1, %xmm1, 1(%rdi)
3083 ; AVX512F-NEXT: testb $4, %al
3084 ; AVX512F-NEXT: je LBB15_6
3085 ; AVX512F-NEXT: LBB15_5: ## %cond.store3
3086 ; AVX512F-NEXT: vpextrb $2, %xmm1, 2(%rdi)
3087 ; AVX512F-NEXT: testb $8, %al
3088 ; AVX512F-NEXT: je LBB15_8
3089 ; AVX512F-NEXT: LBB15_7: ## %cond.store5
3090 ; AVX512F-NEXT: vpextrb $3, %xmm1, 3(%rdi)
3091 ; AVX512F-NEXT: testb $16, %al
3092 ; AVX512F-NEXT: je LBB15_10
3093 ; AVX512F-NEXT: LBB15_9: ## %cond.store7
3094 ; AVX512F-NEXT: vpextrb $4, %xmm1, 4(%rdi)
3095 ; AVX512F-NEXT: testb $32, %al
3096 ; AVX512F-NEXT: je LBB15_12
3097 ; AVX512F-NEXT: LBB15_11: ## %cond.store9
3098 ; AVX512F-NEXT: vpextrb $5, %xmm1, 5(%rdi)
3099 ; AVX512F-NEXT: testb $64, %al
3100 ; AVX512F-NEXT: je LBB15_14
3101 ; AVX512F-NEXT: LBB15_13: ## %cond.store11
3102 ; AVX512F-NEXT: vpextrb $6, %xmm1, 6(%rdi)
3103 ; AVX512F-NEXT: testb %al, %al
3104 ; AVX512F-NEXT: jns LBB15_16
3105 ; AVX512F-NEXT: LBB15_15: ## %cond.store13
3106 ; AVX512F-NEXT: vpextrb $7, %xmm1, 7(%rdi)
3107 ; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
3108 ; AVX512F-NEXT: je LBB15_18
3109 ; AVX512F-NEXT: LBB15_17: ## %cond.store15
3110 ; AVX512F-NEXT: vpextrb $8, %xmm1, 8(%rdi)
3111 ; AVX512F-NEXT: testl $512, %eax ## imm = 0x200
3112 ; AVX512F-NEXT: je LBB15_20
3113 ; AVX512F-NEXT: LBB15_19: ## %cond.store17
3114 ; AVX512F-NEXT: vpextrb $9, %xmm1, 9(%rdi)
3115 ; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400
3116 ; AVX512F-NEXT: je LBB15_22
3117 ; AVX512F-NEXT: LBB15_21: ## %cond.store19
3118 ; AVX512F-NEXT: vpextrb $10, %xmm1, 10(%rdi)
3119 ; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800
3120 ; AVX512F-NEXT: je LBB15_24
3121 ; AVX512F-NEXT: LBB15_23: ## %cond.store21
3122 ; AVX512F-NEXT: vpextrb $11, %xmm1, 11(%rdi)
3123 ; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000
3124 ; AVX512F-NEXT: je LBB15_26
3125 ; AVX512F-NEXT: LBB15_25: ## %cond.store23
3126 ; AVX512F-NEXT: vpextrb $12, %xmm1, 12(%rdi)
3127 ; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000
3128 ; AVX512F-NEXT: je LBB15_28
3129 ; AVX512F-NEXT: LBB15_27: ## %cond.store25
3130 ; AVX512F-NEXT: vpextrb $13, %xmm1, 13(%rdi)
3131 ; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
3132 ; AVX512F-NEXT: je LBB15_30
3133 ; AVX512F-NEXT: LBB15_29: ## %cond.store27
3134 ; AVX512F-NEXT: vpextrb $14, %xmm1, 14(%rdi)
3135 ; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000
3136 ; AVX512F-NEXT: je LBB15_32
3137 ; AVX512F-NEXT: LBB15_31: ## %cond.store29
3138 ; AVX512F-NEXT: vpextrb $15, %xmm1, 15(%rdi)
3139 ; AVX512F-NEXT: retq
3141 ; AVX512VLDQ-LABEL: store_v16i8_v16i8:
3142 ; AVX512VLDQ: ## %bb.0:
3143 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
3144 ; AVX512VLDQ-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
3145 ; AVX512VLDQ-NEXT: vpmovmskb %xmm0, %eax
3146 ; AVX512VLDQ-NEXT: testb $1, %al
3147 ; AVX512VLDQ-NEXT: jne LBB15_1
3148 ; AVX512VLDQ-NEXT: ## %bb.2: ## %else
3149 ; AVX512VLDQ-NEXT: testb $2, %al
3150 ; AVX512VLDQ-NEXT: jne LBB15_3
3151 ; AVX512VLDQ-NEXT: LBB15_4: ## %else2
3152 ; AVX512VLDQ-NEXT: testb $4, %al
3153 ; AVX512VLDQ-NEXT: jne LBB15_5
3154 ; AVX512VLDQ-NEXT: LBB15_6: ## %else4
3155 ; AVX512VLDQ-NEXT: testb $8, %al
3156 ; AVX512VLDQ-NEXT: jne LBB15_7
3157 ; AVX512VLDQ-NEXT: LBB15_8: ## %else6
3158 ; AVX512VLDQ-NEXT: testb $16, %al
3159 ; AVX512VLDQ-NEXT: jne LBB15_9
3160 ; AVX512VLDQ-NEXT: LBB15_10: ## %else8
3161 ; AVX512VLDQ-NEXT: testb $32, %al
3162 ; AVX512VLDQ-NEXT: jne LBB15_11
3163 ; AVX512VLDQ-NEXT: LBB15_12: ## %else10
3164 ; AVX512VLDQ-NEXT: testb $64, %al
3165 ; AVX512VLDQ-NEXT: jne LBB15_13
3166 ; AVX512VLDQ-NEXT: LBB15_14: ## %else12
3167 ; AVX512VLDQ-NEXT: testb %al, %al
3168 ; AVX512VLDQ-NEXT: js LBB15_15
3169 ; AVX512VLDQ-NEXT: LBB15_16: ## %else14
3170 ; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
3171 ; AVX512VLDQ-NEXT: jne LBB15_17
3172 ; AVX512VLDQ-NEXT: LBB15_18: ## %else16
3173 ; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200
3174 ; AVX512VLDQ-NEXT: jne LBB15_19
3175 ; AVX512VLDQ-NEXT: LBB15_20: ## %else18
3176 ; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400
3177 ; AVX512VLDQ-NEXT: jne LBB15_21
3178 ; AVX512VLDQ-NEXT: LBB15_22: ## %else20
3179 ; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800
3180 ; AVX512VLDQ-NEXT: jne LBB15_23
3181 ; AVX512VLDQ-NEXT: LBB15_24: ## %else22
3182 ; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000
3183 ; AVX512VLDQ-NEXT: jne LBB15_25
3184 ; AVX512VLDQ-NEXT: LBB15_26: ## %else24
3185 ; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000
3186 ; AVX512VLDQ-NEXT: jne LBB15_27
3187 ; AVX512VLDQ-NEXT: LBB15_28: ## %else26
3188 ; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
3189 ; AVX512VLDQ-NEXT: jne LBB15_29
3190 ; AVX512VLDQ-NEXT: LBB15_30: ## %else28
3191 ; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
3192 ; AVX512VLDQ-NEXT: jne LBB15_31
3193 ; AVX512VLDQ-NEXT: LBB15_32: ## %else30
3194 ; AVX512VLDQ-NEXT: retq
3195 ; AVX512VLDQ-NEXT: LBB15_1: ## %cond.store
3196 ; AVX512VLDQ-NEXT: vpextrb $0, %xmm1, (%rdi)
3197 ; AVX512VLDQ-NEXT: testb $2, %al
3198 ; AVX512VLDQ-NEXT: je LBB15_4
3199 ; AVX512VLDQ-NEXT: LBB15_3: ## %cond.store1
3200 ; AVX512VLDQ-NEXT: vpextrb $1, %xmm1, 1(%rdi)
3201 ; AVX512VLDQ-NEXT: testb $4, %al
3202 ; AVX512VLDQ-NEXT: je LBB15_6
3203 ; AVX512VLDQ-NEXT: LBB15_5: ## %cond.store3
3204 ; AVX512VLDQ-NEXT: vpextrb $2, %xmm1, 2(%rdi)
3205 ; AVX512VLDQ-NEXT: testb $8, %al
3206 ; AVX512VLDQ-NEXT: je LBB15_8
3207 ; AVX512VLDQ-NEXT: LBB15_7: ## %cond.store5
3208 ; AVX512VLDQ-NEXT: vpextrb $3, %xmm1, 3(%rdi)
3209 ; AVX512VLDQ-NEXT: testb $16, %al
3210 ; AVX512VLDQ-NEXT: je LBB15_10
3211 ; AVX512VLDQ-NEXT: LBB15_9: ## %cond.store7
3212 ; AVX512VLDQ-NEXT: vpextrb $4, %xmm1, 4(%rdi)
3213 ; AVX512VLDQ-NEXT: testb $32, %al
3214 ; AVX512VLDQ-NEXT: je LBB15_12
3215 ; AVX512VLDQ-NEXT: LBB15_11: ## %cond.store9
3216 ; AVX512VLDQ-NEXT: vpextrb $5, %xmm1, 5(%rdi)
3217 ; AVX512VLDQ-NEXT: testb $64, %al
3218 ; AVX512VLDQ-NEXT: je LBB15_14
3219 ; AVX512VLDQ-NEXT: LBB15_13: ## %cond.store11
3220 ; AVX512VLDQ-NEXT: vpextrb $6, %xmm1, 6(%rdi)
3221 ; AVX512VLDQ-NEXT: testb %al, %al
3222 ; AVX512VLDQ-NEXT: jns LBB15_16
3223 ; AVX512VLDQ-NEXT: LBB15_15: ## %cond.store13
3224 ; AVX512VLDQ-NEXT: vpextrb $7, %xmm1, 7(%rdi)
3225 ; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
3226 ; AVX512VLDQ-NEXT: je LBB15_18
3227 ; AVX512VLDQ-NEXT: LBB15_17: ## %cond.store15
3228 ; AVX512VLDQ-NEXT: vpextrb $8, %xmm1, 8(%rdi)
3229 ; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200
3230 ; AVX512VLDQ-NEXT: je LBB15_20
3231 ; AVX512VLDQ-NEXT: LBB15_19: ## %cond.store17
3232 ; AVX512VLDQ-NEXT: vpextrb $9, %xmm1, 9(%rdi)
3233 ; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400
3234 ; AVX512VLDQ-NEXT: je LBB15_22
3235 ; AVX512VLDQ-NEXT: LBB15_21: ## %cond.store19
3236 ; AVX512VLDQ-NEXT: vpextrb $10, %xmm1, 10(%rdi)
3237 ; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800
3238 ; AVX512VLDQ-NEXT: je LBB15_24
3239 ; AVX512VLDQ-NEXT: LBB15_23: ## %cond.store21
3240 ; AVX512VLDQ-NEXT: vpextrb $11, %xmm1, 11(%rdi)
3241 ; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000
3242 ; AVX512VLDQ-NEXT: je LBB15_26
3243 ; AVX512VLDQ-NEXT: LBB15_25: ## %cond.store23
3244 ; AVX512VLDQ-NEXT: vpextrb $12, %xmm1, 12(%rdi)
3245 ; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000
3246 ; AVX512VLDQ-NEXT: je LBB15_28
3247 ; AVX512VLDQ-NEXT: LBB15_27: ## %cond.store25
3248 ; AVX512VLDQ-NEXT: vpextrb $13, %xmm1, 13(%rdi)
3249 ; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
3250 ; AVX512VLDQ-NEXT: je LBB15_30
3251 ; AVX512VLDQ-NEXT: LBB15_29: ## %cond.store27
3252 ; AVX512VLDQ-NEXT: vpextrb $14, %xmm1, 14(%rdi)
3253 ; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000
3254 ; AVX512VLDQ-NEXT: je LBB15_32
3255 ; AVX512VLDQ-NEXT: LBB15_31: ## %cond.store29
3256 ; AVX512VLDQ-NEXT: vpextrb $15, %xmm1, 15(%rdi)
3257 ; AVX512VLDQ-NEXT: retq
3259 ; AVX512VLBW-LABEL: store_v16i8_v16i8:
3260 ; AVX512VLBW: ## %bb.0:
3261 ; AVX512VLBW-NEXT: vptestnmb %xmm0, %xmm0, %k1
3262 ; AVX512VLBW-NEXT: vmovdqu8 %xmm1, (%rdi) {%k1}
3263 ; AVX512VLBW-NEXT: retq
3265 ; X86-AVX512-LABEL: store_v16i8_v16i8:
3266 ; X86-AVX512: ## %bb.0:
3267 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
3268 ; X86-AVX512-NEXT: vptestnmb %xmm0, %xmm0, %k1
3269 ; X86-AVX512-NEXT: vmovdqu8 %xmm1, (%eax) {%k1}
3270 ; X86-AVX512-NEXT: retl
3271 %mask = icmp eq <16 x i8> %trigger, zeroinitializer
3272 call void @llvm.masked.store.v16i8.p0(<16 x i8> %val, ptr %addr, i32 4, <16 x i1> %mask)
3276 define void @store_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %val) {
3277 ; SSE2-LABEL: store_v32i8_v32i8:
3279 ; SSE2-NEXT: pxor %xmm4, %xmm4
3280 ; SSE2-NEXT: pcmpeqb %xmm4, %xmm0
3281 ; SSE2-NEXT: pmovmskb %xmm0, %ecx
3282 ; SSE2-NEXT: pcmpeqb %xmm4, %xmm1
3283 ; SSE2-NEXT: pmovmskb %xmm1, %eax
3284 ; SSE2-NEXT: shll $16, %eax
3285 ; SSE2-NEXT: orl %ecx, %eax
3286 ; SSE2-NEXT: testb $1, %al
3287 ; SSE2-NEXT: movd %xmm2, %ecx
3288 ; SSE2-NEXT: jne LBB16_1
3289 ; SSE2-NEXT: ## %bb.2: ## %else
3290 ; SSE2-NEXT: testb $2, %al
3291 ; SSE2-NEXT: jne LBB16_3
3292 ; SSE2-NEXT: LBB16_4: ## %else2
3293 ; SSE2-NEXT: testb $4, %al
3294 ; SSE2-NEXT: jne LBB16_5
3295 ; SSE2-NEXT: LBB16_6: ## %else4
3296 ; SSE2-NEXT: testb $8, %al
3297 ; SSE2-NEXT: je LBB16_8
3298 ; SSE2-NEXT: LBB16_7: ## %cond.store5
3299 ; SSE2-NEXT: shrl $24, %ecx
3300 ; SSE2-NEXT: movb %cl, 3(%rdi)
3301 ; SSE2-NEXT: LBB16_8: ## %else6
3302 ; SSE2-NEXT: testb $16, %al
3303 ; SSE2-NEXT: pextrw $2, %xmm2, %ecx
3304 ; SSE2-NEXT: je LBB16_10
3305 ; SSE2-NEXT: ## %bb.9: ## %cond.store7
3306 ; SSE2-NEXT: movb %cl, 4(%rdi)
3307 ; SSE2-NEXT: LBB16_10: ## %else8
3308 ; SSE2-NEXT: testb $32, %al
3309 ; SSE2-NEXT: je LBB16_12
3310 ; SSE2-NEXT: ## %bb.11: ## %cond.store9
3311 ; SSE2-NEXT: movb %ch, 5(%rdi)
3312 ; SSE2-NEXT: LBB16_12: ## %else10
3313 ; SSE2-NEXT: testb $64, %al
3314 ; SSE2-NEXT: pextrw $3, %xmm2, %ecx
3315 ; SSE2-NEXT: je LBB16_14
3316 ; SSE2-NEXT: ## %bb.13: ## %cond.store11
3317 ; SSE2-NEXT: movb %cl, 6(%rdi)
3318 ; SSE2-NEXT: LBB16_14: ## %else12
3319 ; SSE2-NEXT: testb %al, %al
3320 ; SSE2-NEXT: jns LBB16_16
3321 ; SSE2-NEXT: ## %bb.15: ## %cond.store13
3322 ; SSE2-NEXT: movb %ch, 7(%rdi)
3323 ; SSE2-NEXT: LBB16_16: ## %else14
3324 ; SSE2-NEXT: testl $256, %eax ## imm = 0x100
3325 ; SSE2-NEXT: pextrw $4, %xmm2, %ecx
3326 ; SSE2-NEXT: je LBB16_18
3327 ; SSE2-NEXT: ## %bb.17: ## %cond.store15
3328 ; SSE2-NEXT: movb %cl, 8(%rdi)
3329 ; SSE2-NEXT: LBB16_18: ## %else16
3330 ; SSE2-NEXT: testl $512, %eax ## imm = 0x200
3331 ; SSE2-NEXT: je LBB16_20
3332 ; SSE2-NEXT: ## %bb.19: ## %cond.store17
3333 ; SSE2-NEXT: movb %ch, 9(%rdi)
3334 ; SSE2-NEXT: LBB16_20: ## %else18
3335 ; SSE2-NEXT: testl $1024, %eax ## imm = 0x400
3336 ; SSE2-NEXT: pextrw $5, %xmm2, %ecx
3337 ; SSE2-NEXT: je LBB16_22
3338 ; SSE2-NEXT: ## %bb.21: ## %cond.store19
3339 ; SSE2-NEXT: movb %cl, 10(%rdi)
3340 ; SSE2-NEXT: LBB16_22: ## %else20
3341 ; SSE2-NEXT: testl $2048, %eax ## imm = 0x800
3342 ; SSE2-NEXT: je LBB16_24
3343 ; SSE2-NEXT: ## %bb.23: ## %cond.store21
3344 ; SSE2-NEXT: movb %ch, 11(%rdi)
3345 ; SSE2-NEXT: LBB16_24: ## %else22
3346 ; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000
3347 ; SSE2-NEXT: pextrw $6, %xmm2, %ecx
3348 ; SSE2-NEXT: je LBB16_26
3349 ; SSE2-NEXT: ## %bb.25: ## %cond.store23
3350 ; SSE2-NEXT: movb %cl, 12(%rdi)
3351 ; SSE2-NEXT: LBB16_26: ## %else24
3352 ; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000
3353 ; SSE2-NEXT: je LBB16_28
3354 ; SSE2-NEXT: ## %bb.27: ## %cond.store25
3355 ; SSE2-NEXT: movb %ch, 13(%rdi)
3356 ; SSE2-NEXT: LBB16_28: ## %else26
3357 ; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000
3358 ; SSE2-NEXT: pextrw $7, %xmm2, %ecx
3359 ; SSE2-NEXT: je LBB16_30
3360 ; SSE2-NEXT: ## %bb.29: ## %cond.store27
3361 ; SSE2-NEXT: movb %cl, 14(%rdi)
3362 ; SSE2-NEXT: LBB16_30: ## %else28
3363 ; SSE2-NEXT: testw %ax, %ax
3364 ; SSE2-NEXT: jns LBB16_32
3365 ; SSE2-NEXT: ## %bb.31: ## %cond.store29
3366 ; SSE2-NEXT: movb %ch, 15(%rdi)
3367 ; SSE2-NEXT: LBB16_32: ## %else30
3368 ; SSE2-NEXT: testl $65536, %eax ## imm = 0x10000
3369 ; SSE2-NEXT: movd %xmm3, %ecx
3370 ; SSE2-NEXT: jne LBB16_33
3371 ; SSE2-NEXT: ## %bb.34: ## %else32
3372 ; SSE2-NEXT: testl $131072, %eax ## imm = 0x20000
3373 ; SSE2-NEXT: jne LBB16_35
3374 ; SSE2-NEXT: LBB16_36: ## %else34
3375 ; SSE2-NEXT: testl $262144, %eax ## imm = 0x40000
3376 ; SSE2-NEXT: jne LBB16_37
3377 ; SSE2-NEXT: LBB16_38: ## %else36
3378 ; SSE2-NEXT: testl $524288, %eax ## imm = 0x80000
3379 ; SSE2-NEXT: je LBB16_40
3380 ; SSE2-NEXT: LBB16_39: ## %cond.store37
3381 ; SSE2-NEXT: shrl $24, %ecx
3382 ; SSE2-NEXT: movb %cl, 19(%rdi)
3383 ; SSE2-NEXT: LBB16_40: ## %else38
3384 ; SSE2-NEXT: testl $1048576, %eax ## imm = 0x100000
3385 ; SSE2-NEXT: pextrw $2, %xmm3, %ecx
3386 ; SSE2-NEXT: je LBB16_42
3387 ; SSE2-NEXT: ## %bb.41: ## %cond.store39
3388 ; SSE2-NEXT: movb %cl, 20(%rdi)
3389 ; SSE2-NEXT: LBB16_42: ## %else40
3390 ; SSE2-NEXT: testl $2097152, %eax ## imm = 0x200000
3391 ; SSE2-NEXT: je LBB16_44
3392 ; SSE2-NEXT: ## %bb.43: ## %cond.store41
3393 ; SSE2-NEXT: movb %ch, 21(%rdi)
3394 ; SSE2-NEXT: LBB16_44: ## %else42
3395 ; SSE2-NEXT: testl $4194304, %eax ## imm = 0x400000
3396 ; SSE2-NEXT: pextrw $3, %xmm3, %ecx
3397 ; SSE2-NEXT: je LBB16_46
3398 ; SSE2-NEXT: ## %bb.45: ## %cond.store43
3399 ; SSE2-NEXT: movb %cl, 22(%rdi)
3400 ; SSE2-NEXT: LBB16_46: ## %else44
3401 ; SSE2-NEXT: testl $8388608, %eax ## imm = 0x800000
3402 ; SSE2-NEXT: je LBB16_48
3403 ; SSE2-NEXT: ## %bb.47: ## %cond.store45
3404 ; SSE2-NEXT: movb %ch, 23(%rdi)
3405 ; SSE2-NEXT: LBB16_48: ## %else46
3406 ; SSE2-NEXT: testl $16777216, %eax ## imm = 0x1000000
3407 ; SSE2-NEXT: pextrw $4, %xmm3, %ecx
3408 ; SSE2-NEXT: je LBB16_50
3409 ; SSE2-NEXT: ## %bb.49: ## %cond.store47
3410 ; SSE2-NEXT: movb %cl, 24(%rdi)
3411 ; SSE2-NEXT: LBB16_50: ## %else48
3412 ; SSE2-NEXT: testl $33554432, %eax ## imm = 0x2000000
3413 ; SSE2-NEXT: je LBB16_52
3414 ; SSE2-NEXT: ## %bb.51: ## %cond.store49
3415 ; SSE2-NEXT: movb %ch, 25(%rdi)
3416 ; SSE2-NEXT: LBB16_52: ## %else50
3417 ; SSE2-NEXT: testl $67108864, %eax ## imm = 0x4000000
3418 ; SSE2-NEXT: pextrw $5, %xmm3, %ecx
3419 ; SSE2-NEXT: je LBB16_54
3420 ; SSE2-NEXT: ## %bb.53: ## %cond.store51
3421 ; SSE2-NEXT: movb %cl, 26(%rdi)
3422 ; SSE2-NEXT: LBB16_54: ## %else52
3423 ; SSE2-NEXT: testl $134217728, %eax ## imm = 0x8000000
3424 ; SSE2-NEXT: je LBB16_56
3425 ; SSE2-NEXT: ## %bb.55: ## %cond.store53
3426 ; SSE2-NEXT: movb %ch, 27(%rdi)
3427 ; SSE2-NEXT: LBB16_56: ## %else54
3428 ; SSE2-NEXT: testl $268435456, %eax ## imm = 0x10000000
3429 ; SSE2-NEXT: pextrw $6, %xmm3, %ecx
3430 ; SSE2-NEXT: je LBB16_58
3431 ; SSE2-NEXT: ## %bb.57: ## %cond.store55
3432 ; SSE2-NEXT: movb %cl, 28(%rdi)
3433 ; SSE2-NEXT: LBB16_58: ## %else56
3434 ; SSE2-NEXT: testl $536870912, %eax ## imm = 0x20000000
3435 ; SSE2-NEXT: je LBB16_60
3436 ; SSE2-NEXT: ## %bb.59: ## %cond.store57
3437 ; SSE2-NEXT: movb %ch, 29(%rdi)
3438 ; SSE2-NEXT: LBB16_60: ## %else58
3439 ; SSE2-NEXT: testl $1073741824, %eax ## imm = 0x40000000
3440 ; SSE2-NEXT: pextrw $7, %xmm3, %ecx
3441 ; SSE2-NEXT: jne LBB16_61
3442 ; SSE2-NEXT: ## %bb.62: ## %else60
3443 ; SSE2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
3444 ; SSE2-NEXT: jne LBB16_63
3445 ; SSE2-NEXT: LBB16_64: ## %else62
3447 ; SSE2-NEXT: LBB16_1: ## %cond.store
3448 ; SSE2-NEXT: movb %cl, (%rdi)
3449 ; SSE2-NEXT: testb $2, %al
3450 ; SSE2-NEXT: je LBB16_4
3451 ; SSE2-NEXT: LBB16_3: ## %cond.store1
3452 ; SSE2-NEXT: movb %ch, 1(%rdi)
3453 ; SSE2-NEXT: testb $4, %al
3454 ; SSE2-NEXT: je LBB16_6
3455 ; SSE2-NEXT: LBB16_5: ## %cond.store3
3456 ; SSE2-NEXT: movl %ecx, %edx
3457 ; SSE2-NEXT: shrl $16, %edx
3458 ; SSE2-NEXT: movb %dl, 2(%rdi)
3459 ; SSE2-NEXT: testb $8, %al
3460 ; SSE2-NEXT: jne LBB16_7
3461 ; SSE2-NEXT: jmp LBB16_8
3462 ; SSE2-NEXT: LBB16_33: ## %cond.store31
3463 ; SSE2-NEXT: movb %cl, 16(%rdi)
3464 ; SSE2-NEXT: testl $131072, %eax ## imm = 0x20000
3465 ; SSE2-NEXT: je LBB16_36
3466 ; SSE2-NEXT: LBB16_35: ## %cond.store33
3467 ; SSE2-NEXT: movb %ch, 17(%rdi)
3468 ; SSE2-NEXT: testl $262144, %eax ## imm = 0x40000
3469 ; SSE2-NEXT: je LBB16_38
3470 ; SSE2-NEXT: LBB16_37: ## %cond.store35
3471 ; SSE2-NEXT: movl %ecx, %edx
3472 ; SSE2-NEXT: shrl $16, %edx
3473 ; SSE2-NEXT: movb %dl, 18(%rdi)
3474 ; SSE2-NEXT: testl $524288, %eax ## imm = 0x80000
3475 ; SSE2-NEXT: jne LBB16_39
3476 ; SSE2-NEXT: jmp LBB16_40
3477 ; SSE2-NEXT: LBB16_61: ## %cond.store59
3478 ; SSE2-NEXT: movb %cl, 30(%rdi)
3479 ; SSE2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
3480 ; SSE2-NEXT: je LBB16_64
3481 ; SSE2-NEXT: LBB16_63: ## %cond.store61
3482 ; SSE2-NEXT: movb %ch, 31(%rdi)
3485 ; SSE4-LABEL: store_v32i8_v32i8:
3487 ; SSE4-NEXT: pxor %xmm4, %xmm4
3488 ; SSE4-NEXT: pcmpeqb %xmm4, %xmm0
3489 ; SSE4-NEXT: pmovmskb %xmm0, %ecx
3490 ; SSE4-NEXT: pcmpeqb %xmm4, %xmm1
3491 ; SSE4-NEXT: pmovmskb %xmm1, %eax
3492 ; SSE4-NEXT: shll $16, %eax
3493 ; SSE4-NEXT: orl %ecx, %eax
3494 ; SSE4-NEXT: testb $1, %al
3495 ; SSE4-NEXT: jne LBB16_1
3496 ; SSE4-NEXT: ## %bb.2: ## %else
3497 ; SSE4-NEXT: testb $2, %al
3498 ; SSE4-NEXT: jne LBB16_3
3499 ; SSE4-NEXT: LBB16_4: ## %else2
3500 ; SSE4-NEXT: testb $4, %al
3501 ; SSE4-NEXT: jne LBB16_5
3502 ; SSE4-NEXT: LBB16_6: ## %else4
3503 ; SSE4-NEXT: testb $8, %al
3504 ; SSE4-NEXT: jne LBB16_7
3505 ; SSE4-NEXT: LBB16_8: ## %else6
3506 ; SSE4-NEXT: testb $16, %al
3507 ; SSE4-NEXT: jne LBB16_9
3508 ; SSE4-NEXT: LBB16_10: ## %else8
3509 ; SSE4-NEXT: testb $32, %al
3510 ; SSE4-NEXT: jne LBB16_11
3511 ; SSE4-NEXT: LBB16_12: ## %else10
3512 ; SSE4-NEXT: testb $64, %al
3513 ; SSE4-NEXT: jne LBB16_13
3514 ; SSE4-NEXT: LBB16_14: ## %else12
3515 ; SSE4-NEXT: testb %al, %al
3516 ; SSE4-NEXT: js LBB16_15
3517 ; SSE4-NEXT: LBB16_16: ## %else14
3518 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
3519 ; SSE4-NEXT: jne LBB16_17
3520 ; SSE4-NEXT: LBB16_18: ## %else16
3521 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
3522 ; SSE4-NEXT: jne LBB16_19
3523 ; SSE4-NEXT: LBB16_20: ## %else18
3524 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
3525 ; SSE4-NEXT: jne LBB16_21
3526 ; SSE4-NEXT: LBB16_22: ## %else20
3527 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
3528 ; SSE4-NEXT: jne LBB16_23
3529 ; SSE4-NEXT: LBB16_24: ## %else22
3530 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
3531 ; SSE4-NEXT: jne LBB16_25
3532 ; SSE4-NEXT: LBB16_26: ## %else24
3533 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
3534 ; SSE4-NEXT: jne LBB16_27
3535 ; SSE4-NEXT: LBB16_28: ## %else26
3536 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
3537 ; SSE4-NEXT: jne LBB16_29
3538 ; SSE4-NEXT: LBB16_30: ## %else28
3539 ; SSE4-NEXT: testw %ax, %ax
3540 ; SSE4-NEXT: js LBB16_31
3541 ; SSE4-NEXT: LBB16_32: ## %else30
3542 ; SSE4-NEXT: testl $65536, %eax ## imm = 0x10000
3543 ; SSE4-NEXT: jne LBB16_33
3544 ; SSE4-NEXT: LBB16_34: ## %else32
3545 ; SSE4-NEXT: testl $131072, %eax ## imm = 0x20000
3546 ; SSE4-NEXT: jne LBB16_35
3547 ; SSE4-NEXT: LBB16_36: ## %else34
3548 ; SSE4-NEXT: testl $262144, %eax ## imm = 0x40000
3549 ; SSE4-NEXT: jne LBB16_37
3550 ; SSE4-NEXT: LBB16_38: ## %else36
3551 ; SSE4-NEXT: testl $524288, %eax ## imm = 0x80000
3552 ; SSE4-NEXT: jne LBB16_39
3553 ; SSE4-NEXT: LBB16_40: ## %else38
3554 ; SSE4-NEXT: testl $1048576, %eax ## imm = 0x100000
3555 ; SSE4-NEXT: jne LBB16_41
3556 ; SSE4-NEXT: LBB16_42: ## %else40
3557 ; SSE4-NEXT: testl $2097152, %eax ## imm = 0x200000
3558 ; SSE4-NEXT: jne LBB16_43
3559 ; SSE4-NEXT: LBB16_44: ## %else42
3560 ; SSE4-NEXT: testl $4194304, %eax ## imm = 0x400000
3561 ; SSE4-NEXT: jne LBB16_45
3562 ; SSE4-NEXT: LBB16_46: ## %else44
3563 ; SSE4-NEXT: testl $8388608, %eax ## imm = 0x800000
3564 ; SSE4-NEXT: jne LBB16_47
3565 ; SSE4-NEXT: LBB16_48: ## %else46
3566 ; SSE4-NEXT: testl $16777216, %eax ## imm = 0x1000000
3567 ; SSE4-NEXT: jne LBB16_49
3568 ; SSE4-NEXT: LBB16_50: ## %else48
3569 ; SSE4-NEXT: testl $33554432, %eax ## imm = 0x2000000
3570 ; SSE4-NEXT: jne LBB16_51
3571 ; SSE4-NEXT: LBB16_52: ## %else50
3572 ; SSE4-NEXT: testl $67108864, %eax ## imm = 0x4000000
3573 ; SSE4-NEXT: jne LBB16_53
3574 ; SSE4-NEXT: LBB16_54: ## %else52
3575 ; SSE4-NEXT: testl $134217728, %eax ## imm = 0x8000000
3576 ; SSE4-NEXT: jne LBB16_55
3577 ; SSE4-NEXT: LBB16_56: ## %else54
3578 ; SSE4-NEXT: testl $268435456, %eax ## imm = 0x10000000
3579 ; SSE4-NEXT: jne LBB16_57
3580 ; SSE4-NEXT: LBB16_58: ## %else56
3581 ; SSE4-NEXT: testl $536870912, %eax ## imm = 0x20000000
3582 ; SSE4-NEXT: jne LBB16_59
3583 ; SSE4-NEXT: LBB16_60: ## %else58
3584 ; SSE4-NEXT: testl $1073741824, %eax ## imm = 0x40000000
3585 ; SSE4-NEXT: jne LBB16_61
3586 ; SSE4-NEXT: LBB16_62: ## %else60
3587 ; SSE4-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
3588 ; SSE4-NEXT: jne LBB16_63
3589 ; SSE4-NEXT: LBB16_64: ## %else62
3591 ; SSE4-NEXT: LBB16_1: ## %cond.store
3592 ; SSE4-NEXT: pextrb $0, %xmm2, (%rdi)
3593 ; SSE4-NEXT: testb $2, %al
3594 ; SSE4-NEXT: je LBB16_4
3595 ; SSE4-NEXT: LBB16_3: ## %cond.store1
3596 ; SSE4-NEXT: pextrb $1, %xmm2, 1(%rdi)
3597 ; SSE4-NEXT: testb $4, %al
3598 ; SSE4-NEXT: je LBB16_6
3599 ; SSE4-NEXT: LBB16_5: ## %cond.store3
3600 ; SSE4-NEXT: pextrb $2, %xmm2, 2(%rdi)
3601 ; SSE4-NEXT: testb $8, %al
3602 ; SSE4-NEXT: je LBB16_8
3603 ; SSE4-NEXT: LBB16_7: ## %cond.store5
3604 ; SSE4-NEXT: pextrb $3, %xmm2, 3(%rdi)
3605 ; SSE4-NEXT: testb $16, %al
3606 ; SSE4-NEXT: je LBB16_10
3607 ; SSE4-NEXT: LBB16_9: ## %cond.store7
3608 ; SSE4-NEXT: pextrb $4, %xmm2, 4(%rdi)
3609 ; SSE4-NEXT: testb $32, %al
3610 ; SSE4-NEXT: je LBB16_12
3611 ; SSE4-NEXT: LBB16_11: ## %cond.store9
3612 ; SSE4-NEXT: pextrb $5, %xmm2, 5(%rdi)
3613 ; SSE4-NEXT: testb $64, %al
3614 ; SSE4-NEXT: je LBB16_14
3615 ; SSE4-NEXT: LBB16_13: ## %cond.store11
3616 ; SSE4-NEXT: pextrb $6, %xmm2, 6(%rdi)
3617 ; SSE4-NEXT: testb %al, %al
3618 ; SSE4-NEXT: jns LBB16_16
3619 ; SSE4-NEXT: LBB16_15: ## %cond.store13
3620 ; SSE4-NEXT: pextrb $7, %xmm2, 7(%rdi)
3621 ; SSE4-NEXT: testl $256, %eax ## imm = 0x100
3622 ; SSE4-NEXT: je LBB16_18
3623 ; SSE4-NEXT: LBB16_17: ## %cond.store15
3624 ; SSE4-NEXT: pextrb $8, %xmm2, 8(%rdi)
3625 ; SSE4-NEXT: testl $512, %eax ## imm = 0x200
3626 ; SSE4-NEXT: je LBB16_20
3627 ; SSE4-NEXT: LBB16_19: ## %cond.store17
3628 ; SSE4-NEXT: pextrb $9, %xmm2, 9(%rdi)
3629 ; SSE4-NEXT: testl $1024, %eax ## imm = 0x400
3630 ; SSE4-NEXT: je LBB16_22
3631 ; SSE4-NEXT: LBB16_21: ## %cond.store19
3632 ; SSE4-NEXT: pextrb $10, %xmm2, 10(%rdi)
3633 ; SSE4-NEXT: testl $2048, %eax ## imm = 0x800
3634 ; SSE4-NEXT: je LBB16_24
3635 ; SSE4-NEXT: LBB16_23: ## %cond.store21
3636 ; SSE4-NEXT: pextrb $11, %xmm2, 11(%rdi)
3637 ; SSE4-NEXT: testl $4096, %eax ## imm = 0x1000
3638 ; SSE4-NEXT: je LBB16_26
3639 ; SSE4-NEXT: LBB16_25: ## %cond.store23
3640 ; SSE4-NEXT: pextrb $12, %xmm2, 12(%rdi)
3641 ; SSE4-NEXT: testl $8192, %eax ## imm = 0x2000
3642 ; SSE4-NEXT: je LBB16_28
3643 ; SSE4-NEXT: LBB16_27: ## %cond.store25
3644 ; SSE4-NEXT: pextrb $13, %xmm2, 13(%rdi)
3645 ; SSE4-NEXT: testl $16384, %eax ## imm = 0x4000
3646 ; SSE4-NEXT: je LBB16_30
3647 ; SSE4-NEXT: LBB16_29: ## %cond.store27
3648 ; SSE4-NEXT: pextrb $14, %xmm2, 14(%rdi)
3649 ; SSE4-NEXT: testw %ax, %ax
3650 ; SSE4-NEXT: jns LBB16_32
3651 ; SSE4-NEXT: LBB16_31: ## %cond.store29
3652 ; SSE4-NEXT: pextrb $15, %xmm2, 15(%rdi)
3653 ; SSE4-NEXT: testl $65536, %eax ## imm = 0x10000
3654 ; SSE4-NEXT: je LBB16_34
3655 ; SSE4-NEXT: LBB16_33: ## %cond.store31
3656 ; SSE4-NEXT: pextrb $0, %xmm3, 16(%rdi)
3657 ; SSE4-NEXT: testl $131072, %eax ## imm = 0x20000
3658 ; SSE4-NEXT: je LBB16_36
3659 ; SSE4-NEXT: LBB16_35: ## %cond.store33
3660 ; SSE4-NEXT: pextrb $1, %xmm3, 17(%rdi)
3661 ; SSE4-NEXT: testl $262144, %eax ## imm = 0x40000
3662 ; SSE4-NEXT: je LBB16_38
3663 ; SSE4-NEXT: LBB16_37: ## %cond.store35
3664 ; SSE4-NEXT: pextrb $2, %xmm3, 18(%rdi)
3665 ; SSE4-NEXT: testl $524288, %eax ## imm = 0x80000
3666 ; SSE4-NEXT: je LBB16_40
3667 ; SSE4-NEXT: LBB16_39: ## %cond.store37
3668 ; SSE4-NEXT: pextrb $3, %xmm3, 19(%rdi)
3669 ; SSE4-NEXT: testl $1048576, %eax ## imm = 0x100000
3670 ; SSE4-NEXT: je LBB16_42
3671 ; SSE4-NEXT: LBB16_41: ## %cond.store39
3672 ; SSE4-NEXT: pextrb $4, %xmm3, 20(%rdi)
3673 ; SSE4-NEXT: testl $2097152, %eax ## imm = 0x200000
3674 ; SSE4-NEXT: je LBB16_44
3675 ; SSE4-NEXT: LBB16_43: ## %cond.store41
3676 ; SSE4-NEXT: pextrb $5, %xmm3, 21(%rdi)
3677 ; SSE4-NEXT: testl $4194304, %eax ## imm = 0x400000
3678 ; SSE4-NEXT: je LBB16_46
3679 ; SSE4-NEXT: LBB16_45: ## %cond.store43
3680 ; SSE4-NEXT: pextrb $6, %xmm3, 22(%rdi)
3681 ; SSE4-NEXT: testl $8388608, %eax ## imm = 0x800000
3682 ; SSE4-NEXT: je LBB16_48
3683 ; SSE4-NEXT: LBB16_47: ## %cond.store45
3684 ; SSE4-NEXT: pextrb $7, %xmm3, 23(%rdi)
3685 ; SSE4-NEXT: testl $16777216, %eax ## imm = 0x1000000
3686 ; SSE4-NEXT: je LBB16_50
3687 ; SSE4-NEXT: LBB16_49: ## %cond.store47
3688 ; SSE4-NEXT: pextrb $8, %xmm3, 24(%rdi)
3689 ; SSE4-NEXT: testl $33554432, %eax ## imm = 0x2000000
3690 ; SSE4-NEXT: je LBB16_52
3691 ; SSE4-NEXT: LBB16_51: ## %cond.store49
3692 ; SSE4-NEXT: pextrb $9, %xmm3, 25(%rdi)
3693 ; SSE4-NEXT: testl $67108864, %eax ## imm = 0x4000000
3694 ; SSE4-NEXT: je LBB16_54
3695 ; SSE4-NEXT: LBB16_53: ## %cond.store51
3696 ; SSE4-NEXT: pextrb $10, %xmm3, 26(%rdi)
3697 ; SSE4-NEXT: testl $134217728, %eax ## imm = 0x8000000
3698 ; SSE4-NEXT: je LBB16_56
3699 ; SSE4-NEXT: LBB16_55: ## %cond.store53
3700 ; SSE4-NEXT: pextrb $11, %xmm3, 27(%rdi)
3701 ; SSE4-NEXT: testl $268435456, %eax ## imm = 0x10000000
3702 ; SSE4-NEXT: je LBB16_58
3703 ; SSE4-NEXT: LBB16_57: ## %cond.store55
3704 ; SSE4-NEXT: pextrb $12, %xmm3, 28(%rdi)
3705 ; SSE4-NEXT: testl $536870912, %eax ## imm = 0x20000000
3706 ; SSE4-NEXT: je LBB16_60
3707 ; SSE4-NEXT: LBB16_59: ## %cond.store57
3708 ; SSE4-NEXT: pextrb $13, %xmm3, 29(%rdi)
3709 ; SSE4-NEXT: testl $1073741824, %eax ## imm = 0x40000000
3710 ; SSE4-NEXT: je LBB16_62
3711 ; SSE4-NEXT: LBB16_61: ## %cond.store59
3712 ; SSE4-NEXT: pextrb $14, %xmm3, 30(%rdi)
3713 ; SSE4-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
3714 ; SSE4-NEXT: je LBB16_64
3715 ; SSE4-NEXT: LBB16_63: ## %cond.store61
3716 ; SSE4-NEXT: pextrb $15, %xmm3, 31(%rdi)
3719 ; AVX1-LABEL: store_v32i8_v32i8:
3721 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
3722 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm3
3723 ; AVX1-NEXT: vpmovmskb %xmm3, %ecx
3724 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
3725 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
3726 ; AVX1-NEXT: vpmovmskb %xmm0, %eax
3727 ; AVX1-NEXT: shll $16, %eax
3728 ; AVX1-NEXT: orl %ecx, %eax
3729 ; AVX1-NEXT: testb $1, %al
3730 ; AVX1-NEXT: jne LBB16_1
3731 ; AVX1-NEXT: ## %bb.2: ## %else
3732 ; AVX1-NEXT: testb $2, %al
3733 ; AVX1-NEXT: jne LBB16_3
3734 ; AVX1-NEXT: LBB16_4: ## %else2
3735 ; AVX1-NEXT: testb $4, %al
3736 ; AVX1-NEXT: jne LBB16_5
3737 ; AVX1-NEXT: LBB16_6: ## %else4
3738 ; AVX1-NEXT: testb $8, %al
3739 ; AVX1-NEXT: jne LBB16_7
3740 ; AVX1-NEXT: LBB16_8: ## %else6
3741 ; AVX1-NEXT: testb $16, %al
3742 ; AVX1-NEXT: jne LBB16_9
3743 ; AVX1-NEXT: LBB16_10: ## %else8
3744 ; AVX1-NEXT: testb $32, %al
3745 ; AVX1-NEXT: jne LBB16_11
3746 ; AVX1-NEXT: LBB16_12: ## %else10
3747 ; AVX1-NEXT: testb $64, %al
3748 ; AVX1-NEXT: jne LBB16_13
3749 ; AVX1-NEXT: LBB16_14: ## %else12
3750 ; AVX1-NEXT: testb %al, %al
3751 ; AVX1-NEXT: js LBB16_15
3752 ; AVX1-NEXT: LBB16_16: ## %else14
3753 ; AVX1-NEXT: testl $256, %eax ## imm = 0x100
3754 ; AVX1-NEXT: jne LBB16_17
3755 ; AVX1-NEXT: LBB16_18: ## %else16
3756 ; AVX1-NEXT: testl $512, %eax ## imm = 0x200
3757 ; AVX1-NEXT: jne LBB16_19
3758 ; AVX1-NEXT: LBB16_20: ## %else18
3759 ; AVX1-NEXT: testl $1024, %eax ## imm = 0x400
3760 ; AVX1-NEXT: jne LBB16_21
3761 ; AVX1-NEXT: LBB16_22: ## %else20
3762 ; AVX1-NEXT: testl $2048, %eax ## imm = 0x800
3763 ; AVX1-NEXT: jne LBB16_23
3764 ; AVX1-NEXT: LBB16_24: ## %else22
3765 ; AVX1-NEXT: testl $4096, %eax ## imm = 0x1000
3766 ; AVX1-NEXT: jne LBB16_25
3767 ; AVX1-NEXT: LBB16_26: ## %else24
3768 ; AVX1-NEXT: testl $8192, %eax ## imm = 0x2000
3769 ; AVX1-NEXT: jne LBB16_27
3770 ; AVX1-NEXT: LBB16_28: ## %else26
3771 ; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
3772 ; AVX1-NEXT: jne LBB16_29
3773 ; AVX1-NEXT: LBB16_30: ## %else28
3774 ; AVX1-NEXT: testw %ax, %ax
3775 ; AVX1-NEXT: jns LBB16_32
3776 ; AVX1-NEXT: LBB16_31: ## %cond.store29
3777 ; AVX1-NEXT: vpextrb $15, %xmm1, 15(%rdi)
3778 ; AVX1-NEXT: LBB16_32: ## %else30
3779 ; AVX1-NEXT: testl $65536, %eax ## imm = 0x10000
3780 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
3781 ; AVX1-NEXT: jne LBB16_33
3782 ; AVX1-NEXT: ## %bb.34: ## %else32
3783 ; AVX1-NEXT: testl $131072, %eax ## imm = 0x20000
3784 ; AVX1-NEXT: jne LBB16_35
3785 ; AVX1-NEXT: LBB16_36: ## %else34
3786 ; AVX1-NEXT: testl $262144, %eax ## imm = 0x40000
3787 ; AVX1-NEXT: jne LBB16_37
3788 ; AVX1-NEXT: LBB16_38: ## %else36
3789 ; AVX1-NEXT: testl $524288, %eax ## imm = 0x80000
3790 ; AVX1-NEXT: jne LBB16_39
3791 ; AVX1-NEXT: LBB16_40: ## %else38
3792 ; AVX1-NEXT: testl $1048576, %eax ## imm = 0x100000
3793 ; AVX1-NEXT: jne LBB16_41
3794 ; AVX1-NEXT: LBB16_42: ## %else40
3795 ; AVX1-NEXT: testl $2097152, %eax ## imm = 0x200000
3796 ; AVX1-NEXT: jne LBB16_43
3797 ; AVX1-NEXT: LBB16_44: ## %else42
3798 ; AVX1-NEXT: testl $4194304, %eax ## imm = 0x400000
3799 ; AVX1-NEXT: jne LBB16_45
3800 ; AVX1-NEXT: LBB16_46: ## %else44
3801 ; AVX1-NEXT: testl $8388608, %eax ## imm = 0x800000
3802 ; AVX1-NEXT: jne LBB16_47
3803 ; AVX1-NEXT: LBB16_48: ## %else46
3804 ; AVX1-NEXT: testl $16777216, %eax ## imm = 0x1000000
3805 ; AVX1-NEXT: jne LBB16_49
3806 ; AVX1-NEXT: LBB16_50: ## %else48
3807 ; AVX1-NEXT: testl $33554432, %eax ## imm = 0x2000000
3808 ; AVX1-NEXT: jne LBB16_51
3809 ; AVX1-NEXT: LBB16_52: ## %else50
3810 ; AVX1-NEXT: testl $67108864, %eax ## imm = 0x4000000
3811 ; AVX1-NEXT: jne LBB16_53
3812 ; AVX1-NEXT: LBB16_54: ## %else52
3813 ; AVX1-NEXT: testl $134217728, %eax ## imm = 0x8000000
3814 ; AVX1-NEXT: jne LBB16_55
3815 ; AVX1-NEXT: LBB16_56: ## %else54
3816 ; AVX1-NEXT: testl $268435456, %eax ## imm = 0x10000000
3817 ; AVX1-NEXT: jne LBB16_57
3818 ; AVX1-NEXT: LBB16_58: ## %else56
3819 ; AVX1-NEXT: testl $536870912, %eax ## imm = 0x20000000
3820 ; AVX1-NEXT: jne LBB16_59
3821 ; AVX1-NEXT: LBB16_60: ## %else58
3822 ; AVX1-NEXT: testl $1073741824, %eax ## imm = 0x40000000
3823 ; AVX1-NEXT: jne LBB16_61
3824 ; AVX1-NEXT: LBB16_62: ## %else60
3825 ; AVX1-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
3826 ; AVX1-NEXT: jne LBB16_63
3827 ; AVX1-NEXT: LBB16_64: ## %else62
3828 ; AVX1-NEXT: vzeroupper
3830 ; AVX1-NEXT: LBB16_1: ## %cond.store
3831 ; AVX1-NEXT: vpextrb $0, %xmm1, (%rdi)
3832 ; AVX1-NEXT: testb $2, %al
3833 ; AVX1-NEXT: je LBB16_4
3834 ; AVX1-NEXT: LBB16_3: ## %cond.store1
3835 ; AVX1-NEXT: vpextrb $1, %xmm1, 1(%rdi)
3836 ; AVX1-NEXT: testb $4, %al
3837 ; AVX1-NEXT: je LBB16_6
3838 ; AVX1-NEXT: LBB16_5: ## %cond.store3
3839 ; AVX1-NEXT: vpextrb $2, %xmm1, 2(%rdi)
3840 ; AVX1-NEXT: testb $8, %al
3841 ; AVX1-NEXT: je LBB16_8
3842 ; AVX1-NEXT: LBB16_7: ## %cond.store5
3843 ; AVX1-NEXT: vpextrb $3, %xmm1, 3(%rdi)
3844 ; AVX1-NEXT: testb $16, %al
3845 ; AVX1-NEXT: je LBB16_10
3846 ; AVX1-NEXT: LBB16_9: ## %cond.store7
3847 ; AVX1-NEXT: vpextrb $4, %xmm1, 4(%rdi)
3848 ; AVX1-NEXT: testb $32, %al
3849 ; AVX1-NEXT: je LBB16_12
3850 ; AVX1-NEXT: LBB16_11: ## %cond.store9
3851 ; AVX1-NEXT: vpextrb $5, %xmm1, 5(%rdi)
3852 ; AVX1-NEXT: testb $64, %al
3853 ; AVX1-NEXT: je LBB16_14
3854 ; AVX1-NEXT: LBB16_13: ## %cond.store11
3855 ; AVX1-NEXT: vpextrb $6, %xmm1, 6(%rdi)
3856 ; AVX1-NEXT: testb %al, %al
3857 ; AVX1-NEXT: jns LBB16_16
3858 ; AVX1-NEXT: LBB16_15: ## %cond.store13
3859 ; AVX1-NEXT: vpextrb $7, %xmm1, 7(%rdi)
3860 ; AVX1-NEXT: testl $256, %eax ## imm = 0x100
3861 ; AVX1-NEXT: je LBB16_18
3862 ; AVX1-NEXT: LBB16_17: ## %cond.store15
3863 ; AVX1-NEXT: vpextrb $8, %xmm1, 8(%rdi)
3864 ; AVX1-NEXT: testl $512, %eax ## imm = 0x200
3865 ; AVX1-NEXT: je LBB16_20
3866 ; AVX1-NEXT: LBB16_19: ## %cond.store17
3867 ; AVX1-NEXT: vpextrb $9, %xmm1, 9(%rdi)
3868 ; AVX1-NEXT: testl $1024, %eax ## imm = 0x400
3869 ; AVX1-NEXT: je LBB16_22
3870 ; AVX1-NEXT: LBB16_21: ## %cond.store19
3871 ; AVX1-NEXT: vpextrb $10, %xmm1, 10(%rdi)
3872 ; AVX1-NEXT: testl $2048, %eax ## imm = 0x800
3873 ; AVX1-NEXT: je LBB16_24
3874 ; AVX1-NEXT: LBB16_23: ## %cond.store21
3875 ; AVX1-NEXT: vpextrb $11, %xmm1, 11(%rdi)
3876 ; AVX1-NEXT: testl $4096, %eax ## imm = 0x1000
3877 ; AVX1-NEXT: je LBB16_26
3878 ; AVX1-NEXT: LBB16_25: ## %cond.store23
3879 ; AVX1-NEXT: vpextrb $12, %xmm1, 12(%rdi)
3880 ; AVX1-NEXT: testl $8192, %eax ## imm = 0x2000
3881 ; AVX1-NEXT: je LBB16_28
3882 ; AVX1-NEXT: LBB16_27: ## %cond.store25
3883 ; AVX1-NEXT: vpextrb $13, %xmm1, 13(%rdi)
3884 ; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000
3885 ; AVX1-NEXT: je LBB16_30
3886 ; AVX1-NEXT: LBB16_29: ## %cond.store27
3887 ; AVX1-NEXT: vpextrb $14, %xmm1, 14(%rdi)
3888 ; AVX1-NEXT: testw %ax, %ax
3889 ; AVX1-NEXT: js LBB16_31
3890 ; AVX1-NEXT: jmp LBB16_32
3891 ; AVX1-NEXT: LBB16_33: ## %cond.store31
3892 ; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
3893 ; AVX1-NEXT: testl $131072, %eax ## imm = 0x20000
3894 ; AVX1-NEXT: je LBB16_36
3895 ; AVX1-NEXT: LBB16_35: ## %cond.store33
3896 ; AVX1-NEXT: vpextrb $1, %xmm0, 17(%rdi)
3897 ; AVX1-NEXT: testl $262144, %eax ## imm = 0x40000
3898 ; AVX1-NEXT: je LBB16_38
3899 ; AVX1-NEXT: LBB16_37: ## %cond.store35
3900 ; AVX1-NEXT: vpextrb $2, %xmm0, 18(%rdi)
3901 ; AVX1-NEXT: testl $524288, %eax ## imm = 0x80000
3902 ; AVX1-NEXT: je LBB16_40
3903 ; AVX1-NEXT: LBB16_39: ## %cond.store37
3904 ; AVX1-NEXT: vpextrb $3, %xmm0, 19(%rdi)
3905 ; AVX1-NEXT: testl $1048576, %eax ## imm = 0x100000
3906 ; AVX1-NEXT: je LBB16_42
3907 ; AVX1-NEXT: LBB16_41: ## %cond.store39
3908 ; AVX1-NEXT: vpextrb $4, %xmm0, 20(%rdi)
3909 ; AVX1-NEXT: testl $2097152, %eax ## imm = 0x200000
3910 ; AVX1-NEXT: je LBB16_44
3911 ; AVX1-NEXT: LBB16_43: ## %cond.store41
3912 ; AVX1-NEXT: vpextrb $5, %xmm0, 21(%rdi)
3913 ; AVX1-NEXT: testl $4194304, %eax ## imm = 0x400000
3914 ; AVX1-NEXT: je LBB16_46
3915 ; AVX1-NEXT: LBB16_45: ## %cond.store43
3916 ; AVX1-NEXT: vpextrb $6, %xmm0, 22(%rdi)
3917 ; AVX1-NEXT: testl $8388608, %eax ## imm = 0x800000
3918 ; AVX1-NEXT: je LBB16_48
3919 ; AVX1-NEXT: LBB16_47: ## %cond.store45
3920 ; AVX1-NEXT: vpextrb $7, %xmm0, 23(%rdi)
3921 ; AVX1-NEXT: testl $16777216, %eax ## imm = 0x1000000
3922 ; AVX1-NEXT: je LBB16_50
3923 ; AVX1-NEXT: LBB16_49: ## %cond.store47
3924 ; AVX1-NEXT: vpextrb $8, %xmm0, 24(%rdi)
3925 ; AVX1-NEXT: testl $33554432, %eax ## imm = 0x2000000
3926 ; AVX1-NEXT: je LBB16_52
3927 ; AVX1-NEXT: LBB16_51: ## %cond.store49
3928 ; AVX1-NEXT: vpextrb $9, %xmm0, 25(%rdi)
3929 ; AVX1-NEXT: testl $67108864, %eax ## imm = 0x4000000
3930 ; AVX1-NEXT: je LBB16_54
3931 ; AVX1-NEXT: LBB16_53: ## %cond.store51
3932 ; AVX1-NEXT: vpextrb $10, %xmm0, 26(%rdi)
3933 ; AVX1-NEXT: testl $134217728, %eax ## imm = 0x8000000
3934 ; AVX1-NEXT: je LBB16_56
3935 ; AVX1-NEXT: LBB16_55: ## %cond.store53
3936 ; AVX1-NEXT: vpextrb $11, %xmm0, 27(%rdi)
3937 ; AVX1-NEXT: testl $268435456, %eax ## imm = 0x10000000
3938 ; AVX1-NEXT: je LBB16_58
3939 ; AVX1-NEXT: LBB16_57: ## %cond.store55
3940 ; AVX1-NEXT: vpextrb $12, %xmm0, 28(%rdi)
3941 ; AVX1-NEXT: testl $536870912, %eax ## imm = 0x20000000
3942 ; AVX1-NEXT: je LBB16_60
3943 ; AVX1-NEXT: LBB16_59: ## %cond.store57
3944 ; AVX1-NEXT: vpextrb $13, %xmm0, 29(%rdi)
3945 ; AVX1-NEXT: testl $1073741824, %eax ## imm = 0x40000000
3946 ; AVX1-NEXT: je LBB16_62
3947 ; AVX1-NEXT: LBB16_61: ## %cond.store59
3948 ; AVX1-NEXT: vpextrb $14, %xmm0, 30(%rdi)
3949 ; AVX1-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
3950 ; AVX1-NEXT: je LBB16_64
3951 ; AVX1-NEXT: LBB16_63: ## %cond.store61
3952 ; AVX1-NEXT: vpextrb $15, %xmm0, 31(%rdi)
3953 ; AVX1-NEXT: vzeroupper
3956 ; AVX2-LABEL: store_v32i8_v32i8:
3958 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
3959 ; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0
3960 ; AVX2-NEXT: vpmovmskb %ymm0, %eax
3961 ; AVX2-NEXT: testb $1, %al
3962 ; AVX2-NEXT: jne LBB16_1
3963 ; AVX2-NEXT: ## %bb.2: ## %else
3964 ; AVX2-NEXT: testb $2, %al
3965 ; AVX2-NEXT: jne LBB16_3
3966 ; AVX2-NEXT: LBB16_4: ## %else2
3967 ; AVX2-NEXT: testb $4, %al
3968 ; AVX2-NEXT: jne LBB16_5
3969 ; AVX2-NEXT: LBB16_6: ## %else4
3970 ; AVX2-NEXT: testb $8, %al
3971 ; AVX2-NEXT: jne LBB16_7
3972 ; AVX2-NEXT: LBB16_8: ## %else6
3973 ; AVX2-NEXT: testb $16, %al
3974 ; AVX2-NEXT: jne LBB16_9
3975 ; AVX2-NEXT: LBB16_10: ## %else8
3976 ; AVX2-NEXT: testb $32, %al
3977 ; AVX2-NEXT: jne LBB16_11
3978 ; AVX2-NEXT: LBB16_12: ## %else10
3979 ; AVX2-NEXT: testb $64, %al
3980 ; AVX2-NEXT: jne LBB16_13
3981 ; AVX2-NEXT: LBB16_14: ## %else12
3982 ; AVX2-NEXT: testb %al, %al
3983 ; AVX2-NEXT: js LBB16_15
3984 ; AVX2-NEXT: LBB16_16: ## %else14
3985 ; AVX2-NEXT: testl $256, %eax ## imm = 0x100
3986 ; AVX2-NEXT: jne LBB16_17
3987 ; AVX2-NEXT: LBB16_18: ## %else16
3988 ; AVX2-NEXT: testl $512, %eax ## imm = 0x200
3989 ; AVX2-NEXT: jne LBB16_19
3990 ; AVX2-NEXT: LBB16_20: ## %else18
3991 ; AVX2-NEXT: testl $1024, %eax ## imm = 0x400
3992 ; AVX2-NEXT: jne LBB16_21
3993 ; AVX2-NEXT: LBB16_22: ## %else20
3994 ; AVX2-NEXT: testl $2048, %eax ## imm = 0x800
3995 ; AVX2-NEXT: jne LBB16_23
3996 ; AVX2-NEXT: LBB16_24: ## %else22
3997 ; AVX2-NEXT: testl $4096, %eax ## imm = 0x1000
3998 ; AVX2-NEXT: jne LBB16_25
3999 ; AVX2-NEXT: LBB16_26: ## %else24
4000 ; AVX2-NEXT: testl $8192, %eax ## imm = 0x2000
4001 ; AVX2-NEXT: jne LBB16_27
4002 ; AVX2-NEXT: LBB16_28: ## %else26
4003 ; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
4004 ; AVX2-NEXT: jne LBB16_29
4005 ; AVX2-NEXT: LBB16_30: ## %else28
4006 ; AVX2-NEXT: testw %ax, %ax
4007 ; AVX2-NEXT: jns LBB16_32
4008 ; AVX2-NEXT: LBB16_31: ## %cond.store29
4009 ; AVX2-NEXT: vpextrb $15, %xmm1, 15(%rdi)
4010 ; AVX2-NEXT: LBB16_32: ## %else30
4011 ; AVX2-NEXT: testl $65536, %eax ## imm = 0x10000
4012 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
4013 ; AVX2-NEXT: jne LBB16_33
4014 ; AVX2-NEXT: ## %bb.34: ## %else32
4015 ; AVX2-NEXT: testl $131072, %eax ## imm = 0x20000
4016 ; AVX2-NEXT: jne LBB16_35
4017 ; AVX2-NEXT: LBB16_36: ## %else34
4018 ; AVX2-NEXT: testl $262144, %eax ## imm = 0x40000
4019 ; AVX2-NEXT: jne LBB16_37
4020 ; AVX2-NEXT: LBB16_38: ## %else36
4021 ; AVX2-NEXT: testl $524288, %eax ## imm = 0x80000
4022 ; AVX2-NEXT: jne LBB16_39
4023 ; AVX2-NEXT: LBB16_40: ## %else38
4024 ; AVX2-NEXT: testl $1048576, %eax ## imm = 0x100000
4025 ; AVX2-NEXT: jne LBB16_41
4026 ; AVX2-NEXT: LBB16_42: ## %else40
4027 ; AVX2-NEXT: testl $2097152, %eax ## imm = 0x200000
4028 ; AVX2-NEXT: jne LBB16_43
4029 ; AVX2-NEXT: LBB16_44: ## %else42
4030 ; AVX2-NEXT: testl $4194304, %eax ## imm = 0x400000
4031 ; AVX2-NEXT: jne LBB16_45
4032 ; AVX2-NEXT: LBB16_46: ## %else44
4033 ; AVX2-NEXT: testl $8388608, %eax ## imm = 0x800000
4034 ; AVX2-NEXT: jne LBB16_47
4035 ; AVX2-NEXT: LBB16_48: ## %else46
4036 ; AVX2-NEXT: testl $16777216, %eax ## imm = 0x1000000
4037 ; AVX2-NEXT: jne LBB16_49
4038 ; AVX2-NEXT: LBB16_50: ## %else48
4039 ; AVX2-NEXT: testl $33554432, %eax ## imm = 0x2000000
4040 ; AVX2-NEXT: jne LBB16_51
4041 ; AVX2-NEXT: LBB16_52: ## %else50
4042 ; AVX2-NEXT: testl $67108864, %eax ## imm = 0x4000000
4043 ; AVX2-NEXT: jne LBB16_53
4044 ; AVX2-NEXT: LBB16_54: ## %else52
4045 ; AVX2-NEXT: testl $134217728, %eax ## imm = 0x8000000
4046 ; AVX2-NEXT: jne LBB16_55
4047 ; AVX2-NEXT: LBB16_56: ## %else54
4048 ; AVX2-NEXT: testl $268435456, %eax ## imm = 0x10000000
4049 ; AVX2-NEXT: jne LBB16_57
4050 ; AVX2-NEXT: LBB16_58: ## %else56
4051 ; AVX2-NEXT: testl $536870912, %eax ## imm = 0x20000000
4052 ; AVX2-NEXT: jne LBB16_59
4053 ; AVX2-NEXT: LBB16_60: ## %else58
4054 ; AVX2-NEXT: testl $1073741824, %eax ## imm = 0x40000000
4055 ; AVX2-NEXT: jne LBB16_61
4056 ; AVX2-NEXT: LBB16_62: ## %else60
4057 ; AVX2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
4058 ; AVX2-NEXT: jne LBB16_63
4059 ; AVX2-NEXT: LBB16_64: ## %else62
4060 ; AVX2-NEXT: vzeroupper
4062 ; AVX2-NEXT: LBB16_1: ## %cond.store
4063 ; AVX2-NEXT: vpextrb $0, %xmm1, (%rdi)
4064 ; AVX2-NEXT: testb $2, %al
4065 ; AVX2-NEXT: je LBB16_4
4066 ; AVX2-NEXT: LBB16_3: ## %cond.store1
4067 ; AVX2-NEXT: vpextrb $1, %xmm1, 1(%rdi)
4068 ; AVX2-NEXT: testb $4, %al
4069 ; AVX2-NEXT: je LBB16_6
4070 ; AVX2-NEXT: LBB16_5: ## %cond.store3
4071 ; AVX2-NEXT: vpextrb $2, %xmm1, 2(%rdi)
4072 ; AVX2-NEXT: testb $8, %al
4073 ; AVX2-NEXT: je LBB16_8
4074 ; AVX2-NEXT: LBB16_7: ## %cond.store5
4075 ; AVX2-NEXT: vpextrb $3, %xmm1, 3(%rdi)
4076 ; AVX2-NEXT: testb $16, %al
4077 ; AVX2-NEXT: je LBB16_10
4078 ; AVX2-NEXT: LBB16_9: ## %cond.store7
4079 ; AVX2-NEXT: vpextrb $4, %xmm1, 4(%rdi)
4080 ; AVX2-NEXT: testb $32, %al
4081 ; AVX2-NEXT: je LBB16_12
4082 ; AVX2-NEXT: LBB16_11: ## %cond.store9
4083 ; AVX2-NEXT: vpextrb $5, %xmm1, 5(%rdi)
4084 ; AVX2-NEXT: testb $64, %al
4085 ; AVX2-NEXT: je LBB16_14
4086 ; AVX2-NEXT: LBB16_13: ## %cond.store11
4087 ; AVX2-NEXT: vpextrb $6, %xmm1, 6(%rdi)
4088 ; AVX2-NEXT: testb %al, %al
4089 ; AVX2-NEXT: jns LBB16_16
4090 ; AVX2-NEXT: LBB16_15: ## %cond.store13
4091 ; AVX2-NEXT: vpextrb $7, %xmm1, 7(%rdi)
4092 ; AVX2-NEXT: testl $256, %eax ## imm = 0x100
4093 ; AVX2-NEXT: je LBB16_18
4094 ; AVX2-NEXT: LBB16_17: ## %cond.store15
4095 ; AVX2-NEXT: vpextrb $8, %xmm1, 8(%rdi)
4096 ; AVX2-NEXT: testl $512, %eax ## imm = 0x200
4097 ; AVX2-NEXT: je LBB16_20
4098 ; AVX2-NEXT: LBB16_19: ## %cond.store17
4099 ; AVX2-NEXT: vpextrb $9, %xmm1, 9(%rdi)
4100 ; AVX2-NEXT: testl $1024, %eax ## imm = 0x400
4101 ; AVX2-NEXT: je LBB16_22
4102 ; AVX2-NEXT: LBB16_21: ## %cond.store19
4103 ; AVX2-NEXT: vpextrb $10, %xmm1, 10(%rdi)
4104 ; AVX2-NEXT: testl $2048, %eax ## imm = 0x800
4105 ; AVX2-NEXT: je LBB16_24
4106 ; AVX2-NEXT: LBB16_23: ## %cond.store21
4107 ; AVX2-NEXT: vpextrb $11, %xmm1, 11(%rdi)
4108 ; AVX2-NEXT: testl $4096, %eax ## imm = 0x1000
4109 ; AVX2-NEXT: je LBB16_26
4110 ; AVX2-NEXT: LBB16_25: ## %cond.store23
4111 ; AVX2-NEXT: vpextrb $12, %xmm1, 12(%rdi)
4112 ; AVX2-NEXT: testl $8192, %eax ## imm = 0x2000
4113 ; AVX2-NEXT: je LBB16_28
4114 ; AVX2-NEXT: LBB16_27: ## %cond.store25
4115 ; AVX2-NEXT: vpextrb $13, %xmm1, 13(%rdi)
4116 ; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000
4117 ; AVX2-NEXT: je LBB16_30
4118 ; AVX2-NEXT: LBB16_29: ## %cond.store27
4119 ; AVX2-NEXT: vpextrb $14, %xmm1, 14(%rdi)
4120 ; AVX2-NEXT: testw %ax, %ax
4121 ; AVX2-NEXT: js LBB16_31
4122 ; AVX2-NEXT: jmp LBB16_32
4123 ; AVX2-NEXT: LBB16_33: ## %cond.store31
4124 ; AVX2-NEXT: vpextrb $0, %xmm0, 16(%rdi)
4125 ; AVX2-NEXT: testl $131072, %eax ## imm = 0x20000
4126 ; AVX2-NEXT: je LBB16_36
4127 ; AVX2-NEXT: LBB16_35: ## %cond.store33
4128 ; AVX2-NEXT: vpextrb $1, %xmm0, 17(%rdi)
4129 ; AVX2-NEXT: testl $262144, %eax ## imm = 0x40000
4130 ; AVX2-NEXT: je LBB16_38
4131 ; AVX2-NEXT: LBB16_37: ## %cond.store35
4132 ; AVX2-NEXT: vpextrb $2, %xmm0, 18(%rdi)
4133 ; AVX2-NEXT: testl $524288, %eax ## imm = 0x80000
4134 ; AVX2-NEXT: je LBB16_40
4135 ; AVX2-NEXT: LBB16_39: ## %cond.store37
4136 ; AVX2-NEXT: vpextrb $3, %xmm0, 19(%rdi)
4137 ; AVX2-NEXT: testl $1048576, %eax ## imm = 0x100000
4138 ; AVX2-NEXT: je LBB16_42
4139 ; AVX2-NEXT: LBB16_41: ## %cond.store39
4140 ; AVX2-NEXT: vpextrb $4, %xmm0, 20(%rdi)
4141 ; AVX2-NEXT: testl $2097152, %eax ## imm = 0x200000
4142 ; AVX2-NEXT: je LBB16_44
4143 ; AVX2-NEXT: LBB16_43: ## %cond.store41
4144 ; AVX2-NEXT: vpextrb $5, %xmm0, 21(%rdi)
4145 ; AVX2-NEXT: testl $4194304, %eax ## imm = 0x400000
4146 ; AVX2-NEXT: je LBB16_46
4147 ; AVX2-NEXT: LBB16_45: ## %cond.store43
4148 ; AVX2-NEXT: vpextrb $6, %xmm0, 22(%rdi)
4149 ; AVX2-NEXT: testl $8388608, %eax ## imm = 0x800000
4150 ; AVX2-NEXT: je LBB16_48
4151 ; AVX2-NEXT: LBB16_47: ## %cond.store45
4152 ; AVX2-NEXT: vpextrb $7, %xmm0, 23(%rdi)
4153 ; AVX2-NEXT: testl $16777216, %eax ## imm = 0x1000000
4154 ; AVX2-NEXT: je LBB16_50
4155 ; AVX2-NEXT: LBB16_49: ## %cond.store47
4156 ; AVX2-NEXT: vpextrb $8, %xmm0, 24(%rdi)
4157 ; AVX2-NEXT: testl $33554432, %eax ## imm = 0x2000000
4158 ; AVX2-NEXT: je LBB16_52
4159 ; AVX2-NEXT: LBB16_51: ## %cond.store49
4160 ; AVX2-NEXT: vpextrb $9, %xmm0, 25(%rdi)
4161 ; AVX2-NEXT: testl $67108864, %eax ## imm = 0x4000000
4162 ; AVX2-NEXT: je LBB16_54
4163 ; AVX2-NEXT: LBB16_53: ## %cond.store51
4164 ; AVX2-NEXT: vpextrb $10, %xmm0, 26(%rdi)
4165 ; AVX2-NEXT: testl $134217728, %eax ## imm = 0x8000000
4166 ; AVX2-NEXT: je LBB16_56
4167 ; AVX2-NEXT: LBB16_55: ## %cond.store53
4168 ; AVX2-NEXT: vpextrb $11, %xmm0, 27(%rdi)
4169 ; AVX2-NEXT: testl $268435456, %eax ## imm = 0x10000000
4170 ; AVX2-NEXT: je LBB16_58
4171 ; AVX2-NEXT: LBB16_57: ## %cond.store55
4172 ; AVX2-NEXT: vpextrb $12, %xmm0, 28(%rdi)
4173 ; AVX2-NEXT: testl $536870912, %eax ## imm = 0x20000000
4174 ; AVX2-NEXT: je LBB16_60
4175 ; AVX2-NEXT: LBB16_59: ## %cond.store57
4176 ; AVX2-NEXT: vpextrb $13, %xmm0, 29(%rdi)
4177 ; AVX2-NEXT: testl $1073741824, %eax ## imm = 0x40000000
4178 ; AVX2-NEXT: je LBB16_62
4179 ; AVX2-NEXT: LBB16_61: ## %cond.store59
4180 ; AVX2-NEXT: vpextrb $14, %xmm0, 30(%rdi)
4181 ; AVX2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
4182 ; AVX2-NEXT: je LBB16_64
4183 ; AVX2-NEXT: LBB16_63: ## %cond.store61
4184 ; AVX2-NEXT: vpextrb $15, %xmm0, 31(%rdi)
4185 ; AVX2-NEXT: vzeroupper
4188 ; AVX512F-LABEL: store_v32i8_v32i8:
4189 ; AVX512F: ## %bb.0:
4190 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
4191 ; AVX512F-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0
4192 ; AVX512F-NEXT: vpmovmskb %ymm0, %eax
4193 ; AVX512F-NEXT: testb $1, %al
4194 ; AVX512F-NEXT: jne LBB16_1
4195 ; AVX512F-NEXT: ## %bb.2: ## %else
4196 ; AVX512F-NEXT: testb $2, %al
4197 ; AVX512F-NEXT: jne LBB16_3
4198 ; AVX512F-NEXT: LBB16_4: ## %else2
4199 ; AVX512F-NEXT: testb $4, %al
4200 ; AVX512F-NEXT: jne LBB16_5
4201 ; AVX512F-NEXT: LBB16_6: ## %else4
4202 ; AVX512F-NEXT: testb $8, %al
4203 ; AVX512F-NEXT: jne LBB16_7
4204 ; AVX512F-NEXT: LBB16_8: ## %else6
4205 ; AVX512F-NEXT: testb $16, %al
4206 ; AVX512F-NEXT: jne LBB16_9
4207 ; AVX512F-NEXT: LBB16_10: ## %else8
4208 ; AVX512F-NEXT: testb $32, %al
4209 ; AVX512F-NEXT: jne LBB16_11
4210 ; AVX512F-NEXT: LBB16_12: ## %else10
4211 ; AVX512F-NEXT: testb $64, %al
4212 ; AVX512F-NEXT: jne LBB16_13
4213 ; AVX512F-NEXT: LBB16_14: ## %else12
4214 ; AVX512F-NEXT: testb %al, %al
4215 ; AVX512F-NEXT: js LBB16_15
4216 ; AVX512F-NEXT: LBB16_16: ## %else14
4217 ; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
4218 ; AVX512F-NEXT: jne LBB16_17
4219 ; AVX512F-NEXT: LBB16_18: ## %else16
4220 ; AVX512F-NEXT: testl $512, %eax ## imm = 0x200
4221 ; AVX512F-NEXT: jne LBB16_19
4222 ; AVX512F-NEXT: LBB16_20: ## %else18
4223 ; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400
4224 ; AVX512F-NEXT: jne LBB16_21
4225 ; AVX512F-NEXT: LBB16_22: ## %else20
4226 ; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800
4227 ; AVX512F-NEXT: jne LBB16_23
4228 ; AVX512F-NEXT: LBB16_24: ## %else22
4229 ; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000
4230 ; AVX512F-NEXT: jne LBB16_25
4231 ; AVX512F-NEXT: LBB16_26: ## %else24
4232 ; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000
4233 ; AVX512F-NEXT: jne LBB16_27
4234 ; AVX512F-NEXT: LBB16_28: ## %else26
4235 ; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
4236 ; AVX512F-NEXT: jne LBB16_29
4237 ; AVX512F-NEXT: LBB16_30: ## %else28
4238 ; AVX512F-NEXT: testw %ax, %ax
4239 ; AVX512F-NEXT: jns LBB16_32
4240 ; AVX512F-NEXT: LBB16_31: ## %cond.store29
4241 ; AVX512F-NEXT: vpextrb $15, %xmm1, 15(%rdi)
4242 ; AVX512F-NEXT: LBB16_32: ## %else30
4243 ; AVX512F-NEXT: testl $65536, %eax ## imm = 0x10000
4244 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm0
4245 ; AVX512F-NEXT: jne LBB16_33
4246 ; AVX512F-NEXT: ## %bb.34: ## %else32
4247 ; AVX512F-NEXT: testl $131072, %eax ## imm = 0x20000
4248 ; AVX512F-NEXT: jne LBB16_35
4249 ; AVX512F-NEXT: LBB16_36: ## %else34
4250 ; AVX512F-NEXT: testl $262144, %eax ## imm = 0x40000
4251 ; AVX512F-NEXT: jne LBB16_37
4252 ; AVX512F-NEXT: LBB16_38: ## %else36
4253 ; AVX512F-NEXT: testl $524288, %eax ## imm = 0x80000
4254 ; AVX512F-NEXT: jne LBB16_39
4255 ; AVX512F-NEXT: LBB16_40: ## %else38
4256 ; AVX512F-NEXT: testl $1048576, %eax ## imm = 0x100000
4257 ; AVX512F-NEXT: jne LBB16_41
4258 ; AVX512F-NEXT: LBB16_42: ## %else40
4259 ; AVX512F-NEXT: testl $2097152, %eax ## imm = 0x200000
4260 ; AVX512F-NEXT: jne LBB16_43
4261 ; AVX512F-NEXT: LBB16_44: ## %else42
4262 ; AVX512F-NEXT: testl $4194304, %eax ## imm = 0x400000
4263 ; AVX512F-NEXT: jne LBB16_45
4264 ; AVX512F-NEXT: LBB16_46: ## %else44
4265 ; AVX512F-NEXT: testl $8388608, %eax ## imm = 0x800000
4266 ; AVX512F-NEXT: jne LBB16_47
4267 ; AVX512F-NEXT: LBB16_48: ## %else46
4268 ; AVX512F-NEXT: testl $16777216, %eax ## imm = 0x1000000
4269 ; AVX512F-NEXT: jne LBB16_49
4270 ; AVX512F-NEXT: LBB16_50: ## %else48
4271 ; AVX512F-NEXT: testl $33554432, %eax ## imm = 0x2000000
4272 ; AVX512F-NEXT: jne LBB16_51
4273 ; AVX512F-NEXT: LBB16_52: ## %else50
4274 ; AVX512F-NEXT: testl $67108864, %eax ## imm = 0x4000000
4275 ; AVX512F-NEXT: jne LBB16_53
4276 ; AVX512F-NEXT: LBB16_54: ## %else52
4277 ; AVX512F-NEXT: testl $134217728, %eax ## imm = 0x8000000
4278 ; AVX512F-NEXT: jne LBB16_55
4279 ; AVX512F-NEXT: LBB16_56: ## %else54
4280 ; AVX512F-NEXT: testl $268435456, %eax ## imm = 0x10000000
4281 ; AVX512F-NEXT: jne LBB16_57
4282 ; AVX512F-NEXT: LBB16_58: ## %else56
4283 ; AVX512F-NEXT: testl $536870912, %eax ## imm = 0x20000000
4284 ; AVX512F-NEXT: jne LBB16_59
4285 ; AVX512F-NEXT: LBB16_60: ## %else58
4286 ; AVX512F-NEXT: testl $1073741824, %eax ## imm = 0x40000000
4287 ; AVX512F-NEXT: jne LBB16_61
4288 ; AVX512F-NEXT: LBB16_62: ## %else60
4289 ; AVX512F-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
4290 ; AVX512F-NEXT: jne LBB16_63
4291 ; AVX512F-NEXT: LBB16_64: ## %else62
4292 ; AVX512F-NEXT: vzeroupper
4293 ; AVX512F-NEXT: retq
4294 ; AVX512F-NEXT: LBB16_1: ## %cond.store
4295 ; AVX512F-NEXT: vpextrb $0, %xmm1, (%rdi)
4296 ; AVX512F-NEXT: testb $2, %al
4297 ; AVX512F-NEXT: je LBB16_4
4298 ; AVX512F-NEXT: LBB16_3: ## %cond.store1
4299 ; AVX512F-NEXT: vpextrb $1, %xmm1, 1(%rdi)
4300 ; AVX512F-NEXT: testb $4, %al
4301 ; AVX512F-NEXT: je LBB16_6
4302 ; AVX512F-NEXT: LBB16_5: ## %cond.store3
4303 ; AVX512F-NEXT: vpextrb $2, %xmm1, 2(%rdi)
4304 ; AVX512F-NEXT: testb $8, %al
4305 ; AVX512F-NEXT: je LBB16_8
4306 ; AVX512F-NEXT: LBB16_7: ## %cond.store5
4307 ; AVX512F-NEXT: vpextrb $3, %xmm1, 3(%rdi)
4308 ; AVX512F-NEXT: testb $16, %al
4309 ; AVX512F-NEXT: je LBB16_10
4310 ; AVX512F-NEXT: LBB16_9: ## %cond.store7
4311 ; AVX512F-NEXT: vpextrb $4, %xmm1, 4(%rdi)
4312 ; AVX512F-NEXT: testb $32, %al
4313 ; AVX512F-NEXT: je LBB16_12
4314 ; AVX512F-NEXT: LBB16_11: ## %cond.store9
4315 ; AVX512F-NEXT: vpextrb $5, %xmm1, 5(%rdi)
4316 ; AVX512F-NEXT: testb $64, %al
4317 ; AVX512F-NEXT: je LBB16_14
4318 ; AVX512F-NEXT: LBB16_13: ## %cond.store11
4319 ; AVX512F-NEXT: vpextrb $6, %xmm1, 6(%rdi)
4320 ; AVX512F-NEXT: testb %al, %al
4321 ; AVX512F-NEXT: jns LBB16_16
4322 ; AVX512F-NEXT: LBB16_15: ## %cond.store13
4323 ; AVX512F-NEXT: vpextrb $7, %xmm1, 7(%rdi)
4324 ; AVX512F-NEXT: testl $256, %eax ## imm = 0x100
4325 ; AVX512F-NEXT: je LBB16_18
4326 ; AVX512F-NEXT: LBB16_17: ## %cond.store15
4327 ; AVX512F-NEXT: vpextrb $8, %xmm1, 8(%rdi)
4328 ; AVX512F-NEXT: testl $512, %eax ## imm = 0x200
4329 ; AVX512F-NEXT: je LBB16_20
4330 ; AVX512F-NEXT: LBB16_19: ## %cond.store17
4331 ; AVX512F-NEXT: vpextrb $9, %xmm1, 9(%rdi)
4332 ; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400
4333 ; AVX512F-NEXT: je LBB16_22
4334 ; AVX512F-NEXT: LBB16_21: ## %cond.store19
4335 ; AVX512F-NEXT: vpextrb $10, %xmm1, 10(%rdi)
4336 ; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800
4337 ; AVX512F-NEXT: je LBB16_24
4338 ; AVX512F-NEXT: LBB16_23: ## %cond.store21
4339 ; AVX512F-NEXT: vpextrb $11, %xmm1, 11(%rdi)
4340 ; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000
4341 ; AVX512F-NEXT: je LBB16_26
4342 ; AVX512F-NEXT: LBB16_25: ## %cond.store23
4343 ; AVX512F-NEXT: vpextrb $12, %xmm1, 12(%rdi)
4344 ; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000
4345 ; AVX512F-NEXT: je LBB16_28
4346 ; AVX512F-NEXT: LBB16_27: ## %cond.store25
4347 ; AVX512F-NEXT: vpextrb $13, %xmm1, 13(%rdi)
4348 ; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000
4349 ; AVX512F-NEXT: je LBB16_30
4350 ; AVX512F-NEXT: LBB16_29: ## %cond.store27
4351 ; AVX512F-NEXT: vpextrb $14, %xmm1, 14(%rdi)
4352 ; AVX512F-NEXT: testw %ax, %ax
4353 ; AVX512F-NEXT: js LBB16_31
4354 ; AVX512F-NEXT: jmp LBB16_32
4355 ; AVX512F-NEXT: LBB16_33: ## %cond.store31
4356 ; AVX512F-NEXT: vpextrb $0, %xmm0, 16(%rdi)
4357 ; AVX512F-NEXT: testl $131072, %eax ## imm = 0x20000
4358 ; AVX512F-NEXT: je LBB16_36
4359 ; AVX512F-NEXT: LBB16_35: ## %cond.store33
4360 ; AVX512F-NEXT: vpextrb $1, %xmm0, 17(%rdi)
4361 ; AVX512F-NEXT: testl $262144, %eax ## imm = 0x40000
4362 ; AVX512F-NEXT: je LBB16_38
4363 ; AVX512F-NEXT: LBB16_37: ## %cond.store35
4364 ; AVX512F-NEXT: vpextrb $2, %xmm0, 18(%rdi)
4365 ; AVX512F-NEXT: testl $524288, %eax ## imm = 0x80000
4366 ; AVX512F-NEXT: je LBB16_40
4367 ; AVX512F-NEXT: LBB16_39: ## %cond.store37
4368 ; AVX512F-NEXT: vpextrb $3, %xmm0, 19(%rdi)
4369 ; AVX512F-NEXT: testl $1048576, %eax ## imm = 0x100000
4370 ; AVX512F-NEXT: je LBB16_42
4371 ; AVX512F-NEXT: LBB16_41: ## %cond.store39
4372 ; AVX512F-NEXT: vpextrb $4, %xmm0, 20(%rdi)
4373 ; AVX512F-NEXT: testl $2097152, %eax ## imm = 0x200000
4374 ; AVX512F-NEXT: je LBB16_44
4375 ; AVX512F-NEXT: LBB16_43: ## %cond.store41
4376 ; AVX512F-NEXT: vpextrb $5, %xmm0, 21(%rdi)
4377 ; AVX512F-NEXT: testl $4194304, %eax ## imm = 0x400000
4378 ; AVX512F-NEXT: je LBB16_46
4379 ; AVX512F-NEXT: LBB16_45: ## %cond.store43
4380 ; AVX512F-NEXT: vpextrb $6, %xmm0, 22(%rdi)
4381 ; AVX512F-NEXT: testl $8388608, %eax ## imm = 0x800000
4382 ; AVX512F-NEXT: je LBB16_48
4383 ; AVX512F-NEXT: LBB16_47: ## %cond.store45
4384 ; AVX512F-NEXT: vpextrb $7, %xmm0, 23(%rdi)
4385 ; AVX512F-NEXT: testl $16777216, %eax ## imm = 0x1000000
4386 ; AVX512F-NEXT: je LBB16_50
4387 ; AVX512F-NEXT: LBB16_49: ## %cond.store47
4388 ; AVX512F-NEXT: vpextrb $8, %xmm0, 24(%rdi)
4389 ; AVX512F-NEXT: testl $33554432, %eax ## imm = 0x2000000
4390 ; AVX512F-NEXT: je LBB16_52
4391 ; AVX512F-NEXT: LBB16_51: ## %cond.store49
4392 ; AVX512F-NEXT: vpextrb $9, %xmm0, 25(%rdi)
4393 ; AVX512F-NEXT: testl $67108864, %eax ## imm = 0x4000000
4394 ; AVX512F-NEXT: je LBB16_54
4395 ; AVX512F-NEXT: LBB16_53: ## %cond.store51
4396 ; AVX512F-NEXT: vpextrb $10, %xmm0, 26(%rdi)
4397 ; AVX512F-NEXT: testl $134217728, %eax ## imm = 0x8000000
4398 ; AVX512F-NEXT: je LBB16_56
4399 ; AVX512F-NEXT: LBB16_55: ## %cond.store53
4400 ; AVX512F-NEXT: vpextrb $11, %xmm0, 27(%rdi)
4401 ; AVX512F-NEXT: testl $268435456, %eax ## imm = 0x10000000
4402 ; AVX512F-NEXT: je LBB16_58
4403 ; AVX512F-NEXT: LBB16_57: ## %cond.store55
4404 ; AVX512F-NEXT: vpextrb $12, %xmm0, 28(%rdi)
4405 ; AVX512F-NEXT: testl $536870912, %eax ## imm = 0x20000000
4406 ; AVX512F-NEXT: je LBB16_60
4407 ; AVX512F-NEXT: LBB16_59: ## %cond.store57
4408 ; AVX512F-NEXT: vpextrb $13, %xmm0, 29(%rdi)
4409 ; AVX512F-NEXT: testl $1073741824, %eax ## imm = 0x40000000
4410 ; AVX512F-NEXT: je LBB16_62
4411 ; AVX512F-NEXT: LBB16_61: ## %cond.store59
4412 ; AVX512F-NEXT: vpextrb $14, %xmm0, 30(%rdi)
4413 ; AVX512F-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
4414 ; AVX512F-NEXT: je LBB16_64
4415 ; AVX512F-NEXT: LBB16_63: ## %cond.store61
4416 ; AVX512F-NEXT: vpextrb $15, %xmm0, 31(%rdi)
4417 ; AVX512F-NEXT: vzeroupper
4418 ; AVX512F-NEXT: retq
4420 ; AVX512VLDQ-LABEL: store_v32i8_v32i8:
4421 ; AVX512VLDQ: ## %bb.0:
4422 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
4423 ; AVX512VLDQ-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0
4424 ; AVX512VLDQ-NEXT: vpmovmskb %ymm0, %eax
4425 ; AVX512VLDQ-NEXT: testb $1, %al
4426 ; AVX512VLDQ-NEXT: jne LBB16_1
4427 ; AVX512VLDQ-NEXT: ## %bb.2: ## %else
4428 ; AVX512VLDQ-NEXT: testb $2, %al
4429 ; AVX512VLDQ-NEXT: jne LBB16_3
4430 ; AVX512VLDQ-NEXT: LBB16_4: ## %else2
4431 ; AVX512VLDQ-NEXT: testb $4, %al
4432 ; AVX512VLDQ-NEXT: jne LBB16_5
4433 ; AVX512VLDQ-NEXT: LBB16_6: ## %else4
4434 ; AVX512VLDQ-NEXT: testb $8, %al
4435 ; AVX512VLDQ-NEXT: jne LBB16_7
4436 ; AVX512VLDQ-NEXT: LBB16_8: ## %else6
4437 ; AVX512VLDQ-NEXT: testb $16, %al
4438 ; AVX512VLDQ-NEXT: jne LBB16_9
4439 ; AVX512VLDQ-NEXT: LBB16_10: ## %else8
4440 ; AVX512VLDQ-NEXT: testb $32, %al
4441 ; AVX512VLDQ-NEXT: jne LBB16_11
4442 ; AVX512VLDQ-NEXT: LBB16_12: ## %else10
4443 ; AVX512VLDQ-NEXT: testb $64, %al
4444 ; AVX512VLDQ-NEXT: jne LBB16_13
4445 ; AVX512VLDQ-NEXT: LBB16_14: ## %else12
4446 ; AVX512VLDQ-NEXT: testb %al, %al
4447 ; AVX512VLDQ-NEXT: js LBB16_15
4448 ; AVX512VLDQ-NEXT: LBB16_16: ## %else14
4449 ; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
4450 ; AVX512VLDQ-NEXT: jne LBB16_17
4451 ; AVX512VLDQ-NEXT: LBB16_18: ## %else16
4452 ; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200
4453 ; AVX512VLDQ-NEXT: jne LBB16_19
4454 ; AVX512VLDQ-NEXT: LBB16_20: ## %else18
4455 ; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400
4456 ; AVX512VLDQ-NEXT: jne LBB16_21
4457 ; AVX512VLDQ-NEXT: LBB16_22: ## %else20
4458 ; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800
4459 ; AVX512VLDQ-NEXT: jne LBB16_23
4460 ; AVX512VLDQ-NEXT: LBB16_24: ## %else22
4461 ; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000
4462 ; AVX512VLDQ-NEXT: jne LBB16_25
4463 ; AVX512VLDQ-NEXT: LBB16_26: ## %else24
4464 ; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000
4465 ; AVX512VLDQ-NEXT: jne LBB16_27
4466 ; AVX512VLDQ-NEXT: LBB16_28: ## %else26
4467 ; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
4468 ; AVX512VLDQ-NEXT: jne LBB16_29
4469 ; AVX512VLDQ-NEXT: LBB16_30: ## %else28
4470 ; AVX512VLDQ-NEXT: testw %ax, %ax
4471 ; AVX512VLDQ-NEXT: jns LBB16_32
4472 ; AVX512VLDQ-NEXT: LBB16_31: ## %cond.store29
4473 ; AVX512VLDQ-NEXT: vpextrb $15, %xmm1, 15(%rdi)
4474 ; AVX512VLDQ-NEXT: LBB16_32: ## %else30
4475 ; AVX512VLDQ-NEXT: testl $65536, %eax ## imm = 0x10000
4476 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm0
4477 ; AVX512VLDQ-NEXT: jne LBB16_33
4478 ; AVX512VLDQ-NEXT: ## %bb.34: ## %else32
4479 ; AVX512VLDQ-NEXT: testl $131072, %eax ## imm = 0x20000
4480 ; AVX512VLDQ-NEXT: jne LBB16_35
4481 ; AVX512VLDQ-NEXT: LBB16_36: ## %else34
4482 ; AVX512VLDQ-NEXT: testl $262144, %eax ## imm = 0x40000
4483 ; AVX512VLDQ-NEXT: jne LBB16_37
4484 ; AVX512VLDQ-NEXT: LBB16_38: ## %else36
4485 ; AVX512VLDQ-NEXT: testl $524288, %eax ## imm = 0x80000
4486 ; AVX512VLDQ-NEXT: jne LBB16_39
4487 ; AVX512VLDQ-NEXT: LBB16_40: ## %else38
4488 ; AVX512VLDQ-NEXT: testl $1048576, %eax ## imm = 0x100000
4489 ; AVX512VLDQ-NEXT: jne LBB16_41
4490 ; AVX512VLDQ-NEXT: LBB16_42: ## %else40
4491 ; AVX512VLDQ-NEXT: testl $2097152, %eax ## imm = 0x200000
4492 ; AVX512VLDQ-NEXT: jne LBB16_43
4493 ; AVX512VLDQ-NEXT: LBB16_44: ## %else42
4494 ; AVX512VLDQ-NEXT: testl $4194304, %eax ## imm = 0x400000
4495 ; AVX512VLDQ-NEXT: jne LBB16_45
4496 ; AVX512VLDQ-NEXT: LBB16_46: ## %else44
4497 ; AVX512VLDQ-NEXT: testl $8388608, %eax ## imm = 0x800000
4498 ; AVX512VLDQ-NEXT: jne LBB16_47
4499 ; AVX512VLDQ-NEXT: LBB16_48: ## %else46
4500 ; AVX512VLDQ-NEXT: testl $16777216, %eax ## imm = 0x1000000
4501 ; AVX512VLDQ-NEXT: jne LBB16_49
4502 ; AVX512VLDQ-NEXT: LBB16_50: ## %else48
4503 ; AVX512VLDQ-NEXT: testl $33554432, %eax ## imm = 0x2000000
4504 ; AVX512VLDQ-NEXT: jne LBB16_51
4505 ; AVX512VLDQ-NEXT: LBB16_52: ## %else50
4506 ; AVX512VLDQ-NEXT: testl $67108864, %eax ## imm = 0x4000000
4507 ; AVX512VLDQ-NEXT: jne LBB16_53
4508 ; AVX512VLDQ-NEXT: LBB16_54: ## %else52
4509 ; AVX512VLDQ-NEXT: testl $134217728, %eax ## imm = 0x8000000
4510 ; AVX512VLDQ-NEXT: jne LBB16_55
4511 ; AVX512VLDQ-NEXT: LBB16_56: ## %else54
4512 ; AVX512VLDQ-NEXT: testl $268435456, %eax ## imm = 0x10000000
4513 ; AVX512VLDQ-NEXT: jne LBB16_57
4514 ; AVX512VLDQ-NEXT: LBB16_58: ## %else56
4515 ; AVX512VLDQ-NEXT: testl $536870912, %eax ## imm = 0x20000000
4516 ; AVX512VLDQ-NEXT: jne LBB16_59
4517 ; AVX512VLDQ-NEXT: LBB16_60: ## %else58
4518 ; AVX512VLDQ-NEXT: testl $1073741824, %eax ## imm = 0x40000000
4519 ; AVX512VLDQ-NEXT: jne LBB16_61
4520 ; AVX512VLDQ-NEXT: LBB16_62: ## %else60
4521 ; AVX512VLDQ-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
4522 ; AVX512VLDQ-NEXT: jne LBB16_63
4523 ; AVX512VLDQ-NEXT: LBB16_64: ## %else62
4524 ; AVX512VLDQ-NEXT: vzeroupper
4525 ; AVX512VLDQ-NEXT: retq
4526 ; AVX512VLDQ-NEXT: LBB16_1: ## %cond.store
4527 ; AVX512VLDQ-NEXT: vpextrb $0, %xmm1, (%rdi)
4528 ; AVX512VLDQ-NEXT: testb $2, %al
4529 ; AVX512VLDQ-NEXT: je LBB16_4
4530 ; AVX512VLDQ-NEXT: LBB16_3: ## %cond.store1
4531 ; AVX512VLDQ-NEXT: vpextrb $1, %xmm1, 1(%rdi)
4532 ; AVX512VLDQ-NEXT: testb $4, %al
4533 ; AVX512VLDQ-NEXT: je LBB16_6
4534 ; AVX512VLDQ-NEXT: LBB16_5: ## %cond.store3
4535 ; AVX512VLDQ-NEXT: vpextrb $2, %xmm1, 2(%rdi)
4536 ; AVX512VLDQ-NEXT: testb $8, %al
4537 ; AVX512VLDQ-NEXT: je LBB16_8
4538 ; AVX512VLDQ-NEXT: LBB16_7: ## %cond.store5
4539 ; AVX512VLDQ-NEXT: vpextrb $3, %xmm1, 3(%rdi)
4540 ; AVX512VLDQ-NEXT: testb $16, %al
4541 ; AVX512VLDQ-NEXT: je LBB16_10
4542 ; AVX512VLDQ-NEXT: LBB16_9: ## %cond.store7
4543 ; AVX512VLDQ-NEXT: vpextrb $4, %xmm1, 4(%rdi)
4544 ; AVX512VLDQ-NEXT: testb $32, %al
4545 ; AVX512VLDQ-NEXT: je LBB16_12
4546 ; AVX512VLDQ-NEXT: LBB16_11: ## %cond.store9
4547 ; AVX512VLDQ-NEXT: vpextrb $5, %xmm1, 5(%rdi)
4548 ; AVX512VLDQ-NEXT: testb $64, %al
4549 ; AVX512VLDQ-NEXT: je LBB16_14
4550 ; AVX512VLDQ-NEXT: LBB16_13: ## %cond.store11
4551 ; AVX512VLDQ-NEXT: vpextrb $6, %xmm1, 6(%rdi)
4552 ; AVX512VLDQ-NEXT: testb %al, %al
4553 ; AVX512VLDQ-NEXT: jns LBB16_16
4554 ; AVX512VLDQ-NEXT: LBB16_15: ## %cond.store13
4555 ; AVX512VLDQ-NEXT: vpextrb $7, %xmm1, 7(%rdi)
4556 ; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100
4557 ; AVX512VLDQ-NEXT: je LBB16_18
4558 ; AVX512VLDQ-NEXT: LBB16_17: ## %cond.store15
4559 ; AVX512VLDQ-NEXT: vpextrb $8, %xmm1, 8(%rdi)
4560 ; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200
4561 ; AVX512VLDQ-NEXT: je LBB16_20
4562 ; AVX512VLDQ-NEXT: LBB16_19: ## %cond.store17
4563 ; AVX512VLDQ-NEXT: vpextrb $9, %xmm1, 9(%rdi)
4564 ; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400
4565 ; AVX512VLDQ-NEXT: je LBB16_22
4566 ; AVX512VLDQ-NEXT: LBB16_21: ## %cond.store19
4567 ; AVX512VLDQ-NEXT: vpextrb $10, %xmm1, 10(%rdi)
4568 ; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800
4569 ; AVX512VLDQ-NEXT: je LBB16_24
4570 ; AVX512VLDQ-NEXT: LBB16_23: ## %cond.store21
4571 ; AVX512VLDQ-NEXT: vpextrb $11, %xmm1, 11(%rdi)
4572 ; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000
4573 ; AVX512VLDQ-NEXT: je LBB16_26
4574 ; AVX512VLDQ-NEXT: LBB16_25: ## %cond.store23
4575 ; AVX512VLDQ-NEXT: vpextrb $12, %xmm1, 12(%rdi)
4576 ; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000
4577 ; AVX512VLDQ-NEXT: je LBB16_28
4578 ; AVX512VLDQ-NEXT: LBB16_27: ## %cond.store25
4579 ; AVX512VLDQ-NEXT: vpextrb $13, %xmm1, 13(%rdi)
4580 ; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000
4581 ; AVX512VLDQ-NEXT: je LBB16_30
4582 ; AVX512VLDQ-NEXT: LBB16_29: ## %cond.store27
4583 ; AVX512VLDQ-NEXT: vpextrb $14, %xmm1, 14(%rdi)
4584 ; AVX512VLDQ-NEXT: testw %ax, %ax
4585 ; AVX512VLDQ-NEXT: js LBB16_31
4586 ; AVX512VLDQ-NEXT: jmp LBB16_32
4587 ; AVX512VLDQ-NEXT: LBB16_33: ## %cond.store31
4588 ; AVX512VLDQ-NEXT: vpextrb $0, %xmm0, 16(%rdi)
4589 ; AVX512VLDQ-NEXT: testl $131072, %eax ## imm = 0x20000
4590 ; AVX512VLDQ-NEXT: je LBB16_36
4591 ; AVX512VLDQ-NEXT: LBB16_35: ## %cond.store33
4592 ; AVX512VLDQ-NEXT: vpextrb $1, %xmm0, 17(%rdi)
4593 ; AVX512VLDQ-NEXT: testl $262144, %eax ## imm = 0x40000
4594 ; AVX512VLDQ-NEXT: je LBB16_38
4595 ; AVX512VLDQ-NEXT: LBB16_37: ## %cond.store35
4596 ; AVX512VLDQ-NEXT: vpextrb $2, %xmm0, 18(%rdi)
4597 ; AVX512VLDQ-NEXT: testl $524288, %eax ## imm = 0x80000
4598 ; AVX512VLDQ-NEXT: je LBB16_40
4599 ; AVX512VLDQ-NEXT: LBB16_39: ## %cond.store37
4600 ; AVX512VLDQ-NEXT: vpextrb $3, %xmm0, 19(%rdi)
4601 ; AVX512VLDQ-NEXT: testl $1048576, %eax ## imm = 0x100000
4602 ; AVX512VLDQ-NEXT: je LBB16_42
4603 ; AVX512VLDQ-NEXT: LBB16_41: ## %cond.store39
4604 ; AVX512VLDQ-NEXT: vpextrb $4, %xmm0, 20(%rdi)
4605 ; AVX512VLDQ-NEXT: testl $2097152, %eax ## imm = 0x200000
4606 ; AVX512VLDQ-NEXT: je LBB16_44
4607 ; AVX512VLDQ-NEXT: LBB16_43: ## %cond.store41
4608 ; AVX512VLDQ-NEXT: vpextrb $5, %xmm0, 21(%rdi)
4609 ; AVX512VLDQ-NEXT: testl $4194304, %eax ## imm = 0x400000
4610 ; AVX512VLDQ-NEXT: je LBB16_46
4611 ; AVX512VLDQ-NEXT: LBB16_45: ## %cond.store43
4612 ; AVX512VLDQ-NEXT: vpextrb $6, %xmm0, 22(%rdi)
4613 ; AVX512VLDQ-NEXT: testl $8388608, %eax ## imm = 0x800000
4614 ; AVX512VLDQ-NEXT: je LBB16_48
4615 ; AVX512VLDQ-NEXT: LBB16_47: ## %cond.store45
4616 ; AVX512VLDQ-NEXT: vpextrb $7, %xmm0, 23(%rdi)
4617 ; AVX512VLDQ-NEXT: testl $16777216, %eax ## imm = 0x1000000
4618 ; AVX512VLDQ-NEXT: je LBB16_50
4619 ; AVX512VLDQ-NEXT: LBB16_49: ## %cond.store47
4620 ; AVX512VLDQ-NEXT: vpextrb $8, %xmm0, 24(%rdi)
4621 ; AVX512VLDQ-NEXT: testl $33554432, %eax ## imm = 0x2000000
4622 ; AVX512VLDQ-NEXT: je LBB16_52
4623 ; AVX512VLDQ-NEXT: LBB16_51: ## %cond.store49
4624 ; AVX512VLDQ-NEXT: vpextrb $9, %xmm0, 25(%rdi)
4625 ; AVX512VLDQ-NEXT: testl $67108864, %eax ## imm = 0x4000000
4626 ; AVX512VLDQ-NEXT: je LBB16_54
4627 ; AVX512VLDQ-NEXT: LBB16_53: ## %cond.store51
4628 ; AVX512VLDQ-NEXT: vpextrb $10, %xmm0, 26(%rdi)
4629 ; AVX512VLDQ-NEXT: testl $134217728, %eax ## imm = 0x8000000
4630 ; AVX512VLDQ-NEXT: je LBB16_56
4631 ; AVX512VLDQ-NEXT: LBB16_55: ## %cond.store53
4632 ; AVX512VLDQ-NEXT: vpextrb $11, %xmm0, 27(%rdi)
4633 ; AVX512VLDQ-NEXT: testl $268435456, %eax ## imm = 0x10000000
4634 ; AVX512VLDQ-NEXT: je LBB16_58
4635 ; AVX512VLDQ-NEXT: LBB16_57: ## %cond.store55
4636 ; AVX512VLDQ-NEXT: vpextrb $12, %xmm0, 28(%rdi)
4637 ; AVX512VLDQ-NEXT: testl $536870912, %eax ## imm = 0x20000000
4638 ; AVX512VLDQ-NEXT: je LBB16_60
4639 ; AVX512VLDQ-NEXT: LBB16_59: ## %cond.store57
4640 ; AVX512VLDQ-NEXT: vpextrb $13, %xmm0, 29(%rdi)
4641 ; AVX512VLDQ-NEXT: testl $1073741824, %eax ## imm = 0x40000000
4642 ; AVX512VLDQ-NEXT: je LBB16_62
4643 ; AVX512VLDQ-NEXT: LBB16_61: ## %cond.store59
4644 ; AVX512VLDQ-NEXT: vpextrb $14, %xmm0, 30(%rdi)
4645 ; AVX512VLDQ-NEXT: testl $-2147483648, %eax ## imm = 0x80000000
4646 ; AVX512VLDQ-NEXT: je LBB16_64
4647 ; AVX512VLDQ-NEXT: LBB16_63: ## %cond.store61
4648 ; AVX512VLDQ-NEXT: vpextrb $15, %xmm0, 31(%rdi)
4649 ; AVX512VLDQ-NEXT: vzeroupper
4650 ; AVX512VLDQ-NEXT: retq
4652 ; AVX512VLBW-LABEL: store_v32i8_v32i8:
4653 ; AVX512VLBW: ## %bb.0:
4654 ; AVX512VLBW-NEXT: vptestnmb %ymm0, %ymm0, %k1
4655 ; AVX512VLBW-NEXT: vmovdqu8 %ymm1, (%rdi) {%k1}
4656 ; AVX512VLBW-NEXT: vzeroupper
4657 ; AVX512VLBW-NEXT: retq
4659 ; X86-AVX512-LABEL: store_v32i8_v32i8:
4660 ; X86-AVX512: ## %bb.0:
4661 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4662 ; X86-AVX512-NEXT: vptestnmb %ymm0, %ymm0, %k1
4663 ; X86-AVX512-NEXT: vmovdqu8 %ymm1, (%eax) {%k1}
4664 ; X86-AVX512-NEXT: vzeroupper
4665 ; X86-AVX512-NEXT: retl
4666 %mask = icmp eq <32 x i8> %trigger, zeroinitializer
4667 call void @llvm.masked.store.v32i8.p0(<32 x i8> %val, ptr %addr, i32 4, <32 x i1> %mask)
4671 ;;; Stores with Constant Masks
4673 define void @mstore_constmask_v4i32_v4i32(<4 x i32> %trigger, ptr %addr, <4 x i32> %val) {
4674 ; SSE-LABEL: mstore_constmask_v4i32_v4i32:
4676 ; SSE-NEXT: movups %xmm1, (%rdi)
4679 ; AVX-LABEL: mstore_constmask_v4i32_v4i32:
4681 ; AVX-NEXT: vmovups %xmm1, (%rdi)
4684 ; X86-AVX512-LABEL: mstore_constmask_v4i32_v4i32:
4685 ; X86-AVX512: ## %bb.0:
4686 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4687 ; X86-AVX512-NEXT: vmovups %xmm1, (%eax)
4688 ; X86-AVX512-NEXT: retl
4689 %mask = icmp eq <4 x i32> %trigger, zeroinitializer
4690 call void @llvm.masked.store.v4i32.p0(<4 x i32> %val, ptr %addr, i32 4, <4 x i1><i1 true, i1 true, i1 true, i1 true>)
4694 ; Make sure we are able to detect all ones constant mask after type legalization
4695 ; to avoid masked stores.
4696 define void @mstore_constmask_allones_split(<16 x i64> %trigger, ptr %addr, <16 x i64> %val) {
4697 ; SSE2-LABEL: mstore_constmask_allones_split:
4699 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm0
4700 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm1
4701 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm2
4702 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm3
4703 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm4
4704 ; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm5
4705 ; SSE2-NEXT: movq %xmm5, (%rdi)
4706 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[2,3,2,3]
4707 ; SSE2-NEXT: movq %xmm5, 8(%rdi)
4708 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = mem[2,3,2,3]
4709 ; SSE2-NEXT: movq %xmm5, 24(%rdi)
4710 ; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rax
4711 ; SSE2-NEXT: movq %rax, 32(%rdi)
4712 ; SSE2-NEXT: movq %xmm4, 48(%rdi)
4713 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[2,3,2,3]
4714 ; SSE2-NEXT: movq %xmm4, 56(%rdi)
4715 ; SSE2-NEXT: movq %xmm3, 64(%rdi)
4716 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[2,3,2,3]
4717 ; SSE2-NEXT: movq %xmm3, 72(%rdi)
4718 ; SSE2-NEXT: movq %xmm2, 80(%rdi)
4719 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[2,3,2,3]
4720 ; SSE2-NEXT: movq %xmm2, 88(%rdi)
4721 ; SSE2-NEXT: movq %xmm1, 96(%rdi)
4722 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
4723 ; SSE2-NEXT: movq %xmm1, 104(%rdi)
4724 ; SSE2-NEXT: movq %xmm0, 112(%rdi)
4725 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
4726 ; SSE2-NEXT: movq %xmm0, 120(%rdi)
4729 ; SSE4-LABEL: mstore_constmask_allones_split:
4731 ; SSE4-NEXT: movaps {{[0-9]+}}(%rsp), %xmm0
4732 ; SSE4-NEXT: movaps {{[0-9]+}}(%rsp), %xmm1
4733 ; SSE4-NEXT: movaps {{[0-9]+}}(%rsp), %xmm2
4734 ; SSE4-NEXT: movaps {{[0-9]+}}(%rsp), %xmm3
4735 ; SSE4-NEXT: movaps {{[0-9]+}}(%rsp), %xmm4
4736 ; SSE4-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm5
4737 ; SSE4-NEXT: movaps {{[0-9]+}}(%rsp), %xmm6
4738 ; SSE4-NEXT: movups %xmm6, (%rdi)
4739 ; SSE4-NEXT: palignr {{.*#+}} xmm5 = mem[8,9,10,11,12,13,14,15],xmm5[0,1,2,3,4,5,6,7]
4740 ; SSE4-NEXT: movdqu %xmm5, 24(%rdi)
4741 ; SSE4-NEXT: movups %xmm4, 48(%rdi)
4742 ; SSE4-NEXT: movups %xmm3, 64(%rdi)
4743 ; SSE4-NEXT: movups %xmm2, 80(%rdi)
4744 ; SSE4-NEXT: movups %xmm1, 96(%rdi)
4745 ; SSE4-NEXT: movups %xmm0, 112(%rdi)
4748 ; AVX1-LABEL: mstore_constmask_allones_split:
4750 ; AVX1-NEXT: vmovapd {{.*#+}} ymm0 = [18446744073709551615,0,18446744073709551615,18446744073709551615]
4751 ; AVX1-NEXT: vmaskmovpd %ymm5, %ymm0, 32(%rdi)
4752 ; AVX1-NEXT: vmovapd {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,0,18446744073709551615]
4753 ; AVX1-NEXT: vmaskmovpd %ymm4, %ymm0, (%rdi)
4754 ; AVX1-NEXT: vmovups %ymm7, 96(%rdi)
4755 ; AVX1-NEXT: vmovups %ymm6, 64(%rdi)
4756 ; AVX1-NEXT: vzeroupper
4759 ; AVX2-LABEL: mstore_constmask_allones_split:
4761 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm0 = [18446744073709551615,0,18446744073709551615,18446744073709551615]
4762 ; AVX2-NEXT: vpmaskmovq %ymm5, %ymm0, 32(%rdi)
4763 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,0,18446744073709551615]
4764 ; AVX2-NEXT: vpmaskmovq %ymm4, %ymm0, (%rdi)
4765 ; AVX2-NEXT: vmovups %ymm7, 96(%rdi)
4766 ; AVX2-NEXT: vmovups %ymm6, 64(%rdi)
4767 ; AVX2-NEXT: vzeroupper
4770 ; AVX512F-LABEL: mstore_constmask_allones_split:
4771 ; AVX512F: ## %bb.0:
4772 ; AVX512F-NEXT: movb $-37, %al
4773 ; AVX512F-NEXT: kmovw %eax, %k1
4774 ; AVX512F-NEXT: vmovdqu64 %zmm2, (%rdi) {%k1}
4775 ; AVX512F-NEXT: vmovups %zmm3, 64(%rdi)
4776 ; AVX512F-NEXT: vzeroupper
4777 ; AVX512F-NEXT: retq
4779 ; AVX512VLDQ-LABEL: mstore_constmask_allones_split:
4780 ; AVX512VLDQ: ## %bb.0:
4781 ; AVX512VLDQ-NEXT: movb $-37, %al
4782 ; AVX512VLDQ-NEXT: kmovw %eax, %k1
4783 ; AVX512VLDQ-NEXT: vmovdqu64 %zmm2, (%rdi) {%k1}
4784 ; AVX512VLDQ-NEXT: vmovups %zmm3, 64(%rdi)
4785 ; AVX512VLDQ-NEXT: vzeroupper
4786 ; AVX512VLDQ-NEXT: retq
4788 ; AVX512VLBW-LABEL: mstore_constmask_allones_split:
4789 ; AVX512VLBW: ## %bb.0:
4790 ; AVX512VLBW-NEXT: movb $-37, %al
4791 ; AVX512VLBW-NEXT: kmovd %eax, %k1
4792 ; AVX512VLBW-NEXT: vmovdqu64 %zmm2, (%rdi) {%k1}
4793 ; AVX512VLBW-NEXT: vmovups %zmm3, 64(%rdi)
4794 ; AVX512VLBW-NEXT: vzeroupper
4795 ; AVX512VLBW-NEXT: retq
4797 ; X86-AVX512-LABEL: mstore_constmask_allones_split:
4798 ; X86-AVX512: ## %bb.0:
4799 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4800 ; X86-AVX512-NEXT: movb $-37, %cl
4801 ; X86-AVX512-NEXT: kmovd %ecx, %k1
4802 ; X86-AVX512-NEXT: vmovdqu64 %zmm2, (%eax) {%k1}
4803 ; X86-AVX512-NEXT: vmovups %zmm3, 64(%eax)
4804 ; X86-AVX512-NEXT: vzeroupper
4805 ; X86-AVX512-NEXT: retl
4806 %mask = icmp eq <16 x i64> %trigger, zeroinitializer
4807 call void @llvm.masked.store.v16i64.p0(<16 x i64> %val, ptr %addr, i32 4, <16 x i1><i1 true, i1 true, i1 false, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>)
4811 ; When only one element of the mask is set, reduce to a scalar store.
4813 define void @one_mask_bit_set1(ptr %addr, <4 x i32> %val) {
4814 ; SSE-LABEL: one_mask_bit_set1:
4816 ; SSE-NEXT: movss %xmm0, (%rdi)
4819 ; AVX-LABEL: one_mask_bit_set1:
4821 ; AVX-NEXT: vmovss %xmm0, (%rdi)
4824 ; X86-AVX512-LABEL: one_mask_bit_set1:
4825 ; X86-AVX512: ## %bb.0:
4826 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4827 ; X86-AVX512-NEXT: vmovss %xmm0, (%eax)
4828 ; X86-AVX512-NEXT: retl
4829 call void @llvm.masked.store.v4i32.p0(<4 x i32> %val, ptr %addr, i32 4, <4 x i1><i1 true, i1 false, i1 false, i1 false>)
4833 ; Choose a different element to show that the correct address offset is produced.
4835 define void @one_mask_bit_set2(ptr %addr, <4 x float> %val) {
4836 ; SSE2-LABEL: one_mask_bit_set2:
4838 ; SSE2-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]
4839 ; SSE2-NEXT: movss %xmm0, 8(%rdi)
4842 ; SSE4-LABEL: one_mask_bit_set2:
4844 ; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)
4847 ; AVX-LABEL: one_mask_bit_set2:
4849 ; AVX-NEXT: vextractps $2, %xmm0, 8(%rdi)
4852 ; X86-AVX512-LABEL: one_mask_bit_set2:
4853 ; X86-AVX512: ## %bb.0:
4854 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4855 ; X86-AVX512-NEXT: vextractps $2, %xmm0, 8(%eax)
4856 ; X86-AVX512-NEXT: retl
4857 call void @llvm.masked.store.v4f32.p0(<4 x float> %val, ptr %addr, i32 4, <4 x i1><i1 false, i1 false, i1 true, i1 false>)
4861 ; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.
4863 define void @one_mask_bit_set3(ptr %addr, <4 x i64> %val) {
4864 ; SSE-LABEL: one_mask_bit_set3:
4866 ; SSE-NEXT: movlps %xmm1, 16(%rdi)
4869 ; AVX-LABEL: one_mask_bit_set3:
4871 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0
4872 ; AVX-NEXT: vmovlps %xmm0, 16(%rdi)
4873 ; AVX-NEXT: vzeroupper
4876 ; X86-AVX512-LABEL: one_mask_bit_set3:
4877 ; X86-AVX512: ## %bb.0:
4878 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4879 ; X86-AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
4880 ; X86-AVX512-NEXT: vmovlps %xmm0, 16(%eax)
4881 ; X86-AVX512-NEXT: vzeroupper
4882 ; X86-AVX512-NEXT: retl
4883 call void @llvm.masked.store.v4i64.p0(<4 x i64> %val, ptr %addr, i32 4, <4 x i1><i1 false, i1 false, i1 true, i1 false>)
4887 ; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.
4889 define void @one_mask_bit_set4(ptr %addr, <4 x double> %val) {
4890 ; SSE-LABEL: one_mask_bit_set4:
4892 ; SSE-NEXT: movhps %xmm1, 24(%rdi)
4895 ; AVX-LABEL: one_mask_bit_set4:
4897 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0
4898 ; AVX-NEXT: vmovhps %xmm0, 24(%rdi)
4899 ; AVX-NEXT: vzeroupper
4902 ; X86-AVX512-LABEL: one_mask_bit_set4:
4903 ; X86-AVX512: ## %bb.0:
4904 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4905 ; X86-AVX512-NEXT: vextractf128 $1, %ymm0, %xmm0
4906 ; X86-AVX512-NEXT: vmovhps %xmm0, 24(%eax)
4907 ; X86-AVX512-NEXT: vzeroupper
4908 ; X86-AVX512-NEXT: retl
4909 call void @llvm.masked.store.v4f64.p0(<4 x double> %val, ptr %addr, i32 4, <4 x i1><i1 false, i1 false, i1 false, i1 true>)
4913 ; Try a 512-bit vector to make sure AVX doesn't die and AVX512 works as expected.
4915 define void @one_mask_bit_set5(ptr %addr, <8 x double> %val) {
4916 ; SSE-LABEL: one_mask_bit_set5:
4918 ; SSE-NEXT: movlps %xmm3, 48(%rdi)
4921 ; AVX1OR2-LABEL: one_mask_bit_set5:
4922 ; AVX1OR2: ## %bb.0:
4923 ; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0
4924 ; AVX1OR2-NEXT: vmovlps %xmm0, 48(%rdi)
4925 ; AVX1OR2-NEXT: vzeroupper
4926 ; AVX1OR2-NEXT: retq
4928 ; AVX512-LABEL: one_mask_bit_set5:
4930 ; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
4931 ; AVX512-NEXT: vmovlps %xmm0, 48(%rdi)
4932 ; AVX512-NEXT: vzeroupper
4935 ; X86-AVX512-LABEL: one_mask_bit_set5:
4936 ; X86-AVX512: ## %bb.0:
4937 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4938 ; X86-AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
4939 ; X86-AVX512-NEXT: vmovlps %xmm0, 48(%eax)
4940 ; X86-AVX512-NEXT: vzeroupper
4941 ; X86-AVX512-NEXT: retl
4942 call void @llvm.masked.store.v8f64.p0(<8 x double> %val, ptr %addr, i32 4, <8 x i1><i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false>)
4946 ; Try one elt in each half of a vector that needs to split
4947 define void @one_mask_bit_set6(ptr %addr, <16 x i64> %val) {
4948 ; SSE2-LABEL: one_mask_bit_set6:
4950 ; SSE2-NEXT: movlps %xmm3, 48(%rdi)
4951 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm5[2,3,2,3]
4952 ; SSE2-NEXT: movq %xmm0, 88(%rdi)
4955 ; SSE4-LABEL: one_mask_bit_set6:
4957 ; SSE4-NEXT: movlps %xmm3, 48(%rdi)
4958 ; SSE4-NEXT: pextrq $1, %xmm5, 88(%rdi)
4961 ; AVX1-LABEL: one_mask_bit_set6:
4963 ; AVX1-NEXT: vmovapd {{.*#+}} ymm0 = [0,0,0,18446744073709551615]
4964 ; AVX1-NEXT: vmaskmovpd %ymm2, %ymm0, 64(%rdi)
4965 ; AVX1-NEXT: vmovapd {{.*#+}} ymm0 = [0,0,18446744073709551615,0]
4966 ; AVX1-NEXT: vmaskmovpd %ymm1, %ymm0, 32(%rdi)
4967 ; AVX1-NEXT: vzeroupper
4970 ; AVX2-LABEL: one_mask_bit_set6:
4972 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm0 = [0,0,0,18446744073709551615]
4973 ; AVX2-NEXT: vpmaskmovq %ymm2, %ymm0, 64(%rdi)
4974 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm0 = [0,0,18446744073709551615,0]
4975 ; AVX2-NEXT: vpmaskmovq %ymm1, %ymm0, 32(%rdi)
4976 ; AVX2-NEXT: vzeroupper
4979 ; AVX512-LABEL: one_mask_bit_set6:
4981 ; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
4982 ; AVX512-NEXT: vmovlps %xmm0, 48(%rdi)
4983 ; AVX512-NEXT: vextracti128 $1, %ymm1, %xmm0
4984 ; AVX512-NEXT: vpextrq $1, %xmm0, 88(%rdi)
4985 ; AVX512-NEXT: vzeroupper
4988 ; X86-AVX512-LABEL: one_mask_bit_set6:
4989 ; X86-AVX512: ## %bb.0:
4990 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
4991 ; X86-AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm0
4992 ; X86-AVX512-NEXT: vmovlps %xmm0, 48(%eax)
4993 ; X86-AVX512-NEXT: vextractf128 $1, %ymm1, %xmm0
4994 ; X86-AVX512-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,3,0,1]
4995 ; X86-AVX512-NEXT: vmovlps %xmm0, 88(%eax)
4996 ; X86-AVX512-NEXT: vzeroupper
4997 ; X86-AVX512-NEXT: retl
4998 call void @llvm.masked.store.v16i64.p0(<16 x i64> %val, ptr %addr, i32 4, <16 x i1><i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false>)
5002 define void @top_bits_unset_stack() {
5003 ; SSE-LABEL: top_bits_unset_stack:
5004 ; SSE: ## %bb.0: ## %entry
5005 ; SSE-NEXT: xorps %xmm0, %xmm0
5006 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
5007 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
5008 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
5011 ; AVX1OR2-LABEL: top_bits_unset_stack:
5012 ; AVX1OR2: ## %bb.0: ## %entry
5013 ; AVX1OR2-NEXT: vxorpd %xmm0, %xmm0, %xmm0
5014 ; AVX1OR2-NEXT: vmovapd {{.*#+}} ymm1 = [18446744073709551615,18446744073709551615,0,0]
5015 ; AVX1OR2-NEXT: vmaskmovpd %ymm0, %ymm1, -{{[0-9]+}}(%rsp)
5016 ; AVX1OR2-NEXT: vmovupd %ymm0, -{{[0-9]+}}(%rsp)
5017 ; AVX1OR2-NEXT: vzeroupper
5018 ; AVX1OR2-NEXT: retq
5020 ; AVX512F-LABEL: top_bits_unset_stack:
5021 ; AVX512F: ## %bb.0: ## %entry
5022 ; AVX512F-NEXT: vxorpd %xmm0, %xmm0, %xmm0
5023 ; AVX512F-NEXT: movb $63, %al
5024 ; AVX512F-NEXT: kmovw %eax, %k1
5025 ; AVX512F-NEXT: vmovupd %zmm0, -{{[0-9]+}}(%rsp) {%k1}
5026 ; AVX512F-NEXT: vzeroupper
5027 ; AVX512F-NEXT: retq
5029 ; AVX512VLDQ-LABEL: top_bits_unset_stack:
5030 ; AVX512VLDQ: ## %bb.0: ## %entry
5031 ; AVX512VLDQ-NEXT: vxorpd %xmm0, %xmm0, %xmm0
5032 ; AVX512VLDQ-NEXT: movb $63, %al
5033 ; AVX512VLDQ-NEXT: kmovw %eax, %k1
5034 ; AVX512VLDQ-NEXT: vmovupd %zmm0, -{{[0-9]+}}(%rsp) {%k1}
5035 ; AVX512VLDQ-NEXT: vzeroupper
5036 ; AVX512VLDQ-NEXT: retq
5038 ; AVX512VLBW-LABEL: top_bits_unset_stack:
5039 ; AVX512VLBW: ## %bb.0: ## %entry
5040 ; AVX512VLBW-NEXT: vxorpd %xmm0, %xmm0, %xmm0
5041 ; AVX512VLBW-NEXT: movb $63, %al
5042 ; AVX512VLBW-NEXT: kmovd %eax, %k1
5043 ; AVX512VLBW-NEXT: vmovupd %zmm0, -{{[0-9]+}}(%rsp) {%k1}
5044 ; AVX512VLBW-NEXT: vzeroupper
5045 ; AVX512VLBW-NEXT: retq
5047 ; X86-AVX512-LABEL: top_bits_unset_stack:
5048 ; X86-AVX512: ## %bb.0: ## %entry
5049 ; X86-AVX512-NEXT: subl $76, %esp
5050 ; X86-AVX512-NEXT: .cfi_def_cfa_offset 80
5051 ; X86-AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0
5052 ; X86-AVX512-NEXT: movb $63, %al
5053 ; X86-AVX512-NEXT: kmovd %eax, %k1
5054 ; X86-AVX512-NEXT: vmovupd %zmm0, (%esp) {%k1}
5055 ; X86-AVX512-NEXT: addl $76, %esp
5056 ; X86-AVX512-NEXT: vzeroupper
5057 ; X86-AVX512-NEXT: retl
5059 %P.i150.i.i = alloca [3 x [3 x double]], align 16
5060 call void @llvm.masked.store.v8f64.p0(<8 x double> zeroinitializer, ptr %P.i150.i.i, i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false>)
5065 ; SimplifyDemandedBits eliminates an ashr here.
5067 define void @masked_store_bool_mask_demand_trunc_sext(<4 x double> %x, ptr %p, <4 x i32> %masksrc) {
5068 ; SSE-LABEL: masked_store_bool_mask_demand_trunc_sext:
5070 ; SSE-NEXT: pslld $31, %xmm2
5071 ; SSE-NEXT: movmskps %xmm2, %eax
5072 ; SSE-NEXT: testb $1, %al
5073 ; SSE-NEXT: jne LBB26_1
5074 ; SSE-NEXT: ## %bb.2: ## %else
5075 ; SSE-NEXT: testb $2, %al
5076 ; SSE-NEXT: jne LBB26_3
5077 ; SSE-NEXT: LBB26_4: ## %else2
5078 ; SSE-NEXT: testb $4, %al
5079 ; SSE-NEXT: jne LBB26_5
5080 ; SSE-NEXT: LBB26_6: ## %else4
5081 ; SSE-NEXT: testb $8, %al
5082 ; SSE-NEXT: jne LBB26_7
5083 ; SSE-NEXT: LBB26_8: ## %else6
5085 ; SSE-NEXT: LBB26_1: ## %cond.store
5086 ; SSE-NEXT: movlps %xmm0, (%rdi)
5087 ; SSE-NEXT: testb $2, %al
5088 ; SSE-NEXT: je LBB26_4
5089 ; SSE-NEXT: LBB26_3: ## %cond.store1
5090 ; SSE-NEXT: movhps %xmm0, 8(%rdi)
5091 ; SSE-NEXT: testb $4, %al
5092 ; SSE-NEXT: je LBB26_6
5093 ; SSE-NEXT: LBB26_5: ## %cond.store3
5094 ; SSE-NEXT: movlps %xmm1, 16(%rdi)
5095 ; SSE-NEXT: testb $8, %al
5096 ; SSE-NEXT: je LBB26_8
5097 ; SSE-NEXT: LBB26_7: ## %cond.store5
5098 ; SSE-NEXT: movhps %xmm1, 24(%rdi)
5101 ; AVX1-LABEL: masked_store_bool_mask_demand_trunc_sext:
5103 ; AVX1-NEXT: vpslld $31, %xmm1, %xmm1
5104 ; AVX1-NEXT: vpmovsxdq %xmm1, %xmm2
5105 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,2,3]
5106 ; AVX1-NEXT: vpmovsxdq %xmm1, %xmm1
5107 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
5108 ; AVX1-NEXT: vmaskmovpd %ymm0, %ymm1, (%rdi)
5109 ; AVX1-NEXT: vzeroupper
5112 ; AVX2-LABEL: masked_store_bool_mask_demand_trunc_sext:
5114 ; AVX2-NEXT: vpslld $31, %xmm1, %xmm1
5115 ; AVX2-NEXT: vpmovsxdq %xmm1, %ymm1
5116 ; AVX2-NEXT: vmaskmovpd %ymm0, %ymm1, (%rdi)
5117 ; AVX2-NEXT: vzeroupper
5120 ; AVX512F-LABEL: masked_store_bool_mask_demand_trunc_sext:
5121 ; AVX512F: ## %bb.0:
5122 ; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0
5123 ; AVX512F-NEXT: vpslld $31, %xmm1, %xmm1
5124 ; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0
5125 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
5126 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
5127 ; AVX512F-NEXT: vmovupd %zmm0, (%rdi) {%k1}
5128 ; AVX512F-NEXT: vzeroupper
5129 ; AVX512F-NEXT: retq
5131 ; AVX512VLDQ-LABEL: masked_store_bool_mask_demand_trunc_sext:
5132 ; AVX512VLDQ: ## %bb.0:
5133 ; AVX512VLDQ-NEXT: vpslld $31, %xmm1, %xmm1
5134 ; AVX512VLDQ-NEXT: vpmovd2m %xmm1, %k1
5135 ; AVX512VLDQ-NEXT: vmovupd %ymm0, (%rdi) {%k1}
5136 ; AVX512VLDQ-NEXT: vzeroupper
5137 ; AVX512VLDQ-NEXT: retq
5139 ; AVX512VLBW-LABEL: masked_store_bool_mask_demand_trunc_sext:
5140 ; AVX512VLBW: ## %bb.0:
5141 ; AVX512VLBW-NEXT: vpslld $31, %xmm1, %xmm1
5142 ; AVX512VLBW-NEXT: vptestmd %xmm1, %xmm1, %k1
5143 ; AVX512VLBW-NEXT: vmovupd %ymm0, (%rdi) {%k1}
5144 ; AVX512VLBW-NEXT: vzeroupper
5145 ; AVX512VLBW-NEXT: retq
5147 ; X86-AVX512-LABEL: masked_store_bool_mask_demand_trunc_sext:
5148 ; X86-AVX512: ## %bb.0:
5149 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
5150 ; X86-AVX512-NEXT: vpslld $31, %xmm1, %xmm1
5151 ; X86-AVX512-NEXT: vpmovd2m %xmm1, %k1
5152 ; X86-AVX512-NEXT: vmovupd %ymm0, (%eax) {%k1}
5153 ; X86-AVX512-NEXT: vzeroupper
5154 ; X86-AVX512-NEXT: retl
5155 %sext = sext <4 x i32> %masksrc to <4 x i64>
5156 %boolmask = trunc <4 x i64> %sext to <4 x i1>
5157 call void @llvm.masked.store.v4f64.p0(<4 x double> %x, ptr %p, i32 4, <4 x i1> %boolmask)
5163 define void @one_mask_bit_set1_variable(ptr %addr, <4 x float> %val, <4 x i32> %mask) {
5164 ; SSE2-LABEL: one_mask_bit_set1_variable:
5166 ; SSE2-NEXT: movmskps %xmm1, %eax
5167 ; SSE2-NEXT: testb $1, %al
5168 ; SSE2-NEXT: jne LBB27_1
5169 ; SSE2-NEXT: ## %bb.2: ## %else
5170 ; SSE2-NEXT: testb $2, %al
5171 ; SSE2-NEXT: jne LBB27_3
5172 ; SSE2-NEXT: LBB27_4: ## %else2
5173 ; SSE2-NEXT: testb $4, %al
5174 ; SSE2-NEXT: jne LBB27_5
5175 ; SSE2-NEXT: LBB27_6: ## %else4
5176 ; SSE2-NEXT: testb $8, %al
5177 ; SSE2-NEXT: jne LBB27_7
5178 ; SSE2-NEXT: LBB27_8: ## %else6
5180 ; SSE2-NEXT: LBB27_1: ## %cond.store
5181 ; SSE2-NEXT: movss %xmm0, (%rdi)
5182 ; SSE2-NEXT: testb $2, %al
5183 ; SSE2-NEXT: je LBB27_4
5184 ; SSE2-NEXT: LBB27_3: ## %cond.store1
5185 ; SSE2-NEXT: movaps %xmm0, %xmm1
5186 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]
5187 ; SSE2-NEXT: movss %xmm1, 4(%rdi)
5188 ; SSE2-NEXT: testb $4, %al
5189 ; SSE2-NEXT: je LBB27_6
5190 ; SSE2-NEXT: LBB27_5: ## %cond.store3
5191 ; SSE2-NEXT: movaps %xmm0, %xmm1
5192 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1]
5193 ; SSE2-NEXT: movss %xmm1, 8(%rdi)
5194 ; SSE2-NEXT: testb $8, %al
5195 ; SSE2-NEXT: je LBB27_8
5196 ; SSE2-NEXT: LBB27_7: ## %cond.store5
5197 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
5198 ; SSE2-NEXT: movss %xmm0, 12(%rdi)
5201 ; SSE4-LABEL: one_mask_bit_set1_variable:
5203 ; SSE4-NEXT: movmskps %xmm1, %eax
5204 ; SSE4-NEXT: testb $1, %al
5205 ; SSE4-NEXT: jne LBB27_1
5206 ; SSE4-NEXT: ## %bb.2: ## %else
5207 ; SSE4-NEXT: testb $2, %al
5208 ; SSE4-NEXT: jne LBB27_3
5209 ; SSE4-NEXT: LBB27_4: ## %else2
5210 ; SSE4-NEXT: testb $4, %al
5211 ; SSE4-NEXT: jne LBB27_5
5212 ; SSE4-NEXT: LBB27_6: ## %else4
5213 ; SSE4-NEXT: testb $8, %al
5214 ; SSE4-NEXT: jne LBB27_7
5215 ; SSE4-NEXT: LBB27_8: ## %else6
5217 ; SSE4-NEXT: LBB27_1: ## %cond.store
5218 ; SSE4-NEXT: movss %xmm0, (%rdi)
5219 ; SSE4-NEXT: testb $2, %al
5220 ; SSE4-NEXT: je LBB27_4
5221 ; SSE4-NEXT: LBB27_3: ## %cond.store1
5222 ; SSE4-NEXT: extractps $1, %xmm0, 4(%rdi)
5223 ; SSE4-NEXT: testb $4, %al
5224 ; SSE4-NEXT: je LBB27_6
5225 ; SSE4-NEXT: LBB27_5: ## %cond.store3
5226 ; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)
5227 ; SSE4-NEXT: testb $8, %al
5228 ; SSE4-NEXT: je LBB27_8
5229 ; SSE4-NEXT: LBB27_7: ## %cond.store5
5230 ; SSE4-NEXT: extractps $3, %xmm0, 12(%rdi)
5233 ; AVX1OR2-LABEL: one_mask_bit_set1_variable:
5234 ; AVX1OR2: ## %bb.0:
5235 ; AVX1OR2-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)
5236 ; AVX1OR2-NEXT: retq
5238 ; AVX512F-LABEL: one_mask_bit_set1_variable:
5239 ; AVX512F: ## %bb.0:
5240 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
5241 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
5242 ; AVX512F-NEXT: vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm1, %k0
5243 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
5244 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
5245 ; AVX512F-NEXT: vmovups %zmm0, (%rdi) {%k1}
5246 ; AVX512F-NEXT: vzeroupper
5247 ; AVX512F-NEXT: retq
5249 ; AVX512VL-LABEL: one_mask_bit_set1_variable:
5250 ; AVX512VL: ## %bb.0:
5251 ; AVX512VL-NEXT: vptestmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm1, %k1
5252 ; AVX512VL-NEXT: vmovups %xmm0, (%rdi) {%k1}
5253 ; AVX512VL-NEXT: retq
5255 ; X86-AVX512-LABEL: one_mask_bit_set1_variable:
5256 ; X86-AVX512: ## %bb.0:
5257 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
5258 ; X86-AVX512-NEXT: vptestmd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm1, %k1
5259 ; X86-AVX512-NEXT: vmovups %xmm0, (%eax) {%k1}
5260 ; X86-AVX512-NEXT: retl
5261 %mask_signbit = and <4 x i32> %mask, <i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648>
5262 %mask_bool = icmp ne <4 x i32> %mask_signbit, zeroinitializer
5263 call void @llvm.masked.store.v4f32.p0(<4 x float> %val, ptr %addr, i32 1, <4 x i1> %mask_bool)
5267 ; This needs to be widened to v4i32.
5268 ; This used to assert in type legalization. PR38436
5269 ; FIXME: The codegen for AVX512 should use KSHIFT to zero the upper bits of the mask.
5270 define void @widen_masked_store(<3 x i32> %v, ptr %p, <3 x i1> %mask) {
5271 ; SSE2-LABEL: widen_masked_store:
5273 ; SSE2-NEXT: andb $1, %sil
5274 ; SSE2-NEXT: andb $1, %dl
5275 ; SSE2-NEXT: addb %dl, %dl
5276 ; SSE2-NEXT: orb %sil, %dl
5277 ; SSE2-NEXT: andb $1, %cl
5278 ; SSE2-NEXT: shlb $2, %cl
5279 ; SSE2-NEXT: orb %dl, %cl
5280 ; SSE2-NEXT: testb $1, %cl
5281 ; SSE2-NEXT: jne LBB28_1
5282 ; SSE2-NEXT: ## %bb.2: ## %else
5283 ; SSE2-NEXT: testb $2, %cl
5284 ; SSE2-NEXT: jne LBB28_3
5285 ; SSE2-NEXT: LBB28_4: ## %else2
5286 ; SSE2-NEXT: testb $4, %cl
5287 ; SSE2-NEXT: jne LBB28_5
5288 ; SSE2-NEXT: LBB28_6: ## %else4
5290 ; SSE2-NEXT: LBB28_1: ## %cond.store
5291 ; SSE2-NEXT: movd %xmm0, (%rdi)
5292 ; SSE2-NEXT: testb $2, %cl
5293 ; SSE2-NEXT: je LBB28_4
5294 ; SSE2-NEXT: LBB28_3: ## %cond.store1
5295 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
5296 ; SSE2-NEXT: movd %xmm1, 4(%rdi)
5297 ; SSE2-NEXT: testb $4, %cl
5298 ; SSE2-NEXT: je LBB28_6
5299 ; SSE2-NEXT: LBB28_5: ## %cond.store3
5300 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3]
5301 ; SSE2-NEXT: movd %xmm0, 8(%rdi)
5304 ; SSE4-LABEL: widen_masked_store:
5306 ; SSE4-NEXT: andb $1, %sil
5307 ; SSE4-NEXT: andb $1, %dl
5308 ; SSE4-NEXT: addb %dl, %dl
5309 ; SSE4-NEXT: orb %sil, %dl
5310 ; SSE4-NEXT: andb $1, %cl
5311 ; SSE4-NEXT: shlb $2, %cl
5312 ; SSE4-NEXT: orb %dl, %cl
5313 ; SSE4-NEXT: testb $1, %cl
5314 ; SSE4-NEXT: jne LBB28_1
5315 ; SSE4-NEXT: ## %bb.2: ## %else
5316 ; SSE4-NEXT: testb $2, %cl
5317 ; SSE4-NEXT: jne LBB28_3
5318 ; SSE4-NEXT: LBB28_4: ## %else2
5319 ; SSE4-NEXT: testb $4, %cl
5320 ; SSE4-NEXT: jne LBB28_5
5321 ; SSE4-NEXT: LBB28_6: ## %else4
5323 ; SSE4-NEXT: LBB28_1: ## %cond.store
5324 ; SSE4-NEXT: movss %xmm0, (%rdi)
5325 ; SSE4-NEXT: testb $2, %cl
5326 ; SSE4-NEXT: je LBB28_4
5327 ; SSE4-NEXT: LBB28_3: ## %cond.store1
5328 ; SSE4-NEXT: extractps $1, %xmm0, 4(%rdi)
5329 ; SSE4-NEXT: testb $4, %cl
5330 ; SSE4-NEXT: je LBB28_6
5331 ; SSE4-NEXT: LBB28_5: ## %cond.store3
5332 ; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)
5335 ; AVX1-LABEL: widen_masked_store:
5337 ; AVX1-NEXT: vmovd %edx, %xmm1
5338 ; AVX1-NEXT: vmovd %esi, %xmm2
5339 ; AVX1-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
5340 ; AVX1-NEXT: vmovd %ecx, %xmm2
5341 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
5342 ; AVX1-NEXT: vpslld $31, %xmm1, %xmm1
5343 ; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)
5346 ; AVX2-LABEL: widen_masked_store:
5348 ; AVX2-NEXT: vmovd %edx, %xmm1
5349 ; AVX2-NEXT: vmovd %esi, %xmm2
5350 ; AVX2-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
5351 ; AVX2-NEXT: vmovd %ecx, %xmm2
5352 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
5353 ; AVX2-NEXT: vpslld $31, %xmm1, %xmm1
5354 ; AVX2-NEXT: vpmaskmovd %xmm0, %xmm1, (%rdi)
5357 ; AVX512F-LABEL: widen_masked_store:
5358 ; AVX512F: ## %bb.0:
5359 ; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0
5360 ; AVX512F-NEXT: andl $1, %esi
5361 ; AVX512F-NEXT: kmovw %esi, %k0
5362 ; AVX512F-NEXT: kmovw %edx, %k1
5363 ; AVX512F-NEXT: kshiftlw $15, %k1, %k1
5364 ; AVX512F-NEXT: kshiftrw $14, %k1, %k1
5365 ; AVX512F-NEXT: korw %k1, %k0, %k0
5366 ; AVX512F-NEXT: movw $-5, %ax
5367 ; AVX512F-NEXT: kmovw %eax, %k1
5368 ; AVX512F-NEXT: kandw %k1, %k0, %k0
5369 ; AVX512F-NEXT: kmovw %ecx, %k1
5370 ; AVX512F-NEXT: kshiftlw $15, %k1, %k1
5371 ; AVX512F-NEXT: kshiftrw $13, %k1, %k1
5372 ; AVX512F-NEXT: korw %k1, %k0, %k0
5373 ; AVX512F-NEXT: movb $7, %al
5374 ; AVX512F-NEXT: kmovw %eax, %k1
5375 ; AVX512F-NEXT: kandw %k1, %k0, %k0
5376 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
5377 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
5378 ; AVX512F-NEXT: vmovdqu32 %zmm0, (%rdi) {%k1}
5379 ; AVX512F-NEXT: vzeroupper
5380 ; AVX512F-NEXT: retq
5382 ; AVX512VLDQ-LABEL: widen_masked_store:
5383 ; AVX512VLDQ: ## %bb.0:
5384 ; AVX512VLDQ-NEXT: kmovw %edx, %k0
5385 ; AVX512VLDQ-NEXT: kshiftlb $7, %k0, %k0
5386 ; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k0
5387 ; AVX512VLDQ-NEXT: kmovw %esi, %k1
5388 ; AVX512VLDQ-NEXT: kshiftlb $7, %k1, %k1
5389 ; AVX512VLDQ-NEXT: kshiftrb $7, %k1, %k1
5390 ; AVX512VLDQ-NEXT: korw %k0, %k1, %k0
5391 ; AVX512VLDQ-NEXT: movb $-5, %al
5392 ; AVX512VLDQ-NEXT: kmovw %eax, %k1
5393 ; AVX512VLDQ-NEXT: kandw %k1, %k0, %k0
5394 ; AVX512VLDQ-NEXT: kmovw %ecx, %k1
5395 ; AVX512VLDQ-NEXT: kshiftlb $7, %k1, %k1
5396 ; AVX512VLDQ-NEXT: kshiftrb $5, %k1, %k1
5397 ; AVX512VLDQ-NEXT: korw %k1, %k0, %k0
5398 ; AVX512VLDQ-NEXT: movb $7, %al
5399 ; AVX512VLDQ-NEXT: kmovw %eax, %k1
5400 ; AVX512VLDQ-NEXT: kandw %k1, %k0, %k1
5401 ; AVX512VLDQ-NEXT: vmovdqa32 %xmm0, (%rdi) {%k1}
5402 ; AVX512VLDQ-NEXT: retq
5404 ; AVX512VLBW-LABEL: widen_masked_store:
5405 ; AVX512VLBW: ## %bb.0:
5406 ; AVX512VLBW-NEXT: andl $1, %esi
5407 ; AVX512VLBW-NEXT: kmovw %esi, %k0
5408 ; AVX512VLBW-NEXT: kmovd %edx, %k1
5409 ; AVX512VLBW-NEXT: kshiftlw $15, %k1, %k1
5410 ; AVX512VLBW-NEXT: kshiftrw $14, %k1, %k1
5411 ; AVX512VLBW-NEXT: korw %k1, %k0, %k0
5412 ; AVX512VLBW-NEXT: movw $-5, %ax
5413 ; AVX512VLBW-NEXT: kmovd %eax, %k1
5414 ; AVX512VLBW-NEXT: kandw %k1, %k0, %k0
5415 ; AVX512VLBW-NEXT: kmovd %ecx, %k1
5416 ; AVX512VLBW-NEXT: kshiftlw $15, %k1, %k1
5417 ; AVX512VLBW-NEXT: kshiftrw $13, %k1, %k1
5418 ; AVX512VLBW-NEXT: korw %k1, %k0, %k0
5419 ; AVX512VLBW-NEXT: movb $7, %al
5420 ; AVX512VLBW-NEXT: kmovd %eax, %k1
5421 ; AVX512VLBW-NEXT: kandw %k1, %k0, %k1
5422 ; AVX512VLBW-NEXT: vmovdqa32 %xmm0, (%rdi) {%k1}
5423 ; AVX512VLBW-NEXT: retq
5425 ; X86-AVX512-LABEL: widen_masked_store:
5426 ; X86-AVX512: ## %bb.0:
5427 ; X86-AVX512-NEXT: kmovb {{[0-9]+}}(%esp), %k0
5428 ; X86-AVX512-NEXT: kshiftlb $7, %k0, %k0
5429 ; X86-AVX512-NEXT: kshiftrb $6, %k0, %k0
5430 ; X86-AVX512-NEXT: kmovb {{[0-9]+}}(%esp), %k1
5431 ; X86-AVX512-NEXT: kshiftlb $7, %k1, %k1
5432 ; X86-AVX512-NEXT: kshiftrb $7, %k1, %k1
5433 ; X86-AVX512-NEXT: korw %k0, %k1, %k0
5434 ; X86-AVX512-NEXT: movb $-5, %al
5435 ; X86-AVX512-NEXT: kmovd %eax, %k1
5436 ; X86-AVX512-NEXT: kandw %k1, %k0, %k0
5437 ; X86-AVX512-NEXT: kmovb {{[0-9]+}}(%esp), %k1
5438 ; X86-AVX512-NEXT: kshiftlb $7, %k1, %k1
5439 ; X86-AVX512-NEXT: kshiftrb $5, %k1, %k1
5440 ; X86-AVX512-NEXT: korw %k1, %k0, %k0
5441 ; X86-AVX512-NEXT: movb $7, %al
5442 ; X86-AVX512-NEXT: kmovd %eax, %k1
5443 ; X86-AVX512-NEXT: kandw %k1, %k0, %k1
5444 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
5445 ; X86-AVX512-NEXT: vmovdqa32 %xmm0, (%eax) {%k1}
5446 ; X86-AVX512-NEXT: retl
5447 call void @llvm.masked.store.v3i32.p0(<3 x i32> %v, ptr %p, i32 16, <3 x i1> %mask)
5451 define void @zero_mask(ptr %addr, <2 x double> %val) {
5452 ; SSE-LABEL: zero_mask:
5456 ; AVX-LABEL: zero_mask:
5460 ; X86-AVX512-LABEL: zero_mask:
5461 ; X86-AVX512: ## %bb.0:
5462 ; X86-AVX512-NEXT: retl
5463 call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %addr, i32 4, <2 x i1> zeroinitializer)
5467 define void @PR11210(<4 x float> %x, ptr %ptr, <4 x float> %y, <2 x i64> %mask) {
5468 ; SSE2-LABEL: PR11210:
5470 ; SSE2-NEXT: movmskps %xmm2, %eax
5471 ; SSE2-NEXT: testb $1, %al
5472 ; SSE2-NEXT: jne LBB30_1
5473 ; SSE2-NEXT: ## %bb.2: ## %else
5474 ; SSE2-NEXT: testb $2, %al
5475 ; SSE2-NEXT: jne LBB30_3
5476 ; SSE2-NEXT: LBB30_4: ## %else2
5477 ; SSE2-NEXT: testb $4, %al
5478 ; SSE2-NEXT: jne LBB30_5
5479 ; SSE2-NEXT: LBB30_6: ## %else4
5480 ; SSE2-NEXT: testb $8, %al
5481 ; SSE2-NEXT: jne LBB30_7
5482 ; SSE2-NEXT: LBB30_8: ## %else6
5483 ; SSE2-NEXT: testb $1, %al
5484 ; SSE2-NEXT: jne LBB30_9
5485 ; SSE2-NEXT: LBB30_10: ## %else9
5486 ; SSE2-NEXT: testb $2, %al
5487 ; SSE2-NEXT: jne LBB30_11
5488 ; SSE2-NEXT: LBB30_12: ## %else11
5489 ; SSE2-NEXT: testb $4, %al
5490 ; SSE2-NEXT: jne LBB30_13
5491 ; SSE2-NEXT: LBB30_14: ## %else13
5492 ; SSE2-NEXT: testb $8, %al
5493 ; SSE2-NEXT: jne LBB30_15
5494 ; SSE2-NEXT: LBB30_16: ## %else15
5496 ; SSE2-NEXT: LBB30_1: ## %cond.store
5497 ; SSE2-NEXT: movss %xmm0, (%rdi)
5498 ; SSE2-NEXT: testb $2, %al
5499 ; SSE2-NEXT: je LBB30_4
5500 ; SSE2-NEXT: LBB30_3: ## %cond.store1
5501 ; SSE2-NEXT: movaps %xmm0, %xmm2
5502 ; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[1,1],xmm0[1,1]
5503 ; SSE2-NEXT: movss %xmm2, 4(%rdi)
5504 ; SSE2-NEXT: testb $4, %al
5505 ; SSE2-NEXT: je LBB30_6
5506 ; SSE2-NEXT: LBB30_5: ## %cond.store3
5507 ; SSE2-NEXT: movaps %xmm0, %xmm2
5508 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]
5509 ; SSE2-NEXT: movss %xmm2, 8(%rdi)
5510 ; SSE2-NEXT: testb $8, %al
5511 ; SSE2-NEXT: je LBB30_8
5512 ; SSE2-NEXT: LBB30_7: ## %cond.store5
5513 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
5514 ; SSE2-NEXT: movss %xmm0, 12(%rdi)
5515 ; SSE2-NEXT: testb $1, %al
5516 ; SSE2-NEXT: je LBB30_10
5517 ; SSE2-NEXT: LBB30_9: ## %cond.store8
5518 ; SSE2-NEXT: movss %xmm1, (%rdi)
5519 ; SSE2-NEXT: testb $2, %al
5520 ; SSE2-NEXT: je LBB30_12
5521 ; SSE2-NEXT: LBB30_11: ## %cond.store10
5522 ; SSE2-NEXT: movaps %xmm1, %xmm0
5523 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]
5524 ; SSE2-NEXT: movss %xmm0, 4(%rdi)
5525 ; SSE2-NEXT: testb $4, %al
5526 ; SSE2-NEXT: je LBB30_14
5527 ; SSE2-NEXT: LBB30_13: ## %cond.store12
5528 ; SSE2-NEXT: movaps %xmm1, %xmm0
5529 ; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
5530 ; SSE2-NEXT: movss %xmm0, 8(%rdi)
5531 ; SSE2-NEXT: testb $8, %al
5532 ; SSE2-NEXT: je LBB30_16
5533 ; SSE2-NEXT: LBB30_15: ## %cond.store14
5534 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]
5535 ; SSE2-NEXT: movss %xmm1, 12(%rdi)
5538 ; SSE4-LABEL: PR11210:
5540 ; SSE4-NEXT: movmskps %xmm2, %eax
5541 ; SSE4-NEXT: testb $1, %al
5542 ; SSE4-NEXT: jne LBB30_1
5543 ; SSE4-NEXT: ## %bb.2: ## %else
5544 ; SSE4-NEXT: testb $2, %al
5545 ; SSE4-NEXT: jne LBB30_3
5546 ; SSE4-NEXT: LBB30_4: ## %else2
5547 ; SSE4-NEXT: testb $4, %al
5548 ; SSE4-NEXT: jne LBB30_5
5549 ; SSE4-NEXT: LBB30_6: ## %else4
5550 ; SSE4-NEXT: testb $8, %al
5551 ; SSE4-NEXT: jne LBB30_7
5552 ; SSE4-NEXT: LBB30_8: ## %else6
5553 ; SSE4-NEXT: testb $1, %al
5554 ; SSE4-NEXT: jne LBB30_9
5555 ; SSE4-NEXT: LBB30_10: ## %else9
5556 ; SSE4-NEXT: testb $2, %al
5557 ; SSE4-NEXT: jne LBB30_11
5558 ; SSE4-NEXT: LBB30_12: ## %else11
5559 ; SSE4-NEXT: testb $4, %al
5560 ; SSE4-NEXT: jne LBB30_13
5561 ; SSE4-NEXT: LBB30_14: ## %else13
5562 ; SSE4-NEXT: testb $8, %al
5563 ; SSE4-NEXT: jne LBB30_15
5564 ; SSE4-NEXT: LBB30_16: ## %else15
5566 ; SSE4-NEXT: LBB30_1: ## %cond.store
5567 ; SSE4-NEXT: movss %xmm0, (%rdi)
5568 ; SSE4-NEXT: testb $2, %al
5569 ; SSE4-NEXT: je LBB30_4
5570 ; SSE4-NEXT: LBB30_3: ## %cond.store1
5571 ; SSE4-NEXT: extractps $1, %xmm0, 4(%rdi)
5572 ; SSE4-NEXT: testb $4, %al
5573 ; SSE4-NEXT: je LBB30_6
5574 ; SSE4-NEXT: LBB30_5: ## %cond.store3
5575 ; SSE4-NEXT: extractps $2, %xmm0, 8(%rdi)
5576 ; SSE4-NEXT: testb $8, %al
5577 ; SSE4-NEXT: je LBB30_8
5578 ; SSE4-NEXT: LBB30_7: ## %cond.store5
5579 ; SSE4-NEXT: extractps $3, %xmm0, 12(%rdi)
5580 ; SSE4-NEXT: testb $1, %al
5581 ; SSE4-NEXT: je LBB30_10
5582 ; SSE4-NEXT: LBB30_9: ## %cond.store8
5583 ; SSE4-NEXT: movss %xmm1, (%rdi)
5584 ; SSE4-NEXT: testb $2, %al
5585 ; SSE4-NEXT: je LBB30_12
5586 ; SSE4-NEXT: LBB30_11: ## %cond.store10
5587 ; SSE4-NEXT: extractps $1, %xmm1, 4(%rdi)
5588 ; SSE4-NEXT: testb $4, %al
5589 ; SSE4-NEXT: je LBB30_14
5590 ; SSE4-NEXT: LBB30_13: ## %cond.store12
5591 ; SSE4-NEXT: extractps $2, %xmm1, 8(%rdi)
5592 ; SSE4-NEXT: testb $8, %al
5593 ; SSE4-NEXT: je LBB30_16
5594 ; SSE4-NEXT: LBB30_15: ## %cond.store14
5595 ; SSE4-NEXT: extractps $3, %xmm1, 12(%rdi)
5598 ; AVX1OR2-LABEL: PR11210:
5599 ; AVX1OR2: ## %bb.0:
5600 ; AVX1OR2-NEXT: vmaskmovps %xmm1, %xmm2, (%rdi)
5601 ; AVX1OR2-NEXT: retq
5603 ; AVX512F-LABEL: PR11210:
5604 ; AVX512F: ## %bb.0:
5605 ; AVX512F-NEXT: ## kill: def $xmm2 killed $xmm2 def $zmm2
5606 ; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1
5607 ; AVX512F-NEXT: vpxor %xmm0, %xmm0, %xmm0
5608 ; AVX512F-NEXT: vpcmpgtd %zmm2, %zmm0, %k0
5609 ; AVX512F-NEXT: kshiftlw $12, %k0, %k0
5610 ; AVX512F-NEXT: kshiftrw $12, %k0, %k1
5611 ; AVX512F-NEXT: vmovups %zmm1, (%rdi) {%k1}
5612 ; AVX512F-NEXT: vzeroupper
5613 ; AVX512F-NEXT: retq
5615 ; AVX512VLDQ-LABEL: PR11210:
5616 ; AVX512VLDQ: ## %bb.0:
5617 ; AVX512VLDQ-NEXT: vpmovd2m %xmm2, %k1
5618 ; AVX512VLDQ-NEXT: vmovups %xmm1, (%rdi) {%k1}
5619 ; AVX512VLDQ-NEXT: retq
5621 ; AVX512VLBW-LABEL: PR11210:
5622 ; AVX512VLBW: ## %bb.0:
5623 ; AVX512VLBW-NEXT: vpxor %xmm0, %xmm0, %xmm0
5624 ; AVX512VLBW-NEXT: vpcmpgtd %xmm2, %xmm0, %k1
5625 ; AVX512VLBW-NEXT: vmovups %xmm1, (%rdi) {%k1}
5626 ; AVX512VLBW-NEXT: retq
5628 ; X86-AVX512-LABEL: PR11210:
5629 ; X86-AVX512: ## %bb.0:
5630 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
5631 ; X86-AVX512-NEXT: vpmovd2m %xmm2, %k1
5632 ; X86-AVX512-NEXT: vmovups %xmm1, (%eax) {%k1}
5633 ; X86-AVX512-NEXT: retl
5634 %bc = bitcast <2 x i64> %mask to <4 x i32>
5635 %trunc = icmp slt <4 x i32> %bc, zeroinitializer
5636 call void @llvm.masked.store.v4f32.p0(<4 x float> %x, ptr %ptr, i32 1, <4 x i1> %trunc)
5637 call void @llvm.masked.store.v4f32.p0(<4 x float> %y, ptr %ptr, i32 1, <4 x i1> %trunc)
5641 define void @store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts(ptr %trigger.ptr, ptr %val.ptr, ptr %dst) {
5642 ; SSE2-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
5644 ; SSE2-NEXT: movdqa (%rdi), %xmm6
5645 ; SSE2-NEXT: movdqa 32(%rdi), %xmm7
5646 ; SSE2-NEXT: movdqa 64(%rdi), %xmm8
5647 ; SSE2-NEXT: movl 80(%rsi), %eax
5648 ; SSE2-NEXT: movl 64(%rsi), %r8d
5649 ; SSE2-NEXT: movl 48(%rsi), %r9d
5650 ; SSE2-NEXT: movl 32(%rsi), %r10d
5651 ; SSE2-NEXT: movl 16(%rsi), %r11d
5652 ; SSE2-NEXT: movdqa 80(%rsi), %xmm0
5653 ; SSE2-NEXT: movdqa 64(%rsi), %xmm1
5654 ; SSE2-NEXT: movdqa 48(%rsi), %xmm2
5655 ; SSE2-NEXT: movdqa 32(%rsi), %xmm3
5656 ; SSE2-NEXT: movdqa 16(%rsi), %xmm4
5657 ; SSE2-NEXT: movdqa (%rsi), %xmm5
5658 ; SSE2-NEXT: packssdw 48(%rdi), %xmm7
5659 ; SSE2-NEXT: packssdw 16(%rdi), %xmm6
5660 ; SSE2-NEXT: packsswb %xmm7, %xmm6
5661 ; SSE2-NEXT: packssdw 80(%rdi), %xmm8
5662 ; SSE2-NEXT: packsswb %xmm8, %xmm8
5663 ; SSE2-NEXT: pmovmskb %xmm6, %edi
5664 ; SSE2-NEXT: andl $21845, %edi ## imm = 0x5555
5665 ; SSE2-NEXT: pmovmskb %xmm8, %ecx
5666 ; SSE2-NEXT: andl $85, %ecx
5667 ; SSE2-NEXT: shll $16, %ecx
5668 ; SSE2-NEXT: orl %edi, %ecx
5669 ; SSE2-NEXT: testb $1, %cl
5670 ; SSE2-NEXT: jne LBB31_1
5671 ; SSE2-NEXT: ## %bb.2: ## %else
5672 ; SSE2-NEXT: testb $2, %cl
5673 ; SSE2-NEXT: jne LBB31_3
5674 ; SSE2-NEXT: LBB31_4: ## %else2
5675 ; SSE2-NEXT: testb $4, %cl
5676 ; SSE2-NEXT: jne LBB31_5
5677 ; SSE2-NEXT: LBB31_6: ## %else4
5678 ; SSE2-NEXT: testb $8, %cl
5679 ; SSE2-NEXT: jne LBB31_7
5680 ; SSE2-NEXT: LBB31_8: ## %else6
5681 ; SSE2-NEXT: testb $16, %cl
5682 ; SSE2-NEXT: jne LBB31_9
5683 ; SSE2-NEXT: LBB31_10: ## %else8
5684 ; SSE2-NEXT: testb $32, %cl
5685 ; SSE2-NEXT: jne LBB31_11
5686 ; SSE2-NEXT: LBB31_12: ## %else10
5687 ; SSE2-NEXT: testb $64, %cl
5688 ; SSE2-NEXT: jne LBB31_13
5689 ; SSE2-NEXT: LBB31_14: ## %else12
5690 ; SSE2-NEXT: testb %cl, %cl
5691 ; SSE2-NEXT: js LBB31_15
5692 ; SSE2-NEXT: LBB31_16: ## %else14
5693 ; SSE2-NEXT: testl $256, %ecx ## imm = 0x100
5694 ; SSE2-NEXT: jne LBB31_17
5695 ; SSE2-NEXT: LBB31_18: ## %else16
5696 ; SSE2-NEXT: testl $512, %ecx ## imm = 0x200
5697 ; SSE2-NEXT: jne LBB31_19
5698 ; SSE2-NEXT: LBB31_20: ## %else18
5699 ; SSE2-NEXT: testl $1024, %ecx ## imm = 0x400
5700 ; SSE2-NEXT: jne LBB31_21
5701 ; SSE2-NEXT: LBB31_22: ## %else20
5702 ; SSE2-NEXT: testl $2048, %ecx ## imm = 0x800
5703 ; SSE2-NEXT: jne LBB31_23
5704 ; SSE2-NEXT: LBB31_24: ## %else22
5705 ; SSE2-NEXT: testl $4096, %ecx ## imm = 0x1000
5706 ; SSE2-NEXT: jne LBB31_25
5707 ; SSE2-NEXT: LBB31_26: ## %else24
5708 ; SSE2-NEXT: testl $8192, %ecx ## imm = 0x2000
5709 ; SSE2-NEXT: jne LBB31_27
5710 ; SSE2-NEXT: LBB31_28: ## %else26
5711 ; SSE2-NEXT: testl $16384, %ecx ## imm = 0x4000
5712 ; SSE2-NEXT: jne LBB31_29
5713 ; SSE2-NEXT: LBB31_30: ## %else28
5714 ; SSE2-NEXT: testw %cx, %cx
5715 ; SSE2-NEXT: js LBB31_31
5716 ; SSE2-NEXT: LBB31_32: ## %else30
5717 ; SSE2-NEXT: testl $65536, %ecx ## imm = 0x10000
5718 ; SSE2-NEXT: jne LBB31_33
5719 ; SSE2-NEXT: LBB31_34: ## %else32
5720 ; SSE2-NEXT: testl $131072, %ecx ## imm = 0x20000
5721 ; SSE2-NEXT: jne LBB31_35
5722 ; SSE2-NEXT: LBB31_36: ## %else34
5723 ; SSE2-NEXT: testl $262144, %ecx ## imm = 0x40000
5724 ; SSE2-NEXT: jne LBB31_37
5725 ; SSE2-NEXT: LBB31_38: ## %else36
5726 ; SSE2-NEXT: testl $524288, %ecx ## imm = 0x80000
5727 ; SSE2-NEXT: jne LBB31_39
5728 ; SSE2-NEXT: LBB31_40: ## %else38
5729 ; SSE2-NEXT: testl $1048576, %ecx ## imm = 0x100000
5730 ; SSE2-NEXT: jne LBB31_41
5731 ; SSE2-NEXT: LBB31_42: ## %else40
5732 ; SSE2-NEXT: testl $2097152, %ecx ## imm = 0x200000
5733 ; SSE2-NEXT: jne LBB31_43
5734 ; SSE2-NEXT: LBB31_44: ## %else42
5735 ; SSE2-NEXT: testl $4194304, %ecx ## imm = 0x400000
5736 ; SSE2-NEXT: je LBB31_46
5737 ; SSE2-NEXT: LBB31_45: ## %cond.store43
5738 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
5739 ; SSE2-NEXT: movd %xmm1, %eax
5740 ; SSE2-NEXT: movl %eax, 88(%rdx)
5741 ; SSE2-NEXT: LBB31_46: ## %else44
5742 ; SSE2-NEXT: movb $1, %al
5743 ; SSE2-NEXT: testb %al, %al
5744 ; SSE2-NEXT: jne LBB31_48
5745 ; SSE2-NEXT: ## %bb.47: ## %cond.store45
5746 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
5747 ; SSE2-NEXT: movd %xmm0, %eax
5748 ; SSE2-NEXT: movl %eax, 92(%rdx)
5749 ; SSE2-NEXT: LBB31_48: ## %else46
5751 ; SSE2-NEXT: LBB31_1: ## %cond.store
5752 ; SSE2-NEXT: movl (%rsi), %esi
5753 ; SSE2-NEXT: movl %esi, (%rdx)
5754 ; SSE2-NEXT: testb $2, %cl
5755 ; SSE2-NEXT: je LBB31_4
5756 ; SSE2-NEXT: LBB31_3: ## %cond.store1
5757 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,1,1]
5758 ; SSE2-NEXT: movd %xmm6, %esi
5759 ; SSE2-NEXT: movl %esi, 4(%rdx)
5760 ; SSE2-NEXT: testb $4, %cl
5761 ; SSE2-NEXT: je LBB31_6
5762 ; SSE2-NEXT: LBB31_5: ## %cond.store3
5763 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[2,3,2,3]
5764 ; SSE2-NEXT: movd %xmm6, %esi
5765 ; SSE2-NEXT: movl %esi, 8(%rdx)
5766 ; SSE2-NEXT: testb $8, %cl
5767 ; SSE2-NEXT: je LBB31_8
5768 ; SSE2-NEXT: LBB31_7: ## %cond.store5
5769 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[3,3,3,3]
5770 ; SSE2-NEXT: movd %xmm5, %esi
5771 ; SSE2-NEXT: movl %esi, 12(%rdx)
5772 ; SSE2-NEXT: testb $16, %cl
5773 ; SSE2-NEXT: je LBB31_10
5774 ; SSE2-NEXT: LBB31_9: ## %cond.store7
5775 ; SSE2-NEXT: movl %r11d, 16(%rdx)
5776 ; SSE2-NEXT: testb $32, %cl
5777 ; SSE2-NEXT: je LBB31_12
5778 ; SSE2-NEXT: LBB31_11: ## %cond.store9
5779 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[1,1,1,1]
5780 ; SSE2-NEXT: movd %xmm5, %esi
5781 ; SSE2-NEXT: movl %esi, 20(%rdx)
5782 ; SSE2-NEXT: testb $64, %cl
5783 ; SSE2-NEXT: je LBB31_14
5784 ; SSE2-NEXT: LBB31_13: ## %cond.store11
5785 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[2,3,2,3]
5786 ; SSE2-NEXT: movd %xmm5, %esi
5787 ; SSE2-NEXT: movl %esi, 24(%rdx)
5788 ; SSE2-NEXT: testb %cl, %cl
5789 ; SSE2-NEXT: jns LBB31_16
5790 ; SSE2-NEXT: LBB31_15: ## %cond.store13
5791 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[3,3,3,3]
5792 ; SSE2-NEXT: movd %xmm4, %esi
5793 ; SSE2-NEXT: movl %esi, 28(%rdx)
5794 ; SSE2-NEXT: testl $256, %ecx ## imm = 0x100
5795 ; SSE2-NEXT: je LBB31_18
5796 ; SSE2-NEXT: LBB31_17: ## %cond.store15
5797 ; SSE2-NEXT: movl %r10d, 32(%rdx)
5798 ; SSE2-NEXT: testl $512, %ecx ## imm = 0x200
5799 ; SSE2-NEXT: je LBB31_20
5800 ; SSE2-NEXT: LBB31_19: ## %cond.store17
5801 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,1,1]
5802 ; SSE2-NEXT: movd %xmm4, %esi
5803 ; SSE2-NEXT: movl %esi, 36(%rdx)
5804 ; SSE2-NEXT: testl $1024, %ecx ## imm = 0x400
5805 ; SSE2-NEXT: je LBB31_22
5806 ; SSE2-NEXT: LBB31_21: ## %cond.store19
5807 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[2,3,2,3]
5808 ; SSE2-NEXT: movd %xmm4, %esi
5809 ; SSE2-NEXT: movl %esi, 40(%rdx)
5810 ; SSE2-NEXT: testl $2048, %ecx ## imm = 0x800
5811 ; SSE2-NEXT: je LBB31_24
5812 ; SSE2-NEXT: LBB31_23: ## %cond.store21
5813 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[3,3,3,3]
5814 ; SSE2-NEXT: movd %xmm3, %esi
5815 ; SSE2-NEXT: movl %esi, 44(%rdx)
5816 ; SSE2-NEXT: testl $4096, %ecx ## imm = 0x1000
5817 ; SSE2-NEXT: je LBB31_26
5818 ; SSE2-NEXT: LBB31_25: ## %cond.store23
5819 ; SSE2-NEXT: movl %r9d, 48(%rdx)
5820 ; SSE2-NEXT: testl $8192, %ecx ## imm = 0x2000
5821 ; SSE2-NEXT: je LBB31_28
5822 ; SSE2-NEXT: LBB31_27: ## %cond.store25
5823 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,1,1]
5824 ; SSE2-NEXT: movd %xmm3, %esi
5825 ; SSE2-NEXT: movl %esi, 52(%rdx)
5826 ; SSE2-NEXT: testl $16384, %ecx ## imm = 0x4000
5827 ; SSE2-NEXT: je LBB31_30
5828 ; SSE2-NEXT: LBB31_29: ## %cond.store27
5829 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[2,3,2,3]
5830 ; SSE2-NEXT: movd %xmm3, %esi
5831 ; SSE2-NEXT: movl %esi, 56(%rdx)
5832 ; SSE2-NEXT: testw %cx, %cx
5833 ; SSE2-NEXT: jns LBB31_32
5834 ; SSE2-NEXT: LBB31_31: ## %cond.store29
5835 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[3,3,3,3]
5836 ; SSE2-NEXT: movd %xmm2, %esi
5837 ; SSE2-NEXT: movl %esi, 60(%rdx)
5838 ; SSE2-NEXT: testl $65536, %ecx ## imm = 0x10000
5839 ; SSE2-NEXT: je LBB31_34
5840 ; SSE2-NEXT: LBB31_33: ## %cond.store31
5841 ; SSE2-NEXT: movl %r8d, 64(%rdx)
5842 ; SSE2-NEXT: testl $131072, %ecx ## imm = 0x20000
5843 ; SSE2-NEXT: je LBB31_36
5844 ; SSE2-NEXT: LBB31_35: ## %cond.store33
5845 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,1,1]
5846 ; SSE2-NEXT: movd %xmm2, %esi
5847 ; SSE2-NEXT: movl %esi, 68(%rdx)
5848 ; SSE2-NEXT: testl $262144, %ecx ## imm = 0x40000
5849 ; SSE2-NEXT: je LBB31_38
5850 ; SSE2-NEXT: LBB31_37: ## %cond.store35
5851 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]
5852 ; SSE2-NEXT: movd %xmm2, %esi
5853 ; SSE2-NEXT: movl %esi, 72(%rdx)
5854 ; SSE2-NEXT: testl $524288, %ecx ## imm = 0x80000
5855 ; SSE2-NEXT: je LBB31_40
5856 ; SSE2-NEXT: LBB31_39: ## %cond.store37
5857 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[3,3,3,3]
5858 ; SSE2-NEXT: movd %xmm1, %esi
5859 ; SSE2-NEXT: movl %esi, 76(%rdx)
5860 ; SSE2-NEXT: testl $1048576, %ecx ## imm = 0x100000
5861 ; SSE2-NEXT: je LBB31_42
5862 ; SSE2-NEXT: LBB31_41: ## %cond.store39
5863 ; SSE2-NEXT: movl %eax, 80(%rdx)
5864 ; SSE2-NEXT: testl $2097152, %ecx ## imm = 0x200000
5865 ; SSE2-NEXT: je LBB31_44
5866 ; SSE2-NEXT: LBB31_43: ## %cond.store41
5867 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
5868 ; SSE2-NEXT: movd %xmm1, %eax
5869 ; SSE2-NEXT: movl %eax, 84(%rdx)
5870 ; SSE2-NEXT: testl $4194304, %ecx ## imm = 0x400000
5871 ; SSE2-NEXT: jne LBB31_45
5872 ; SSE2-NEXT: jmp LBB31_46
5874 ; SSE4-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
5876 ; SSE4-NEXT: pushq %rbp
5877 ; SSE4-NEXT: .cfi_def_cfa_offset 16
5878 ; SSE4-NEXT: pushq %r15
5879 ; SSE4-NEXT: .cfi_def_cfa_offset 24
5880 ; SSE4-NEXT: pushq %r14
5881 ; SSE4-NEXT: .cfi_def_cfa_offset 32
5882 ; SSE4-NEXT: pushq %r13
5883 ; SSE4-NEXT: .cfi_def_cfa_offset 40
5884 ; SSE4-NEXT: pushq %r12
5885 ; SSE4-NEXT: .cfi_def_cfa_offset 48
5886 ; SSE4-NEXT: pushq %rbx
5887 ; SSE4-NEXT: .cfi_def_cfa_offset 56
5888 ; SSE4-NEXT: .cfi_offset %rbx, -56
5889 ; SSE4-NEXT: .cfi_offset %r12, -48
5890 ; SSE4-NEXT: .cfi_offset %r13, -40
5891 ; SSE4-NEXT: .cfi_offset %r14, -32
5892 ; SSE4-NEXT: .cfi_offset %r15, -24
5893 ; SSE4-NEXT: .cfi_offset %rbp, -16
5894 ; SSE4-NEXT: movdqa (%rdi), %xmm1
5895 ; SSE4-NEXT: movdqa 32(%rdi), %xmm2
5896 ; SSE4-NEXT: movdqa 64(%rdi), %xmm0
5897 ; SSE4-NEXT: movl 92(%rsi), %eax
5898 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5899 ; SSE4-NEXT: movl 88(%rsi), %eax
5900 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5901 ; SSE4-NEXT: movl 84(%rsi), %eax
5902 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5903 ; SSE4-NEXT: movl 80(%rsi), %eax
5904 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5905 ; SSE4-NEXT: movl 76(%rsi), %eax
5906 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5907 ; SSE4-NEXT: movl 72(%rsi), %eax
5908 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5909 ; SSE4-NEXT: movl 68(%rsi), %eax
5910 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5911 ; SSE4-NEXT: movl 64(%rsi), %eax
5912 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5913 ; SSE4-NEXT: movl 60(%rsi), %eax
5914 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5915 ; SSE4-NEXT: movl 56(%rsi), %eax
5916 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5917 ; SSE4-NEXT: movl 52(%rsi), %eax
5918 ; SSE4-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill
5919 ; SSE4-NEXT: packssdw 48(%rdi), %xmm2
5920 ; SSE4-NEXT: packssdw 16(%rdi), %xmm1
5921 ; SSE4-NEXT: packsswb %xmm2, %xmm1
5922 ; SSE4-NEXT: packssdw 80(%rdi), %xmm0
5923 ; SSE4-NEXT: packsswb %xmm0, %xmm0
5924 ; SSE4-NEXT: pmovmskb %xmm1, %eax
5925 ; SSE4-NEXT: andl $21845, %eax ## imm = 0x5555
5926 ; SSE4-NEXT: pmovmskb %xmm0, %edi
5927 ; SSE4-NEXT: andl $85, %edi
5928 ; SSE4-NEXT: shll $16, %edi
5929 ; SSE4-NEXT: orl %eax, %edi
5930 ; SSE4-NEXT: movl 48(%rsi), %r13d
5931 ; SSE4-NEXT: testb $1, %dil
5932 ; SSE4-NEXT: movl 44(%rsi), %eax
5933 ; SSE4-NEXT: movl 40(%rsi), %ecx
5934 ; SSE4-NEXT: movl 36(%rsi), %r8d
5935 ; SSE4-NEXT: movl 32(%rsi), %r9d
5936 ; SSE4-NEXT: movl 28(%rsi), %r10d
5937 ; SSE4-NEXT: movl 24(%rsi), %r11d
5938 ; SSE4-NEXT: movl 20(%rsi), %ebx
5939 ; SSE4-NEXT: movl 16(%rsi), %ebp
5940 ; SSE4-NEXT: movl 12(%rsi), %r14d
5941 ; SSE4-NEXT: movl 8(%rsi), %r15d
5942 ; SSE4-NEXT: movl 4(%rsi), %r12d
5943 ; SSE4-NEXT: jne LBB31_1
5944 ; SSE4-NEXT: ## %bb.2: ## %else
5945 ; SSE4-NEXT: testb $2, %dil
5946 ; SSE4-NEXT: jne LBB31_3
5947 ; SSE4-NEXT: LBB31_4: ## %else2
5948 ; SSE4-NEXT: testb $4, %dil
5949 ; SSE4-NEXT: jne LBB31_5
5950 ; SSE4-NEXT: LBB31_6: ## %else4
5951 ; SSE4-NEXT: testb $8, %dil
5952 ; SSE4-NEXT: jne LBB31_7
5953 ; SSE4-NEXT: LBB31_8: ## %else6
5954 ; SSE4-NEXT: testb $16, %dil
5955 ; SSE4-NEXT: jne LBB31_9
5956 ; SSE4-NEXT: LBB31_10: ## %else8
5957 ; SSE4-NEXT: testb $32, %dil
5958 ; SSE4-NEXT: jne LBB31_11
5959 ; SSE4-NEXT: LBB31_12: ## %else10
5960 ; SSE4-NEXT: testb $64, %dil
5961 ; SSE4-NEXT: jne LBB31_13
5962 ; SSE4-NEXT: LBB31_14: ## %else12
5963 ; SSE4-NEXT: testb %dil, %dil
5964 ; SSE4-NEXT: js LBB31_15
5965 ; SSE4-NEXT: LBB31_16: ## %else14
5966 ; SSE4-NEXT: testl $256, %edi ## imm = 0x100
5967 ; SSE4-NEXT: jne LBB31_17
5968 ; SSE4-NEXT: LBB31_18: ## %else16
5969 ; SSE4-NEXT: testl $512, %edi ## imm = 0x200
5970 ; SSE4-NEXT: jne LBB31_19
5971 ; SSE4-NEXT: LBB31_20: ## %else18
5972 ; SSE4-NEXT: testl $1024, %edi ## imm = 0x400
5973 ; SSE4-NEXT: jne LBB31_21
5974 ; SSE4-NEXT: LBB31_22: ## %else20
5975 ; SSE4-NEXT: testl $2048, %edi ## imm = 0x800
5976 ; SSE4-NEXT: jne LBB31_23
5977 ; SSE4-NEXT: LBB31_24: ## %else22
5978 ; SSE4-NEXT: testl $4096, %edi ## imm = 0x1000
5979 ; SSE4-NEXT: jne LBB31_25
5980 ; SSE4-NEXT: LBB31_26: ## %else24
5981 ; SSE4-NEXT: testl $8192, %edi ## imm = 0x2000
5982 ; SSE4-NEXT: jne LBB31_27
5983 ; SSE4-NEXT: LBB31_28: ## %else26
5984 ; SSE4-NEXT: testl $16384, %edi ## imm = 0x4000
5985 ; SSE4-NEXT: jne LBB31_29
5986 ; SSE4-NEXT: LBB31_30: ## %else28
5987 ; SSE4-NEXT: testw %di, %di
5988 ; SSE4-NEXT: js LBB31_31
5989 ; SSE4-NEXT: LBB31_32: ## %else30
5990 ; SSE4-NEXT: testl $65536, %edi ## imm = 0x10000
5991 ; SSE4-NEXT: jne LBB31_33
5992 ; SSE4-NEXT: LBB31_34: ## %else32
5993 ; SSE4-NEXT: testl $131072, %edi ## imm = 0x20000
5994 ; SSE4-NEXT: jne LBB31_35
5995 ; SSE4-NEXT: LBB31_36: ## %else34
5996 ; SSE4-NEXT: testl $262144, %edi ## imm = 0x40000
5997 ; SSE4-NEXT: jne LBB31_37
5998 ; SSE4-NEXT: LBB31_38: ## %else36
5999 ; SSE4-NEXT: testl $524288, %edi ## imm = 0x80000
6000 ; SSE4-NEXT: jne LBB31_39
6001 ; SSE4-NEXT: LBB31_40: ## %else38
6002 ; SSE4-NEXT: testl $1048576, %edi ## imm = 0x100000
6003 ; SSE4-NEXT: jne LBB31_41
6004 ; SSE4-NEXT: LBB31_42: ## %else40
6005 ; SSE4-NEXT: testl $2097152, %edi ## imm = 0x200000
6006 ; SSE4-NEXT: jne LBB31_43
6007 ; SSE4-NEXT: LBB31_44: ## %else42
6008 ; SSE4-NEXT: testl $4194304, %edi ## imm = 0x400000
6009 ; SSE4-NEXT: je LBB31_46
6010 ; SSE4-NEXT: LBB31_45: ## %cond.store43
6011 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6012 ; SSE4-NEXT: movl %eax, 88(%rdx)
6013 ; SSE4-NEXT: LBB31_46: ## %else44
6014 ; SSE4-NEXT: movb $1, %al
6015 ; SSE4-NEXT: testb %al, %al
6016 ; SSE4-NEXT: jne LBB31_48
6017 ; SSE4-NEXT: ## %bb.47: ## %cond.store45
6018 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6019 ; SSE4-NEXT: movl %eax, 92(%rdx)
6020 ; SSE4-NEXT: LBB31_48: ## %else46
6021 ; SSE4-NEXT: popq %rbx
6022 ; SSE4-NEXT: popq %r12
6023 ; SSE4-NEXT: popq %r13
6024 ; SSE4-NEXT: popq %r14
6025 ; SSE4-NEXT: popq %r15
6026 ; SSE4-NEXT: popq %rbp
6028 ; SSE4-NEXT: LBB31_1: ## %cond.store
6029 ; SSE4-NEXT: movl (%rsi), %esi
6030 ; SSE4-NEXT: movl %esi, (%rdx)
6031 ; SSE4-NEXT: testb $2, %dil
6032 ; SSE4-NEXT: je LBB31_4
6033 ; SSE4-NEXT: LBB31_3: ## %cond.store1
6034 ; SSE4-NEXT: movl %r12d, 4(%rdx)
6035 ; SSE4-NEXT: testb $4, %dil
6036 ; SSE4-NEXT: je LBB31_6
6037 ; SSE4-NEXT: LBB31_5: ## %cond.store3
6038 ; SSE4-NEXT: movl %r15d, 8(%rdx)
6039 ; SSE4-NEXT: testb $8, %dil
6040 ; SSE4-NEXT: je LBB31_8
6041 ; SSE4-NEXT: LBB31_7: ## %cond.store5
6042 ; SSE4-NEXT: movl %r14d, 12(%rdx)
6043 ; SSE4-NEXT: testb $16, %dil
6044 ; SSE4-NEXT: je LBB31_10
6045 ; SSE4-NEXT: LBB31_9: ## %cond.store7
6046 ; SSE4-NEXT: movl %ebp, 16(%rdx)
6047 ; SSE4-NEXT: testb $32, %dil
6048 ; SSE4-NEXT: je LBB31_12
6049 ; SSE4-NEXT: LBB31_11: ## %cond.store9
6050 ; SSE4-NEXT: movl %ebx, 20(%rdx)
6051 ; SSE4-NEXT: testb $64, %dil
6052 ; SSE4-NEXT: je LBB31_14
6053 ; SSE4-NEXT: LBB31_13: ## %cond.store11
6054 ; SSE4-NEXT: movl %r11d, 24(%rdx)
6055 ; SSE4-NEXT: testb %dil, %dil
6056 ; SSE4-NEXT: jns LBB31_16
6057 ; SSE4-NEXT: LBB31_15: ## %cond.store13
6058 ; SSE4-NEXT: movl %r10d, 28(%rdx)
6059 ; SSE4-NEXT: testl $256, %edi ## imm = 0x100
6060 ; SSE4-NEXT: je LBB31_18
6061 ; SSE4-NEXT: LBB31_17: ## %cond.store15
6062 ; SSE4-NEXT: movl %r9d, 32(%rdx)
6063 ; SSE4-NEXT: testl $512, %edi ## imm = 0x200
6064 ; SSE4-NEXT: je LBB31_20
6065 ; SSE4-NEXT: LBB31_19: ## %cond.store17
6066 ; SSE4-NEXT: movl %r8d, 36(%rdx)
6067 ; SSE4-NEXT: testl $1024, %edi ## imm = 0x400
6068 ; SSE4-NEXT: je LBB31_22
6069 ; SSE4-NEXT: LBB31_21: ## %cond.store19
6070 ; SSE4-NEXT: movl %ecx, 40(%rdx)
6071 ; SSE4-NEXT: testl $2048, %edi ## imm = 0x800
6072 ; SSE4-NEXT: je LBB31_24
6073 ; SSE4-NEXT: LBB31_23: ## %cond.store21
6074 ; SSE4-NEXT: movl %eax, 44(%rdx)
6075 ; SSE4-NEXT: testl $4096, %edi ## imm = 0x1000
6076 ; SSE4-NEXT: je LBB31_26
6077 ; SSE4-NEXT: LBB31_25: ## %cond.store23
6078 ; SSE4-NEXT: movl %r13d, 48(%rdx)
6079 ; SSE4-NEXT: testl $8192, %edi ## imm = 0x2000
6080 ; SSE4-NEXT: je LBB31_28
6081 ; SSE4-NEXT: LBB31_27: ## %cond.store25
6082 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6083 ; SSE4-NEXT: movl %eax, 52(%rdx)
6084 ; SSE4-NEXT: testl $16384, %edi ## imm = 0x4000
6085 ; SSE4-NEXT: je LBB31_30
6086 ; SSE4-NEXT: LBB31_29: ## %cond.store27
6087 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6088 ; SSE4-NEXT: movl %eax, 56(%rdx)
6089 ; SSE4-NEXT: testw %di, %di
6090 ; SSE4-NEXT: jns LBB31_32
6091 ; SSE4-NEXT: LBB31_31: ## %cond.store29
6092 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6093 ; SSE4-NEXT: movl %eax, 60(%rdx)
6094 ; SSE4-NEXT: testl $65536, %edi ## imm = 0x10000
6095 ; SSE4-NEXT: je LBB31_34
6096 ; SSE4-NEXT: LBB31_33: ## %cond.store31
6097 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6098 ; SSE4-NEXT: movl %eax, 64(%rdx)
6099 ; SSE4-NEXT: testl $131072, %edi ## imm = 0x20000
6100 ; SSE4-NEXT: je LBB31_36
6101 ; SSE4-NEXT: LBB31_35: ## %cond.store33
6102 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6103 ; SSE4-NEXT: movl %eax, 68(%rdx)
6104 ; SSE4-NEXT: testl $262144, %edi ## imm = 0x40000
6105 ; SSE4-NEXT: je LBB31_38
6106 ; SSE4-NEXT: LBB31_37: ## %cond.store35
6107 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6108 ; SSE4-NEXT: movl %eax, 72(%rdx)
6109 ; SSE4-NEXT: testl $524288, %edi ## imm = 0x80000
6110 ; SSE4-NEXT: je LBB31_40
6111 ; SSE4-NEXT: LBB31_39: ## %cond.store37
6112 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6113 ; SSE4-NEXT: movl %eax, 76(%rdx)
6114 ; SSE4-NEXT: testl $1048576, %edi ## imm = 0x100000
6115 ; SSE4-NEXT: je LBB31_42
6116 ; SSE4-NEXT: LBB31_41: ## %cond.store39
6117 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6118 ; SSE4-NEXT: movl %eax, 80(%rdx)
6119 ; SSE4-NEXT: testl $2097152, %edi ## imm = 0x200000
6120 ; SSE4-NEXT: je LBB31_44
6121 ; SSE4-NEXT: LBB31_43: ## %cond.store41
6122 ; SSE4-NEXT: movl {{[-0-9]+}}(%r{{[sb]}}p), %eax ## 4-byte Reload
6123 ; SSE4-NEXT: movl %eax, 84(%rdx)
6124 ; SSE4-NEXT: testl $4194304, %edi ## imm = 0x400000
6125 ; SSE4-NEXT: jne LBB31_45
6126 ; SSE4-NEXT: jmp LBB31_46
6128 ; AVX1-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
6130 ; AVX1-NEXT: vmovdqa (%rsi), %ymm0
6131 ; AVX1-NEXT: vmovaps 32(%rsi), %ymm1
6132 ; AVX1-NEXT: vmovaps 64(%rsi), %ymm2
6133 ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
6134 ; AVX1-NEXT: vpcmpgtd 48(%rdi), %xmm3, %xmm4
6135 ; AVX1-NEXT: vpcmpgtd 32(%rdi), %xmm3, %xmm5
6136 ; AVX1-NEXT: vpackssdw %xmm4, %xmm5, %xmm4
6137 ; AVX1-NEXT: vpacksswb %xmm4, %xmm4, %xmm4
6138 ; AVX1-NEXT: vpcmpgtd 80(%rdi), %xmm3, %xmm5
6139 ; AVX1-NEXT: vpcmpgtd 64(%rdi), %xmm3, %xmm6
6140 ; AVX1-NEXT: vpcmpgtd 16(%rdi), %xmm3, %xmm7
6141 ; AVX1-NEXT: vpcmpgtd (%rdi), %xmm3, %xmm8
6142 ; AVX1-NEXT: vpblendw {{.*#+}} xmm8 = xmm8[0,1],xmm3[2,3],xmm8[4,5],xmm3[6,7]
6143 ; AVX1-NEXT: vpslld $31, %xmm8, %xmm8
6144 ; AVX1-NEXT: vpblendw {{.*#+}} xmm7 = xmm7[0,1],xmm3[2,3],xmm7[4,5],xmm3[6,7]
6145 ; AVX1-NEXT: vpslld $31, %xmm7, %xmm7
6146 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm8, %ymm7
6147 ; AVX1-NEXT: vmaskmovps %ymm0, %ymm7, (%rdx)
6148 ; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm6[0,1],xmm3[2,3],xmm6[4,5],xmm3[6,7]
6149 ; AVX1-NEXT: vpslld $31, %xmm0, %xmm0
6150 ; AVX1-NEXT: vpblendw {{.*#+}} xmm5 = xmm5[0,1],xmm3[2,3],xmm5[4,5],xmm3[6,7]
6151 ; AVX1-NEXT: vpslld $31, %xmm5, %xmm5
6152 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0
6153 ; AVX1-NEXT: vmaskmovps %ymm2, %ymm0, 64(%rdx)
6154 ; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]
6155 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
6156 ; AVX1-NEXT: vpslld $31, %xmm2, %xmm2
6157 ; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
6158 ; AVX1-NEXT: vpslld $31, %xmm0, %xmm0
6159 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
6160 ; AVX1-NEXT: vmaskmovps %ymm1, %ymm0, 32(%rdx)
6161 ; AVX1-NEXT: vzeroupper
6164 ; AVX2-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
6166 ; AVX2-NEXT: vmovdqa (%rsi), %ymm0
6167 ; AVX2-NEXT: vmovdqa 32(%rsi), %ymm1
6168 ; AVX2-NEXT: vmovdqa 64(%rsi), %ymm2
6169 ; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3
6170 ; AVX2-NEXT: vpcmpgtd 32(%rdi), %ymm3, %ymm4
6171 ; AVX2-NEXT: vpcmpgtd (%rdi), %ymm3, %ymm5
6172 ; AVX2-NEXT: vpackssdw %ymm4, %ymm5, %ymm4
6173 ; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
6174 ; AVX2-NEXT: vpshufd {{.*#+}} ymm5 = mem[0,2,2,3,4,6,6,7]
6175 ; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,2,3]
6176 ; AVX2-NEXT: vpcmpgtd %ymm5, %ymm3, %ymm3
6177 ; AVX2-NEXT: vpacksswb %ymm3, %ymm4, %ymm3
6178 ; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm3[0,2,1,3]
6179 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4
6180 ; AVX2-NEXT: vpmovzxwq {{.*#+}} ymm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero
6181 ; AVX2-NEXT: vpslld $31, %ymm3, %ymm3
6182 ; AVX2-NEXT: vpmaskmovd %ymm0, %ymm3, (%rdx)
6183 ; AVX2-NEXT: vextracti128 $1, %ymm4, %xmm0
6184 ; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero
6185 ; AVX2-NEXT: vpslld $31, %ymm0, %ymm0
6186 ; AVX2-NEXT: vpmaskmovd %ymm2, %ymm0, 64(%rdx)
6187 ; AVX2-NEXT: vpunpckhbw {{.*#+}} xmm0 = xmm4[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
6188 ; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
6189 ; AVX2-NEXT: vpslld $31, %ymm0, %ymm0
6190 ; AVX2-NEXT: vpmaskmovd %ymm1, %ymm0, 32(%rdx)
6191 ; AVX2-NEXT: vzeroupper
6194 ; AVX512F-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
6195 ; AVX512F: ## %bb.0:
6196 ; AVX512F-NEXT: vmovdqa64 (%rsi), %zmm0
6197 ; AVX512F-NEXT: vmovdqa64 64(%rsi), %zmm1
6198 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
6199 ; AVX512F-NEXT: movw $21845, %ax ## imm = 0x5555
6200 ; AVX512F-NEXT: kmovw %eax, %k1
6201 ; AVX512F-NEXT: vpcmpgtd (%rdi), %zmm2, %k1 {%k1}
6202 ; AVX512F-NEXT: movw $85, %ax
6203 ; AVX512F-NEXT: kmovw %eax, %k2
6204 ; AVX512F-NEXT: vpcmpgtd 64(%rdi), %zmm2, %k2 {%k2}
6205 ; AVX512F-NEXT: vmovdqu32 %zmm1, 64(%rdx) {%k2}
6206 ; AVX512F-NEXT: vmovdqu32 %zmm0, (%rdx) {%k1}
6207 ; AVX512F-NEXT: vzeroupper
6208 ; AVX512F-NEXT: retq
6210 ; AVX512VLDQ-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
6211 ; AVX512VLDQ: ## %bb.0:
6212 ; AVX512VLDQ-NEXT: vmovdqa64 (%rsi), %zmm0
6213 ; AVX512VLDQ-NEXT: vmovdqa64 64(%rsi), %zmm1
6214 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
6215 ; AVX512VLDQ-NEXT: movw $21845, %ax ## imm = 0x5555
6216 ; AVX512VLDQ-NEXT: kmovw %eax, %k1
6217 ; AVX512VLDQ-NEXT: vpcmpgtd (%rdi), %zmm2, %k1 {%k1}
6218 ; AVX512VLDQ-NEXT: movw $85, %ax
6219 ; AVX512VLDQ-NEXT: kmovw %eax, %k2
6220 ; AVX512VLDQ-NEXT: vpcmpgtd 64(%rdi), %zmm2, %k2 {%k2}
6221 ; AVX512VLDQ-NEXT: vmovdqu32 %zmm1, 64(%rdx) {%k2}
6222 ; AVX512VLDQ-NEXT: vmovdqu32 %zmm0, (%rdx) {%k1}
6223 ; AVX512VLDQ-NEXT: vzeroupper
6224 ; AVX512VLDQ-NEXT: retq
6226 ; AVX512VLBW-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
6227 ; AVX512VLBW: ## %bb.0:
6228 ; AVX512VLBW-NEXT: vmovdqa64 (%rsi), %zmm0
6229 ; AVX512VLBW-NEXT: vmovdqa64 64(%rsi), %zmm1
6230 ; AVX512VLBW-NEXT: vpxor %xmm2, %xmm2, %xmm2
6231 ; AVX512VLBW-NEXT: movw $21845, %ax ## imm = 0x5555
6232 ; AVX512VLBW-NEXT: kmovd %eax, %k1
6233 ; AVX512VLBW-NEXT: vpcmpgtd (%rdi), %zmm2, %k1 {%k1}
6234 ; AVX512VLBW-NEXT: movw $85, %ax
6235 ; AVX512VLBW-NEXT: kmovd %eax, %k2
6236 ; AVX512VLBW-NEXT: vpcmpgtd 64(%rdi), %zmm2, %k2 {%k2}
6237 ; AVX512VLBW-NEXT: vmovdqu32 %zmm1, 64(%rdx) {%k2}
6238 ; AVX512VLBW-NEXT: vmovdqu32 %zmm0, (%rdx) {%k1}
6239 ; AVX512VLBW-NEXT: vzeroupper
6240 ; AVX512VLBW-NEXT: retq
6242 ; X86-AVX512-LABEL: store_v24i32_v24i32_stride6_vf4_only_even_numbered_elts:
6243 ; X86-AVX512: ## %bb.0:
6244 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
6245 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %ecx
6246 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %edx
6247 ; X86-AVX512-NEXT: vmovdqa64 (%edx), %zmm0
6248 ; X86-AVX512-NEXT: vmovdqa64 64(%edx), %zmm1
6249 ; X86-AVX512-NEXT: vpxor %xmm2, %xmm2, %xmm2
6250 ; X86-AVX512-NEXT: movw $21845, %dx ## imm = 0x5555
6251 ; X86-AVX512-NEXT: kmovd %edx, %k1
6252 ; X86-AVX512-NEXT: vpcmpgtd (%ecx), %zmm2, %k1 {%k1}
6253 ; X86-AVX512-NEXT: movw $85, %dx
6254 ; X86-AVX512-NEXT: kmovd %edx, %k2
6255 ; X86-AVX512-NEXT: vpcmpgtd 64(%ecx), %zmm2, %k2 {%k2}
6256 ; X86-AVX512-NEXT: vmovdqu32 %zmm1, 64(%eax) {%k2}
6257 ; X86-AVX512-NEXT: vmovdqu32 %zmm0, (%eax) {%k1}
6258 ; X86-AVX512-NEXT: vzeroupper
6259 ; X86-AVX512-NEXT: retl
6260 %trigger = load <24 x i32>, ptr %trigger.ptr
6261 %val = load <24 x i32>, ptr %val.ptr
6262 %mask.src = icmp slt <24 x i32> %trigger, zeroinitializer
6263 %mask = and <24 x i1> %mask.src, <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>
6264 call void @llvm.masked.store.v24i32.p0(<24 x i32> %val, ptr %dst, i32 immarg 1, <24 x i1> %mask)
6268 ; From https://reviews.llvm.org/rGf8d9097168b7#1165311
6269 define void @undefshuffle(<8 x i1> %i0, ptr %src, ptr %dst) #0 {
6270 ; SSE2-LABEL: undefshuffle:
6271 ; SSE2: ## %bb.0: ## %else
6272 ; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
6273 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax
6274 ; SSE2-NEXT: movd %eax, %xmm0
6275 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax
6276 ; SSE2-NEXT: pinsrw $1, %eax, %xmm0
6277 ; SSE2-NEXT: pinsrw $2, -{{[0-9]+}}(%rsp), %xmm0
6278 ; SSE2-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax
6279 ; SSE2-NEXT: pinsrw $3, %eax, %xmm0
6280 ; SSE2-NEXT: psllw $15, %xmm0
6281 ; SSE2-NEXT: packsswb %xmm0, %xmm0
6282 ; SSE2-NEXT: pmovmskb %xmm0, %eax
6283 ; SSE2-NEXT: testb $1, %al
6284 ; SSE2-NEXT: jne LBB32_1
6285 ; SSE2-NEXT: ## %bb.2: ## %else23
6286 ; SSE2-NEXT: testb $2, %al
6287 ; SSE2-NEXT: jne LBB32_3
6288 ; SSE2-NEXT: LBB32_4: ## %else25
6289 ; SSE2-NEXT: testb $4, %al
6290 ; SSE2-NEXT: jne LBB32_5
6291 ; SSE2-NEXT: LBB32_6: ## %else27
6292 ; SSE2-NEXT: testb $8, %al
6293 ; SSE2-NEXT: jne LBB32_7
6294 ; SSE2-NEXT: LBB32_8: ## %else29
6295 ; SSE2-NEXT: testb $16, %al
6296 ; SSE2-NEXT: jne LBB32_9
6297 ; SSE2-NEXT: LBB32_10: ## %else31
6298 ; SSE2-NEXT: testb $32, %al
6299 ; SSE2-NEXT: jne LBB32_11
6300 ; SSE2-NEXT: LBB32_12: ## %else33
6301 ; SSE2-NEXT: testb $64, %al
6302 ; SSE2-NEXT: jne LBB32_13
6303 ; SSE2-NEXT: LBB32_14: ## %else35
6304 ; SSE2-NEXT: testb $-128, %al
6305 ; SSE2-NEXT: jne LBB32_15
6306 ; SSE2-NEXT: LBB32_16: ## %else37
6308 ; SSE2-NEXT: LBB32_1: ## %cond.store
6309 ; SSE2-NEXT: movl $0, (%rsi)
6310 ; SSE2-NEXT: testb $2, %al
6311 ; SSE2-NEXT: je LBB32_4
6312 ; SSE2-NEXT: LBB32_3: ## %cond.store24
6313 ; SSE2-NEXT: movl $0, 4(%rsi)
6314 ; SSE2-NEXT: testb $4, %al
6315 ; SSE2-NEXT: je LBB32_6
6316 ; SSE2-NEXT: LBB32_5: ## %cond.store26
6317 ; SSE2-NEXT: movl $0, 8(%rsi)
6318 ; SSE2-NEXT: testb $8, %al
6319 ; SSE2-NEXT: je LBB32_8
6320 ; SSE2-NEXT: LBB32_7: ## %cond.store28
6321 ; SSE2-NEXT: movl $0, 12(%rsi)
6322 ; SSE2-NEXT: testb $16, %al
6323 ; SSE2-NEXT: je LBB32_10
6324 ; SSE2-NEXT: LBB32_9: ## %cond.store30
6325 ; SSE2-NEXT: movl $0, 16(%rsi)
6326 ; SSE2-NEXT: testb $32, %al
6327 ; SSE2-NEXT: je LBB32_12
6328 ; SSE2-NEXT: LBB32_11: ## %cond.store32
6329 ; SSE2-NEXT: movl $0, 20(%rsi)
6330 ; SSE2-NEXT: testb $64, %al
6331 ; SSE2-NEXT: je LBB32_14
6332 ; SSE2-NEXT: LBB32_13: ## %cond.store34
6333 ; SSE2-NEXT: movl $0, 24(%rsi)
6334 ; SSE2-NEXT: testb $-128, %al
6335 ; SSE2-NEXT: je LBB32_16
6336 ; SSE2-NEXT: LBB32_15: ## %cond.store36
6337 ; SSE2-NEXT: movl $0, 28(%rsi)
6340 ; SSE4-LABEL: undefshuffle:
6341 ; SSE4: ## %bb.0: ## %else
6342 ; SSE4-NEXT: psllw $15, %xmm0
6343 ; SSE4-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6344 ; SSE4-NEXT: packsswb %xmm0, %xmm0
6345 ; SSE4-NEXT: pmovmskb %xmm0, %eax
6346 ; SSE4-NEXT: testb $1, %al
6347 ; SSE4-NEXT: jne LBB32_1
6348 ; SSE4-NEXT: ## %bb.2: ## %else23
6349 ; SSE4-NEXT: testb $2, %al
6350 ; SSE4-NEXT: jne LBB32_3
6351 ; SSE4-NEXT: LBB32_4: ## %else25
6352 ; SSE4-NEXT: testb $4, %al
6353 ; SSE4-NEXT: jne LBB32_5
6354 ; SSE4-NEXT: LBB32_6: ## %else27
6355 ; SSE4-NEXT: testb $8, %al
6356 ; SSE4-NEXT: jne LBB32_7
6357 ; SSE4-NEXT: LBB32_8: ## %else29
6358 ; SSE4-NEXT: testb $16, %al
6359 ; SSE4-NEXT: jne LBB32_9
6360 ; SSE4-NEXT: LBB32_10: ## %else31
6361 ; SSE4-NEXT: testb $32, %al
6362 ; SSE4-NEXT: jne LBB32_11
6363 ; SSE4-NEXT: LBB32_12: ## %else33
6364 ; SSE4-NEXT: testb $64, %al
6365 ; SSE4-NEXT: jne LBB32_13
6366 ; SSE4-NEXT: LBB32_14: ## %else35
6367 ; SSE4-NEXT: testb $-128, %al
6368 ; SSE4-NEXT: jne LBB32_15
6369 ; SSE4-NEXT: LBB32_16: ## %else37
6371 ; SSE4-NEXT: LBB32_1: ## %cond.store
6372 ; SSE4-NEXT: movl $0, (%rsi)
6373 ; SSE4-NEXT: testb $2, %al
6374 ; SSE4-NEXT: je LBB32_4
6375 ; SSE4-NEXT: LBB32_3: ## %cond.store24
6376 ; SSE4-NEXT: movl $0, 4(%rsi)
6377 ; SSE4-NEXT: testb $4, %al
6378 ; SSE4-NEXT: je LBB32_6
6379 ; SSE4-NEXT: LBB32_5: ## %cond.store26
6380 ; SSE4-NEXT: movl $0, 8(%rsi)
6381 ; SSE4-NEXT: testb $8, %al
6382 ; SSE4-NEXT: je LBB32_8
6383 ; SSE4-NEXT: LBB32_7: ## %cond.store28
6384 ; SSE4-NEXT: movl $0, 12(%rsi)
6385 ; SSE4-NEXT: testb $16, %al
6386 ; SSE4-NEXT: je LBB32_10
6387 ; SSE4-NEXT: LBB32_9: ## %cond.store30
6388 ; SSE4-NEXT: movl $0, 16(%rsi)
6389 ; SSE4-NEXT: testb $32, %al
6390 ; SSE4-NEXT: je LBB32_12
6391 ; SSE4-NEXT: LBB32_11: ## %cond.store32
6392 ; SSE4-NEXT: movl $0, 20(%rsi)
6393 ; SSE4-NEXT: testb $64, %al
6394 ; SSE4-NEXT: je LBB32_14
6395 ; SSE4-NEXT: LBB32_13: ## %cond.store34
6396 ; SSE4-NEXT: movl $0, 24(%rsi)
6397 ; SSE4-NEXT: testb $-128, %al
6398 ; SSE4-NEXT: je LBB32_16
6399 ; SSE4-NEXT: LBB32_15: ## %cond.store36
6400 ; SSE4-NEXT: movl $0, 28(%rsi)
6403 ; AVX1-LABEL: undefshuffle:
6405 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
6406 ; AVX1-NEXT: vpslld $31, %xmm0, %xmm0
6407 ; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
6408 ; AVX1-NEXT: vmaskmovps %ymm1, %ymm0, (%rsi)
6409 ; AVX1-NEXT: vzeroupper
6412 ; AVX2-LABEL: undefshuffle:
6414 ; AVX2-NEXT: ## kill: def $xmm0 killed $xmm0 def $ymm0
6415 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,u,u,u,2,u,u,u,4,u,u,u,6,u,u,u],zero,ymm0[u,u,u],zero,ymm0[u,u,u],zero,ymm0[u,u,u],zero,ymm0[u,u,u]
6416 ; AVX2-NEXT: vpslld $31, %ymm0, %ymm0
6417 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
6418 ; AVX2-NEXT: vpmaskmovd %ymm1, %ymm0, (%rsi)
6419 ; AVX2-NEXT: vzeroupper
6422 ; AVX512F-LABEL: undefshuffle:
6423 ; AVX512F: ## %bb.0:
6424 ; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm0
6425 ; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm0
6426 ; AVX512F-NEXT: movb $15, %al
6427 ; AVX512F-NEXT: kmovw %eax, %k1
6428 ; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1 {%k1}
6429 ; AVX512F-NEXT: vpxor %xmm0, %xmm0, %xmm0
6430 ; AVX512F-NEXT: vmovdqu32 %zmm0, (%rsi) {%k1}
6431 ; AVX512F-NEXT: vzeroupper
6432 ; AVX512F-NEXT: retq
6434 ; AVX512VLDQ-LABEL: undefshuffle:
6435 ; AVX512VLDQ: ## %bb.0:
6436 ; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm0
6437 ; AVX512VLDQ-NEXT: vpslld $31, %ymm0, %ymm0
6438 ; AVX512VLDQ-NEXT: vpxor %xmm1, %xmm1, %xmm1
6439 ; AVX512VLDQ-NEXT: movb $15, %al
6440 ; AVX512VLDQ-NEXT: kmovw %eax, %k1
6441 ; AVX512VLDQ-NEXT: vpcmpgtd %ymm0, %ymm1, %k1 {%k1}
6442 ; AVX512VLDQ-NEXT: vmovdqu32 %ymm1, (%rsi) {%k1}
6443 ; AVX512VLDQ-NEXT: vzeroupper
6444 ; AVX512VLDQ-NEXT: retq
6446 ; AVX512VLBW-LABEL: undefshuffle:
6447 ; AVX512VLBW: ## %bb.0:
6448 ; AVX512VLBW-NEXT: vpsllw $15, %xmm0, %xmm0
6449 ; AVX512VLBW-NEXT: vpmovw2m %xmm0, %k0
6450 ; AVX512VLBW-NEXT: movl $15, %eax
6451 ; AVX512VLBW-NEXT: kmovd %eax, %k1
6452 ; AVX512VLBW-NEXT: kandd %k1, %k0, %k1
6453 ; AVX512VLBW-NEXT: vpxor %xmm0, %xmm0, %xmm0
6454 ; AVX512VLBW-NEXT: vmovdqu32 %ymm0, (%rsi) {%k1}
6455 ; AVX512VLBW-NEXT: vzeroupper
6456 ; AVX512VLBW-NEXT: retq
6458 ; X86-AVX512-LABEL: undefshuffle:
6459 ; X86-AVX512: ## %bb.0:
6460 ; X86-AVX512-NEXT: vpsllw $15, %xmm0, %xmm0
6461 ; X86-AVX512-NEXT: vpmovw2m %xmm0, %k0
6462 ; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax
6463 ; X86-AVX512-NEXT: movl $15, %ecx
6464 ; X86-AVX512-NEXT: kmovd %ecx, %k1
6465 ; X86-AVX512-NEXT: kandd %k1, %k0, %k1
6466 ; X86-AVX512-NEXT: vpxor %xmm0, %xmm0, %xmm0
6467 ; X86-AVX512-NEXT: vmovdqu32 %ymm0, (%eax) {%k1}
6468 ; X86-AVX512-NEXT: vzeroupper
6469 ; X86-AVX512-NEXT: retl
6470 %i1 = shufflevector <8 x i1> %i0, <8 x i1> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6471 %i2 = shufflevector <16 x i1> %i1, <16 x i1> zeroinitializer, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
6472 %it51 = and <32 x i1> %i2, <i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
6473 %i3 = shufflevector <32 x i1> %it51, <32 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
6474 %i4 = shufflevector <32 x i1> %it51, <32 x i1> zeroinitializer, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
6475 %i5 = tail call <8 x i32> @llvm.masked.load.v8i32.p0(ptr %src, i32 1, <8 x i1> %i4, <8 x i32> zeroinitializer)
6476 tail call void @llvm.masked.store.v8i32.p0(<8 x i32> zeroinitializer, ptr %dst, i32 1, <8 x i1> %i3)
6479 declare <8 x i32> @llvm.masked.load.v8i32.p0(ptr nocapture, i32 immarg, <8 x i1>, <8 x i32>)
6481 declare void @llvm.masked.store.v8f64.p0(<8 x double>, ptr, i32, <8 x i1>)
6482 declare void @llvm.masked.store.v4f64.p0(<4 x double>, ptr, i32, <4 x i1>)
6483 declare void @llvm.masked.store.v2f64.p0(<2 x double>, ptr, i32, <2 x i1>)
6484 declare void @llvm.masked.store.v1f64.p0(<1 x double>, ptr, i32, <1 x i1>)
6486 declare void @llvm.masked.store.v16f32.p0(<16 x float>, ptr, i32, <16 x i1>)
6487 declare void @llvm.masked.store.v8f32.p0(<8 x float>, ptr, i32, <8 x i1>)
6488 declare void @llvm.masked.store.v4f32.p0(<4 x float>, ptr, i32, <4 x i1>)
6489 declare void @llvm.masked.store.v2f32.p0(<2 x float>, ptr, i32, <2 x i1>)
6491 declare void @llvm.masked.store.v16i64.p0(<16 x i64>, ptr, i32, <16 x i1>)
6492 declare void @llvm.masked.store.v8i64.p0(<8 x i64>, ptr, i32, <8 x i1>)
6493 declare void @llvm.masked.store.v4i64.p0(<4 x i64>, ptr, i32, <4 x i1>)
6494 declare void @llvm.masked.store.v2i64.p0(<2 x i64>, ptr, i32, <2 x i1>)
6495 declare void @llvm.masked.store.v1i64.p0(<1 x i64>, ptr, i32, <1 x i1>)
6497 declare void @llvm.masked.store.v24i32.p0(<24 x i32>, ptr, i32, <24 x i1>)
6498 declare void @llvm.masked.store.v16i32.p0(<16 x i32>, ptr, i32, <16 x i1>)
6499 declare void @llvm.masked.store.v8i32.p0(<8 x i32>, ptr, i32, <8 x i1>)
6500 declare void @llvm.masked.store.v4i32.p0(<4 x i32>, ptr, i32, <4 x i1>)
6501 declare void @llvm.masked.store.v3i32.p0(<3 x i32>, ptr, i32, <3 x i1>)
6502 declare void @llvm.masked.store.v2i32.p0(<2 x i32>, ptr, i32, <2 x i1>)
6503 declare void @llvm.masked.store.v1i32.p0(<1 x i32>, ptr, i32, <1 x i1>)
6505 declare void @llvm.masked.store.v32i16.p0(<32 x i16>, ptr, i32, <32 x i1>)
6506 declare void @llvm.masked.store.v16i16.p0(<16 x i16>, ptr, i32, <16 x i1>)
6507 declare void @llvm.masked.store.v8i16.p0(<8 x i16>, ptr, i32, <8 x i1>)
6508 declare void @llvm.masked.store.v4i16.p0(<4 x i16>, ptr, i32, <4 x i1>)
6510 declare void @llvm.masked.store.v64i8.p0(<64 x i8>, ptr, i32, <64 x i1>)
6511 declare void @llvm.masked.store.v32i8.p0(<32 x i8>, ptr, i32, <32 x i1>)
6512 declare void @llvm.masked.store.v16i8.p0(<16 x i8>, ptr, i32, <16 x i1>)
6513 declare void @llvm.masked.store.v8i8.p0(<8 x i8>, ptr, i32, <8 x i1>)