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