[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / masked_store.ll
blob164826d871559292ec33071ad9f8d602599327f7
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
11 ; vXf64
14 define void @store_v1f64_v1i64(<1 x i64> %trigger, <1 x double>* %addr, <1 x double> %val) {
15 ; SSE-LABEL: store_v1f64_v1i64:
16 ; SSE:       ## %bb.0:
17 ; SSE-NEXT:    testq %rdi, %rdi
18 ; SSE-NEXT:    jns LBB0_2
19 ; SSE-NEXT:  ## %bb.1: ## %cond.store
20 ; SSE-NEXT:    movsd %xmm0, (%rsi)
21 ; SSE-NEXT:  LBB0_2: ## %else
22 ; SSE-NEXT:    retq
24 ; AVX-LABEL: store_v1f64_v1i64:
25 ; AVX:       ## %bb.0:
26 ; AVX-NEXT:    testq %rdi, %rdi
27 ; AVX-NEXT:    jns LBB0_2
28 ; AVX-NEXT:  ## %bb.1: ## %cond.store
29 ; AVX-NEXT:    vmovsd %xmm0, (%rsi)
30 ; AVX-NEXT:  LBB0_2: ## %else
31 ; AVX-NEXT:    retq
32   %mask = icmp slt <1 x i64> %trigger, zeroinitializer
33   call void @llvm.masked.store.v1f64.p0v1f64(<1 x double> %val, <1 x double>* %addr, i32 4, <1 x i1> %mask)
34   ret void
37 define void @store_v2f64_v2i64(<2 x i64> %trigger, <2 x double>* %addr, <2 x double> %val) {
38 ; SSE-LABEL: store_v2f64_v2i64:
39 ; SSE:       ## %bb.0:
40 ; SSE-NEXT:    movmskpd %xmm0, %eax
41 ; SSE-NEXT:    testb $1, %al
42 ; SSE-NEXT:    jne LBB1_1
43 ; SSE-NEXT:  ## %bb.2: ## %else
44 ; SSE-NEXT:    testb $2, %al
45 ; SSE-NEXT:    jne LBB1_3
46 ; SSE-NEXT:  LBB1_4: ## %else2
47 ; SSE-NEXT:    retq
48 ; SSE-NEXT:  LBB1_1: ## %cond.store
49 ; SSE-NEXT:    movlps %xmm1, (%rdi)
50 ; SSE-NEXT:    testb $2, %al
51 ; SSE-NEXT:    je LBB1_4
52 ; SSE-NEXT:  LBB1_3: ## %cond.store1
53 ; SSE-NEXT:    movhps %xmm1, 8(%rdi)
54 ; SSE-NEXT:    retq
56 ; AVX1OR2-LABEL: store_v2f64_v2i64:
57 ; AVX1OR2:       ## %bb.0:
58 ; AVX1OR2-NEXT:    vmaskmovpd %xmm1, %xmm0, (%rdi)
59 ; AVX1OR2-NEXT:    retq
61 ; AVX512F-LABEL: store_v2f64_v2i64:
62 ; AVX512F:       ## %bb.0:
63 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
64 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
65 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
66 ; AVX512F-NEXT:    vpcmpgtq %zmm0, %zmm2, %k0
67 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
68 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
69 ; AVX512F-NEXT:    vmovupd %zmm1, (%rdi) {%k1}
70 ; AVX512F-NEXT:    vzeroupper
71 ; AVX512F-NEXT:    retq
73 ; AVX512VLDQ-LABEL: store_v2f64_v2i64:
74 ; AVX512VLDQ:       ## %bb.0:
75 ; AVX512VLDQ-NEXT:    vpmovq2m %xmm0, %k1
76 ; AVX512VLDQ-NEXT:    vmovupd %xmm1, (%rdi) {%k1}
77 ; AVX512VLDQ-NEXT:    retq
79 ; AVX512VLBW-LABEL: store_v2f64_v2i64:
80 ; AVX512VLBW:       ## %bb.0:
81 ; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm2
82 ; AVX512VLBW-NEXT:    vpcmpgtq %xmm0, %xmm2, %k1
83 ; AVX512VLBW-NEXT:    vmovupd %xmm1, (%rdi) {%k1}
84 ; AVX512VLBW-NEXT:    retq
85   %mask = icmp slt <2 x i64> %trigger, zeroinitializer
86   call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %addr, i32 4, <2 x i1> %mask)
87   ret void
90 define void @store_v4f64_v4i64(<4 x i64> %trigger, <4 x double>* %addr, <4 x double> %val) {
91 ; SSE-LABEL: store_v4f64_v4i64:
92 ; SSE:       ## %bb.0:
93 ; SSE-NEXT:    packssdw %xmm1, %xmm0
94 ; SSE-NEXT:    movmskps %xmm0, %eax
95 ; SSE-NEXT:    testb $1, %al
96 ; SSE-NEXT:    jne LBB2_1
97 ; SSE-NEXT:  ## %bb.2: ## %else
98 ; SSE-NEXT:    testb $2, %al
99 ; SSE-NEXT:    jne LBB2_3
100 ; SSE-NEXT:  LBB2_4: ## %else2
101 ; SSE-NEXT:    testb $4, %al
102 ; SSE-NEXT:    jne LBB2_5
103 ; SSE-NEXT:  LBB2_6: ## %else4
104 ; SSE-NEXT:    testb $8, %al
105 ; SSE-NEXT:    jne LBB2_7
106 ; SSE-NEXT:  LBB2_8: ## %else6
107 ; SSE-NEXT:    retq
108 ; SSE-NEXT:  LBB2_1: ## %cond.store
109 ; SSE-NEXT:    movlps %xmm2, (%rdi)
110 ; SSE-NEXT:    testb $2, %al
111 ; SSE-NEXT:    je LBB2_4
112 ; SSE-NEXT:  LBB2_3: ## %cond.store1
113 ; SSE-NEXT:    movhps %xmm2, 8(%rdi)
114 ; SSE-NEXT:    testb $4, %al
115 ; SSE-NEXT:    je LBB2_6
116 ; SSE-NEXT:  LBB2_5: ## %cond.store3
117 ; SSE-NEXT:    movlps %xmm3, 16(%rdi)
118 ; SSE-NEXT:    testb $8, %al
119 ; SSE-NEXT:    je LBB2_8
120 ; SSE-NEXT:  LBB2_7: ## %cond.store5
121 ; SSE-NEXT:    movhps %xmm3, 24(%rdi)
122 ; SSE-NEXT:    retq
124 ; AVX1OR2-LABEL: store_v4f64_v4i64:
125 ; AVX1OR2:       ## %bb.0:
126 ; AVX1OR2-NEXT:    vmaskmovpd %ymm1, %ymm0, (%rdi)
127 ; AVX1OR2-NEXT:    vzeroupper
128 ; AVX1OR2-NEXT:    retq
130 ; AVX512F-LABEL: store_v4f64_v4i64:
131 ; AVX512F:       ## %bb.0:
132 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
133 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
134 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
135 ; AVX512F-NEXT:    vpcmpgtq %zmm0, %zmm2, %k0
136 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
137 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
138 ; AVX512F-NEXT:    vmovupd %zmm1, (%rdi) {%k1}
139 ; AVX512F-NEXT:    vzeroupper
140 ; AVX512F-NEXT:    retq
142 ; AVX512VLDQ-LABEL: store_v4f64_v4i64:
143 ; AVX512VLDQ:       ## %bb.0:
144 ; AVX512VLDQ-NEXT:    vpmovq2m %ymm0, %k1
145 ; AVX512VLDQ-NEXT:    vmovupd %ymm1, (%rdi) {%k1}
146 ; AVX512VLDQ-NEXT:    vzeroupper
147 ; AVX512VLDQ-NEXT:    retq
149 ; AVX512VLBW-LABEL: store_v4f64_v4i64:
150 ; AVX512VLBW:       ## %bb.0:
151 ; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm2
152 ; AVX512VLBW-NEXT:    vpcmpgtq %ymm0, %ymm2, %k1
153 ; AVX512VLBW-NEXT:    vmovupd %ymm1, (%rdi) {%k1}
154 ; AVX512VLBW-NEXT:    vzeroupper
155 ; AVX512VLBW-NEXT:    retq
156   %mask = icmp slt <4 x i64> %trigger, zeroinitializer
157   call void @llvm.masked.store.v4f64.p0v4f64(<4 x double> %val, <4 x double>* %addr, i32 4, <4 x i1> %mask)
158   ret void
162 ; vXf32
165 define void @store_v2f32_v2i32(<2 x i32> %trigger, <2 x float>* %addr, <2 x float> %val) {
166 ; SSE2-LABEL: store_v2f32_v2i32:
167 ; SSE2:       ## %bb.0:
168 ; SSE2-NEXT:    pxor %xmm2, %xmm2
169 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
170 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]
171 ; SSE2-NEXT:    movmskpd %xmm0, %eax
172 ; SSE2-NEXT:    testb $1, %al
173 ; SSE2-NEXT:    jne LBB3_1
174 ; SSE2-NEXT:  ## %bb.2: ## %else
175 ; SSE2-NEXT:    testb $2, %al
176 ; SSE2-NEXT:    jne LBB3_3
177 ; SSE2-NEXT:  LBB3_4: ## %else2
178 ; SSE2-NEXT:    retq
179 ; SSE2-NEXT:  LBB3_1: ## %cond.store
180 ; SSE2-NEXT:    movss %xmm1, (%rdi)
181 ; SSE2-NEXT:    testb $2, %al
182 ; SSE2-NEXT:    je LBB3_4
183 ; SSE2-NEXT:  LBB3_3: ## %cond.store1
184 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1,2,3]
185 ; SSE2-NEXT:    movss %xmm1, 4(%rdi)
186 ; SSE2-NEXT:    retq
188 ; SSE4-LABEL: store_v2f32_v2i32:
189 ; SSE4:       ## %bb.0:
190 ; SSE4-NEXT:    pxor %xmm2, %xmm2
191 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm2
192 ; SSE4-NEXT:    pmovsxdq %xmm2, %xmm0
193 ; SSE4-NEXT:    movmskpd %xmm0, %eax
194 ; SSE4-NEXT:    testb $1, %al
195 ; SSE4-NEXT:    jne LBB3_1
196 ; SSE4-NEXT:  ## %bb.2: ## %else
197 ; SSE4-NEXT:    testb $2, %al
198 ; SSE4-NEXT:    jne LBB3_3
199 ; SSE4-NEXT:  LBB3_4: ## %else2
200 ; SSE4-NEXT:    retq
201 ; SSE4-NEXT:  LBB3_1: ## %cond.store
202 ; SSE4-NEXT:    movss %xmm1, (%rdi)
203 ; SSE4-NEXT:    testb $2, %al
204 ; SSE4-NEXT:    je LBB3_4
205 ; SSE4-NEXT:  LBB3_3: ## %cond.store1
206 ; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)
207 ; SSE4-NEXT:    retq
209 ; AVX1OR2-LABEL: store_v2f32_v2i32:
210 ; AVX1OR2:       ## %bb.0:
211 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
212 ; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
213 ; AVX1OR2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
214 ; AVX1OR2-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)
215 ; AVX1OR2-NEXT:    retq
217 ; AVX512F-LABEL: store_v2f32_v2i32:
218 ; AVX512F:       ## %bb.0:
219 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
220 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
221 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
222 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
223 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
224 ; AVX512F-NEXT:    vmovups %zmm1, (%rdi) {%k1}
225 ; AVX512F-NEXT:    vzeroupper
226 ; AVX512F-NEXT:    retq
228 ; AVX512VLDQ-LABEL: store_v2f32_v2i32:
229 ; AVX512VLDQ:       ## %bb.0:
230 ; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0
231 ; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0
232 ; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1
233 ; AVX512VLDQ-NEXT:    vmovups %xmm1, (%rdi) {%k1}
234 ; AVX512VLDQ-NEXT:    retq
236 ; AVX512VLBW-LABEL: store_v2f32_v2i32:
237 ; AVX512VLBW:       ## %bb.0:
238 ; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0
239 ; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0
240 ; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1
241 ; AVX512VLBW-NEXT:    vmovups %xmm1, (%rdi) {%k1}
242 ; AVX512VLBW-NEXT:    retq
243   %mask = icmp eq <2 x i32> %trigger, zeroinitializer
244   call void @llvm.masked.store.v2f32.p0v2f32(<2 x float> %val, <2 x float>* %addr, i32 4, <2 x i1> %mask)
245   ret void
248 define void @store_v4f32_v4i32(<4 x float> %x, <4 x float>* %ptr, <4 x float> %y, <4 x i32> %mask) {
249 ; SSE2-LABEL: store_v4f32_v4i32:
250 ; SSE2:       ## %bb.0:
251 ; SSE2-NEXT:    movmskps %xmm2, %eax
252 ; SSE2-NEXT:    testb $1, %al
253 ; SSE2-NEXT:    jne LBB4_1
254 ; SSE2-NEXT:  ## %bb.2: ## %else
255 ; SSE2-NEXT:    testb $2, %al
256 ; SSE2-NEXT:    jne LBB4_3
257 ; SSE2-NEXT:  LBB4_4: ## %else2
258 ; SSE2-NEXT:    testb $4, %al
259 ; SSE2-NEXT:    jne LBB4_5
260 ; SSE2-NEXT:  LBB4_6: ## %else4
261 ; SSE2-NEXT:    testb $8, %al
262 ; SSE2-NEXT:    jne LBB4_7
263 ; SSE2-NEXT:  LBB4_8: ## %else6
264 ; SSE2-NEXT:    retq
265 ; SSE2-NEXT:  LBB4_1: ## %cond.store
266 ; SSE2-NEXT:    movss %xmm0, (%rdi)
267 ; SSE2-NEXT:    testb $2, %al
268 ; SSE2-NEXT:    je LBB4_4
269 ; SSE2-NEXT:  LBB4_3: ## %cond.store1
270 ; SSE2-NEXT:    movaps %xmm0, %xmm1
271 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[2,3]
272 ; SSE2-NEXT:    movss %xmm1, 4(%rdi)
273 ; SSE2-NEXT:    testb $4, %al
274 ; SSE2-NEXT:    je LBB4_6
275 ; SSE2-NEXT:  LBB4_5: ## %cond.store3
276 ; SSE2-NEXT:    movaps %xmm0, %xmm1
277 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1]
278 ; SSE2-NEXT:    movss %xmm1, 8(%rdi)
279 ; SSE2-NEXT:    testb $8, %al
280 ; SSE2-NEXT:    je LBB4_8
281 ; SSE2-NEXT:  LBB4_7: ## %cond.store5
282 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
283 ; SSE2-NEXT:    movss %xmm0, 12(%rdi)
284 ; SSE2-NEXT:    retq
286 ; SSE4-LABEL: store_v4f32_v4i32:
287 ; SSE4:       ## %bb.0:
288 ; SSE4-NEXT:    movmskps %xmm2, %eax
289 ; SSE4-NEXT:    testb $1, %al
290 ; SSE4-NEXT:    jne LBB4_1
291 ; SSE4-NEXT:  ## %bb.2: ## %else
292 ; SSE4-NEXT:    testb $2, %al
293 ; SSE4-NEXT:    jne LBB4_3
294 ; SSE4-NEXT:  LBB4_4: ## %else2
295 ; SSE4-NEXT:    testb $4, %al
296 ; SSE4-NEXT:    jne LBB4_5
297 ; SSE4-NEXT:  LBB4_6: ## %else4
298 ; SSE4-NEXT:    testb $8, %al
299 ; SSE4-NEXT:    jne LBB4_7
300 ; SSE4-NEXT:  LBB4_8: ## %else6
301 ; SSE4-NEXT:    retq
302 ; SSE4-NEXT:  LBB4_1: ## %cond.store
303 ; SSE4-NEXT:    movss %xmm0, (%rdi)
304 ; SSE4-NEXT:    testb $2, %al
305 ; SSE4-NEXT:    je LBB4_4
306 ; SSE4-NEXT:  LBB4_3: ## %cond.store1
307 ; SSE4-NEXT:    extractps $1, %xmm0, 4(%rdi)
308 ; SSE4-NEXT:    testb $4, %al
309 ; SSE4-NEXT:    je LBB4_6
310 ; SSE4-NEXT:  LBB4_5: ## %cond.store3
311 ; SSE4-NEXT:    extractps $2, %xmm0, 8(%rdi)
312 ; SSE4-NEXT:    testb $8, %al
313 ; SSE4-NEXT:    je LBB4_8
314 ; SSE4-NEXT:  LBB4_7: ## %cond.store5
315 ; SSE4-NEXT:    extractps $3, %xmm0, 12(%rdi)
316 ; SSE4-NEXT:    retq
318 ; AVX1OR2-LABEL: store_v4f32_v4i32:
319 ; AVX1OR2:       ## %bb.0:
320 ; AVX1OR2-NEXT:    vmaskmovps %xmm0, %xmm2, (%rdi)
321 ; AVX1OR2-NEXT:    retq
323 ; AVX512F-LABEL: store_v4f32_v4i32:
324 ; AVX512F:       ## %bb.0:
325 ; AVX512F-NEXT:    ## kill: def $xmm2 killed $xmm2 def $zmm2
326 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
327 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
328 ; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm1, %k0
329 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
330 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
331 ; AVX512F-NEXT:    vmovups %zmm0, (%rdi) {%k1}
332 ; AVX512F-NEXT:    vzeroupper
333 ; AVX512F-NEXT:    retq
335 ; AVX512VLDQ-LABEL: store_v4f32_v4i32:
336 ; AVX512VLDQ:       ## %bb.0:
337 ; AVX512VLDQ-NEXT:    vpmovd2m %xmm2, %k1
338 ; AVX512VLDQ-NEXT:    vmovups %xmm0, (%rdi) {%k1}
339 ; AVX512VLDQ-NEXT:    retq
341 ; AVX512VLBW-LABEL: store_v4f32_v4i32:
342 ; AVX512VLBW:       ## %bb.0:
343 ; AVX512VLBW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
344 ; AVX512VLBW-NEXT:    vpcmpgtd %xmm2, %xmm1, %k1
345 ; AVX512VLBW-NEXT:    vmovups %xmm0, (%rdi) {%k1}
346 ; AVX512VLBW-NEXT:    retq
347   %bool_mask = icmp slt <4 x i32> %mask, zeroinitializer
348   call void @llvm.masked.store.v4f32.p0v4f32(<4 x float> %x, <4 x float>* %ptr, i32 1, <4 x i1> %bool_mask)
349   ret void
352 define void @store_v8f32_v8i32(<8 x float> %x, <8 x float>* %ptr, <8 x float> %y, <8 x i32> %mask) {
353 ; SSE2-LABEL: store_v8f32_v8i32:
354 ; SSE2:       ## %bb.0:
355 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
356 ; SSE2-NEXT:    packsswb %xmm0, %xmm4
357 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
358 ; SSE2-NEXT:    testb $1, %al
359 ; SSE2-NEXT:    jne LBB5_1
360 ; SSE2-NEXT:  ## %bb.2: ## %else
361 ; SSE2-NEXT:    testb $2, %al
362 ; SSE2-NEXT:    jne LBB5_3
363 ; SSE2-NEXT:  LBB5_4: ## %else2
364 ; SSE2-NEXT:    testb $4, %al
365 ; SSE2-NEXT:    jne LBB5_5
366 ; SSE2-NEXT:  LBB5_6: ## %else4
367 ; SSE2-NEXT:    testb $8, %al
368 ; SSE2-NEXT:    jne LBB5_7
369 ; SSE2-NEXT:  LBB5_8: ## %else6
370 ; SSE2-NEXT:    testb $16, %al
371 ; SSE2-NEXT:    jne LBB5_9
372 ; SSE2-NEXT:  LBB5_10: ## %else8
373 ; SSE2-NEXT:    testb $32, %al
374 ; SSE2-NEXT:    jne LBB5_11
375 ; SSE2-NEXT:  LBB5_12: ## %else10
376 ; SSE2-NEXT:    testb $64, %al
377 ; SSE2-NEXT:    jne LBB5_13
378 ; SSE2-NEXT:  LBB5_14: ## %else12
379 ; SSE2-NEXT:    testb $-128, %al
380 ; SSE2-NEXT:    jne LBB5_15
381 ; SSE2-NEXT:  LBB5_16: ## %else14
382 ; SSE2-NEXT:    retq
383 ; SSE2-NEXT:  LBB5_1: ## %cond.store
384 ; SSE2-NEXT:    movd %xmm0, (%rdi)
385 ; SSE2-NEXT:    testb $2, %al
386 ; SSE2-NEXT:    je LBB5_4
387 ; SSE2-NEXT:  LBB5_3: ## %cond.store1
388 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
389 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1],xmm0[2,3]
390 ; SSE2-NEXT:    movss %xmm2, 4(%rdi)
391 ; SSE2-NEXT:    testb $4, %al
392 ; SSE2-NEXT:    je LBB5_6
393 ; SSE2-NEXT:  LBB5_5: ## %cond.store3
394 ; SSE2-NEXT:    movaps %xmm0, %xmm2
395 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm0[1]
396 ; SSE2-NEXT:    movss %xmm2, 8(%rdi)
397 ; SSE2-NEXT:    testb $8, %al
398 ; SSE2-NEXT:    je LBB5_8
399 ; SSE2-NEXT:  LBB5_7: ## %cond.store5
400 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
401 ; SSE2-NEXT:    movss %xmm0, 12(%rdi)
402 ; SSE2-NEXT:    testb $16, %al
403 ; SSE2-NEXT:    je LBB5_10
404 ; SSE2-NEXT:  LBB5_9: ## %cond.store7
405 ; SSE2-NEXT:    movss %xmm1, 16(%rdi)
406 ; SSE2-NEXT:    testb $32, %al
407 ; SSE2-NEXT:    je LBB5_12
408 ; SSE2-NEXT:  LBB5_11: ## %cond.store9
409 ; SSE2-NEXT:    movaps %xmm1, %xmm0
410 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[2,3]
411 ; SSE2-NEXT:    movss %xmm0, 20(%rdi)
412 ; SSE2-NEXT:    testb $64, %al
413 ; SSE2-NEXT:    je LBB5_14
414 ; SSE2-NEXT:  LBB5_13: ## %cond.store11
415 ; SSE2-NEXT:    movaps %xmm1, %xmm0
416 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
417 ; SSE2-NEXT:    movss %xmm0, 24(%rdi)
418 ; SSE2-NEXT:    testb $-128, %al
419 ; SSE2-NEXT:    je LBB5_16
420 ; SSE2-NEXT:  LBB5_15: ## %cond.store13
421 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,1,2,3]
422 ; SSE2-NEXT:    movss %xmm1, 28(%rdi)
423 ; SSE2-NEXT:    retq
425 ; SSE4-LABEL: store_v8f32_v8i32:
426 ; SSE4:       ## %bb.0:
427 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
428 ; SSE4-NEXT:    packsswb %xmm0, %xmm4
429 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
430 ; SSE4-NEXT:    testb $1, %al
431 ; SSE4-NEXT:    jne LBB5_1
432 ; SSE4-NEXT:  ## %bb.2: ## %else
433 ; SSE4-NEXT:    testb $2, %al
434 ; SSE4-NEXT:    jne LBB5_3
435 ; SSE4-NEXT:  LBB5_4: ## %else2
436 ; SSE4-NEXT:    testb $4, %al
437 ; SSE4-NEXT:    jne LBB5_5
438 ; SSE4-NEXT:  LBB5_6: ## %else4
439 ; SSE4-NEXT:    testb $8, %al
440 ; SSE4-NEXT:    jne LBB5_7
441 ; SSE4-NEXT:  LBB5_8: ## %else6
442 ; SSE4-NEXT:    testb $16, %al
443 ; SSE4-NEXT:    jne LBB5_9
444 ; SSE4-NEXT:  LBB5_10: ## %else8
445 ; SSE4-NEXT:    testb $32, %al
446 ; SSE4-NEXT:    jne LBB5_11
447 ; SSE4-NEXT:  LBB5_12: ## %else10
448 ; SSE4-NEXT:    testb $64, %al
449 ; SSE4-NEXT:    jne LBB5_13
450 ; SSE4-NEXT:  LBB5_14: ## %else12
451 ; SSE4-NEXT:    testb $-128, %al
452 ; SSE4-NEXT:    jne LBB5_15
453 ; SSE4-NEXT:  LBB5_16: ## %else14
454 ; SSE4-NEXT:    retq
455 ; SSE4-NEXT:  LBB5_1: ## %cond.store
456 ; SSE4-NEXT:    movd %xmm0, (%rdi)
457 ; SSE4-NEXT:    testb $2, %al
458 ; SSE4-NEXT:    je LBB5_4
459 ; SSE4-NEXT:  LBB5_3: ## %cond.store1
460 ; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)
461 ; SSE4-NEXT:    testb $4, %al
462 ; SSE4-NEXT:    je LBB5_6
463 ; SSE4-NEXT:  LBB5_5: ## %cond.store3
464 ; SSE4-NEXT:    pextrd $2, %xmm0, 8(%rdi)
465 ; SSE4-NEXT:    testb $8, %al
466 ; SSE4-NEXT:    je LBB5_8
467 ; SSE4-NEXT:  LBB5_7: ## %cond.store5
468 ; SSE4-NEXT:    pextrd $3, %xmm0, 12(%rdi)
469 ; SSE4-NEXT:    testb $16, %al
470 ; SSE4-NEXT:    je LBB5_10
471 ; SSE4-NEXT:  LBB5_9: ## %cond.store7
472 ; SSE4-NEXT:    movss %xmm1, 16(%rdi)
473 ; SSE4-NEXT:    testb $32, %al
474 ; SSE4-NEXT:    je LBB5_12
475 ; SSE4-NEXT:  LBB5_11: ## %cond.store9
476 ; SSE4-NEXT:    extractps $1, %xmm1, 20(%rdi)
477 ; SSE4-NEXT:    testb $64, %al
478 ; SSE4-NEXT:    je LBB5_14
479 ; SSE4-NEXT:  LBB5_13: ## %cond.store11
480 ; SSE4-NEXT:    extractps $2, %xmm1, 24(%rdi)
481 ; SSE4-NEXT:    testb $-128, %al
482 ; SSE4-NEXT:    je LBB5_16
483 ; SSE4-NEXT:  LBB5_15: ## %cond.store13
484 ; SSE4-NEXT:    extractps $3, %xmm1, 28(%rdi)
485 ; SSE4-NEXT:    retq
487 ; AVX1OR2-LABEL: store_v8f32_v8i32:
488 ; AVX1OR2:       ## %bb.0:
489 ; AVX1OR2-NEXT:    vmaskmovps %ymm0, %ymm2, (%rdi)
490 ; AVX1OR2-NEXT:    vzeroupper
491 ; AVX1OR2-NEXT:    retq
493 ; AVX512F-LABEL: store_v8f32_v8i32:
494 ; AVX512F:       ## %bb.0:
495 ; AVX512F-NEXT:    ## kill: def $ymm2 killed $ymm2 def $zmm2
496 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
497 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
498 ; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm1, %k0
499 ; AVX512F-NEXT:    kshiftlw $8, %k0, %k0
500 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
501 ; AVX512F-NEXT:    vmovups %zmm0, (%rdi) {%k1}
502 ; AVX512F-NEXT:    vzeroupper
503 ; AVX512F-NEXT:    retq
505 ; AVX512VLDQ-LABEL: store_v8f32_v8i32:
506 ; AVX512VLDQ:       ## %bb.0:
507 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k1
508 ; AVX512VLDQ-NEXT:    vmovups %ymm0, (%rdi) {%k1}
509 ; AVX512VLDQ-NEXT:    vzeroupper
510 ; AVX512VLDQ-NEXT:    retq
512 ; AVX512VLBW-LABEL: store_v8f32_v8i32:
513 ; AVX512VLBW:       ## %bb.0:
514 ; AVX512VLBW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
515 ; AVX512VLBW-NEXT:    vpcmpgtd %ymm2, %ymm1, %k1
516 ; AVX512VLBW-NEXT:    vmovups %ymm0, (%rdi) {%k1}
517 ; AVX512VLBW-NEXT:    vzeroupper
518 ; AVX512VLBW-NEXT:    retq
519   %bool_mask = icmp slt <8 x i32> %mask, zeroinitializer
520   call void @llvm.masked.store.v8f32.p0v8f32(<8 x float> %x, <8 x float>* %ptr, i32 1, <8 x i1> %bool_mask)
521   ret void
524 define void @store_v16f32_v16i32(<16 x float> %x, <16 x float>* %ptr, <16 x float> %y, <16 x i32> %mask) {
525 ; SSE2-LABEL: store_v16f32_v16i32:
526 ; SSE2:       ## %bb.0:
527 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
528 ; SSE2-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
529 ; SSE2-NEXT:    packssdw {{[0-9]+}}(%rsp), %xmm5
530 ; SSE2-NEXT:    packssdw {{[0-9]+}}(%rsp), %xmm4
531 ; SSE2-NEXT:    packsswb %xmm5, %xmm4
532 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
533 ; SSE2-NEXT:    testb $1, %al
534 ; SSE2-NEXT:    jne LBB6_1
535 ; SSE2-NEXT:  ## %bb.2: ## %else
536 ; SSE2-NEXT:    testb $2, %al
537 ; SSE2-NEXT:    jne LBB6_3
538 ; SSE2-NEXT:  LBB6_4: ## %else2
539 ; SSE2-NEXT:    testb $4, %al
540 ; SSE2-NEXT:    jne LBB6_5
541 ; SSE2-NEXT:  LBB6_6: ## %else4
542 ; SSE2-NEXT:    testb $8, %al
543 ; SSE2-NEXT:    jne LBB6_7
544 ; SSE2-NEXT:  LBB6_8: ## %else6
545 ; SSE2-NEXT:    testb $16, %al
546 ; SSE2-NEXT:    jne LBB6_9
547 ; SSE2-NEXT:  LBB6_10: ## %else8
548 ; SSE2-NEXT:    testb $32, %al
549 ; SSE2-NEXT:    jne LBB6_11
550 ; SSE2-NEXT:  LBB6_12: ## %else10
551 ; SSE2-NEXT:    testb $64, %al
552 ; SSE2-NEXT:    jne LBB6_13
553 ; SSE2-NEXT:  LBB6_14: ## %else12
554 ; SSE2-NEXT:    testb $-128, %al
555 ; SSE2-NEXT:    jne LBB6_15
556 ; SSE2-NEXT:  LBB6_16: ## %else14
557 ; SSE2-NEXT:    testl $256, %eax ## imm = 0x100
558 ; SSE2-NEXT:    jne LBB6_17
559 ; SSE2-NEXT:  LBB6_18: ## %else16
560 ; SSE2-NEXT:    testl $512, %eax ## imm = 0x200
561 ; SSE2-NEXT:    jne LBB6_19
562 ; SSE2-NEXT:  LBB6_20: ## %else18
563 ; SSE2-NEXT:    testl $1024, %eax ## imm = 0x400
564 ; SSE2-NEXT:    jne LBB6_21
565 ; SSE2-NEXT:  LBB6_22: ## %else20
566 ; SSE2-NEXT:    testl $2048, %eax ## imm = 0x800
567 ; SSE2-NEXT:    jne LBB6_23
568 ; SSE2-NEXT:  LBB6_24: ## %else22
569 ; SSE2-NEXT:    testl $4096, %eax ## imm = 0x1000
570 ; SSE2-NEXT:    jne LBB6_25
571 ; SSE2-NEXT:  LBB6_26: ## %else24
572 ; SSE2-NEXT:    testl $8192, %eax ## imm = 0x2000
573 ; SSE2-NEXT:    jne LBB6_27
574 ; SSE2-NEXT:  LBB6_28: ## %else26
575 ; SSE2-NEXT:    testl $16384, %eax ## imm = 0x4000
576 ; SSE2-NEXT:    jne LBB6_29
577 ; SSE2-NEXT:  LBB6_30: ## %else28
578 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
579 ; SSE2-NEXT:    jne LBB6_31
580 ; SSE2-NEXT:  LBB6_32: ## %else30
581 ; SSE2-NEXT:    retq
582 ; SSE2-NEXT:  LBB6_1: ## %cond.store
583 ; SSE2-NEXT:    movss %xmm0, (%rdi)
584 ; SSE2-NEXT:    testb $2, %al
585 ; SSE2-NEXT:    je LBB6_4
586 ; SSE2-NEXT:  LBB6_3: ## %cond.store1
587 ; SSE2-NEXT:    movaps %xmm0, %xmm4
588 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[1,1],xmm0[2,3]
589 ; SSE2-NEXT:    movss %xmm4, 4(%rdi)
590 ; SSE2-NEXT:    testb $4, %al
591 ; SSE2-NEXT:    je LBB6_6
592 ; SSE2-NEXT:  LBB6_5: ## %cond.store3
593 ; SSE2-NEXT:    movaps %xmm0, %xmm4
594 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1]
595 ; SSE2-NEXT:    movss %xmm4, 8(%rdi)
596 ; SSE2-NEXT:    testb $8, %al
597 ; SSE2-NEXT:    je LBB6_8
598 ; SSE2-NEXT:  LBB6_7: ## %cond.store5
599 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
600 ; SSE2-NEXT:    movss %xmm0, 12(%rdi)
601 ; SSE2-NEXT:    testb $16, %al
602 ; SSE2-NEXT:    je LBB6_10
603 ; SSE2-NEXT:  LBB6_9: ## %cond.store7
604 ; SSE2-NEXT:    movss %xmm1, 16(%rdi)
605 ; SSE2-NEXT:    testb $32, %al
606 ; SSE2-NEXT:    je LBB6_12
607 ; SSE2-NEXT:  LBB6_11: ## %cond.store9
608 ; SSE2-NEXT:    movaps %xmm1, %xmm0
609 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[2,3]
610 ; SSE2-NEXT:    movss %xmm0, 20(%rdi)
611 ; SSE2-NEXT:    testb $64, %al
612 ; SSE2-NEXT:    je LBB6_14
613 ; SSE2-NEXT:  LBB6_13: ## %cond.store11
614 ; SSE2-NEXT:    movaps %xmm1, %xmm0
615 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
616 ; SSE2-NEXT:    movss %xmm0, 24(%rdi)
617 ; SSE2-NEXT:    testb $-128, %al
618 ; SSE2-NEXT:    je LBB6_16
619 ; SSE2-NEXT:  LBB6_15: ## %cond.store13
620 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[3,1,2,3]
621 ; SSE2-NEXT:    movss %xmm1, 28(%rdi)
622 ; SSE2-NEXT:    testl $256, %eax ## imm = 0x100
623 ; SSE2-NEXT:    je LBB6_18
624 ; SSE2-NEXT:  LBB6_17: ## %cond.store15
625 ; SSE2-NEXT:    movss %xmm2, 32(%rdi)
626 ; SSE2-NEXT:    testl $512, %eax ## imm = 0x200
627 ; SSE2-NEXT:    je LBB6_20
628 ; SSE2-NEXT:  LBB6_19: ## %cond.store17
629 ; SSE2-NEXT:    movaps %xmm2, %xmm0
630 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1],xmm2[2,3]
631 ; SSE2-NEXT:    movss %xmm0, 36(%rdi)
632 ; SSE2-NEXT:    testl $1024, %eax ## imm = 0x400
633 ; SSE2-NEXT:    je LBB6_22
634 ; SSE2-NEXT:  LBB6_21: ## %cond.store19
635 ; SSE2-NEXT:    movaps %xmm2, %xmm0
636 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm2[1]
637 ; SSE2-NEXT:    movss %xmm0, 40(%rdi)
638 ; SSE2-NEXT:    testl $2048, %eax ## imm = 0x800
639 ; SSE2-NEXT:    je LBB6_24
640 ; SSE2-NEXT:  LBB6_23: ## %cond.store21
641 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[3,1,2,3]
642 ; SSE2-NEXT:    movss %xmm2, 44(%rdi)
643 ; SSE2-NEXT:    testl $4096, %eax ## imm = 0x1000
644 ; SSE2-NEXT:    je LBB6_26
645 ; SSE2-NEXT:  LBB6_25: ## %cond.store23
646 ; SSE2-NEXT:    movss %xmm3, 48(%rdi)
647 ; SSE2-NEXT:    testl $8192, %eax ## imm = 0x2000
648 ; SSE2-NEXT:    je LBB6_28
649 ; SSE2-NEXT:  LBB6_27: ## %cond.store25
650 ; SSE2-NEXT:    movaps %xmm3, %xmm0
651 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1],xmm3[2,3]
652 ; SSE2-NEXT:    movss %xmm0, 52(%rdi)
653 ; SSE2-NEXT:    testl $16384, %eax ## imm = 0x4000
654 ; SSE2-NEXT:    je LBB6_30
655 ; SSE2-NEXT:  LBB6_29: ## %cond.store27
656 ; SSE2-NEXT:    movaps %xmm3, %xmm0
657 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm3[1]
658 ; SSE2-NEXT:    movss %xmm0, 56(%rdi)
659 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
660 ; SSE2-NEXT:    je LBB6_32
661 ; SSE2-NEXT:  LBB6_31: ## %cond.store29
662 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,1,2,3]
663 ; SSE2-NEXT:    movss %xmm3, 60(%rdi)
664 ; SSE2-NEXT:    retq
666 ; SSE4-LABEL: store_v16f32_v16i32:
667 ; SSE4:       ## %bb.0:
668 ; SSE4-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm4
669 ; SSE4-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm5
670 ; SSE4-NEXT:    packssdw {{[0-9]+}}(%rsp), %xmm5
671 ; SSE4-NEXT:    packssdw {{[0-9]+}}(%rsp), %xmm4
672 ; SSE4-NEXT:    packsswb %xmm5, %xmm4
673 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
674 ; SSE4-NEXT:    testb $1, %al
675 ; SSE4-NEXT:    jne LBB6_1
676 ; SSE4-NEXT:  ## %bb.2: ## %else
677 ; SSE4-NEXT:    testb $2, %al
678 ; SSE4-NEXT:    jne LBB6_3
679 ; SSE4-NEXT:  LBB6_4: ## %else2
680 ; SSE4-NEXT:    testb $4, %al
681 ; SSE4-NEXT:    jne LBB6_5
682 ; SSE4-NEXT:  LBB6_6: ## %else4
683 ; SSE4-NEXT:    testb $8, %al
684 ; SSE4-NEXT:    jne LBB6_7
685 ; SSE4-NEXT:  LBB6_8: ## %else6
686 ; SSE4-NEXT:    testb $16, %al
687 ; SSE4-NEXT:    jne LBB6_9
688 ; SSE4-NEXT:  LBB6_10: ## %else8
689 ; SSE4-NEXT:    testb $32, %al
690 ; SSE4-NEXT:    jne LBB6_11
691 ; SSE4-NEXT:  LBB6_12: ## %else10
692 ; SSE4-NEXT:    testb $64, %al
693 ; SSE4-NEXT:    jne LBB6_13
694 ; SSE4-NEXT:  LBB6_14: ## %else12
695 ; SSE4-NEXT:    testb $-128, %al
696 ; SSE4-NEXT:    jne LBB6_15
697 ; SSE4-NEXT:  LBB6_16: ## %else14
698 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
699 ; SSE4-NEXT:    jne LBB6_17
700 ; SSE4-NEXT:  LBB6_18: ## %else16
701 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
702 ; SSE4-NEXT:    jne LBB6_19
703 ; SSE4-NEXT:  LBB6_20: ## %else18
704 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
705 ; SSE4-NEXT:    jne LBB6_21
706 ; SSE4-NEXT:  LBB6_22: ## %else20
707 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
708 ; SSE4-NEXT:    jne LBB6_23
709 ; SSE4-NEXT:  LBB6_24: ## %else22
710 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
711 ; SSE4-NEXT:    jne LBB6_25
712 ; SSE4-NEXT:  LBB6_26: ## %else24
713 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
714 ; SSE4-NEXT:    jne LBB6_27
715 ; SSE4-NEXT:  LBB6_28: ## %else26
716 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
717 ; SSE4-NEXT:    jne LBB6_29
718 ; SSE4-NEXT:  LBB6_30: ## %else28
719 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
720 ; SSE4-NEXT:    jne LBB6_31
721 ; SSE4-NEXT:  LBB6_32: ## %else30
722 ; SSE4-NEXT:    retq
723 ; SSE4-NEXT:  LBB6_1: ## %cond.store
724 ; SSE4-NEXT:    movss %xmm0, (%rdi)
725 ; SSE4-NEXT:    testb $2, %al
726 ; SSE4-NEXT:    je LBB6_4
727 ; SSE4-NEXT:  LBB6_3: ## %cond.store1
728 ; SSE4-NEXT:    extractps $1, %xmm0, 4(%rdi)
729 ; SSE4-NEXT:    testb $4, %al
730 ; SSE4-NEXT:    je LBB6_6
731 ; SSE4-NEXT:  LBB6_5: ## %cond.store3
732 ; SSE4-NEXT:    extractps $2, %xmm0, 8(%rdi)
733 ; SSE4-NEXT:    testb $8, %al
734 ; SSE4-NEXT:    je LBB6_8
735 ; SSE4-NEXT:  LBB6_7: ## %cond.store5
736 ; SSE4-NEXT:    extractps $3, %xmm0, 12(%rdi)
737 ; SSE4-NEXT:    testb $16, %al
738 ; SSE4-NEXT:    je LBB6_10
739 ; SSE4-NEXT:  LBB6_9: ## %cond.store7
740 ; SSE4-NEXT:    movss %xmm1, 16(%rdi)
741 ; SSE4-NEXT:    testb $32, %al
742 ; SSE4-NEXT:    je LBB6_12
743 ; SSE4-NEXT:  LBB6_11: ## %cond.store9
744 ; SSE4-NEXT:    extractps $1, %xmm1, 20(%rdi)
745 ; SSE4-NEXT:    testb $64, %al
746 ; SSE4-NEXT:    je LBB6_14
747 ; SSE4-NEXT:  LBB6_13: ## %cond.store11
748 ; SSE4-NEXT:    extractps $2, %xmm1, 24(%rdi)
749 ; SSE4-NEXT:    testb $-128, %al
750 ; SSE4-NEXT:    je LBB6_16
751 ; SSE4-NEXT:  LBB6_15: ## %cond.store13
752 ; SSE4-NEXT:    extractps $3, %xmm1, 28(%rdi)
753 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
754 ; SSE4-NEXT:    je LBB6_18
755 ; SSE4-NEXT:  LBB6_17: ## %cond.store15
756 ; SSE4-NEXT:    movss %xmm2, 32(%rdi)
757 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
758 ; SSE4-NEXT:    je LBB6_20
759 ; SSE4-NEXT:  LBB6_19: ## %cond.store17
760 ; SSE4-NEXT:    extractps $1, %xmm2, 36(%rdi)
761 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
762 ; SSE4-NEXT:    je LBB6_22
763 ; SSE4-NEXT:  LBB6_21: ## %cond.store19
764 ; SSE4-NEXT:    extractps $2, %xmm2, 40(%rdi)
765 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
766 ; SSE4-NEXT:    je LBB6_24
767 ; SSE4-NEXT:  LBB6_23: ## %cond.store21
768 ; SSE4-NEXT:    extractps $3, %xmm2, 44(%rdi)
769 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
770 ; SSE4-NEXT:    je LBB6_26
771 ; SSE4-NEXT:  LBB6_25: ## %cond.store23
772 ; SSE4-NEXT:    movss %xmm3, 48(%rdi)
773 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
774 ; SSE4-NEXT:    je LBB6_28
775 ; SSE4-NEXT:  LBB6_27: ## %cond.store25
776 ; SSE4-NEXT:    extractps $1, %xmm3, 52(%rdi)
777 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
778 ; SSE4-NEXT:    je LBB6_30
779 ; SSE4-NEXT:  LBB6_29: ## %cond.store27
780 ; SSE4-NEXT:    extractps $2, %xmm3, 56(%rdi)
781 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
782 ; SSE4-NEXT:    je LBB6_32
783 ; SSE4-NEXT:  LBB6_31: ## %cond.store29
784 ; SSE4-NEXT:    extractps $3, %xmm3, 60(%rdi)
785 ; SSE4-NEXT:    retq
787 ; AVX1OR2-LABEL: store_v16f32_v16i32:
788 ; AVX1OR2:       ## %bb.0:
789 ; AVX1OR2-NEXT:    vmaskmovps %ymm1, %ymm5, 32(%rdi)
790 ; AVX1OR2-NEXT:    vmaskmovps %ymm0, %ymm4, (%rdi)
791 ; AVX1OR2-NEXT:    vzeroupper
792 ; AVX1OR2-NEXT:    retq
794 ; AVX512F-LABEL: store_v16f32_v16i32:
795 ; AVX512F:       ## %bb.0:
796 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
797 ; AVX512F-NEXT:    vpcmpgtd %zmm2, %zmm1, %k1
798 ; AVX512F-NEXT:    vmovups %zmm0, (%rdi) {%k1}
799 ; AVX512F-NEXT:    vzeroupper
800 ; AVX512F-NEXT:    retq
802 ; AVX512VLDQ-LABEL: store_v16f32_v16i32:
803 ; AVX512VLDQ:       ## %bb.0:
804 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k1
805 ; AVX512VLDQ-NEXT:    vmovups %zmm0, (%rdi) {%k1}
806 ; AVX512VLDQ-NEXT:    vzeroupper
807 ; AVX512VLDQ-NEXT:    retq
809 ; AVX512VLBW-LABEL: store_v16f32_v16i32:
810 ; AVX512VLBW:       ## %bb.0:
811 ; AVX512VLBW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
812 ; AVX512VLBW-NEXT:    vpcmpgtd %zmm2, %zmm1, %k1
813 ; AVX512VLBW-NEXT:    vmovups %zmm0, (%rdi) {%k1}
814 ; AVX512VLBW-NEXT:    vzeroupper
815 ; AVX512VLBW-NEXT:    retq
816   %bool_mask = icmp slt <16 x i32> %mask, zeroinitializer
817   call void @llvm.masked.store.v16f32.p0v16f32(<16 x float> %x, <16 x float>* %ptr, i32 1, <16 x i1> %bool_mask)
818   ret void
822 ; vXi64
825 define void @store_v2i64_v2i64(<2 x i64> %trigger, <2 x i64>* %addr, <2 x i64> %val) {
826 ; SSE2-LABEL: store_v2i64_v2i64:
827 ; SSE2:       ## %bb.0:
828 ; SSE2-NEXT:    movmskpd %xmm0, %eax
829 ; SSE2-NEXT:    testb $1, %al
830 ; SSE2-NEXT:    jne LBB7_1
831 ; SSE2-NEXT:  ## %bb.2: ## %else
832 ; SSE2-NEXT:    testb $2, %al
833 ; SSE2-NEXT:    jne LBB7_3
834 ; SSE2-NEXT:  LBB7_4: ## %else2
835 ; SSE2-NEXT:    retq
836 ; SSE2-NEXT:  LBB7_1: ## %cond.store
837 ; SSE2-NEXT:    movq %xmm1, (%rdi)
838 ; SSE2-NEXT:    testb $2, %al
839 ; SSE2-NEXT:    je LBB7_4
840 ; SSE2-NEXT:  LBB7_3: ## %cond.store1
841 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
842 ; SSE2-NEXT:    movq %xmm0, 8(%rdi)
843 ; SSE2-NEXT:    retq
845 ; SSE4-LABEL: store_v2i64_v2i64:
846 ; SSE4:       ## %bb.0:
847 ; SSE4-NEXT:    movmskpd %xmm0, %eax
848 ; SSE4-NEXT:    testb $1, %al
849 ; SSE4-NEXT:    jne LBB7_1
850 ; SSE4-NEXT:  ## %bb.2: ## %else
851 ; SSE4-NEXT:    testb $2, %al
852 ; SSE4-NEXT:    jne LBB7_3
853 ; SSE4-NEXT:  LBB7_4: ## %else2
854 ; SSE4-NEXT:    retq
855 ; SSE4-NEXT:  LBB7_1: ## %cond.store
856 ; SSE4-NEXT:    movq %xmm1, (%rdi)
857 ; SSE4-NEXT:    testb $2, %al
858 ; SSE4-NEXT:    je LBB7_4
859 ; SSE4-NEXT:  LBB7_3: ## %cond.store1
860 ; SSE4-NEXT:    pextrq $1, %xmm1, 8(%rdi)
861 ; SSE4-NEXT:    retq
863 ; AVX1-LABEL: store_v2i64_v2i64:
864 ; AVX1:       ## %bb.0:
865 ; AVX1-NEXT:    vmaskmovpd %xmm1, %xmm0, (%rdi)
866 ; AVX1-NEXT:    retq
868 ; AVX2-LABEL: store_v2i64_v2i64:
869 ; AVX2:       ## %bb.0:
870 ; AVX2-NEXT:    vpmaskmovq %xmm1, %xmm0, (%rdi)
871 ; AVX2-NEXT:    retq
873 ; AVX512F-LABEL: store_v2i64_v2i64:
874 ; AVX512F:       ## %bb.0:
875 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
876 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
877 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
878 ; AVX512F-NEXT:    vpcmpgtq %zmm0, %zmm2, %k0
879 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
880 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
881 ; AVX512F-NEXT:    vmovdqu64 %zmm1, (%rdi) {%k1}
882 ; AVX512F-NEXT:    vzeroupper
883 ; AVX512F-NEXT:    retq
885 ; AVX512VLDQ-LABEL: store_v2i64_v2i64:
886 ; AVX512VLDQ:       ## %bb.0:
887 ; AVX512VLDQ-NEXT:    vpmovq2m %xmm0, %k1
888 ; AVX512VLDQ-NEXT:    vmovdqu64 %xmm1, (%rdi) {%k1}
889 ; AVX512VLDQ-NEXT:    retq
891 ; AVX512VLBW-LABEL: store_v2i64_v2i64:
892 ; AVX512VLBW:       ## %bb.0:
893 ; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm2
894 ; AVX512VLBW-NEXT:    vpcmpgtq %xmm0, %xmm2, %k1
895 ; AVX512VLBW-NEXT:    vmovdqu64 %xmm1, (%rdi) {%k1}
896 ; AVX512VLBW-NEXT:    retq
897   %mask = icmp slt <2 x i64> %trigger, zeroinitializer
898   call void @llvm.masked.store.v2i64.p0v2i64(<2 x i64> %val, <2 x i64>* %addr, i32 4, <2 x i1> %mask)
899   ret void
902 define void @store_v4i64_v4i64(<4 x i64> %trigger, <4 x i64>* %addr, <4 x i64> %val) {
903 ; SSE2-LABEL: store_v4i64_v4i64:
904 ; SSE2:       ## %bb.0:
905 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
906 ; SSE2-NEXT:    movmskps %xmm0, %eax
907 ; SSE2-NEXT:    testb $1, %al
908 ; SSE2-NEXT:    jne LBB8_1
909 ; SSE2-NEXT:  ## %bb.2: ## %else
910 ; SSE2-NEXT:    testb $2, %al
911 ; SSE2-NEXT:    jne LBB8_3
912 ; SSE2-NEXT:  LBB8_4: ## %else2
913 ; SSE2-NEXT:    testb $4, %al
914 ; SSE2-NEXT:    jne LBB8_5
915 ; SSE2-NEXT:  LBB8_6: ## %else4
916 ; SSE2-NEXT:    testb $8, %al
917 ; SSE2-NEXT:    jne LBB8_7
918 ; SSE2-NEXT:  LBB8_8: ## %else6
919 ; SSE2-NEXT:    retq
920 ; SSE2-NEXT:  LBB8_1: ## %cond.store
921 ; SSE2-NEXT:    movq %xmm2, (%rdi)
922 ; SSE2-NEXT:    testb $2, %al
923 ; SSE2-NEXT:    je LBB8_4
924 ; SSE2-NEXT:  LBB8_3: ## %cond.store1
925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
926 ; SSE2-NEXT:    movq %xmm0, 8(%rdi)
927 ; SSE2-NEXT:    testb $4, %al
928 ; SSE2-NEXT:    je LBB8_6
929 ; SSE2-NEXT:  LBB8_5: ## %cond.store3
930 ; SSE2-NEXT:    movq %xmm3, 16(%rdi)
931 ; SSE2-NEXT:    testb $8, %al
932 ; SSE2-NEXT:    je LBB8_8
933 ; SSE2-NEXT:  LBB8_7: ## %cond.store5
934 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[2,3,0,1]
935 ; SSE2-NEXT:    movq %xmm0, 24(%rdi)
936 ; SSE2-NEXT:    retq
938 ; SSE4-LABEL: store_v4i64_v4i64:
939 ; SSE4:       ## %bb.0:
940 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
941 ; SSE4-NEXT:    movmskps %xmm0, %eax
942 ; SSE4-NEXT:    testb $1, %al
943 ; SSE4-NEXT:    jne LBB8_1
944 ; SSE4-NEXT:  ## %bb.2: ## %else
945 ; SSE4-NEXT:    testb $2, %al
946 ; SSE4-NEXT:    jne LBB8_3
947 ; SSE4-NEXT:  LBB8_4: ## %else2
948 ; SSE4-NEXT:    testb $4, %al
949 ; SSE4-NEXT:    jne LBB8_5
950 ; SSE4-NEXT:  LBB8_6: ## %else4
951 ; SSE4-NEXT:    testb $8, %al
952 ; SSE4-NEXT:    jne LBB8_7
953 ; SSE4-NEXT:  LBB8_8: ## %else6
954 ; SSE4-NEXT:    retq
955 ; SSE4-NEXT:  LBB8_1: ## %cond.store
956 ; SSE4-NEXT:    movq %xmm2, (%rdi)
957 ; SSE4-NEXT:    testb $2, %al
958 ; SSE4-NEXT:    je LBB8_4
959 ; SSE4-NEXT:  LBB8_3: ## %cond.store1
960 ; SSE4-NEXT:    pextrq $1, %xmm2, 8(%rdi)
961 ; SSE4-NEXT:    testb $4, %al
962 ; SSE4-NEXT:    je LBB8_6
963 ; SSE4-NEXT:  LBB8_5: ## %cond.store3
964 ; SSE4-NEXT:    movq %xmm3, 16(%rdi)
965 ; SSE4-NEXT:    testb $8, %al
966 ; SSE4-NEXT:    je LBB8_8
967 ; SSE4-NEXT:  LBB8_7: ## %cond.store5
968 ; SSE4-NEXT:    pextrq $1, %xmm3, 24(%rdi)
969 ; SSE4-NEXT:    retq
971 ; AVX1-LABEL: store_v4i64_v4i64:
972 ; AVX1:       ## %bb.0:
973 ; AVX1-NEXT:    vmaskmovpd %ymm1, %ymm0, (%rdi)
974 ; AVX1-NEXT:    vzeroupper
975 ; AVX1-NEXT:    retq
977 ; AVX2-LABEL: store_v4i64_v4i64:
978 ; AVX2:       ## %bb.0:
979 ; AVX2-NEXT:    vpmaskmovq %ymm1, %ymm0, (%rdi)
980 ; AVX2-NEXT:    vzeroupper
981 ; AVX2-NEXT:    retq
983 ; AVX512F-LABEL: store_v4i64_v4i64:
984 ; AVX512F:       ## %bb.0:
985 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
986 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
987 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
988 ; AVX512F-NEXT:    vpcmpgtq %zmm0, %zmm2, %k0
989 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
990 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
991 ; AVX512F-NEXT:    vmovdqu64 %zmm1, (%rdi) {%k1}
992 ; AVX512F-NEXT:    vzeroupper
993 ; AVX512F-NEXT:    retq
995 ; AVX512VLDQ-LABEL: store_v4i64_v4i64:
996 ; AVX512VLDQ:       ## %bb.0:
997 ; AVX512VLDQ-NEXT:    vpmovq2m %ymm0, %k1
998 ; AVX512VLDQ-NEXT:    vmovdqu64 %ymm1, (%rdi) {%k1}
999 ; AVX512VLDQ-NEXT:    vzeroupper
1000 ; AVX512VLDQ-NEXT:    retq
1002 ; AVX512VLBW-LABEL: store_v4i64_v4i64:
1003 ; AVX512VLBW:       ## %bb.0:
1004 ; AVX512VLBW-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1005 ; AVX512VLBW-NEXT:    vpcmpgtq %ymm0, %ymm2, %k1
1006 ; AVX512VLBW-NEXT:    vmovdqu64 %ymm1, (%rdi) {%k1}
1007 ; AVX512VLBW-NEXT:    vzeroupper
1008 ; AVX512VLBW-NEXT:    retq
1009   %mask = icmp slt <4 x i64> %trigger, zeroinitializer
1010   call void @llvm.masked.store.v4i64.p0v4i64(<4 x i64> %val, <4 x i64>* %addr, i32 4, <4 x i1> %mask)
1011   ret void
1015 ; vXi32
1018 define void @store_v1i32_v1i32(<1 x i32> %trigger, <1 x i32>* %addr, <1 x i32> %val) {
1019 ; SSE-LABEL: store_v1i32_v1i32:
1020 ; SSE:       ## %bb.0:
1021 ; SSE-NEXT:    testl %edi, %edi
1022 ; SSE-NEXT:    jne LBB9_2
1023 ; SSE-NEXT:  ## %bb.1: ## %cond.store
1024 ; SSE-NEXT:    movl %edx, (%rsi)
1025 ; SSE-NEXT:  LBB9_2: ## %else
1026 ; SSE-NEXT:    retq
1028 ; AVX-LABEL: store_v1i32_v1i32:
1029 ; AVX:       ## %bb.0:
1030 ; AVX-NEXT:    testl %edi, %edi
1031 ; AVX-NEXT:    jne LBB9_2
1032 ; AVX-NEXT:  ## %bb.1: ## %cond.store
1033 ; AVX-NEXT:    movl %edx, (%rsi)
1034 ; AVX-NEXT:  LBB9_2: ## %else
1035 ; AVX-NEXT:    retq
1036   %mask = icmp eq <1 x i32> %trigger, zeroinitializer
1037   call void @llvm.masked.store.v1i32.p0v1i32(<1 x i32> %val, <1 x i32>* %addr, i32 4, <1 x i1> %mask)
1038   ret void
1041 define void @store_v2i32_v2i32(<2 x i32> %trigger, <2 x i32>* %addr, <2 x i32> %val) {
1042 ; SSE2-LABEL: store_v2i32_v2i32:
1043 ; SSE2:       ## %bb.0:
1044 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1045 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
1046 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]
1047 ; SSE2-NEXT:    movmskpd %xmm0, %eax
1048 ; SSE2-NEXT:    testb $1, %al
1049 ; SSE2-NEXT:    jne LBB10_1
1050 ; SSE2-NEXT:  ## %bb.2: ## %else
1051 ; SSE2-NEXT:    testb $2, %al
1052 ; SSE2-NEXT:    jne LBB10_3
1053 ; SSE2-NEXT:  LBB10_4: ## %else2
1054 ; SSE2-NEXT:    retq
1055 ; SSE2-NEXT:  LBB10_1: ## %cond.store
1056 ; SSE2-NEXT:    movd %xmm1, (%rdi)
1057 ; SSE2-NEXT:    testb $2, %al
1058 ; SSE2-NEXT:    je LBB10_4
1059 ; SSE2-NEXT:  LBB10_3: ## %cond.store1
1060 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
1061 ; SSE2-NEXT:    movd %xmm0, 4(%rdi)
1062 ; SSE2-NEXT:    retq
1064 ; SSE4-LABEL: store_v2i32_v2i32:
1065 ; SSE4:       ## %bb.0:
1066 ; SSE4-NEXT:    pxor %xmm2, %xmm2
1067 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm2
1068 ; SSE4-NEXT:    pmovsxdq %xmm2, %xmm0
1069 ; SSE4-NEXT:    movmskpd %xmm0, %eax
1070 ; SSE4-NEXT:    testb $1, %al
1071 ; SSE4-NEXT:    jne LBB10_1
1072 ; SSE4-NEXT:  ## %bb.2: ## %else
1073 ; SSE4-NEXT:    testb $2, %al
1074 ; SSE4-NEXT:    jne LBB10_3
1075 ; SSE4-NEXT:  LBB10_4: ## %else2
1076 ; SSE4-NEXT:    retq
1077 ; SSE4-NEXT:  LBB10_1: ## %cond.store
1078 ; SSE4-NEXT:    movss %xmm1, (%rdi)
1079 ; SSE4-NEXT:    testb $2, %al
1080 ; SSE4-NEXT:    je LBB10_4
1081 ; SSE4-NEXT:  LBB10_3: ## %cond.store1
1082 ; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)
1083 ; SSE4-NEXT:    retq
1085 ; AVX1-LABEL: store_v2i32_v2i32:
1086 ; AVX1:       ## %bb.0:
1087 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1088 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
1089 ; AVX1-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1090 ; AVX1-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)
1091 ; AVX1-NEXT:    retq
1093 ; AVX2-LABEL: store_v2i32_v2i32:
1094 ; AVX2:       ## %bb.0:
1095 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1096 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
1097 ; AVX2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
1098 ; AVX2-NEXT:    vpmaskmovd %xmm1, %xmm0, (%rdi)
1099 ; AVX2-NEXT:    retq
1101 ; AVX512F-LABEL: store_v2i32_v2i32:
1102 ; AVX512F:       ## %bb.0:
1103 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
1104 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
1105 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
1106 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
1107 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
1108 ; AVX512F-NEXT:    vmovdqu32 %zmm1, (%rdi) {%k1}
1109 ; AVX512F-NEXT:    vzeroupper
1110 ; AVX512F-NEXT:    retq
1112 ; AVX512VLDQ-LABEL: store_v2i32_v2i32:
1113 ; AVX512VLDQ:       ## %bb.0:
1114 ; AVX512VLDQ-NEXT:    vptestnmd %xmm0, %xmm0, %k0
1115 ; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0
1116 ; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1
1117 ; AVX512VLDQ-NEXT:    vmovdqu32 %xmm1, (%rdi) {%k1}
1118 ; AVX512VLDQ-NEXT:    retq
1120 ; AVX512VLBW-LABEL: store_v2i32_v2i32:
1121 ; AVX512VLBW:       ## %bb.0:
1122 ; AVX512VLBW-NEXT:    vptestnmd %xmm0, %xmm0, %k0
1123 ; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0
1124 ; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k1
1125 ; AVX512VLBW-NEXT:    vmovdqu32 %xmm1, (%rdi) {%k1}
1126 ; AVX512VLBW-NEXT:    retq
1127   %mask = icmp eq <2 x i32> %trigger, zeroinitializer
1128   call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %val, <2 x i32>* %addr, i32 4, <2 x i1> %mask)
1129   ret void
1132 define void @store_v4i32_v4i32(<4 x i32> %trigger, <4 x i32>* %addr, <4 x i32> %val) {
1133 ; SSE2-LABEL: store_v4i32_v4i32:
1134 ; SSE2:       ## %bb.0:
1135 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1136 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
1137 ; SSE2-NEXT:    movmskps %xmm2, %eax
1138 ; SSE2-NEXT:    testb $1, %al
1139 ; SSE2-NEXT:    jne LBB11_1
1140 ; SSE2-NEXT:  ## %bb.2: ## %else
1141 ; SSE2-NEXT:    testb $2, %al
1142 ; SSE2-NEXT:    jne LBB11_3
1143 ; SSE2-NEXT:  LBB11_4: ## %else2
1144 ; SSE2-NEXT:    testb $4, %al
1145 ; SSE2-NEXT:    jne LBB11_5
1146 ; SSE2-NEXT:  LBB11_6: ## %else4
1147 ; SSE2-NEXT:    testb $8, %al
1148 ; SSE2-NEXT:    jne LBB11_7
1149 ; SSE2-NEXT:  LBB11_8: ## %else6
1150 ; SSE2-NEXT:    retq
1151 ; SSE2-NEXT:  LBB11_1: ## %cond.store
1152 ; SSE2-NEXT:    movd %xmm1, (%rdi)
1153 ; SSE2-NEXT:    testb $2, %al
1154 ; SSE2-NEXT:    je LBB11_4
1155 ; SSE2-NEXT:  LBB11_3: ## %cond.store1
1156 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
1157 ; SSE2-NEXT:    movd %xmm0, 4(%rdi)
1158 ; SSE2-NEXT:    testb $4, %al
1159 ; SSE2-NEXT:    je LBB11_6
1160 ; SSE2-NEXT:  LBB11_5: ## %cond.store3
1161 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
1162 ; SSE2-NEXT:    movd %xmm0, 8(%rdi)
1163 ; SSE2-NEXT:    testb $8, %al
1164 ; SSE2-NEXT:    je LBB11_8
1165 ; SSE2-NEXT:  LBB11_7: ## %cond.store5
1166 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[3,1,2,3]
1167 ; SSE2-NEXT:    movd %xmm0, 12(%rdi)
1168 ; SSE2-NEXT:    retq
1170 ; SSE4-LABEL: store_v4i32_v4i32:
1171 ; SSE4:       ## %bb.0:
1172 ; SSE4-NEXT:    pxor %xmm2, %xmm2
1173 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm2
1174 ; SSE4-NEXT:    movmskps %xmm2, %eax
1175 ; SSE4-NEXT:    testb $1, %al
1176 ; SSE4-NEXT:    jne LBB11_1
1177 ; SSE4-NEXT:  ## %bb.2: ## %else
1178 ; SSE4-NEXT:    testb $2, %al
1179 ; SSE4-NEXT:    jne LBB11_3
1180 ; SSE4-NEXT:  LBB11_4: ## %else2
1181 ; SSE4-NEXT:    testb $4, %al
1182 ; SSE4-NEXT:    jne LBB11_5
1183 ; SSE4-NEXT:  LBB11_6: ## %else4
1184 ; SSE4-NEXT:    testb $8, %al
1185 ; SSE4-NEXT:    jne LBB11_7
1186 ; SSE4-NEXT:  LBB11_8: ## %else6
1187 ; SSE4-NEXT:    retq
1188 ; SSE4-NEXT:  LBB11_1: ## %cond.store
1189 ; SSE4-NEXT:    movss %xmm1, (%rdi)
1190 ; SSE4-NEXT:    testb $2, %al
1191 ; SSE4-NEXT:    je LBB11_4
1192 ; SSE4-NEXT:  LBB11_3: ## %cond.store1
1193 ; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)
1194 ; SSE4-NEXT:    testb $4, %al
1195 ; SSE4-NEXT:    je LBB11_6
1196 ; SSE4-NEXT:  LBB11_5: ## %cond.store3
1197 ; SSE4-NEXT:    extractps $2, %xmm1, 8(%rdi)
1198 ; SSE4-NEXT:    testb $8, %al
1199 ; SSE4-NEXT:    je LBB11_8
1200 ; SSE4-NEXT:  LBB11_7: ## %cond.store5
1201 ; SSE4-NEXT:    extractps $3, %xmm1, 12(%rdi)
1202 ; SSE4-NEXT:    retq
1204 ; AVX1-LABEL: store_v4i32_v4i32:
1205 ; AVX1:       ## %bb.0:
1206 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1207 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
1208 ; AVX1-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)
1209 ; AVX1-NEXT:    retq
1211 ; AVX2-LABEL: store_v4i32_v4i32:
1212 ; AVX2:       ## %bb.0:
1213 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1214 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
1215 ; AVX2-NEXT:    vpmaskmovd %xmm1, %xmm0, (%rdi)
1216 ; AVX2-NEXT:    retq
1218 ; AVX512F-LABEL: store_v4i32_v4i32:
1219 ; AVX512F:       ## %bb.0:
1220 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
1221 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
1222 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
1223 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
1224 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
1225 ; AVX512F-NEXT:    vmovdqu32 %zmm1, (%rdi) {%k1}
1226 ; AVX512F-NEXT:    vzeroupper
1227 ; AVX512F-NEXT:    retq
1229 ; AVX512VL-LABEL: store_v4i32_v4i32:
1230 ; AVX512VL:       ## %bb.0:
1231 ; AVX512VL-NEXT:    vptestnmd %xmm0, %xmm0, %k1
1232 ; AVX512VL-NEXT:    vmovdqu32 %xmm1, (%rdi) {%k1}
1233 ; AVX512VL-NEXT:    retq
1234   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
1235   call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> %val, <4 x i32>* %addr, i32 4, <4 x i1> %mask)
1236   ret void
1239 define void @store_v8i32_v8i32(<8 x i32> %trigger, <8 x i32>* %addr, <8 x i32> %val) {
1240 ; SSE2-LABEL: store_v8i32_v8i32:
1241 ; SSE2:       ## %bb.0:
1242 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1243 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm1
1244 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
1245 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
1246 ; SSE2-NEXT:    packsswb %xmm0, %xmm0
1247 ; SSE2-NEXT:    pmovmskb %xmm0, %eax
1248 ; SSE2-NEXT:    testb $1, %al
1249 ; SSE2-NEXT:    jne LBB12_1
1250 ; SSE2-NEXT:  ## %bb.2: ## %else
1251 ; SSE2-NEXT:    testb $2, %al
1252 ; SSE2-NEXT:    jne LBB12_3
1253 ; SSE2-NEXT:  LBB12_4: ## %else2
1254 ; SSE2-NEXT:    testb $4, %al
1255 ; SSE2-NEXT:    jne LBB12_5
1256 ; SSE2-NEXT:  LBB12_6: ## %else4
1257 ; SSE2-NEXT:    testb $8, %al
1258 ; SSE2-NEXT:    jne LBB12_7
1259 ; SSE2-NEXT:  LBB12_8: ## %else6
1260 ; SSE2-NEXT:    testb $16, %al
1261 ; SSE2-NEXT:    jne LBB12_9
1262 ; SSE2-NEXT:  LBB12_10: ## %else8
1263 ; SSE2-NEXT:    testb $32, %al
1264 ; SSE2-NEXT:    jne LBB12_11
1265 ; SSE2-NEXT:  LBB12_12: ## %else10
1266 ; SSE2-NEXT:    testb $64, %al
1267 ; SSE2-NEXT:    jne LBB12_13
1268 ; SSE2-NEXT:  LBB12_14: ## %else12
1269 ; SSE2-NEXT:    testb $-128, %al
1270 ; SSE2-NEXT:    jne LBB12_15
1271 ; SSE2-NEXT:  LBB12_16: ## %else14
1272 ; SSE2-NEXT:    retq
1273 ; SSE2-NEXT:  LBB12_1: ## %cond.store
1274 ; SSE2-NEXT:    movd %xmm2, (%rdi)
1275 ; SSE2-NEXT:    testb $2, %al
1276 ; SSE2-NEXT:    je LBB12_4
1277 ; SSE2-NEXT:  LBB12_3: ## %cond.store1
1278 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,2,3]
1279 ; SSE2-NEXT:    movd %xmm0, 4(%rdi)
1280 ; SSE2-NEXT:    testb $4, %al
1281 ; SSE2-NEXT:    je LBB12_6
1282 ; SSE2-NEXT:  LBB12_5: ## %cond.store3
1283 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
1284 ; SSE2-NEXT:    movd %xmm0, 8(%rdi)
1285 ; SSE2-NEXT:    testb $8, %al
1286 ; SSE2-NEXT:    je LBB12_8
1287 ; SSE2-NEXT:  LBB12_7: ## %cond.store5
1288 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[3,1,2,3]
1289 ; SSE2-NEXT:    movd %xmm0, 12(%rdi)
1290 ; SSE2-NEXT:    testb $16, %al
1291 ; SSE2-NEXT:    je LBB12_10
1292 ; SSE2-NEXT:  LBB12_9: ## %cond.store7
1293 ; SSE2-NEXT:    movd %xmm3, 16(%rdi)
1294 ; SSE2-NEXT:    testb $32, %al
1295 ; SSE2-NEXT:    je LBB12_12
1296 ; SSE2-NEXT:  LBB12_11: ## %cond.store9
1297 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,2,3]
1298 ; SSE2-NEXT:    movd %xmm0, 20(%rdi)
1299 ; SSE2-NEXT:    testb $64, %al
1300 ; SSE2-NEXT:    je LBB12_14
1301 ; SSE2-NEXT:  LBB12_13: ## %cond.store11
1302 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[2,3,0,1]
1303 ; SSE2-NEXT:    movd %xmm0, 24(%rdi)
1304 ; SSE2-NEXT:    testb $-128, %al
1305 ; SSE2-NEXT:    je LBB12_16
1306 ; SSE2-NEXT:  LBB12_15: ## %cond.store13
1307 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[3,1,2,3]
1308 ; SSE2-NEXT:    movd %xmm0, 28(%rdi)
1309 ; SSE2-NEXT:    retq
1311 ; SSE4-LABEL: store_v8i32_v8i32:
1312 ; SSE4:       ## %bb.0:
1313 ; SSE4-NEXT:    pxor %xmm4, %xmm4
1314 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm1
1315 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm0
1316 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
1317 ; SSE4-NEXT:    packsswb %xmm0, %xmm0
1318 ; SSE4-NEXT:    pmovmskb %xmm0, %eax
1319 ; SSE4-NEXT:    testb $1, %al
1320 ; SSE4-NEXT:    jne LBB12_1
1321 ; SSE4-NEXT:  ## %bb.2: ## %else
1322 ; SSE4-NEXT:    testb $2, %al
1323 ; SSE4-NEXT:    jne LBB12_3
1324 ; SSE4-NEXT:  LBB12_4: ## %else2
1325 ; SSE4-NEXT:    testb $4, %al
1326 ; SSE4-NEXT:    jne LBB12_5
1327 ; SSE4-NEXT:  LBB12_6: ## %else4
1328 ; SSE4-NEXT:    testb $8, %al
1329 ; SSE4-NEXT:    jne LBB12_7
1330 ; SSE4-NEXT:  LBB12_8: ## %else6
1331 ; SSE4-NEXT:    testb $16, %al
1332 ; SSE4-NEXT:    jne LBB12_9
1333 ; SSE4-NEXT:  LBB12_10: ## %else8
1334 ; SSE4-NEXT:    testb $32, %al
1335 ; SSE4-NEXT:    jne LBB12_11
1336 ; SSE4-NEXT:  LBB12_12: ## %else10
1337 ; SSE4-NEXT:    testb $64, %al
1338 ; SSE4-NEXT:    jne LBB12_13
1339 ; SSE4-NEXT:  LBB12_14: ## %else12
1340 ; SSE4-NEXT:    testb $-128, %al
1341 ; SSE4-NEXT:    jne LBB12_15
1342 ; SSE4-NEXT:  LBB12_16: ## %else14
1343 ; SSE4-NEXT:    retq
1344 ; SSE4-NEXT:  LBB12_1: ## %cond.store
1345 ; SSE4-NEXT:    movss %xmm2, (%rdi)
1346 ; SSE4-NEXT:    testb $2, %al
1347 ; SSE4-NEXT:    je LBB12_4
1348 ; SSE4-NEXT:  LBB12_3: ## %cond.store1
1349 ; SSE4-NEXT:    extractps $1, %xmm2, 4(%rdi)
1350 ; SSE4-NEXT:    testb $4, %al
1351 ; SSE4-NEXT:    je LBB12_6
1352 ; SSE4-NEXT:  LBB12_5: ## %cond.store3
1353 ; SSE4-NEXT:    extractps $2, %xmm2, 8(%rdi)
1354 ; SSE4-NEXT:    testb $8, %al
1355 ; SSE4-NEXT:    je LBB12_8
1356 ; SSE4-NEXT:  LBB12_7: ## %cond.store5
1357 ; SSE4-NEXT:    extractps $3, %xmm2, 12(%rdi)
1358 ; SSE4-NEXT:    testb $16, %al
1359 ; SSE4-NEXT:    je LBB12_10
1360 ; SSE4-NEXT:  LBB12_9: ## %cond.store7
1361 ; SSE4-NEXT:    movss %xmm3, 16(%rdi)
1362 ; SSE4-NEXT:    testb $32, %al
1363 ; SSE4-NEXT:    je LBB12_12
1364 ; SSE4-NEXT:  LBB12_11: ## %cond.store9
1365 ; SSE4-NEXT:    extractps $1, %xmm3, 20(%rdi)
1366 ; SSE4-NEXT:    testb $64, %al
1367 ; SSE4-NEXT:    je LBB12_14
1368 ; SSE4-NEXT:  LBB12_13: ## %cond.store11
1369 ; SSE4-NEXT:    extractps $2, %xmm3, 24(%rdi)
1370 ; SSE4-NEXT:    testb $-128, %al
1371 ; SSE4-NEXT:    je LBB12_16
1372 ; SSE4-NEXT:  LBB12_15: ## %cond.store13
1373 ; SSE4-NEXT:    extractps $3, %xmm3, 28(%rdi)
1374 ; SSE4-NEXT:    retq
1376 ; AVX1-LABEL: store_v8i32_v8i32:
1377 ; AVX1:       ## %bb.0:
1378 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1379 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1380 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
1381 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
1382 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1383 ; AVX1-NEXT:    vmaskmovps %ymm1, %ymm0, (%rdi)
1384 ; AVX1-NEXT:    vzeroupper
1385 ; AVX1-NEXT:    retq
1387 ; AVX2-LABEL: store_v8i32_v8i32:
1388 ; AVX2:       ## %bb.0:
1389 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1390 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm0, %ymm0
1391 ; AVX2-NEXT:    vpmaskmovd %ymm1, %ymm0, (%rdi)
1392 ; AVX2-NEXT:    vzeroupper
1393 ; AVX2-NEXT:    retq
1395 ; AVX512F-LABEL: store_v8i32_v8i32:
1396 ; AVX512F:       ## %bb.0:
1397 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
1398 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
1399 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
1400 ; AVX512F-NEXT:    kshiftlw $8, %k0, %k0
1401 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
1402 ; AVX512F-NEXT:    vmovdqu32 %zmm1, (%rdi) {%k1}
1403 ; AVX512F-NEXT:    vzeroupper
1404 ; AVX512F-NEXT:    retq
1406 ; AVX512VL-LABEL: store_v8i32_v8i32:
1407 ; AVX512VL:       ## %bb.0:
1408 ; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k1
1409 ; AVX512VL-NEXT:    vmovdqu32 %ymm1, (%rdi) {%k1}
1410 ; AVX512VL-NEXT:    vzeroupper
1411 ; AVX512VL-NEXT:    retq
1412   %mask = icmp eq <8 x i32> %trigger, zeroinitializer
1413   call void @llvm.masked.store.v8i32.p0v8i32(<8 x i32> %val, <8 x i32>* %addr, i32 4, <8 x i1> %mask)
1414   ret void
1418 ; vXi16
1421 define void @store_v8i16_v8i16(<8 x i16> %trigger, <8 x i16>* %addr, <8 x i16> %val) {
1422 ; SSE2-LABEL: store_v8i16_v8i16:
1423 ; SSE2:       ## %bb.0:
1424 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1425 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm2
1426 ; SSE2-NEXT:    packsswb %xmm0, %xmm2
1427 ; SSE2-NEXT:    pmovmskb %xmm2, %eax
1428 ; SSE2-NEXT:    testb $1, %al
1429 ; SSE2-NEXT:    jne LBB13_1
1430 ; SSE2-NEXT:  ## %bb.2: ## %else
1431 ; SSE2-NEXT:    testb $2, %al
1432 ; SSE2-NEXT:    jne LBB13_3
1433 ; SSE2-NEXT:  LBB13_4: ## %else2
1434 ; SSE2-NEXT:    testb $4, %al
1435 ; SSE2-NEXT:    jne LBB13_5
1436 ; SSE2-NEXT:  LBB13_6: ## %else4
1437 ; SSE2-NEXT:    testb $8, %al
1438 ; SSE2-NEXT:    jne LBB13_7
1439 ; SSE2-NEXT:  LBB13_8: ## %else6
1440 ; SSE2-NEXT:    testb $16, %al
1441 ; SSE2-NEXT:    jne LBB13_9
1442 ; SSE2-NEXT:  LBB13_10: ## %else8
1443 ; SSE2-NEXT:    testb $32, %al
1444 ; SSE2-NEXT:    jne LBB13_11
1445 ; SSE2-NEXT:  LBB13_12: ## %else10
1446 ; SSE2-NEXT:    testb $64, %al
1447 ; SSE2-NEXT:    jne LBB13_13
1448 ; SSE2-NEXT:  LBB13_14: ## %else12
1449 ; SSE2-NEXT:    testb $-128, %al
1450 ; SSE2-NEXT:    jne LBB13_15
1451 ; SSE2-NEXT:  LBB13_16: ## %else14
1452 ; SSE2-NEXT:    retq
1453 ; SSE2-NEXT:  LBB13_1: ## %cond.store
1454 ; SSE2-NEXT:    movd %xmm1, %ecx
1455 ; SSE2-NEXT:    movw %cx, (%rdi)
1456 ; SSE2-NEXT:    testb $2, %al
1457 ; SSE2-NEXT:    je LBB13_4
1458 ; SSE2-NEXT:  LBB13_3: ## %cond.store1
1459 ; SSE2-NEXT:    pextrw $1, %xmm1, %ecx
1460 ; SSE2-NEXT:    movw %cx, 2(%rdi)
1461 ; SSE2-NEXT:    testb $4, %al
1462 ; SSE2-NEXT:    je LBB13_6
1463 ; SSE2-NEXT:  LBB13_5: ## %cond.store3
1464 ; SSE2-NEXT:    pextrw $2, %xmm1, %ecx
1465 ; SSE2-NEXT:    movw %cx, 4(%rdi)
1466 ; SSE2-NEXT:    testb $8, %al
1467 ; SSE2-NEXT:    je LBB13_8
1468 ; SSE2-NEXT:  LBB13_7: ## %cond.store5
1469 ; SSE2-NEXT:    pextrw $3, %xmm1, %ecx
1470 ; SSE2-NEXT:    movw %cx, 6(%rdi)
1471 ; SSE2-NEXT:    testb $16, %al
1472 ; SSE2-NEXT:    je LBB13_10
1473 ; SSE2-NEXT:  LBB13_9: ## %cond.store7
1474 ; SSE2-NEXT:    pextrw $4, %xmm1, %ecx
1475 ; SSE2-NEXT:    movw %cx, 8(%rdi)
1476 ; SSE2-NEXT:    testb $32, %al
1477 ; SSE2-NEXT:    je LBB13_12
1478 ; SSE2-NEXT:  LBB13_11: ## %cond.store9
1479 ; SSE2-NEXT:    pextrw $5, %xmm1, %ecx
1480 ; SSE2-NEXT:    movw %cx, 10(%rdi)
1481 ; SSE2-NEXT:    testb $64, %al
1482 ; SSE2-NEXT:    je LBB13_14
1483 ; SSE2-NEXT:  LBB13_13: ## %cond.store11
1484 ; SSE2-NEXT:    pextrw $6, %xmm1, %ecx
1485 ; SSE2-NEXT:    movw %cx, 12(%rdi)
1486 ; SSE2-NEXT:    testb $-128, %al
1487 ; SSE2-NEXT:    je LBB13_16
1488 ; SSE2-NEXT:  LBB13_15: ## %cond.store13
1489 ; SSE2-NEXT:    pextrw $7, %xmm1, %eax
1490 ; SSE2-NEXT:    movw %ax, 14(%rdi)
1491 ; SSE2-NEXT:    retq
1493 ; SSE4-LABEL: store_v8i16_v8i16:
1494 ; SSE4:       ## %bb.0:
1495 ; SSE4-NEXT:    pxor %xmm2, %xmm2
1496 ; SSE4-NEXT:    pcmpeqw %xmm0, %xmm2
1497 ; SSE4-NEXT:    packsswb %xmm0, %xmm2
1498 ; SSE4-NEXT:    pmovmskb %xmm2, %eax
1499 ; SSE4-NEXT:    testb $1, %al
1500 ; SSE4-NEXT:    jne LBB13_1
1501 ; SSE4-NEXT:  ## %bb.2: ## %else
1502 ; SSE4-NEXT:    testb $2, %al
1503 ; SSE4-NEXT:    jne LBB13_3
1504 ; SSE4-NEXT:  LBB13_4: ## %else2
1505 ; SSE4-NEXT:    testb $4, %al
1506 ; SSE4-NEXT:    jne LBB13_5
1507 ; SSE4-NEXT:  LBB13_6: ## %else4
1508 ; SSE4-NEXT:    testb $8, %al
1509 ; SSE4-NEXT:    jne LBB13_7
1510 ; SSE4-NEXT:  LBB13_8: ## %else6
1511 ; SSE4-NEXT:    testb $16, %al
1512 ; SSE4-NEXT:    jne LBB13_9
1513 ; SSE4-NEXT:  LBB13_10: ## %else8
1514 ; SSE4-NEXT:    testb $32, %al
1515 ; SSE4-NEXT:    jne LBB13_11
1516 ; SSE4-NEXT:  LBB13_12: ## %else10
1517 ; SSE4-NEXT:    testb $64, %al
1518 ; SSE4-NEXT:    jne LBB13_13
1519 ; SSE4-NEXT:  LBB13_14: ## %else12
1520 ; SSE4-NEXT:    testb $-128, %al
1521 ; SSE4-NEXT:    jne LBB13_15
1522 ; SSE4-NEXT:  LBB13_16: ## %else14
1523 ; SSE4-NEXT:    retq
1524 ; SSE4-NEXT:  LBB13_1: ## %cond.store
1525 ; SSE4-NEXT:    pextrw $0, %xmm1, (%rdi)
1526 ; SSE4-NEXT:    testb $2, %al
1527 ; SSE4-NEXT:    je LBB13_4
1528 ; SSE4-NEXT:  LBB13_3: ## %cond.store1
1529 ; SSE4-NEXT:    pextrw $1, %xmm1, 2(%rdi)
1530 ; SSE4-NEXT:    testb $4, %al
1531 ; SSE4-NEXT:    je LBB13_6
1532 ; SSE4-NEXT:  LBB13_5: ## %cond.store3
1533 ; SSE4-NEXT:    pextrw $2, %xmm1, 4(%rdi)
1534 ; SSE4-NEXT:    testb $8, %al
1535 ; SSE4-NEXT:    je LBB13_8
1536 ; SSE4-NEXT:  LBB13_7: ## %cond.store5
1537 ; SSE4-NEXT:    pextrw $3, %xmm1, 6(%rdi)
1538 ; SSE4-NEXT:    testb $16, %al
1539 ; SSE4-NEXT:    je LBB13_10
1540 ; SSE4-NEXT:  LBB13_9: ## %cond.store7
1541 ; SSE4-NEXT:    pextrw $4, %xmm1, 8(%rdi)
1542 ; SSE4-NEXT:    testb $32, %al
1543 ; SSE4-NEXT:    je LBB13_12
1544 ; SSE4-NEXT:  LBB13_11: ## %cond.store9
1545 ; SSE4-NEXT:    pextrw $5, %xmm1, 10(%rdi)
1546 ; SSE4-NEXT:    testb $64, %al
1547 ; SSE4-NEXT:    je LBB13_14
1548 ; SSE4-NEXT:  LBB13_13: ## %cond.store11
1549 ; SSE4-NEXT:    pextrw $6, %xmm1, 12(%rdi)
1550 ; SSE4-NEXT:    testb $-128, %al
1551 ; SSE4-NEXT:    je LBB13_16
1552 ; SSE4-NEXT:  LBB13_15: ## %cond.store13
1553 ; SSE4-NEXT:    pextrw $7, %xmm1, 14(%rdi)
1554 ; SSE4-NEXT:    retq
1556 ; AVX1OR2-LABEL: store_v8i16_v8i16:
1557 ; AVX1OR2:       ## %bb.0:
1558 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1559 ; AVX1OR2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1560 ; AVX1OR2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
1561 ; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax
1562 ; AVX1OR2-NEXT:    testb $1, %al
1563 ; AVX1OR2-NEXT:    jne LBB13_1
1564 ; AVX1OR2-NEXT:  ## %bb.2: ## %else
1565 ; AVX1OR2-NEXT:    testb $2, %al
1566 ; AVX1OR2-NEXT:    jne LBB13_3
1567 ; AVX1OR2-NEXT:  LBB13_4: ## %else2
1568 ; AVX1OR2-NEXT:    testb $4, %al
1569 ; AVX1OR2-NEXT:    jne LBB13_5
1570 ; AVX1OR2-NEXT:  LBB13_6: ## %else4
1571 ; AVX1OR2-NEXT:    testb $8, %al
1572 ; AVX1OR2-NEXT:    jne LBB13_7
1573 ; AVX1OR2-NEXT:  LBB13_8: ## %else6
1574 ; AVX1OR2-NEXT:    testb $16, %al
1575 ; AVX1OR2-NEXT:    jne LBB13_9
1576 ; AVX1OR2-NEXT:  LBB13_10: ## %else8
1577 ; AVX1OR2-NEXT:    testb $32, %al
1578 ; AVX1OR2-NEXT:    jne LBB13_11
1579 ; AVX1OR2-NEXT:  LBB13_12: ## %else10
1580 ; AVX1OR2-NEXT:    testb $64, %al
1581 ; AVX1OR2-NEXT:    jne LBB13_13
1582 ; AVX1OR2-NEXT:  LBB13_14: ## %else12
1583 ; AVX1OR2-NEXT:    testb $-128, %al
1584 ; AVX1OR2-NEXT:    jne LBB13_15
1585 ; AVX1OR2-NEXT:  LBB13_16: ## %else14
1586 ; AVX1OR2-NEXT:    retq
1587 ; AVX1OR2-NEXT:  LBB13_1: ## %cond.store
1588 ; AVX1OR2-NEXT:    vpextrw $0, %xmm1, (%rdi)
1589 ; AVX1OR2-NEXT:    testb $2, %al
1590 ; AVX1OR2-NEXT:    je LBB13_4
1591 ; AVX1OR2-NEXT:  LBB13_3: ## %cond.store1
1592 ; AVX1OR2-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
1593 ; AVX1OR2-NEXT:    testb $4, %al
1594 ; AVX1OR2-NEXT:    je LBB13_6
1595 ; AVX1OR2-NEXT:  LBB13_5: ## %cond.store3
1596 ; AVX1OR2-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
1597 ; AVX1OR2-NEXT:    testb $8, %al
1598 ; AVX1OR2-NEXT:    je LBB13_8
1599 ; AVX1OR2-NEXT:  LBB13_7: ## %cond.store5
1600 ; AVX1OR2-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
1601 ; AVX1OR2-NEXT:    testb $16, %al
1602 ; AVX1OR2-NEXT:    je LBB13_10
1603 ; AVX1OR2-NEXT:  LBB13_9: ## %cond.store7
1604 ; AVX1OR2-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
1605 ; AVX1OR2-NEXT:    testb $32, %al
1606 ; AVX1OR2-NEXT:    je LBB13_12
1607 ; AVX1OR2-NEXT:  LBB13_11: ## %cond.store9
1608 ; AVX1OR2-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
1609 ; AVX1OR2-NEXT:    testb $64, %al
1610 ; AVX1OR2-NEXT:    je LBB13_14
1611 ; AVX1OR2-NEXT:  LBB13_13: ## %cond.store11
1612 ; AVX1OR2-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
1613 ; AVX1OR2-NEXT:    testb $-128, %al
1614 ; AVX1OR2-NEXT:    je LBB13_16
1615 ; AVX1OR2-NEXT:  LBB13_15: ## %cond.store13
1616 ; AVX1OR2-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
1617 ; AVX1OR2-NEXT:    retq
1619 ; AVX512F-LABEL: store_v8i16_v8i16:
1620 ; AVX512F:       ## %bb.0:
1621 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1622 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1623 ; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0
1624 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k0
1625 ; AVX512F-NEXT:    kmovw %k0, %eax
1626 ; AVX512F-NEXT:    testb $1, %al
1627 ; AVX512F-NEXT:    jne LBB13_1
1628 ; AVX512F-NEXT:  ## %bb.2: ## %else
1629 ; AVX512F-NEXT:    testb $2, %al
1630 ; AVX512F-NEXT:    jne LBB13_3
1631 ; AVX512F-NEXT:  LBB13_4: ## %else2
1632 ; AVX512F-NEXT:    testb $4, %al
1633 ; AVX512F-NEXT:    jne LBB13_5
1634 ; AVX512F-NEXT:  LBB13_6: ## %else4
1635 ; AVX512F-NEXT:    testb $8, %al
1636 ; AVX512F-NEXT:    jne LBB13_7
1637 ; AVX512F-NEXT:  LBB13_8: ## %else6
1638 ; AVX512F-NEXT:    testb $16, %al
1639 ; AVX512F-NEXT:    jne LBB13_9
1640 ; AVX512F-NEXT:  LBB13_10: ## %else8
1641 ; AVX512F-NEXT:    testb $32, %al
1642 ; AVX512F-NEXT:    jne LBB13_11
1643 ; AVX512F-NEXT:  LBB13_12: ## %else10
1644 ; AVX512F-NEXT:    testb $64, %al
1645 ; AVX512F-NEXT:    jne LBB13_13
1646 ; AVX512F-NEXT:  LBB13_14: ## %else12
1647 ; AVX512F-NEXT:    testb $-128, %al
1648 ; AVX512F-NEXT:    jne LBB13_15
1649 ; AVX512F-NEXT:  LBB13_16: ## %else14
1650 ; AVX512F-NEXT:    vzeroupper
1651 ; AVX512F-NEXT:    retq
1652 ; AVX512F-NEXT:  LBB13_1: ## %cond.store
1653 ; AVX512F-NEXT:    vpextrw $0, %xmm1, (%rdi)
1654 ; AVX512F-NEXT:    testb $2, %al
1655 ; AVX512F-NEXT:    je LBB13_4
1656 ; AVX512F-NEXT:  LBB13_3: ## %cond.store1
1657 ; AVX512F-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
1658 ; AVX512F-NEXT:    testb $4, %al
1659 ; AVX512F-NEXT:    je LBB13_6
1660 ; AVX512F-NEXT:  LBB13_5: ## %cond.store3
1661 ; AVX512F-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
1662 ; AVX512F-NEXT:    testb $8, %al
1663 ; AVX512F-NEXT:    je LBB13_8
1664 ; AVX512F-NEXT:  LBB13_7: ## %cond.store5
1665 ; AVX512F-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
1666 ; AVX512F-NEXT:    testb $16, %al
1667 ; AVX512F-NEXT:    je LBB13_10
1668 ; AVX512F-NEXT:  LBB13_9: ## %cond.store7
1669 ; AVX512F-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
1670 ; AVX512F-NEXT:    testb $32, %al
1671 ; AVX512F-NEXT:    je LBB13_12
1672 ; AVX512F-NEXT:  LBB13_11: ## %cond.store9
1673 ; AVX512F-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
1674 ; AVX512F-NEXT:    testb $64, %al
1675 ; AVX512F-NEXT:    je LBB13_14
1676 ; AVX512F-NEXT:  LBB13_13: ## %cond.store11
1677 ; AVX512F-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
1678 ; AVX512F-NEXT:    testb $-128, %al
1679 ; AVX512F-NEXT:    je LBB13_16
1680 ; AVX512F-NEXT:  LBB13_15: ## %cond.store13
1681 ; AVX512F-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
1682 ; AVX512F-NEXT:    vzeroupper
1683 ; AVX512F-NEXT:    retq
1685 ; AVX512VLDQ-LABEL: store_v8i16_v8i16:
1686 ; AVX512VLDQ:       ## %bb.0:
1687 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1688 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1689 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm0, %ymm0
1690 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k0
1691 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
1692 ; AVX512VLDQ-NEXT:    testb $1, %al
1693 ; AVX512VLDQ-NEXT:    jne LBB13_1
1694 ; AVX512VLDQ-NEXT:  ## %bb.2: ## %else
1695 ; AVX512VLDQ-NEXT:    testb $2, %al
1696 ; AVX512VLDQ-NEXT:    jne LBB13_3
1697 ; AVX512VLDQ-NEXT:  LBB13_4: ## %else2
1698 ; AVX512VLDQ-NEXT:    testb $4, %al
1699 ; AVX512VLDQ-NEXT:    jne LBB13_5
1700 ; AVX512VLDQ-NEXT:  LBB13_6: ## %else4
1701 ; AVX512VLDQ-NEXT:    testb $8, %al
1702 ; AVX512VLDQ-NEXT:    jne LBB13_7
1703 ; AVX512VLDQ-NEXT:  LBB13_8: ## %else6
1704 ; AVX512VLDQ-NEXT:    testb $16, %al
1705 ; AVX512VLDQ-NEXT:    jne LBB13_9
1706 ; AVX512VLDQ-NEXT:  LBB13_10: ## %else8
1707 ; AVX512VLDQ-NEXT:    testb $32, %al
1708 ; AVX512VLDQ-NEXT:    jne LBB13_11
1709 ; AVX512VLDQ-NEXT:  LBB13_12: ## %else10
1710 ; AVX512VLDQ-NEXT:    testb $64, %al
1711 ; AVX512VLDQ-NEXT:    jne LBB13_13
1712 ; AVX512VLDQ-NEXT:  LBB13_14: ## %else12
1713 ; AVX512VLDQ-NEXT:    testb $-128, %al
1714 ; AVX512VLDQ-NEXT:    jne LBB13_15
1715 ; AVX512VLDQ-NEXT:  LBB13_16: ## %else14
1716 ; AVX512VLDQ-NEXT:    vzeroupper
1717 ; AVX512VLDQ-NEXT:    retq
1718 ; AVX512VLDQ-NEXT:  LBB13_1: ## %cond.store
1719 ; AVX512VLDQ-NEXT:    vpextrw $0, %xmm1, (%rdi)
1720 ; AVX512VLDQ-NEXT:    testb $2, %al
1721 ; AVX512VLDQ-NEXT:    je LBB13_4
1722 ; AVX512VLDQ-NEXT:  LBB13_3: ## %cond.store1
1723 ; AVX512VLDQ-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
1724 ; AVX512VLDQ-NEXT:    testb $4, %al
1725 ; AVX512VLDQ-NEXT:    je LBB13_6
1726 ; AVX512VLDQ-NEXT:  LBB13_5: ## %cond.store3
1727 ; AVX512VLDQ-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
1728 ; AVX512VLDQ-NEXT:    testb $8, %al
1729 ; AVX512VLDQ-NEXT:    je LBB13_8
1730 ; AVX512VLDQ-NEXT:  LBB13_7: ## %cond.store5
1731 ; AVX512VLDQ-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
1732 ; AVX512VLDQ-NEXT:    testb $16, %al
1733 ; AVX512VLDQ-NEXT:    je LBB13_10
1734 ; AVX512VLDQ-NEXT:  LBB13_9: ## %cond.store7
1735 ; AVX512VLDQ-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
1736 ; AVX512VLDQ-NEXT:    testb $32, %al
1737 ; AVX512VLDQ-NEXT:    je LBB13_12
1738 ; AVX512VLDQ-NEXT:  LBB13_11: ## %cond.store9
1739 ; AVX512VLDQ-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
1740 ; AVX512VLDQ-NEXT:    testb $64, %al
1741 ; AVX512VLDQ-NEXT:    je LBB13_14
1742 ; AVX512VLDQ-NEXT:  LBB13_13: ## %cond.store11
1743 ; AVX512VLDQ-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
1744 ; AVX512VLDQ-NEXT:    testb $-128, %al
1745 ; AVX512VLDQ-NEXT:    je LBB13_16
1746 ; AVX512VLDQ-NEXT:  LBB13_15: ## %cond.store13
1747 ; AVX512VLDQ-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
1748 ; AVX512VLDQ-NEXT:    vzeroupper
1749 ; AVX512VLDQ-NEXT:    retq
1751 ; AVX512VLBW-LABEL: store_v8i16_v8i16:
1752 ; AVX512VLBW:       ## %bb.0:
1753 ; AVX512VLBW-NEXT:    vptestnmw %xmm0, %xmm0, %k1
1754 ; AVX512VLBW-NEXT:    vmovdqu16 %xmm1, (%rdi) {%k1}
1755 ; AVX512VLBW-NEXT:    retq
1756   %mask = icmp eq <8 x i16> %trigger, zeroinitializer
1757   call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> %val, <8 x i16>* %addr, i32 4, <8 x i1> %mask)
1758   ret void
1761 define void @store_v16i16_v16i16(<16 x i16> %trigger, <16 x i16>* %addr, <16 x i16> %val) {
1762 ; SSE2-LABEL: store_v16i16_v16i16:
1763 ; SSE2:       ## %bb.0:
1764 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1765 ; SSE2-NEXT:    pcmpeqw %xmm4, %xmm1
1766 ; SSE2-NEXT:    pcmpeqw %xmm4, %xmm0
1767 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
1768 ; SSE2-NEXT:    pmovmskb %xmm0, %eax
1769 ; SSE2-NEXT:    testb $1, %al
1770 ; SSE2-NEXT:    jne LBB14_1
1771 ; SSE2-NEXT:  ## %bb.2: ## %else
1772 ; SSE2-NEXT:    testb $2, %al
1773 ; SSE2-NEXT:    jne LBB14_3
1774 ; SSE2-NEXT:  LBB14_4: ## %else2
1775 ; SSE2-NEXT:    testb $4, %al
1776 ; SSE2-NEXT:    jne LBB14_5
1777 ; SSE2-NEXT:  LBB14_6: ## %else4
1778 ; SSE2-NEXT:    testb $8, %al
1779 ; SSE2-NEXT:    jne LBB14_7
1780 ; SSE2-NEXT:  LBB14_8: ## %else6
1781 ; SSE2-NEXT:    testb $16, %al
1782 ; SSE2-NEXT:    jne LBB14_9
1783 ; SSE2-NEXT:  LBB14_10: ## %else8
1784 ; SSE2-NEXT:    testb $32, %al
1785 ; SSE2-NEXT:    jne LBB14_11
1786 ; SSE2-NEXT:  LBB14_12: ## %else10
1787 ; SSE2-NEXT:    testb $64, %al
1788 ; SSE2-NEXT:    jne LBB14_13
1789 ; SSE2-NEXT:  LBB14_14: ## %else12
1790 ; SSE2-NEXT:    testb $-128, %al
1791 ; SSE2-NEXT:    jne LBB14_15
1792 ; SSE2-NEXT:  LBB14_16: ## %else14
1793 ; SSE2-NEXT:    testl $256, %eax ## imm = 0x100
1794 ; SSE2-NEXT:    jne LBB14_17
1795 ; SSE2-NEXT:  LBB14_18: ## %else16
1796 ; SSE2-NEXT:    testl $512, %eax ## imm = 0x200
1797 ; SSE2-NEXT:    jne LBB14_19
1798 ; SSE2-NEXT:  LBB14_20: ## %else18
1799 ; SSE2-NEXT:    testl $1024, %eax ## imm = 0x400
1800 ; SSE2-NEXT:    jne LBB14_21
1801 ; SSE2-NEXT:  LBB14_22: ## %else20
1802 ; SSE2-NEXT:    testl $2048, %eax ## imm = 0x800
1803 ; SSE2-NEXT:    jne LBB14_23
1804 ; SSE2-NEXT:  LBB14_24: ## %else22
1805 ; SSE2-NEXT:    testl $4096, %eax ## imm = 0x1000
1806 ; SSE2-NEXT:    jne LBB14_25
1807 ; SSE2-NEXT:  LBB14_26: ## %else24
1808 ; SSE2-NEXT:    testl $8192, %eax ## imm = 0x2000
1809 ; SSE2-NEXT:    jne LBB14_27
1810 ; SSE2-NEXT:  LBB14_28: ## %else26
1811 ; SSE2-NEXT:    testl $16384, %eax ## imm = 0x4000
1812 ; SSE2-NEXT:    jne LBB14_29
1813 ; SSE2-NEXT:  LBB14_30: ## %else28
1814 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
1815 ; SSE2-NEXT:    jne LBB14_31
1816 ; SSE2-NEXT:  LBB14_32: ## %else30
1817 ; SSE2-NEXT:    retq
1818 ; SSE2-NEXT:  LBB14_1: ## %cond.store
1819 ; SSE2-NEXT:    movd %xmm2, %ecx
1820 ; SSE2-NEXT:    movw %cx, (%rdi)
1821 ; SSE2-NEXT:    testb $2, %al
1822 ; SSE2-NEXT:    je LBB14_4
1823 ; SSE2-NEXT:  LBB14_3: ## %cond.store1
1824 ; SSE2-NEXT:    pextrw $1, %xmm2, %ecx
1825 ; SSE2-NEXT:    movw %cx, 2(%rdi)
1826 ; SSE2-NEXT:    testb $4, %al
1827 ; SSE2-NEXT:    je LBB14_6
1828 ; SSE2-NEXT:  LBB14_5: ## %cond.store3
1829 ; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
1830 ; SSE2-NEXT:    movw %cx, 4(%rdi)
1831 ; SSE2-NEXT:    testb $8, %al
1832 ; SSE2-NEXT:    je LBB14_8
1833 ; SSE2-NEXT:  LBB14_7: ## %cond.store5
1834 ; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
1835 ; SSE2-NEXT:    movw %cx, 6(%rdi)
1836 ; SSE2-NEXT:    testb $16, %al
1837 ; SSE2-NEXT:    je LBB14_10
1838 ; SSE2-NEXT:  LBB14_9: ## %cond.store7
1839 ; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
1840 ; SSE2-NEXT:    movw %cx, 8(%rdi)
1841 ; SSE2-NEXT:    testb $32, %al
1842 ; SSE2-NEXT:    je LBB14_12
1843 ; SSE2-NEXT:  LBB14_11: ## %cond.store9
1844 ; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
1845 ; SSE2-NEXT:    movw %cx, 10(%rdi)
1846 ; SSE2-NEXT:    testb $64, %al
1847 ; SSE2-NEXT:    je LBB14_14
1848 ; SSE2-NEXT:  LBB14_13: ## %cond.store11
1849 ; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
1850 ; SSE2-NEXT:    movw %cx, 12(%rdi)
1851 ; SSE2-NEXT:    testb $-128, %al
1852 ; SSE2-NEXT:    je LBB14_16
1853 ; SSE2-NEXT:  LBB14_15: ## %cond.store13
1854 ; SSE2-NEXT:    pextrw $7, %xmm2, %ecx
1855 ; SSE2-NEXT:    movw %cx, 14(%rdi)
1856 ; SSE2-NEXT:    testl $256, %eax ## imm = 0x100
1857 ; SSE2-NEXT:    je LBB14_18
1858 ; SSE2-NEXT:  LBB14_17: ## %cond.store15
1859 ; SSE2-NEXT:    movd %xmm3, %ecx
1860 ; SSE2-NEXT:    movw %cx, 16(%rdi)
1861 ; SSE2-NEXT:    testl $512, %eax ## imm = 0x200
1862 ; SSE2-NEXT:    je LBB14_20
1863 ; SSE2-NEXT:  LBB14_19: ## %cond.store17
1864 ; SSE2-NEXT:    pextrw $1, %xmm3, %ecx
1865 ; SSE2-NEXT:    movw %cx, 18(%rdi)
1866 ; SSE2-NEXT:    testl $1024, %eax ## imm = 0x400
1867 ; SSE2-NEXT:    je LBB14_22
1868 ; SSE2-NEXT:  LBB14_21: ## %cond.store19
1869 ; SSE2-NEXT:    pextrw $2, %xmm3, %ecx
1870 ; SSE2-NEXT:    movw %cx, 20(%rdi)
1871 ; SSE2-NEXT:    testl $2048, %eax ## imm = 0x800
1872 ; SSE2-NEXT:    je LBB14_24
1873 ; SSE2-NEXT:  LBB14_23: ## %cond.store21
1874 ; SSE2-NEXT:    pextrw $3, %xmm3, %ecx
1875 ; SSE2-NEXT:    movw %cx, 22(%rdi)
1876 ; SSE2-NEXT:    testl $4096, %eax ## imm = 0x1000
1877 ; SSE2-NEXT:    je LBB14_26
1878 ; SSE2-NEXT:  LBB14_25: ## %cond.store23
1879 ; SSE2-NEXT:    pextrw $4, %xmm3, %ecx
1880 ; SSE2-NEXT:    movw %cx, 24(%rdi)
1881 ; SSE2-NEXT:    testl $8192, %eax ## imm = 0x2000
1882 ; SSE2-NEXT:    je LBB14_28
1883 ; SSE2-NEXT:  LBB14_27: ## %cond.store25
1884 ; SSE2-NEXT:    pextrw $5, %xmm3, %ecx
1885 ; SSE2-NEXT:    movw %cx, 26(%rdi)
1886 ; SSE2-NEXT:    testl $16384, %eax ## imm = 0x4000
1887 ; SSE2-NEXT:    je LBB14_30
1888 ; SSE2-NEXT:  LBB14_29: ## %cond.store27
1889 ; SSE2-NEXT:    pextrw $6, %xmm3, %ecx
1890 ; SSE2-NEXT:    movw %cx, 28(%rdi)
1891 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
1892 ; SSE2-NEXT:    je LBB14_32
1893 ; SSE2-NEXT:  LBB14_31: ## %cond.store29
1894 ; SSE2-NEXT:    pextrw $7, %xmm3, %eax
1895 ; SSE2-NEXT:    movw %ax, 30(%rdi)
1896 ; SSE2-NEXT:    retq
1898 ; SSE4-LABEL: store_v16i16_v16i16:
1899 ; SSE4:       ## %bb.0:
1900 ; SSE4-NEXT:    pxor %xmm4, %xmm4
1901 ; SSE4-NEXT:    pcmpeqw %xmm4, %xmm1
1902 ; SSE4-NEXT:    pcmpeqw %xmm4, %xmm0
1903 ; SSE4-NEXT:    packsswb %xmm1, %xmm0
1904 ; SSE4-NEXT:    pmovmskb %xmm0, %eax
1905 ; SSE4-NEXT:    testb $1, %al
1906 ; SSE4-NEXT:    jne LBB14_1
1907 ; SSE4-NEXT:  ## %bb.2: ## %else
1908 ; SSE4-NEXT:    testb $2, %al
1909 ; SSE4-NEXT:    jne LBB14_3
1910 ; SSE4-NEXT:  LBB14_4: ## %else2
1911 ; SSE4-NEXT:    testb $4, %al
1912 ; SSE4-NEXT:    jne LBB14_5
1913 ; SSE4-NEXT:  LBB14_6: ## %else4
1914 ; SSE4-NEXT:    testb $8, %al
1915 ; SSE4-NEXT:    jne LBB14_7
1916 ; SSE4-NEXT:  LBB14_8: ## %else6
1917 ; SSE4-NEXT:    testb $16, %al
1918 ; SSE4-NEXT:    jne LBB14_9
1919 ; SSE4-NEXT:  LBB14_10: ## %else8
1920 ; SSE4-NEXT:    testb $32, %al
1921 ; SSE4-NEXT:    jne LBB14_11
1922 ; SSE4-NEXT:  LBB14_12: ## %else10
1923 ; SSE4-NEXT:    testb $64, %al
1924 ; SSE4-NEXT:    jne LBB14_13
1925 ; SSE4-NEXT:  LBB14_14: ## %else12
1926 ; SSE4-NEXT:    testb $-128, %al
1927 ; SSE4-NEXT:    jne LBB14_15
1928 ; SSE4-NEXT:  LBB14_16: ## %else14
1929 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
1930 ; SSE4-NEXT:    jne LBB14_17
1931 ; SSE4-NEXT:  LBB14_18: ## %else16
1932 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
1933 ; SSE4-NEXT:    jne LBB14_19
1934 ; SSE4-NEXT:  LBB14_20: ## %else18
1935 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
1936 ; SSE4-NEXT:    jne LBB14_21
1937 ; SSE4-NEXT:  LBB14_22: ## %else20
1938 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
1939 ; SSE4-NEXT:    jne LBB14_23
1940 ; SSE4-NEXT:  LBB14_24: ## %else22
1941 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
1942 ; SSE4-NEXT:    jne LBB14_25
1943 ; SSE4-NEXT:  LBB14_26: ## %else24
1944 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
1945 ; SSE4-NEXT:    jne LBB14_27
1946 ; SSE4-NEXT:  LBB14_28: ## %else26
1947 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
1948 ; SSE4-NEXT:    jne LBB14_29
1949 ; SSE4-NEXT:  LBB14_30: ## %else28
1950 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
1951 ; SSE4-NEXT:    jne LBB14_31
1952 ; SSE4-NEXT:  LBB14_32: ## %else30
1953 ; SSE4-NEXT:    retq
1954 ; SSE4-NEXT:  LBB14_1: ## %cond.store
1955 ; SSE4-NEXT:    pextrw $0, %xmm2, (%rdi)
1956 ; SSE4-NEXT:    testb $2, %al
1957 ; SSE4-NEXT:    je LBB14_4
1958 ; SSE4-NEXT:  LBB14_3: ## %cond.store1
1959 ; SSE4-NEXT:    pextrw $1, %xmm2, 2(%rdi)
1960 ; SSE4-NEXT:    testb $4, %al
1961 ; SSE4-NEXT:    je LBB14_6
1962 ; SSE4-NEXT:  LBB14_5: ## %cond.store3
1963 ; SSE4-NEXT:    pextrw $2, %xmm2, 4(%rdi)
1964 ; SSE4-NEXT:    testb $8, %al
1965 ; SSE4-NEXT:    je LBB14_8
1966 ; SSE4-NEXT:  LBB14_7: ## %cond.store5
1967 ; SSE4-NEXT:    pextrw $3, %xmm2, 6(%rdi)
1968 ; SSE4-NEXT:    testb $16, %al
1969 ; SSE4-NEXT:    je LBB14_10
1970 ; SSE4-NEXT:  LBB14_9: ## %cond.store7
1971 ; SSE4-NEXT:    pextrw $4, %xmm2, 8(%rdi)
1972 ; SSE4-NEXT:    testb $32, %al
1973 ; SSE4-NEXT:    je LBB14_12
1974 ; SSE4-NEXT:  LBB14_11: ## %cond.store9
1975 ; SSE4-NEXT:    pextrw $5, %xmm2, 10(%rdi)
1976 ; SSE4-NEXT:    testb $64, %al
1977 ; SSE4-NEXT:    je LBB14_14
1978 ; SSE4-NEXT:  LBB14_13: ## %cond.store11
1979 ; SSE4-NEXT:    pextrw $6, %xmm2, 12(%rdi)
1980 ; SSE4-NEXT:    testb $-128, %al
1981 ; SSE4-NEXT:    je LBB14_16
1982 ; SSE4-NEXT:  LBB14_15: ## %cond.store13
1983 ; SSE4-NEXT:    pextrw $7, %xmm2, 14(%rdi)
1984 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
1985 ; SSE4-NEXT:    je LBB14_18
1986 ; SSE4-NEXT:  LBB14_17: ## %cond.store15
1987 ; SSE4-NEXT:    pextrw $0, %xmm3, 16(%rdi)
1988 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
1989 ; SSE4-NEXT:    je LBB14_20
1990 ; SSE4-NEXT:  LBB14_19: ## %cond.store17
1991 ; SSE4-NEXT:    pextrw $1, %xmm3, 18(%rdi)
1992 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
1993 ; SSE4-NEXT:    je LBB14_22
1994 ; SSE4-NEXT:  LBB14_21: ## %cond.store19
1995 ; SSE4-NEXT:    pextrw $2, %xmm3, 20(%rdi)
1996 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
1997 ; SSE4-NEXT:    je LBB14_24
1998 ; SSE4-NEXT:  LBB14_23: ## %cond.store21
1999 ; SSE4-NEXT:    pextrw $3, %xmm3, 22(%rdi)
2000 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
2001 ; SSE4-NEXT:    je LBB14_26
2002 ; SSE4-NEXT:  LBB14_25: ## %cond.store23
2003 ; SSE4-NEXT:    pextrw $4, %xmm3, 24(%rdi)
2004 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
2005 ; SSE4-NEXT:    je LBB14_28
2006 ; SSE4-NEXT:  LBB14_27: ## %cond.store25
2007 ; SSE4-NEXT:    pextrw $5, %xmm3, 26(%rdi)
2008 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
2009 ; SSE4-NEXT:    je LBB14_30
2010 ; SSE4-NEXT:  LBB14_29: ## %cond.store27
2011 ; SSE4-NEXT:    pextrw $6, %xmm3, 28(%rdi)
2012 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
2013 ; SSE4-NEXT:    je LBB14_32
2014 ; SSE4-NEXT:  LBB14_31: ## %cond.store29
2015 ; SSE4-NEXT:    pextrw $7, %xmm3, 30(%rdi)
2016 ; SSE4-NEXT:    retq
2018 ; AVX1-LABEL: store_v16i16_v16i16:
2019 ; AVX1:       ## %bb.0:
2020 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2021 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
2022 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm2, %xmm2
2023 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0
2024 ; AVX1-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2025 ; AVX1-NEXT:    vpmovmskb %xmm0, %eax
2026 ; AVX1-NEXT:    testb $1, %al
2027 ; AVX1-NEXT:    jne LBB14_1
2028 ; AVX1-NEXT:  ## %bb.2: ## %else
2029 ; AVX1-NEXT:    testb $2, %al
2030 ; AVX1-NEXT:    jne LBB14_3
2031 ; AVX1-NEXT:  LBB14_4: ## %else2
2032 ; AVX1-NEXT:    testb $4, %al
2033 ; AVX1-NEXT:    jne LBB14_5
2034 ; AVX1-NEXT:  LBB14_6: ## %else4
2035 ; AVX1-NEXT:    testb $8, %al
2036 ; AVX1-NEXT:    jne LBB14_7
2037 ; AVX1-NEXT:  LBB14_8: ## %else6
2038 ; AVX1-NEXT:    testb $16, %al
2039 ; AVX1-NEXT:    jne LBB14_9
2040 ; AVX1-NEXT:  LBB14_10: ## %else8
2041 ; AVX1-NEXT:    testb $32, %al
2042 ; AVX1-NEXT:    jne LBB14_11
2043 ; AVX1-NEXT:  LBB14_12: ## %else10
2044 ; AVX1-NEXT:    testb $64, %al
2045 ; AVX1-NEXT:    jne LBB14_13
2046 ; AVX1-NEXT:  LBB14_14: ## %else12
2047 ; AVX1-NEXT:    testb $-128, %al
2048 ; AVX1-NEXT:    je LBB14_16
2049 ; AVX1-NEXT:  LBB14_15: ## %cond.store13
2050 ; AVX1-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
2051 ; AVX1-NEXT:  LBB14_16: ## %else14
2052 ; AVX1-NEXT:    testl $256, %eax ## imm = 0x100
2053 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
2054 ; AVX1-NEXT:    jne LBB14_17
2055 ; AVX1-NEXT:  ## %bb.18: ## %else16
2056 ; AVX1-NEXT:    testl $512, %eax ## imm = 0x200
2057 ; AVX1-NEXT:    jne LBB14_19
2058 ; AVX1-NEXT:  LBB14_20: ## %else18
2059 ; AVX1-NEXT:    testl $1024, %eax ## imm = 0x400
2060 ; AVX1-NEXT:    jne LBB14_21
2061 ; AVX1-NEXT:  LBB14_22: ## %else20
2062 ; AVX1-NEXT:    testl $2048, %eax ## imm = 0x800
2063 ; AVX1-NEXT:    jne LBB14_23
2064 ; AVX1-NEXT:  LBB14_24: ## %else22
2065 ; AVX1-NEXT:    testl $4096, %eax ## imm = 0x1000
2066 ; AVX1-NEXT:    jne LBB14_25
2067 ; AVX1-NEXT:  LBB14_26: ## %else24
2068 ; AVX1-NEXT:    testl $8192, %eax ## imm = 0x2000
2069 ; AVX1-NEXT:    jne LBB14_27
2070 ; AVX1-NEXT:  LBB14_28: ## %else26
2071 ; AVX1-NEXT:    testl $16384, %eax ## imm = 0x4000
2072 ; AVX1-NEXT:    jne LBB14_29
2073 ; AVX1-NEXT:  LBB14_30: ## %else28
2074 ; AVX1-NEXT:    testl $32768, %eax ## imm = 0x8000
2075 ; AVX1-NEXT:    jne LBB14_31
2076 ; AVX1-NEXT:  LBB14_32: ## %else30
2077 ; AVX1-NEXT:    vzeroupper
2078 ; AVX1-NEXT:    retq
2079 ; AVX1-NEXT:  LBB14_1: ## %cond.store
2080 ; AVX1-NEXT:    vpextrw $0, %xmm1, (%rdi)
2081 ; AVX1-NEXT:    testb $2, %al
2082 ; AVX1-NEXT:    je LBB14_4
2083 ; AVX1-NEXT:  LBB14_3: ## %cond.store1
2084 ; AVX1-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
2085 ; AVX1-NEXT:    testb $4, %al
2086 ; AVX1-NEXT:    je LBB14_6
2087 ; AVX1-NEXT:  LBB14_5: ## %cond.store3
2088 ; AVX1-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
2089 ; AVX1-NEXT:    testb $8, %al
2090 ; AVX1-NEXT:    je LBB14_8
2091 ; AVX1-NEXT:  LBB14_7: ## %cond.store5
2092 ; AVX1-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
2093 ; AVX1-NEXT:    testb $16, %al
2094 ; AVX1-NEXT:    je LBB14_10
2095 ; AVX1-NEXT:  LBB14_9: ## %cond.store7
2096 ; AVX1-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
2097 ; AVX1-NEXT:    testb $32, %al
2098 ; AVX1-NEXT:    je LBB14_12
2099 ; AVX1-NEXT:  LBB14_11: ## %cond.store9
2100 ; AVX1-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
2101 ; AVX1-NEXT:    testb $64, %al
2102 ; AVX1-NEXT:    je LBB14_14
2103 ; AVX1-NEXT:  LBB14_13: ## %cond.store11
2104 ; AVX1-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
2105 ; AVX1-NEXT:    testb $-128, %al
2106 ; AVX1-NEXT:    jne LBB14_15
2107 ; AVX1-NEXT:    jmp LBB14_16
2108 ; AVX1-NEXT:  LBB14_17: ## %cond.store15
2109 ; AVX1-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2110 ; AVX1-NEXT:    testl $512, %eax ## imm = 0x200
2111 ; AVX1-NEXT:    je LBB14_20
2112 ; AVX1-NEXT:  LBB14_19: ## %cond.store17
2113 ; AVX1-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2114 ; AVX1-NEXT:    testl $1024, %eax ## imm = 0x400
2115 ; AVX1-NEXT:    je LBB14_22
2116 ; AVX1-NEXT:  LBB14_21: ## %cond.store19
2117 ; AVX1-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2118 ; AVX1-NEXT:    testl $2048, %eax ## imm = 0x800
2119 ; AVX1-NEXT:    je LBB14_24
2120 ; AVX1-NEXT:  LBB14_23: ## %cond.store21
2121 ; AVX1-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2122 ; AVX1-NEXT:    testl $4096, %eax ## imm = 0x1000
2123 ; AVX1-NEXT:    je LBB14_26
2124 ; AVX1-NEXT:  LBB14_25: ## %cond.store23
2125 ; AVX1-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2126 ; AVX1-NEXT:    testl $8192, %eax ## imm = 0x2000
2127 ; AVX1-NEXT:    je LBB14_28
2128 ; AVX1-NEXT:  LBB14_27: ## %cond.store25
2129 ; AVX1-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2130 ; AVX1-NEXT:    testl $16384, %eax ## imm = 0x4000
2131 ; AVX1-NEXT:    je LBB14_30
2132 ; AVX1-NEXT:  LBB14_29: ## %cond.store27
2133 ; AVX1-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2134 ; AVX1-NEXT:    testl $32768, %eax ## imm = 0x8000
2135 ; AVX1-NEXT:    je LBB14_32
2136 ; AVX1-NEXT:  LBB14_31: ## %cond.store29
2137 ; AVX1-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2138 ; AVX1-NEXT:    vzeroupper
2139 ; AVX1-NEXT:    retq
2141 ; AVX2-LABEL: store_v16i16_v16i16:
2142 ; AVX2:       ## %bb.0:
2143 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2144 ; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
2145 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
2146 ; AVX2-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
2147 ; AVX2-NEXT:    vpmovmskb %xmm0, %eax
2148 ; AVX2-NEXT:    testb $1, %al
2149 ; AVX2-NEXT:    jne LBB14_1
2150 ; AVX2-NEXT:  ## %bb.2: ## %else
2151 ; AVX2-NEXT:    testb $2, %al
2152 ; AVX2-NEXT:    jne LBB14_3
2153 ; AVX2-NEXT:  LBB14_4: ## %else2
2154 ; AVX2-NEXT:    testb $4, %al
2155 ; AVX2-NEXT:    jne LBB14_5
2156 ; AVX2-NEXT:  LBB14_6: ## %else4
2157 ; AVX2-NEXT:    testb $8, %al
2158 ; AVX2-NEXT:    jne LBB14_7
2159 ; AVX2-NEXT:  LBB14_8: ## %else6
2160 ; AVX2-NEXT:    testb $16, %al
2161 ; AVX2-NEXT:    jne LBB14_9
2162 ; AVX2-NEXT:  LBB14_10: ## %else8
2163 ; AVX2-NEXT:    testb $32, %al
2164 ; AVX2-NEXT:    jne LBB14_11
2165 ; AVX2-NEXT:  LBB14_12: ## %else10
2166 ; AVX2-NEXT:    testb $64, %al
2167 ; AVX2-NEXT:    jne LBB14_13
2168 ; AVX2-NEXT:  LBB14_14: ## %else12
2169 ; AVX2-NEXT:    testb $-128, %al
2170 ; AVX2-NEXT:    je LBB14_16
2171 ; AVX2-NEXT:  LBB14_15: ## %cond.store13
2172 ; AVX2-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
2173 ; AVX2-NEXT:  LBB14_16: ## %else14
2174 ; AVX2-NEXT:    testl $256, %eax ## imm = 0x100
2175 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm0
2176 ; AVX2-NEXT:    jne LBB14_17
2177 ; AVX2-NEXT:  ## %bb.18: ## %else16
2178 ; AVX2-NEXT:    testl $512, %eax ## imm = 0x200
2179 ; AVX2-NEXT:    jne LBB14_19
2180 ; AVX2-NEXT:  LBB14_20: ## %else18
2181 ; AVX2-NEXT:    testl $1024, %eax ## imm = 0x400
2182 ; AVX2-NEXT:    jne LBB14_21
2183 ; AVX2-NEXT:  LBB14_22: ## %else20
2184 ; AVX2-NEXT:    testl $2048, %eax ## imm = 0x800
2185 ; AVX2-NEXT:    jne LBB14_23
2186 ; AVX2-NEXT:  LBB14_24: ## %else22
2187 ; AVX2-NEXT:    testl $4096, %eax ## imm = 0x1000
2188 ; AVX2-NEXT:    jne LBB14_25
2189 ; AVX2-NEXT:  LBB14_26: ## %else24
2190 ; AVX2-NEXT:    testl $8192, %eax ## imm = 0x2000
2191 ; AVX2-NEXT:    jne LBB14_27
2192 ; AVX2-NEXT:  LBB14_28: ## %else26
2193 ; AVX2-NEXT:    testl $16384, %eax ## imm = 0x4000
2194 ; AVX2-NEXT:    jne LBB14_29
2195 ; AVX2-NEXT:  LBB14_30: ## %else28
2196 ; AVX2-NEXT:    testl $32768, %eax ## imm = 0x8000
2197 ; AVX2-NEXT:    jne LBB14_31
2198 ; AVX2-NEXT:  LBB14_32: ## %else30
2199 ; AVX2-NEXT:    vzeroupper
2200 ; AVX2-NEXT:    retq
2201 ; AVX2-NEXT:  LBB14_1: ## %cond.store
2202 ; AVX2-NEXT:    vpextrw $0, %xmm1, (%rdi)
2203 ; AVX2-NEXT:    testb $2, %al
2204 ; AVX2-NEXT:    je LBB14_4
2205 ; AVX2-NEXT:  LBB14_3: ## %cond.store1
2206 ; AVX2-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
2207 ; AVX2-NEXT:    testb $4, %al
2208 ; AVX2-NEXT:    je LBB14_6
2209 ; AVX2-NEXT:  LBB14_5: ## %cond.store3
2210 ; AVX2-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
2211 ; AVX2-NEXT:    testb $8, %al
2212 ; AVX2-NEXT:    je LBB14_8
2213 ; AVX2-NEXT:  LBB14_7: ## %cond.store5
2214 ; AVX2-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
2215 ; AVX2-NEXT:    testb $16, %al
2216 ; AVX2-NEXT:    je LBB14_10
2217 ; AVX2-NEXT:  LBB14_9: ## %cond.store7
2218 ; AVX2-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
2219 ; AVX2-NEXT:    testb $32, %al
2220 ; AVX2-NEXT:    je LBB14_12
2221 ; AVX2-NEXT:  LBB14_11: ## %cond.store9
2222 ; AVX2-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
2223 ; AVX2-NEXT:    testb $64, %al
2224 ; AVX2-NEXT:    je LBB14_14
2225 ; AVX2-NEXT:  LBB14_13: ## %cond.store11
2226 ; AVX2-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
2227 ; AVX2-NEXT:    testb $-128, %al
2228 ; AVX2-NEXT:    jne LBB14_15
2229 ; AVX2-NEXT:    jmp LBB14_16
2230 ; AVX2-NEXT:  LBB14_17: ## %cond.store15
2231 ; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2232 ; AVX2-NEXT:    testl $512, %eax ## imm = 0x200
2233 ; AVX2-NEXT:    je LBB14_20
2234 ; AVX2-NEXT:  LBB14_19: ## %cond.store17
2235 ; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2236 ; AVX2-NEXT:    testl $1024, %eax ## imm = 0x400
2237 ; AVX2-NEXT:    je LBB14_22
2238 ; AVX2-NEXT:  LBB14_21: ## %cond.store19
2239 ; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2240 ; AVX2-NEXT:    testl $2048, %eax ## imm = 0x800
2241 ; AVX2-NEXT:    je LBB14_24
2242 ; AVX2-NEXT:  LBB14_23: ## %cond.store21
2243 ; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2244 ; AVX2-NEXT:    testl $4096, %eax ## imm = 0x1000
2245 ; AVX2-NEXT:    je LBB14_26
2246 ; AVX2-NEXT:  LBB14_25: ## %cond.store23
2247 ; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2248 ; AVX2-NEXT:    testl $8192, %eax ## imm = 0x2000
2249 ; AVX2-NEXT:    je LBB14_28
2250 ; AVX2-NEXT:  LBB14_27: ## %cond.store25
2251 ; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2252 ; AVX2-NEXT:    testl $16384, %eax ## imm = 0x4000
2253 ; AVX2-NEXT:    je LBB14_30
2254 ; AVX2-NEXT:  LBB14_29: ## %cond.store27
2255 ; AVX2-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2256 ; AVX2-NEXT:    testl $32768, %eax ## imm = 0x8000
2257 ; AVX2-NEXT:    je LBB14_32
2258 ; AVX2-NEXT:  LBB14_31: ## %cond.store29
2259 ; AVX2-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2260 ; AVX2-NEXT:    vzeroupper
2261 ; AVX2-NEXT:    retq
2263 ; AVX512F-LABEL: store_v16i16_v16i16:
2264 ; AVX512F:       ## %bb.0:
2265 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2266 ; AVX512F-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
2267 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
2268 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
2269 ; AVX512F-NEXT:    kmovw %k0, %eax
2270 ; AVX512F-NEXT:    testb $1, %al
2271 ; AVX512F-NEXT:    jne LBB14_1
2272 ; AVX512F-NEXT:  ## %bb.2: ## %else
2273 ; AVX512F-NEXT:    testb $2, %al
2274 ; AVX512F-NEXT:    jne LBB14_3
2275 ; AVX512F-NEXT:  LBB14_4: ## %else2
2276 ; AVX512F-NEXT:    testb $4, %al
2277 ; AVX512F-NEXT:    jne LBB14_5
2278 ; AVX512F-NEXT:  LBB14_6: ## %else4
2279 ; AVX512F-NEXT:    testb $8, %al
2280 ; AVX512F-NEXT:    jne LBB14_7
2281 ; AVX512F-NEXT:  LBB14_8: ## %else6
2282 ; AVX512F-NEXT:    testb $16, %al
2283 ; AVX512F-NEXT:    jne LBB14_9
2284 ; AVX512F-NEXT:  LBB14_10: ## %else8
2285 ; AVX512F-NEXT:    testb $32, %al
2286 ; AVX512F-NEXT:    jne LBB14_11
2287 ; AVX512F-NEXT:  LBB14_12: ## %else10
2288 ; AVX512F-NEXT:    testb $64, %al
2289 ; AVX512F-NEXT:    jne LBB14_13
2290 ; AVX512F-NEXT:  LBB14_14: ## %else12
2291 ; AVX512F-NEXT:    testb $-128, %al
2292 ; AVX512F-NEXT:    je LBB14_16
2293 ; AVX512F-NEXT:  LBB14_15: ## %cond.store13
2294 ; AVX512F-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
2295 ; AVX512F-NEXT:  LBB14_16: ## %else14
2296 ; AVX512F-NEXT:    testl $256, %eax ## imm = 0x100
2297 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
2298 ; AVX512F-NEXT:    jne LBB14_17
2299 ; AVX512F-NEXT:  ## %bb.18: ## %else16
2300 ; AVX512F-NEXT:    testl $512, %eax ## imm = 0x200
2301 ; AVX512F-NEXT:    jne LBB14_19
2302 ; AVX512F-NEXT:  LBB14_20: ## %else18
2303 ; AVX512F-NEXT:    testl $1024, %eax ## imm = 0x400
2304 ; AVX512F-NEXT:    jne LBB14_21
2305 ; AVX512F-NEXT:  LBB14_22: ## %else20
2306 ; AVX512F-NEXT:    testl $2048, %eax ## imm = 0x800
2307 ; AVX512F-NEXT:    jne LBB14_23
2308 ; AVX512F-NEXT:  LBB14_24: ## %else22
2309 ; AVX512F-NEXT:    testl $4096, %eax ## imm = 0x1000
2310 ; AVX512F-NEXT:    jne LBB14_25
2311 ; AVX512F-NEXT:  LBB14_26: ## %else24
2312 ; AVX512F-NEXT:    testl $8192, %eax ## imm = 0x2000
2313 ; AVX512F-NEXT:    jne LBB14_27
2314 ; AVX512F-NEXT:  LBB14_28: ## %else26
2315 ; AVX512F-NEXT:    testl $16384, %eax ## imm = 0x4000
2316 ; AVX512F-NEXT:    jne LBB14_29
2317 ; AVX512F-NEXT:  LBB14_30: ## %else28
2318 ; AVX512F-NEXT:    testl $32768, %eax ## imm = 0x8000
2319 ; AVX512F-NEXT:    jne LBB14_31
2320 ; AVX512F-NEXT:  LBB14_32: ## %else30
2321 ; AVX512F-NEXT:    vzeroupper
2322 ; AVX512F-NEXT:    retq
2323 ; AVX512F-NEXT:  LBB14_1: ## %cond.store
2324 ; AVX512F-NEXT:    vpextrw $0, %xmm1, (%rdi)
2325 ; AVX512F-NEXT:    testb $2, %al
2326 ; AVX512F-NEXT:    je LBB14_4
2327 ; AVX512F-NEXT:  LBB14_3: ## %cond.store1
2328 ; AVX512F-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
2329 ; AVX512F-NEXT:    testb $4, %al
2330 ; AVX512F-NEXT:    je LBB14_6
2331 ; AVX512F-NEXT:  LBB14_5: ## %cond.store3
2332 ; AVX512F-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
2333 ; AVX512F-NEXT:    testb $8, %al
2334 ; AVX512F-NEXT:    je LBB14_8
2335 ; AVX512F-NEXT:  LBB14_7: ## %cond.store5
2336 ; AVX512F-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
2337 ; AVX512F-NEXT:    testb $16, %al
2338 ; AVX512F-NEXT:    je LBB14_10
2339 ; AVX512F-NEXT:  LBB14_9: ## %cond.store7
2340 ; AVX512F-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
2341 ; AVX512F-NEXT:    testb $32, %al
2342 ; AVX512F-NEXT:    je LBB14_12
2343 ; AVX512F-NEXT:  LBB14_11: ## %cond.store9
2344 ; AVX512F-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
2345 ; AVX512F-NEXT:    testb $64, %al
2346 ; AVX512F-NEXT:    je LBB14_14
2347 ; AVX512F-NEXT:  LBB14_13: ## %cond.store11
2348 ; AVX512F-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
2349 ; AVX512F-NEXT:    testb $-128, %al
2350 ; AVX512F-NEXT:    jne LBB14_15
2351 ; AVX512F-NEXT:    jmp LBB14_16
2352 ; AVX512F-NEXT:  LBB14_17: ## %cond.store15
2353 ; AVX512F-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2354 ; AVX512F-NEXT:    testl $512, %eax ## imm = 0x200
2355 ; AVX512F-NEXT:    je LBB14_20
2356 ; AVX512F-NEXT:  LBB14_19: ## %cond.store17
2357 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2358 ; AVX512F-NEXT:    testl $1024, %eax ## imm = 0x400
2359 ; AVX512F-NEXT:    je LBB14_22
2360 ; AVX512F-NEXT:  LBB14_21: ## %cond.store19
2361 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2362 ; AVX512F-NEXT:    testl $2048, %eax ## imm = 0x800
2363 ; AVX512F-NEXT:    je LBB14_24
2364 ; AVX512F-NEXT:  LBB14_23: ## %cond.store21
2365 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2366 ; AVX512F-NEXT:    testl $4096, %eax ## imm = 0x1000
2367 ; AVX512F-NEXT:    je LBB14_26
2368 ; AVX512F-NEXT:  LBB14_25: ## %cond.store23
2369 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2370 ; AVX512F-NEXT:    testl $8192, %eax ## imm = 0x2000
2371 ; AVX512F-NEXT:    je LBB14_28
2372 ; AVX512F-NEXT:  LBB14_27: ## %cond.store25
2373 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2374 ; AVX512F-NEXT:    testl $16384, %eax ## imm = 0x4000
2375 ; AVX512F-NEXT:    je LBB14_30
2376 ; AVX512F-NEXT:  LBB14_29: ## %cond.store27
2377 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2378 ; AVX512F-NEXT:    testl $32768, %eax ## imm = 0x8000
2379 ; AVX512F-NEXT:    je LBB14_32
2380 ; AVX512F-NEXT:  LBB14_31: ## %cond.store29
2381 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2382 ; AVX512F-NEXT:    vzeroupper
2383 ; AVX512F-NEXT:    retq
2385 ; AVX512VLDQ-LABEL: store_v16i16_v16i16:
2386 ; AVX512VLDQ:       ## %bb.0:
2387 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2388 ; AVX512VLDQ-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
2389 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm0, %zmm0
2390 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm0, %k0
2391 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
2392 ; AVX512VLDQ-NEXT:    testb $1, %al
2393 ; AVX512VLDQ-NEXT:    jne LBB14_1
2394 ; AVX512VLDQ-NEXT:  ## %bb.2: ## %else
2395 ; AVX512VLDQ-NEXT:    testb $2, %al
2396 ; AVX512VLDQ-NEXT:    jne LBB14_3
2397 ; AVX512VLDQ-NEXT:  LBB14_4: ## %else2
2398 ; AVX512VLDQ-NEXT:    testb $4, %al
2399 ; AVX512VLDQ-NEXT:    jne LBB14_5
2400 ; AVX512VLDQ-NEXT:  LBB14_6: ## %else4
2401 ; AVX512VLDQ-NEXT:    testb $8, %al
2402 ; AVX512VLDQ-NEXT:    jne LBB14_7
2403 ; AVX512VLDQ-NEXT:  LBB14_8: ## %else6
2404 ; AVX512VLDQ-NEXT:    testb $16, %al
2405 ; AVX512VLDQ-NEXT:    jne LBB14_9
2406 ; AVX512VLDQ-NEXT:  LBB14_10: ## %else8
2407 ; AVX512VLDQ-NEXT:    testb $32, %al
2408 ; AVX512VLDQ-NEXT:    jne LBB14_11
2409 ; AVX512VLDQ-NEXT:  LBB14_12: ## %else10
2410 ; AVX512VLDQ-NEXT:    testb $64, %al
2411 ; AVX512VLDQ-NEXT:    jne LBB14_13
2412 ; AVX512VLDQ-NEXT:  LBB14_14: ## %else12
2413 ; AVX512VLDQ-NEXT:    testb $-128, %al
2414 ; AVX512VLDQ-NEXT:    je LBB14_16
2415 ; AVX512VLDQ-NEXT:  LBB14_15: ## %cond.store13
2416 ; AVX512VLDQ-NEXT:    vpextrw $7, %xmm1, 14(%rdi)
2417 ; AVX512VLDQ-NEXT:  LBB14_16: ## %else14
2418 ; AVX512VLDQ-NEXT:    testl $256, %eax ## imm = 0x100
2419 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
2420 ; AVX512VLDQ-NEXT:    jne LBB14_17
2421 ; AVX512VLDQ-NEXT:  ## %bb.18: ## %else16
2422 ; AVX512VLDQ-NEXT:    testl $512, %eax ## imm = 0x200
2423 ; AVX512VLDQ-NEXT:    jne LBB14_19
2424 ; AVX512VLDQ-NEXT:  LBB14_20: ## %else18
2425 ; AVX512VLDQ-NEXT:    testl $1024, %eax ## imm = 0x400
2426 ; AVX512VLDQ-NEXT:    jne LBB14_21
2427 ; AVX512VLDQ-NEXT:  LBB14_22: ## %else20
2428 ; AVX512VLDQ-NEXT:    testl $2048, %eax ## imm = 0x800
2429 ; AVX512VLDQ-NEXT:    jne LBB14_23
2430 ; AVX512VLDQ-NEXT:  LBB14_24: ## %else22
2431 ; AVX512VLDQ-NEXT:    testl $4096, %eax ## imm = 0x1000
2432 ; AVX512VLDQ-NEXT:    jne LBB14_25
2433 ; AVX512VLDQ-NEXT:  LBB14_26: ## %else24
2434 ; AVX512VLDQ-NEXT:    testl $8192, %eax ## imm = 0x2000
2435 ; AVX512VLDQ-NEXT:    jne LBB14_27
2436 ; AVX512VLDQ-NEXT:  LBB14_28: ## %else26
2437 ; AVX512VLDQ-NEXT:    testl $16384, %eax ## imm = 0x4000
2438 ; AVX512VLDQ-NEXT:    jne LBB14_29
2439 ; AVX512VLDQ-NEXT:  LBB14_30: ## %else28
2440 ; AVX512VLDQ-NEXT:    testl $32768, %eax ## imm = 0x8000
2441 ; AVX512VLDQ-NEXT:    jne LBB14_31
2442 ; AVX512VLDQ-NEXT:  LBB14_32: ## %else30
2443 ; AVX512VLDQ-NEXT:    vzeroupper
2444 ; AVX512VLDQ-NEXT:    retq
2445 ; AVX512VLDQ-NEXT:  LBB14_1: ## %cond.store
2446 ; AVX512VLDQ-NEXT:    vpextrw $0, %xmm1, (%rdi)
2447 ; AVX512VLDQ-NEXT:    testb $2, %al
2448 ; AVX512VLDQ-NEXT:    je LBB14_4
2449 ; AVX512VLDQ-NEXT:  LBB14_3: ## %cond.store1
2450 ; AVX512VLDQ-NEXT:    vpextrw $1, %xmm1, 2(%rdi)
2451 ; AVX512VLDQ-NEXT:    testb $4, %al
2452 ; AVX512VLDQ-NEXT:    je LBB14_6
2453 ; AVX512VLDQ-NEXT:  LBB14_5: ## %cond.store3
2454 ; AVX512VLDQ-NEXT:    vpextrw $2, %xmm1, 4(%rdi)
2455 ; AVX512VLDQ-NEXT:    testb $8, %al
2456 ; AVX512VLDQ-NEXT:    je LBB14_8
2457 ; AVX512VLDQ-NEXT:  LBB14_7: ## %cond.store5
2458 ; AVX512VLDQ-NEXT:    vpextrw $3, %xmm1, 6(%rdi)
2459 ; AVX512VLDQ-NEXT:    testb $16, %al
2460 ; AVX512VLDQ-NEXT:    je LBB14_10
2461 ; AVX512VLDQ-NEXT:  LBB14_9: ## %cond.store7
2462 ; AVX512VLDQ-NEXT:    vpextrw $4, %xmm1, 8(%rdi)
2463 ; AVX512VLDQ-NEXT:    testb $32, %al
2464 ; AVX512VLDQ-NEXT:    je LBB14_12
2465 ; AVX512VLDQ-NEXT:  LBB14_11: ## %cond.store9
2466 ; AVX512VLDQ-NEXT:    vpextrw $5, %xmm1, 10(%rdi)
2467 ; AVX512VLDQ-NEXT:    testb $64, %al
2468 ; AVX512VLDQ-NEXT:    je LBB14_14
2469 ; AVX512VLDQ-NEXT:  LBB14_13: ## %cond.store11
2470 ; AVX512VLDQ-NEXT:    vpextrw $6, %xmm1, 12(%rdi)
2471 ; AVX512VLDQ-NEXT:    testb $-128, %al
2472 ; AVX512VLDQ-NEXT:    jne LBB14_15
2473 ; AVX512VLDQ-NEXT:    jmp LBB14_16
2474 ; AVX512VLDQ-NEXT:  LBB14_17: ## %cond.store15
2475 ; AVX512VLDQ-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2476 ; AVX512VLDQ-NEXT:    testl $512, %eax ## imm = 0x200
2477 ; AVX512VLDQ-NEXT:    je LBB14_20
2478 ; AVX512VLDQ-NEXT:  LBB14_19: ## %cond.store17
2479 ; AVX512VLDQ-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2480 ; AVX512VLDQ-NEXT:    testl $1024, %eax ## imm = 0x400
2481 ; AVX512VLDQ-NEXT:    je LBB14_22
2482 ; AVX512VLDQ-NEXT:  LBB14_21: ## %cond.store19
2483 ; AVX512VLDQ-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2484 ; AVX512VLDQ-NEXT:    testl $2048, %eax ## imm = 0x800
2485 ; AVX512VLDQ-NEXT:    je LBB14_24
2486 ; AVX512VLDQ-NEXT:  LBB14_23: ## %cond.store21
2487 ; AVX512VLDQ-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2488 ; AVX512VLDQ-NEXT:    testl $4096, %eax ## imm = 0x1000
2489 ; AVX512VLDQ-NEXT:    je LBB14_26
2490 ; AVX512VLDQ-NEXT:  LBB14_25: ## %cond.store23
2491 ; AVX512VLDQ-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2492 ; AVX512VLDQ-NEXT:    testl $8192, %eax ## imm = 0x2000
2493 ; AVX512VLDQ-NEXT:    je LBB14_28
2494 ; AVX512VLDQ-NEXT:  LBB14_27: ## %cond.store25
2495 ; AVX512VLDQ-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2496 ; AVX512VLDQ-NEXT:    testl $16384, %eax ## imm = 0x4000
2497 ; AVX512VLDQ-NEXT:    je LBB14_30
2498 ; AVX512VLDQ-NEXT:  LBB14_29: ## %cond.store27
2499 ; AVX512VLDQ-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2500 ; AVX512VLDQ-NEXT:    testl $32768, %eax ## imm = 0x8000
2501 ; AVX512VLDQ-NEXT:    je LBB14_32
2502 ; AVX512VLDQ-NEXT:  LBB14_31: ## %cond.store29
2503 ; AVX512VLDQ-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2504 ; AVX512VLDQ-NEXT:    vzeroupper
2505 ; AVX512VLDQ-NEXT:    retq
2507 ; AVX512VLBW-LABEL: store_v16i16_v16i16:
2508 ; AVX512VLBW:       ## %bb.0:
2509 ; AVX512VLBW-NEXT:    vptestnmw %ymm0, %ymm0, %k1
2510 ; AVX512VLBW-NEXT:    vmovdqu16 %ymm1, (%rdi) {%k1}
2511 ; AVX512VLBW-NEXT:    vzeroupper
2512 ; AVX512VLBW-NEXT:    retq
2513   %mask = icmp eq <16 x i16> %trigger, zeroinitializer
2514   call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> %val, <16 x i16>* %addr, i32 4, <16 x i1> %mask)
2515   ret void
2519 ; vXi8
2522 define void @store_v16i8_v16i8(<16 x i8> %trigger, <16 x i8>* %addr, <16 x i8> %val) {
2523 ; SSE2-LABEL: store_v16i8_v16i8:
2524 ; SSE2:       ## %bb.0:
2525 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2526 ; SSE2-NEXT:    pcmpeqb %xmm0, %xmm2
2527 ; SSE2-NEXT:    pmovmskb %xmm2, %eax
2528 ; SSE2-NEXT:    testb $1, %al
2529 ; SSE2-NEXT:    movd %xmm1, %ecx
2530 ; SSE2-NEXT:    jne LBB15_1
2531 ; SSE2-NEXT:  ## %bb.2: ## %else
2532 ; SSE2-NEXT:    testb $2, %al
2533 ; SSE2-NEXT:    jne LBB15_3
2534 ; SSE2-NEXT:  LBB15_4: ## %else2
2535 ; SSE2-NEXT:    testb $4, %al
2536 ; SSE2-NEXT:    jne LBB15_5
2537 ; SSE2-NEXT:  LBB15_6: ## %else4
2538 ; SSE2-NEXT:    testb $8, %al
2539 ; SSE2-NEXT:    je LBB15_8
2540 ; SSE2-NEXT:  LBB15_7: ## %cond.store5
2541 ; SSE2-NEXT:    shrl $24, %ecx
2542 ; SSE2-NEXT:    movb %cl, 3(%rdi)
2543 ; SSE2-NEXT:  LBB15_8: ## %else6
2544 ; SSE2-NEXT:    testb $16, %al
2545 ; SSE2-NEXT:    pextrw $2, %xmm1, %ecx
2546 ; SSE2-NEXT:    je LBB15_10
2547 ; SSE2-NEXT:  ## %bb.9: ## %cond.store7
2548 ; SSE2-NEXT:    movb %cl, 4(%rdi)
2549 ; SSE2-NEXT:  LBB15_10: ## %else8
2550 ; SSE2-NEXT:    testb $32, %al
2551 ; SSE2-NEXT:    je LBB15_12
2552 ; SSE2-NEXT:  ## %bb.11: ## %cond.store9
2553 ; SSE2-NEXT:    movb %ch, 5(%rdi)
2554 ; SSE2-NEXT:  LBB15_12: ## %else10
2555 ; SSE2-NEXT:    testb $64, %al
2556 ; SSE2-NEXT:    pextrw $3, %xmm1, %ecx
2557 ; SSE2-NEXT:    je LBB15_14
2558 ; SSE2-NEXT:  ## %bb.13: ## %cond.store11
2559 ; SSE2-NEXT:    movb %cl, 6(%rdi)
2560 ; SSE2-NEXT:  LBB15_14: ## %else12
2561 ; SSE2-NEXT:    testb $-128, %al
2562 ; SSE2-NEXT:    je LBB15_16
2563 ; SSE2-NEXT:  ## %bb.15: ## %cond.store13
2564 ; SSE2-NEXT:    movb %ch, 7(%rdi)
2565 ; SSE2-NEXT:  LBB15_16: ## %else14
2566 ; SSE2-NEXT:    testl $256, %eax ## imm = 0x100
2567 ; SSE2-NEXT:    pextrw $4, %xmm1, %ecx
2568 ; SSE2-NEXT:    je LBB15_18
2569 ; SSE2-NEXT:  ## %bb.17: ## %cond.store15
2570 ; SSE2-NEXT:    movb %cl, 8(%rdi)
2571 ; SSE2-NEXT:  LBB15_18: ## %else16
2572 ; SSE2-NEXT:    testl $512, %eax ## imm = 0x200
2573 ; SSE2-NEXT:    je LBB15_20
2574 ; SSE2-NEXT:  ## %bb.19: ## %cond.store17
2575 ; SSE2-NEXT:    movb %ch, 9(%rdi)
2576 ; SSE2-NEXT:  LBB15_20: ## %else18
2577 ; SSE2-NEXT:    testl $1024, %eax ## imm = 0x400
2578 ; SSE2-NEXT:    pextrw $5, %xmm1, %ecx
2579 ; SSE2-NEXT:    je LBB15_22
2580 ; SSE2-NEXT:  ## %bb.21: ## %cond.store19
2581 ; SSE2-NEXT:    movb %cl, 10(%rdi)
2582 ; SSE2-NEXT:  LBB15_22: ## %else20
2583 ; SSE2-NEXT:    testl $2048, %eax ## imm = 0x800
2584 ; SSE2-NEXT:    je LBB15_24
2585 ; SSE2-NEXT:  ## %bb.23: ## %cond.store21
2586 ; SSE2-NEXT:    movb %ch, 11(%rdi)
2587 ; SSE2-NEXT:  LBB15_24: ## %else22
2588 ; SSE2-NEXT:    testl $4096, %eax ## imm = 0x1000
2589 ; SSE2-NEXT:    pextrw $6, %xmm1, %ecx
2590 ; SSE2-NEXT:    je LBB15_26
2591 ; SSE2-NEXT:  ## %bb.25: ## %cond.store23
2592 ; SSE2-NEXT:    movb %cl, 12(%rdi)
2593 ; SSE2-NEXT:  LBB15_26: ## %else24
2594 ; SSE2-NEXT:    testl $8192, %eax ## imm = 0x2000
2595 ; SSE2-NEXT:    je LBB15_28
2596 ; SSE2-NEXT:  ## %bb.27: ## %cond.store25
2597 ; SSE2-NEXT:    movb %ch, 13(%rdi)
2598 ; SSE2-NEXT:  LBB15_28: ## %else26
2599 ; SSE2-NEXT:    testl $16384, %eax ## imm = 0x4000
2600 ; SSE2-NEXT:    pextrw $7, %xmm1, %ecx
2601 ; SSE2-NEXT:    jne LBB15_29
2602 ; SSE2-NEXT:  ## %bb.30: ## %else28
2603 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
2604 ; SSE2-NEXT:    jne LBB15_31
2605 ; SSE2-NEXT:  LBB15_32: ## %else30
2606 ; SSE2-NEXT:    retq
2607 ; SSE2-NEXT:  LBB15_1: ## %cond.store
2608 ; SSE2-NEXT:    movb %cl, (%rdi)
2609 ; SSE2-NEXT:    testb $2, %al
2610 ; SSE2-NEXT:    je LBB15_4
2611 ; SSE2-NEXT:  LBB15_3: ## %cond.store1
2612 ; SSE2-NEXT:    movb %ch, 1(%rdi)
2613 ; SSE2-NEXT:    testb $4, %al
2614 ; SSE2-NEXT:    je LBB15_6
2615 ; SSE2-NEXT:  LBB15_5: ## %cond.store3
2616 ; SSE2-NEXT:    movl %ecx, %edx
2617 ; SSE2-NEXT:    shrl $16, %edx
2618 ; SSE2-NEXT:    movb %dl, 2(%rdi)
2619 ; SSE2-NEXT:    testb $8, %al
2620 ; SSE2-NEXT:    jne LBB15_7
2621 ; SSE2-NEXT:    jmp LBB15_8
2622 ; SSE2-NEXT:  LBB15_29: ## %cond.store27
2623 ; SSE2-NEXT:    movb %cl, 14(%rdi)
2624 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
2625 ; SSE2-NEXT:    je LBB15_32
2626 ; SSE2-NEXT:  LBB15_31: ## %cond.store29
2627 ; SSE2-NEXT:    movb %ch, 15(%rdi)
2628 ; SSE2-NEXT:    retq
2630 ; SSE4-LABEL: store_v16i8_v16i8:
2631 ; SSE4:       ## %bb.0:
2632 ; SSE4-NEXT:    pxor %xmm2, %xmm2
2633 ; SSE4-NEXT:    pcmpeqb %xmm0, %xmm2
2634 ; SSE4-NEXT:    pmovmskb %xmm2, %eax
2635 ; SSE4-NEXT:    testb $1, %al
2636 ; SSE4-NEXT:    jne LBB15_1
2637 ; SSE4-NEXT:  ## %bb.2: ## %else
2638 ; SSE4-NEXT:    testb $2, %al
2639 ; SSE4-NEXT:    jne LBB15_3
2640 ; SSE4-NEXT:  LBB15_4: ## %else2
2641 ; SSE4-NEXT:    testb $4, %al
2642 ; SSE4-NEXT:    jne LBB15_5
2643 ; SSE4-NEXT:  LBB15_6: ## %else4
2644 ; SSE4-NEXT:    testb $8, %al
2645 ; SSE4-NEXT:    jne LBB15_7
2646 ; SSE4-NEXT:  LBB15_8: ## %else6
2647 ; SSE4-NEXT:    testb $16, %al
2648 ; SSE4-NEXT:    jne LBB15_9
2649 ; SSE4-NEXT:  LBB15_10: ## %else8
2650 ; SSE4-NEXT:    testb $32, %al
2651 ; SSE4-NEXT:    jne LBB15_11
2652 ; SSE4-NEXT:  LBB15_12: ## %else10
2653 ; SSE4-NEXT:    testb $64, %al
2654 ; SSE4-NEXT:    jne LBB15_13
2655 ; SSE4-NEXT:  LBB15_14: ## %else12
2656 ; SSE4-NEXT:    testb $-128, %al
2657 ; SSE4-NEXT:    jne LBB15_15
2658 ; SSE4-NEXT:  LBB15_16: ## %else14
2659 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
2660 ; SSE4-NEXT:    jne LBB15_17
2661 ; SSE4-NEXT:  LBB15_18: ## %else16
2662 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
2663 ; SSE4-NEXT:    jne LBB15_19
2664 ; SSE4-NEXT:  LBB15_20: ## %else18
2665 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
2666 ; SSE4-NEXT:    jne LBB15_21
2667 ; SSE4-NEXT:  LBB15_22: ## %else20
2668 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
2669 ; SSE4-NEXT:    jne LBB15_23
2670 ; SSE4-NEXT:  LBB15_24: ## %else22
2671 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
2672 ; SSE4-NEXT:    jne LBB15_25
2673 ; SSE4-NEXT:  LBB15_26: ## %else24
2674 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
2675 ; SSE4-NEXT:    jne LBB15_27
2676 ; SSE4-NEXT:  LBB15_28: ## %else26
2677 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
2678 ; SSE4-NEXT:    jne LBB15_29
2679 ; SSE4-NEXT:  LBB15_30: ## %else28
2680 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
2681 ; SSE4-NEXT:    jne LBB15_31
2682 ; SSE4-NEXT:  LBB15_32: ## %else30
2683 ; SSE4-NEXT:    retq
2684 ; SSE4-NEXT:  LBB15_1: ## %cond.store
2685 ; SSE4-NEXT:    pextrb $0, %xmm1, (%rdi)
2686 ; SSE4-NEXT:    testb $2, %al
2687 ; SSE4-NEXT:    je LBB15_4
2688 ; SSE4-NEXT:  LBB15_3: ## %cond.store1
2689 ; SSE4-NEXT:    pextrb $1, %xmm1, 1(%rdi)
2690 ; SSE4-NEXT:    testb $4, %al
2691 ; SSE4-NEXT:    je LBB15_6
2692 ; SSE4-NEXT:  LBB15_5: ## %cond.store3
2693 ; SSE4-NEXT:    pextrb $2, %xmm1, 2(%rdi)
2694 ; SSE4-NEXT:    testb $8, %al
2695 ; SSE4-NEXT:    je LBB15_8
2696 ; SSE4-NEXT:  LBB15_7: ## %cond.store5
2697 ; SSE4-NEXT:    pextrb $3, %xmm1, 3(%rdi)
2698 ; SSE4-NEXT:    testb $16, %al
2699 ; SSE4-NEXT:    je LBB15_10
2700 ; SSE4-NEXT:  LBB15_9: ## %cond.store7
2701 ; SSE4-NEXT:    pextrb $4, %xmm1, 4(%rdi)
2702 ; SSE4-NEXT:    testb $32, %al
2703 ; SSE4-NEXT:    je LBB15_12
2704 ; SSE4-NEXT:  LBB15_11: ## %cond.store9
2705 ; SSE4-NEXT:    pextrb $5, %xmm1, 5(%rdi)
2706 ; SSE4-NEXT:    testb $64, %al
2707 ; SSE4-NEXT:    je LBB15_14
2708 ; SSE4-NEXT:  LBB15_13: ## %cond.store11
2709 ; SSE4-NEXT:    pextrb $6, %xmm1, 6(%rdi)
2710 ; SSE4-NEXT:    testb $-128, %al
2711 ; SSE4-NEXT:    je LBB15_16
2712 ; SSE4-NEXT:  LBB15_15: ## %cond.store13
2713 ; SSE4-NEXT:    pextrb $7, %xmm1, 7(%rdi)
2714 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
2715 ; SSE4-NEXT:    je LBB15_18
2716 ; SSE4-NEXT:  LBB15_17: ## %cond.store15
2717 ; SSE4-NEXT:    pextrb $8, %xmm1, 8(%rdi)
2718 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
2719 ; SSE4-NEXT:    je LBB15_20
2720 ; SSE4-NEXT:  LBB15_19: ## %cond.store17
2721 ; SSE4-NEXT:    pextrb $9, %xmm1, 9(%rdi)
2722 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
2723 ; SSE4-NEXT:    je LBB15_22
2724 ; SSE4-NEXT:  LBB15_21: ## %cond.store19
2725 ; SSE4-NEXT:    pextrb $10, %xmm1, 10(%rdi)
2726 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
2727 ; SSE4-NEXT:    je LBB15_24
2728 ; SSE4-NEXT:  LBB15_23: ## %cond.store21
2729 ; SSE4-NEXT:    pextrb $11, %xmm1, 11(%rdi)
2730 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
2731 ; SSE4-NEXT:    je LBB15_26
2732 ; SSE4-NEXT:  LBB15_25: ## %cond.store23
2733 ; SSE4-NEXT:    pextrb $12, %xmm1, 12(%rdi)
2734 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
2735 ; SSE4-NEXT:    je LBB15_28
2736 ; SSE4-NEXT:  LBB15_27: ## %cond.store25
2737 ; SSE4-NEXT:    pextrb $13, %xmm1, 13(%rdi)
2738 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
2739 ; SSE4-NEXT:    je LBB15_30
2740 ; SSE4-NEXT:  LBB15_29: ## %cond.store27
2741 ; SSE4-NEXT:    pextrb $14, %xmm1, 14(%rdi)
2742 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
2743 ; SSE4-NEXT:    je LBB15_32
2744 ; SSE4-NEXT:  LBB15_31: ## %cond.store29
2745 ; SSE4-NEXT:    pextrb $15, %xmm1, 15(%rdi)
2746 ; SSE4-NEXT:    retq
2748 ; AVX1OR2-LABEL: store_v16i8_v16i8:
2749 ; AVX1OR2:       ## %bb.0:
2750 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2751 ; AVX1OR2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
2752 ; AVX1OR2-NEXT:    vpmovmskb %xmm0, %eax
2753 ; AVX1OR2-NEXT:    testb $1, %al
2754 ; AVX1OR2-NEXT:    jne LBB15_1
2755 ; AVX1OR2-NEXT:  ## %bb.2: ## %else
2756 ; AVX1OR2-NEXT:    testb $2, %al
2757 ; AVX1OR2-NEXT:    jne LBB15_3
2758 ; AVX1OR2-NEXT:  LBB15_4: ## %else2
2759 ; AVX1OR2-NEXT:    testb $4, %al
2760 ; AVX1OR2-NEXT:    jne LBB15_5
2761 ; AVX1OR2-NEXT:  LBB15_6: ## %else4
2762 ; AVX1OR2-NEXT:    testb $8, %al
2763 ; AVX1OR2-NEXT:    jne LBB15_7
2764 ; AVX1OR2-NEXT:  LBB15_8: ## %else6
2765 ; AVX1OR2-NEXT:    testb $16, %al
2766 ; AVX1OR2-NEXT:    jne LBB15_9
2767 ; AVX1OR2-NEXT:  LBB15_10: ## %else8
2768 ; AVX1OR2-NEXT:    testb $32, %al
2769 ; AVX1OR2-NEXT:    jne LBB15_11
2770 ; AVX1OR2-NEXT:  LBB15_12: ## %else10
2771 ; AVX1OR2-NEXT:    testb $64, %al
2772 ; AVX1OR2-NEXT:    jne LBB15_13
2773 ; AVX1OR2-NEXT:  LBB15_14: ## %else12
2774 ; AVX1OR2-NEXT:    testb $-128, %al
2775 ; AVX1OR2-NEXT:    jne LBB15_15
2776 ; AVX1OR2-NEXT:  LBB15_16: ## %else14
2777 ; AVX1OR2-NEXT:    testl $256, %eax ## imm = 0x100
2778 ; AVX1OR2-NEXT:    jne LBB15_17
2779 ; AVX1OR2-NEXT:  LBB15_18: ## %else16
2780 ; AVX1OR2-NEXT:    testl $512, %eax ## imm = 0x200
2781 ; AVX1OR2-NEXT:    jne LBB15_19
2782 ; AVX1OR2-NEXT:  LBB15_20: ## %else18
2783 ; AVX1OR2-NEXT:    testl $1024, %eax ## imm = 0x400
2784 ; AVX1OR2-NEXT:    jne LBB15_21
2785 ; AVX1OR2-NEXT:  LBB15_22: ## %else20
2786 ; AVX1OR2-NEXT:    testl $2048, %eax ## imm = 0x800
2787 ; AVX1OR2-NEXT:    jne LBB15_23
2788 ; AVX1OR2-NEXT:  LBB15_24: ## %else22
2789 ; AVX1OR2-NEXT:    testl $4096, %eax ## imm = 0x1000
2790 ; AVX1OR2-NEXT:    jne LBB15_25
2791 ; AVX1OR2-NEXT:  LBB15_26: ## %else24
2792 ; AVX1OR2-NEXT:    testl $8192, %eax ## imm = 0x2000
2793 ; AVX1OR2-NEXT:    jne LBB15_27
2794 ; AVX1OR2-NEXT:  LBB15_28: ## %else26
2795 ; AVX1OR2-NEXT:    testl $16384, %eax ## imm = 0x4000
2796 ; AVX1OR2-NEXT:    jne LBB15_29
2797 ; AVX1OR2-NEXT:  LBB15_30: ## %else28
2798 ; AVX1OR2-NEXT:    testl $32768, %eax ## imm = 0x8000
2799 ; AVX1OR2-NEXT:    jne LBB15_31
2800 ; AVX1OR2-NEXT:  LBB15_32: ## %else30
2801 ; AVX1OR2-NEXT:    retq
2802 ; AVX1OR2-NEXT:  LBB15_1: ## %cond.store
2803 ; AVX1OR2-NEXT:    vpextrb $0, %xmm1, (%rdi)
2804 ; AVX1OR2-NEXT:    testb $2, %al
2805 ; AVX1OR2-NEXT:    je LBB15_4
2806 ; AVX1OR2-NEXT:  LBB15_3: ## %cond.store1
2807 ; AVX1OR2-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
2808 ; AVX1OR2-NEXT:    testb $4, %al
2809 ; AVX1OR2-NEXT:    je LBB15_6
2810 ; AVX1OR2-NEXT:  LBB15_5: ## %cond.store3
2811 ; AVX1OR2-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
2812 ; AVX1OR2-NEXT:    testb $8, %al
2813 ; AVX1OR2-NEXT:    je LBB15_8
2814 ; AVX1OR2-NEXT:  LBB15_7: ## %cond.store5
2815 ; AVX1OR2-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
2816 ; AVX1OR2-NEXT:    testb $16, %al
2817 ; AVX1OR2-NEXT:    je LBB15_10
2818 ; AVX1OR2-NEXT:  LBB15_9: ## %cond.store7
2819 ; AVX1OR2-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
2820 ; AVX1OR2-NEXT:    testb $32, %al
2821 ; AVX1OR2-NEXT:    je LBB15_12
2822 ; AVX1OR2-NEXT:  LBB15_11: ## %cond.store9
2823 ; AVX1OR2-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
2824 ; AVX1OR2-NEXT:    testb $64, %al
2825 ; AVX1OR2-NEXT:    je LBB15_14
2826 ; AVX1OR2-NEXT:  LBB15_13: ## %cond.store11
2827 ; AVX1OR2-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
2828 ; AVX1OR2-NEXT:    testb $-128, %al
2829 ; AVX1OR2-NEXT:    je LBB15_16
2830 ; AVX1OR2-NEXT:  LBB15_15: ## %cond.store13
2831 ; AVX1OR2-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
2832 ; AVX1OR2-NEXT:    testl $256, %eax ## imm = 0x100
2833 ; AVX1OR2-NEXT:    je LBB15_18
2834 ; AVX1OR2-NEXT:  LBB15_17: ## %cond.store15
2835 ; AVX1OR2-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
2836 ; AVX1OR2-NEXT:    testl $512, %eax ## imm = 0x200
2837 ; AVX1OR2-NEXT:    je LBB15_20
2838 ; AVX1OR2-NEXT:  LBB15_19: ## %cond.store17
2839 ; AVX1OR2-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
2840 ; AVX1OR2-NEXT:    testl $1024, %eax ## imm = 0x400
2841 ; AVX1OR2-NEXT:    je LBB15_22
2842 ; AVX1OR2-NEXT:  LBB15_21: ## %cond.store19
2843 ; AVX1OR2-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
2844 ; AVX1OR2-NEXT:    testl $2048, %eax ## imm = 0x800
2845 ; AVX1OR2-NEXT:    je LBB15_24
2846 ; AVX1OR2-NEXT:  LBB15_23: ## %cond.store21
2847 ; AVX1OR2-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
2848 ; AVX1OR2-NEXT:    testl $4096, %eax ## imm = 0x1000
2849 ; AVX1OR2-NEXT:    je LBB15_26
2850 ; AVX1OR2-NEXT:  LBB15_25: ## %cond.store23
2851 ; AVX1OR2-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
2852 ; AVX1OR2-NEXT:    testl $8192, %eax ## imm = 0x2000
2853 ; AVX1OR2-NEXT:    je LBB15_28
2854 ; AVX1OR2-NEXT:  LBB15_27: ## %cond.store25
2855 ; AVX1OR2-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
2856 ; AVX1OR2-NEXT:    testl $16384, %eax ## imm = 0x4000
2857 ; AVX1OR2-NEXT:    je LBB15_30
2858 ; AVX1OR2-NEXT:  LBB15_29: ## %cond.store27
2859 ; AVX1OR2-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
2860 ; AVX1OR2-NEXT:    testl $32768, %eax ## imm = 0x8000
2861 ; AVX1OR2-NEXT:    je LBB15_32
2862 ; AVX1OR2-NEXT:  LBB15_31: ## %cond.store29
2863 ; AVX1OR2-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
2864 ; AVX1OR2-NEXT:    retq
2866 ; AVX512F-LABEL: store_v16i8_v16i8:
2867 ; AVX512F:       ## %bb.0:
2868 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2869 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
2870 ; AVX512F-NEXT:    vpmovmskb %xmm0, %eax
2871 ; AVX512F-NEXT:    testb $1, %al
2872 ; AVX512F-NEXT:    jne LBB15_1
2873 ; AVX512F-NEXT:  ## %bb.2: ## %else
2874 ; AVX512F-NEXT:    testb $2, %al
2875 ; AVX512F-NEXT:    jne LBB15_3
2876 ; AVX512F-NEXT:  LBB15_4: ## %else2
2877 ; AVX512F-NEXT:    testb $4, %al
2878 ; AVX512F-NEXT:    jne LBB15_5
2879 ; AVX512F-NEXT:  LBB15_6: ## %else4
2880 ; AVX512F-NEXT:    testb $8, %al
2881 ; AVX512F-NEXT:    jne LBB15_7
2882 ; AVX512F-NEXT:  LBB15_8: ## %else6
2883 ; AVX512F-NEXT:    testb $16, %al
2884 ; AVX512F-NEXT:    jne LBB15_9
2885 ; AVX512F-NEXT:  LBB15_10: ## %else8
2886 ; AVX512F-NEXT:    testb $32, %al
2887 ; AVX512F-NEXT:    jne LBB15_11
2888 ; AVX512F-NEXT:  LBB15_12: ## %else10
2889 ; AVX512F-NEXT:    testb $64, %al
2890 ; AVX512F-NEXT:    jne LBB15_13
2891 ; AVX512F-NEXT:  LBB15_14: ## %else12
2892 ; AVX512F-NEXT:    testb $-128, %al
2893 ; AVX512F-NEXT:    jne LBB15_15
2894 ; AVX512F-NEXT:  LBB15_16: ## %else14
2895 ; AVX512F-NEXT:    testl $256, %eax ## imm = 0x100
2896 ; AVX512F-NEXT:    jne LBB15_17
2897 ; AVX512F-NEXT:  LBB15_18: ## %else16
2898 ; AVX512F-NEXT:    testl $512, %eax ## imm = 0x200
2899 ; AVX512F-NEXT:    jne LBB15_19
2900 ; AVX512F-NEXT:  LBB15_20: ## %else18
2901 ; AVX512F-NEXT:    testl $1024, %eax ## imm = 0x400
2902 ; AVX512F-NEXT:    jne LBB15_21
2903 ; AVX512F-NEXT:  LBB15_22: ## %else20
2904 ; AVX512F-NEXT:    testl $2048, %eax ## imm = 0x800
2905 ; AVX512F-NEXT:    jne LBB15_23
2906 ; AVX512F-NEXT:  LBB15_24: ## %else22
2907 ; AVX512F-NEXT:    testl $4096, %eax ## imm = 0x1000
2908 ; AVX512F-NEXT:    jne LBB15_25
2909 ; AVX512F-NEXT:  LBB15_26: ## %else24
2910 ; AVX512F-NEXT:    testl $8192, %eax ## imm = 0x2000
2911 ; AVX512F-NEXT:    jne LBB15_27
2912 ; AVX512F-NEXT:  LBB15_28: ## %else26
2913 ; AVX512F-NEXT:    testl $16384, %eax ## imm = 0x4000
2914 ; AVX512F-NEXT:    jne LBB15_29
2915 ; AVX512F-NEXT:  LBB15_30: ## %else28
2916 ; AVX512F-NEXT:    testl $32768, %eax ## imm = 0x8000
2917 ; AVX512F-NEXT:    jne LBB15_31
2918 ; AVX512F-NEXT:  LBB15_32: ## %else30
2919 ; AVX512F-NEXT:    retq
2920 ; AVX512F-NEXT:  LBB15_1: ## %cond.store
2921 ; AVX512F-NEXT:    vpextrb $0, %xmm1, (%rdi)
2922 ; AVX512F-NEXT:    testb $2, %al
2923 ; AVX512F-NEXT:    je LBB15_4
2924 ; AVX512F-NEXT:  LBB15_3: ## %cond.store1
2925 ; AVX512F-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
2926 ; AVX512F-NEXT:    testb $4, %al
2927 ; AVX512F-NEXT:    je LBB15_6
2928 ; AVX512F-NEXT:  LBB15_5: ## %cond.store3
2929 ; AVX512F-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
2930 ; AVX512F-NEXT:    testb $8, %al
2931 ; AVX512F-NEXT:    je LBB15_8
2932 ; AVX512F-NEXT:  LBB15_7: ## %cond.store5
2933 ; AVX512F-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
2934 ; AVX512F-NEXT:    testb $16, %al
2935 ; AVX512F-NEXT:    je LBB15_10
2936 ; AVX512F-NEXT:  LBB15_9: ## %cond.store7
2937 ; AVX512F-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
2938 ; AVX512F-NEXT:    testb $32, %al
2939 ; AVX512F-NEXT:    je LBB15_12
2940 ; AVX512F-NEXT:  LBB15_11: ## %cond.store9
2941 ; AVX512F-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
2942 ; AVX512F-NEXT:    testb $64, %al
2943 ; AVX512F-NEXT:    je LBB15_14
2944 ; AVX512F-NEXT:  LBB15_13: ## %cond.store11
2945 ; AVX512F-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
2946 ; AVX512F-NEXT:    testb $-128, %al
2947 ; AVX512F-NEXT:    je LBB15_16
2948 ; AVX512F-NEXT:  LBB15_15: ## %cond.store13
2949 ; AVX512F-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
2950 ; AVX512F-NEXT:    testl $256, %eax ## imm = 0x100
2951 ; AVX512F-NEXT:    je LBB15_18
2952 ; AVX512F-NEXT:  LBB15_17: ## %cond.store15
2953 ; AVX512F-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
2954 ; AVX512F-NEXT:    testl $512, %eax ## imm = 0x200
2955 ; AVX512F-NEXT:    je LBB15_20
2956 ; AVX512F-NEXT:  LBB15_19: ## %cond.store17
2957 ; AVX512F-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
2958 ; AVX512F-NEXT:    testl $1024, %eax ## imm = 0x400
2959 ; AVX512F-NEXT:    je LBB15_22
2960 ; AVX512F-NEXT:  LBB15_21: ## %cond.store19
2961 ; AVX512F-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
2962 ; AVX512F-NEXT:    testl $2048, %eax ## imm = 0x800
2963 ; AVX512F-NEXT:    je LBB15_24
2964 ; AVX512F-NEXT:  LBB15_23: ## %cond.store21
2965 ; AVX512F-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
2966 ; AVX512F-NEXT:    testl $4096, %eax ## imm = 0x1000
2967 ; AVX512F-NEXT:    je LBB15_26
2968 ; AVX512F-NEXT:  LBB15_25: ## %cond.store23
2969 ; AVX512F-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
2970 ; AVX512F-NEXT:    testl $8192, %eax ## imm = 0x2000
2971 ; AVX512F-NEXT:    je LBB15_28
2972 ; AVX512F-NEXT:  LBB15_27: ## %cond.store25
2973 ; AVX512F-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
2974 ; AVX512F-NEXT:    testl $16384, %eax ## imm = 0x4000
2975 ; AVX512F-NEXT:    je LBB15_30
2976 ; AVX512F-NEXT:  LBB15_29: ## %cond.store27
2977 ; AVX512F-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
2978 ; AVX512F-NEXT:    testl $32768, %eax ## imm = 0x8000
2979 ; AVX512F-NEXT:    je LBB15_32
2980 ; AVX512F-NEXT:  LBB15_31: ## %cond.store29
2981 ; AVX512F-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
2982 ; AVX512F-NEXT:    retq
2984 ; AVX512VLDQ-LABEL: store_v16i8_v16i8:
2985 ; AVX512VLDQ:       ## %bb.0:
2986 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2987 ; AVX512VLDQ-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
2988 ; AVX512VLDQ-NEXT:    vpmovmskb %xmm0, %eax
2989 ; AVX512VLDQ-NEXT:    testb $1, %al
2990 ; AVX512VLDQ-NEXT:    jne LBB15_1
2991 ; AVX512VLDQ-NEXT:  ## %bb.2: ## %else
2992 ; AVX512VLDQ-NEXT:    testb $2, %al
2993 ; AVX512VLDQ-NEXT:    jne LBB15_3
2994 ; AVX512VLDQ-NEXT:  LBB15_4: ## %else2
2995 ; AVX512VLDQ-NEXT:    testb $4, %al
2996 ; AVX512VLDQ-NEXT:    jne LBB15_5
2997 ; AVX512VLDQ-NEXT:  LBB15_6: ## %else4
2998 ; AVX512VLDQ-NEXT:    testb $8, %al
2999 ; AVX512VLDQ-NEXT:    jne LBB15_7
3000 ; AVX512VLDQ-NEXT:  LBB15_8: ## %else6
3001 ; AVX512VLDQ-NEXT:    testb $16, %al
3002 ; AVX512VLDQ-NEXT:    jne LBB15_9
3003 ; AVX512VLDQ-NEXT:  LBB15_10: ## %else8
3004 ; AVX512VLDQ-NEXT:    testb $32, %al
3005 ; AVX512VLDQ-NEXT:    jne LBB15_11
3006 ; AVX512VLDQ-NEXT:  LBB15_12: ## %else10
3007 ; AVX512VLDQ-NEXT:    testb $64, %al
3008 ; AVX512VLDQ-NEXT:    jne LBB15_13
3009 ; AVX512VLDQ-NEXT:  LBB15_14: ## %else12
3010 ; AVX512VLDQ-NEXT:    testb $-128, %al
3011 ; AVX512VLDQ-NEXT:    jne LBB15_15
3012 ; AVX512VLDQ-NEXT:  LBB15_16: ## %else14
3013 ; AVX512VLDQ-NEXT:    testl $256, %eax ## imm = 0x100
3014 ; AVX512VLDQ-NEXT:    jne LBB15_17
3015 ; AVX512VLDQ-NEXT:  LBB15_18: ## %else16
3016 ; AVX512VLDQ-NEXT:    testl $512, %eax ## imm = 0x200
3017 ; AVX512VLDQ-NEXT:    jne LBB15_19
3018 ; AVX512VLDQ-NEXT:  LBB15_20: ## %else18
3019 ; AVX512VLDQ-NEXT:    testl $1024, %eax ## imm = 0x400
3020 ; AVX512VLDQ-NEXT:    jne LBB15_21
3021 ; AVX512VLDQ-NEXT:  LBB15_22: ## %else20
3022 ; AVX512VLDQ-NEXT:    testl $2048, %eax ## imm = 0x800
3023 ; AVX512VLDQ-NEXT:    jne LBB15_23
3024 ; AVX512VLDQ-NEXT:  LBB15_24: ## %else22
3025 ; AVX512VLDQ-NEXT:    testl $4096, %eax ## imm = 0x1000
3026 ; AVX512VLDQ-NEXT:    jne LBB15_25
3027 ; AVX512VLDQ-NEXT:  LBB15_26: ## %else24
3028 ; AVX512VLDQ-NEXT:    testl $8192, %eax ## imm = 0x2000
3029 ; AVX512VLDQ-NEXT:    jne LBB15_27
3030 ; AVX512VLDQ-NEXT:  LBB15_28: ## %else26
3031 ; AVX512VLDQ-NEXT:    testl $16384, %eax ## imm = 0x4000
3032 ; AVX512VLDQ-NEXT:    jne LBB15_29
3033 ; AVX512VLDQ-NEXT:  LBB15_30: ## %else28
3034 ; AVX512VLDQ-NEXT:    testl $32768, %eax ## imm = 0x8000
3035 ; AVX512VLDQ-NEXT:    jne LBB15_31
3036 ; AVX512VLDQ-NEXT:  LBB15_32: ## %else30
3037 ; AVX512VLDQ-NEXT:    retq
3038 ; AVX512VLDQ-NEXT:  LBB15_1: ## %cond.store
3039 ; AVX512VLDQ-NEXT:    vpextrb $0, %xmm1, (%rdi)
3040 ; AVX512VLDQ-NEXT:    testb $2, %al
3041 ; AVX512VLDQ-NEXT:    je LBB15_4
3042 ; AVX512VLDQ-NEXT:  LBB15_3: ## %cond.store1
3043 ; AVX512VLDQ-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
3044 ; AVX512VLDQ-NEXT:    testb $4, %al
3045 ; AVX512VLDQ-NEXT:    je LBB15_6
3046 ; AVX512VLDQ-NEXT:  LBB15_5: ## %cond.store3
3047 ; AVX512VLDQ-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
3048 ; AVX512VLDQ-NEXT:    testb $8, %al
3049 ; AVX512VLDQ-NEXT:    je LBB15_8
3050 ; AVX512VLDQ-NEXT:  LBB15_7: ## %cond.store5
3051 ; AVX512VLDQ-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
3052 ; AVX512VLDQ-NEXT:    testb $16, %al
3053 ; AVX512VLDQ-NEXT:    je LBB15_10
3054 ; AVX512VLDQ-NEXT:  LBB15_9: ## %cond.store7
3055 ; AVX512VLDQ-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
3056 ; AVX512VLDQ-NEXT:    testb $32, %al
3057 ; AVX512VLDQ-NEXT:    je LBB15_12
3058 ; AVX512VLDQ-NEXT:  LBB15_11: ## %cond.store9
3059 ; AVX512VLDQ-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
3060 ; AVX512VLDQ-NEXT:    testb $64, %al
3061 ; AVX512VLDQ-NEXT:    je LBB15_14
3062 ; AVX512VLDQ-NEXT:  LBB15_13: ## %cond.store11
3063 ; AVX512VLDQ-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
3064 ; AVX512VLDQ-NEXT:    testb $-128, %al
3065 ; AVX512VLDQ-NEXT:    je LBB15_16
3066 ; AVX512VLDQ-NEXT:  LBB15_15: ## %cond.store13
3067 ; AVX512VLDQ-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
3068 ; AVX512VLDQ-NEXT:    testl $256, %eax ## imm = 0x100
3069 ; AVX512VLDQ-NEXT:    je LBB15_18
3070 ; AVX512VLDQ-NEXT:  LBB15_17: ## %cond.store15
3071 ; AVX512VLDQ-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
3072 ; AVX512VLDQ-NEXT:    testl $512, %eax ## imm = 0x200
3073 ; AVX512VLDQ-NEXT:    je LBB15_20
3074 ; AVX512VLDQ-NEXT:  LBB15_19: ## %cond.store17
3075 ; AVX512VLDQ-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
3076 ; AVX512VLDQ-NEXT:    testl $1024, %eax ## imm = 0x400
3077 ; AVX512VLDQ-NEXT:    je LBB15_22
3078 ; AVX512VLDQ-NEXT:  LBB15_21: ## %cond.store19
3079 ; AVX512VLDQ-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
3080 ; AVX512VLDQ-NEXT:    testl $2048, %eax ## imm = 0x800
3081 ; AVX512VLDQ-NEXT:    je LBB15_24
3082 ; AVX512VLDQ-NEXT:  LBB15_23: ## %cond.store21
3083 ; AVX512VLDQ-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
3084 ; AVX512VLDQ-NEXT:    testl $4096, %eax ## imm = 0x1000
3085 ; AVX512VLDQ-NEXT:    je LBB15_26
3086 ; AVX512VLDQ-NEXT:  LBB15_25: ## %cond.store23
3087 ; AVX512VLDQ-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
3088 ; AVX512VLDQ-NEXT:    testl $8192, %eax ## imm = 0x2000
3089 ; AVX512VLDQ-NEXT:    je LBB15_28
3090 ; AVX512VLDQ-NEXT:  LBB15_27: ## %cond.store25
3091 ; AVX512VLDQ-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
3092 ; AVX512VLDQ-NEXT:    testl $16384, %eax ## imm = 0x4000
3093 ; AVX512VLDQ-NEXT:    je LBB15_30
3094 ; AVX512VLDQ-NEXT:  LBB15_29: ## %cond.store27
3095 ; AVX512VLDQ-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
3096 ; AVX512VLDQ-NEXT:    testl $32768, %eax ## imm = 0x8000
3097 ; AVX512VLDQ-NEXT:    je LBB15_32
3098 ; AVX512VLDQ-NEXT:  LBB15_31: ## %cond.store29
3099 ; AVX512VLDQ-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
3100 ; AVX512VLDQ-NEXT:    retq
3102 ; AVX512VLBW-LABEL: store_v16i8_v16i8:
3103 ; AVX512VLBW:       ## %bb.0:
3104 ; AVX512VLBW-NEXT:    vptestnmb %xmm0, %xmm0, %k1
3105 ; AVX512VLBW-NEXT:    vmovdqu8 %xmm1, (%rdi) {%k1}
3106 ; AVX512VLBW-NEXT:    retq
3107   %mask = icmp eq <16 x i8> %trigger, zeroinitializer
3108   call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %val, <16 x i8>* %addr, i32 4, <16 x i1> %mask)
3109   ret void
3112 define void @store_v32i8_v32i8(<32 x i8> %trigger, <32 x i8>* %addr, <32 x i8> %val) {
3113 ; SSE2-LABEL: store_v32i8_v32i8:
3114 ; SSE2:       ## %bb.0:
3115 ; SSE2-NEXT:    pxor %xmm4, %xmm4
3116 ; SSE2-NEXT:    pcmpeqb %xmm4, %xmm0
3117 ; SSE2-NEXT:    pmovmskb %xmm0, %ecx
3118 ; SSE2-NEXT:    pcmpeqb %xmm4, %xmm1
3119 ; SSE2-NEXT:    pmovmskb %xmm1, %eax
3120 ; SSE2-NEXT:    shll $16, %eax
3121 ; SSE2-NEXT:    orl %ecx, %eax
3122 ; SSE2-NEXT:    testb $1, %al
3123 ; SSE2-NEXT:    movd %xmm2, %ecx
3124 ; SSE2-NEXT:    jne LBB16_1
3125 ; SSE2-NEXT:  ## %bb.2: ## %else
3126 ; SSE2-NEXT:    testb $2, %al
3127 ; SSE2-NEXT:    jne LBB16_3
3128 ; SSE2-NEXT:  LBB16_4: ## %else2
3129 ; SSE2-NEXT:    testb $4, %al
3130 ; SSE2-NEXT:    jne LBB16_5
3131 ; SSE2-NEXT:  LBB16_6: ## %else4
3132 ; SSE2-NEXT:    testb $8, %al
3133 ; SSE2-NEXT:    je LBB16_8
3134 ; SSE2-NEXT:  LBB16_7: ## %cond.store5
3135 ; SSE2-NEXT:    shrl $24, %ecx
3136 ; SSE2-NEXT:    movb %cl, 3(%rdi)
3137 ; SSE2-NEXT:  LBB16_8: ## %else6
3138 ; SSE2-NEXT:    testb $16, %al
3139 ; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
3140 ; SSE2-NEXT:    je LBB16_10
3141 ; SSE2-NEXT:  ## %bb.9: ## %cond.store7
3142 ; SSE2-NEXT:    movb %cl, 4(%rdi)
3143 ; SSE2-NEXT:  LBB16_10: ## %else8
3144 ; SSE2-NEXT:    testb $32, %al
3145 ; SSE2-NEXT:    je LBB16_12
3146 ; SSE2-NEXT:  ## %bb.11: ## %cond.store9
3147 ; SSE2-NEXT:    movb %ch, 5(%rdi)
3148 ; SSE2-NEXT:  LBB16_12: ## %else10
3149 ; SSE2-NEXT:    testb $64, %al
3150 ; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
3151 ; SSE2-NEXT:    je LBB16_14
3152 ; SSE2-NEXT:  ## %bb.13: ## %cond.store11
3153 ; SSE2-NEXT:    movb %cl, 6(%rdi)
3154 ; SSE2-NEXT:  LBB16_14: ## %else12
3155 ; SSE2-NEXT:    testb $-128, %al
3156 ; SSE2-NEXT:    je LBB16_16
3157 ; SSE2-NEXT:  ## %bb.15: ## %cond.store13
3158 ; SSE2-NEXT:    movb %ch, 7(%rdi)
3159 ; SSE2-NEXT:  LBB16_16: ## %else14
3160 ; SSE2-NEXT:    testl $256, %eax ## imm = 0x100
3161 ; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
3162 ; SSE2-NEXT:    je LBB16_18
3163 ; SSE2-NEXT:  ## %bb.17: ## %cond.store15
3164 ; SSE2-NEXT:    movb %cl, 8(%rdi)
3165 ; SSE2-NEXT:  LBB16_18: ## %else16
3166 ; SSE2-NEXT:    testl $512, %eax ## imm = 0x200
3167 ; SSE2-NEXT:    je LBB16_20
3168 ; SSE2-NEXT:  ## %bb.19: ## %cond.store17
3169 ; SSE2-NEXT:    movb %ch, 9(%rdi)
3170 ; SSE2-NEXT:  LBB16_20: ## %else18
3171 ; SSE2-NEXT:    testl $1024, %eax ## imm = 0x400
3172 ; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
3173 ; SSE2-NEXT:    je LBB16_22
3174 ; SSE2-NEXT:  ## %bb.21: ## %cond.store19
3175 ; SSE2-NEXT:    movb %cl, 10(%rdi)
3176 ; SSE2-NEXT:  LBB16_22: ## %else20
3177 ; SSE2-NEXT:    testl $2048, %eax ## imm = 0x800
3178 ; SSE2-NEXT:    je LBB16_24
3179 ; SSE2-NEXT:  ## %bb.23: ## %cond.store21
3180 ; SSE2-NEXT:    movb %ch, 11(%rdi)
3181 ; SSE2-NEXT:  LBB16_24: ## %else22
3182 ; SSE2-NEXT:    testl $4096, %eax ## imm = 0x1000
3183 ; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
3184 ; SSE2-NEXT:    je LBB16_26
3185 ; SSE2-NEXT:  ## %bb.25: ## %cond.store23
3186 ; SSE2-NEXT:    movb %cl, 12(%rdi)
3187 ; SSE2-NEXT:  LBB16_26: ## %else24
3188 ; SSE2-NEXT:    testl $8192, %eax ## imm = 0x2000
3189 ; SSE2-NEXT:    je LBB16_28
3190 ; SSE2-NEXT:  ## %bb.27: ## %cond.store25
3191 ; SSE2-NEXT:    movb %ch, 13(%rdi)
3192 ; SSE2-NEXT:  LBB16_28: ## %else26
3193 ; SSE2-NEXT:    testl $16384, %eax ## imm = 0x4000
3194 ; SSE2-NEXT:    pextrw $7, %xmm2, %ecx
3195 ; SSE2-NEXT:    je LBB16_30
3196 ; SSE2-NEXT:  ## %bb.29: ## %cond.store27
3197 ; SSE2-NEXT:    movb %cl, 14(%rdi)
3198 ; SSE2-NEXT:  LBB16_30: ## %else28
3199 ; SSE2-NEXT:    testl $32768, %eax ## imm = 0x8000
3200 ; SSE2-NEXT:    je LBB16_32
3201 ; SSE2-NEXT:  ## %bb.31: ## %cond.store29
3202 ; SSE2-NEXT:    movb %ch, 15(%rdi)
3203 ; SSE2-NEXT:  LBB16_32: ## %else30
3204 ; SSE2-NEXT:    testl $65536, %eax ## imm = 0x10000
3205 ; SSE2-NEXT:    movd %xmm3, %ecx
3206 ; SSE2-NEXT:    jne LBB16_33
3207 ; SSE2-NEXT:  ## %bb.34: ## %else32
3208 ; SSE2-NEXT:    testl $131072, %eax ## imm = 0x20000
3209 ; SSE2-NEXT:    jne LBB16_35
3210 ; SSE2-NEXT:  LBB16_36: ## %else34
3211 ; SSE2-NEXT:    testl $262144, %eax ## imm = 0x40000
3212 ; SSE2-NEXT:    jne LBB16_37
3213 ; SSE2-NEXT:  LBB16_38: ## %else36
3214 ; SSE2-NEXT:    testl $524288, %eax ## imm = 0x80000
3215 ; SSE2-NEXT:    je LBB16_40
3216 ; SSE2-NEXT:  LBB16_39: ## %cond.store37
3217 ; SSE2-NEXT:    shrl $24, %ecx
3218 ; SSE2-NEXT:    movb %cl, 19(%rdi)
3219 ; SSE2-NEXT:  LBB16_40: ## %else38
3220 ; SSE2-NEXT:    testl $1048576, %eax ## imm = 0x100000
3221 ; SSE2-NEXT:    pextrw $2, %xmm3, %ecx
3222 ; SSE2-NEXT:    je LBB16_42
3223 ; SSE2-NEXT:  ## %bb.41: ## %cond.store39
3224 ; SSE2-NEXT:    movb %cl, 20(%rdi)
3225 ; SSE2-NEXT:  LBB16_42: ## %else40
3226 ; SSE2-NEXT:    testl $2097152, %eax ## imm = 0x200000
3227 ; SSE2-NEXT:    je LBB16_44
3228 ; SSE2-NEXT:  ## %bb.43: ## %cond.store41
3229 ; SSE2-NEXT:    movb %ch, 21(%rdi)
3230 ; SSE2-NEXT:  LBB16_44: ## %else42
3231 ; SSE2-NEXT:    testl $4194304, %eax ## imm = 0x400000
3232 ; SSE2-NEXT:    pextrw $3, %xmm3, %ecx
3233 ; SSE2-NEXT:    je LBB16_46
3234 ; SSE2-NEXT:  ## %bb.45: ## %cond.store43
3235 ; SSE2-NEXT:    movb %cl, 22(%rdi)
3236 ; SSE2-NEXT:  LBB16_46: ## %else44
3237 ; SSE2-NEXT:    testl $8388608, %eax ## imm = 0x800000
3238 ; SSE2-NEXT:    je LBB16_48
3239 ; SSE2-NEXT:  ## %bb.47: ## %cond.store45
3240 ; SSE2-NEXT:    movb %ch, 23(%rdi)
3241 ; SSE2-NEXT:  LBB16_48: ## %else46
3242 ; SSE2-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3243 ; SSE2-NEXT:    pextrw $4, %xmm3, %ecx
3244 ; SSE2-NEXT:    je LBB16_50
3245 ; SSE2-NEXT:  ## %bb.49: ## %cond.store47
3246 ; SSE2-NEXT:    movb %cl, 24(%rdi)
3247 ; SSE2-NEXT:  LBB16_50: ## %else48
3248 ; SSE2-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3249 ; SSE2-NEXT:    je LBB16_52
3250 ; SSE2-NEXT:  ## %bb.51: ## %cond.store49
3251 ; SSE2-NEXT:    movb %ch, 25(%rdi)
3252 ; SSE2-NEXT:  LBB16_52: ## %else50
3253 ; SSE2-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3254 ; SSE2-NEXT:    pextrw $5, %xmm3, %ecx
3255 ; SSE2-NEXT:    je LBB16_54
3256 ; SSE2-NEXT:  ## %bb.53: ## %cond.store51
3257 ; SSE2-NEXT:    movb %cl, 26(%rdi)
3258 ; SSE2-NEXT:  LBB16_54: ## %else52
3259 ; SSE2-NEXT:    testl $134217728, %eax ## imm = 0x8000000
3260 ; SSE2-NEXT:    je LBB16_56
3261 ; SSE2-NEXT:  ## %bb.55: ## %cond.store53
3262 ; SSE2-NEXT:    movb %ch, 27(%rdi)
3263 ; SSE2-NEXT:  LBB16_56: ## %else54
3264 ; SSE2-NEXT:    testl $268435456, %eax ## imm = 0x10000000
3265 ; SSE2-NEXT:    pextrw $6, %xmm3, %ecx
3266 ; SSE2-NEXT:    je LBB16_58
3267 ; SSE2-NEXT:  ## %bb.57: ## %cond.store55
3268 ; SSE2-NEXT:    movb %cl, 28(%rdi)
3269 ; SSE2-NEXT:  LBB16_58: ## %else56
3270 ; SSE2-NEXT:    testl $536870912, %eax ## imm = 0x20000000
3271 ; SSE2-NEXT:    je LBB16_60
3272 ; SSE2-NEXT:  ## %bb.59: ## %cond.store57
3273 ; SSE2-NEXT:    movb %ch, 29(%rdi)
3274 ; SSE2-NEXT:  LBB16_60: ## %else58
3275 ; SSE2-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
3276 ; SSE2-NEXT:    pextrw $7, %xmm3, %ecx
3277 ; SSE2-NEXT:    jne LBB16_61
3278 ; SSE2-NEXT:  ## %bb.62: ## %else60
3279 ; SSE2-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3280 ; SSE2-NEXT:    jne LBB16_63
3281 ; SSE2-NEXT:  LBB16_64: ## %else62
3282 ; SSE2-NEXT:    retq
3283 ; SSE2-NEXT:  LBB16_1: ## %cond.store
3284 ; SSE2-NEXT:    movb %cl, (%rdi)
3285 ; SSE2-NEXT:    testb $2, %al
3286 ; SSE2-NEXT:    je LBB16_4
3287 ; SSE2-NEXT:  LBB16_3: ## %cond.store1
3288 ; SSE2-NEXT:    movb %ch, 1(%rdi)
3289 ; SSE2-NEXT:    testb $4, %al
3290 ; SSE2-NEXT:    je LBB16_6
3291 ; SSE2-NEXT:  LBB16_5: ## %cond.store3
3292 ; SSE2-NEXT:    movl %ecx, %edx
3293 ; SSE2-NEXT:    shrl $16, %edx
3294 ; SSE2-NEXT:    movb %dl, 2(%rdi)
3295 ; SSE2-NEXT:    testb $8, %al
3296 ; SSE2-NEXT:    jne LBB16_7
3297 ; SSE2-NEXT:    jmp LBB16_8
3298 ; SSE2-NEXT:  LBB16_33: ## %cond.store31
3299 ; SSE2-NEXT:    movb %cl, 16(%rdi)
3300 ; SSE2-NEXT:    testl $131072, %eax ## imm = 0x20000
3301 ; SSE2-NEXT:    je LBB16_36
3302 ; SSE2-NEXT:  LBB16_35: ## %cond.store33
3303 ; SSE2-NEXT:    movb %ch, 17(%rdi)
3304 ; SSE2-NEXT:    testl $262144, %eax ## imm = 0x40000
3305 ; SSE2-NEXT:    je LBB16_38
3306 ; SSE2-NEXT:  LBB16_37: ## %cond.store35
3307 ; SSE2-NEXT:    movl %ecx, %edx
3308 ; SSE2-NEXT:    shrl $16, %edx
3309 ; SSE2-NEXT:    movb %dl, 18(%rdi)
3310 ; SSE2-NEXT:    testl $524288, %eax ## imm = 0x80000
3311 ; SSE2-NEXT:    jne LBB16_39
3312 ; SSE2-NEXT:    jmp LBB16_40
3313 ; SSE2-NEXT:  LBB16_61: ## %cond.store59
3314 ; SSE2-NEXT:    movb %cl, 30(%rdi)
3315 ; SSE2-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3316 ; SSE2-NEXT:    je LBB16_64
3317 ; SSE2-NEXT:  LBB16_63: ## %cond.store61
3318 ; SSE2-NEXT:    movb %ch, 31(%rdi)
3319 ; SSE2-NEXT:    retq
3321 ; SSE4-LABEL: store_v32i8_v32i8:
3322 ; SSE4:       ## %bb.0:
3323 ; SSE4-NEXT:    pxor %xmm4, %xmm4
3324 ; SSE4-NEXT:    pcmpeqb %xmm4, %xmm0
3325 ; SSE4-NEXT:    pmovmskb %xmm0, %ecx
3326 ; SSE4-NEXT:    pcmpeqb %xmm4, %xmm1
3327 ; SSE4-NEXT:    pmovmskb %xmm1, %eax
3328 ; SSE4-NEXT:    shll $16, %eax
3329 ; SSE4-NEXT:    orl %ecx, %eax
3330 ; SSE4-NEXT:    testb $1, %al
3331 ; SSE4-NEXT:    jne LBB16_1
3332 ; SSE4-NEXT:  ## %bb.2: ## %else
3333 ; SSE4-NEXT:    testb $2, %al
3334 ; SSE4-NEXT:    jne LBB16_3
3335 ; SSE4-NEXT:  LBB16_4: ## %else2
3336 ; SSE4-NEXT:    testb $4, %al
3337 ; SSE4-NEXT:    jne LBB16_5
3338 ; SSE4-NEXT:  LBB16_6: ## %else4
3339 ; SSE4-NEXT:    testb $8, %al
3340 ; SSE4-NEXT:    jne LBB16_7
3341 ; SSE4-NEXT:  LBB16_8: ## %else6
3342 ; SSE4-NEXT:    testb $16, %al
3343 ; SSE4-NEXT:    jne LBB16_9
3344 ; SSE4-NEXT:  LBB16_10: ## %else8
3345 ; SSE4-NEXT:    testb $32, %al
3346 ; SSE4-NEXT:    jne LBB16_11
3347 ; SSE4-NEXT:  LBB16_12: ## %else10
3348 ; SSE4-NEXT:    testb $64, %al
3349 ; SSE4-NEXT:    jne LBB16_13
3350 ; SSE4-NEXT:  LBB16_14: ## %else12
3351 ; SSE4-NEXT:    testb $-128, %al
3352 ; SSE4-NEXT:    jne LBB16_15
3353 ; SSE4-NEXT:  LBB16_16: ## %else14
3354 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
3355 ; SSE4-NEXT:    jne LBB16_17
3356 ; SSE4-NEXT:  LBB16_18: ## %else16
3357 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
3358 ; SSE4-NEXT:    jne LBB16_19
3359 ; SSE4-NEXT:  LBB16_20: ## %else18
3360 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
3361 ; SSE4-NEXT:    jne LBB16_21
3362 ; SSE4-NEXT:  LBB16_22: ## %else20
3363 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
3364 ; SSE4-NEXT:    jne LBB16_23
3365 ; SSE4-NEXT:  LBB16_24: ## %else22
3366 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
3367 ; SSE4-NEXT:    jne LBB16_25
3368 ; SSE4-NEXT:  LBB16_26: ## %else24
3369 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
3370 ; SSE4-NEXT:    jne LBB16_27
3371 ; SSE4-NEXT:  LBB16_28: ## %else26
3372 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
3373 ; SSE4-NEXT:    jne LBB16_29
3374 ; SSE4-NEXT:  LBB16_30: ## %else28
3375 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
3376 ; SSE4-NEXT:    jne LBB16_31
3377 ; SSE4-NEXT:  LBB16_32: ## %else30
3378 ; SSE4-NEXT:    testl $65536, %eax ## imm = 0x10000
3379 ; SSE4-NEXT:    jne LBB16_33
3380 ; SSE4-NEXT:  LBB16_34: ## %else32
3381 ; SSE4-NEXT:    testl $131072, %eax ## imm = 0x20000
3382 ; SSE4-NEXT:    jne LBB16_35
3383 ; SSE4-NEXT:  LBB16_36: ## %else34
3384 ; SSE4-NEXT:    testl $262144, %eax ## imm = 0x40000
3385 ; SSE4-NEXT:    jne LBB16_37
3386 ; SSE4-NEXT:  LBB16_38: ## %else36
3387 ; SSE4-NEXT:    testl $524288, %eax ## imm = 0x80000
3388 ; SSE4-NEXT:    jne LBB16_39
3389 ; SSE4-NEXT:  LBB16_40: ## %else38
3390 ; SSE4-NEXT:    testl $1048576, %eax ## imm = 0x100000
3391 ; SSE4-NEXT:    jne LBB16_41
3392 ; SSE4-NEXT:  LBB16_42: ## %else40
3393 ; SSE4-NEXT:    testl $2097152, %eax ## imm = 0x200000
3394 ; SSE4-NEXT:    jne LBB16_43
3395 ; SSE4-NEXT:  LBB16_44: ## %else42
3396 ; SSE4-NEXT:    testl $4194304, %eax ## imm = 0x400000
3397 ; SSE4-NEXT:    jne LBB16_45
3398 ; SSE4-NEXT:  LBB16_46: ## %else44
3399 ; SSE4-NEXT:    testl $8388608, %eax ## imm = 0x800000
3400 ; SSE4-NEXT:    jne LBB16_47
3401 ; SSE4-NEXT:  LBB16_48: ## %else46
3402 ; SSE4-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3403 ; SSE4-NEXT:    jne LBB16_49
3404 ; SSE4-NEXT:  LBB16_50: ## %else48
3405 ; SSE4-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3406 ; SSE4-NEXT:    jne LBB16_51
3407 ; SSE4-NEXT:  LBB16_52: ## %else50
3408 ; SSE4-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3409 ; SSE4-NEXT:    jne LBB16_53
3410 ; SSE4-NEXT:  LBB16_54: ## %else52
3411 ; SSE4-NEXT:    testl $134217728, %eax ## imm = 0x8000000
3412 ; SSE4-NEXT:    jne LBB16_55
3413 ; SSE4-NEXT:  LBB16_56: ## %else54
3414 ; SSE4-NEXT:    testl $268435456, %eax ## imm = 0x10000000
3415 ; SSE4-NEXT:    jne LBB16_57
3416 ; SSE4-NEXT:  LBB16_58: ## %else56
3417 ; SSE4-NEXT:    testl $536870912, %eax ## imm = 0x20000000
3418 ; SSE4-NEXT:    jne LBB16_59
3419 ; SSE4-NEXT:  LBB16_60: ## %else58
3420 ; SSE4-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
3421 ; SSE4-NEXT:    jne LBB16_61
3422 ; SSE4-NEXT:  LBB16_62: ## %else60
3423 ; SSE4-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3424 ; SSE4-NEXT:    jne LBB16_63
3425 ; SSE4-NEXT:  LBB16_64: ## %else62
3426 ; SSE4-NEXT:    retq
3427 ; SSE4-NEXT:  LBB16_1: ## %cond.store
3428 ; SSE4-NEXT:    pextrb $0, %xmm2, (%rdi)
3429 ; SSE4-NEXT:    testb $2, %al
3430 ; SSE4-NEXT:    je LBB16_4
3431 ; SSE4-NEXT:  LBB16_3: ## %cond.store1
3432 ; SSE4-NEXT:    pextrb $1, %xmm2, 1(%rdi)
3433 ; SSE4-NEXT:    testb $4, %al
3434 ; SSE4-NEXT:    je LBB16_6
3435 ; SSE4-NEXT:  LBB16_5: ## %cond.store3
3436 ; SSE4-NEXT:    pextrb $2, %xmm2, 2(%rdi)
3437 ; SSE4-NEXT:    testb $8, %al
3438 ; SSE4-NEXT:    je LBB16_8
3439 ; SSE4-NEXT:  LBB16_7: ## %cond.store5
3440 ; SSE4-NEXT:    pextrb $3, %xmm2, 3(%rdi)
3441 ; SSE4-NEXT:    testb $16, %al
3442 ; SSE4-NEXT:    je LBB16_10
3443 ; SSE4-NEXT:  LBB16_9: ## %cond.store7
3444 ; SSE4-NEXT:    pextrb $4, %xmm2, 4(%rdi)
3445 ; SSE4-NEXT:    testb $32, %al
3446 ; SSE4-NEXT:    je LBB16_12
3447 ; SSE4-NEXT:  LBB16_11: ## %cond.store9
3448 ; SSE4-NEXT:    pextrb $5, %xmm2, 5(%rdi)
3449 ; SSE4-NEXT:    testb $64, %al
3450 ; SSE4-NEXT:    je LBB16_14
3451 ; SSE4-NEXT:  LBB16_13: ## %cond.store11
3452 ; SSE4-NEXT:    pextrb $6, %xmm2, 6(%rdi)
3453 ; SSE4-NEXT:    testb $-128, %al
3454 ; SSE4-NEXT:    je LBB16_16
3455 ; SSE4-NEXT:  LBB16_15: ## %cond.store13
3456 ; SSE4-NEXT:    pextrb $7, %xmm2, 7(%rdi)
3457 ; SSE4-NEXT:    testl $256, %eax ## imm = 0x100
3458 ; SSE4-NEXT:    je LBB16_18
3459 ; SSE4-NEXT:  LBB16_17: ## %cond.store15
3460 ; SSE4-NEXT:    pextrb $8, %xmm2, 8(%rdi)
3461 ; SSE4-NEXT:    testl $512, %eax ## imm = 0x200
3462 ; SSE4-NEXT:    je LBB16_20
3463 ; SSE4-NEXT:  LBB16_19: ## %cond.store17
3464 ; SSE4-NEXT:    pextrb $9, %xmm2, 9(%rdi)
3465 ; SSE4-NEXT:    testl $1024, %eax ## imm = 0x400
3466 ; SSE4-NEXT:    je LBB16_22
3467 ; SSE4-NEXT:  LBB16_21: ## %cond.store19
3468 ; SSE4-NEXT:    pextrb $10, %xmm2, 10(%rdi)
3469 ; SSE4-NEXT:    testl $2048, %eax ## imm = 0x800
3470 ; SSE4-NEXT:    je LBB16_24
3471 ; SSE4-NEXT:  LBB16_23: ## %cond.store21
3472 ; SSE4-NEXT:    pextrb $11, %xmm2, 11(%rdi)
3473 ; SSE4-NEXT:    testl $4096, %eax ## imm = 0x1000
3474 ; SSE4-NEXT:    je LBB16_26
3475 ; SSE4-NEXT:  LBB16_25: ## %cond.store23
3476 ; SSE4-NEXT:    pextrb $12, %xmm2, 12(%rdi)
3477 ; SSE4-NEXT:    testl $8192, %eax ## imm = 0x2000
3478 ; SSE4-NEXT:    je LBB16_28
3479 ; SSE4-NEXT:  LBB16_27: ## %cond.store25
3480 ; SSE4-NEXT:    pextrb $13, %xmm2, 13(%rdi)
3481 ; SSE4-NEXT:    testl $16384, %eax ## imm = 0x4000
3482 ; SSE4-NEXT:    je LBB16_30
3483 ; SSE4-NEXT:  LBB16_29: ## %cond.store27
3484 ; SSE4-NEXT:    pextrb $14, %xmm2, 14(%rdi)
3485 ; SSE4-NEXT:    testl $32768, %eax ## imm = 0x8000
3486 ; SSE4-NEXT:    je LBB16_32
3487 ; SSE4-NEXT:  LBB16_31: ## %cond.store29
3488 ; SSE4-NEXT:    pextrb $15, %xmm2, 15(%rdi)
3489 ; SSE4-NEXT:    testl $65536, %eax ## imm = 0x10000
3490 ; SSE4-NEXT:    je LBB16_34
3491 ; SSE4-NEXT:  LBB16_33: ## %cond.store31
3492 ; SSE4-NEXT:    pextrb $0, %xmm3, 16(%rdi)
3493 ; SSE4-NEXT:    testl $131072, %eax ## imm = 0x20000
3494 ; SSE4-NEXT:    je LBB16_36
3495 ; SSE4-NEXT:  LBB16_35: ## %cond.store33
3496 ; SSE4-NEXT:    pextrb $1, %xmm3, 17(%rdi)
3497 ; SSE4-NEXT:    testl $262144, %eax ## imm = 0x40000
3498 ; SSE4-NEXT:    je LBB16_38
3499 ; SSE4-NEXT:  LBB16_37: ## %cond.store35
3500 ; SSE4-NEXT:    pextrb $2, %xmm3, 18(%rdi)
3501 ; SSE4-NEXT:    testl $524288, %eax ## imm = 0x80000
3502 ; SSE4-NEXT:    je LBB16_40
3503 ; SSE4-NEXT:  LBB16_39: ## %cond.store37
3504 ; SSE4-NEXT:    pextrb $3, %xmm3, 19(%rdi)
3505 ; SSE4-NEXT:    testl $1048576, %eax ## imm = 0x100000
3506 ; SSE4-NEXT:    je LBB16_42
3507 ; SSE4-NEXT:  LBB16_41: ## %cond.store39
3508 ; SSE4-NEXT:    pextrb $4, %xmm3, 20(%rdi)
3509 ; SSE4-NEXT:    testl $2097152, %eax ## imm = 0x200000
3510 ; SSE4-NEXT:    je LBB16_44
3511 ; SSE4-NEXT:  LBB16_43: ## %cond.store41
3512 ; SSE4-NEXT:    pextrb $5, %xmm3, 21(%rdi)
3513 ; SSE4-NEXT:    testl $4194304, %eax ## imm = 0x400000
3514 ; SSE4-NEXT:    je LBB16_46
3515 ; SSE4-NEXT:  LBB16_45: ## %cond.store43
3516 ; SSE4-NEXT:    pextrb $6, %xmm3, 22(%rdi)
3517 ; SSE4-NEXT:    testl $8388608, %eax ## imm = 0x800000
3518 ; SSE4-NEXT:    je LBB16_48
3519 ; SSE4-NEXT:  LBB16_47: ## %cond.store45
3520 ; SSE4-NEXT:    pextrb $7, %xmm3, 23(%rdi)
3521 ; SSE4-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3522 ; SSE4-NEXT:    je LBB16_50
3523 ; SSE4-NEXT:  LBB16_49: ## %cond.store47
3524 ; SSE4-NEXT:    pextrb $8, %xmm3, 24(%rdi)
3525 ; SSE4-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3526 ; SSE4-NEXT:    je LBB16_52
3527 ; SSE4-NEXT:  LBB16_51: ## %cond.store49
3528 ; SSE4-NEXT:    pextrb $9, %xmm3, 25(%rdi)
3529 ; SSE4-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3530 ; SSE4-NEXT:    je LBB16_54
3531 ; SSE4-NEXT:  LBB16_53: ## %cond.store51
3532 ; SSE4-NEXT:    pextrb $10, %xmm3, 26(%rdi)
3533 ; SSE4-NEXT:    testl $134217728, %eax ## imm = 0x8000000
3534 ; SSE4-NEXT:    je LBB16_56
3535 ; SSE4-NEXT:  LBB16_55: ## %cond.store53
3536 ; SSE4-NEXT:    pextrb $11, %xmm3, 27(%rdi)
3537 ; SSE4-NEXT:    testl $268435456, %eax ## imm = 0x10000000
3538 ; SSE4-NEXT:    je LBB16_58
3539 ; SSE4-NEXT:  LBB16_57: ## %cond.store55
3540 ; SSE4-NEXT:    pextrb $12, %xmm3, 28(%rdi)
3541 ; SSE4-NEXT:    testl $536870912, %eax ## imm = 0x20000000
3542 ; SSE4-NEXT:    je LBB16_60
3543 ; SSE4-NEXT:  LBB16_59: ## %cond.store57
3544 ; SSE4-NEXT:    pextrb $13, %xmm3, 29(%rdi)
3545 ; SSE4-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
3546 ; SSE4-NEXT:    je LBB16_62
3547 ; SSE4-NEXT:  LBB16_61: ## %cond.store59
3548 ; SSE4-NEXT:    pextrb $14, %xmm3, 30(%rdi)
3549 ; SSE4-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3550 ; SSE4-NEXT:    je LBB16_64
3551 ; SSE4-NEXT:  LBB16_63: ## %cond.store61
3552 ; SSE4-NEXT:    pextrb $15, %xmm3, 31(%rdi)
3553 ; SSE4-NEXT:    retq
3555 ; AVX1-LABEL: store_v32i8_v32i8:
3556 ; AVX1:       ## %bb.0:
3557 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3558 ; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm3
3559 ; AVX1-NEXT:    vpmovmskb %xmm3, %ecx
3560 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3561 ; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
3562 ; AVX1-NEXT:    vpmovmskb %xmm0, %eax
3563 ; AVX1-NEXT:    shll $16, %eax
3564 ; AVX1-NEXT:    orl %ecx, %eax
3565 ; AVX1-NEXT:    testb $1, %al
3566 ; AVX1-NEXT:    jne LBB16_1
3567 ; AVX1-NEXT:  ## %bb.2: ## %else
3568 ; AVX1-NEXT:    testb $2, %al
3569 ; AVX1-NEXT:    jne LBB16_3
3570 ; AVX1-NEXT:  LBB16_4: ## %else2
3571 ; AVX1-NEXT:    testb $4, %al
3572 ; AVX1-NEXT:    jne LBB16_5
3573 ; AVX1-NEXT:  LBB16_6: ## %else4
3574 ; AVX1-NEXT:    testb $8, %al
3575 ; AVX1-NEXT:    jne LBB16_7
3576 ; AVX1-NEXT:  LBB16_8: ## %else6
3577 ; AVX1-NEXT:    testb $16, %al
3578 ; AVX1-NEXT:    jne LBB16_9
3579 ; AVX1-NEXT:  LBB16_10: ## %else8
3580 ; AVX1-NEXT:    testb $32, %al
3581 ; AVX1-NEXT:    jne LBB16_11
3582 ; AVX1-NEXT:  LBB16_12: ## %else10
3583 ; AVX1-NEXT:    testb $64, %al
3584 ; AVX1-NEXT:    jne LBB16_13
3585 ; AVX1-NEXT:  LBB16_14: ## %else12
3586 ; AVX1-NEXT:    testb $-128, %al
3587 ; AVX1-NEXT:    jne LBB16_15
3588 ; AVX1-NEXT:  LBB16_16: ## %else14
3589 ; AVX1-NEXT:    testl $256, %eax ## imm = 0x100
3590 ; AVX1-NEXT:    jne LBB16_17
3591 ; AVX1-NEXT:  LBB16_18: ## %else16
3592 ; AVX1-NEXT:    testl $512, %eax ## imm = 0x200
3593 ; AVX1-NEXT:    jne LBB16_19
3594 ; AVX1-NEXT:  LBB16_20: ## %else18
3595 ; AVX1-NEXT:    testl $1024, %eax ## imm = 0x400
3596 ; AVX1-NEXT:    jne LBB16_21
3597 ; AVX1-NEXT:  LBB16_22: ## %else20
3598 ; AVX1-NEXT:    testl $2048, %eax ## imm = 0x800
3599 ; AVX1-NEXT:    jne LBB16_23
3600 ; AVX1-NEXT:  LBB16_24: ## %else22
3601 ; AVX1-NEXT:    testl $4096, %eax ## imm = 0x1000
3602 ; AVX1-NEXT:    jne LBB16_25
3603 ; AVX1-NEXT:  LBB16_26: ## %else24
3604 ; AVX1-NEXT:    testl $8192, %eax ## imm = 0x2000
3605 ; AVX1-NEXT:    jne LBB16_27
3606 ; AVX1-NEXT:  LBB16_28: ## %else26
3607 ; AVX1-NEXT:    testl $16384, %eax ## imm = 0x4000
3608 ; AVX1-NEXT:    jne LBB16_29
3609 ; AVX1-NEXT:  LBB16_30: ## %else28
3610 ; AVX1-NEXT:    testl $32768, %eax ## imm = 0x8000
3611 ; AVX1-NEXT:    je LBB16_32
3612 ; AVX1-NEXT:  LBB16_31: ## %cond.store29
3613 ; AVX1-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
3614 ; AVX1-NEXT:  LBB16_32: ## %else30
3615 ; AVX1-NEXT:    testl $65536, %eax ## imm = 0x10000
3616 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
3617 ; AVX1-NEXT:    jne LBB16_33
3618 ; AVX1-NEXT:  ## %bb.34: ## %else32
3619 ; AVX1-NEXT:    testl $131072, %eax ## imm = 0x20000
3620 ; AVX1-NEXT:    jne LBB16_35
3621 ; AVX1-NEXT:  LBB16_36: ## %else34
3622 ; AVX1-NEXT:    testl $262144, %eax ## imm = 0x40000
3623 ; AVX1-NEXT:    jne LBB16_37
3624 ; AVX1-NEXT:  LBB16_38: ## %else36
3625 ; AVX1-NEXT:    testl $524288, %eax ## imm = 0x80000
3626 ; AVX1-NEXT:    jne LBB16_39
3627 ; AVX1-NEXT:  LBB16_40: ## %else38
3628 ; AVX1-NEXT:    testl $1048576, %eax ## imm = 0x100000
3629 ; AVX1-NEXT:    jne LBB16_41
3630 ; AVX1-NEXT:  LBB16_42: ## %else40
3631 ; AVX1-NEXT:    testl $2097152, %eax ## imm = 0x200000
3632 ; AVX1-NEXT:    jne LBB16_43
3633 ; AVX1-NEXT:  LBB16_44: ## %else42
3634 ; AVX1-NEXT:    testl $4194304, %eax ## imm = 0x400000
3635 ; AVX1-NEXT:    jne LBB16_45
3636 ; AVX1-NEXT:  LBB16_46: ## %else44
3637 ; AVX1-NEXT:    testl $8388608, %eax ## imm = 0x800000
3638 ; AVX1-NEXT:    jne LBB16_47
3639 ; AVX1-NEXT:  LBB16_48: ## %else46
3640 ; AVX1-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3641 ; AVX1-NEXT:    jne LBB16_49
3642 ; AVX1-NEXT:  LBB16_50: ## %else48
3643 ; AVX1-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3644 ; AVX1-NEXT:    jne LBB16_51
3645 ; AVX1-NEXT:  LBB16_52: ## %else50
3646 ; AVX1-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3647 ; AVX1-NEXT:    jne LBB16_53
3648 ; AVX1-NEXT:  LBB16_54: ## %else52
3649 ; AVX1-NEXT:    testl $134217728, %eax ## imm = 0x8000000
3650 ; AVX1-NEXT:    jne LBB16_55
3651 ; AVX1-NEXT:  LBB16_56: ## %else54
3652 ; AVX1-NEXT:    testl $268435456, %eax ## imm = 0x10000000
3653 ; AVX1-NEXT:    jne LBB16_57
3654 ; AVX1-NEXT:  LBB16_58: ## %else56
3655 ; AVX1-NEXT:    testl $536870912, %eax ## imm = 0x20000000
3656 ; AVX1-NEXT:    jne LBB16_59
3657 ; AVX1-NEXT:  LBB16_60: ## %else58
3658 ; AVX1-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
3659 ; AVX1-NEXT:    jne LBB16_61
3660 ; AVX1-NEXT:  LBB16_62: ## %else60
3661 ; AVX1-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3662 ; AVX1-NEXT:    jne LBB16_63
3663 ; AVX1-NEXT:  LBB16_64: ## %else62
3664 ; AVX1-NEXT:    vzeroupper
3665 ; AVX1-NEXT:    retq
3666 ; AVX1-NEXT:  LBB16_1: ## %cond.store
3667 ; AVX1-NEXT:    vpextrb $0, %xmm1, (%rdi)
3668 ; AVX1-NEXT:    testb $2, %al
3669 ; AVX1-NEXT:    je LBB16_4
3670 ; AVX1-NEXT:  LBB16_3: ## %cond.store1
3671 ; AVX1-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
3672 ; AVX1-NEXT:    testb $4, %al
3673 ; AVX1-NEXT:    je LBB16_6
3674 ; AVX1-NEXT:  LBB16_5: ## %cond.store3
3675 ; AVX1-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
3676 ; AVX1-NEXT:    testb $8, %al
3677 ; AVX1-NEXT:    je LBB16_8
3678 ; AVX1-NEXT:  LBB16_7: ## %cond.store5
3679 ; AVX1-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
3680 ; AVX1-NEXT:    testb $16, %al
3681 ; AVX1-NEXT:    je LBB16_10
3682 ; AVX1-NEXT:  LBB16_9: ## %cond.store7
3683 ; AVX1-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
3684 ; AVX1-NEXT:    testb $32, %al
3685 ; AVX1-NEXT:    je LBB16_12
3686 ; AVX1-NEXT:  LBB16_11: ## %cond.store9
3687 ; AVX1-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
3688 ; AVX1-NEXT:    testb $64, %al
3689 ; AVX1-NEXT:    je LBB16_14
3690 ; AVX1-NEXT:  LBB16_13: ## %cond.store11
3691 ; AVX1-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
3692 ; AVX1-NEXT:    testb $-128, %al
3693 ; AVX1-NEXT:    je LBB16_16
3694 ; AVX1-NEXT:  LBB16_15: ## %cond.store13
3695 ; AVX1-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
3696 ; AVX1-NEXT:    testl $256, %eax ## imm = 0x100
3697 ; AVX1-NEXT:    je LBB16_18
3698 ; AVX1-NEXT:  LBB16_17: ## %cond.store15
3699 ; AVX1-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
3700 ; AVX1-NEXT:    testl $512, %eax ## imm = 0x200
3701 ; AVX1-NEXT:    je LBB16_20
3702 ; AVX1-NEXT:  LBB16_19: ## %cond.store17
3703 ; AVX1-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
3704 ; AVX1-NEXT:    testl $1024, %eax ## imm = 0x400
3705 ; AVX1-NEXT:    je LBB16_22
3706 ; AVX1-NEXT:  LBB16_21: ## %cond.store19
3707 ; AVX1-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
3708 ; AVX1-NEXT:    testl $2048, %eax ## imm = 0x800
3709 ; AVX1-NEXT:    je LBB16_24
3710 ; AVX1-NEXT:  LBB16_23: ## %cond.store21
3711 ; AVX1-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
3712 ; AVX1-NEXT:    testl $4096, %eax ## imm = 0x1000
3713 ; AVX1-NEXT:    je LBB16_26
3714 ; AVX1-NEXT:  LBB16_25: ## %cond.store23
3715 ; AVX1-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
3716 ; AVX1-NEXT:    testl $8192, %eax ## imm = 0x2000
3717 ; AVX1-NEXT:    je LBB16_28
3718 ; AVX1-NEXT:  LBB16_27: ## %cond.store25
3719 ; AVX1-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
3720 ; AVX1-NEXT:    testl $16384, %eax ## imm = 0x4000
3721 ; AVX1-NEXT:    je LBB16_30
3722 ; AVX1-NEXT:  LBB16_29: ## %cond.store27
3723 ; AVX1-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
3724 ; AVX1-NEXT:    testl $32768, %eax ## imm = 0x8000
3725 ; AVX1-NEXT:    jne LBB16_31
3726 ; AVX1-NEXT:    jmp LBB16_32
3727 ; AVX1-NEXT:  LBB16_33: ## %cond.store31
3728 ; AVX1-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
3729 ; AVX1-NEXT:    testl $131072, %eax ## imm = 0x20000
3730 ; AVX1-NEXT:    je LBB16_36
3731 ; AVX1-NEXT:  LBB16_35: ## %cond.store33
3732 ; AVX1-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
3733 ; AVX1-NEXT:    testl $262144, %eax ## imm = 0x40000
3734 ; AVX1-NEXT:    je LBB16_38
3735 ; AVX1-NEXT:  LBB16_37: ## %cond.store35
3736 ; AVX1-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
3737 ; AVX1-NEXT:    testl $524288, %eax ## imm = 0x80000
3738 ; AVX1-NEXT:    je LBB16_40
3739 ; AVX1-NEXT:  LBB16_39: ## %cond.store37
3740 ; AVX1-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
3741 ; AVX1-NEXT:    testl $1048576, %eax ## imm = 0x100000
3742 ; AVX1-NEXT:    je LBB16_42
3743 ; AVX1-NEXT:  LBB16_41: ## %cond.store39
3744 ; AVX1-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
3745 ; AVX1-NEXT:    testl $2097152, %eax ## imm = 0x200000
3746 ; AVX1-NEXT:    je LBB16_44
3747 ; AVX1-NEXT:  LBB16_43: ## %cond.store41
3748 ; AVX1-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
3749 ; AVX1-NEXT:    testl $4194304, %eax ## imm = 0x400000
3750 ; AVX1-NEXT:    je LBB16_46
3751 ; AVX1-NEXT:  LBB16_45: ## %cond.store43
3752 ; AVX1-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
3753 ; AVX1-NEXT:    testl $8388608, %eax ## imm = 0x800000
3754 ; AVX1-NEXT:    je LBB16_48
3755 ; AVX1-NEXT:  LBB16_47: ## %cond.store45
3756 ; AVX1-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
3757 ; AVX1-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3758 ; AVX1-NEXT:    je LBB16_50
3759 ; AVX1-NEXT:  LBB16_49: ## %cond.store47
3760 ; AVX1-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
3761 ; AVX1-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3762 ; AVX1-NEXT:    je LBB16_52
3763 ; AVX1-NEXT:  LBB16_51: ## %cond.store49
3764 ; AVX1-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
3765 ; AVX1-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3766 ; AVX1-NEXT:    je LBB16_54
3767 ; AVX1-NEXT:  LBB16_53: ## %cond.store51
3768 ; AVX1-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
3769 ; AVX1-NEXT:    testl $134217728, %eax ## imm = 0x8000000
3770 ; AVX1-NEXT:    je LBB16_56
3771 ; AVX1-NEXT:  LBB16_55: ## %cond.store53
3772 ; AVX1-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
3773 ; AVX1-NEXT:    testl $268435456, %eax ## imm = 0x10000000
3774 ; AVX1-NEXT:    je LBB16_58
3775 ; AVX1-NEXT:  LBB16_57: ## %cond.store55
3776 ; AVX1-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
3777 ; AVX1-NEXT:    testl $536870912, %eax ## imm = 0x20000000
3778 ; AVX1-NEXT:    je LBB16_60
3779 ; AVX1-NEXT:  LBB16_59: ## %cond.store57
3780 ; AVX1-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
3781 ; AVX1-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
3782 ; AVX1-NEXT:    je LBB16_62
3783 ; AVX1-NEXT:  LBB16_61: ## %cond.store59
3784 ; AVX1-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
3785 ; AVX1-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3786 ; AVX1-NEXT:    je LBB16_64
3787 ; AVX1-NEXT:  LBB16_63: ## %cond.store61
3788 ; AVX1-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
3789 ; AVX1-NEXT:    vzeroupper
3790 ; AVX1-NEXT:    retq
3792 ; AVX2-LABEL: store_v32i8_v32i8:
3793 ; AVX2:       ## %bb.0:
3794 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3795 ; AVX2-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
3796 ; AVX2-NEXT:    vpmovmskb %ymm0, %eax
3797 ; AVX2-NEXT:    testb $1, %al
3798 ; AVX2-NEXT:    jne LBB16_1
3799 ; AVX2-NEXT:  ## %bb.2: ## %else
3800 ; AVX2-NEXT:    testb $2, %al
3801 ; AVX2-NEXT:    jne LBB16_3
3802 ; AVX2-NEXT:  LBB16_4: ## %else2
3803 ; AVX2-NEXT:    testb $4, %al
3804 ; AVX2-NEXT:    jne LBB16_5
3805 ; AVX2-NEXT:  LBB16_6: ## %else4
3806 ; AVX2-NEXT:    testb $8, %al
3807 ; AVX2-NEXT:    jne LBB16_7
3808 ; AVX2-NEXT:  LBB16_8: ## %else6
3809 ; AVX2-NEXT:    testb $16, %al
3810 ; AVX2-NEXT:    jne LBB16_9
3811 ; AVX2-NEXT:  LBB16_10: ## %else8
3812 ; AVX2-NEXT:    testb $32, %al
3813 ; AVX2-NEXT:    jne LBB16_11
3814 ; AVX2-NEXT:  LBB16_12: ## %else10
3815 ; AVX2-NEXT:    testb $64, %al
3816 ; AVX2-NEXT:    jne LBB16_13
3817 ; AVX2-NEXT:  LBB16_14: ## %else12
3818 ; AVX2-NEXT:    testb $-128, %al
3819 ; AVX2-NEXT:    jne LBB16_15
3820 ; AVX2-NEXT:  LBB16_16: ## %else14
3821 ; AVX2-NEXT:    testl $256, %eax ## imm = 0x100
3822 ; AVX2-NEXT:    jne LBB16_17
3823 ; AVX2-NEXT:  LBB16_18: ## %else16
3824 ; AVX2-NEXT:    testl $512, %eax ## imm = 0x200
3825 ; AVX2-NEXT:    jne LBB16_19
3826 ; AVX2-NEXT:  LBB16_20: ## %else18
3827 ; AVX2-NEXT:    testl $1024, %eax ## imm = 0x400
3828 ; AVX2-NEXT:    jne LBB16_21
3829 ; AVX2-NEXT:  LBB16_22: ## %else20
3830 ; AVX2-NEXT:    testl $2048, %eax ## imm = 0x800
3831 ; AVX2-NEXT:    jne LBB16_23
3832 ; AVX2-NEXT:  LBB16_24: ## %else22
3833 ; AVX2-NEXT:    testl $4096, %eax ## imm = 0x1000
3834 ; AVX2-NEXT:    jne LBB16_25
3835 ; AVX2-NEXT:  LBB16_26: ## %else24
3836 ; AVX2-NEXT:    testl $8192, %eax ## imm = 0x2000
3837 ; AVX2-NEXT:    jne LBB16_27
3838 ; AVX2-NEXT:  LBB16_28: ## %else26
3839 ; AVX2-NEXT:    testl $16384, %eax ## imm = 0x4000
3840 ; AVX2-NEXT:    jne LBB16_29
3841 ; AVX2-NEXT:  LBB16_30: ## %else28
3842 ; AVX2-NEXT:    testl $32768, %eax ## imm = 0x8000
3843 ; AVX2-NEXT:    je LBB16_32
3844 ; AVX2-NEXT:  LBB16_31: ## %cond.store29
3845 ; AVX2-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
3846 ; AVX2-NEXT:  LBB16_32: ## %else30
3847 ; AVX2-NEXT:    testl $65536, %eax ## imm = 0x10000
3848 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm0
3849 ; AVX2-NEXT:    jne LBB16_33
3850 ; AVX2-NEXT:  ## %bb.34: ## %else32
3851 ; AVX2-NEXT:    testl $131072, %eax ## imm = 0x20000
3852 ; AVX2-NEXT:    jne LBB16_35
3853 ; AVX2-NEXT:  LBB16_36: ## %else34
3854 ; AVX2-NEXT:    testl $262144, %eax ## imm = 0x40000
3855 ; AVX2-NEXT:    jne LBB16_37
3856 ; AVX2-NEXT:  LBB16_38: ## %else36
3857 ; AVX2-NEXT:    testl $524288, %eax ## imm = 0x80000
3858 ; AVX2-NEXT:    jne LBB16_39
3859 ; AVX2-NEXT:  LBB16_40: ## %else38
3860 ; AVX2-NEXT:    testl $1048576, %eax ## imm = 0x100000
3861 ; AVX2-NEXT:    jne LBB16_41
3862 ; AVX2-NEXT:  LBB16_42: ## %else40
3863 ; AVX2-NEXT:    testl $2097152, %eax ## imm = 0x200000
3864 ; AVX2-NEXT:    jne LBB16_43
3865 ; AVX2-NEXT:  LBB16_44: ## %else42
3866 ; AVX2-NEXT:    testl $4194304, %eax ## imm = 0x400000
3867 ; AVX2-NEXT:    jne LBB16_45
3868 ; AVX2-NEXT:  LBB16_46: ## %else44
3869 ; AVX2-NEXT:    testl $8388608, %eax ## imm = 0x800000
3870 ; AVX2-NEXT:    jne LBB16_47
3871 ; AVX2-NEXT:  LBB16_48: ## %else46
3872 ; AVX2-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3873 ; AVX2-NEXT:    jne LBB16_49
3874 ; AVX2-NEXT:  LBB16_50: ## %else48
3875 ; AVX2-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3876 ; AVX2-NEXT:    jne LBB16_51
3877 ; AVX2-NEXT:  LBB16_52: ## %else50
3878 ; AVX2-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3879 ; AVX2-NEXT:    jne LBB16_53
3880 ; AVX2-NEXT:  LBB16_54: ## %else52
3881 ; AVX2-NEXT:    testl $134217728, %eax ## imm = 0x8000000
3882 ; AVX2-NEXT:    jne LBB16_55
3883 ; AVX2-NEXT:  LBB16_56: ## %else54
3884 ; AVX2-NEXT:    testl $268435456, %eax ## imm = 0x10000000
3885 ; AVX2-NEXT:    jne LBB16_57
3886 ; AVX2-NEXT:  LBB16_58: ## %else56
3887 ; AVX2-NEXT:    testl $536870912, %eax ## imm = 0x20000000
3888 ; AVX2-NEXT:    jne LBB16_59
3889 ; AVX2-NEXT:  LBB16_60: ## %else58
3890 ; AVX2-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
3891 ; AVX2-NEXT:    jne LBB16_61
3892 ; AVX2-NEXT:  LBB16_62: ## %else60
3893 ; AVX2-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
3894 ; AVX2-NEXT:    jne LBB16_63
3895 ; AVX2-NEXT:  LBB16_64: ## %else62
3896 ; AVX2-NEXT:    vzeroupper
3897 ; AVX2-NEXT:    retq
3898 ; AVX2-NEXT:  LBB16_1: ## %cond.store
3899 ; AVX2-NEXT:    vpextrb $0, %xmm1, (%rdi)
3900 ; AVX2-NEXT:    testb $2, %al
3901 ; AVX2-NEXT:    je LBB16_4
3902 ; AVX2-NEXT:  LBB16_3: ## %cond.store1
3903 ; AVX2-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
3904 ; AVX2-NEXT:    testb $4, %al
3905 ; AVX2-NEXT:    je LBB16_6
3906 ; AVX2-NEXT:  LBB16_5: ## %cond.store3
3907 ; AVX2-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
3908 ; AVX2-NEXT:    testb $8, %al
3909 ; AVX2-NEXT:    je LBB16_8
3910 ; AVX2-NEXT:  LBB16_7: ## %cond.store5
3911 ; AVX2-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
3912 ; AVX2-NEXT:    testb $16, %al
3913 ; AVX2-NEXT:    je LBB16_10
3914 ; AVX2-NEXT:  LBB16_9: ## %cond.store7
3915 ; AVX2-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
3916 ; AVX2-NEXT:    testb $32, %al
3917 ; AVX2-NEXT:    je LBB16_12
3918 ; AVX2-NEXT:  LBB16_11: ## %cond.store9
3919 ; AVX2-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
3920 ; AVX2-NEXT:    testb $64, %al
3921 ; AVX2-NEXT:    je LBB16_14
3922 ; AVX2-NEXT:  LBB16_13: ## %cond.store11
3923 ; AVX2-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
3924 ; AVX2-NEXT:    testb $-128, %al
3925 ; AVX2-NEXT:    je LBB16_16
3926 ; AVX2-NEXT:  LBB16_15: ## %cond.store13
3927 ; AVX2-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
3928 ; AVX2-NEXT:    testl $256, %eax ## imm = 0x100
3929 ; AVX2-NEXT:    je LBB16_18
3930 ; AVX2-NEXT:  LBB16_17: ## %cond.store15
3931 ; AVX2-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
3932 ; AVX2-NEXT:    testl $512, %eax ## imm = 0x200
3933 ; AVX2-NEXT:    je LBB16_20
3934 ; AVX2-NEXT:  LBB16_19: ## %cond.store17
3935 ; AVX2-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
3936 ; AVX2-NEXT:    testl $1024, %eax ## imm = 0x400
3937 ; AVX2-NEXT:    je LBB16_22
3938 ; AVX2-NEXT:  LBB16_21: ## %cond.store19
3939 ; AVX2-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
3940 ; AVX2-NEXT:    testl $2048, %eax ## imm = 0x800
3941 ; AVX2-NEXT:    je LBB16_24
3942 ; AVX2-NEXT:  LBB16_23: ## %cond.store21
3943 ; AVX2-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
3944 ; AVX2-NEXT:    testl $4096, %eax ## imm = 0x1000
3945 ; AVX2-NEXT:    je LBB16_26
3946 ; AVX2-NEXT:  LBB16_25: ## %cond.store23
3947 ; AVX2-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
3948 ; AVX2-NEXT:    testl $8192, %eax ## imm = 0x2000
3949 ; AVX2-NEXT:    je LBB16_28
3950 ; AVX2-NEXT:  LBB16_27: ## %cond.store25
3951 ; AVX2-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
3952 ; AVX2-NEXT:    testl $16384, %eax ## imm = 0x4000
3953 ; AVX2-NEXT:    je LBB16_30
3954 ; AVX2-NEXT:  LBB16_29: ## %cond.store27
3955 ; AVX2-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
3956 ; AVX2-NEXT:    testl $32768, %eax ## imm = 0x8000
3957 ; AVX2-NEXT:    jne LBB16_31
3958 ; AVX2-NEXT:    jmp LBB16_32
3959 ; AVX2-NEXT:  LBB16_33: ## %cond.store31
3960 ; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
3961 ; AVX2-NEXT:    testl $131072, %eax ## imm = 0x20000
3962 ; AVX2-NEXT:    je LBB16_36
3963 ; AVX2-NEXT:  LBB16_35: ## %cond.store33
3964 ; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
3965 ; AVX2-NEXT:    testl $262144, %eax ## imm = 0x40000
3966 ; AVX2-NEXT:    je LBB16_38
3967 ; AVX2-NEXT:  LBB16_37: ## %cond.store35
3968 ; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
3969 ; AVX2-NEXT:    testl $524288, %eax ## imm = 0x80000
3970 ; AVX2-NEXT:    je LBB16_40
3971 ; AVX2-NEXT:  LBB16_39: ## %cond.store37
3972 ; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
3973 ; AVX2-NEXT:    testl $1048576, %eax ## imm = 0x100000
3974 ; AVX2-NEXT:    je LBB16_42
3975 ; AVX2-NEXT:  LBB16_41: ## %cond.store39
3976 ; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
3977 ; AVX2-NEXT:    testl $2097152, %eax ## imm = 0x200000
3978 ; AVX2-NEXT:    je LBB16_44
3979 ; AVX2-NEXT:  LBB16_43: ## %cond.store41
3980 ; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
3981 ; AVX2-NEXT:    testl $4194304, %eax ## imm = 0x400000
3982 ; AVX2-NEXT:    je LBB16_46
3983 ; AVX2-NEXT:  LBB16_45: ## %cond.store43
3984 ; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
3985 ; AVX2-NEXT:    testl $8388608, %eax ## imm = 0x800000
3986 ; AVX2-NEXT:    je LBB16_48
3987 ; AVX2-NEXT:  LBB16_47: ## %cond.store45
3988 ; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
3989 ; AVX2-NEXT:    testl $16777216, %eax ## imm = 0x1000000
3990 ; AVX2-NEXT:    je LBB16_50
3991 ; AVX2-NEXT:  LBB16_49: ## %cond.store47
3992 ; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
3993 ; AVX2-NEXT:    testl $33554432, %eax ## imm = 0x2000000
3994 ; AVX2-NEXT:    je LBB16_52
3995 ; AVX2-NEXT:  LBB16_51: ## %cond.store49
3996 ; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
3997 ; AVX2-NEXT:    testl $67108864, %eax ## imm = 0x4000000
3998 ; AVX2-NEXT:    je LBB16_54
3999 ; AVX2-NEXT:  LBB16_53: ## %cond.store51
4000 ; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
4001 ; AVX2-NEXT:    testl $134217728, %eax ## imm = 0x8000000
4002 ; AVX2-NEXT:    je LBB16_56
4003 ; AVX2-NEXT:  LBB16_55: ## %cond.store53
4004 ; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
4005 ; AVX2-NEXT:    testl $268435456, %eax ## imm = 0x10000000
4006 ; AVX2-NEXT:    je LBB16_58
4007 ; AVX2-NEXT:  LBB16_57: ## %cond.store55
4008 ; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
4009 ; AVX2-NEXT:    testl $536870912, %eax ## imm = 0x20000000
4010 ; AVX2-NEXT:    je LBB16_60
4011 ; AVX2-NEXT:  LBB16_59: ## %cond.store57
4012 ; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
4013 ; AVX2-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
4014 ; AVX2-NEXT:    je LBB16_62
4015 ; AVX2-NEXT:  LBB16_61: ## %cond.store59
4016 ; AVX2-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
4017 ; AVX2-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
4018 ; AVX2-NEXT:    je LBB16_64
4019 ; AVX2-NEXT:  LBB16_63: ## %cond.store61
4020 ; AVX2-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
4021 ; AVX2-NEXT:    vzeroupper
4022 ; AVX2-NEXT:    retq
4024 ; AVX512F-LABEL: store_v32i8_v32i8:
4025 ; AVX512F:       ## %bb.0:
4026 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4027 ; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
4028 ; AVX512F-NEXT:    vpmovmskb %ymm0, %eax
4029 ; AVX512F-NEXT:    testb $1, %al
4030 ; AVX512F-NEXT:    jne LBB16_1
4031 ; AVX512F-NEXT:  ## %bb.2: ## %else
4032 ; AVX512F-NEXT:    testb $2, %al
4033 ; AVX512F-NEXT:    jne LBB16_3
4034 ; AVX512F-NEXT:  LBB16_4: ## %else2
4035 ; AVX512F-NEXT:    testb $4, %al
4036 ; AVX512F-NEXT:    jne LBB16_5
4037 ; AVX512F-NEXT:  LBB16_6: ## %else4
4038 ; AVX512F-NEXT:    testb $8, %al
4039 ; AVX512F-NEXT:    jne LBB16_7
4040 ; AVX512F-NEXT:  LBB16_8: ## %else6
4041 ; AVX512F-NEXT:    testb $16, %al
4042 ; AVX512F-NEXT:    jne LBB16_9
4043 ; AVX512F-NEXT:  LBB16_10: ## %else8
4044 ; AVX512F-NEXT:    testb $32, %al
4045 ; AVX512F-NEXT:    jne LBB16_11
4046 ; AVX512F-NEXT:  LBB16_12: ## %else10
4047 ; AVX512F-NEXT:    testb $64, %al
4048 ; AVX512F-NEXT:    jne LBB16_13
4049 ; AVX512F-NEXT:  LBB16_14: ## %else12
4050 ; AVX512F-NEXT:    testb $-128, %al
4051 ; AVX512F-NEXT:    jne LBB16_15
4052 ; AVX512F-NEXT:  LBB16_16: ## %else14
4053 ; AVX512F-NEXT:    testl $256, %eax ## imm = 0x100
4054 ; AVX512F-NEXT:    jne LBB16_17
4055 ; AVX512F-NEXT:  LBB16_18: ## %else16
4056 ; AVX512F-NEXT:    testl $512, %eax ## imm = 0x200
4057 ; AVX512F-NEXT:    jne LBB16_19
4058 ; AVX512F-NEXT:  LBB16_20: ## %else18
4059 ; AVX512F-NEXT:    testl $1024, %eax ## imm = 0x400
4060 ; AVX512F-NEXT:    jne LBB16_21
4061 ; AVX512F-NEXT:  LBB16_22: ## %else20
4062 ; AVX512F-NEXT:    testl $2048, %eax ## imm = 0x800
4063 ; AVX512F-NEXT:    jne LBB16_23
4064 ; AVX512F-NEXT:  LBB16_24: ## %else22
4065 ; AVX512F-NEXT:    testl $4096, %eax ## imm = 0x1000
4066 ; AVX512F-NEXT:    jne LBB16_25
4067 ; AVX512F-NEXT:  LBB16_26: ## %else24
4068 ; AVX512F-NEXT:    testl $8192, %eax ## imm = 0x2000
4069 ; AVX512F-NEXT:    jne LBB16_27
4070 ; AVX512F-NEXT:  LBB16_28: ## %else26
4071 ; AVX512F-NEXT:    testl $16384, %eax ## imm = 0x4000
4072 ; AVX512F-NEXT:    jne LBB16_29
4073 ; AVX512F-NEXT:  LBB16_30: ## %else28
4074 ; AVX512F-NEXT:    testl $32768, %eax ## imm = 0x8000
4075 ; AVX512F-NEXT:    je LBB16_32
4076 ; AVX512F-NEXT:  LBB16_31: ## %cond.store29
4077 ; AVX512F-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
4078 ; AVX512F-NEXT:  LBB16_32: ## %else30
4079 ; AVX512F-NEXT:    testl $65536, %eax ## imm = 0x10000
4080 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
4081 ; AVX512F-NEXT:    jne LBB16_33
4082 ; AVX512F-NEXT:  ## %bb.34: ## %else32
4083 ; AVX512F-NEXT:    testl $131072, %eax ## imm = 0x20000
4084 ; AVX512F-NEXT:    jne LBB16_35
4085 ; AVX512F-NEXT:  LBB16_36: ## %else34
4086 ; AVX512F-NEXT:    testl $262144, %eax ## imm = 0x40000
4087 ; AVX512F-NEXT:    jne LBB16_37
4088 ; AVX512F-NEXT:  LBB16_38: ## %else36
4089 ; AVX512F-NEXT:    testl $524288, %eax ## imm = 0x80000
4090 ; AVX512F-NEXT:    jne LBB16_39
4091 ; AVX512F-NEXT:  LBB16_40: ## %else38
4092 ; AVX512F-NEXT:    testl $1048576, %eax ## imm = 0x100000
4093 ; AVX512F-NEXT:    jne LBB16_41
4094 ; AVX512F-NEXT:  LBB16_42: ## %else40
4095 ; AVX512F-NEXT:    testl $2097152, %eax ## imm = 0x200000
4096 ; AVX512F-NEXT:    jne LBB16_43
4097 ; AVX512F-NEXT:  LBB16_44: ## %else42
4098 ; AVX512F-NEXT:    testl $4194304, %eax ## imm = 0x400000
4099 ; AVX512F-NEXT:    jne LBB16_45
4100 ; AVX512F-NEXT:  LBB16_46: ## %else44
4101 ; AVX512F-NEXT:    testl $8388608, %eax ## imm = 0x800000
4102 ; AVX512F-NEXT:    jne LBB16_47
4103 ; AVX512F-NEXT:  LBB16_48: ## %else46
4104 ; AVX512F-NEXT:    testl $16777216, %eax ## imm = 0x1000000
4105 ; AVX512F-NEXT:    jne LBB16_49
4106 ; AVX512F-NEXT:  LBB16_50: ## %else48
4107 ; AVX512F-NEXT:    testl $33554432, %eax ## imm = 0x2000000
4108 ; AVX512F-NEXT:    jne LBB16_51
4109 ; AVX512F-NEXT:  LBB16_52: ## %else50
4110 ; AVX512F-NEXT:    testl $67108864, %eax ## imm = 0x4000000
4111 ; AVX512F-NEXT:    jne LBB16_53
4112 ; AVX512F-NEXT:  LBB16_54: ## %else52
4113 ; AVX512F-NEXT:    testl $134217728, %eax ## imm = 0x8000000
4114 ; AVX512F-NEXT:    jne LBB16_55
4115 ; AVX512F-NEXT:  LBB16_56: ## %else54
4116 ; AVX512F-NEXT:    testl $268435456, %eax ## imm = 0x10000000
4117 ; AVX512F-NEXT:    jne LBB16_57
4118 ; AVX512F-NEXT:  LBB16_58: ## %else56
4119 ; AVX512F-NEXT:    testl $536870912, %eax ## imm = 0x20000000
4120 ; AVX512F-NEXT:    jne LBB16_59
4121 ; AVX512F-NEXT:  LBB16_60: ## %else58
4122 ; AVX512F-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
4123 ; AVX512F-NEXT:    jne LBB16_61
4124 ; AVX512F-NEXT:  LBB16_62: ## %else60
4125 ; AVX512F-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
4126 ; AVX512F-NEXT:    jne LBB16_63
4127 ; AVX512F-NEXT:  LBB16_64: ## %else62
4128 ; AVX512F-NEXT:    vzeroupper
4129 ; AVX512F-NEXT:    retq
4130 ; AVX512F-NEXT:  LBB16_1: ## %cond.store
4131 ; AVX512F-NEXT:    vpextrb $0, %xmm1, (%rdi)
4132 ; AVX512F-NEXT:    testb $2, %al
4133 ; AVX512F-NEXT:    je LBB16_4
4134 ; AVX512F-NEXT:  LBB16_3: ## %cond.store1
4135 ; AVX512F-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
4136 ; AVX512F-NEXT:    testb $4, %al
4137 ; AVX512F-NEXT:    je LBB16_6
4138 ; AVX512F-NEXT:  LBB16_5: ## %cond.store3
4139 ; AVX512F-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
4140 ; AVX512F-NEXT:    testb $8, %al
4141 ; AVX512F-NEXT:    je LBB16_8
4142 ; AVX512F-NEXT:  LBB16_7: ## %cond.store5
4143 ; AVX512F-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
4144 ; AVX512F-NEXT:    testb $16, %al
4145 ; AVX512F-NEXT:    je LBB16_10
4146 ; AVX512F-NEXT:  LBB16_9: ## %cond.store7
4147 ; AVX512F-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
4148 ; AVX512F-NEXT:    testb $32, %al
4149 ; AVX512F-NEXT:    je LBB16_12
4150 ; AVX512F-NEXT:  LBB16_11: ## %cond.store9
4151 ; AVX512F-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
4152 ; AVX512F-NEXT:    testb $64, %al
4153 ; AVX512F-NEXT:    je LBB16_14
4154 ; AVX512F-NEXT:  LBB16_13: ## %cond.store11
4155 ; AVX512F-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
4156 ; AVX512F-NEXT:    testb $-128, %al
4157 ; AVX512F-NEXT:    je LBB16_16
4158 ; AVX512F-NEXT:  LBB16_15: ## %cond.store13
4159 ; AVX512F-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
4160 ; AVX512F-NEXT:    testl $256, %eax ## imm = 0x100
4161 ; AVX512F-NEXT:    je LBB16_18
4162 ; AVX512F-NEXT:  LBB16_17: ## %cond.store15
4163 ; AVX512F-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
4164 ; AVX512F-NEXT:    testl $512, %eax ## imm = 0x200
4165 ; AVX512F-NEXT:    je LBB16_20
4166 ; AVX512F-NEXT:  LBB16_19: ## %cond.store17
4167 ; AVX512F-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
4168 ; AVX512F-NEXT:    testl $1024, %eax ## imm = 0x400
4169 ; AVX512F-NEXT:    je LBB16_22
4170 ; AVX512F-NEXT:  LBB16_21: ## %cond.store19
4171 ; AVX512F-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
4172 ; AVX512F-NEXT:    testl $2048, %eax ## imm = 0x800
4173 ; AVX512F-NEXT:    je LBB16_24
4174 ; AVX512F-NEXT:  LBB16_23: ## %cond.store21
4175 ; AVX512F-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
4176 ; AVX512F-NEXT:    testl $4096, %eax ## imm = 0x1000
4177 ; AVX512F-NEXT:    je LBB16_26
4178 ; AVX512F-NEXT:  LBB16_25: ## %cond.store23
4179 ; AVX512F-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
4180 ; AVX512F-NEXT:    testl $8192, %eax ## imm = 0x2000
4181 ; AVX512F-NEXT:    je LBB16_28
4182 ; AVX512F-NEXT:  LBB16_27: ## %cond.store25
4183 ; AVX512F-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
4184 ; AVX512F-NEXT:    testl $16384, %eax ## imm = 0x4000
4185 ; AVX512F-NEXT:    je LBB16_30
4186 ; AVX512F-NEXT:  LBB16_29: ## %cond.store27
4187 ; AVX512F-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
4188 ; AVX512F-NEXT:    testl $32768, %eax ## imm = 0x8000
4189 ; AVX512F-NEXT:    jne LBB16_31
4190 ; AVX512F-NEXT:    jmp LBB16_32
4191 ; AVX512F-NEXT:  LBB16_33: ## %cond.store31
4192 ; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
4193 ; AVX512F-NEXT:    testl $131072, %eax ## imm = 0x20000
4194 ; AVX512F-NEXT:    je LBB16_36
4195 ; AVX512F-NEXT:  LBB16_35: ## %cond.store33
4196 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
4197 ; AVX512F-NEXT:    testl $262144, %eax ## imm = 0x40000
4198 ; AVX512F-NEXT:    je LBB16_38
4199 ; AVX512F-NEXT:  LBB16_37: ## %cond.store35
4200 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
4201 ; AVX512F-NEXT:    testl $524288, %eax ## imm = 0x80000
4202 ; AVX512F-NEXT:    je LBB16_40
4203 ; AVX512F-NEXT:  LBB16_39: ## %cond.store37
4204 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
4205 ; AVX512F-NEXT:    testl $1048576, %eax ## imm = 0x100000
4206 ; AVX512F-NEXT:    je LBB16_42
4207 ; AVX512F-NEXT:  LBB16_41: ## %cond.store39
4208 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
4209 ; AVX512F-NEXT:    testl $2097152, %eax ## imm = 0x200000
4210 ; AVX512F-NEXT:    je LBB16_44
4211 ; AVX512F-NEXT:  LBB16_43: ## %cond.store41
4212 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
4213 ; AVX512F-NEXT:    testl $4194304, %eax ## imm = 0x400000
4214 ; AVX512F-NEXT:    je LBB16_46
4215 ; AVX512F-NEXT:  LBB16_45: ## %cond.store43
4216 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
4217 ; AVX512F-NEXT:    testl $8388608, %eax ## imm = 0x800000
4218 ; AVX512F-NEXT:    je LBB16_48
4219 ; AVX512F-NEXT:  LBB16_47: ## %cond.store45
4220 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
4221 ; AVX512F-NEXT:    testl $16777216, %eax ## imm = 0x1000000
4222 ; AVX512F-NEXT:    je LBB16_50
4223 ; AVX512F-NEXT:  LBB16_49: ## %cond.store47
4224 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
4225 ; AVX512F-NEXT:    testl $33554432, %eax ## imm = 0x2000000
4226 ; AVX512F-NEXT:    je LBB16_52
4227 ; AVX512F-NEXT:  LBB16_51: ## %cond.store49
4228 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
4229 ; AVX512F-NEXT:    testl $67108864, %eax ## imm = 0x4000000
4230 ; AVX512F-NEXT:    je LBB16_54
4231 ; AVX512F-NEXT:  LBB16_53: ## %cond.store51
4232 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
4233 ; AVX512F-NEXT:    testl $134217728, %eax ## imm = 0x8000000
4234 ; AVX512F-NEXT:    je LBB16_56
4235 ; AVX512F-NEXT:  LBB16_55: ## %cond.store53
4236 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
4237 ; AVX512F-NEXT:    testl $268435456, %eax ## imm = 0x10000000
4238 ; AVX512F-NEXT:    je LBB16_58
4239 ; AVX512F-NEXT:  LBB16_57: ## %cond.store55
4240 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
4241 ; AVX512F-NEXT:    testl $536870912, %eax ## imm = 0x20000000
4242 ; AVX512F-NEXT:    je LBB16_60
4243 ; AVX512F-NEXT:  LBB16_59: ## %cond.store57
4244 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
4245 ; AVX512F-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
4246 ; AVX512F-NEXT:    je LBB16_62
4247 ; AVX512F-NEXT:  LBB16_61: ## %cond.store59
4248 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
4249 ; AVX512F-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
4250 ; AVX512F-NEXT:    je LBB16_64
4251 ; AVX512F-NEXT:  LBB16_63: ## %cond.store61
4252 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
4253 ; AVX512F-NEXT:    vzeroupper
4254 ; AVX512F-NEXT:    retq
4256 ; AVX512VLDQ-LABEL: store_v32i8_v32i8:
4257 ; AVX512VLDQ:       ## %bb.0:
4258 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4259 ; AVX512VLDQ-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
4260 ; AVX512VLDQ-NEXT:    vpmovmskb %ymm0, %eax
4261 ; AVX512VLDQ-NEXT:    testb $1, %al
4262 ; AVX512VLDQ-NEXT:    jne LBB16_1
4263 ; AVX512VLDQ-NEXT:  ## %bb.2: ## %else
4264 ; AVX512VLDQ-NEXT:    testb $2, %al
4265 ; AVX512VLDQ-NEXT:    jne LBB16_3
4266 ; AVX512VLDQ-NEXT:  LBB16_4: ## %else2
4267 ; AVX512VLDQ-NEXT:    testb $4, %al
4268 ; AVX512VLDQ-NEXT:    jne LBB16_5
4269 ; AVX512VLDQ-NEXT:  LBB16_6: ## %else4
4270 ; AVX512VLDQ-NEXT:    testb $8, %al
4271 ; AVX512VLDQ-NEXT:    jne LBB16_7
4272 ; AVX512VLDQ-NEXT:  LBB16_8: ## %else6
4273 ; AVX512VLDQ-NEXT:    testb $16, %al
4274 ; AVX512VLDQ-NEXT:    jne LBB16_9
4275 ; AVX512VLDQ-NEXT:  LBB16_10: ## %else8
4276 ; AVX512VLDQ-NEXT:    testb $32, %al
4277 ; AVX512VLDQ-NEXT:    jne LBB16_11
4278 ; AVX512VLDQ-NEXT:  LBB16_12: ## %else10
4279 ; AVX512VLDQ-NEXT:    testb $64, %al
4280 ; AVX512VLDQ-NEXT:    jne LBB16_13
4281 ; AVX512VLDQ-NEXT:  LBB16_14: ## %else12
4282 ; AVX512VLDQ-NEXT:    testb $-128, %al
4283 ; AVX512VLDQ-NEXT:    jne LBB16_15
4284 ; AVX512VLDQ-NEXT:  LBB16_16: ## %else14
4285 ; AVX512VLDQ-NEXT:    testl $256, %eax ## imm = 0x100
4286 ; AVX512VLDQ-NEXT:    jne LBB16_17
4287 ; AVX512VLDQ-NEXT:  LBB16_18: ## %else16
4288 ; AVX512VLDQ-NEXT:    testl $512, %eax ## imm = 0x200
4289 ; AVX512VLDQ-NEXT:    jne LBB16_19
4290 ; AVX512VLDQ-NEXT:  LBB16_20: ## %else18
4291 ; AVX512VLDQ-NEXT:    testl $1024, %eax ## imm = 0x400
4292 ; AVX512VLDQ-NEXT:    jne LBB16_21
4293 ; AVX512VLDQ-NEXT:  LBB16_22: ## %else20
4294 ; AVX512VLDQ-NEXT:    testl $2048, %eax ## imm = 0x800
4295 ; AVX512VLDQ-NEXT:    jne LBB16_23
4296 ; AVX512VLDQ-NEXT:  LBB16_24: ## %else22
4297 ; AVX512VLDQ-NEXT:    testl $4096, %eax ## imm = 0x1000
4298 ; AVX512VLDQ-NEXT:    jne LBB16_25
4299 ; AVX512VLDQ-NEXT:  LBB16_26: ## %else24
4300 ; AVX512VLDQ-NEXT:    testl $8192, %eax ## imm = 0x2000
4301 ; AVX512VLDQ-NEXT:    jne LBB16_27
4302 ; AVX512VLDQ-NEXT:  LBB16_28: ## %else26
4303 ; AVX512VLDQ-NEXT:    testl $16384, %eax ## imm = 0x4000
4304 ; AVX512VLDQ-NEXT:    jne LBB16_29
4305 ; AVX512VLDQ-NEXT:  LBB16_30: ## %else28
4306 ; AVX512VLDQ-NEXT:    testl $32768, %eax ## imm = 0x8000
4307 ; AVX512VLDQ-NEXT:    je LBB16_32
4308 ; AVX512VLDQ-NEXT:  LBB16_31: ## %cond.store29
4309 ; AVX512VLDQ-NEXT:    vpextrb $15, %xmm1, 15(%rdi)
4310 ; AVX512VLDQ-NEXT:  LBB16_32: ## %else30
4311 ; AVX512VLDQ-NEXT:    testl $65536, %eax ## imm = 0x10000
4312 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
4313 ; AVX512VLDQ-NEXT:    jne LBB16_33
4314 ; AVX512VLDQ-NEXT:  ## %bb.34: ## %else32
4315 ; AVX512VLDQ-NEXT:    testl $131072, %eax ## imm = 0x20000
4316 ; AVX512VLDQ-NEXT:    jne LBB16_35
4317 ; AVX512VLDQ-NEXT:  LBB16_36: ## %else34
4318 ; AVX512VLDQ-NEXT:    testl $262144, %eax ## imm = 0x40000
4319 ; AVX512VLDQ-NEXT:    jne LBB16_37
4320 ; AVX512VLDQ-NEXT:  LBB16_38: ## %else36
4321 ; AVX512VLDQ-NEXT:    testl $524288, %eax ## imm = 0x80000
4322 ; AVX512VLDQ-NEXT:    jne LBB16_39
4323 ; AVX512VLDQ-NEXT:  LBB16_40: ## %else38
4324 ; AVX512VLDQ-NEXT:    testl $1048576, %eax ## imm = 0x100000
4325 ; AVX512VLDQ-NEXT:    jne LBB16_41
4326 ; AVX512VLDQ-NEXT:  LBB16_42: ## %else40
4327 ; AVX512VLDQ-NEXT:    testl $2097152, %eax ## imm = 0x200000
4328 ; AVX512VLDQ-NEXT:    jne LBB16_43
4329 ; AVX512VLDQ-NEXT:  LBB16_44: ## %else42
4330 ; AVX512VLDQ-NEXT:    testl $4194304, %eax ## imm = 0x400000
4331 ; AVX512VLDQ-NEXT:    jne LBB16_45
4332 ; AVX512VLDQ-NEXT:  LBB16_46: ## %else44
4333 ; AVX512VLDQ-NEXT:    testl $8388608, %eax ## imm = 0x800000
4334 ; AVX512VLDQ-NEXT:    jne LBB16_47
4335 ; AVX512VLDQ-NEXT:  LBB16_48: ## %else46
4336 ; AVX512VLDQ-NEXT:    testl $16777216, %eax ## imm = 0x1000000
4337 ; AVX512VLDQ-NEXT:    jne LBB16_49
4338 ; AVX512VLDQ-NEXT:  LBB16_50: ## %else48
4339 ; AVX512VLDQ-NEXT:    testl $33554432, %eax ## imm = 0x2000000
4340 ; AVX512VLDQ-NEXT:    jne LBB16_51
4341 ; AVX512VLDQ-NEXT:  LBB16_52: ## %else50
4342 ; AVX512VLDQ-NEXT:    testl $67108864, %eax ## imm = 0x4000000
4343 ; AVX512VLDQ-NEXT:    jne LBB16_53
4344 ; AVX512VLDQ-NEXT:  LBB16_54: ## %else52
4345 ; AVX512VLDQ-NEXT:    testl $134217728, %eax ## imm = 0x8000000
4346 ; AVX512VLDQ-NEXT:    jne LBB16_55
4347 ; AVX512VLDQ-NEXT:  LBB16_56: ## %else54
4348 ; AVX512VLDQ-NEXT:    testl $268435456, %eax ## imm = 0x10000000
4349 ; AVX512VLDQ-NEXT:    jne LBB16_57
4350 ; AVX512VLDQ-NEXT:  LBB16_58: ## %else56
4351 ; AVX512VLDQ-NEXT:    testl $536870912, %eax ## imm = 0x20000000
4352 ; AVX512VLDQ-NEXT:    jne LBB16_59
4353 ; AVX512VLDQ-NEXT:  LBB16_60: ## %else58
4354 ; AVX512VLDQ-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
4355 ; AVX512VLDQ-NEXT:    jne LBB16_61
4356 ; AVX512VLDQ-NEXT:  LBB16_62: ## %else60
4357 ; AVX512VLDQ-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
4358 ; AVX512VLDQ-NEXT:    jne LBB16_63
4359 ; AVX512VLDQ-NEXT:  LBB16_64: ## %else62
4360 ; AVX512VLDQ-NEXT:    vzeroupper
4361 ; AVX512VLDQ-NEXT:    retq
4362 ; AVX512VLDQ-NEXT:  LBB16_1: ## %cond.store
4363 ; AVX512VLDQ-NEXT:    vpextrb $0, %xmm1, (%rdi)
4364 ; AVX512VLDQ-NEXT:    testb $2, %al
4365 ; AVX512VLDQ-NEXT:    je LBB16_4
4366 ; AVX512VLDQ-NEXT:  LBB16_3: ## %cond.store1
4367 ; AVX512VLDQ-NEXT:    vpextrb $1, %xmm1, 1(%rdi)
4368 ; AVX512VLDQ-NEXT:    testb $4, %al
4369 ; AVX512VLDQ-NEXT:    je LBB16_6
4370 ; AVX512VLDQ-NEXT:  LBB16_5: ## %cond.store3
4371 ; AVX512VLDQ-NEXT:    vpextrb $2, %xmm1, 2(%rdi)
4372 ; AVX512VLDQ-NEXT:    testb $8, %al
4373 ; AVX512VLDQ-NEXT:    je LBB16_8
4374 ; AVX512VLDQ-NEXT:  LBB16_7: ## %cond.store5
4375 ; AVX512VLDQ-NEXT:    vpextrb $3, %xmm1, 3(%rdi)
4376 ; AVX512VLDQ-NEXT:    testb $16, %al
4377 ; AVX512VLDQ-NEXT:    je LBB16_10
4378 ; AVX512VLDQ-NEXT:  LBB16_9: ## %cond.store7
4379 ; AVX512VLDQ-NEXT:    vpextrb $4, %xmm1, 4(%rdi)
4380 ; AVX512VLDQ-NEXT:    testb $32, %al
4381 ; AVX512VLDQ-NEXT:    je LBB16_12
4382 ; AVX512VLDQ-NEXT:  LBB16_11: ## %cond.store9
4383 ; AVX512VLDQ-NEXT:    vpextrb $5, %xmm1, 5(%rdi)
4384 ; AVX512VLDQ-NEXT:    testb $64, %al
4385 ; AVX512VLDQ-NEXT:    je LBB16_14
4386 ; AVX512VLDQ-NEXT:  LBB16_13: ## %cond.store11
4387 ; AVX512VLDQ-NEXT:    vpextrb $6, %xmm1, 6(%rdi)
4388 ; AVX512VLDQ-NEXT:    testb $-128, %al
4389 ; AVX512VLDQ-NEXT:    je LBB16_16
4390 ; AVX512VLDQ-NEXT:  LBB16_15: ## %cond.store13
4391 ; AVX512VLDQ-NEXT:    vpextrb $7, %xmm1, 7(%rdi)
4392 ; AVX512VLDQ-NEXT:    testl $256, %eax ## imm = 0x100
4393 ; AVX512VLDQ-NEXT:    je LBB16_18
4394 ; AVX512VLDQ-NEXT:  LBB16_17: ## %cond.store15
4395 ; AVX512VLDQ-NEXT:    vpextrb $8, %xmm1, 8(%rdi)
4396 ; AVX512VLDQ-NEXT:    testl $512, %eax ## imm = 0x200
4397 ; AVX512VLDQ-NEXT:    je LBB16_20
4398 ; AVX512VLDQ-NEXT:  LBB16_19: ## %cond.store17
4399 ; AVX512VLDQ-NEXT:    vpextrb $9, %xmm1, 9(%rdi)
4400 ; AVX512VLDQ-NEXT:    testl $1024, %eax ## imm = 0x400
4401 ; AVX512VLDQ-NEXT:    je LBB16_22
4402 ; AVX512VLDQ-NEXT:  LBB16_21: ## %cond.store19
4403 ; AVX512VLDQ-NEXT:    vpextrb $10, %xmm1, 10(%rdi)
4404 ; AVX512VLDQ-NEXT:    testl $2048, %eax ## imm = 0x800
4405 ; AVX512VLDQ-NEXT:    je LBB16_24
4406 ; AVX512VLDQ-NEXT:  LBB16_23: ## %cond.store21
4407 ; AVX512VLDQ-NEXT:    vpextrb $11, %xmm1, 11(%rdi)
4408 ; AVX512VLDQ-NEXT:    testl $4096, %eax ## imm = 0x1000
4409 ; AVX512VLDQ-NEXT:    je LBB16_26
4410 ; AVX512VLDQ-NEXT:  LBB16_25: ## %cond.store23
4411 ; AVX512VLDQ-NEXT:    vpextrb $12, %xmm1, 12(%rdi)
4412 ; AVX512VLDQ-NEXT:    testl $8192, %eax ## imm = 0x2000
4413 ; AVX512VLDQ-NEXT:    je LBB16_28
4414 ; AVX512VLDQ-NEXT:  LBB16_27: ## %cond.store25
4415 ; AVX512VLDQ-NEXT:    vpextrb $13, %xmm1, 13(%rdi)
4416 ; AVX512VLDQ-NEXT:    testl $16384, %eax ## imm = 0x4000
4417 ; AVX512VLDQ-NEXT:    je LBB16_30
4418 ; AVX512VLDQ-NEXT:  LBB16_29: ## %cond.store27
4419 ; AVX512VLDQ-NEXT:    vpextrb $14, %xmm1, 14(%rdi)
4420 ; AVX512VLDQ-NEXT:    testl $32768, %eax ## imm = 0x8000
4421 ; AVX512VLDQ-NEXT:    jne LBB16_31
4422 ; AVX512VLDQ-NEXT:    jmp LBB16_32
4423 ; AVX512VLDQ-NEXT:  LBB16_33: ## %cond.store31
4424 ; AVX512VLDQ-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
4425 ; AVX512VLDQ-NEXT:    testl $131072, %eax ## imm = 0x20000
4426 ; AVX512VLDQ-NEXT:    je LBB16_36
4427 ; AVX512VLDQ-NEXT:  LBB16_35: ## %cond.store33
4428 ; AVX512VLDQ-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
4429 ; AVX512VLDQ-NEXT:    testl $262144, %eax ## imm = 0x40000
4430 ; AVX512VLDQ-NEXT:    je LBB16_38
4431 ; AVX512VLDQ-NEXT:  LBB16_37: ## %cond.store35
4432 ; AVX512VLDQ-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
4433 ; AVX512VLDQ-NEXT:    testl $524288, %eax ## imm = 0x80000
4434 ; AVX512VLDQ-NEXT:    je LBB16_40
4435 ; AVX512VLDQ-NEXT:  LBB16_39: ## %cond.store37
4436 ; AVX512VLDQ-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
4437 ; AVX512VLDQ-NEXT:    testl $1048576, %eax ## imm = 0x100000
4438 ; AVX512VLDQ-NEXT:    je LBB16_42
4439 ; AVX512VLDQ-NEXT:  LBB16_41: ## %cond.store39
4440 ; AVX512VLDQ-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
4441 ; AVX512VLDQ-NEXT:    testl $2097152, %eax ## imm = 0x200000
4442 ; AVX512VLDQ-NEXT:    je LBB16_44
4443 ; AVX512VLDQ-NEXT:  LBB16_43: ## %cond.store41
4444 ; AVX512VLDQ-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
4445 ; AVX512VLDQ-NEXT:    testl $4194304, %eax ## imm = 0x400000
4446 ; AVX512VLDQ-NEXT:    je LBB16_46
4447 ; AVX512VLDQ-NEXT:  LBB16_45: ## %cond.store43
4448 ; AVX512VLDQ-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
4449 ; AVX512VLDQ-NEXT:    testl $8388608, %eax ## imm = 0x800000
4450 ; AVX512VLDQ-NEXT:    je LBB16_48
4451 ; AVX512VLDQ-NEXT:  LBB16_47: ## %cond.store45
4452 ; AVX512VLDQ-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
4453 ; AVX512VLDQ-NEXT:    testl $16777216, %eax ## imm = 0x1000000
4454 ; AVX512VLDQ-NEXT:    je LBB16_50
4455 ; AVX512VLDQ-NEXT:  LBB16_49: ## %cond.store47
4456 ; AVX512VLDQ-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
4457 ; AVX512VLDQ-NEXT:    testl $33554432, %eax ## imm = 0x2000000
4458 ; AVX512VLDQ-NEXT:    je LBB16_52
4459 ; AVX512VLDQ-NEXT:  LBB16_51: ## %cond.store49
4460 ; AVX512VLDQ-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
4461 ; AVX512VLDQ-NEXT:    testl $67108864, %eax ## imm = 0x4000000
4462 ; AVX512VLDQ-NEXT:    je LBB16_54
4463 ; AVX512VLDQ-NEXT:  LBB16_53: ## %cond.store51
4464 ; AVX512VLDQ-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
4465 ; AVX512VLDQ-NEXT:    testl $134217728, %eax ## imm = 0x8000000
4466 ; AVX512VLDQ-NEXT:    je LBB16_56
4467 ; AVX512VLDQ-NEXT:  LBB16_55: ## %cond.store53
4468 ; AVX512VLDQ-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
4469 ; AVX512VLDQ-NEXT:    testl $268435456, %eax ## imm = 0x10000000
4470 ; AVX512VLDQ-NEXT:    je LBB16_58
4471 ; AVX512VLDQ-NEXT:  LBB16_57: ## %cond.store55
4472 ; AVX512VLDQ-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
4473 ; AVX512VLDQ-NEXT:    testl $536870912, %eax ## imm = 0x20000000
4474 ; AVX512VLDQ-NEXT:    je LBB16_60
4475 ; AVX512VLDQ-NEXT:  LBB16_59: ## %cond.store57
4476 ; AVX512VLDQ-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
4477 ; AVX512VLDQ-NEXT:    testl $1073741824, %eax ## imm = 0x40000000
4478 ; AVX512VLDQ-NEXT:    je LBB16_62
4479 ; AVX512VLDQ-NEXT:  LBB16_61: ## %cond.store59
4480 ; AVX512VLDQ-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
4481 ; AVX512VLDQ-NEXT:    testl $-2147483648, %eax ## imm = 0x80000000
4482 ; AVX512VLDQ-NEXT:    je LBB16_64
4483 ; AVX512VLDQ-NEXT:  LBB16_63: ## %cond.store61
4484 ; AVX512VLDQ-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
4485 ; AVX512VLDQ-NEXT:    vzeroupper
4486 ; AVX512VLDQ-NEXT:    retq
4488 ; AVX512VLBW-LABEL: store_v32i8_v32i8:
4489 ; AVX512VLBW:       ## %bb.0:
4490 ; AVX512VLBW-NEXT:    vptestnmb %ymm0, %ymm0, %k1
4491 ; AVX512VLBW-NEXT:    vmovdqu8 %ymm1, (%rdi) {%k1}
4492 ; AVX512VLBW-NEXT:    vzeroupper
4493 ; AVX512VLBW-NEXT:    retq
4494   %mask = icmp eq <32 x i8> %trigger, zeroinitializer
4495   call void @llvm.masked.store.v32i8.p0v32i8(<32 x i8> %val, <32 x i8>* %addr, i32 4, <32 x i1> %mask)
4496   ret void
4499 ;;; Stores with Constant Masks
4501 define void @mstore_constmask_v4i32_v4i32(<4 x i32> %trigger, <4 x i32>* %addr, <4 x i32> %val) {
4502 ; SSE-LABEL: mstore_constmask_v4i32_v4i32:
4503 ; SSE:       ## %bb.0:
4504 ; SSE-NEXT:    movups %xmm1, (%rdi)
4505 ; SSE-NEXT:    retq
4507 ; AVX1-LABEL: mstore_constmask_v4i32_v4i32:
4508 ; AVX1:       ## %bb.0:
4509 ; AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
4510 ; AVX1-NEXT:    vmaskmovps %xmm1, %xmm0, (%rdi)
4511 ; AVX1-NEXT:    retq
4513 ; AVX2-LABEL: mstore_constmask_v4i32_v4i32:
4514 ; AVX2:       ## %bb.0:
4515 ; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
4516 ; AVX2-NEXT:    vpmaskmovd %xmm1, %xmm0, (%rdi)
4517 ; AVX2-NEXT:    retq
4519 ; AVX512F-LABEL: mstore_constmask_v4i32_v4i32:
4520 ; AVX512F:       ## %bb.0:
4521 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
4522 ; AVX512F-NEXT:    movw $15, %ax
4523 ; AVX512F-NEXT:    kmovw %eax, %k1
4524 ; AVX512F-NEXT:    vmovdqu32 %zmm1, (%rdi) {%k1}
4525 ; AVX512F-NEXT:    vzeroupper
4526 ; AVX512F-NEXT:    retq
4528 ; AVX512VL-LABEL: mstore_constmask_v4i32_v4i32:
4529 ; AVX512VL:       ## %bb.0:
4530 ; AVX512VL-NEXT:    kxnorw %k0, %k0, %k1
4531 ; AVX512VL-NEXT:    vmovdqu32 %xmm1, (%rdi) {%k1}
4532 ; AVX512VL-NEXT:    retq
4533   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
4534   call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> %val, <4 x i32>* %addr, i32 4, <4 x i1><i1 true, i1 true, i1 true, i1 true>)
4535   ret void
4538 ;  When only one element of the mask is set, reduce to a scalar store.
4540 define void @one_mask_bit_set1(<4 x i32>* %addr, <4 x i32> %val) {
4541 ; SSE-LABEL: one_mask_bit_set1:
4542 ; SSE:       ## %bb.0:
4543 ; SSE-NEXT:    movss %xmm0, (%rdi)
4544 ; SSE-NEXT:    retq
4546 ; AVX-LABEL: one_mask_bit_set1:
4547 ; AVX:       ## %bb.0:
4548 ; AVX-NEXT:    vmovss %xmm0, (%rdi)
4549 ; AVX-NEXT:    retq
4550   call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> %val, <4 x i32>* %addr, i32 4, <4 x i1><i1 true, i1 false, i1 false, i1 false>)
4551   ret void
4554 ; Choose a different element to show that the correct address offset is produced.
4556 define void @one_mask_bit_set2(<4 x float>* %addr, <4 x float> %val) {
4557 ; SSE2-LABEL: one_mask_bit_set2:
4558 ; SSE2:       ## %bb.0:
4559 ; SSE2-NEXT:    movhlps {{.*#+}} xmm0 = xmm0[1,1]
4560 ; SSE2-NEXT:    movss %xmm0, 8(%rdi)
4561 ; SSE2-NEXT:    retq
4563 ; SSE4-LABEL: one_mask_bit_set2:
4564 ; SSE4:       ## %bb.0:
4565 ; SSE4-NEXT:    extractps $2, %xmm0, 8(%rdi)
4566 ; SSE4-NEXT:    retq
4568 ; AVX-LABEL: one_mask_bit_set2:
4569 ; AVX:       ## %bb.0:
4570 ; AVX-NEXT:    vextractps $2, %xmm0, 8(%rdi)
4571 ; AVX-NEXT:    retq
4572   call void @llvm.masked.store.v4f32.p0v4f32(<4 x float> %val, <4 x float>* %addr, i32 4, <4 x i1><i1 false, i1 false, i1 true, i1 false>)
4573   ret void
4576 ; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.
4578 define void @one_mask_bit_set3(<4 x i64>* %addr, <4 x i64> %val) {
4579 ; SSE-LABEL: one_mask_bit_set3:
4580 ; SSE:       ## %bb.0:
4581 ; SSE-NEXT:    movlps %xmm1, 16(%rdi)
4582 ; SSE-NEXT:    retq
4584 ; AVX-LABEL: one_mask_bit_set3:
4585 ; AVX:       ## %bb.0:
4586 ; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm0
4587 ; AVX-NEXT:    vmovlps %xmm0, 16(%rdi)
4588 ; AVX-NEXT:    vzeroupper
4589 ; AVX-NEXT:    retq
4590   call void @llvm.masked.store.v4i64.p0v4i64(<4 x i64> %val, <4 x i64>* %addr, i32 4, <4 x i1><i1 false, i1 false, i1 true, i1 false>)
4591   ret void
4594 ; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.
4596 define void @one_mask_bit_set4(<4 x double>* %addr, <4 x double> %val) {
4597 ; SSE-LABEL: one_mask_bit_set4:
4598 ; SSE:       ## %bb.0:
4599 ; SSE-NEXT:    movhps %xmm1, 24(%rdi)
4600 ; SSE-NEXT:    retq
4602 ; AVX-LABEL: one_mask_bit_set4:
4603 ; AVX:       ## %bb.0:
4604 ; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm0
4605 ; AVX-NEXT:    vmovhps %xmm0, 24(%rdi)
4606 ; AVX-NEXT:    vzeroupper
4607 ; AVX-NEXT:    retq
4608   call void @llvm.masked.store.v4f64.p0v4f64(<4 x double> %val, <4 x double>* %addr, i32 4, <4 x i1><i1 false, i1 false, i1 false, i1 true>)
4609   ret void
4612 ; Try a 512-bit vector to make sure AVX doesn't die and AVX512 works as expected.
4614 define void @one_mask_bit_set5(<8 x double>* %addr, <8 x double> %val) {
4615 ; SSE-LABEL: one_mask_bit_set5:
4616 ; SSE:       ## %bb.0:
4617 ; SSE-NEXT:    movlps %xmm3, 48(%rdi)
4618 ; SSE-NEXT:    retq
4620 ; AVX1OR2-LABEL: one_mask_bit_set5:
4621 ; AVX1OR2:       ## %bb.0:
4622 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm1, %xmm0
4623 ; AVX1OR2-NEXT:    vmovlps %xmm0, 48(%rdi)
4624 ; AVX1OR2-NEXT:    vzeroupper
4625 ; AVX1OR2-NEXT:    retq
4627 ; AVX512-LABEL: one_mask_bit_set5:
4628 ; AVX512:       ## %bb.0:
4629 ; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm0
4630 ; AVX512-NEXT:    vmovlps %xmm0, 48(%rdi)
4631 ; AVX512-NEXT:    vzeroupper
4632 ; AVX512-NEXT:    retq
4633   call void @llvm.masked.store.v8f64.p0v8f64(<8 x double> %val, <8 x double>* %addr, i32 4, <8 x i1><i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false>)
4634   ret void
4637 ; SimplifyDemandedBits eliminates an ashr here.
4639 define void @masked_store_bool_mask_demand_trunc_sext(<4 x double> %x, <4 x double>* %p, <4 x i32> %masksrc) {
4640 ; SSE-LABEL: masked_store_bool_mask_demand_trunc_sext:
4641 ; SSE:       ## %bb.0:
4642 ; SSE-NEXT:    pslld $31, %xmm2
4643 ; SSE-NEXT:    movmskps %xmm2, %eax
4644 ; SSE-NEXT:    testb $1, %al
4645 ; SSE-NEXT:    jne LBB23_1
4646 ; SSE-NEXT:  ## %bb.2: ## %else
4647 ; SSE-NEXT:    testb $2, %al
4648 ; SSE-NEXT:    jne LBB23_3
4649 ; SSE-NEXT:  LBB23_4: ## %else2
4650 ; SSE-NEXT:    testb $4, %al
4651 ; SSE-NEXT:    jne LBB23_5
4652 ; SSE-NEXT:  LBB23_6: ## %else4
4653 ; SSE-NEXT:    testb $8, %al
4654 ; SSE-NEXT:    jne LBB23_7
4655 ; SSE-NEXT:  LBB23_8: ## %else6
4656 ; SSE-NEXT:    retq
4657 ; SSE-NEXT:  LBB23_1: ## %cond.store
4658 ; SSE-NEXT:    movlps %xmm0, (%rdi)
4659 ; SSE-NEXT:    testb $2, %al
4660 ; SSE-NEXT:    je LBB23_4
4661 ; SSE-NEXT:  LBB23_3: ## %cond.store1
4662 ; SSE-NEXT:    movhps %xmm0, 8(%rdi)
4663 ; SSE-NEXT:    testb $4, %al
4664 ; SSE-NEXT:    je LBB23_6
4665 ; SSE-NEXT:  LBB23_5: ## %cond.store3
4666 ; SSE-NEXT:    movlps %xmm1, 16(%rdi)
4667 ; SSE-NEXT:    testb $8, %al
4668 ; SSE-NEXT:    je LBB23_8
4669 ; SSE-NEXT:  LBB23_7: ## %cond.store5
4670 ; SSE-NEXT:    movhps %xmm1, 24(%rdi)
4671 ; SSE-NEXT:    retq
4673 ; AVX1-LABEL: masked_store_bool_mask_demand_trunc_sext:
4674 ; AVX1:       ## %bb.0:
4675 ; AVX1-NEXT:    vpslld $31, %xmm1, %xmm1
4676 ; AVX1-NEXT:    vpmovsxdq %xmm1, %xmm2
4677 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
4678 ; AVX1-NEXT:    vpmovsxdq %xmm1, %xmm1
4679 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
4680 ; AVX1-NEXT:    vmaskmovpd %ymm0, %ymm1, (%rdi)
4681 ; AVX1-NEXT:    vzeroupper
4682 ; AVX1-NEXT:    retq
4684 ; AVX2-LABEL: masked_store_bool_mask_demand_trunc_sext:
4685 ; AVX2:       ## %bb.0:
4686 ; AVX2-NEXT:    vpslld $31, %xmm1, %xmm1
4687 ; AVX2-NEXT:    vpmovsxdq %xmm1, %ymm1
4688 ; AVX2-NEXT:    vmaskmovpd %ymm0, %ymm1, (%rdi)
4689 ; AVX2-NEXT:    vzeroupper
4690 ; AVX2-NEXT:    retq
4692 ; AVX512F-LABEL: masked_store_bool_mask_demand_trunc_sext:
4693 ; AVX512F:       ## %bb.0:
4694 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
4695 ; AVX512F-NEXT:    vpslld $31, %xmm1, %xmm1
4696 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4697 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
4698 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
4699 ; AVX512F-NEXT:    vmovupd %zmm0, (%rdi) {%k1}
4700 ; AVX512F-NEXT:    vzeroupper
4701 ; AVX512F-NEXT:    retq
4703 ; AVX512VLDQ-LABEL: masked_store_bool_mask_demand_trunc_sext:
4704 ; AVX512VLDQ:       ## %bb.0:
4705 ; AVX512VLDQ-NEXT:    vpslld $31, %xmm1, %xmm1
4706 ; AVX512VLDQ-NEXT:    vpmovd2m %xmm1, %k1
4707 ; AVX512VLDQ-NEXT:    vmovupd %ymm0, (%rdi) {%k1}
4708 ; AVX512VLDQ-NEXT:    vzeroupper
4709 ; AVX512VLDQ-NEXT:    retq
4711 ; AVX512VLBW-LABEL: masked_store_bool_mask_demand_trunc_sext:
4712 ; AVX512VLBW:       ## %bb.0:
4713 ; AVX512VLBW-NEXT:    vpslld $31, %xmm1, %xmm1
4714 ; AVX512VLBW-NEXT:    vptestmd %xmm1, %xmm1, %k1
4715 ; AVX512VLBW-NEXT:    vmovupd %ymm0, (%rdi) {%k1}
4716 ; AVX512VLBW-NEXT:    vzeroupper
4717 ; AVX512VLBW-NEXT:    retq
4718   %sext = sext <4 x i32> %masksrc to <4 x i64>
4719   %boolmask = trunc <4 x i64> %sext to <4 x i1>
4720   call void @llvm.masked.store.v4f64.p0v4f64(<4 x double> %x, <4 x double>* %p, i32 4, <4 x i1> %boolmask)
4721   ret void
4724 ; PR26697
4726 define void @one_mask_bit_set1_variable(<4 x float>* %addr, <4 x float> %val, <4 x i32> %mask) {
4727 ; SSE2-LABEL: one_mask_bit_set1_variable:
4728 ; SSE2:       ## %bb.0:
4729 ; SSE2-NEXT:    movmskps %xmm1, %eax
4730 ; SSE2-NEXT:    testb $1, %al
4731 ; SSE2-NEXT:    jne LBB24_1
4732 ; SSE2-NEXT:  ## %bb.2: ## %else
4733 ; SSE2-NEXT:    testb $2, %al
4734 ; SSE2-NEXT:    jne LBB24_3
4735 ; SSE2-NEXT:  LBB24_4: ## %else2
4736 ; SSE2-NEXT:    testb $4, %al
4737 ; SSE2-NEXT:    jne LBB24_5
4738 ; SSE2-NEXT:  LBB24_6: ## %else4
4739 ; SSE2-NEXT:    testb $8, %al
4740 ; SSE2-NEXT:    jne LBB24_7
4741 ; SSE2-NEXT:  LBB24_8: ## %else6
4742 ; SSE2-NEXT:    retq
4743 ; SSE2-NEXT:  LBB24_1: ## %cond.store
4744 ; SSE2-NEXT:    movss %xmm0, (%rdi)
4745 ; SSE2-NEXT:    testb $2, %al
4746 ; SSE2-NEXT:    je LBB24_4
4747 ; SSE2-NEXT:  LBB24_3: ## %cond.store1
4748 ; SSE2-NEXT:    movaps %xmm0, %xmm1
4749 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[2,3]
4750 ; SSE2-NEXT:    movss %xmm1, 4(%rdi)
4751 ; SSE2-NEXT:    testb $4, %al
4752 ; SSE2-NEXT:    je LBB24_6
4753 ; SSE2-NEXT:  LBB24_5: ## %cond.store3
4754 ; SSE2-NEXT:    movaps %xmm0, %xmm1
4755 ; SSE2-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1]
4756 ; SSE2-NEXT:    movss %xmm1, 8(%rdi)
4757 ; SSE2-NEXT:    testb $8, %al
4758 ; SSE2-NEXT:    je LBB24_8
4759 ; SSE2-NEXT:  LBB24_7: ## %cond.store5
4760 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,1,2,3]
4761 ; SSE2-NEXT:    movss %xmm0, 12(%rdi)
4762 ; SSE2-NEXT:    retq
4764 ; SSE4-LABEL: one_mask_bit_set1_variable:
4765 ; SSE4:       ## %bb.0:
4766 ; SSE4-NEXT:    movmskps %xmm1, %eax
4767 ; SSE4-NEXT:    testb $1, %al
4768 ; SSE4-NEXT:    jne LBB24_1
4769 ; SSE4-NEXT:  ## %bb.2: ## %else
4770 ; SSE4-NEXT:    testb $2, %al
4771 ; SSE4-NEXT:    jne LBB24_3
4772 ; SSE4-NEXT:  LBB24_4: ## %else2
4773 ; SSE4-NEXT:    testb $4, %al
4774 ; SSE4-NEXT:    jne LBB24_5
4775 ; SSE4-NEXT:  LBB24_6: ## %else4
4776 ; SSE4-NEXT:    testb $8, %al
4777 ; SSE4-NEXT:    jne LBB24_7
4778 ; SSE4-NEXT:  LBB24_8: ## %else6
4779 ; SSE4-NEXT:    retq
4780 ; SSE4-NEXT:  LBB24_1: ## %cond.store
4781 ; SSE4-NEXT:    movss %xmm0, (%rdi)
4782 ; SSE4-NEXT:    testb $2, %al
4783 ; SSE4-NEXT:    je LBB24_4
4784 ; SSE4-NEXT:  LBB24_3: ## %cond.store1
4785 ; SSE4-NEXT:    extractps $1, %xmm0, 4(%rdi)
4786 ; SSE4-NEXT:    testb $4, %al
4787 ; SSE4-NEXT:    je LBB24_6
4788 ; SSE4-NEXT:  LBB24_5: ## %cond.store3
4789 ; SSE4-NEXT:    extractps $2, %xmm0, 8(%rdi)
4790 ; SSE4-NEXT:    testb $8, %al
4791 ; SSE4-NEXT:    je LBB24_8
4792 ; SSE4-NEXT:  LBB24_7: ## %cond.store5
4793 ; SSE4-NEXT:    extractps $3, %xmm0, 12(%rdi)
4794 ; SSE4-NEXT:    retq
4796 ; AVX1OR2-LABEL: one_mask_bit_set1_variable:
4797 ; AVX1OR2:       ## %bb.0:
4798 ; AVX1OR2-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
4799 ; AVX1OR2-NEXT:    retq
4801 ; AVX512F-LABEL: one_mask_bit_set1_variable:
4802 ; AVX512F:       ## %bb.0:
4803 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
4804 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
4805 ; AVX512F-NEXT:    vptestmd {{.*}}(%rip){1to16}, %zmm1, %k0
4806 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
4807 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
4808 ; AVX512F-NEXT:    vmovups %zmm0, (%rdi) {%k1}
4809 ; AVX512F-NEXT:    vzeroupper
4810 ; AVX512F-NEXT:    retq
4812 ; AVX512VL-LABEL: one_mask_bit_set1_variable:
4813 ; AVX512VL:       ## %bb.0:
4814 ; AVX512VL-NEXT:    vptestmd {{.*}}(%rip){1to4}, %xmm1, %k1
4815 ; AVX512VL-NEXT:    vmovups %xmm0, (%rdi) {%k1}
4816 ; AVX512VL-NEXT:    retq
4817   %mask_signbit = and <4 x i32> %mask, <i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648>
4818   %mask_bool = icmp ne <4 x i32> %mask_signbit, zeroinitializer
4819   call void @llvm.masked.store.v4f32.p0v4f32(<4 x float> %val, <4 x float>* %addr, i32 1, <4 x i1> %mask_bool)
4820   ret void
4823 ; This needs to be widened to v4i32.
4824 ; This used to assert in type legalization. PR38436
4825 ; FIXME: The codegen for AVX512 should use KSHIFT to zero the upper bits of the mask.
4826 define void @widen_masked_store(<3 x i32> %v, <3 x i32>* %p, <3 x i1> %mask) {
4827 ; SSE2-LABEL: widen_masked_store:
4828 ; SSE2:       ## %bb.0:
4829 ; SSE2-NEXT:    andb $1, %sil
4830 ; SSE2-NEXT:    andb $1, %dl
4831 ; SSE2-NEXT:    addb %dl, %dl
4832 ; SSE2-NEXT:    orb %sil, %dl
4833 ; SSE2-NEXT:    andb $1, %cl
4834 ; SSE2-NEXT:    shlb $2, %cl
4835 ; SSE2-NEXT:    orb %dl, %cl
4836 ; SSE2-NEXT:    testb $1, %cl
4837 ; SSE2-NEXT:    jne LBB25_1
4838 ; SSE2-NEXT:  ## %bb.2: ## %else
4839 ; SSE2-NEXT:    testb $2, %cl
4840 ; SSE2-NEXT:    jne LBB25_3
4841 ; SSE2-NEXT:  LBB25_4: ## %else2
4842 ; SSE2-NEXT:    testb $4, %cl
4843 ; SSE2-NEXT:    jne LBB25_5
4844 ; SSE2-NEXT:  LBB25_6: ## %else4
4845 ; SSE2-NEXT:    retq
4846 ; SSE2-NEXT:  LBB25_1: ## %cond.store
4847 ; SSE2-NEXT:    movd %xmm0, (%rdi)
4848 ; SSE2-NEXT:    testb $2, %cl
4849 ; SSE2-NEXT:    je LBB25_4
4850 ; SSE2-NEXT:  LBB25_3: ## %cond.store1
4851 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
4852 ; SSE2-NEXT:    movd %xmm1, 4(%rdi)
4853 ; SSE2-NEXT:    testb $4, %cl
4854 ; SSE2-NEXT:    je LBB25_6
4855 ; SSE2-NEXT:  LBB25_5: ## %cond.store3
4856 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
4857 ; SSE2-NEXT:    movd %xmm0, 8(%rdi)
4858 ; SSE2-NEXT:    retq
4860 ; SSE4-LABEL: widen_masked_store:
4861 ; SSE4:       ## %bb.0:
4862 ; SSE4-NEXT:    andb $1, %sil
4863 ; SSE4-NEXT:    andb $1, %dl
4864 ; SSE4-NEXT:    addb %dl, %dl
4865 ; SSE4-NEXT:    orb %sil, %dl
4866 ; SSE4-NEXT:    andb $1, %cl
4867 ; SSE4-NEXT:    shlb $2, %cl
4868 ; SSE4-NEXT:    orb %dl, %cl
4869 ; SSE4-NEXT:    testb $1, %cl
4870 ; SSE4-NEXT:    jne LBB25_1
4871 ; SSE4-NEXT:  ## %bb.2: ## %else
4872 ; SSE4-NEXT:    testb $2, %cl
4873 ; SSE4-NEXT:    jne LBB25_3
4874 ; SSE4-NEXT:  LBB25_4: ## %else2
4875 ; SSE4-NEXT:    testb $4, %cl
4876 ; SSE4-NEXT:    jne LBB25_5
4877 ; SSE4-NEXT:  LBB25_6: ## %else4
4878 ; SSE4-NEXT:    retq
4879 ; SSE4-NEXT:  LBB25_1: ## %cond.store
4880 ; SSE4-NEXT:    movss %xmm0, (%rdi)
4881 ; SSE4-NEXT:    testb $2, %cl
4882 ; SSE4-NEXT:    je LBB25_4
4883 ; SSE4-NEXT:  LBB25_3: ## %cond.store1
4884 ; SSE4-NEXT:    extractps $1, %xmm0, 4(%rdi)
4885 ; SSE4-NEXT:    testb $4, %cl
4886 ; SSE4-NEXT:    je LBB25_6
4887 ; SSE4-NEXT:  LBB25_5: ## %cond.store3
4888 ; SSE4-NEXT:    extractps $2, %xmm0, 8(%rdi)
4889 ; SSE4-NEXT:    retq
4891 ; AVX1-LABEL: widen_masked_store:
4892 ; AVX1:       ## %bb.0:
4893 ; AVX1-NEXT:    vmovd %edx, %xmm1
4894 ; AVX1-NEXT:    vmovd %esi, %xmm2
4895 ; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
4896 ; AVX1-NEXT:    vmovd %ecx, %xmm2
4897 ; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
4898 ; AVX1-NEXT:    vpslld $31, %xmm1, %xmm1
4899 ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
4900 ; AVX1-NEXT:    retq
4902 ; AVX2-LABEL: widen_masked_store:
4903 ; AVX2:       ## %bb.0:
4904 ; AVX2-NEXT:    vmovd %edx, %xmm1
4905 ; AVX2-NEXT:    vmovd %esi, %xmm2
4906 ; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
4907 ; AVX2-NEXT:    vmovd %ecx, %xmm2
4908 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
4909 ; AVX2-NEXT:    vpslld $31, %xmm1, %xmm1
4910 ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
4911 ; AVX2-NEXT:    retq
4913 ; AVX512F-LABEL: widen_masked_store:
4914 ; AVX512F:       ## %bb.0:
4915 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
4916 ; AVX512F-NEXT:    andl $1, %esi
4917 ; AVX512F-NEXT:    kmovw %esi, %k0
4918 ; AVX512F-NEXT:    kxorw %k0, %k0, %k1
4919 ; AVX512F-NEXT:    kshiftrw $1, %k1, %k1
4920 ; AVX512F-NEXT:    kshiftlw $1, %k1, %k1
4921 ; AVX512F-NEXT:    korw %k0, %k1, %k0
4922 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
4923 ; AVX512F-NEXT:    kshiftlw $2, %k1, %k1
4924 ; AVX512F-NEXT:    kshiftlw $15, %k0, %k0
4925 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
4926 ; AVX512F-NEXT:    kmovw %edx, %k2
4927 ; AVX512F-NEXT:    kshiftlw $15, %k2, %k2
4928 ; AVX512F-NEXT:    kshiftrw $14, %k2, %k2
4929 ; AVX512F-NEXT:    korw %k2, %k1, %k1
4930 ; AVX512F-NEXT:    korw %k1, %k0, %k0
4931 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k1
4932 ; AVX512F-NEXT:    kshiftlw $3, %k1, %k1
4933 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
4934 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k0
4935 ; AVX512F-NEXT:    korw %k1, %k0, %k0
4936 ; AVX512F-NEXT:    kmovw %ecx, %k1
4937 ; AVX512F-NEXT:    kshiftlw $15, %k1, %k1
4938 ; AVX512F-NEXT:    kshiftrw $13, %k1, %k1
4939 ; AVX512F-NEXT:    korw %k0, %k1, %k0
4940 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
4941 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
4942 ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
4943 ; AVX512F-NEXT:    vzeroupper
4944 ; AVX512F-NEXT:    retq
4946 ; AVX512VLDQ-LABEL: widen_masked_store:
4947 ; AVX512VLDQ:       ## %bb.0:
4948 ; AVX512VLDQ-NEXT:    kmovw %esi, %k0
4949 ; AVX512VLDQ-NEXT:    kshiftlb $7, %k0, %k0
4950 ; AVX512VLDQ-NEXT:    kshiftrb $7, %k0, %k0
4951 ; AVX512VLDQ-NEXT:    kxorw %k0, %k0, %k1
4952 ; AVX512VLDQ-NEXT:    kshiftrb $1, %k1, %k1
4953 ; AVX512VLDQ-NEXT:    kshiftlb $1, %k1, %k1
4954 ; AVX512VLDQ-NEXT:    korb %k0, %k1, %k0
4955 ; AVX512VLDQ-NEXT:    kshiftrb $2, %k0, %k1
4956 ; AVX512VLDQ-NEXT:    kshiftlb $2, %k1, %k1
4957 ; AVX512VLDQ-NEXT:    kshiftlb $7, %k0, %k0
4958 ; AVX512VLDQ-NEXT:    kshiftrb $7, %k0, %k0
4959 ; AVX512VLDQ-NEXT:    kmovw %edx, %k2
4960 ; AVX512VLDQ-NEXT:    kshiftlb $7, %k2, %k2
4961 ; AVX512VLDQ-NEXT:    kshiftrb $6, %k2, %k2
4962 ; AVX512VLDQ-NEXT:    korb %k2, %k1, %k1
4963 ; AVX512VLDQ-NEXT:    korb %k1, %k0, %k0
4964 ; AVX512VLDQ-NEXT:    kshiftrb $3, %k0, %k1
4965 ; AVX512VLDQ-NEXT:    kshiftlb $3, %k1, %k1
4966 ; AVX512VLDQ-NEXT:    kshiftlb $6, %k0, %k0
4967 ; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k0
4968 ; AVX512VLDQ-NEXT:    korw %k1, %k0, %k0
4969 ; AVX512VLDQ-NEXT:    kmovw %ecx, %k1
4970 ; AVX512VLDQ-NEXT:    kshiftlb $7, %k1, %k1
4971 ; AVX512VLDQ-NEXT:    kshiftrb $5, %k1, %k1
4972 ; AVX512VLDQ-NEXT:    korw %k0, %k1, %k1
4973 ; AVX512VLDQ-NEXT:    vmovdqa32 %xmm0, (%rdi) {%k1}
4974 ; AVX512VLDQ-NEXT:    retq
4976 ; AVX512VLBW-LABEL: widen_masked_store:
4977 ; AVX512VLBW:       ## %bb.0:
4978 ; AVX512VLBW-NEXT:    andl $1, %esi
4979 ; AVX512VLBW-NEXT:    kmovw %esi, %k0
4980 ; AVX512VLBW-NEXT:    kxorw %k0, %k0, %k1
4981 ; AVX512VLBW-NEXT:    kshiftrw $1, %k1, %k1
4982 ; AVX512VLBW-NEXT:    kshiftlw $1, %k1, %k1
4983 ; AVX512VLBW-NEXT:    korw %k0, %k1, %k0
4984 ; AVX512VLBW-NEXT:    kshiftrw $2, %k0, %k1
4985 ; AVX512VLBW-NEXT:    kshiftlw $2, %k1, %k1
4986 ; AVX512VLBW-NEXT:    kshiftlw $15, %k0, %k0
4987 ; AVX512VLBW-NEXT:    kshiftrw $15, %k0, %k0
4988 ; AVX512VLBW-NEXT:    kmovd %edx, %k2
4989 ; AVX512VLBW-NEXT:    kshiftlw $15, %k2, %k2
4990 ; AVX512VLBW-NEXT:    kshiftrw $14, %k2, %k2
4991 ; AVX512VLBW-NEXT:    korw %k2, %k1, %k1
4992 ; AVX512VLBW-NEXT:    korw %k1, %k0, %k0
4993 ; AVX512VLBW-NEXT:    kshiftrw $3, %k0, %k1
4994 ; AVX512VLBW-NEXT:    kshiftlw $3, %k1, %k1
4995 ; AVX512VLBW-NEXT:    kshiftlw $14, %k0, %k0
4996 ; AVX512VLBW-NEXT:    kshiftrw $14, %k0, %k0
4997 ; AVX512VLBW-NEXT:    korw %k1, %k0, %k0
4998 ; AVX512VLBW-NEXT:    kmovd %ecx, %k1
4999 ; AVX512VLBW-NEXT:    kshiftlw $15, %k1, %k1
5000 ; AVX512VLBW-NEXT:    kshiftrw $13, %k1, %k1
5001 ; AVX512VLBW-NEXT:    korw %k0, %k1, %k1
5002 ; AVX512VLBW-NEXT:    vmovdqa32 %xmm0, (%rdi) {%k1}
5003 ; AVX512VLBW-NEXT:    retq
5004   call void @llvm.masked.store.v3i32.p0v3i32(<3 x i32> %v, <3 x i32>* %p, i32 16, <3 x i1> %mask)
5005   ret void
5008 define void @zero_mask(<2 x double>* %addr, <2 x double> %val) {
5009 ; SSE-LABEL: zero_mask:
5010 ; SSE:       ## %bb.0:
5011 ; SSE-NEXT:    retq
5013 ; AVX-LABEL: zero_mask:
5014 ; AVX:       ## %bb.0:
5015 ; AVX-NEXT:    retq
5016   call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %addr, i32 4, <2 x i1> zeroinitializer)
5017   ret void
5020 declare void @llvm.masked.store.v8f64.p0v8f64(<8 x double>, <8 x double>*, i32, <8 x i1>)
5021 declare void @llvm.masked.store.v4f64.p0v4f64(<4 x double>, <4 x double>*, i32, <4 x i1>)
5022 declare void @llvm.masked.store.v2f64.p0v2f64(<2 x double>, <2 x double>*, i32, <2 x i1>)
5023 declare void @llvm.masked.store.v1f64.p0v1f64(<1 x double>, <1 x double>*, i32, <1 x i1>)
5025 declare void @llvm.masked.store.v16f32.p0v16f32(<16 x float>, <16 x float>*, i32, <16 x i1>)
5026 declare void @llvm.masked.store.v8f32.p0v8f32(<8 x float>, <8 x float>*, i32, <8 x i1>)
5027 declare void @llvm.masked.store.v4f32.p0v4f32(<4 x float>, <4 x float>*, i32, <4 x i1>)
5028 declare void @llvm.masked.store.v2f32.p0v2f32(<2 x float>, <2 x float>*, i32, <2 x i1>)
5030 declare void @llvm.masked.store.v8i64.p0v8i64(<8 x i64>, <8 x i64>*, i32, <8 x i1>)
5031 declare void @llvm.masked.store.v4i64.p0v4i64(<4 x i64>, <4 x i64>*, i32, <4 x i1>)
5032 declare void @llvm.masked.store.v2i64.p0v2i64(<2 x i64>, <2 x i64>*, i32, <2 x i1>)
5033 declare void @llvm.masked.store.v1i64.p0v1i64(<1 x i64>, <1 x i64>*, i32, <1 x i1>)
5035 declare void @llvm.masked.store.v16i32.p0v16i32(<16 x i32>, <16 x i32>*, i32, <16 x i1>)
5036 declare void @llvm.masked.store.v8i32.p0v8i32(<8 x i32>, <8 x i32>*, i32, <8 x i1>)
5037 declare void @llvm.masked.store.v4i32.p0v4i32(<4 x i32>, <4 x i32>*, i32, <4 x i1>)
5038 declare void @llvm.masked.store.v3i32.p0v3i32(<3 x i32>, <3 x i32>*, i32, <3 x i1>)
5039 declare void @llvm.masked.store.v2i32.p0v2i32(<2 x i32>, <2 x i32>*, i32, <2 x i1>)
5040 declare void @llvm.masked.store.v1i32.p0v1i32(<1 x i32>, <1 x i32>*, i32, <1 x i1>)
5042 declare void @llvm.masked.store.v32i16.p0v32i16(<32 x i16>, <32 x i16>*, i32, <32 x i1>)
5043 declare void @llvm.masked.store.v16i16.p0v16i16(<16 x i16>, <16 x i16>*, i32, <16 x i1>)
5044 declare void @llvm.masked.store.v8i16.p0v8i16(<8 x i16>, <8 x i16>*, i32, <8 x i1>)
5045 declare void @llvm.masked.store.v4i16.p0v4i16(<4 x i16>, <4 x i16>*, i32, <4 x i1>)
5047 declare void @llvm.masked.store.v64i8.p0v64i8(<64 x i8>, <64 x i8>*, i32, <64 x i1>)
5048 declare void @llvm.masked.store.v32i8.p0v32i8(<32 x i8>, <32 x i8>*, i32, <32 x i1>)
5049 declare void @llvm.masked.store.v16i8.p0v16i8(<16 x i8>, <16 x i8>*, i32, <16 x i1>)
5050 declare void @llvm.masked.store.v8i8.p0v8i8(<8 x i8>, <8 x i8>*, i32, <8 x i1>)