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