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