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