1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse2    | FileCheck %s --check-prefix=SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.2  | FileCheck %s --check-prefix=SSE4
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx     | FileCheck %s --check-prefixes=AVX,AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2    | FileCheck %s --check-prefixes=AVX,AVX2
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefix=AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512vl | FileCheck %s --check-prefix=AVX512VL
8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512bw | FileCheck %s --check-prefix=AVX512BW
9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512vl,avx512bw | FileCheck %s --check-prefixes=AVX512VL,AVX512BWVL
10
11define void @truncstore_v8i64_v8i32(<8 x i64> %x, <8 x i32>* %p, <8 x i32> %mask) {
12; SSE2-LABEL: truncstore_v8i64_v8i32:
13; SSE2:       # %bb.0:
14; SSE2-NEXT:    pxor %xmm6, %xmm6
15; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
16; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
17; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
18; SSE2-NEXT:    pxor %xmm1, %xmm5
19; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
20; SSE2-NEXT:    pxor %xmm1, %xmm4
21; SSE2-NEXT:    packssdw %xmm5, %xmm4
22; SSE2-NEXT:    packsswb %xmm4, %xmm4
23; SSE2-NEXT:    pmovmskb %xmm4, %eax
24; SSE2-NEXT:    testb $1, %al
25; SSE2-NEXT:    jne .LBB0_1
26; SSE2-NEXT:  # %bb.2: # %else
27; SSE2-NEXT:    testb $2, %al
28; SSE2-NEXT:    jne .LBB0_3
29; SSE2-NEXT:  .LBB0_4: # %else2
30; SSE2-NEXT:    testb $4, %al
31; SSE2-NEXT:    jne .LBB0_5
32; SSE2-NEXT:  .LBB0_6: # %else4
33; SSE2-NEXT:    testb $8, %al
34; SSE2-NEXT:    je .LBB0_8
35; SSE2-NEXT:  .LBB0_7: # %cond.store5
36; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
37; SSE2-NEXT:    movd %xmm0, 12(%rdi)
38; SSE2-NEXT:  .LBB0_8: # %else6
39; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
40; SSE2-NEXT:    testb $16, %al
41; SSE2-NEXT:    jne .LBB0_9
42; SSE2-NEXT:  # %bb.10: # %else8
43; SSE2-NEXT:    testb $32, %al
44; SSE2-NEXT:    jne .LBB0_11
45; SSE2-NEXT:  .LBB0_12: # %else10
46; SSE2-NEXT:    testb $64, %al
47; SSE2-NEXT:    jne .LBB0_13
48; SSE2-NEXT:  .LBB0_14: # %else12
49; SSE2-NEXT:    testb $-128, %al
50; SSE2-NEXT:    jne .LBB0_15
51; SSE2-NEXT:  .LBB0_16: # %else14
52; SSE2-NEXT:    retq
53; SSE2-NEXT:  .LBB0_1: # %cond.store
54; SSE2-NEXT:    movd %xmm0, (%rdi)
55; SSE2-NEXT:    testb $2, %al
56; SSE2-NEXT:    je .LBB0_4
57; SSE2-NEXT:  .LBB0_3: # %cond.store1
58; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
59; SSE2-NEXT:    movd %xmm1, 4(%rdi)
60; SSE2-NEXT:    testb $4, %al
61; SSE2-NEXT:    je .LBB0_6
62; SSE2-NEXT:  .LBB0_5: # %cond.store3
63; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
64; SSE2-NEXT:    movd %xmm1, 8(%rdi)
65; SSE2-NEXT:    testb $8, %al
66; SSE2-NEXT:    jne .LBB0_7
67; SSE2-NEXT:    jmp .LBB0_8
68; SSE2-NEXT:  .LBB0_9: # %cond.store7
69; SSE2-NEXT:    movss %xmm2, 16(%rdi)
70; SSE2-NEXT:    testb $32, %al
71; SSE2-NEXT:    je .LBB0_12
72; SSE2-NEXT:  .LBB0_11: # %cond.store9
73; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
74; SSE2-NEXT:    movd %xmm0, 20(%rdi)
75; SSE2-NEXT:    testb $64, %al
76; SSE2-NEXT:    je .LBB0_14
77; SSE2-NEXT:  .LBB0_13: # %cond.store11
78; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
79; SSE2-NEXT:    movd %xmm0, 24(%rdi)
80; SSE2-NEXT:    testb $-128, %al
81; SSE2-NEXT:    je .LBB0_16
82; SSE2-NEXT:  .LBB0_15: # %cond.store13
83; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[3,3,3,3]
84; SSE2-NEXT:    movd %xmm0, 28(%rdi)
85; SSE2-NEXT:    retq
86;
87; SSE4-LABEL: truncstore_v8i64_v8i32:
88; SSE4:       # %bb.0:
89; SSE4-NEXT:    pxor %xmm6, %xmm6
90; SSE4-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
91; SSE4-NEXT:    pcmpeqd %xmm6, %xmm5
92; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
93; SSE4-NEXT:    pxor %xmm1, %xmm5
94; SSE4-NEXT:    pcmpeqd %xmm6, %xmm4
95; SSE4-NEXT:    pxor %xmm1, %xmm4
96; SSE4-NEXT:    packssdw %xmm5, %xmm4
97; SSE4-NEXT:    packsswb %xmm4, %xmm4
98; SSE4-NEXT:    pmovmskb %xmm4, %eax
99; SSE4-NEXT:    testb $1, %al
100; SSE4-NEXT:    jne .LBB0_1
101; SSE4-NEXT:  # %bb.2: # %else
102; SSE4-NEXT:    testb $2, %al
103; SSE4-NEXT:    jne .LBB0_3
104; SSE4-NEXT:  .LBB0_4: # %else2
105; SSE4-NEXT:    testb $4, %al
106; SSE4-NEXT:    jne .LBB0_5
107; SSE4-NEXT:  .LBB0_6: # %else4
108; SSE4-NEXT:    testb $8, %al
109; SSE4-NEXT:    je .LBB0_8
110; SSE4-NEXT:  .LBB0_7: # %cond.store5
111; SSE4-NEXT:    pextrd $3, %xmm0, 12(%rdi)
112; SSE4-NEXT:  .LBB0_8: # %else6
113; SSE4-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
114; SSE4-NEXT:    testb $16, %al
115; SSE4-NEXT:    jne .LBB0_9
116; SSE4-NEXT:  # %bb.10: # %else8
117; SSE4-NEXT:    testb $32, %al
118; SSE4-NEXT:    jne .LBB0_11
119; SSE4-NEXT:  .LBB0_12: # %else10
120; SSE4-NEXT:    testb $64, %al
121; SSE4-NEXT:    jne .LBB0_13
122; SSE4-NEXT:  .LBB0_14: # %else12
123; SSE4-NEXT:    testb $-128, %al
124; SSE4-NEXT:    jne .LBB0_15
125; SSE4-NEXT:  .LBB0_16: # %else14
126; SSE4-NEXT:    retq
127; SSE4-NEXT:  .LBB0_1: # %cond.store
128; SSE4-NEXT:    movd %xmm0, (%rdi)
129; SSE4-NEXT:    testb $2, %al
130; SSE4-NEXT:    je .LBB0_4
131; SSE4-NEXT:  .LBB0_3: # %cond.store1
132; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)
133; SSE4-NEXT:    testb $4, %al
134; SSE4-NEXT:    je .LBB0_6
135; SSE4-NEXT:  .LBB0_5: # %cond.store3
136; SSE4-NEXT:    pextrd $2, %xmm0, 8(%rdi)
137; SSE4-NEXT:    testb $8, %al
138; SSE4-NEXT:    jne .LBB0_7
139; SSE4-NEXT:    jmp .LBB0_8
140; SSE4-NEXT:  .LBB0_9: # %cond.store7
141; SSE4-NEXT:    movss %xmm2, 16(%rdi)
142; SSE4-NEXT:    testb $32, %al
143; SSE4-NEXT:    je .LBB0_12
144; SSE4-NEXT:  .LBB0_11: # %cond.store9
145; SSE4-NEXT:    extractps $1, %xmm2, 20(%rdi)
146; SSE4-NEXT:    testb $64, %al
147; SSE4-NEXT:    je .LBB0_14
148; SSE4-NEXT:  .LBB0_13: # %cond.store11
149; SSE4-NEXT:    extractps $2, %xmm2, 24(%rdi)
150; SSE4-NEXT:    testb $-128, %al
151; SSE4-NEXT:    je .LBB0_16
152; SSE4-NEXT:  .LBB0_15: # %cond.store13
153; SSE4-NEXT:    extractps $3, %xmm2, 28(%rdi)
154; SSE4-NEXT:    retq
155;
156; AVX1-LABEL: truncstore_v8i64_v8i32:
157; AVX1:       # %bb.0:
158; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
159; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
160; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
161; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
162; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
163; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
164; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
165; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm2
166; AVX1-NEXT:    vperm2f128 {{.*#+}} ymm3 = ymm0[2,3],ymm1[2,3]
167; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
168; AVX1-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]
169; AVX1-NEXT:    vmaskmovps %ymm0, %ymm2, (%rdi)
170; AVX1-NEXT:    vzeroupper
171; AVX1-NEXT:    retq
172;
173; AVX2-LABEL: truncstore_v8i64_v8i32:
174; AVX2:       # %bb.0:
175; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
176; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm2
177; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
178; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
179; AVX2-NEXT:    vperm2f128 {{.*#+}} ymm3 = ymm0[2,3],ymm1[2,3]
180; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
181; AVX2-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm3[0,2],ymm0[4,6],ymm3[4,6]
182; AVX2-NEXT:    vpmaskmovd %ymm0, %ymm2, (%rdi)
183; AVX2-NEXT:    vzeroupper
184; AVX2-NEXT:    retq
185;
186; AVX512F-LABEL: truncstore_v8i64_v8i32:
187; AVX512F:       # %bb.0:
188; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
189; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k1
190; AVX512F-NEXT:    vpmovqd %zmm0, (%rdi) {%k1}
191; AVX512F-NEXT:    vzeroupper
192; AVX512F-NEXT:    retq
193;
194; AVX512VL-LABEL: truncstore_v8i64_v8i32:
195; AVX512VL:       # %bb.0:
196; AVX512VL-NEXT:    vptestmd %ymm1, %ymm1, %k1
197; AVX512VL-NEXT:    vpmovqd %zmm0, (%rdi) {%k1}
198; AVX512VL-NEXT:    vzeroupper
199; AVX512VL-NEXT:    retq
200;
201; AVX512BW-LABEL: truncstore_v8i64_v8i32:
202; AVX512BW:       # %bb.0:
203; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
204; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
205; AVX512BW-NEXT:    vpmovqd %zmm0, (%rdi) {%k1}
206; AVX512BW-NEXT:    vzeroupper
207; AVX512BW-NEXT:    retq
208  %a = icmp ne <8 x i32> %mask, zeroinitializer
209  %b = trunc <8 x i64> %x to <8 x i32>
210  call void @llvm.masked.store.v8i32.p0v8i32(<8 x i32> %b, <8 x i32>* %p, i32 1, <8 x i1> %a)
211  ret void
212}
213
214define void @truncstore_v8i64_v8i16(<8 x i64> %x, <8 x i16>* %p, <8 x i32> %mask) {
215; SSE2-LABEL: truncstore_v8i64_v8i16:
216; SSE2:       # %bb.0:
217; SSE2-NEXT:    pxor %xmm6, %xmm6
218; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
219; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
220; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
221; SSE2-NEXT:    pshuflw {{.*#+}} xmm7 = xmm0[0,2,2,3,4,5,6,7]
222; SSE2-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]
223; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
224; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,1,0,2,4,5,6,7]
225; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
226; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7]
227; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
228; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm7[0],xmm0[1]
229; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
230; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
231; SSE2-NEXT:    pxor %xmm1, %xmm5
232; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
233; SSE2-NEXT:    pxor %xmm1, %xmm4
234; SSE2-NEXT:    packssdw %xmm5, %xmm4
235; SSE2-NEXT:    packsswb %xmm4, %xmm4
236; SSE2-NEXT:    pmovmskb %xmm4, %eax
237; SSE2-NEXT:    testb $1, %al
238; SSE2-NEXT:    jne .LBB1_1
239; SSE2-NEXT:  # %bb.2: # %else
240; SSE2-NEXT:    testb $2, %al
241; SSE2-NEXT:    jne .LBB1_3
242; SSE2-NEXT:  .LBB1_4: # %else2
243; SSE2-NEXT:    testb $4, %al
244; SSE2-NEXT:    jne .LBB1_5
245; SSE2-NEXT:  .LBB1_6: # %else4
246; SSE2-NEXT:    testb $8, %al
247; SSE2-NEXT:    jne .LBB1_7
248; SSE2-NEXT:  .LBB1_8: # %else6
249; SSE2-NEXT:    testb $16, %al
250; SSE2-NEXT:    jne .LBB1_9
251; SSE2-NEXT:  .LBB1_10: # %else8
252; SSE2-NEXT:    testb $32, %al
253; SSE2-NEXT:    jne .LBB1_11
254; SSE2-NEXT:  .LBB1_12: # %else10
255; SSE2-NEXT:    testb $64, %al
256; SSE2-NEXT:    jne .LBB1_13
257; SSE2-NEXT:  .LBB1_14: # %else12
258; SSE2-NEXT:    testb $-128, %al
259; SSE2-NEXT:    jne .LBB1_15
260; SSE2-NEXT:  .LBB1_16: # %else14
261; SSE2-NEXT:    retq
262; SSE2-NEXT:  .LBB1_1: # %cond.store
263; SSE2-NEXT:    movd %xmm0, %ecx
264; SSE2-NEXT:    movw %cx, (%rdi)
265; SSE2-NEXT:    testb $2, %al
266; SSE2-NEXT:    je .LBB1_4
267; SSE2-NEXT:  .LBB1_3: # %cond.store1
268; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
269; SSE2-NEXT:    movw %cx, 2(%rdi)
270; SSE2-NEXT:    testb $4, %al
271; SSE2-NEXT:    je .LBB1_6
272; SSE2-NEXT:  .LBB1_5: # %cond.store3
273; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
274; SSE2-NEXT:    movw %cx, 4(%rdi)
275; SSE2-NEXT:    testb $8, %al
276; SSE2-NEXT:    je .LBB1_8
277; SSE2-NEXT:  .LBB1_7: # %cond.store5
278; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
279; SSE2-NEXT:    movw %cx, 6(%rdi)
280; SSE2-NEXT:    testb $16, %al
281; SSE2-NEXT:    je .LBB1_10
282; SSE2-NEXT:  .LBB1_9: # %cond.store7
283; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
284; SSE2-NEXT:    movw %cx, 8(%rdi)
285; SSE2-NEXT:    testb $32, %al
286; SSE2-NEXT:    je .LBB1_12
287; SSE2-NEXT:  .LBB1_11: # %cond.store9
288; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
289; SSE2-NEXT:    movw %cx, 10(%rdi)
290; SSE2-NEXT:    testb $64, %al
291; SSE2-NEXT:    je .LBB1_14
292; SSE2-NEXT:  .LBB1_13: # %cond.store11
293; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
294; SSE2-NEXT:    movw %cx, 12(%rdi)
295; SSE2-NEXT:    testb $-128, %al
296; SSE2-NEXT:    je .LBB1_16
297; SSE2-NEXT:  .LBB1_15: # %cond.store13
298; SSE2-NEXT:    pextrw $7, %xmm0, %eax
299; SSE2-NEXT:    movw %ax, 14(%rdi)
300; SSE2-NEXT:    retq
301;
302; SSE4-LABEL: truncstore_v8i64_v8i16:
303; SSE4:       # %bb.0:
304; SSE4-NEXT:    pxor %xmm6, %xmm6
305; SSE4-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm6[1,2,3],xmm3[4],xmm6[5,6,7]
306; SSE4-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0],xmm6[1,2,3],xmm2[4],xmm6[5,6,7]
307; SSE4-NEXT:    packusdw %xmm3, %xmm2
308; SSE4-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm6[1,2,3],xmm1[4],xmm6[5,6,7]
309; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm6[1,2,3],xmm0[4],xmm6[5,6,7]
310; SSE4-NEXT:    packusdw %xmm1, %xmm0
311; SSE4-NEXT:    packusdw %xmm2, %xmm0
312; SSE4-NEXT:    pcmpeqd %xmm6, %xmm5
313; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
314; SSE4-NEXT:    pxor %xmm1, %xmm5
315; SSE4-NEXT:    pcmpeqd %xmm6, %xmm4
316; SSE4-NEXT:    pxor %xmm1, %xmm4
317; SSE4-NEXT:    packssdw %xmm5, %xmm4
318; SSE4-NEXT:    packsswb %xmm4, %xmm4
319; SSE4-NEXT:    pmovmskb %xmm4, %eax
320; SSE4-NEXT:    testb $1, %al
321; SSE4-NEXT:    jne .LBB1_1
322; SSE4-NEXT:  # %bb.2: # %else
323; SSE4-NEXT:    testb $2, %al
324; SSE4-NEXT:    jne .LBB1_3
325; SSE4-NEXT:  .LBB1_4: # %else2
326; SSE4-NEXT:    testb $4, %al
327; SSE4-NEXT:    jne .LBB1_5
328; SSE4-NEXT:  .LBB1_6: # %else4
329; SSE4-NEXT:    testb $8, %al
330; SSE4-NEXT:    jne .LBB1_7
331; SSE4-NEXT:  .LBB1_8: # %else6
332; SSE4-NEXT:    testb $16, %al
333; SSE4-NEXT:    jne .LBB1_9
334; SSE4-NEXT:  .LBB1_10: # %else8
335; SSE4-NEXT:    testb $32, %al
336; SSE4-NEXT:    jne .LBB1_11
337; SSE4-NEXT:  .LBB1_12: # %else10
338; SSE4-NEXT:    testb $64, %al
339; SSE4-NEXT:    jne .LBB1_13
340; SSE4-NEXT:  .LBB1_14: # %else12
341; SSE4-NEXT:    testb $-128, %al
342; SSE4-NEXT:    jne .LBB1_15
343; SSE4-NEXT:  .LBB1_16: # %else14
344; SSE4-NEXT:    retq
345; SSE4-NEXT:  .LBB1_1: # %cond.store
346; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
347; SSE4-NEXT:    testb $2, %al
348; SSE4-NEXT:    je .LBB1_4
349; SSE4-NEXT:  .LBB1_3: # %cond.store1
350; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
351; SSE4-NEXT:    testb $4, %al
352; SSE4-NEXT:    je .LBB1_6
353; SSE4-NEXT:  .LBB1_5: # %cond.store3
354; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
355; SSE4-NEXT:    testb $8, %al
356; SSE4-NEXT:    je .LBB1_8
357; SSE4-NEXT:  .LBB1_7: # %cond.store5
358; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
359; SSE4-NEXT:    testb $16, %al
360; SSE4-NEXT:    je .LBB1_10
361; SSE4-NEXT:  .LBB1_9: # %cond.store7
362; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
363; SSE4-NEXT:    testb $32, %al
364; SSE4-NEXT:    je .LBB1_12
365; SSE4-NEXT:  .LBB1_11: # %cond.store9
366; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
367; SSE4-NEXT:    testb $64, %al
368; SSE4-NEXT:    je .LBB1_14
369; SSE4-NEXT:  .LBB1_13: # %cond.store11
370; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
371; SSE4-NEXT:    testb $-128, %al
372; SSE4-NEXT:    je .LBB1_16
373; SSE4-NEXT:  .LBB1_15: # %cond.store13
374; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
375; SSE4-NEXT:    retq
376;
377; AVX1-LABEL: truncstore_v8i64_v8i16:
378; AVX1:       # %bb.0:
379; AVX1-NEXT:    vmovaps {{.*#+}} ymm3 = [65535,65535,65535,65535]
380; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
381; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
382; AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1
383; AVX1-NEXT:    vandps %ymm3, %ymm0, %ymm0
384; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
385; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
386; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
387; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1
388; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
389; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
390; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
391; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
392; AVX1-NEXT:    vmovmskps %ymm1, %eax
393; AVX1-NEXT:    notl %eax
394; AVX1-NEXT:    testb $1, %al
395; AVX1-NEXT:    jne .LBB1_1
396; AVX1-NEXT:  # %bb.2: # %else
397; AVX1-NEXT:    testb $2, %al
398; AVX1-NEXT:    jne .LBB1_3
399; AVX1-NEXT:  .LBB1_4: # %else2
400; AVX1-NEXT:    testb $4, %al
401; AVX1-NEXT:    jne .LBB1_5
402; AVX1-NEXT:  .LBB1_6: # %else4
403; AVX1-NEXT:    testb $8, %al
404; AVX1-NEXT:    jne .LBB1_7
405; AVX1-NEXT:  .LBB1_8: # %else6
406; AVX1-NEXT:    testb $16, %al
407; AVX1-NEXT:    jne .LBB1_9
408; AVX1-NEXT:  .LBB1_10: # %else8
409; AVX1-NEXT:    testb $32, %al
410; AVX1-NEXT:    jne .LBB1_11
411; AVX1-NEXT:  .LBB1_12: # %else10
412; AVX1-NEXT:    testb $64, %al
413; AVX1-NEXT:    jne .LBB1_13
414; AVX1-NEXT:  .LBB1_14: # %else12
415; AVX1-NEXT:    testb $-128, %al
416; AVX1-NEXT:    jne .LBB1_15
417; AVX1-NEXT:  .LBB1_16: # %else14
418; AVX1-NEXT:    vzeroupper
419; AVX1-NEXT:    retq
420; AVX1-NEXT:  .LBB1_1: # %cond.store
421; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
422; AVX1-NEXT:    testb $2, %al
423; AVX1-NEXT:    je .LBB1_4
424; AVX1-NEXT:  .LBB1_3: # %cond.store1
425; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
426; AVX1-NEXT:    testb $4, %al
427; AVX1-NEXT:    je .LBB1_6
428; AVX1-NEXT:  .LBB1_5: # %cond.store3
429; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
430; AVX1-NEXT:    testb $8, %al
431; AVX1-NEXT:    je .LBB1_8
432; AVX1-NEXT:  .LBB1_7: # %cond.store5
433; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
434; AVX1-NEXT:    testb $16, %al
435; AVX1-NEXT:    je .LBB1_10
436; AVX1-NEXT:  .LBB1_9: # %cond.store7
437; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
438; AVX1-NEXT:    testb $32, %al
439; AVX1-NEXT:    je .LBB1_12
440; AVX1-NEXT:  .LBB1_11: # %cond.store9
441; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
442; AVX1-NEXT:    testb $64, %al
443; AVX1-NEXT:    je .LBB1_14
444; AVX1-NEXT:  .LBB1_13: # %cond.store11
445; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
446; AVX1-NEXT:    testb $-128, %al
447; AVX1-NEXT:    je .LBB1_16
448; AVX1-NEXT:  .LBB1_15: # %cond.store13
449; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
450; AVX1-NEXT:    vzeroupper
451; AVX1-NEXT:    retq
452;
453; AVX2-LABEL: truncstore_v8i64_v8i16:
454; AVX2:       # %bb.0:
455; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
456; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm3[1,2,3],ymm1[4],ymm3[5,6,7],ymm1[8],ymm3[9,10,11],ymm1[12],ymm3[13,14,15]
457; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm3[1,2,3],ymm0[4],ymm3[5,6,7],ymm0[8],ymm3[9,10,11],ymm0[12],ymm3[13,14,15]
458; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
459; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
460; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
461; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
462; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1
463; AVX2-NEXT:    vmovmskps %ymm1, %eax
464; AVX2-NEXT:    notl %eax
465; AVX2-NEXT:    testb $1, %al
466; AVX2-NEXT:    jne .LBB1_1
467; AVX2-NEXT:  # %bb.2: # %else
468; AVX2-NEXT:    testb $2, %al
469; AVX2-NEXT:    jne .LBB1_3
470; AVX2-NEXT:  .LBB1_4: # %else2
471; AVX2-NEXT:    testb $4, %al
472; AVX2-NEXT:    jne .LBB1_5
473; AVX2-NEXT:  .LBB1_6: # %else4
474; AVX2-NEXT:    testb $8, %al
475; AVX2-NEXT:    jne .LBB1_7
476; AVX2-NEXT:  .LBB1_8: # %else6
477; AVX2-NEXT:    testb $16, %al
478; AVX2-NEXT:    jne .LBB1_9
479; AVX2-NEXT:  .LBB1_10: # %else8
480; AVX2-NEXT:    testb $32, %al
481; AVX2-NEXT:    jne .LBB1_11
482; AVX2-NEXT:  .LBB1_12: # %else10
483; AVX2-NEXT:    testb $64, %al
484; AVX2-NEXT:    jne .LBB1_13
485; AVX2-NEXT:  .LBB1_14: # %else12
486; AVX2-NEXT:    testb $-128, %al
487; AVX2-NEXT:    jne .LBB1_15
488; AVX2-NEXT:  .LBB1_16: # %else14
489; AVX2-NEXT:    vzeroupper
490; AVX2-NEXT:    retq
491; AVX2-NEXT:  .LBB1_1: # %cond.store
492; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
493; AVX2-NEXT:    testb $2, %al
494; AVX2-NEXT:    je .LBB1_4
495; AVX2-NEXT:  .LBB1_3: # %cond.store1
496; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
497; AVX2-NEXT:    testb $4, %al
498; AVX2-NEXT:    je .LBB1_6
499; AVX2-NEXT:  .LBB1_5: # %cond.store3
500; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
501; AVX2-NEXT:    testb $8, %al
502; AVX2-NEXT:    je .LBB1_8
503; AVX2-NEXT:  .LBB1_7: # %cond.store5
504; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
505; AVX2-NEXT:    testb $16, %al
506; AVX2-NEXT:    je .LBB1_10
507; AVX2-NEXT:  .LBB1_9: # %cond.store7
508; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
509; AVX2-NEXT:    testb $32, %al
510; AVX2-NEXT:    je .LBB1_12
511; AVX2-NEXT:  .LBB1_11: # %cond.store9
512; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
513; AVX2-NEXT:    testb $64, %al
514; AVX2-NEXT:    je .LBB1_14
515; AVX2-NEXT:  .LBB1_13: # %cond.store11
516; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
517; AVX2-NEXT:    testb $-128, %al
518; AVX2-NEXT:    je .LBB1_16
519; AVX2-NEXT:  .LBB1_15: # %cond.store13
520; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
521; AVX2-NEXT:    vzeroupper
522; AVX2-NEXT:    retq
523;
524; AVX512F-LABEL: truncstore_v8i64_v8i16:
525; AVX512F:       # %bb.0:
526; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
527; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
528; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0
529; AVX512F-NEXT:    kmovw %k0, %eax
530; AVX512F-NEXT:    testb $1, %al
531; AVX512F-NEXT:    jne .LBB1_1
532; AVX512F-NEXT:  # %bb.2: # %else
533; AVX512F-NEXT:    testb $2, %al
534; AVX512F-NEXT:    jne .LBB1_3
535; AVX512F-NEXT:  .LBB1_4: # %else2
536; AVX512F-NEXT:    testb $4, %al
537; AVX512F-NEXT:    jne .LBB1_5
538; AVX512F-NEXT:  .LBB1_6: # %else4
539; AVX512F-NEXT:    testb $8, %al
540; AVX512F-NEXT:    jne .LBB1_7
541; AVX512F-NEXT:  .LBB1_8: # %else6
542; AVX512F-NEXT:    testb $16, %al
543; AVX512F-NEXT:    jne .LBB1_9
544; AVX512F-NEXT:  .LBB1_10: # %else8
545; AVX512F-NEXT:    testb $32, %al
546; AVX512F-NEXT:    jne .LBB1_11
547; AVX512F-NEXT:  .LBB1_12: # %else10
548; AVX512F-NEXT:    testb $64, %al
549; AVX512F-NEXT:    jne .LBB1_13
550; AVX512F-NEXT:  .LBB1_14: # %else12
551; AVX512F-NEXT:    testb $-128, %al
552; AVX512F-NEXT:    jne .LBB1_15
553; AVX512F-NEXT:  .LBB1_16: # %else14
554; AVX512F-NEXT:    vzeroupper
555; AVX512F-NEXT:    retq
556; AVX512F-NEXT:  .LBB1_1: # %cond.store
557; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
558; AVX512F-NEXT:    testb $2, %al
559; AVX512F-NEXT:    je .LBB1_4
560; AVX512F-NEXT:  .LBB1_3: # %cond.store1
561; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
562; AVX512F-NEXT:    testb $4, %al
563; AVX512F-NEXT:    je .LBB1_6
564; AVX512F-NEXT:  .LBB1_5: # %cond.store3
565; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
566; AVX512F-NEXT:    testb $8, %al
567; AVX512F-NEXT:    je .LBB1_8
568; AVX512F-NEXT:  .LBB1_7: # %cond.store5
569; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
570; AVX512F-NEXT:    testb $16, %al
571; AVX512F-NEXT:    je .LBB1_10
572; AVX512F-NEXT:  .LBB1_9: # %cond.store7
573; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
574; AVX512F-NEXT:    testb $32, %al
575; AVX512F-NEXT:    je .LBB1_12
576; AVX512F-NEXT:  .LBB1_11: # %cond.store9
577; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
578; AVX512F-NEXT:    testb $64, %al
579; AVX512F-NEXT:    je .LBB1_14
580; AVX512F-NEXT:  .LBB1_13: # %cond.store11
581; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
582; AVX512F-NEXT:    testb $-128, %al
583; AVX512F-NEXT:    je .LBB1_16
584; AVX512F-NEXT:  .LBB1_15: # %cond.store13
585; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
586; AVX512F-NEXT:    vzeroupper
587; AVX512F-NEXT:    retq
588;
589; AVX512BW-LABEL: truncstore_v8i64_v8i16:
590; AVX512BW:       # %bb.0:
591; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
592; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
593; AVX512BW-NEXT:    vpmovqw %zmm0, (%rdi) {%k1}
594; AVX512BW-NEXT:    vzeroupper
595; AVX512BW-NEXT:    retq
596;
597; AVX512BWVL-LABEL: truncstore_v8i64_v8i16:
598; AVX512BWVL:       # %bb.0:
599; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
600; AVX512BWVL-NEXT:    vpmovqw %zmm0, (%rdi) {%k1}
601; AVX512BWVL-NEXT:    vzeroupper
602; AVX512BWVL-NEXT:    retq
603  %a = icmp ne <8 x i32> %mask, zeroinitializer
604  %b = trunc <8 x i64> %x to <8 x i16>
605  call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> %b, <8 x i16>* %p, i32 1, <8 x i1> %a)
606  ret void
607}
608
609define void @truncstore_v8i64_v8i8(<8 x i64> %x, <8 x i8>* %p, <8 x i32> %mask) {
610; SSE2-LABEL: truncstore_v8i64_v8i8:
611; SSE2:       # %bb.0:
612; SSE2-NEXT:    pxor %xmm6, %xmm6
613; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
614; SSE2-NEXT:    pand %xmm7, %xmm3
615; SSE2-NEXT:    pand %xmm7, %xmm2
616; SSE2-NEXT:    packuswb %xmm3, %xmm2
617; SSE2-NEXT:    pand %xmm7, %xmm1
618; SSE2-NEXT:    pand %xmm7, %xmm0
619; SSE2-NEXT:    packuswb %xmm1, %xmm0
620; SSE2-NEXT:    packuswb %xmm2, %xmm0
621; SSE2-NEXT:    packuswb %xmm0, %xmm0
622; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
623; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
624; SSE2-NEXT:    pxor %xmm1, %xmm5
625; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
626; SSE2-NEXT:    pxor %xmm1, %xmm4
627; SSE2-NEXT:    packssdw %xmm5, %xmm4
628; SSE2-NEXT:    packsswb %xmm4, %xmm4
629; SSE2-NEXT:    pmovmskb %xmm4, %eax
630; SSE2-NEXT:    testb $1, %al
631; SSE2-NEXT:    movd %xmm0, %ecx
632; SSE2-NEXT:    jne .LBB2_1
633; SSE2-NEXT:  # %bb.2: # %else
634; SSE2-NEXT:    testb $2, %al
635; SSE2-NEXT:    jne .LBB2_3
636; SSE2-NEXT:  .LBB2_4: # %else2
637; SSE2-NEXT:    testb $4, %al
638; SSE2-NEXT:    jne .LBB2_5
639; SSE2-NEXT:  .LBB2_6: # %else4
640; SSE2-NEXT:    testb $8, %al
641; SSE2-NEXT:    je .LBB2_8
642; SSE2-NEXT:  .LBB2_7: # %cond.store5
643; SSE2-NEXT:    shrl $24, %ecx
644; SSE2-NEXT:    movb %cl, 3(%rdi)
645; SSE2-NEXT:  .LBB2_8: # %else6
646; SSE2-NEXT:    testb $16, %al
647; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
648; SSE2-NEXT:    je .LBB2_10
649; SSE2-NEXT:  # %bb.9: # %cond.store7
650; SSE2-NEXT:    movb %cl, 4(%rdi)
651; SSE2-NEXT:  .LBB2_10: # %else8
652; SSE2-NEXT:    testb $32, %al
653; SSE2-NEXT:    je .LBB2_12
654; SSE2-NEXT:  # %bb.11: # %cond.store9
655; SSE2-NEXT:    movb %ch, 5(%rdi)
656; SSE2-NEXT:  .LBB2_12: # %else10
657; SSE2-NEXT:    testb $64, %al
658; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
659; SSE2-NEXT:    jne .LBB2_13
660; SSE2-NEXT:  # %bb.14: # %else12
661; SSE2-NEXT:    testb $-128, %al
662; SSE2-NEXT:    jne .LBB2_15
663; SSE2-NEXT:  .LBB2_16: # %else14
664; SSE2-NEXT:    retq
665; SSE2-NEXT:  .LBB2_1: # %cond.store
666; SSE2-NEXT:    movb %cl, (%rdi)
667; SSE2-NEXT:    testb $2, %al
668; SSE2-NEXT:    je .LBB2_4
669; SSE2-NEXT:  .LBB2_3: # %cond.store1
670; SSE2-NEXT:    movb %ch, 1(%rdi)
671; SSE2-NEXT:    testb $4, %al
672; SSE2-NEXT:    je .LBB2_6
673; SSE2-NEXT:  .LBB2_5: # %cond.store3
674; SSE2-NEXT:    movl %ecx, %edx
675; SSE2-NEXT:    shrl $16, %edx
676; SSE2-NEXT:    movb %dl, 2(%rdi)
677; SSE2-NEXT:    testb $8, %al
678; SSE2-NEXT:    jne .LBB2_7
679; SSE2-NEXT:    jmp .LBB2_8
680; SSE2-NEXT:  .LBB2_13: # %cond.store11
681; SSE2-NEXT:    movb %cl, 6(%rdi)
682; SSE2-NEXT:    testb $-128, %al
683; SSE2-NEXT:    je .LBB2_16
684; SSE2-NEXT:  .LBB2_15: # %cond.store13
685; SSE2-NEXT:    movb %ch, 7(%rdi)
686; SSE2-NEXT:    retq
687;
688; SSE4-LABEL: truncstore_v8i64_v8i8:
689; SSE4:       # %bb.0:
690; SSE4-NEXT:    pxor %xmm6, %xmm6
691; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
692; SSE4-NEXT:    pand %xmm7, %xmm3
693; SSE4-NEXT:    pand %xmm7, %xmm2
694; SSE4-NEXT:    packusdw %xmm3, %xmm2
695; SSE4-NEXT:    pand %xmm7, %xmm1
696; SSE4-NEXT:    pand %xmm7, %xmm0
697; SSE4-NEXT:    packusdw %xmm1, %xmm0
698; SSE4-NEXT:    packusdw %xmm2, %xmm0
699; SSE4-NEXT:    packuswb %xmm0, %xmm0
700; SSE4-NEXT:    pcmpeqd %xmm6, %xmm5
701; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
702; SSE4-NEXT:    pxor %xmm1, %xmm5
703; SSE4-NEXT:    pcmpeqd %xmm6, %xmm4
704; SSE4-NEXT:    pxor %xmm1, %xmm4
705; SSE4-NEXT:    packssdw %xmm5, %xmm4
706; SSE4-NEXT:    packsswb %xmm4, %xmm4
707; SSE4-NEXT:    pmovmskb %xmm4, %eax
708; SSE4-NEXT:    testb $1, %al
709; SSE4-NEXT:    jne .LBB2_1
710; SSE4-NEXT:  # %bb.2: # %else
711; SSE4-NEXT:    testb $2, %al
712; SSE4-NEXT:    jne .LBB2_3
713; SSE4-NEXT:  .LBB2_4: # %else2
714; SSE4-NEXT:    testb $4, %al
715; SSE4-NEXT:    jne .LBB2_5
716; SSE4-NEXT:  .LBB2_6: # %else4
717; SSE4-NEXT:    testb $8, %al
718; SSE4-NEXT:    jne .LBB2_7
719; SSE4-NEXT:  .LBB2_8: # %else6
720; SSE4-NEXT:    testb $16, %al
721; SSE4-NEXT:    jne .LBB2_9
722; SSE4-NEXT:  .LBB2_10: # %else8
723; SSE4-NEXT:    testb $32, %al
724; SSE4-NEXT:    jne .LBB2_11
725; SSE4-NEXT:  .LBB2_12: # %else10
726; SSE4-NEXT:    testb $64, %al
727; SSE4-NEXT:    jne .LBB2_13
728; SSE4-NEXT:  .LBB2_14: # %else12
729; SSE4-NEXT:    testb $-128, %al
730; SSE4-NEXT:    jne .LBB2_15
731; SSE4-NEXT:  .LBB2_16: # %else14
732; SSE4-NEXT:    retq
733; SSE4-NEXT:  .LBB2_1: # %cond.store
734; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
735; SSE4-NEXT:    testb $2, %al
736; SSE4-NEXT:    je .LBB2_4
737; SSE4-NEXT:  .LBB2_3: # %cond.store1
738; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
739; SSE4-NEXT:    testb $4, %al
740; SSE4-NEXT:    je .LBB2_6
741; SSE4-NEXT:  .LBB2_5: # %cond.store3
742; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
743; SSE4-NEXT:    testb $8, %al
744; SSE4-NEXT:    je .LBB2_8
745; SSE4-NEXT:  .LBB2_7: # %cond.store5
746; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
747; SSE4-NEXT:    testb $16, %al
748; SSE4-NEXT:    je .LBB2_10
749; SSE4-NEXT:  .LBB2_9: # %cond.store7
750; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
751; SSE4-NEXT:    testb $32, %al
752; SSE4-NEXT:    je .LBB2_12
753; SSE4-NEXT:  .LBB2_11: # %cond.store9
754; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
755; SSE4-NEXT:    testb $64, %al
756; SSE4-NEXT:    je .LBB2_14
757; SSE4-NEXT:  .LBB2_13: # %cond.store11
758; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
759; SSE4-NEXT:    testb $-128, %al
760; SSE4-NEXT:    je .LBB2_16
761; SSE4-NEXT:  .LBB2_15: # %cond.store13
762; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
763; SSE4-NEXT:    retq
764;
765; AVX1-LABEL: truncstore_v8i64_v8i8:
766; AVX1:       # %bb.0:
767; AVX1-NEXT:    vmovaps {{.*#+}} ymm3 = [255,255,255,255]
768; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
769; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
770; AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1
771; AVX1-NEXT:    vandps %ymm3, %ymm0, %ymm0
772; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
773; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
774; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
775; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
776; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1
777; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
778; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
779; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
780; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
781; AVX1-NEXT:    vmovmskps %ymm1, %eax
782; AVX1-NEXT:    notl %eax
783; AVX1-NEXT:    testb $1, %al
784; AVX1-NEXT:    jne .LBB2_1
785; AVX1-NEXT:  # %bb.2: # %else
786; AVX1-NEXT:    testb $2, %al
787; AVX1-NEXT:    jne .LBB2_3
788; AVX1-NEXT:  .LBB2_4: # %else2
789; AVX1-NEXT:    testb $4, %al
790; AVX1-NEXT:    jne .LBB2_5
791; AVX1-NEXT:  .LBB2_6: # %else4
792; AVX1-NEXT:    testb $8, %al
793; AVX1-NEXT:    jne .LBB2_7
794; AVX1-NEXT:  .LBB2_8: # %else6
795; AVX1-NEXT:    testb $16, %al
796; AVX1-NEXT:    jne .LBB2_9
797; AVX1-NEXT:  .LBB2_10: # %else8
798; AVX1-NEXT:    testb $32, %al
799; AVX1-NEXT:    jne .LBB2_11
800; AVX1-NEXT:  .LBB2_12: # %else10
801; AVX1-NEXT:    testb $64, %al
802; AVX1-NEXT:    jne .LBB2_13
803; AVX1-NEXT:  .LBB2_14: # %else12
804; AVX1-NEXT:    testb $-128, %al
805; AVX1-NEXT:    jne .LBB2_15
806; AVX1-NEXT:  .LBB2_16: # %else14
807; AVX1-NEXT:    vzeroupper
808; AVX1-NEXT:    retq
809; AVX1-NEXT:  .LBB2_1: # %cond.store
810; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
811; AVX1-NEXT:    testb $2, %al
812; AVX1-NEXT:    je .LBB2_4
813; AVX1-NEXT:  .LBB2_3: # %cond.store1
814; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
815; AVX1-NEXT:    testb $4, %al
816; AVX1-NEXT:    je .LBB2_6
817; AVX1-NEXT:  .LBB2_5: # %cond.store3
818; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
819; AVX1-NEXT:    testb $8, %al
820; AVX1-NEXT:    je .LBB2_8
821; AVX1-NEXT:  .LBB2_7: # %cond.store5
822; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
823; AVX1-NEXT:    testb $16, %al
824; AVX1-NEXT:    je .LBB2_10
825; AVX1-NEXT:  .LBB2_9: # %cond.store7
826; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
827; AVX1-NEXT:    testb $32, %al
828; AVX1-NEXT:    je .LBB2_12
829; AVX1-NEXT:  .LBB2_11: # %cond.store9
830; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
831; AVX1-NEXT:    testb $64, %al
832; AVX1-NEXT:    je .LBB2_14
833; AVX1-NEXT:  .LBB2_13: # %cond.store11
834; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
835; AVX1-NEXT:    testb $-128, %al
836; AVX1-NEXT:    je .LBB2_16
837; AVX1-NEXT:  .LBB2_15: # %cond.store13
838; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
839; AVX1-NEXT:    vzeroupper
840; AVX1-NEXT:    retq
841;
842; AVX2-LABEL: truncstore_v8i64_v8i8:
843; AVX2:       # %bb.0:
844; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
845; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
846; AVX2-NEXT:    vpand %ymm4, %ymm1, %ymm1
847; AVX2-NEXT:    vpand %ymm4, %ymm0, %ymm0
848; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
849; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
850; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
851; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
852; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
853; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1
854; AVX2-NEXT:    vmovmskps %ymm1, %eax
855; AVX2-NEXT:    notl %eax
856; AVX2-NEXT:    testb $1, %al
857; AVX2-NEXT:    jne .LBB2_1
858; AVX2-NEXT:  # %bb.2: # %else
859; AVX2-NEXT:    testb $2, %al
860; AVX2-NEXT:    jne .LBB2_3
861; AVX2-NEXT:  .LBB2_4: # %else2
862; AVX2-NEXT:    testb $4, %al
863; AVX2-NEXT:    jne .LBB2_5
864; AVX2-NEXT:  .LBB2_6: # %else4
865; AVX2-NEXT:    testb $8, %al
866; AVX2-NEXT:    jne .LBB2_7
867; AVX2-NEXT:  .LBB2_8: # %else6
868; AVX2-NEXT:    testb $16, %al
869; AVX2-NEXT:    jne .LBB2_9
870; AVX2-NEXT:  .LBB2_10: # %else8
871; AVX2-NEXT:    testb $32, %al
872; AVX2-NEXT:    jne .LBB2_11
873; AVX2-NEXT:  .LBB2_12: # %else10
874; AVX2-NEXT:    testb $64, %al
875; AVX2-NEXT:    jne .LBB2_13
876; AVX2-NEXT:  .LBB2_14: # %else12
877; AVX2-NEXT:    testb $-128, %al
878; AVX2-NEXT:    jne .LBB2_15
879; AVX2-NEXT:  .LBB2_16: # %else14
880; AVX2-NEXT:    vzeroupper
881; AVX2-NEXT:    retq
882; AVX2-NEXT:  .LBB2_1: # %cond.store
883; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
884; AVX2-NEXT:    testb $2, %al
885; AVX2-NEXT:    je .LBB2_4
886; AVX2-NEXT:  .LBB2_3: # %cond.store1
887; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
888; AVX2-NEXT:    testb $4, %al
889; AVX2-NEXT:    je .LBB2_6
890; AVX2-NEXT:  .LBB2_5: # %cond.store3
891; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
892; AVX2-NEXT:    testb $8, %al
893; AVX2-NEXT:    je .LBB2_8
894; AVX2-NEXT:  .LBB2_7: # %cond.store5
895; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
896; AVX2-NEXT:    testb $16, %al
897; AVX2-NEXT:    je .LBB2_10
898; AVX2-NEXT:  .LBB2_9: # %cond.store7
899; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
900; AVX2-NEXT:    testb $32, %al
901; AVX2-NEXT:    je .LBB2_12
902; AVX2-NEXT:  .LBB2_11: # %cond.store9
903; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
904; AVX2-NEXT:    testb $64, %al
905; AVX2-NEXT:    je .LBB2_14
906; AVX2-NEXT:  .LBB2_13: # %cond.store11
907; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
908; AVX2-NEXT:    testb $-128, %al
909; AVX2-NEXT:    je .LBB2_16
910; AVX2-NEXT:  .LBB2_15: # %cond.store13
911; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
912; AVX2-NEXT:    vzeroupper
913; AVX2-NEXT:    retq
914;
915; AVX512F-LABEL: truncstore_v8i64_v8i8:
916; AVX512F:       # %bb.0:
917; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
918; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
919; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0
920; AVX512F-NEXT:    kmovw %k0, %eax
921; AVX512F-NEXT:    testb $1, %al
922; AVX512F-NEXT:    jne .LBB2_1
923; AVX512F-NEXT:  # %bb.2: # %else
924; AVX512F-NEXT:    testb $2, %al
925; AVX512F-NEXT:    jne .LBB2_3
926; AVX512F-NEXT:  .LBB2_4: # %else2
927; AVX512F-NEXT:    testb $4, %al
928; AVX512F-NEXT:    jne .LBB2_5
929; AVX512F-NEXT:  .LBB2_6: # %else4
930; AVX512F-NEXT:    testb $8, %al
931; AVX512F-NEXT:    jne .LBB2_7
932; AVX512F-NEXT:  .LBB2_8: # %else6
933; AVX512F-NEXT:    testb $16, %al
934; AVX512F-NEXT:    jne .LBB2_9
935; AVX512F-NEXT:  .LBB2_10: # %else8
936; AVX512F-NEXT:    testb $32, %al
937; AVX512F-NEXT:    jne .LBB2_11
938; AVX512F-NEXT:  .LBB2_12: # %else10
939; AVX512F-NEXT:    testb $64, %al
940; AVX512F-NEXT:    jne .LBB2_13
941; AVX512F-NEXT:  .LBB2_14: # %else12
942; AVX512F-NEXT:    testb $-128, %al
943; AVX512F-NEXT:    jne .LBB2_15
944; AVX512F-NEXT:  .LBB2_16: # %else14
945; AVX512F-NEXT:    vzeroupper
946; AVX512F-NEXT:    retq
947; AVX512F-NEXT:  .LBB2_1: # %cond.store
948; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
949; AVX512F-NEXT:    testb $2, %al
950; AVX512F-NEXT:    je .LBB2_4
951; AVX512F-NEXT:  .LBB2_3: # %cond.store1
952; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
953; AVX512F-NEXT:    testb $4, %al
954; AVX512F-NEXT:    je .LBB2_6
955; AVX512F-NEXT:  .LBB2_5: # %cond.store3
956; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
957; AVX512F-NEXT:    testb $8, %al
958; AVX512F-NEXT:    je .LBB2_8
959; AVX512F-NEXT:  .LBB2_7: # %cond.store5
960; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
961; AVX512F-NEXT:    testb $16, %al
962; AVX512F-NEXT:    je .LBB2_10
963; AVX512F-NEXT:  .LBB2_9: # %cond.store7
964; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
965; AVX512F-NEXT:    testb $32, %al
966; AVX512F-NEXT:    je .LBB2_12
967; AVX512F-NEXT:  .LBB2_11: # %cond.store9
968; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
969; AVX512F-NEXT:    testb $64, %al
970; AVX512F-NEXT:    je .LBB2_14
971; AVX512F-NEXT:  .LBB2_13: # %cond.store11
972; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
973; AVX512F-NEXT:    testb $-128, %al
974; AVX512F-NEXT:    je .LBB2_16
975; AVX512F-NEXT:  .LBB2_15: # %cond.store13
976; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
977; AVX512F-NEXT:    vzeroupper
978; AVX512F-NEXT:    retq
979;
980; AVX512BW-LABEL: truncstore_v8i64_v8i8:
981; AVX512BW:       # %bb.0:
982; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
983; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
984; AVX512BW-NEXT:    vpmovqb %zmm0, (%rdi) {%k1}
985; AVX512BW-NEXT:    vzeroupper
986; AVX512BW-NEXT:    retq
987;
988; AVX512BWVL-LABEL: truncstore_v8i64_v8i8:
989; AVX512BWVL:       # %bb.0:
990; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
991; AVX512BWVL-NEXT:    vpmovqb %zmm0, (%rdi) {%k1}
992; AVX512BWVL-NEXT:    vzeroupper
993; AVX512BWVL-NEXT:    retq
994  %a = icmp ne <8 x i32> %mask, zeroinitializer
995  %b = trunc <8 x i64> %x to <8 x i8>
996  call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %b, <8 x i8>* %p, i32 1, <8 x i1> %a)
997  ret void
998}
999
1000define void @truncstore_v4i64_v4i32(<4 x i64> %x, <4 x i32>* %p, <4 x i32> %mask) {
1001; SSE2-LABEL: truncstore_v4i64_v4i32:
1002; SSE2:       # %bb.0:
1003; SSE2-NEXT:    pxor %xmm3, %xmm3
1004; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
1005; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
1006; SSE2-NEXT:    movmskps %xmm3, %eax
1007; SSE2-NEXT:    xorl $15, %eax
1008; SSE2-NEXT:    testb $1, %al
1009; SSE2-NEXT:    jne .LBB3_1
1010; SSE2-NEXT:  # %bb.2: # %else
1011; SSE2-NEXT:    testb $2, %al
1012; SSE2-NEXT:    jne .LBB3_3
1013; SSE2-NEXT:  .LBB3_4: # %else2
1014; SSE2-NEXT:    testb $4, %al
1015; SSE2-NEXT:    jne .LBB3_5
1016; SSE2-NEXT:  .LBB3_6: # %else4
1017; SSE2-NEXT:    testb $8, %al
1018; SSE2-NEXT:    jne .LBB3_7
1019; SSE2-NEXT:  .LBB3_8: # %else6
1020; SSE2-NEXT:    retq
1021; SSE2-NEXT:  .LBB3_1: # %cond.store
1022; SSE2-NEXT:    movss %xmm0, (%rdi)
1023; SSE2-NEXT:    testb $2, %al
1024; SSE2-NEXT:    je .LBB3_4
1025; SSE2-NEXT:  .LBB3_3: # %cond.store1
1026; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1027; SSE2-NEXT:    movd %xmm1, 4(%rdi)
1028; SSE2-NEXT:    testb $4, %al
1029; SSE2-NEXT:    je .LBB3_6
1030; SSE2-NEXT:  .LBB3_5: # %cond.store3
1031; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1032; SSE2-NEXT:    movd %xmm1, 8(%rdi)
1033; SSE2-NEXT:    testb $8, %al
1034; SSE2-NEXT:    je .LBB3_8
1035; SSE2-NEXT:  .LBB3_7: # %cond.store5
1036; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3]
1037; SSE2-NEXT:    movd %xmm0, 12(%rdi)
1038; SSE2-NEXT:    retq
1039;
1040; SSE4-LABEL: truncstore_v4i64_v4i32:
1041; SSE4:       # %bb.0:
1042; SSE4-NEXT:    pxor %xmm3, %xmm3
1043; SSE4-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
1044; SSE4-NEXT:    pcmpeqd %xmm2, %xmm3
1045; SSE4-NEXT:    movmskps %xmm3, %eax
1046; SSE4-NEXT:    xorl $15, %eax
1047; SSE4-NEXT:    testb $1, %al
1048; SSE4-NEXT:    jne .LBB3_1
1049; SSE4-NEXT:  # %bb.2: # %else
1050; SSE4-NEXT:    testb $2, %al
1051; SSE4-NEXT:    jne .LBB3_3
1052; SSE4-NEXT:  .LBB3_4: # %else2
1053; SSE4-NEXT:    testb $4, %al
1054; SSE4-NEXT:    jne .LBB3_5
1055; SSE4-NEXT:  .LBB3_6: # %else4
1056; SSE4-NEXT:    testb $8, %al
1057; SSE4-NEXT:    jne .LBB3_7
1058; SSE4-NEXT:  .LBB3_8: # %else6
1059; SSE4-NEXT:    retq
1060; SSE4-NEXT:  .LBB3_1: # %cond.store
1061; SSE4-NEXT:    movss %xmm0, (%rdi)
1062; SSE4-NEXT:    testb $2, %al
1063; SSE4-NEXT:    je .LBB3_4
1064; SSE4-NEXT:  .LBB3_3: # %cond.store1
1065; SSE4-NEXT:    extractps $1, %xmm0, 4(%rdi)
1066; SSE4-NEXT:    testb $4, %al
1067; SSE4-NEXT:    je .LBB3_6
1068; SSE4-NEXT:  .LBB3_5: # %cond.store3
1069; SSE4-NEXT:    extractps $2, %xmm0, 8(%rdi)
1070; SSE4-NEXT:    testb $8, %al
1071; SSE4-NEXT:    je .LBB3_8
1072; SSE4-NEXT:  .LBB3_7: # %cond.store5
1073; SSE4-NEXT:    extractps $3, %xmm0, 12(%rdi)
1074; SSE4-NEXT:    retq
1075;
1076; AVX1-LABEL: truncstore_v4i64_v4i32:
1077; AVX1:       # %bb.0:
1078; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1079; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1080; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1081; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1082; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1083; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1084; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
1085; AVX1-NEXT:    vzeroupper
1086; AVX1-NEXT:    retq
1087;
1088; AVX2-LABEL: truncstore_v4i64_v4i32:
1089; AVX2:       # %bb.0:
1090; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1091; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1092; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1093; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1094; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm2
1095; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1096; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
1097; AVX2-NEXT:    vzeroupper
1098; AVX2-NEXT:    retq
1099;
1100; AVX512F-LABEL: truncstore_v4i64_v4i32:
1101; AVX512F:       # %bb.0:
1102; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1103; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1104; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
1105; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
1106; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
1107; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
1108; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1109; AVX512F-NEXT:    vzeroupper
1110; AVX512F-NEXT:    retq
1111;
1112; AVX512VL-LABEL: truncstore_v4i64_v4i32:
1113; AVX512VL:       # %bb.0:
1114; AVX512VL-NEXT:    vptestmd %xmm1, %xmm1, %k1
1115; AVX512VL-NEXT:    vpmovqd %ymm0, (%rdi) {%k1}
1116; AVX512VL-NEXT:    vzeroupper
1117; AVX512VL-NEXT:    retq
1118;
1119; AVX512BW-LABEL: truncstore_v4i64_v4i32:
1120; AVX512BW:       # %bb.0:
1121; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1122; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1123; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
1124; AVX512BW-NEXT:    kshiftlw $12, %k0, %k0
1125; AVX512BW-NEXT:    kshiftrw $12, %k0, %k1
1126; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
1127; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1128; AVX512BW-NEXT:    vzeroupper
1129; AVX512BW-NEXT:    retq
1130  %a = icmp ne <4 x i32> %mask, zeroinitializer
1131  %b = trunc <4 x i64> %x to <4 x i32>
1132  call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> %b, <4 x i32>* %p, i32 1, <4 x i1> %a)
1133  ret void
1134}
1135
1136define void @truncstore_v4i64_v4i16(<4 x i64> %x, <4 x i16>* %p, <4 x i32> %mask) {
1137; SSE2-LABEL: truncstore_v4i64_v4i16:
1138; SSE2:       # %bb.0:
1139; SSE2-NEXT:    pxor %xmm3, %xmm3
1140; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1141; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
1142; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1143; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1144; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1145; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
1146; SSE2-NEXT:    movmskps %xmm3, %eax
1147; SSE2-NEXT:    xorl $15, %eax
1148; SSE2-NEXT:    testb $1, %al
1149; SSE2-NEXT:    jne .LBB4_1
1150; SSE2-NEXT:  # %bb.2: # %else
1151; SSE2-NEXT:    testb $2, %al
1152; SSE2-NEXT:    jne .LBB4_3
1153; SSE2-NEXT:  .LBB4_4: # %else2
1154; SSE2-NEXT:    testb $4, %al
1155; SSE2-NEXT:    jne .LBB4_5
1156; SSE2-NEXT:  .LBB4_6: # %else4
1157; SSE2-NEXT:    testb $8, %al
1158; SSE2-NEXT:    jne .LBB4_7
1159; SSE2-NEXT:  .LBB4_8: # %else6
1160; SSE2-NEXT:    retq
1161; SSE2-NEXT:  .LBB4_1: # %cond.store
1162; SSE2-NEXT:    movd %xmm0, %ecx
1163; SSE2-NEXT:    movw %cx, (%rdi)
1164; SSE2-NEXT:    testb $2, %al
1165; SSE2-NEXT:    je .LBB4_4
1166; SSE2-NEXT:  .LBB4_3: # %cond.store1
1167; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
1168; SSE2-NEXT:    movw %cx, 2(%rdi)
1169; SSE2-NEXT:    testb $4, %al
1170; SSE2-NEXT:    je .LBB4_6
1171; SSE2-NEXT:  .LBB4_5: # %cond.store3
1172; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
1173; SSE2-NEXT:    movw %cx, 4(%rdi)
1174; SSE2-NEXT:    testb $8, %al
1175; SSE2-NEXT:    je .LBB4_8
1176; SSE2-NEXT:  .LBB4_7: # %cond.store5
1177; SSE2-NEXT:    pextrw $3, %xmm0, %eax
1178; SSE2-NEXT:    movw %ax, 6(%rdi)
1179; SSE2-NEXT:    retq
1180;
1181; SSE4-LABEL: truncstore_v4i64_v4i16:
1182; SSE4:       # %bb.0:
1183; SSE4-NEXT:    pxor %xmm3, %xmm3
1184; SSE4-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
1185; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
1186; SSE4-NEXT:    packusdw %xmm1, %xmm0
1187; SSE4-NEXT:    packusdw %xmm0, %xmm0
1188; SSE4-NEXT:    pcmpeqd %xmm3, %xmm2
1189; SSE4-NEXT:    movmskps %xmm2, %eax
1190; SSE4-NEXT:    xorl $15, %eax
1191; SSE4-NEXT:    testb $1, %al
1192; SSE4-NEXT:    jne .LBB4_1
1193; SSE4-NEXT:  # %bb.2: # %else
1194; SSE4-NEXT:    testb $2, %al
1195; SSE4-NEXT:    jne .LBB4_3
1196; SSE4-NEXT:  .LBB4_4: # %else2
1197; SSE4-NEXT:    testb $4, %al
1198; SSE4-NEXT:    jne .LBB4_5
1199; SSE4-NEXT:  .LBB4_6: # %else4
1200; SSE4-NEXT:    testb $8, %al
1201; SSE4-NEXT:    jne .LBB4_7
1202; SSE4-NEXT:  .LBB4_8: # %else6
1203; SSE4-NEXT:    retq
1204; SSE4-NEXT:  .LBB4_1: # %cond.store
1205; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
1206; SSE4-NEXT:    testb $2, %al
1207; SSE4-NEXT:    je .LBB4_4
1208; SSE4-NEXT:  .LBB4_3: # %cond.store1
1209; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
1210; SSE4-NEXT:    testb $4, %al
1211; SSE4-NEXT:    je .LBB4_6
1212; SSE4-NEXT:  .LBB4_5: # %cond.store3
1213; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
1214; SSE4-NEXT:    testb $8, %al
1215; SSE4-NEXT:    je .LBB4_8
1216; SSE4-NEXT:  .LBB4_7: # %cond.store5
1217; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
1218; SSE4-NEXT:    retq
1219;
1220; AVX1-LABEL: truncstore_v4i64_v4i16:
1221; AVX1:       # %bb.0:
1222; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1223; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1224; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm2[1,2,3],xmm3[4],xmm2[5,6,7]
1225; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
1226; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
1227; AVX1-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0
1228; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1229; AVX1-NEXT:    vmovmskps %xmm1, %eax
1230; AVX1-NEXT:    xorl $15, %eax
1231; AVX1-NEXT:    testb $1, %al
1232; AVX1-NEXT:    jne .LBB4_1
1233; AVX1-NEXT:  # %bb.2: # %else
1234; AVX1-NEXT:    testb $2, %al
1235; AVX1-NEXT:    jne .LBB4_3
1236; AVX1-NEXT:  .LBB4_4: # %else2
1237; AVX1-NEXT:    testb $4, %al
1238; AVX1-NEXT:    jne .LBB4_5
1239; AVX1-NEXT:  .LBB4_6: # %else4
1240; AVX1-NEXT:    testb $8, %al
1241; AVX1-NEXT:    jne .LBB4_7
1242; AVX1-NEXT:  .LBB4_8: # %else6
1243; AVX1-NEXT:    vzeroupper
1244; AVX1-NEXT:    retq
1245; AVX1-NEXT:  .LBB4_1: # %cond.store
1246; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
1247; AVX1-NEXT:    testb $2, %al
1248; AVX1-NEXT:    je .LBB4_4
1249; AVX1-NEXT:  .LBB4_3: # %cond.store1
1250; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1251; AVX1-NEXT:    testb $4, %al
1252; AVX1-NEXT:    je .LBB4_6
1253; AVX1-NEXT:  .LBB4_5: # %cond.store3
1254; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
1255; AVX1-NEXT:    testb $8, %al
1256; AVX1-NEXT:    je .LBB4_8
1257; AVX1-NEXT:  .LBB4_7: # %cond.store5
1258; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
1259; AVX1-NEXT:    vzeroupper
1260; AVX1-NEXT:    retq
1261;
1262; AVX2-LABEL: truncstore_v4i64_v4i16:
1263; AVX2:       # %bb.0:
1264; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1265; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
1266; AVX2-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm2[1,2,3],xmm3[4],xmm2[5,6,7]
1267; AVX2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1,2,3],xmm0[4],xmm2[5,6,7]
1268; AVX2-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
1269; AVX2-NEXT:    vpackusdw %xmm0, %xmm0, %xmm0
1270; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1271; AVX2-NEXT:    vmovmskps %xmm1, %eax
1272; AVX2-NEXT:    xorl $15, %eax
1273; AVX2-NEXT:    testb $1, %al
1274; AVX2-NEXT:    jne .LBB4_1
1275; AVX2-NEXT:  # %bb.2: # %else
1276; AVX2-NEXT:    testb $2, %al
1277; AVX2-NEXT:    jne .LBB4_3
1278; AVX2-NEXT:  .LBB4_4: # %else2
1279; AVX2-NEXT:    testb $4, %al
1280; AVX2-NEXT:    jne .LBB4_5
1281; AVX2-NEXT:  .LBB4_6: # %else4
1282; AVX2-NEXT:    testb $8, %al
1283; AVX2-NEXT:    jne .LBB4_7
1284; AVX2-NEXT:  .LBB4_8: # %else6
1285; AVX2-NEXT:    vzeroupper
1286; AVX2-NEXT:    retq
1287; AVX2-NEXT:  .LBB4_1: # %cond.store
1288; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
1289; AVX2-NEXT:    testb $2, %al
1290; AVX2-NEXT:    je .LBB4_4
1291; AVX2-NEXT:  .LBB4_3: # %cond.store1
1292; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1293; AVX2-NEXT:    testb $4, %al
1294; AVX2-NEXT:    je .LBB4_6
1295; AVX2-NEXT:  .LBB4_5: # %cond.store3
1296; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
1297; AVX2-NEXT:    testb $8, %al
1298; AVX2-NEXT:    je .LBB4_8
1299; AVX2-NEXT:  .LBB4_7: # %cond.store5
1300; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
1301; AVX2-NEXT:    vzeroupper
1302; AVX2-NEXT:    retq
1303;
1304; AVX512F-LABEL: truncstore_v4i64_v4i16:
1305; AVX512F:       # %bb.0:
1306; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1307; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1308; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
1309; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0
1310; AVX512F-NEXT:    kmovw %k0, %eax
1311; AVX512F-NEXT:    testb $1, %al
1312; AVX512F-NEXT:    jne .LBB4_1
1313; AVX512F-NEXT:  # %bb.2: # %else
1314; AVX512F-NEXT:    testb $2, %al
1315; AVX512F-NEXT:    jne .LBB4_3
1316; AVX512F-NEXT:  .LBB4_4: # %else2
1317; AVX512F-NEXT:    testb $4, %al
1318; AVX512F-NEXT:    jne .LBB4_5
1319; AVX512F-NEXT:  .LBB4_6: # %else4
1320; AVX512F-NEXT:    testb $8, %al
1321; AVX512F-NEXT:    jne .LBB4_7
1322; AVX512F-NEXT:  .LBB4_8: # %else6
1323; AVX512F-NEXT:    vzeroupper
1324; AVX512F-NEXT:    retq
1325; AVX512F-NEXT:  .LBB4_1: # %cond.store
1326; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
1327; AVX512F-NEXT:    testb $2, %al
1328; AVX512F-NEXT:    je .LBB4_4
1329; AVX512F-NEXT:  .LBB4_3: # %cond.store1
1330; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1331; AVX512F-NEXT:    testb $4, %al
1332; AVX512F-NEXT:    je .LBB4_6
1333; AVX512F-NEXT:  .LBB4_5: # %cond.store3
1334; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
1335; AVX512F-NEXT:    testb $8, %al
1336; AVX512F-NEXT:    je .LBB4_8
1337; AVX512F-NEXT:  .LBB4_7: # %cond.store5
1338; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
1339; AVX512F-NEXT:    vzeroupper
1340; AVX512F-NEXT:    retq
1341;
1342; AVX512BW-LABEL: truncstore_v4i64_v4i16:
1343; AVX512BW:       # %bb.0:
1344; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1345; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1346; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
1347; AVX512BW-NEXT:    kshiftld $28, %k0, %k0
1348; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1
1349; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0
1350; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
1351; AVX512BW-NEXT:    vzeroupper
1352; AVX512BW-NEXT:    retq
1353;
1354; AVX512BWVL-LABEL: truncstore_v4i64_v4i16:
1355; AVX512BWVL:       # %bb.0:
1356; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
1357; AVX512BWVL-NEXT:    vpmovqw %ymm0, (%rdi) {%k1}
1358; AVX512BWVL-NEXT:    vzeroupper
1359; AVX512BWVL-NEXT:    retq
1360  %a = icmp ne <4 x i32> %mask, zeroinitializer
1361  %b = trunc <4 x i64> %x to <4 x i16>
1362  call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> %b, <4 x i16>* %p, i32 1, <4 x i1> %a)
1363  ret void
1364}
1365
1366define void @truncstore_v4i64_v4i8(<4 x i64> %x, <4 x i8>* %p, <4 x i32> %mask) {
1367; SSE2-LABEL: truncstore_v4i64_v4i8:
1368; SSE2:       # %bb.0:
1369; SSE2-NEXT:    pxor %xmm3, %xmm3
1370; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0]
1371; SSE2-NEXT:    pand %xmm4, %xmm1
1372; SSE2-NEXT:    pand %xmm4, %xmm0
1373; SSE2-NEXT:    packuswb %xmm1, %xmm0
1374; SSE2-NEXT:    packuswb %xmm0, %xmm0
1375; SSE2-NEXT:    packuswb %xmm0, %xmm0
1376; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
1377; SSE2-NEXT:    movmskps %xmm3, %ecx
1378; SSE2-NEXT:    xorl $15, %ecx
1379; SSE2-NEXT:    testb $1, %cl
1380; SSE2-NEXT:    movd %xmm0, %eax
1381; SSE2-NEXT:    jne .LBB5_1
1382; SSE2-NEXT:  # %bb.2: # %else
1383; SSE2-NEXT:    testb $2, %cl
1384; SSE2-NEXT:    jne .LBB5_3
1385; SSE2-NEXT:  .LBB5_4: # %else2
1386; SSE2-NEXT:    testb $4, %cl
1387; SSE2-NEXT:    jne .LBB5_5
1388; SSE2-NEXT:  .LBB5_6: # %else4
1389; SSE2-NEXT:    testb $8, %cl
1390; SSE2-NEXT:    jne .LBB5_7
1391; SSE2-NEXT:  .LBB5_8: # %else6
1392; SSE2-NEXT:    retq
1393; SSE2-NEXT:  .LBB5_1: # %cond.store
1394; SSE2-NEXT:    movb %al, (%rdi)
1395; SSE2-NEXT:    testb $2, %cl
1396; SSE2-NEXT:    je .LBB5_4
1397; SSE2-NEXT:  .LBB5_3: # %cond.store1
1398; SSE2-NEXT:    movb %ah, 1(%rdi)
1399; SSE2-NEXT:    testb $4, %cl
1400; SSE2-NEXT:    je .LBB5_6
1401; SSE2-NEXT:  .LBB5_5: # %cond.store3
1402; SSE2-NEXT:    movl %eax, %edx
1403; SSE2-NEXT:    shrl $16, %edx
1404; SSE2-NEXT:    movb %dl, 2(%rdi)
1405; SSE2-NEXT:    testb $8, %cl
1406; SSE2-NEXT:    je .LBB5_8
1407; SSE2-NEXT:  .LBB5_7: # %cond.store5
1408; SSE2-NEXT:    shrl $24, %eax
1409; SSE2-NEXT:    movb %al, 3(%rdi)
1410; SSE2-NEXT:    retq
1411;
1412; SSE4-LABEL: truncstore_v4i64_v4i8:
1413; SSE4:       # %bb.0:
1414; SSE4-NEXT:    pxor %xmm3, %xmm3
1415; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
1416; SSE4-NEXT:    pshufb %xmm4, %xmm1
1417; SSE4-NEXT:    pshufb %xmm4, %xmm0
1418; SSE4-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1419; SSE4-NEXT:    pcmpeqd %xmm2, %xmm3
1420; SSE4-NEXT:    movmskps %xmm3, %eax
1421; SSE4-NEXT:    xorl $15, %eax
1422; SSE4-NEXT:    testb $1, %al
1423; SSE4-NEXT:    jne .LBB5_1
1424; SSE4-NEXT:  # %bb.2: # %else
1425; SSE4-NEXT:    testb $2, %al
1426; SSE4-NEXT:    jne .LBB5_3
1427; SSE4-NEXT:  .LBB5_4: # %else2
1428; SSE4-NEXT:    testb $4, %al
1429; SSE4-NEXT:    jne .LBB5_5
1430; SSE4-NEXT:  .LBB5_6: # %else4
1431; SSE4-NEXT:    testb $8, %al
1432; SSE4-NEXT:    jne .LBB5_7
1433; SSE4-NEXT:  .LBB5_8: # %else6
1434; SSE4-NEXT:    retq
1435; SSE4-NEXT:  .LBB5_1: # %cond.store
1436; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
1437; SSE4-NEXT:    testb $2, %al
1438; SSE4-NEXT:    je .LBB5_4
1439; SSE4-NEXT:  .LBB5_3: # %cond.store1
1440; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
1441; SSE4-NEXT:    testb $4, %al
1442; SSE4-NEXT:    je .LBB5_6
1443; SSE4-NEXT:  .LBB5_5: # %cond.store3
1444; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
1445; SSE4-NEXT:    testb $8, %al
1446; SSE4-NEXT:    je .LBB5_8
1447; SSE4-NEXT:  .LBB5_7: # %cond.store5
1448; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
1449; SSE4-NEXT:    retq
1450;
1451; AVX1-LABEL: truncstore_v4i64_v4i8:
1452; AVX1:       # %bb.0:
1453; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1454; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1455; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
1456; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
1457; AVX1-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
1458; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
1459; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1460; AVX1-NEXT:    vmovmskps %xmm1, %eax
1461; AVX1-NEXT:    xorl $15, %eax
1462; AVX1-NEXT:    testb $1, %al
1463; AVX1-NEXT:    jne .LBB5_1
1464; AVX1-NEXT:  # %bb.2: # %else
1465; AVX1-NEXT:    testb $2, %al
1466; AVX1-NEXT:    jne .LBB5_3
1467; AVX1-NEXT:  .LBB5_4: # %else2
1468; AVX1-NEXT:    testb $4, %al
1469; AVX1-NEXT:    jne .LBB5_5
1470; AVX1-NEXT:  .LBB5_6: # %else4
1471; AVX1-NEXT:    testb $8, %al
1472; AVX1-NEXT:    jne .LBB5_7
1473; AVX1-NEXT:  .LBB5_8: # %else6
1474; AVX1-NEXT:    vzeroupper
1475; AVX1-NEXT:    retq
1476; AVX1-NEXT:  .LBB5_1: # %cond.store
1477; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
1478; AVX1-NEXT:    testb $2, %al
1479; AVX1-NEXT:    je .LBB5_4
1480; AVX1-NEXT:  .LBB5_3: # %cond.store1
1481; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1482; AVX1-NEXT:    testb $4, %al
1483; AVX1-NEXT:    je .LBB5_6
1484; AVX1-NEXT:  .LBB5_5: # %cond.store3
1485; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1486; AVX1-NEXT:    testb $8, %al
1487; AVX1-NEXT:    je .LBB5_8
1488; AVX1-NEXT:  .LBB5_7: # %cond.store5
1489; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1490; AVX1-NEXT:    vzeroupper
1491; AVX1-NEXT:    retq
1492;
1493; AVX2-LABEL: truncstore_v4i64_v4i8:
1494; AVX2:       # %bb.0:
1495; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1496; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
1497; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
1498; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
1499; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
1500; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
1501; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1502; AVX2-NEXT:    vmovmskps %xmm1, %eax
1503; AVX2-NEXT:    xorl $15, %eax
1504; AVX2-NEXT:    testb $1, %al
1505; AVX2-NEXT:    jne .LBB5_1
1506; AVX2-NEXT:  # %bb.2: # %else
1507; AVX2-NEXT:    testb $2, %al
1508; AVX2-NEXT:    jne .LBB5_3
1509; AVX2-NEXT:  .LBB5_4: # %else2
1510; AVX2-NEXT:    testb $4, %al
1511; AVX2-NEXT:    jne .LBB5_5
1512; AVX2-NEXT:  .LBB5_6: # %else4
1513; AVX2-NEXT:    testb $8, %al
1514; AVX2-NEXT:    jne .LBB5_7
1515; AVX2-NEXT:  .LBB5_8: # %else6
1516; AVX2-NEXT:    vzeroupper
1517; AVX2-NEXT:    retq
1518; AVX2-NEXT:  .LBB5_1: # %cond.store
1519; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
1520; AVX2-NEXT:    testb $2, %al
1521; AVX2-NEXT:    je .LBB5_4
1522; AVX2-NEXT:  .LBB5_3: # %cond.store1
1523; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1524; AVX2-NEXT:    testb $4, %al
1525; AVX2-NEXT:    je .LBB5_6
1526; AVX2-NEXT:  .LBB5_5: # %cond.store3
1527; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1528; AVX2-NEXT:    testb $8, %al
1529; AVX2-NEXT:    je .LBB5_8
1530; AVX2-NEXT:  .LBB5_7: # %cond.store5
1531; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1532; AVX2-NEXT:    vzeroupper
1533; AVX2-NEXT:    retq
1534;
1535; AVX512F-LABEL: truncstore_v4i64_v4i8:
1536; AVX512F:       # %bb.0:
1537; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1538; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1539; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
1540; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0
1541; AVX512F-NEXT:    kmovw %k0, %eax
1542; AVX512F-NEXT:    testb $1, %al
1543; AVX512F-NEXT:    jne .LBB5_1
1544; AVX512F-NEXT:  # %bb.2: # %else
1545; AVX512F-NEXT:    testb $2, %al
1546; AVX512F-NEXT:    jne .LBB5_3
1547; AVX512F-NEXT:  .LBB5_4: # %else2
1548; AVX512F-NEXT:    testb $4, %al
1549; AVX512F-NEXT:    jne .LBB5_5
1550; AVX512F-NEXT:  .LBB5_6: # %else4
1551; AVX512F-NEXT:    testb $8, %al
1552; AVX512F-NEXT:    jne .LBB5_7
1553; AVX512F-NEXT:  .LBB5_8: # %else6
1554; AVX512F-NEXT:    vzeroupper
1555; AVX512F-NEXT:    retq
1556; AVX512F-NEXT:  .LBB5_1: # %cond.store
1557; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
1558; AVX512F-NEXT:    testb $2, %al
1559; AVX512F-NEXT:    je .LBB5_4
1560; AVX512F-NEXT:  .LBB5_3: # %cond.store1
1561; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1562; AVX512F-NEXT:    testb $4, %al
1563; AVX512F-NEXT:    je .LBB5_6
1564; AVX512F-NEXT:  .LBB5_5: # %cond.store3
1565; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1566; AVX512F-NEXT:    testb $8, %al
1567; AVX512F-NEXT:    je .LBB5_8
1568; AVX512F-NEXT:  .LBB5_7: # %cond.store5
1569; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1570; AVX512F-NEXT:    vzeroupper
1571; AVX512F-NEXT:    retq
1572;
1573; AVX512BW-LABEL: truncstore_v4i64_v4i8:
1574; AVX512BW:       # %bb.0:
1575; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1576; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1577; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
1578; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0
1579; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1
1580; AVX512BW-NEXT:    vpmovqb %zmm0, %xmm0
1581; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
1582; AVX512BW-NEXT:    vzeroupper
1583; AVX512BW-NEXT:    retq
1584;
1585; AVX512BWVL-LABEL: truncstore_v4i64_v4i8:
1586; AVX512BWVL:       # %bb.0:
1587; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
1588; AVX512BWVL-NEXT:    vpmovqb %ymm0, (%rdi) {%k1}
1589; AVX512BWVL-NEXT:    vzeroupper
1590; AVX512BWVL-NEXT:    retq
1591  %a = icmp ne <4 x i32> %mask, zeroinitializer
1592  %b = trunc <4 x i64> %x to <4 x i8>
1593  call void @llvm.masked.store.v4i8.p0v4i8(<4 x i8> %b, <4 x i8>* %p, i32 1, <4 x i1> %a)
1594  ret void
1595}
1596
1597define void @truncstore_v2i64_v2i32(<2 x i64> %x, <2 x i32>* %p, <2 x i64> %mask) {
1598; SSE2-LABEL: truncstore_v2i64_v2i32:
1599; SSE2:       # %bb.0:
1600; SSE2-NEXT:    pxor %xmm2, %xmm2
1601; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1602; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
1603; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
1604; SSE2-NEXT:    pand %xmm2, %xmm1
1605; SSE2-NEXT:    movmskpd %xmm1, %eax
1606; SSE2-NEXT:    xorl $3, %eax
1607; SSE2-NEXT:    testb $1, %al
1608; SSE2-NEXT:    jne .LBB6_1
1609; SSE2-NEXT:  # %bb.2: # %else
1610; SSE2-NEXT:    testb $2, %al
1611; SSE2-NEXT:    jne .LBB6_3
1612; SSE2-NEXT:  .LBB6_4: # %else2
1613; SSE2-NEXT:    retq
1614; SSE2-NEXT:  .LBB6_1: # %cond.store
1615; SSE2-NEXT:    movd %xmm0, (%rdi)
1616; SSE2-NEXT:    testb $2, %al
1617; SSE2-NEXT:    je .LBB6_4
1618; SSE2-NEXT:  .LBB6_3: # %cond.store1
1619; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]
1620; SSE2-NEXT:    movd %xmm0, 4(%rdi)
1621; SSE2-NEXT:    retq
1622;
1623; SSE4-LABEL: truncstore_v2i64_v2i32:
1624; SSE4:       # %bb.0:
1625; SSE4-NEXT:    pxor %xmm2, %xmm2
1626; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1627; SSE4-NEXT:    pcmpeqq %xmm1, %xmm2
1628; SSE4-NEXT:    movmskpd %xmm2, %eax
1629; SSE4-NEXT:    xorl $3, %eax
1630; SSE4-NEXT:    testb $1, %al
1631; SSE4-NEXT:    jne .LBB6_1
1632; SSE4-NEXT:  # %bb.2: # %else
1633; SSE4-NEXT:    testb $2, %al
1634; SSE4-NEXT:    jne .LBB6_3
1635; SSE4-NEXT:  .LBB6_4: # %else2
1636; SSE4-NEXT:    retq
1637; SSE4-NEXT:  .LBB6_1: # %cond.store
1638; SSE4-NEXT:    movd %xmm0, (%rdi)
1639; SSE4-NEXT:    testb $2, %al
1640; SSE4-NEXT:    je .LBB6_4
1641; SSE4-NEXT:  .LBB6_3: # %cond.store1
1642; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)
1643; SSE4-NEXT:    retq
1644;
1645; AVX1-LABEL: truncstore_v2i64_v2i32:
1646; AVX1:       # %bb.0:
1647; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1648; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
1649; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1650; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1651; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero
1652; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
1653; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
1654; AVX1-NEXT:    retq
1655;
1656; AVX2-LABEL: truncstore_v2i64_v2i32:
1657; AVX2:       # %bb.0:
1658; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1659; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
1660; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1661; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1662; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero
1663; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1664; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
1665; AVX2-NEXT:    retq
1666;
1667; AVX512F-LABEL: truncstore_v2i64_v2i32:
1668; AVX512F:       # %bb.0:
1669; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1670; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
1671; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
1672; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
1673; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1674; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1675; AVX512F-NEXT:    vzeroupper
1676; AVX512F-NEXT:    retq
1677;
1678; AVX512VL-LABEL: truncstore_v2i64_v2i32:
1679; AVX512VL:       # %bb.0:
1680; AVX512VL-NEXT:    vptestmq %xmm1, %xmm1, %k1
1681; AVX512VL-NEXT:    vpmovqd %xmm0, (%rdi) {%k1}
1682; AVX512VL-NEXT:    retq
1683;
1684; AVX512BW-LABEL: truncstore_v2i64_v2i32:
1685; AVX512BW:       # %bb.0:
1686; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1687; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
1688; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0
1689; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1
1690; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1691; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1692; AVX512BW-NEXT:    vzeroupper
1693; AVX512BW-NEXT:    retq
1694  %a = icmp ne <2 x i64> %mask, zeroinitializer
1695  %b = trunc <2 x i64> %x to <2 x i32>
1696  call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %b, <2 x i32>* %p, i32 1, <2 x i1> %a)
1697  ret void
1698}
1699
1700define void @truncstore_v2i64_v2i16(<2 x i64> %x, <2 x i16>* %p, <2 x i64> %mask) {
1701; SSE2-LABEL: truncstore_v2i64_v2i16:
1702; SSE2:       # %bb.0:
1703; SSE2-NEXT:    pxor %xmm2, %xmm2
1704; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1705; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1706; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
1707; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
1708; SSE2-NEXT:    pand %xmm2, %xmm1
1709; SSE2-NEXT:    movmskpd %xmm1, %eax
1710; SSE2-NEXT:    xorl $3, %eax
1711; SSE2-NEXT:    testb $1, %al
1712; SSE2-NEXT:    jne .LBB7_1
1713; SSE2-NEXT:  # %bb.2: # %else
1714; SSE2-NEXT:    testb $2, %al
1715; SSE2-NEXT:    jne .LBB7_3
1716; SSE2-NEXT:  .LBB7_4: # %else2
1717; SSE2-NEXT:    retq
1718; SSE2-NEXT:  .LBB7_1: # %cond.store
1719; SSE2-NEXT:    movd %xmm0, %ecx
1720; SSE2-NEXT:    movw %cx, (%rdi)
1721; SSE2-NEXT:    testb $2, %al
1722; SSE2-NEXT:    je .LBB7_4
1723; SSE2-NEXT:  .LBB7_3: # %cond.store1
1724; SSE2-NEXT:    pextrw $1, %xmm0, %eax
1725; SSE2-NEXT:    movw %ax, 2(%rdi)
1726; SSE2-NEXT:    retq
1727;
1728; SSE4-LABEL: truncstore_v2i64_v2i16:
1729; SSE4:       # %bb.0:
1730; SSE4-NEXT:    pxor %xmm2, %xmm2
1731; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1732; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1733; SSE4-NEXT:    pcmpeqq %xmm1, %xmm2
1734; SSE4-NEXT:    movmskpd %xmm2, %eax
1735; SSE4-NEXT:    xorl $3, %eax
1736; SSE4-NEXT:    testb $1, %al
1737; SSE4-NEXT:    jne .LBB7_1
1738; SSE4-NEXT:  # %bb.2: # %else
1739; SSE4-NEXT:    testb $2, %al
1740; SSE4-NEXT:    jne .LBB7_3
1741; SSE4-NEXT:  .LBB7_4: # %else2
1742; SSE4-NEXT:    retq
1743; SSE4-NEXT:  .LBB7_1: # %cond.store
1744; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
1745; SSE4-NEXT:    testb $2, %al
1746; SSE4-NEXT:    je .LBB7_4
1747; SSE4-NEXT:  .LBB7_3: # %cond.store1
1748; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
1749; SSE4-NEXT:    retq
1750;
1751; AVX-LABEL: truncstore_v2i64_v2i16:
1752; AVX:       # %bb.0:
1753; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1754; AVX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1755; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1756; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
1757; AVX-NEXT:    vmovmskpd %xmm1, %eax
1758; AVX-NEXT:    xorl $3, %eax
1759; AVX-NEXT:    testb $1, %al
1760; AVX-NEXT:    jne .LBB7_1
1761; AVX-NEXT:  # %bb.2: # %else
1762; AVX-NEXT:    testb $2, %al
1763; AVX-NEXT:    jne .LBB7_3
1764; AVX-NEXT:  .LBB7_4: # %else2
1765; AVX-NEXT:    retq
1766; AVX-NEXT:  .LBB7_1: # %cond.store
1767; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
1768; AVX-NEXT:    testb $2, %al
1769; AVX-NEXT:    je .LBB7_4
1770; AVX-NEXT:  .LBB7_3: # %cond.store1
1771; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1772; AVX-NEXT:    retq
1773;
1774; AVX512F-LABEL: truncstore_v2i64_v2i16:
1775; AVX512F:       # %bb.0:
1776; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1777; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
1778; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1779; AVX512F-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1780; AVX512F-NEXT:    kmovw %k0, %eax
1781; AVX512F-NEXT:    testb $1, %al
1782; AVX512F-NEXT:    jne .LBB7_1
1783; AVX512F-NEXT:  # %bb.2: # %else
1784; AVX512F-NEXT:    testb $2, %al
1785; AVX512F-NEXT:    jne .LBB7_3
1786; AVX512F-NEXT:  .LBB7_4: # %else2
1787; AVX512F-NEXT:    vzeroupper
1788; AVX512F-NEXT:    retq
1789; AVX512F-NEXT:  .LBB7_1: # %cond.store
1790; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
1791; AVX512F-NEXT:    testb $2, %al
1792; AVX512F-NEXT:    je .LBB7_4
1793; AVX512F-NEXT:  .LBB7_3: # %cond.store1
1794; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1795; AVX512F-NEXT:    vzeroupper
1796; AVX512F-NEXT:    retq
1797;
1798; AVX512BW-LABEL: truncstore_v2i64_v2i16:
1799; AVX512BW:       # %bb.0:
1800; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1801; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
1802; AVX512BW-NEXT:    kshiftld $30, %k0, %k0
1803; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1
1804; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1805; AVX512BW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1806; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
1807; AVX512BW-NEXT:    vzeroupper
1808; AVX512BW-NEXT:    retq
1809;
1810; AVX512BWVL-LABEL: truncstore_v2i64_v2i16:
1811; AVX512BWVL:       # %bb.0:
1812; AVX512BWVL-NEXT:    vptestmq %xmm1, %xmm1, %k1
1813; AVX512BWVL-NEXT:    vpmovqw %xmm0, (%rdi) {%k1}
1814; AVX512BWVL-NEXT:    retq
1815  %a = icmp ne <2 x i64> %mask, zeroinitializer
1816  %b = trunc <2 x i64> %x to <2 x i16>
1817  call void @llvm.masked.store.v2i16.p0v2i16(<2 x i16> %b, <2 x i16>* %p, i32 1, <2 x i1> %a)
1818  ret void
1819}
1820
1821define void @truncstore_v2i64_v2i8(<2 x i64> %x, <2 x i8>* %p, <2 x i64> %mask) {
1822; SSE2-LABEL: truncstore_v2i64_v2i8:
1823; SSE2:       # %bb.0:
1824; SSE2-NEXT:    pxor %xmm2, %xmm2
1825; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1826; SSE2-NEXT:    packuswb %xmm0, %xmm0
1827; SSE2-NEXT:    packuswb %xmm0, %xmm0
1828; SSE2-NEXT:    packuswb %xmm0, %xmm0
1829; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
1830; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
1831; SSE2-NEXT:    pand %xmm2, %xmm1
1832; SSE2-NEXT:    movmskpd %xmm1, %eax
1833; SSE2-NEXT:    xorl $3, %eax
1834; SSE2-NEXT:    testb $1, %al
1835; SSE2-NEXT:    movd %xmm0, %ecx
1836; SSE2-NEXT:    jne .LBB8_1
1837; SSE2-NEXT:  # %bb.2: # %else
1838; SSE2-NEXT:    testb $2, %al
1839; SSE2-NEXT:    jne .LBB8_3
1840; SSE2-NEXT:  .LBB8_4: # %else2
1841; SSE2-NEXT:    retq
1842; SSE2-NEXT:  .LBB8_1: # %cond.store
1843; SSE2-NEXT:    movb %cl, (%rdi)
1844; SSE2-NEXT:    testb $2, %al
1845; SSE2-NEXT:    je .LBB8_4
1846; SSE2-NEXT:  .LBB8_3: # %cond.store1
1847; SSE2-NEXT:    movb %ch, 1(%rdi)
1848; SSE2-NEXT:    retq
1849;
1850; SSE4-LABEL: truncstore_v2i64_v2i8:
1851; SSE4:       # %bb.0:
1852; SSE4-NEXT:    pxor %xmm2, %xmm2
1853; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
1854; SSE4-NEXT:    pcmpeqq %xmm1, %xmm2
1855; SSE4-NEXT:    movmskpd %xmm2, %eax
1856; SSE4-NEXT:    xorl $3, %eax
1857; SSE4-NEXT:    testb $1, %al
1858; SSE4-NEXT:    jne .LBB8_1
1859; SSE4-NEXT:  # %bb.2: # %else
1860; SSE4-NEXT:    testb $2, %al
1861; SSE4-NEXT:    jne .LBB8_3
1862; SSE4-NEXT:  .LBB8_4: # %else2
1863; SSE4-NEXT:    retq
1864; SSE4-NEXT:  .LBB8_1: # %cond.store
1865; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
1866; SSE4-NEXT:    testb $2, %al
1867; SSE4-NEXT:    je .LBB8_4
1868; SSE4-NEXT:  .LBB8_3: # %cond.store1
1869; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
1870; SSE4-NEXT:    retq
1871;
1872; AVX-LABEL: truncstore_v2i64_v2i8:
1873; AVX:       # %bb.0:
1874; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1875; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
1876; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
1877; AVX-NEXT:    vmovmskpd %xmm1, %eax
1878; AVX-NEXT:    xorl $3, %eax
1879; AVX-NEXT:    testb $1, %al
1880; AVX-NEXT:    jne .LBB8_1
1881; AVX-NEXT:  # %bb.2: # %else
1882; AVX-NEXT:    testb $2, %al
1883; AVX-NEXT:    jne .LBB8_3
1884; AVX-NEXT:  .LBB8_4: # %else2
1885; AVX-NEXT:    retq
1886; AVX-NEXT:  .LBB8_1: # %cond.store
1887; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
1888; AVX-NEXT:    testb $2, %al
1889; AVX-NEXT:    je .LBB8_4
1890; AVX-NEXT:  .LBB8_3: # %cond.store1
1891; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1892; AVX-NEXT:    retq
1893;
1894; AVX512F-LABEL: truncstore_v2i64_v2i8:
1895; AVX512F:       # %bb.0:
1896; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1897; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
1898; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
1899; AVX512F-NEXT:    kmovw %k0, %eax
1900; AVX512F-NEXT:    testb $1, %al
1901; AVX512F-NEXT:    jne .LBB8_1
1902; AVX512F-NEXT:  # %bb.2: # %else
1903; AVX512F-NEXT:    testb $2, %al
1904; AVX512F-NEXT:    jne .LBB8_3
1905; AVX512F-NEXT:  .LBB8_4: # %else2
1906; AVX512F-NEXT:    vzeroupper
1907; AVX512F-NEXT:    retq
1908; AVX512F-NEXT:  .LBB8_1: # %cond.store
1909; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
1910; AVX512F-NEXT:    testb $2, %al
1911; AVX512F-NEXT:    je .LBB8_4
1912; AVX512F-NEXT:  .LBB8_3: # %cond.store1
1913; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1914; AVX512F-NEXT:    vzeroupper
1915; AVX512F-NEXT:    retq
1916;
1917; AVX512BW-LABEL: truncstore_v2i64_v2i8:
1918; AVX512BW:       # %bb.0:
1919; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1920; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
1921; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0
1922; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1
1923; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
1924; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
1925; AVX512BW-NEXT:    vzeroupper
1926; AVX512BW-NEXT:    retq
1927;
1928; AVX512BWVL-LABEL: truncstore_v2i64_v2i8:
1929; AVX512BWVL:       # %bb.0:
1930; AVX512BWVL-NEXT:    vptestmq %xmm1, %xmm1, %k1
1931; AVX512BWVL-NEXT:    vpmovqb %xmm0, (%rdi) {%k1}
1932; AVX512BWVL-NEXT:    retq
1933  %a = icmp ne <2 x i64> %mask, zeroinitializer
1934  %b = trunc <2 x i64> %x to <2 x i8>
1935  call void @llvm.masked.store.v2i8.p0v2i8(<2 x i8> %b, <2 x i8>* %p, i32 1, <2 x i1> %a)
1936  ret void
1937}
1938
1939define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32> %mask) {
1940; SSE2-LABEL: truncstore_v16i32_v16i16:
1941; SSE2:       # %bb.0:
1942; SSE2-NEXT:    pxor %xmm8, %xmm8
1943; SSE2-NEXT:    pslld $16, %xmm1
1944; SSE2-NEXT:    psrad $16, %xmm1
1945; SSE2-NEXT:    pslld $16, %xmm0
1946; SSE2-NEXT:    psrad $16, %xmm0
1947; SSE2-NEXT:    packssdw %xmm1, %xmm0
1948; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
1949; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
1950; SSE2-NEXT:    pxor %xmm1, %xmm7
1951; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
1952; SSE2-NEXT:    pxor %xmm1, %xmm6
1953; SSE2-NEXT:    packssdw %xmm7, %xmm6
1954; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
1955; SSE2-NEXT:    pxor %xmm1, %xmm5
1956; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
1957; SSE2-NEXT:    pxor %xmm1, %xmm4
1958; SSE2-NEXT:    packssdw %xmm5, %xmm4
1959; SSE2-NEXT:    packsswb %xmm6, %xmm4
1960; SSE2-NEXT:    pmovmskb %xmm4, %eax
1961; SSE2-NEXT:    testb $1, %al
1962; SSE2-NEXT:    jne .LBB9_1
1963; SSE2-NEXT:  # %bb.2: # %else
1964; SSE2-NEXT:    testb $2, %al
1965; SSE2-NEXT:    jne .LBB9_3
1966; SSE2-NEXT:  .LBB9_4: # %else2
1967; SSE2-NEXT:    testb $4, %al
1968; SSE2-NEXT:    jne .LBB9_5
1969; SSE2-NEXT:  .LBB9_6: # %else4
1970; SSE2-NEXT:    testb $8, %al
1971; SSE2-NEXT:    jne .LBB9_7
1972; SSE2-NEXT:  .LBB9_8: # %else6
1973; SSE2-NEXT:    testb $16, %al
1974; SSE2-NEXT:    jne .LBB9_9
1975; SSE2-NEXT:  .LBB9_10: # %else8
1976; SSE2-NEXT:    testb $32, %al
1977; SSE2-NEXT:    je .LBB9_12
1978; SSE2-NEXT:  .LBB9_11: # %cond.store9
1979; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
1980; SSE2-NEXT:    movw %cx, 10(%rdi)
1981; SSE2-NEXT:  .LBB9_12: # %else10
1982; SSE2-NEXT:    pslld $16, %xmm3
1983; SSE2-NEXT:    pslld $16, %xmm2
1984; SSE2-NEXT:    testb $64, %al
1985; SSE2-NEXT:    je .LBB9_14
1986; SSE2-NEXT:  # %bb.13: # %cond.store11
1987; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
1988; SSE2-NEXT:    movw %cx, 12(%rdi)
1989; SSE2-NEXT:  .LBB9_14: # %else12
1990; SSE2-NEXT:    psrad $16, %xmm3
1991; SSE2-NEXT:    psrad $16, %xmm2
1992; SSE2-NEXT:    testb $-128, %al
1993; SSE2-NEXT:    je .LBB9_16
1994; SSE2-NEXT:  # %bb.15: # %cond.store13
1995; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
1996; SSE2-NEXT:    movw %cx, 14(%rdi)
1997; SSE2-NEXT:  .LBB9_16: # %else14
1998; SSE2-NEXT:    packssdw %xmm3, %xmm2
1999; SSE2-NEXT:    testl $256, %eax # imm = 0x100
2000; SSE2-NEXT:    jne .LBB9_17
2001; SSE2-NEXT:  # %bb.18: # %else16
2002; SSE2-NEXT:    testl $512, %eax # imm = 0x200
2003; SSE2-NEXT:    jne .LBB9_19
2004; SSE2-NEXT:  .LBB9_20: # %else18
2005; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
2006; SSE2-NEXT:    jne .LBB9_21
2007; SSE2-NEXT:  .LBB9_22: # %else20
2008; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
2009; SSE2-NEXT:    jne .LBB9_23
2010; SSE2-NEXT:  .LBB9_24: # %else22
2011; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
2012; SSE2-NEXT:    jne .LBB9_25
2013; SSE2-NEXT:  .LBB9_26: # %else24
2014; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
2015; SSE2-NEXT:    jne .LBB9_27
2016; SSE2-NEXT:  .LBB9_28: # %else26
2017; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
2018; SSE2-NEXT:    jne .LBB9_29
2019; SSE2-NEXT:  .LBB9_30: # %else28
2020; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
2021; SSE2-NEXT:    jne .LBB9_31
2022; SSE2-NEXT:  .LBB9_32: # %else30
2023; SSE2-NEXT:    retq
2024; SSE2-NEXT:  .LBB9_1: # %cond.store
2025; SSE2-NEXT:    movd %xmm0, %ecx
2026; SSE2-NEXT:    movw %cx, (%rdi)
2027; SSE2-NEXT:    testb $2, %al
2028; SSE2-NEXT:    je .LBB9_4
2029; SSE2-NEXT:  .LBB9_3: # %cond.store1
2030; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
2031; SSE2-NEXT:    movw %cx, 2(%rdi)
2032; SSE2-NEXT:    testb $4, %al
2033; SSE2-NEXT:    je .LBB9_6
2034; SSE2-NEXT:  .LBB9_5: # %cond.store3
2035; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
2036; SSE2-NEXT:    movw %cx, 4(%rdi)
2037; SSE2-NEXT:    testb $8, %al
2038; SSE2-NEXT:    je .LBB9_8
2039; SSE2-NEXT:  .LBB9_7: # %cond.store5
2040; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
2041; SSE2-NEXT:    movw %cx, 6(%rdi)
2042; SSE2-NEXT:    testb $16, %al
2043; SSE2-NEXT:    je .LBB9_10
2044; SSE2-NEXT:  .LBB9_9: # %cond.store7
2045; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
2046; SSE2-NEXT:    movw %cx, 8(%rdi)
2047; SSE2-NEXT:    testb $32, %al
2048; SSE2-NEXT:    jne .LBB9_11
2049; SSE2-NEXT:    jmp .LBB9_12
2050; SSE2-NEXT:  .LBB9_17: # %cond.store15
2051; SSE2-NEXT:    movd %xmm2, %ecx
2052; SSE2-NEXT:    movw %cx, 16(%rdi)
2053; SSE2-NEXT:    testl $512, %eax # imm = 0x200
2054; SSE2-NEXT:    je .LBB9_20
2055; SSE2-NEXT:  .LBB9_19: # %cond.store17
2056; SSE2-NEXT:    pextrw $1, %xmm2, %ecx
2057; SSE2-NEXT:    movw %cx, 18(%rdi)
2058; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
2059; SSE2-NEXT:    je .LBB9_22
2060; SSE2-NEXT:  .LBB9_21: # %cond.store19
2061; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
2062; SSE2-NEXT:    movw %cx, 20(%rdi)
2063; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
2064; SSE2-NEXT:    je .LBB9_24
2065; SSE2-NEXT:  .LBB9_23: # %cond.store21
2066; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
2067; SSE2-NEXT:    movw %cx, 22(%rdi)
2068; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
2069; SSE2-NEXT:    je .LBB9_26
2070; SSE2-NEXT:  .LBB9_25: # %cond.store23
2071; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
2072; SSE2-NEXT:    movw %cx, 24(%rdi)
2073; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
2074; SSE2-NEXT:    je .LBB9_28
2075; SSE2-NEXT:  .LBB9_27: # %cond.store25
2076; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
2077; SSE2-NEXT:    movw %cx, 26(%rdi)
2078; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
2079; SSE2-NEXT:    je .LBB9_30
2080; SSE2-NEXT:  .LBB9_29: # %cond.store27
2081; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
2082; SSE2-NEXT:    movw %cx, 28(%rdi)
2083; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
2084; SSE2-NEXT:    je .LBB9_32
2085; SSE2-NEXT:  .LBB9_31: # %cond.store29
2086; SSE2-NEXT:    pextrw $7, %xmm2, %eax
2087; SSE2-NEXT:    movw %ax, 30(%rdi)
2088; SSE2-NEXT:    retq
2089;
2090; SSE4-LABEL: truncstore_v16i32_v16i16:
2091; SSE4:       # %bb.0:
2092; SSE4-NEXT:    pxor %xmm8, %xmm8
2093; SSE4-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm8[1],xmm1[2],xmm8[3],xmm1[4],xmm8[5],xmm1[6],xmm8[7]
2094; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm8[1],xmm0[2],xmm8[3],xmm0[4],xmm8[5],xmm0[6],xmm8[7]
2095; SSE4-NEXT:    packusdw %xmm1, %xmm0
2096; SSE4-NEXT:    pcmpeqd %xmm8, %xmm7
2097; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
2098; SSE4-NEXT:    pxor %xmm1, %xmm7
2099; SSE4-NEXT:    pcmpeqd %xmm8, %xmm6
2100; SSE4-NEXT:    pxor %xmm1, %xmm6
2101; SSE4-NEXT:    packssdw %xmm7, %xmm6
2102; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
2103; SSE4-NEXT:    pxor %xmm1, %xmm5
2104; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
2105; SSE4-NEXT:    pxor %xmm1, %xmm4
2106; SSE4-NEXT:    packssdw %xmm5, %xmm4
2107; SSE4-NEXT:    packsswb %xmm6, %xmm4
2108; SSE4-NEXT:    pmovmskb %xmm4, %eax
2109; SSE4-NEXT:    testb $1, %al
2110; SSE4-NEXT:    jne .LBB9_1
2111; SSE4-NEXT:  # %bb.2: # %else
2112; SSE4-NEXT:    testb $2, %al
2113; SSE4-NEXT:    jne .LBB9_3
2114; SSE4-NEXT:  .LBB9_4: # %else2
2115; SSE4-NEXT:    testb $4, %al
2116; SSE4-NEXT:    jne .LBB9_5
2117; SSE4-NEXT:  .LBB9_6: # %else4
2118; SSE4-NEXT:    testb $8, %al
2119; SSE4-NEXT:    jne .LBB9_7
2120; SSE4-NEXT:  .LBB9_8: # %else6
2121; SSE4-NEXT:    testb $16, %al
2122; SSE4-NEXT:    jne .LBB9_9
2123; SSE4-NEXT:  .LBB9_10: # %else8
2124; SSE4-NEXT:    testb $32, %al
2125; SSE4-NEXT:    jne .LBB9_11
2126; SSE4-NEXT:  .LBB9_12: # %else10
2127; SSE4-NEXT:    testb $64, %al
2128; SSE4-NEXT:    je .LBB9_14
2129; SSE4-NEXT:  .LBB9_13: # %cond.store11
2130; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
2131; SSE4-NEXT:  .LBB9_14: # %else12
2132; SSE4-NEXT:    pblendw {{.*#+}} xmm3 = xmm3[0],xmm8[1],xmm3[2],xmm8[3],xmm3[4],xmm8[5],xmm3[6],xmm8[7]
2133; SSE4-NEXT:    pblendw {{.*#+}} xmm2 = xmm2[0],xmm8[1],xmm2[2],xmm8[3],xmm2[4],xmm8[5],xmm2[6],xmm8[7]
2134; SSE4-NEXT:    testb $-128, %al
2135; SSE4-NEXT:    je .LBB9_16
2136; SSE4-NEXT:  # %bb.15: # %cond.store13
2137; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
2138; SSE4-NEXT:  .LBB9_16: # %else14
2139; SSE4-NEXT:    packusdw %xmm3, %xmm2
2140; SSE4-NEXT:    testl $256, %eax # imm = 0x100
2141; SSE4-NEXT:    jne .LBB9_17
2142; SSE4-NEXT:  # %bb.18: # %else16
2143; SSE4-NEXT:    testl $512, %eax # imm = 0x200
2144; SSE4-NEXT:    jne .LBB9_19
2145; SSE4-NEXT:  .LBB9_20: # %else18
2146; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
2147; SSE4-NEXT:    jne .LBB9_21
2148; SSE4-NEXT:  .LBB9_22: # %else20
2149; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
2150; SSE4-NEXT:    jne .LBB9_23
2151; SSE4-NEXT:  .LBB9_24: # %else22
2152; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
2153; SSE4-NEXT:    jne .LBB9_25
2154; SSE4-NEXT:  .LBB9_26: # %else24
2155; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
2156; SSE4-NEXT:    jne .LBB9_27
2157; SSE4-NEXT:  .LBB9_28: # %else26
2158; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
2159; SSE4-NEXT:    jne .LBB9_29
2160; SSE4-NEXT:  .LBB9_30: # %else28
2161; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
2162; SSE4-NEXT:    jne .LBB9_31
2163; SSE4-NEXT:  .LBB9_32: # %else30
2164; SSE4-NEXT:    retq
2165; SSE4-NEXT:  .LBB9_1: # %cond.store
2166; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
2167; SSE4-NEXT:    testb $2, %al
2168; SSE4-NEXT:    je .LBB9_4
2169; SSE4-NEXT:  .LBB9_3: # %cond.store1
2170; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
2171; SSE4-NEXT:    testb $4, %al
2172; SSE4-NEXT:    je .LBB9_6
2173; SSE4-NEXT:  .LBB9_5: # %cond.store3
2174; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
2175; SSE4-NEXT:    testb $8, %al
2176; SSE4-NEXT:    je .LBB9_8
2177; SSE4-NEXT:  .LBB9_7: # %cond.store5
2178; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
2179; SSE4-NEXT:    testb $16, %al
2180; SSE4-NEXT:    je .LBB9_10
2181; SSE4-NEXT:  .LBB9_9: # %cond.store7
2182; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
2183; SSE4-NEXT:    testb $32, %al
2184; SSE4-NEXT:    je .LBB9_12
2185; SSE4-NEXT:  .LBB9_11: # %cond.store9
2186; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
2187; SSE4-NEXT:    testb $64, %al
2188; SSE4-NEXT:    jne .LBB9_13
2189; SSE4-NEXT:    jmp .LBB9_14
2190; SSE4-NEXT:  .LBB9_17: # %cond.store15
2191; SSE4-NEXT:    pextrw $0, %xmm2, 16(%rdi)
2192; SSE4-NEXT:    testl $512, %eax # imm = 0x200
2193; SSE4-NEXT:    je .LBB9_20
2194; SSE4-NEXT:  .LBB9_19: # %cond.store17
2195; SSE4-NEXT:    pextrw $1, %xmm2, 18(%rdi)
2196; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
2197; SSE4-NEXT:    je .LBB9_22
2198; SSE4-NEXT:  .LBB9_21: # %cond.store19
2199; SSE4-NEXT:    pextrw $2, %xmm2, 20(%rdi)
2200; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
2201; SSE4-NEXT:    je .LBB9_24
2202; SSE4-NEXT:  .LBB9_23: # %cond.store21
2203; SSE4-NEXT:    pextrw $3, %xmm2, 22(%rdi)
2204; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
2205; SSE4-NEXT:    je .LBB9_26
2206; SSE4-NEXT:  .LBB9_25: # %cond.store23
2207; SSE4-NEXT:    pextrw $4, %xmm2, 24(%rdi)
2208; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
2209; SSE4-NEXT:    je .LBB9_28
2210; SSE4-NEXT:  .LBB9_27: # %cond.store25
2211; SSE4-NEXT:    pextrw $5, %xmm2, 26(%rdi)
2212; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
2213; SSE4-NEXT:    je .LBB9_30
2214; SSE4-NEXT:  .LBB9_29: # %cond.store27
2215; SSE4-NEXT:    pextrw $6, %xmm2, 28(%rdi)
2216; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
2217; SSE4-NEXT:    je .LBB9_32
2218; SSE4-NEXT:  .LBB9_31: # %cond.store29
2219; SSE4-NEXT:    pextrw $7, %xmm2, 30(%rdi)
2220; SSE4-NEXT:    retq
2221;
2222; AVX1-LABEL: truncstore_v16i32_v16i16:
2223; AVX1:       # %bb.0:
2224; AVX1-NEXT:    vmovaps {{.*#+}} ymm4 = [65535,65535,65535,65535,65535,65535,65535,65535]
2225; AVX1-NEXT:    vandps %ymm4, %ymm1, %ymm1
2226; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
2227; AVX1-NEXT:    vpackusdw %xmm5, %xmm1, %xmm1
2228; AVX1-NEXT:    vandps %ymm4, %ymm0, %ymm0
2229; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2230; AVX1-NEXT:    vpackusdw %xmm4, %xmm0, %xmm0
2231; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
2232; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
2233; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2234; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm1, %xmm1
2235; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
2236; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
2237; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
2238; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
2239; AVX1-NEXT:    vpackssdw %xmm1, %xmm3, %xmm1
2240; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
2241; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
2242; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
2243; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
2244; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
2245; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
2246; AVX1-NEXT:    vpacksswb %xmm1, %xmm2, %xmm1
2247; AVX1-NEXT:    vpmovmskb %xmm1, %eax
2248; AVX1-NEXT:    testb $1, %al
2249; AVX1-NEXT:    jne .LBB9_1
2250; AVX1-NEXT:  # %bb.2: # %else
2251; AVX1-NEXT:    testb $2, %al
2252; AVX1-NEXT:    jne .LBB9_3
2253; AVX1-NEXT:  .LBB9_4: # %else2
2254; AVX1-NEXT:    testb $4, %al
2255; AVX1-NEXT:    jne .LBB9_5
2256; AVX1-NEXT:  .LBB9_6: # %else4
2257; AVX1-NEXT:    testb $8, %al
2258; AVX1-NEXT:    jne .LBB9_7
2259; AVX1-NEXT:  .LBB9_8: # %else6
2260; AVX1-NEXT:    testb $16, %al
2261; AVX1-NEXT:    jne .LBB9_9
2262; AVX1-NEXT:  .LBB9_10: # %else8
2263; AVX1-NEXT:    testb $32, %al
2264; AVX1-NEXT:    jne .LBB9_11
2265; AVX1-NEXT:  .LBB9_12: # %else10
2266; AVX1-NEXT:    testb $64, %al
2267; AVX1-NEXT:    jne .LBB9_13
2268; AVX1-NEXT:  .LBB9_14: # %else12
2269; AVX1-NEXT:    testb $-128, %al
2270; AVX1-NEXT:    je .LBB9_16
2271; AVX1-NEXT:  .LBB9_15: # %cond.store13
2272; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
2273; AVX1-NEXT:  .LBB9_16: # %else14
2274; AVX1-NEXT:    testl $256, %eax # imm = 0x100
2275; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2276; AVX1-NEXT:    jne .LBB9_17
2277; AVX1-NEXT:  # %bb.18: # %else16
2278; AVX1-NEXT:    testl $512, %eax # imm = 0x200
2279; AVX1-NEXT:    jne .LBB9_19
2280; AVX1-NEXT:  .LBB9_20: # %else18
2281; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
2282; AVX1-NEXT:    jne .LBB9_21
2283; AVX1-NEXT:  .LBB9_22: # %else20
2284; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
2285; AVX1-NEXT:    jne .LBB9_23
2286; AVX1-NEXT:  .LBB9_24: # %else22
2287; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
2288; AVX1-NEXT:    jne .LBB9_25
2289; AVX1-NEXT:  .LBB9_26: # %else24
2290; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
2291; AVX1-NEXT:    jne .LBB9_27
2292; AVX1-NEXT:  .LBB9_28: # %else26
2293; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
2294; AVX1-NEXT:    jne .LBB9_29
2295; AVX1-NEXT:  .LBB9_30: # %else28
2296; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
2297; AVX1-NEXT:    jne .LBB9_31
2298; AVX1-NEXT:  .LBB9_32: # %else30
2299; AVX1-NEXT:    vzeroupper
2300; AVX1-NEXT:    retq
2301; AVX1-NEXT:  .LBB9_1: # %cond.store
2302; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
2303; AVX1-NEXT:    testb $2, %al
2304; AVX1-NEXT:    je .LBB9_4
2305; AVX1-NEXT:  .LBB9_3: # %cond.store1
2306; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2307; AVX1-NEXT:    testb $4, %al
2308; AVX1-NEXT:    je .LBB9_6
2309; AVX1-NEXT:  .LBB9_5: # %cond.store3
2310; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2311; AVX1-NEXT:    testb $8, %al
2312; AVX1-NEXT:    je .LBB9_8
2313; AVX1-NEXT:  .LBB9_7: # %cond.store5
2314; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2315; AVX1-NEXT:    testb $16, %al
2316; AVX1-NEXT:    je .LBB9_10
2317; AVX1-NEXT:  .LBB9_9: # %cond.store7
2318; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
2319; AVX1-NEXT:    testb $32, %al
2320; AVX1-NEXT:    je .LBB9_12
2321; AVX1-NEXT:  .LBB9_11: # %cond.store9
2322; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
2323; AVX1-NEXT:    testb $64, %al
2324; AVX1-NEXT:    je .LBB9_14
2325; AVX1-NEXT:  .LBB9_13: # %cond.store11
2326; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
2327; AVX1-NEXT:    testb $-128, %al
2328; AVX1-NEXT:    jne .LBB9_15
2329; AVX1-NEXT:    jmp .LBB9_16
2330; AVX1-NEXT:  .LBB9_17: # %cond.store15
2331; AVX1-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2332; AVX1-NEXT:    testl $512, %eax # imm = 0x200
2333; AVX1-NEXT:    je .LBB9_20
2334; AVX1-NEXT:  .LBB9_19: # %cond.store17
2335; AVX1-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2336; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
2337; AVX1-NEXT:    je .LBB9_22
2338; AVX1-NEXT:  .LBB9_21: # %cond.store19
2339; AVX1-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2340; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
2341; AVX1-NEXT:    je .LBB9_24
2342; AVX1-NEXT:  .LBB9_23: # %cond.store21
2343; AVX1-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2344; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
2345; AVX1-NEXT:    je .LBB9_26
2346; AVX1-NEXT:  .LBB9_25: # %cond.store23
2347; AVX1-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2348; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
2349; AVX1-NEXT:    je .LBB9_28
2350; AVX1-NEXT:  .LBB9_27: # %cond.store25
2351; AVX1-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2352; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
2353; AVX1-NEXT:    je .LBB9_30
2354; AVX1-NEXT:  .LBB9_29: # %cond.store27
2355; AVX1-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2356; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
2357; AVX1-NEXT:    je .LBB9_32
2358; AVX1-NEXT:  .LBB9_31: # %cond.store29
2359; AVX1-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2360; AVX1-NEXT:    vzeroupper
2361; AVX1-NEXT:    retq
2362;
2363; AVX2-LABEL: truncstore_v16i32_v16i16:
2364; AVX2:       # %bb.0:
2365; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2366; AVX2-NEXT:    vpblendw {{.*#+}} ymm1 = ymm1[0],ymm4[1],ymm1[2],ymm4[3],ymm1[4],ymm4[5],ymm1[6],ymm4[7],ymm1[8],ymm4[9],ymm1[10],ymm4[11],ymm1[12],ymm4[13],ymm1[14],ymm4[15]
2367; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0],ymm4[1],ymm0[2],ymm4[3],ymm0[4],ymm4[5],ymm0[6],ymm4[7],ymm0[8],ymm4[9],ymm0[10],ymm4[11],ymm0[12],ymm4[13],ymm0[14],ymm4[15]
2368; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
2369; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2370; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm1
2371; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
2372; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
2373; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
2374; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
2375; AVX2-NEXT:    vpackssdw %ymm1, %ymm2, %ymm1
2376; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
2377; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
2378; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,1,3]
2379; AVX2-NEXT:    vpmovmskb %xmm1, %eax
2380; AVX2-NEXT:    testb $1, %al
2381; AVX2-NEXT:    jne .LBB9_1
2382; AVX2-NEXT:  # %bb.2: # %else
2383; AVX2-NEXT:    testb $2, %al
2384; AVX2-NEXT:    jne .LBB9_3
2385; AVX2-NEXT:  .LBB9_4: # %else2
2386; AVX2-NEXT:    testb $4, %al
2387; AVX2-NEXT:    jne .LBB9_5
2388; AVX2-NEXT:  .LBB9_6: # %else4
2389; AVX2-NEXT:    testb $8, %al
2390; AVX2-NEXT:    jne .LBB9_7
2391; AVX2-NEXT:  .LBB9_8: # %else6
2392; AVX2-NEXT:    testb $16, %al
2393; AVX2-NEXT:    jne .LBB9_9
2394; AVX2-NEXT:  .LBB9_10: # %else8
2395; AVX2-NEXT:    testb $32, %al
2396; AVX2-NEXT:    jne .LBB9_11
2397; AVX2-NEXT:  .LBB9_12: # %else10
2398; AVX2-NEXT:    testb $64, %al
2399; AVX2-NEXT:    jne .LBB9_13
2400; AVX2-NEXT:  .LBB9_14: # %else12
2401; AVX2-NEXT:    testb $-128, %al
2402; AVX2-NEXT:    je .LBB9_16
2403; AVX2-NEXT:  .LBB9_15: # %cond.store13
2404; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
2405; AVX2-NEXT:  .LBB9_16: # %else14
2406; AVX2-NEXT:    testl $256, %eax # imm = 0x100
2407; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
2408; AVX2-NEXT:    jne .LBB9_17
2409; AVX2-NEXT:  # %bb.18: # %else16
2410; AVX2-NEXT:    testl $512, %eax # imm = 0x200
2411; AVX2-NEXT:    jne .LBB9_19
2412; AVX2-NEXT:  .LBB9_20: # %else18
2413; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
2414; AVX2-NEXT:    jne .LBB9_21
2415; AVX2-NEXT:  .LBB9_22: # %else20
2416; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
2417; AVX2-NEXT:    jne .LBB9_23
2418; AVX2-NEXT:  .LBB9_24: # %else22
2419; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
2420; AVX2-NEXT:    jne .LBB9_25
2421; AVX2-NEXT:  .LBB9_26: # %else24
2422; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
2423; AVX2-NEXT:    jne .LBB9_27
2424; AVX2-NEXT:  .LBB9_28: # %else26
2425; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
2426; AVX2-NEXT:    jne .LBB9_29
2427; AVX2-NEXT:  .LBB9_30: # %else28
2428; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
2429; AVX2-NEXT:    jne .LBB9_31
2430; AVX2-NEXT:  .LBB9_32: # %else30
2431; AVX2-NEXT:    vzeroupper
2432; AVX2-NEXT:    retq
2433; AVX2-NEXT:  .LBB9_1: # %cond.store
2434; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
2435; AVX2-NEXT:    testb $2, %al
2436; AVX2-NEXT:    je .LBB9_4
2437; AVX2-NEXT:  .LBB9_3: # %cond.store1
2438; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2439; AVX2-NEXT:    testb $4, %al
2440; AVX2-NEXT:    je .LBB9_6
2441; AVX2-NEXT:  .LBB9_5: # %cond.store3
2442; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2443; AVX2-NEXT:    testb $8, %al
2444; AVX2-NEXT:    je .LBB9_8
2445; AVX2-NEXT:  .LBB9_7: # %cond.store5
2446; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2447; AVX2-NEXT:    testb $16, %al
2448; AVX2-NEXT:    je .LBB9_10
2449; AVX2-NEXT:  .LBB9_9: # %cond.store7
2450; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
2451; AVX2-NEXT:    testb $32, %al
2452; AVX2-NEXT:    je .LBB9_12
2453; AVX2-NEXT:  .LBB9_11: # %cond.store9
2454; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
2455; AVX2-NEXT:    testb $64, %al
2456; AVX2-NEXT:    je .LBB9_14
2457; AVX2-NEXT:  .LBB9_13: # %cond.store11
2458; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
2459; AVX2-NEXT:    testb $-128, %al
2460; AVX2-NEXT:    jne .LBB9_15
2461; AVX2-NEXT:    jmp .LBB9_16
2462; AVX2-NEXT:  .LBB9_17: # %cond.store15
2463; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2464; AVX2-NEXT:    testl $512, %eax # imm = 0x200
2465; AVX2-NEXT:    je .LBB9_20
2466; AVX2-NEXT:  .LBB9_19: # %cond.store17
2467; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2468; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
2469; AVX2-NEXT:    je .LBB9_22
2470; AVX2-NEXT:  .LBB9_21: # %cond.store19
2471; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2472; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
2473; AVX2-NEXT:    je .LBB9_24
2474; AVX2-NEXT:  .LBB9_23: # %cond.store21
2475; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2476; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
2477; AVX2-NEXT:    je .LBB9_26
2478; AVX2-NEXT:  .LBB9_25: # %cond.store23
2479; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2480; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
2481; AVX2-NEXT:    je .LBB9_28
2482; AVX2-NEXT:  .LBB9_27: # %cond.store25
2483; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2484; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
2485; AVX2-NEXT:    je .LBB9_30
2486; AVX2-NEXT:  .LBB9_29: # %cond.store27
2487; AVX2-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2488; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
2489; AVX2-NEXT:    je .LBB9_32
2490; AVX2-NEXT:  .LBB9_31: # %cond.store29
2491; AVX2-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2492; AVX2-NEXT:    vzeroupper
2493; AVX2-NEXT:    retq
2494;
2495; AVX512F-LABEL: truncstore_v16i32_v16i16:
2496; AVX512F:       # %bb.0:
2497; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
2498; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
2499; AVX512F-NEXT:    kmovw %k0, %eax
2500; AVX512F-NEXT:    testb $1, %al
2501; AVX512F-NEXT:    jne .LBB9_1
2502; AVX512F-NEXT:  # %bb.2: # %else
2503; AVX512F-NEXT:    testb $2, %al
2504; AVX512F-NEXT:    jne .LBB9_3
2505; AVX512F-NEXT:  .LBB9_4: # %else2
2506; AVX512F-NEXT:    testb $4, %al
2507; AVX512F-NEXT:    jne .LBB9_5
2508; AVX512F-NEXT:  .LBB9_6: # %else4
2509; AVX512F-NEXT:    testb $8, %al
2510; AVX512F-NEXT:    jne .LBB9_7
2511; AVX512F-NEXT:  .LBB9_8: # %else6
2512; AVX512F-NEXT:    testb $16, %al
2513; AVX512F-NEXT:    jne .LBB9_9
2514; AVX512F-NEXT:  .LBB9_10: # %else8
2515; AVX512F-NEXT:    testb $32, %al
2516; AVX512F-NEXT:    jne .LBB9_11
2517; AVX512F-NEXT:  .LBB9_12: # %else10
2518; AVX512F-NEXT:    testb $64, %al
2519; AVX512F-NEXT:    jne .LBB9_13
2520; AVX512F-NEXT:  .LBB9_14: # %else12
2521; AVX512F-NEXT:    testb $-128, %al
2522; AVX512F-NEXT:    je .LBB9_16
2523; AVX512F-NEXT:  .LBB9_15: # %cond.store13
2524; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
2525; AVX512F-NEXT:  .LBB9_16: # %else14
2526; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
2527; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
2528; AVX512F-NEXT:    jne .LBB9_17
2529; AVX512F-NEXT:  # %bb.18: # %else16
2530; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
2531; AVX512F-NEXT:    jne .LBB9_19
2532; AVX512F-NEXT:  .LBB9_20: # %else18
2533; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
2534; AVX512F-NEXT:    jne .LBB9_21
2535; AVX512F-NEXT:  .LBB9_22: # %else20
2536; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
2537; AVX512F-NEXT:    jne .LBB9_23
2538; AVX512F-NEXT:  .LBB9_24: # %else22
2539; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
2540; AVX512F-NEXT:    jne .LBB9_25
2541; AVX512F-NEXT:  .LBB9_26: # %else24
2542; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
2543; AVX512F-NEXT:    jne .LBB9_27
2544; AVX512F-NEXT:  .LBB9_28: # %else26
2545; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
2546; AVX512F-NEXT:    jne .LBB9_29
2547; AVX512F-NEXT:  .LBB9_30: # %else28
2548; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
2549; AVX512F-NEXT:    jne .LBB9_31
2550; AVX512F-NEXT:  .LBB9_32: # %else30
2551; AVX512F-NEXT:    vzeroupper
2552; AVX512F-NEXT:    retq
2553; AVX512F-NEXT:  .LBB9_1: # %cond.store
2554; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
2555; AVX512F-NEXT:    testb $2, %al
2556; AVX512F-NEXT:    je .LBB9_4
2557; AVX512F-NEXT:  .LBB9_3: # %cond.store1
2558; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2559; AVX512F-NEXT:    testb $4, %al
2560; AVX512F-NEXT:    je .LBB9_6
2561; AVX512F-NEXT:  .LBB9_5: # %cond.store3
2562; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2563; AVX512F-NEXT:    testb $8, %al
2564; AVX512F-NEXT:    je .LBB9_8
2565; AVX512F-NEXT:  .LBB9_7: # %cond.store5
2566; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2567; AVX512F-NEXT:    testb $16, %al
2568; AVX512F-NEXT:    je .LBB9_10
2569; AVX512F-NEXT:  .LBB9_9: # %cond.store7
2570; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
2571; AVX512F-NEXT:    testb $32, %al
2572; AVX512F-NEXT:    je .LBB9_12
2573; AVX512F-NEXT:  .LBB9_11: # %cond.store9
2574; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
2575; AVX512F-NEXT:    testb $64, %al
2576; AVX512F-NEXT:    je .LBB9_14
2577; AVX512F-NEXT:  .LBB9_13: # %cond.store11
2578; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
2579; AVX512F-NEXT:    testb $-128, %al
2580; AVX512F-NEXT:    jne .LBB9_15
2581; AVX512F-NEXT:    jmp .LBB9_16
2582; AVX512F-NEXT:  .LBB9_17: # %cond.store15
2583; AVX512F-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
2584; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
2585; AVX512F-NEXT:    je .LBB9_20
2586; AVX512F-NEXT:  .LBB9_19: # %cond.store17
2587; AVX512F-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
2588; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
2589; AVX512F-NEXT:    je .LBB9_22
2590; AVX512F-NEXT:  .LBB9_21: # %cond.store19
2591; AVX512F-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
2592; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
2593; AVX512F-NEXT:    je .LBB9_24
2594; AVX512F-NEXT:  .LBB9_23: # %cond.store21
2595; AVX512F-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
2596; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
2597; AVX512F-NEXT:    je .LBB9_26
2598; AVX512F-NEXT:  .LBB9_25: # %cond.store23
2599; AVX512F-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
2600; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
2601; AVX512F-NEXT:    je .LBB9_28
2602; AVX512F-NEXT:  .LBB9_27: # %cond.store25
2603; AVX512F-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
2604; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
2605; AVX512F-NEXT:    je .LBB9_30
2606; AVX512F-NEXT:  .LBB9_29: # %cond.store27
2607; AVX512F-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
2608; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
2609; AVX512F-NEXT:    je .LBB9_32
2610; AVX512F-NEXT:  .LBB9_31: # %cond.store29
2611; AVX512F-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
2612; AVX512F-NEXT:    vzeroupper
2613; AVX512F-NEXT:    retq
2614;
2615; AVX512BW-LABEL: truncstore_v16i32_v16i16:
2616; AVX512BW:       # %bb.0:
2617; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
2618; AVX512BW-NEXT:    vpmovdw %zmm0, (%rdi) {%k1}
2619; AVX512BW-NEXT:    vzeroupper
2620; AVX512BW-NEXT:    retq
2621;
2622; AVX512BWVL-LABEL: truncstore_v16i32_v16i16:
2623; AVX512BWVL:       # %bb.0:
2624; AVX512BWVL-NEXT:    vptestmd %zmm1, %zmm1, %k1
2625; AVX512BWVL-NEXT:    vpmovdw %zmm0, (%rdi) {%k1}
2626; AVX512BWVL-NEXT:    vzeroupper
2627; AVX512BWVL-NEXT:    retq
2628  %a = icmp ne <16 x i32> %mask, zeroinitializer
2629  %b = trunc <16 x i32> %x to <16 x i16>
2630  call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> %b, <16 x i16>* %p, i32 1, <16 x i1> %a)
2631  ret void
2632}
2633
2634define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %mask) {
2635; SSE2-LABEL: truncstore_v16i32_v16i8:
2636; SSE2:       # %bb.0:
2637; SSE2-NEXT:    pxor %xmm8, %xmm8
2638; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2639; SSE2-NEXT:    pand %xmm9, %xmm3
2640; SSE2-NEXT:    pand %xmm9, %xmm2
2641; SSE2-NEXT:    packuswb %xmm3, %xmm2
2642; SSE2-NEXT:    pand %xmm9, %xmm1
2643; SSE2-NEXT:    pand %xmm9, %xmm0
2644; SSE2-NEXT:    packuswb %xmm1, %xmm0
2645; SSE2-NEXT:    packuswb %xmm2, %xmm0
2646; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
2647; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
2648; SSE2-NEXT:    pxor %xmm1, %xmm7
2649; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
2650; SSE2-NEXT:    pxor %xmm1, %xmm6
2651; SSE2-NEXT:    packssdw %xmm7, %xmm6
2652; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
2653; SSE2-NEXT:    pxor %xmm1, %xmm5
2654; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
2655; SSE2-NEXT:    pxor %xmm1, %xmm4
2656; SSE2-NEXT:    packssdw %xmm5, %xmm4
2657; SSE2-NEXT:    packsswb %xmm6, %xmm4
2658; SSE2-NEXT:    pmovmskb %xmm4, %eax
2659; SSE2-NEXT:    testb $1, %al
2660; SSE2-NEXT:    movd %xmm0, %ecx
2661; SSE2-NEXT:    jne .LBB10_1
2662; SSE2-NEXT:  # %bb.2: # %else
2663; SSE2-NEXT:    testb $2, %al
2664; SSE2-NEXT:    jne .LBB10_3
2665; SSE2-NEXT:  .LBB10_4: # %else2
2666; SSE2-NEXT:    testb $4, %al
2667; SSE2-NEXT:    jne .LBB10_5
2668; SSE2-NEXT:  .LBB10_6: # %else4
2669; SSE2-NEXT:    testb $8, %al
2670; SSE2-NEXT:    je .LBB10_8
2671; SSE2-NEXT:  .LBB10_7: # %cond.store5
2672; SSE2-NEXT:    shrl $24, %ecx
2673; SSE2-NEXT:    movb %cl, 3(%rdi)
2674; SSE2-NEXT:  .LBB10_8: # %else6
2675; SSE2-NEXT:    testb $16, %al
2676; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
2677; SSE2-NEXT:    je .LBB10_10
2678; SSE2-NEXT:  # %bb.9: # %cond.store7
2679; SSE2-NEXT:    movb %cl, 4(%rdi)
2680; SSE2-NEXT:  .LBB10_10: # %else8
2681; SSE2-NEXT:    testb $32, %al
2682; SSE2-NEXT:    je .LBB10_12
2683; SSE2-NEXT:  # %bb.11: # %cond.store9
2684; SSE2-NEXT:    movb %ch, 5(%rdi)
2685; SSE2-NEXT:  .LBB10_12: # %else10
2686; SSE2-NEXT:    testb $64, %al
2687; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
2688; SSE2-NEXT:    je .LBB10_14
2689; SSE2-NEXT:  # %bb.13: # %cond.store11
2690; SSE2-NEXT:    movb %cl, 6(%rdi)
2691; SSE2-NEXT:  .LBB10_14: # %else12
2692; SSE2-NEXT:    testb $-128, %al
2693; SSE2-NEXT:    je .LBB10_16
2694; SSE2-NEXT:  # %bb.15: # %cond.store13
2695; SSE2-NEXT:    movb %ch, 7(%rdi)
2696; SSE2-NEXT:  .LBB10_16: # %else14
2697; SSE2-NEXT:    testl $256, %eax # imm = 0x100
2698; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
2699; SSE2-NEXT:    je .LBB10_18
2700; SSE2-NEXT:  # %bb.17: # %cond.store15
2701; SSE2-NEXT:    movb %cl, 8(%rdi)
2702; SSE2-NEXT:  .LBB10_18: # %else16
2703; SSE2-NEXT:    testl $512, %eax # imm = 0x200
2704; SSE2-NEXT:    je .LBB10_20
2705; SSE2-NEXT:  # %bb.19: # %cond.store17
2706; SSE2-NEXT:    movb %ch, 9(%rdi)
2707; SSE2-NEXT:  .LBB10_20: # %else18
2708; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
2709; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
2710; SSE2-NEXT:    je .LBB10_22
2711; SSE2-NEXT:  # %bb.21: # %cond.store19
2712; SSE2-NEXT:    movb %cl, 10(%rdi)
2713; SSE2-NEXT:  .LBB10_22: # %else20
2714; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
2715; SSE2-NEXT:    je .LBB10_24
2716; SSE2-NEXT:  # %bb.23: # %cond.store21
2717; SSE2-NEXT:    movb %ch, 11(%rdi)
2718; SSE2-NEXT:  .LBB10_24: # %else22
2719; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
2720; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
2721; SSE2-NEXT:    je .LBB10_26
2722; SSE2-NEXT:  # %bb.25: # %cond.store23
2723; SSE2-NEXT:    movb %cl, 12(%rdi)
2724; SSE2-NEXT:  .LBB10_26: # %else24
2725; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
2726; SSE2-NEXT:    je .LBB10_28
2727; SSE2-NEXT:  # %bb.27: # %cond.store25
2728; SSE2-NEXT:    movb %ch, 13(%rdi)
2729; SSE2-NEXT:  .LBB10_28: # %else26
2730; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
2731; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
2732; SSE2-NEXT:    jne .LBB10_29
2733; SSE2-NEXT:  # %bb.30: # %else28
2734; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
2735; SSE2-NEXT:    jne .LBB10_31
2736; SSE2-NEXT:  .LBB10_32: # %else30
2737; SSE2-NEXT:    retq
2738; SSE2-NEXT:  .LBB10_1: # %cond.store
2739; SSE2-NEXT:    movb %cl, (%rdi)
2740; SSE2-NEXT:    testb $2, %al
2741; SSE2-NEXT:    je .LBB10_4
2742; SSE2-NEXT:  .LBB10_3: # %cond.store1
2743; SSE2-NEXT:    movb %ch, 1(%rdi)
2744; SSE2-NEXT:    testb $4, %al
2745; SSE2-NEXT:    je .LBB10_6
2746; SSE2-NEXT:  .LBB10_5: # %cond.store3
2747; SSE2-NEXT:    movl %ecx, %edx
2748; SSE2-NEXT:    shrl $16, %edx
2749; SSE2-NEXT:    movb %dl, 2(%rdi)
2750; SSE2-NEXT:    testb $8, %al
2751; SSE2-NEXT:    jne .LBB10_7
2752; SSE2-NEXT:    jmp .LBB10_8
2753; SSE2-NEXT:  .LBB10_29: # %cond.store27
2754; SSE2-NEXT:    movb %cl, 14(%rdi)
2755; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
2756; SSE2-NEXT:    je .LBB10_32
2757; SSE2-NEXT:  .LBB10_31: # %cond.store29
2758; SSE2-NEXT:    movb %ch, 15(%rdi)
2759; SSE2-NEXT:    retq
2760;
2761; SSE4-LABEL: truncstore_v16i32_v16i8:
2762; SSE4:       # %bb.0:
2763; SSE4-NEXT:    pxor %xmm8, %xmm8
2764; SSE4-NEXT:    movdqa {{.*#+}} xmm9 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2765; SSE4-NEXT:    pand %xmm9, %xmm3
2766; SSE4-NEXT:    pand %xmm9, %xmm2
2767; SSE4-NEXT:    packusdw %xmm3, %xmm2
2768; SSE4-NEXT:    pand %xmm9, %xmm1
2769; SSE4-NEXT:    pand %xmm9, %xmm0
2770; SSE4-NEXT:    packusdw %xmm1, %xmm0
2771; SSE4-NEXT:    packuswb %xmm2, %xmm0
2772; SSE4-NEXT:    pcmpeqd %xmm8, %xmm7
2773; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
2774; SSE4-NEXT:    pxor %xmm1, %xmm7
2775; SSE4-NEXT:    pcmpeqd %xmm8, %xmm6
2776; SSE4-NEXT:    pxor %xmm1, %xmm6
2777; SSE4-NEXT:    packssdw %xmm7, %xmm6
2778; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
2779; SSE4-NEXT:    pxor %xmm1, %xmm5
2780; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
2781; SSE4-NEXT:    pxor %xmm1, %xmm4
2782; SSE4-NEXT:    packssdw %xmm5, %xmm4
2783; SSE4-NEXT:    packsswb %xmm6, %xmm4
2784; SSE4-NEXT:    pmovmskb %xmm4, %eax
2785; SSE4-NEXT:    testb $1, %al
2786; SSE4-NEXT:    jne .LBB10_1
2787; SSE4-NEXT:  # %bb.2: # %else
2788; SSE4-NEXT:    testb $2, %al
2789; SSE4-NEXT:    jne .LBB10_3
2790; SSE4-NEXT:  .LBB10_4: # %else2
2791; SSE4-NEXT:    testb $4, %al
2792; SSE4-NEXT:    jne .LBB10_5
2793; SSE4-NEXT:  .LBB10_6: # %else4
2794; SSE4-NEXT:    testb $8, %al
2795; SSE4-NEXT:    jne .LBB10_7
2796; SSE4-NEXT:  .LBB10_8: # %else6
2797; SSE4-NEXT:    testb $16, %al
2798; SSE4-NEXT:    jne .LBB10_9
2799; SSE4-NEXT:  .LBB10_10: # %else8
2800; SSE4-NEXT:    testb $32, %al
2801; SSE4-NEXT:    jne .LBB10_11
2802; SSE4-NEXT:  .LBB10_12: # %else10
2803; SSE4-NEXT:    testb $64, %al
2804; SSE4-NEXT:    jne .LBB10_13
2805; SSE4-NEXT:  .LBB10_14: # %else12
2806; SSE4-NEXT:    testb $-128, %al
2807; SSE4-NEXT:    jne .LBB10_15
2808; SSE4-NEXT:  .LBB10_16: # %else14
2809; SSE4-NEXT:    testl $256, %eax # imm = 0x100
2810; SSE4-NEXT:    jne .LBB10_17
2811; SSE4-NEXT:  .LBB10_18: # %else16
2812; SSE4-NEXT:    testl $512, %eax # imm = 0x200
2813; SSE4-NEXT:    jne .LBB10_19
2814; SSE4-NEXT:  .LBB10_20: # %else18
2815; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
2816; SSE4-NEXT:    jne .LBB10_21
2817; SSE4-NEXT:  .LBB10_22: # %else20
2818; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
2819; SSE4-NEXT:    jne .LBB10_23
2820; SSE4-NEXT:  .LBB10_24: # %else22
2821; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
2822; SSE4-NEXT:    jne .LBB10_25
2823; SSE4-NEXT:  .LBB10_26: # %else24
2824; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
2825; SSE4-NEXT:    jne .LBB10_27
2826; SSE4-NEXT:  .LBB10_28: # %else26
2827; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
2828; SSE4-NEXT:    jne .LBB10_29
2829; SSE4-NEXT:  .LBB10_30: # %else28
2830; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
2831; SSE4-NEXT:    jne .LBB10_31
2832; SSE4-NEXT:  .LBB10_32: # %else30
2833; SSE4-NEXT:    retq
2834; SSE4-NEXT:  .LBB10_1: # %cond.store
2835; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
2836; SSE4-NEXT:    testb $2, %al
2837; SSE4-NEXT:    je .LBB10_4
2838; SSE4-NEXT:  .LBB10_3: # %cond.store1
2839; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
2840; SSE4-NEXT:    testb $4, %al
2841; SSE4-NEXT:    je .LBB10_6
2842; SSE4-NEXT:  .LBB10_5: # %cond.store3
2843; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
2844; SSE4-NEXT:    testb $8, %al
2845; SSE4-NEXT:    je .LBB10_8
2846; SSE4-NEXT:  .LBB10_7: # %cond.store5
2847; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
2848; SSE4-NEXT:    testb $16, %al
2849; SSE4-NEXT:    je .LBB10_10
2850; SSE4-NEXT:  .LBB10_9: # %cond.store7
2851; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
2852; SSE4-NEXT:    testb $32, %al
2853; SSE4-NEXT:    je .LBB10_12
2854; SSE4-NEXT:  .LBB10_11: # %cond.store9
2855; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
2856; SSE4-NEXT:    testb $64, %al
2857; SSE4-NEXT:    je .LBB10_14
2858; SSE4-NEXT:  .LBB10_13: # %cond.store11
2859; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
2860; SSE4-NEXT:    testb $-128, %al
2861; SSE4-NEXT:    je .LBB10_16
2862; SSE4-NEXT:  .LBB10_15: # %cond.store13
2863; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
2864; SSE4-NEXT:    testl $256, %eax # imm = 0x100
2865; SSE4-NEXT:    je .LBB10_18
2866; SSE4-NEXT:  .LBB10_17: # %cond.store15
2867; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
2868; SSE4-NEXT:    testl $512, %eax # imm = 0x200
2869; SSE4-NEXT:    je .LBB10_20
2870; SSE4-NEXT:  .LBB10_19: # %cond.store17
2871; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
2872; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
2873; SSE4-NEXT:    je .LBB10_22
2874; SSE4-NEXT:  .LBB10_21: # %cond.store19
2875; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
2876; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
2877; SSE4-NEXT:    je .LBB10_24
2878; SSE4-NEXT:  .LBB10_23: # %cond.store21
2879; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
2880; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
2881; SSE4-NEXT:    je .LBB10_26
2882; SSE4-NEXT:  .LBB10_25: # %cond.store23
2883; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
2884; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
2885; SSE4-NEXT:    je .LBB10_28
2886; SSE4-NEXT:  .LBB10_27: # %cond.store25
2887; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
2888; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
2889; SSE4-NEXT:    je .LBB10_30
2890; SSE4-NEXT:  .LBB10_29: # %cond.store27
2891; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
2892; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
2893; SSE4-NEXT:    je .LBB10_32
2894; SSE4-NEXT:  .LBB10_31: # %cond.store29
2895; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
2896; SSE4-NEXT:    retq
2897;
2898; AVX1-LABEL: truncstore_v16i32_v16i8:
2899; AVX1:       # %bb.0:
2900; AVX1-NEXT:    vmovaps {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255]
2901; AVX1-NEXT:    vandps %ymm4, %ymm1, %ymm1
2902; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
2903; AVX1-NEXT:    vpackusdw %xmm5, %xmm1, %xmm1
2904; AVX1-NEXT:    vandps %ymm4, %ymm0, %ymm0
2905; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2906; AVX1-NEXT:    vpackusdw %xmm4, %xmm0, %xmm0
2907; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2908; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
2909; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2910; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm1, %xmm1
2911; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
2912; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
2913; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
2914; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
2915; AVX1-NEXT:    vpackssdw %xmm1, %xmm3, %xmm1
2916; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
2917; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
2918; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
2919; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
2920; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
2921; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
2922; AVX1-NEXT:    vpacksswb %xmm1, %xmm2, %xmm1
2923; AVX1-NEXT:    vpmovmskb %xmm1, %eax
2924; AVX1-NEXT:    testb $1, %al
2925; AVX1-NEXT:    jne .LBB10_1
2926; AVX1-NEXT:  # %bb.2: # %else
2927; AVX1-NEXT:    testb $2, %al
2928; AVX1-NEXT:    jne .LBB10_3
2929; AVX1-NEXT:  .LBB10_4: # %else2
2930; AVX1-NEXT:    testb $4, %al
2931; AVX1-NEXT:    jne .LBB10_5
2932; AVX1-NEXT:  .LBB10_6: # %else4
2933; AVX1-NEXT:    testb $8, %al
2934; AVX1-NEXT:    jne .LBB10_7
2935; AVX1-NEXT:  .LBB10_8: # %else6
2936; AVX1-NEXT:    testb $16, %al
2937; AVX1-NEXT:    jne .LBB10_9
2938; AVX1-NEXT:  .LBB10_10: # %else8
2939; AVX1-NEXT:    testb $32, %al
2940; AVX1-NEXT:    jne .LBB10_11
2941; AVX1-NEXT:  .LBB10_12: # %else10
2942; AVX1-NEXT:    testb $64, %al
2943; AVX1-NEXT:    jne .LBB10_13
2944; AVX1-NEXT:  .LBB10_14: # %else12
2945; AVX1-NEXT:    testb $-128, %al
2946; AVX1-NEXT:    jne .LBB10_15
2947; AVX1-NEXT:  .LBB10_16: # %else14
2948; AVX1-NEXT:    testl $256, %eax # imm = 0x100
2949; AVX1-NEXT:    jne .LBB10_17
2950; AVX1-NEXT:  .LBB10_18: # %else16
2951; AVX1-NEXT:    testl $512, %eax # imm = 0x200
2952; AVX1-NEXT:    jne .LBB10_19
2953; AVX1-NEXT:  .LBB10_20: # %else18
2954; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
2955; AVX1-NEXT:    jne .LBB10_21
2956; AVX1-NEXT:  .LBB10_22: # %else20
2957; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
2958; AVX1-NEXT:    jne .LBB10_23
2959; AVX1-NEXT:  .LBB10_24: # %else22
2960; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
2961; AVX1-NEXT:    jne .LBB10_25
2962; AVX1-NEXT:  .LBB10_26: # %else24
2963; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
2964; AVX1-NEXT:    jne .LBB10_27
2965; AVX1-NEXT:  .LBB10_28: # %else26
2966; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
2967; AVX1-NEXT:    jne .LBB10_29
2968; AVX1-NEXT:  .LBB10_30: # %else28
2969; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
2970; AVX1-NEXT:    jne .LBB10_31
2971; AVX1-NEXT:  .LBB10_32: # %else30
2972; AVX1-NEXT:    vzeroupper
2973; AVX1-NEXT:    retq
2974; AVX1-NEXT:  .LBB10_1: # %cond.store
2975; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
2976; AVX1-NEXT:    testb $2, %al
2977; AVX1-NEXT:    je .LBB10_4
2978; AVX1-NEXT:  .LBB10_3: # %cond.store1
2979; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2980; AVX1-NEXT:    testb $4, %al
2981; AVX1-NEXT:    je .LBB10_6
2982; AVX1-NEXT:  .LBB10_5: # %cond.store3
2983; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2984; AVX1-NEXT:    testb $8, %al
2985; AVX1-NEXT:    je .LBB10_8
2986; AVX1-NEXT:  .LBB10_7: # %cond.store5
2987; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2988; AVX1-NEXT:    testb $16, %al
2989; AVX1-NEXT:    je .LBB10_10
2990; AVX1-NEXT:  .LBB10_9: # %cond.store7
2991; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
2992; AVX1-NEXT:    testb $32, %al
2993; AVX1-NEXT:    je .LBB10_12
2994; AVX1-NEXT:  .LBB10_11: # %cond.store9
2995; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
2996; AVX1-NEXT:    testb $64, %al
2997; AVX1-NEXT:    je .LBB10_14
2998; AVX1-NEXT:  .LBB10_13: # %cond.store11
2999; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
3000; AVX1-NEXT:    testb $-128, %al
3001; AVX1-NEXT:    je .LBB10_16
3002; AVX1-NEXT:  .LBB10_15: # %cond.store13
3003; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
3004; AVX1-NEXT:    testl $256, %eax # imm = 0x100
3005; AVX1-NEXT:    je .LBB10_18
3006; AVX1-NEXT:  .LBB10_17: # %cond.store15
3007; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
3008; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3009; AVX1-NEXT:    je .LBB10_20
3010; AVX1-NEXT:  .LBB10_19: # %cond.store17
3011; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
3012; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3013; AVX1-NEXT:    je .LBB10_22
3014; AVX1-NEXT:  .LBB10_21: # %cond.store19
3015; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
3016; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3017; AVX1-NEXT:    je .LBB10_24
3018; AVX1-NEXT:  .LBB10_23: # %cond.store21
3019; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
3020; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3021; AVX1-NEXT:    je .LBB10_26
3022; AVX1-NEXT:  .LBB10_25: # %cond.store23
3023; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
3024; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3025; AVX1-NEXT:    je .LBB10_28
3026; AVX1-NEXT:  .LBB10_27: # %cond.store25
3027; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
3028; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3029; AVX1-NEXT:    je .LBB10_30
3030; AVX1-NEXT:  .LBB10_29: # %cond.store27
3031; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
3032; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3033; AVX1-NEXT:    je .LBB10_32
3034; AVX1-NEXT:  .LBB10_31: # %cond.store29
3035; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
3036; AVX1-NEXT:    vzeroupper
3037; AVX1-NEXT:    retq
3038;
3039; AVX2-LABEL: truncstore_v16i32_v16i8:
3040; AVX2:       # %bb.0:
3041; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3042; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm5 = [255,255,255,255,255,255,255,255]
3043; AVX2-NEXT:    vpand %ymm5, %ymm1, %ymm1
3044; AVX2-NEXT:    vpand %ymm5, %ymm0, %ymm0
3045; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
3046; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3047; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3048; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3049; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm1
3050; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
3051; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
3052; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
3053; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
3054; AVX2-NEXT:    vpackssdw %ymm1, %ymm2, %ymm1
3055; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3056; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
3057; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,1,3]
3058; AVX2-NEXT:    vpmovmskb %xmm1, %eax
3059; AVX2-NEXT:    testb $1, %al
3060; AVX2-NEXT:    jne .LBB10_1
3061; AVX2-NEXT:  # %bb.2: # %else
3062; AVX2-NEXT:    testb $2, %al
3063; AVX2-NEXT:    jne .LBB10_3
3064; AVX2-NEXT:  .LBB10_4: # %else2
3065; AVX2-NEXT:    testb $4, %al
3066; AVX2-NEXT:    jne .LBB10_5
3067; AVX2-NEXT:  .LBB10_6: # %else4
3068; AVX2-NEXT:    testb $8, %al
3069; AVX2-NEXT:    jne .LBB10_7
3070; AVX2-NEXT:  .LBB10_8: # %else6
3071; AVX2-NEXT:    testb $16, %al
3072; AVX2-NEXT:    jne .LBB10_9
3073; AVX2-NEXT:  .LBB10_10: # %else8
3074; AVX2-NEXT:    testb $32, %al
3075; AVX2-NEXT:    jne .LBB10_11
3076; AVX2-NEXT:  .LBB10_12: # %else10
3077; AVX2-NEXT:    testb $64, %al
3078; AVX2-NEXT:    jne .LBB10_13
3079; AVX2-NEXT:  .LBB10_14: # %else12
3080; AVX2-NEXT:    testb $-128, %al
3081; AVX2-NEXT:    jne .LBB10_15
3082; AVX2-NEXT:  .LBB10_16: # %else14
3083; AVX2-NEXT:    testl $256, %eax # imm = 0x100
3084; AVX2-NEXT:    jne .LBB10_17
3085; AVX2-NEXT:  .LBB10_18: # %else16
3086; AVX2-NEXT:    testl $512, %eax # imm = 0x200
3087; AVX2-NEXT:    jne .LBB10_19
3088; AVX2-NEXT:  .LBB10_20: # %else18
3089; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
3090; AVX2-NEXT:    jne .LBB10_21
3091; AVX2-NEXT:  .LBB10_22: # %else20
3092; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
3093; AVX2-NEXT:    jne .LBB10_23
3094; AVX2-NEXT:  .LBB10_24: # %else22
3095; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
3096; AVX2-NEXT:    jne .LBB10_25
3097; AVX2-NEXT:  .LBB10_26: # %else24
3098; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
3099; AVX2-NEXT:    jne .LBB10_27
3100; AVX2-NEXT:  .LBB10_28: # %else26
3101; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
3102; AVX2-NEXT:    jne .LBB10_29
3103; AVX2-NEXT:  .LBB10_30: # %else28
3104; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
3105; AVX2-NEXT:    jne .LBB10_31
3106; AVX2-NEXT:  .LBB10_32: # %else30
3107; AVX2-NEXT:    vzeroupper
3108; AVX2-NEXT:    retq
3109; AVX2-NEXT:  .LBB10_1: # %cond.store
3110; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
3111; AVX2-NEXT:    testb $2, %al
3112; AVX2-NEXT:    je .LBB10_4
3113; AVX2-NEXT:  .LBB10_3: # %cond.store1
3114; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
3115; AVX2-NEXT:    testb $4, %al
3116; AVX2-NEXT:    je .LBB10_6
3117; AVX2-NEXT:  .LBB10_5: # %cond.store3
3118; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
3119; AVX2-NEXT:    testb $8, %al
3120; AVX2-NEXT:    je .LBB10_8
3121; AVX2-NEXT:  .LBB10_7: # %cond.store5
3122; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
3123; AVX2-NEXT:    testb $16, %al
3124; AVX2-NEXT:    je .LBB10_10
3125; AVX2-NEXT:  .LBB10_9: # %cond.store7
3126; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
3127; AVX2-NEXT:    testb $32, %al
3128; AVX2-NEXT:    je .LBB10_12
3129; AVX2-NEXT:  .LBB10_11: # %cond.store9
3130; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
3131; AVX2-NEXT:    testb $64, %al
3132; AVX2-NEXT:    je .LBB10_14
3133; AVX2-NEXT:  .LBB10_13: # %cond.store11
3134; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
3135; AVX2-NEXT:    testb $-128, %al
3136; AVX2-NEXT:    je .LBB10_16
3137; AVX2-NEXT:  .LBB10_15: # %cond.store13
3138; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
3139; AVX2-NEXT:    testl $256, %eax # imm = 0x100
3140; AVX2-NEXT:    je .LBB10_18
3141; AVX2-NEXT:  .LBB10_17: # %cond.store15
3142; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
3143; AVX2-NEXT:    testl $512, %eax # imm = 0x200
3144; AVX2-NEXT:    je .LBB10_20
3145; AVX2-NEXT:  .LBB10_19: # %cond.store17
3146; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
3147; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
3148; AVX2-NEXT:    je .LBB10_22
3149; AVX2-NEXT:  .LBB10_21: # %cond.store19
3150; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
3151; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
3152; AVX2-NEXT:    je .LBB10_24
3153; AVX2-NEXT:  .LBB10_23: # %cond.store21
3154; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
3155; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
3156; AVX2-NEXT:    je .LBB10_26
3157; AVX2-NEXT:  .LBB10_25: # %cond.store23
3158; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
3159; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
3160; AVX2-NEXT:    je .LBB10_28
3161; AVX2-NEXT:  .LBB10_27: # %cond.store25
3162; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
3163; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
3164; AVX2-NEXT:    je .LBB10_30
3165; AVX2-NEXT:  .LBB10_29: # %cond.store27
3166; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
3167; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
3168; AVX2-NEXT:    je .LBB10_32
3169; AVX2-NEXT:  .LBB10_31: # %cond.store29
3170; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
3171; AVX2-NEXT:    vzeroupper
3172; AVX2-NEXT:    retq
3173;
3174; AVX512F-LABEL: truncstore_v16i32_v16i8:
3175; AVX512F:       # %bb.0:
3176; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
3177; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3178; AVX512F-NEXT:    kmovw %k0, %eax
3179; AVX512F-NEXT:    testb $1, %al
3180; AVX512F-NEXT:    jne .LBB10_1
3181; AVX512F-NEXT:  # %bb.2: # %else
3182; AVX512F-NEXT:    testb $2, %al
3183; AVX512F-NEXT:    jne .LBB10_3
3184; AVX512F-NEXT:  .LBB10_4: # %else2
3185; AVX512F-NEXT:    testb $4, %al
3186; AVX512F-NEXT:    jne .LBB10_5
3187; AVX512F-NEXT:  .LBB10_6: # %else4
3188; AVX512F-NEXT:    testb $8, %al
3189; AVX512F-NEXT:    jne .LBB10_7
3190; AVX512F-NEXT:  .LBB10_8: # %else6
3191; AVX512F-NEXT:    testb $16, %al
3192; AVX512F-NEXT:    jne .LBB10_9
3193; AVX512F-NEXT:  .LBB10_10: # %else8
3194; AVX512F-NEXT:    testb $32, %al
3195; AVX512F-NEXT:    jne .LBB10_11
3196; AVX512F-NEXT:  .LBB10_12: # %else10
3197; AVX512F-NEXT:    testb $64, %al
3198; AVX512F-NEXT:    jne .LBB10_13
3199; AVX512F-NEXT:  .LBB10_14: # %else12
3200; AVX512F-NEXT:    testb $-128, %al
3201; AVX512F-NEXT:    jne .LBB10_15
3202; AVX512F-NEXT:  .LBB10_16: # %else14
3203; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
3204; AVX512F-NEXT:    jne .LBB10_17
3205; AVX512F-NEXT:  .LBB10_18: # %else16
3206; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
3207; AVX512F-NEXT:    jne .LBB10_19
3208; AVX512F-NEXT:  .LBB10_20: # %else18
3209; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
3210; AVX512F-NEXT:    jne .LBB10_21
3211; AVX512F-NEXT:  .LBB10_22: # %else20
3212; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
3213; AVX512F-NEXT:    jne .LBB10_23
3214; AVX512F-NEXT:  .LBB10_24: # %else22
3215; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
3216; AVX512F-NEXT:    jne .LBB10_25
3217; AVX512F-NEXT:  .LBB10_26: # %else24
3218; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
3219; AVX512F-NEXT:    jne .LBB10_27
3220; AVX512F-NEXT:  .LBB10_28: # %else26
3221; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
3222; AVX512F-NEXT:    jne .LBB10_29
3223; AVX512F-NEXT:  .LBB10_30: # %else28
3224; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
3225; AVX512F-NEXT:    jne .LBB10_31
3226; AVX512F-NEXT:  .LBB10_32: # %else30
3227; AVX512F-NEXT:    vzeroupper
3228; AVX512F-NEXT:    retq
3229; AVX512F-NEXT:  .LBB10_1: # %cond.store
3230; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
3231; AVX512F-NEXT:    testb $2, %al
3232; AVX512F-NEXT:    je .LBB10_4
3233; AVX512F-NEXT:  .LBB10_3: # %cond.store1
3234; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
3235; AVX512F-NEXT:    testb $4, %al
3236; AVX512F-NEXT:    je .LBB10_6
3237; AVX512F-NEXT:  .LBB10_5: # %cond.store3
3238; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
3239; AVX512F-NEXT:    testb $8, %al
3240; AVX512F-NEXT:    je .LBB10_8
3241; AVX512F-NEXT:  .LBB10_7: # %cond.store5
3242; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
3243; AVX512F-NEXT:    testb $16, %al
3244; AVX512F-NEXT:    je .LBB10_10
3245; AVX512F-NEXT:  .LBB10_9: # %cond.store7
3246; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
3247; AVX512F-NEXT:    testb $32, %al
3248; AVX512F-NEXT:    je .LBB10_12
3249; AVX512F-NEXT:  .LBB10_11: # %cond.store9
3250; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
3251; AVX512F-NEXT:    testb $64, %al
3252; AVX512F-NEXT:    je .LBB10_14
3253; AVX512F-NEXT:  .LBB10_13: # %cond.store11
3254; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
3255; AVX512F-NEXT:    testb $-128, %al
3256; AVX512F-NEXT:    je .LBB10_16
3257; AVX512F-NEXT:  .LBB10_15: # %cond.store13
3258; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
3259; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
3260; AVX512F-NEXT:    je .LBB10_18
3261; AVX512F-NEXT:  .LBB10_17: # %cond.store15
3262; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
3263; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
3264; AVX512F-NEXT:    je .LBB10_20
3265; AVX512F-NEXT:  .LBB10_19: # %cond.store17
3266; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
3267; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
3268; AVX512F-NEXT:    je .LBB10_22
3269; AVX512F-NEXT:  .LBB10_21: # %cond.store19
3270; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
3271; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
3272; AVX512F-NEXT:    je .LBB10_24
3273; AVX512F-NEXT:  .LBB10_23: # %cond.store21
3274; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
3275; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
3276; AVX512F-NEXT:    je .LBB10_26
3277; AVX512F-NEXT:  .LBB10_25: # %cond.store23
3278; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
3279; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
3280; AVX512F-NEXT:    je .LBB10_28
3281; AVX512F-NEXT:  .LBB10_27: # %cond.store25
3282; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
3283; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
3284; AVX512F-NEXT:    je .LBB10_30
3285; AVX512F-NEXT:  .LBB10_29: # %cond.store27
3286; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
3287; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
3288; AVX512F-NEXT:    je .LBB10_32
3289; AVX512F-NEXT:  .LBB10_31: # %cond.store29
3290; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
3291; AVX512F-NEXT:    vzeroupper
3292; AVX512F-NEXT:    retq
3293;
3294; AVX512BW-LABEL: truncstore_v16i32_v16i8:
3295; AVX512BW:       # %bb.0:
3296; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
3297; AVX512BW-NEXT:    vpmovdb %zmm0, (%rdi) {%k1}
3298; AVX512BW-NEXT:    vzeroupper
3299; AVX512BW-NEXT:    retq
3300;
3301; AVX512BWVL-LABEL: truncstore_v16i32_v16i8:
3302; AVX512BWVL:       # %bb.0:
3303; AVX512BWVL-NEXT:    vptestmd %zmm1, %zmm1, %k1
3304; AVX512BWVL-NEXT:    vpmovdb %zmm0, (%rdi) {%k1}
3305; AVX512BWVL-NEXT:    vzeroupper
3306; AVX512BWVL-NEXT:    retq
3307  %a = icmp ne <16 x i32> %mask, zeroinitializer
3308  %b = trunc <16 x i32> %x to <16 x i8>
3309  call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %b, <16 x i8>* %p, i32 1, <16 x i1> %a)
3310  ret void
3311}
3312
3313define void @truncstore_v8i32_v8i16(<8 x i32> %x, <8 x i16>* %p, <8 x i32> %mask) {
3314; SSE2-LABEL: truncstore_v8i32_v8i16:
3315; SSE2:       # %bb.0:
3316; SSE2-NEXT:    pxor %xmm4, %xmm4
3317; SSE2-NEXT:    pslld $16, %xmm1
3318; SSE2-NEXT:    psrad $16, %xmm1
3319; SSE2-NEXT:    pslld $16, %xmm0
3320; SSE2-NEXT:    psrad $16, %xmm0
3321; SSE2-NEXT:    packssdw %xmm1, %xmm0
3322; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3
3323; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
3324; SSE2-NEXT:    pxor %xmm1, %xmm3
3325; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
3326; SSE2-NEXT:    pxor %xmm1, %xmm2
3327; SSE2-NEXT:    packssdw %xmm3, %xmm2
3328; SSE2-NEXT:    packsswb %xmm2, %xmm2
3329; SSE2-NEXT:    pmovmskb %xmm2, %eax
3330; SSE2-NEXT:    testb $1, %al
3331; SSE2-NEXT:    jne .LBB11_1
3332; SSE2-NEXT:  # %bb.2: # %else
3333; SSE2-NEXT:    testb $2, %al
3334; SSE2-NEXT:    jne .LBB11_3
3335; SSE2-NEXT:  .LBB11_4: # %else2
3336; SSE2-NEXT:    testb $4, %al
3337; SSE2-NEXT:    jne .LBB11_5
3338; SSE2-NEXT:  .LBB11_6: # %else4
3339; SSE2-NEXT:    testb $8, %al
3340; SSE2-NEXT:    jne .LBB11_7
3341; SSE2-NEXT:  .LBB11_8: # %else6
3342; SSE2-NEXT:    testb $16, %al
3343; SSE2-NEXT:    jne .LBB11_9
3344; SSE2-NEXT:  .LBB11_10: # %else8
3345; SSE2-NEXT:    testb $32, %al
3346; SSE2-NEXT:    jne .LBB11_11
3347; SSE2-NEXT:  .LBB11_12: # %else10
3348; SSE2-NEXT:    testb $64, %al
3349; SSE2-NEXT:    jne .LBB11_13
3350; SSE2-NEXT:  .LBB11_14: # %else12
3351; SSE2-NEXT:    testb $-128, %al
3352; SSE2-NEXT:    jne .LBB11_15
3353; SSE2-NEXT:  .LBB11_16: # %else14
3354; SSE2-NEXT:    retq
3355; SSE2-NEXT:  .LBB11_1: # %cond.store
3356; SSE2-NEXT:    movd %xmm0, %ecx
3357; SSE2-NEXT:    movw %cx, (%rdi)
3358; SSE2-NEXT:    testb $2, %al
3359; SSE2-NEXT:    je .LBB11_4
3360; SSE2-NEXT:  .LBB11_3: # %cond.store1
3361; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
3362; SSE2-NEXT:    movw %cx, 2(%rdi)
3363; SSE2-NEXT:    testb $4, %al
3364; SSE2-NEXT:    je .LBB11_6
3365; SSE2-NEXT:  .LBB11_5: # %cond.store3
3366; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
3367; SSE2-NEXT:    movw %cx, 4(%rdi)
3368; SSE2-NEXT:    testb $8, %al
3369; SSE2-NEXT:    je .LBB11_8
3370; SSE2-NEXT:  .LBB11_7: # %cond.store5
3371; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
3372; SSE2-NEXT:    movw %cx, 6(%rdi)
3373; SSE2-NEXT:    testb $16, %al
3374; SSE2-NEXT:    je .LBB11_10
3375; SSE2-NEXT:  .LBB11_9: # %cond.store7
3376; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
3377; SSE2-NEXT:    movw %cx, 8(%rdi)
3378; SSE2-NEXT:    testb $32, %al
3379; SSE2-NEXT:    je .LBB11_12
3380; SSE2-NEXT:  .LBB11_11: # %cond.store9
3381; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
3382; SSE2-NEXT:    movw %cx, 10(%rdi)
3383; SSE2-NEXT:    testb $64, %al
3384; SSE2-NEXT:    je .LBB11_14
3385; SSE2-NEXT:  .LBB11_13: # %cond.store11
3386; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
3387; SSE2-NEXT:    movw %cx, 12(%rdi)
3388; SSE2-NEXT:    testb $-128, %al
3389; SSE2-NEXT:    je .LBB11_16
3390; SSE2-NEXT:  .LBB11_15: # %cond.store13
3391; SSE2-NEXT:    pextrw $7, %xmm0, %eax
3392; SSE2-NEXT:    movw %ax, 14(%rdi)
3393; SSE2-NEXT:    retq
3394;
3395; SSE4-LABEL: truncstore_v8i32_v8i16:
3396; SSE4:       # %bb.0:
3397; SSE4-NEXT:    pxor %xmm4, %xmm4
3398; SSE4-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1],xmm1[2],xmm4[3],xmm1[4],xmm4[5],xmm1[6],xmm4[7]
3399; SSE4-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1],xmm0[2],xmm4[3],xmm0[4],xmm4[5],xmm0[6],xmm4[7]
3400; SSE4-NEXT:    packusdw %xmm1, %xmm0
3401; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3
3402; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
3403; SSE4-NEXT:    pxor %xmm1, %xmm3
3404; SSE4-NEXT:    pcmpeqd %xmm4, %xmm2
3405; SSE4-NEXT:    pxor %xmm1, %xmm2
3406; SSE4-NEXT:    packssdw %xmm3, %xmm2
3407; SSE4-NEXT:    packsswb %xmm2, %xmm2
3408; SSE4-NEXT:    pmovmskb %xmm2, %eax
3409; SSE4-NEXT:    testb $1, %al
3410; SSE4-NEXT:    jne .LBB11_1
3411; SSE4-NEXT:  # %bb.2: # %else
3412; SSE4-NEXT:    testb $2, %al
3413; SSE4-NEXT:    jne .LBB11_3
3414; SSE4-NEXT:  .LBB11_4: # %else2
3415; SSE4-NEXT:    testb $4, %al
3416; SSE4-NEXT:    jne .LBB11_5
3417; SSE4-NEXT:  .LBB11_6: # %else4
3418; SSE4-NEXT:    testb $8, %al
3419; SSE4-NEXT:    jne .LBB11_7
3420; SSE4-NEXT:  .LBB11_8: # %else6
3421; SSE4-NEXT:    testb $16, %al
3422; SSE4-NEXT:    jne .LBB11_9
3423; SSE4-NEXT:  .LBB11_10: # %else8
3424; SSE4-NEXT:    testb $32, %al
3425; SSE4-NEXT:    jne .LBB11_11
3426; SSE4-NEXT:  .LBB11_12: # %else10
3427; SSE4-NEXT:    testb $64, %al
3428; SSE4-NEXT:    jne .LBB11_13
3429; SSE4-NEXT:  .LBB11_14: # %else12
3430; SSE4-NEXT:    testb $-128, %al
3431; SSE4-NEXT:    jne .LBB11_15
3432; SSE4-NEXT:  .LBB11_16: # %else14
3433; SSE4-NEXT:    retq
3434; SSE4-NEXT:  .LBB11_1: # %cond.store
3435; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
3436; SSE4-NEXT:    testb $2, %al
3437; SSE4-NEXT:    je .LBB11_4
3438; SSE4-NEXT:  .LBB11_3: # %cond.store1
3439; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
3440; SSE4-NEXT:    testb $4, %al
3441; SSE4-NEXT:    je .LBB11_6
3442; SSE4-NEXT:  .LBB11_5: # %cond.store3
3443; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
3444; SSE4-NEXT:    testb $8, %al
3445; SSE4-NEXT:    je .LBB11_8
3446; SSE4-NEXT:  .LBB11_7: # %cond.store5
3447; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
3448; SSE4-NEXT:    testb $16, %al
3449; SSE4-NEXT:    je .LBB11_10
3450; SSE4-NEXT:  .LBB11_9: # %cond.store7
3451; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
3452; SSE4-NEXT:    testb $32, %al
3453; SSE4-NEXT:    je .LBB11_12
3454; SSE4-NEXT:  .LBB11_11: # %cond.store9
3455; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
3456; SSE4-NEXT:    testb $64, %al
3457; SSE4-NEXT:    je .LBB11_14
3458; SSE4-NEXT:  .LBB11_13: # %cond.store11
3459; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
3460; SSE4-NEXT:    testb $-128, %al
3461; SSE4-NEXT:    je .LBB11_16
3462; SSE4-NEXT:  .LBB11_15: # %cond.store13
3463; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
3464; SSE4-NEXT:    retq
3465;
3466; AVX1-LABEL: truncstore_v8i32_v8i16:
3467; AVX1:       # %bb.0:
3468; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3469; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u>
3470; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
3471; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
3472; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3473; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3474; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
3475; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
3476; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
3477; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3478; AVX1-NEXT:    vmovmskps %ymm1, %eax
3479; AVX1-NEXT:    notl %eax
3480; AVX1-NEXT:    testb $1, %al
3481; AVX1-NEXT:    jne .LBB11_1
3482; AVX1-NEXT:  # %bb.2: # %else
3483; AVX1-NEXT:    testb $2, %al
3484; AVX1-NEXT:    jne .LBB11_3
3485; AVX1-NEXT:  .LBB11_4: # %else2
3486; AVX1-NEXT:    testb $4, %al
3487; AVX1-NEXT:    jne .LBB11_5
3488; AVX1-NEXT:  .LBB11_6: # %else4
3489; AVX1-NEXT:    testb $8, %al
3490; AVX1-NEXT:    jne .LBB11_7
3491; AVX1-NEXT:  .LBB11_8: # %else6
3492; AVX1-NEXT:    testb $16, %al
3493; AVX1-NEXT:    jne .LBB11_9
3494; AVX1-NEXT:  .LBB11_10: # %else8
3495; AVX1-NEXT:    testb $32, %al
3496; AVX1-NEXT:    jne .LBB11_11
3497; AVX1-NEXT:  .LBB11_12: # %else10
3498; AVX1-NEXT:    testb $64, %al
3499; AVX1-NEXT:    jne .LBB11_13
3500; AVX1-NEXT:  .LBB11_14: # %else12
3501; AVX1-NEXT:    testb $-128, %al
3502; AVX1-NEXT:    jne .LBB11_15
3503; AVX1-NEXT:  .LBB11_16: # %else14
3504; AVX1-NEXT:    vzeroupper
3505; AVX1-NEXT:    retq
3506; AVX1-NEXT:  .LBB11_1: # %cond.store
3507; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
3508; AVX1-NEXT:    testb $2, %al
3509; AVX1-NEXT:    je .LBB11_4
3510; AVX1-NEXT:  .LBB11_3: # %cond.store1
3511; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3512; AVX1-NEXT:    testb $4, %al
3513; AVX1-NEXT:    je .LBB11_6
3514; AVX1-NEXT:  .LBB11_5: # %cond.store3
3515; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3516; AVX1-NEXT:    testb $8, %al
3517; AVX1-NEXT:    je .LBB11_8
3518; AVX1-NEXT:  .LBB11_7: # %cond.store5
3519; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3520; AVX1-NEXT:    testb $16, %al
3521; AVX1-NEXT:    je .LBB11_10
3522; AVX1-NEXT:  .LBB11_9: # %cond.store7
3523; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3524; AVX1-NEXT:    testb $32, %al
3525; AVX1-NEXT:    je .LBB11_12
3526; AVX1-NEXT:  .LBB11_11: # %cond.store9
3527; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3528; AVX1-NEXT:    testb $64, %al
3529; AVX1-NEXT:    je .LBB11_14
3530; AVX1-NEXT:  .LBB11_13: # %cond.store11
3531; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3532; AVX1-NEXT:    testb $-128, %al
3533; AVX1-NEXT:    je .LBB11_16
3534; AVX1-NEXT:  .LBB11_15: # %cond.store13
3535; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3536; AVX1-NEXT:    vzeroupper
3537; AVX1-NEXT:    retq
3538;
3539; AVX2-LABEL: truncstore_v8i32_v8i16:
3540; AVX2:       # %bb.0:
3541; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3542; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28,29,u,u,u,u,u,u,u,u]
3543; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3544; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
3545; AVX2-NEXT:    vmovmskps %ymm1, %eax
3546; AVX2-NEXT:    notl %eax
3547; AVX2-NEXT:    testb $1, %al
3548; AVX2-NEXT:    jne .LBB11_1
3549; AVX2-NEXT:  # %bb.2: # %else
3550; AVX2-NEXT:    testb $2, %al
3551; AVX2-NEXT:    jne .LBB11_3
3552; AVX2-NEXT:  .LBB11_4: # %else2
3553; AVX2-NEXT:    testb $4, %al
3554; AVX2-NEXT:    jne .LBB11_5
3555; AVX2-NEXT:  .LBB11_6: # %else4
3556; AVX2-NEXT:    testb $8, %al
3557; AVX2-NEXT:    jne .LBB11_7
3558; AVX2-NEXT:  .LBB11_8: # %else6
3559; AVX2-NEXT:    testb $16, %al
3560; AVX2-NEXT:    jne .LBB11_9
3561; AVX2-NEXT:  .LBB11_10: # %else8
3562; AVX2-NEXT:    testb $32, %al
3563; AVX2-NEXT:    jne .LBB11_11
3564; AVX2-NEXT:  .LBB11_12: # %else10
3565; AVX2-NEXT:    testb $64, %al
3566; AVX2-NEXT:    jne .LBB11_13
3567; AVX2-NEXT:  .LBB11_14: # %else12
3568; AVX2-NEXT:    testb $-128, %al
3569; AVX2-NEXT:    jne .LBB11_15
3570; AVX2-NEXT:  .LBB11_16: # %else14
3571; AVX2-NEXT:    vzeroupper
3572; AVX2-NEXT:    retq
3573; AVX2-NEXT:  .LBB11_1: # %cond.store
3574; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
3575; AVX2-NEXT:    testb $2, %al
3576; AVX2-NEXT:    je .LBB11_4
3577; AVX2-NEXT:  .LBB11_3: # %cond.store1
3578; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3579; AVX2-NEXT:    testb $4, %al
3580; AVX2-NEXT:    je .LBB11_6
3581; AVX2-NEXT:  .LBB11_5: # %cond.store3
3582; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3583; AVX2-NEXT:    testb $8, %al
3584; AVX2-NEXT:    je .LBB11_8
3585; AVX2-NEXT:  .LBB11_7: # %cond.store5
3586; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3587; AVX2-NEXT:    testb $16, %al
3588; AVX2-NEXT:    je .LBB11_10
3589; AVX2-NEXT:  .LBB11_9: # %cond.store7
3590; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3591; AVX2-NEXT:    testb $32, %al
3592; AVX2-NEXT:    je .LBB11_12
3593; AVX2-NEXT:  .LBB11_11: # %cond.store9
3594; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3595; AVX2-NEXT:    testb $64, %al
3596; AVX2-NEXT:    je .LBB11_14
3597; AVX2-NEXT:  .LBB11_13: # %cond.store11
3598; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3599; AVX2-NEXT:    testb $-128, %al
3600; AVX2-NEXT:    je .LBB11_16
3601; AVX2-NEXT:  .LBB11_15: # %cond.store13
3602; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3603; AVX2-NEXT:    vzeroupper
3604; AVX2-NEXT:    retq
3605;
3606; AVX512F-LABEL: truncstore_v8i32_v8i16:
3607; AVX512F:       # %bb.0:
3608; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
3609; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3610; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
3611; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
3612; AVX512F-NEXT:    kmovw %k0, %eax
3613; AVX512F-NEXT:    testb $1, %al
3614; AVX512F-NEXT:    jne .LBB11_1
3615; AVX512F-NEXT:  # %bb.2: # %else
3616; AVX512F-NEXT:    testb $2, %al
3617; AVX512F-NEXT:    jne .LBB11_3
3618; AVX512F-NEXT:  .LBB11_4: # %else2
3619; AVX512F-NEXT:    testb $4, %al
3620; AVX512F-NEXT:    jne .LBB11_5
3621; AVX512F-NEXT:  .LBB11_6: # %else4
3622; AVX512F-NEXT:    testb $8, %al
3623; AVX512F-NEXT:    jne .LBB11_7
3624; AVX512F-NEXT:  .LBB11_8: # %else6
3625; AVX512F-NEXT:    testb $16, %al
3626; AVX512F-NEXT:    jne .LBB11_9
3627; AVX512F-NEXT:  .LBB11_10: # %else8
3628; AVX512F-NEXT:    testb $32, %al
3629; AVX512F-NEXT:    jne .LBB11_11
3630; AVX512F-NEXT:  .LBB11_12: # %else10
3631; AVX512F-NEXT:    testb $64, %al
3632; AVX512F-NEXT:    jne .LBB11_13
3633; AVX512F-NEXT:  .LBB11_14: # %else12
3634; AVX512F-NEXT:    testb $-128, %al
3635; AVX512F-NEXT:    jne .LBB11_15
3636; AVX512F-NEXT:  .LBB11_16: # %else14
3637; AVX512F-NEXT:    vzeroupper
3638; AVX512F-NEXT:    retq
3639; AVX512F-NEXT:  .LBB11_1: # %cond.store
3640; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
3641; AVX512F-NEXT:    testb $2, %al
3642; AVX512F-NEXT:    je .LBB11_4
3643; AVX512F-NEXT:  .LBB11_3: # %cond.store1
3644; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3645; AVX512F-NEXT:    testb $4, %al
3646; AVX512F-NEXT:    je .LBB11_6
3647; AVX512F-NEXT:  .LBB11_5: # %cond.store3
3648; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3649; AVX512F-NEXT:    testb $8, %al
3650; AVX512F-NEXT:    je .LBB11_8
3651; AVX512F-NEXT:  .LBB11_7: # %cond.store5
3652; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3653; AVX512F-NEXT:    testb $16, %al
3654; AVX512F-NEXT:    je .LBB11_10
3655; AVX512F-NEXT:  .LBB11_9: # %cond.store7
3656; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3657; AVX512F-NEXT:    testb $32, %al
3658; AVX512F-NEXT:    je .LBB11_12
3659; AVX512F-NEXT:  .LBB11_11: # %cond.store9
3660; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3661; AVX512F-NEXT:    testb $64, %al
3662; AVX512F-NEXT:    je .LBB11_14
3663; AVX512F-NEXT:  .LBB11_13: # %cond.store11
3664; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3665; AVX512F-NEXT:    testb $-128, %al
3666; AVX512F-NEXT:    je .LBB11_16
3667; AVX512F-NEXT:  .LBB11_15: # %cond.store13
3668; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3669; AVX512F-NEXT:    vzeroupper
3670; AVX512F-NEXT:    retq
3671;
3672; AVX512BW-LABEL: truncstore_v8i32_v8i16:
3673; AVX512BW:       # %bb.0:
3674; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
3675; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3676; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
3677; AVX512BW-NEXT:    kshiftld $24, %k0, %k0
3678; AVX512BW-NEXT:    kshiftrd $24, %k0, %k1
3679; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
3680; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
3681; AVX512BW-NEXT:    vzeroupper
3682; AVX512BW-NEXT:    retq
3683;
3684; AVX512BWVL-LABEL: truncstore_v8i32_v8i16:
3685; AVX512BWVL:       # %bb.0:
3686; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
3687; AVX512BWVL-NEXT:    vpmovdw %ymm0, (%rdi) {%k1}
3688; AVX512BWVL-NEXT:    vzeroupper
3689; AVX512BWVL-NEXT:    retq
3690  %a = icmp ne <8 x i32> %mask, zeroinitializer
3691  %b = trunc <8 x i32> %x to <8 x i16>
3692  call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> %b, <8 x i16>* %p, i32 1, <8 x i1> %a)
3693  ret void
3694}
3695
3696define void @truncstore_v8i32_v8i8(<8 x i32> %x, <8 x i8>* %p, <8 x i32> %mask) {
3697; SSE2-LABEL: truncstore_v8i32_v8i8:
3698; SSE2:       # %bb.0:
3699; SSE2-NEXT:    pxor %xmm4, %xmm4
3700; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3701; SSE2-NEXT:    pand %xmm5, %xmm1
3702; SSE2-NEXT:    pand %xmm5, %xmm0
3703; SSE2-NEXT:    packuswb %xmm1, %xmm0
3704; SSE2-NEXT:    packuswb %xmm0, %xmm0
3705; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3
3706; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
3707; SSE2-NEXT:    pxor %xmm1, %xmm3
3708; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
3709; SSE2-NEXT:    pxor %xmm1, %xmm2
3710; SSE2-NEXT:    packssdw %xmm3, %xmm2
3711; SSE2-NEXT:    packsswb %xmm2, %xmm2
3712; SSE2-NEXT:    pmovmskb %xmm2, %eax
3713; SSE2-NEXT:    testb $1, %al
3714; SSE2-NEXT:    movd %xmm0, %ecx
3715; SSE2-NEXT:    jne .LBB12_1
3716; SSE2-NEXT:  # %bb.2: # %else
3717; SSE2-NEXT:    testb $2, %al
3718; SSE2-NEXT:    jne .LBB12_3
3719; SSE2-NEXT:  .LBB12_4: # %else2
3720; SSE2-NEXT:    testb $4, %al
3721; SSE2-NEXT:    jne .LBB12_5
3722; SSE2-NEXT:  .LBB12_6: # %else4
3723; SSE2-NEXT:    testb $8, %al
3724; SSE2-NEXT:    je .LBB12_8
3725; SSE2-NEXT:  .LBB12_7: # %cond.store5
3726; SSE2-NEXT:    shrl $24, %ecx
3727; SSE2-NEXT:    movb %cl, 3(%rdi)
3728; SSE2-NEXT:  .LBB12_8: # %else6
3729; SSE2-NEXT:    testb $16, %al
3730; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
3731; SSE2-NEXT:    je .LBB12_10
3732; SSE2-NEXT:  # %bb.9: # %cond.store7
3733; SSE2-NEXT:    movb %cl, 4(%rdi)
3734; SSE2-NEXT:  .LBB12_10: # %else8
3735; SSE2-NEXT:    testb $32, %al
3736; SSE2-NEXT:    je .LBB12_12
3737; SSE2-NEXT:  # %bb.11: # %cond.store9
3738; SSE2-NEXT:    movb %ch, 5(%rdi)
3739; SSE2-NEXT:  .LBB12_12: # %else10
3740; SSE2-NEXT:    testb $64, %al
3741; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
3742; SSE2-NEXT:    jne .LBB12_13
3743; SSE2-NEXT:  # %bb.14: # %else12
3744; SSE2-NEXT:    testb $-128, %al
3745; SSE2-NEXT:    jne .LBB12_15
3746; SSE2-NEXT:  .LBB12_16: # %else14
3747; SSE2-NEXT:    retq
3748; SSE2-NEXT:  .LBB12_1: # %cond.store
3749; SSE2-NEXT:    movb %cl, (%rdi)
3750; SSE2-NEXT:    testb $2, %al
3751; SSE2-NEXT:    je .LBB12_4
3752; SSE2-NEXT:  .LBB12_3: # %cond.store1
3753; SSE2-NEXT:    movb %ch, 1(%rdi)
3754; SSE2-NEXT:    testb $4, %al
3755; SSE2-NEXT:    je .LBB12_6
3756; SSE2-NEXT:  .LBB12_5: # %cond.store3
3757; SSE2-NEXT:    movl %ecx, %edx
3758; SSE2-NEXT:    shrl $16, %edx
3759; SSE2-NEXT:    movb %dl, 2(%rdi)
3760; SSE2-NEXT:    testb $8, %al
3761; SSE2-NEXT:    jne .LBB12_7
3762; SSE2-NEXT:    jmp .LBB12_8
3763; SSE2-NEXT:  .LBB12_13: # %cond.store11
3764; SSE2-NEXT:    movb %cl, 6(%rdi)
3765; SSE2-NEXT:    testb $-128, %al
3766; SSE2-NEXT:    je .LBB12_16
3767; SSE2-NEXT:  .LBB12_15: # %cond.store13
3768; SSE2-NEXT:    movb %ch, 7(%rdi)
3769; SSE2-NEXT:    retq
3770;
3771; SSE4-LABEL: truncstore_v8i32_v8i8:
3772; SSE4:       # %bb.0:
3773; SSE4-NEXT:    pxor %xmm4, %xmm4
3774; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u>
3775; SSE4-NEXT:    pshufb %xmm5, %xmm1
3776; SSE4-NEXT:    pshufb %xmm5, %xmm0
3777; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
3778; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3
3779; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
3780; SSE4-NEXT:    pxor %xmm1, %xmm3
3781; SSE4-NEXT:    pcmpeqd %xmm4, %xmm2
3782; SSE4-NEXT:    pxor %xmm1, %xmm2
3783; SSE4-NEXT:    packssdw %xmm3, %xmm2
3784; SSE4-NEXT:    packsswb %xmm2, %xmm2
3785; SSE4-NEXT:    pmovmskb %xmm2, %eax
3786; SSE4-NEXT:    testb $1, %al
3787; SSE4-NEXT:    jne .LBB12_1
3788; SSE4-NEXT:  # %bb.2: # %else
3789; SSE4-NEXT:    testb $2, %al
3790; SSE4-NEXT:    jne .LBB12_3
3791; SSE4-NEXT:  .LBB12_4: # %else2
3792; SSE4-NEXT:    testb $4, %al
3793; SSE4-NEXT:    jne .LBB12_5
3794; SSE4-NEXT:  .LBB12_6: # %else4
3795; SSE4-NEXT:    testb $8, %al
3796; SSE4-NEXT:    jne .LBB12_7
3797; SSE4-NEXT:  .LBB12_8: # %else6
3798; SSE4-NEXT:    testb $16, %al
3799; SSE4-NEXT:    jne .LBB12_9
3800; SSE4-NEXT:  .LBB12_10: # %else8
3801; SSE4-NEXT:    testb $32, %al
3802; SSE4-NEXT:    jne .LBB12_11
3803; SSE4-NEXT:  .LBB12_12: # %else10
3804; SSE4-NEXT:    testb $64, %al
3805; SSE4-NEXT:    jne .LBB12_13
3806; SSE4-NEXT:  .LBB12_14: # %else12
3807; SSE4-NEXT:    testb $-128, %al
3808; SSE4-NEXT:    jne .LBB12_15
3809; SSE4-NEXT:  .LBB12_16: # %else14
3810; SSE4-NEXT:    retq
3811; SSE4-NEXT:  .LBB12_1: # %cond.store
3812; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
3813; SSE4-NEXT:    testb $2, %al
3814; SSE4-NEXT:    je .LBB12_4
3815; SSE4-NEXT:  .LBB12_3: # %cond.store1
3816; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
3817; SSE4-NEXT:    testb $4, %al
3818; SSE4-NEXT:    je .LBB12_6
3819; SSE4-NEXT:  .LBB12_5: # %cond.store3
3820; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
3821; SSE4-NEXT:    testb $8, %al
3822; SSE4-NEXT:    je .LBB12_8
3823; SSE4-NEXT:  .LBB12_7: # %cond.store5
3824; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
3825; SSE4-NEXT:    testb $16, %al
3826; SSE4-NEXT:    je .LBB12_10
3827; SSE4-NEXT:  .LBB12_9: # %cond.store7
3828; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
3829; SSE4-NEXT:    testb $32, %al
3830; SSE4-NEXT:    je .LBB12_12
3831; SSE4-NEXT:  .LBB12_11: # %cond.store9
3832; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
3833; SSE4-NEXT:    testb $64, %al
3834; SSE4-NEXT:    je .LBB12_14
3835; SSE4-NEXT:  .LBB12_13: # %cond.store11
3836; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
3837; SSE4-NEXT:    testb $-128, %al
3838; SSE4-NEXT:    je .LBB12_16
3839; SSE4-NEXT:  .LBB12_15: # %cond.store13
3840; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
3841; SSE4-NEXT:    retq
3842;
3843; AVX1-LABEL: truncstore_v8i32_v8i8:
3844; AVX1:       # %bb.0:
3845; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3846; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u>
3847; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
3848; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
3849; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
3850; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3851; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
3852; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
3853; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
3854; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3855; AVX1-NEXT:    vmovmskps %ymm1, %eax
3856; AVX1-NEXT:    notl %eax
3857; AVX1-NEXT:    testb $1, %al
3858; AVX1-NEXT:    jne .LBB12_1
3859; AVX1-NEXT:  # %bb.2: # %else
3860; AVX1-NEXT:    testb $2, %al
3861; AVX1-NEXT:    jne .LBB12_3
3862; AVX1-NEXT:  .LBB12_4: # %else2
3863; AVX1-NEXT:    testb $4, %al
3864; AVX1-NEXT:    jne .LBB12_5
3865; AVX1-NEXT:  .LBB12_6: # %else4
3866; AVX1-NEXT:    testb $8, %al
3867; AVX1-NEXT:    jne .LBB12_7
3868; AVX1-NEXT:  .LBB12_8: # %else6
3869; AVX1-NEXT:    testb $16, %al
3870; AVX1-NEXT:    jne .LBB12_9
3871; AVX1-NEXT:  .LBB12_10: # %else8
3872; AVX1-NEXT:    testb $32, %al
3873; AVX1-NEXT:    jne .LBB12_11
3874; AVX1-NEXT:  .LBB12_12: # %else10
3875; AVX1-NEXT:    testb $64, %al
3876; AVX1-NEXT:    jne .LBB12_13
3877; AVX1-NEXT:  .LBB12_14: # %else12
3878; AVX1-NEXT:    testb $-128, %al
3879; AVX1-NEXT:    jne .LBB12_15
3880; AVX1-NEXT:  .LBB12_16: # %else14
3881; AVX1-NEXT:    vzeroupper
3882; AVX1-NEXT:    retq
3883; AVX1-NEXT:  .LBB12_1: # %cond.store
3884; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
3885; AVX1-NEXT:    testb $2, %al
3886; AVX1-NEXT:    je .LBB12_4
3887; AVX1-NEXT:  .LBB12_3: # %cond.store1
3888; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
3889; AVX1-NEXT:    testb $4, %al
3890; AVX1-NEXT:    je .LBB12_6
3891; AVX1-NEXT:  .LBB12_5: # %cond.store3
3892; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
3893; AVX1-NEXT:    testb $8, %al
3894; AVX1-NEXT:    je .LBB12_8
3895; AVX1-NEXT:  .LBB12_7: # %cond.store5
3896; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
3897; AVX1-NEXT:    testb $16, %al
3898; AVX1-NEXT:    je .LBB12_10
3899; AVX1-NEXT:  .LBB12_9: # %cond.store7
3900; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
3901; AVX1-NEXT:    testb $32, %al
3902; AVX1-NEXT:    je .LBB12_12
3903; AVX1-NEXT:  .LBB12_11: # %cond.store9
3904; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
3905; AVX1-NEXT:    testb $64, %al
3906; AVX1-NEXT:    je .LBB12_14
3907; AVX1-NEXT:  .LBB12_13: # %cond.store11
3908; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
3909; AVX1-NEXT:    testb $-128, %al
3910; AVX1-NEXT:    je .LBB12_16
3911; AVX1-NEXT:  .LBB12_15: # %cond.store13
3912; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
3913; AVX1-NEXT:    vzeroupper
3914; AVX1-NEXT:    retq
3915;
3916; AVX2-LABEL: truncstore_v8i32_v8i8:
3917; AVX2:       # %bb.0:
3918; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3919; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
3920; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u>
3921; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
3922; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
3923; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
3924; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
3925; AVX2-NEXT:    vmovmskps %ymm1, %eax
3926; AVX2-NEXT:    notl %eax
3927; AVX2-NEXT:    testb $1, %al
3928; AVX2-NEXT:    jne .LBB12_1
3929; AVX2-NEXT:  # %bb.2: # %else
3930; AVX2-NEXT:    testb $2, %al
3931; AVX2-NEXT:    jne .LBB12_3
3932; AVX2-NEXT:  .LBB12_4: # %else2
3933; AVX2-NEXT:    testb $4, %al
3934; AVX2-NEXT:    jne .LBB12_5
3935; AVX2-NEXT:  .LBB12_6: # %else4
3936; AVX2-NEXT:    testb $8, %al
3937; AVX2-NEXT:    jne .LBB12_7
3938; AVX2-NEXT:  .LBB12_8: # %else6
3939; AVX2-NEXT:    testb $16, %al
3940; AVX2-NEXT:    jne .LBB12_9
3941; AVX2-NEXT:  .LBB12_10: # %else8
3942; AVX2-NEXT:    testb $32, %al
3943; AVX2-NEXT:    jne .LBB12_11
3944; AVX2-NEXT:  .LBB12_12: # %else10
3945; AVX2-NEXT:    testb $64, %al
3946; AVX2-NEXT:    jne .LBB12_13
3947; AVX2-NEXT:  .LBB12_14: # %else12
3948; AVX2-NEXT:    testb $-128, %al
3949; AVX2-NEXT:    jne .LBB12_15
3950; AVX2-NEXT:  .LBB12_16: # %else14
3951; AVX2-NEXT:    vzeroupper
3952; AVX2-NEXT:    retq
3953; AVX2-NEXT:  .LBB12_1: # %cond.store
3954; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
3955; AVX2-NEXT:    testb $2, %al
3956; AVX2-NEXT:    je .LBB12_4
3957; AVX2-NEXT:  .LBB12_3: # %cond.store1
3958; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
3959; AVX2-NEXT:    testb $4, %al
3960; AVX2-NEXT:    je .LBB12_6
3961; AVX2-NEXT:  .LBB12_5: # %cond.store3
3962; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
3963; AVX2-NEXT:    testb $8, %al
3964; AVX2-NEXT:    je .LBB12_8
3965; AVX2-NEXT:  .LBB12_7: # %cond.store5
3966; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
3967; AVX2-NEXT:    testb $16, %al
3968; AVX2-NEXT:    je .LBB12_10
3969; AVX2-NEXT:  .LBB12_9: # %cond.store7
3970; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
3971; AVX2-NEXT:    testb $32, %al
3972; AVX2-NEXT:    je .LBB12_12
3973; AVX2-NEXT:  .LBB12_11: # %cond.store9
3974; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
3975; AVX2-NEXT:    testb $64, %al
3976; AVX2-NEXT:    je .LBB12_14
3977; AVX2-NEXT:  .LBB12_13: # %cond.store11
3978; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
3979; AVX2-NEXT:    testb $-128, %al
3980; AVX2-NEXT:    je .LBB12_16
3981; AVX2-NEXT:  .LBB12_15: # %cond.store13
3982; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
3983; AVX2-NEXT:    vzeroupper
3984; AVX2-NEXT:    retq
3985;
3986; AVX512F-LABEL: truncstore_v8i32_v8i8:
3987; AVX512F:       # %bb.0:
3988; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
3989; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
3990; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
3991; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3992; AVX512F-NEXT:    kmovw %k0, %eax
3993; AVX512F-NEXT:    testb $1, %al
3994; AVX512F-NEXT:    jne .LBB12_1
3995; AVX512F-NEXT:  # %bb.2: # %else
3996; AVX512F-NEXT:    testb $2, %al
3997; AVX512F-NEXT:    jne .LBB12_3
3998; AVX512F-NEXT:  .LBB12_4: # %else2
3999; AVX512F-NEXT:    testb $4, %al
4000; AVX512F-NEXT:    jne .LBB12_5
4001; AVX512F-NEXT:  .LBB12_6: # %else4
4002; AVX512F-NEXT:    testb $8, %al
4003; AVX512F-NEXT:    jne .LBB12_7
4004; AVX512F-NEXT:  .LBB12_8: # %else6
4005; AVX512F-NEXT:    testb $16, %al
4006; AVX512F-NEXT:    jne .LBB12_9
4007; AVX512F-NEXT:  .LBB12_10: # %else8
4008; AVX512F-NEXT:    testb $32, %al
4009; AVX512F-NEXT:    jne .LBB12_11
4010; AVX512F-NEXT:  .LBB12_12: # %else10
4011; AVX512F-NEXT:    testb $64, %al
4012; AVX512F-NEXT:    jne .LBB12_13
4013; AVX512F-NEXT:  .LBB12_14: # %else12
4014; AVX512F-NEXT:    testb $-128, %al
4015; AVX512F-NEXT:    jne .LBB12_15
4016; AVX512F-NEXT:  .LBB12_16: # %else14
4017; AVX512F-NEXT:    vzeroupper
4018; AVX512F-NEXT:    retq
4019; AVX512F-NEXT:  .LBB12_1: # %cond.store
4020; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
4021; AVX512F-NEXT:    testb $2, %al
4022; AVX512F-NEXT:    je .LBB12_4
4023; AVX512F-NEXT:  .LBB12_3: # %cond.store1
4024; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4025; AVX512F-NEXT:    testb $4, %al
4026; AVX512F-NEXT:    je .LBB12_6
4027; AVX512F-NEXT:  .LBB12_5: # %cond.store3
4028; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4029; AVX512F-NEXT:    testb $8, %al
4030; AVX512F-NEXT:    je .LBB12_8
4031; AVX512F-NEXT:  .LBB12_7: # %cond.store5
4032; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4033; AVX512F-NEXT:    testb $16, %al
4034; AVX512F-NEXT:    je .LBB12_10
4035; AVX512F-NEXT:  .LBB12_9: # %cond.store7
4036; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4037; AVX512F-NEXT:    testb $32, %al
4038; AVX512F-NEXT:    je .LBB12_12
4039; AVX512F-NEXT:  .LBB12_11: # %cond.store9
4040; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4041; AVX512F-NEXT:    testb $64, %al
4042; AVX512F-NEXT:    je .LBB12_14
4043; AVX512F-NEXT:  .LBB12_13: # %cond.store11
4044; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4045; AVX512F-NEXT:    testb $-128, %al
4046; AVX512F-NEXT:    je .LBB12_16
4047; AVX512F-NEXT:  .LBB12_15: # %cond.store13
4048; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4049; AVX512F-NEXT:    vzeroupper
4050; AVX512F-NEXT:    retq
4051;
4052; AVX512BW-LABEL: truncstore_v8i32_v8i8:
4053; AVX512BW:       # %bb.0:
4054; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4055; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
4056; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
4057; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0
4058; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1
4059; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
4060; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
4061; AVX512BW-NEXT:    vzeroupper
4062; AVX512BW-NEXT:    retq
4063;
4064; AVX512BWVL-LABEL: truncstore_v8i32_v8i8:
4065; AVX512BWVL:       # %bb.0:
4066; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
4067; AVX512BWVL-NEXT:    vpmovdb %ymm0, (%rdi) {%k1}
4068; AVX512BWVL-NEXT:    vzeroupper
4069; AVX512BWVL-NEXT:    retq
4070  %a = icmp ne <8 x i32> %mask, zeroinitializer
4071  %b = trunc <8 x i32> %x to <8 x i8>
4072  call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %b, <8 x i8>* %p, i32 1, <8 x i1> %a)
4073  ret void
4074}
4075
4076define void @truncstore_v4i32_v4i16(<4 x i32> %x, <4 x i16>* %p, <4 x i32> %mask) {
4077; SSE2-LABEL: truncstore_v4i32_v4i16:
4078; SSE2:       # %bb.0:
4079; SSE2-NEXT:    pxor %xmm2, %xmm2
4080; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
4081; SSE2-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
4082; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
4083; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
4084; SSE2-NEXT:    movmskps %xmm2, %eax
4085; SSE2-NEXT:    xorl $15, %eax
4086; SSE2-NEXT:    testb $1, %al
4087; SSE2-NEXT:    jne .LBB13_1
4088; SSE2-NEXT:  # %bb.2: # %else
4089; SSE2-NEXT:    testb $2, %al
4090; SSE2-NEXT:    jne .LBB13_3
4091; SSE2-NEXT:  .LBB13_4: # %else2
4092; SSE2-NEXT:    testb $4, %al
4093; SSE2-NEXT:    jne .LBB13_5
4094; SSE2-NEXT:  .LBB13_6: # %else4
4095; SSE2-NEXT:    testb $8, %al
4096; SSE2-NEXT:    jne .LBB13_7
4097; SSE2-NEXT:  .LBB13_8: # %else6
4098; SSE2-NEXT:    retq
4099; SSE2-NEXT:  .LBB13_1: # %cond.store
4100; SSE2-NEXT:    movd %xmm0, %ecx
4101; SSE2-NEXT:    movw %cx, (%rdi)
4102; SSE2-NEXT:    testb $2, %al
4103; SSE2-NEXT:    je .LBB13_4
4104; SSE2-NEXT:  .LBB13_3: # %cond.store1
4105; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
4106; SSE2-NEXT:    movw %cx, 2(%rdi)
4107; SSE2-NEXT:    testb $4, %al
4108; SSE2-NEXT:    je .LBB13_6
4109; SSE2-NEXT:  .LBB13_5: # %cond.store3
4110; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
4111; SSE2-NEXT:    movw %cx, 4(%rdi)
4112; SSE2-NEXT:    testb $8, %al
4113; SSE2-NEXT:    je .LBB13_8
4114; SSE2-NEXT:  .LBB13_7: # %cond.store5
4115; SSE2-NEXT:    pextrw $3, %xmm0, %eax
4116; SSE2-NEXT:    movw %ax, 6(%rdi)
4117; SSE2-NEXT:    retq
4118;
4119; SSE4-LABEL: truncstore_v4i32_v4i16:
4120; SSE4:       # %bb.0:
4121; SSE4-NEXT:    pxor %xmm2, %xmm2
4122; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4123; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2
4124; SSE4-NEXT:    movmskps %xmm2, %eax
4125; SSE4-NEXT:    xorl $15, %eax
4126; SSE4-NEXT:    testb $1, %al
4127; SSE4-NEXT:    jne .LBB13_1
4128; SSE4-NEXT:  # %bb.2: # %else
4129; SSE4-NEXT:    testb $2, %al
4130; SSE4-NEXT:    jne .LBB13_3
4131; SSE4-NEXT:  .LBB13_4: # %else2
4132; SSE4-NEXT:    testb $4, %al
4133; SSE4-NEXT:    jne .LBB13_5
4134; SSE4-NEXT:  .LBB13_6: # %else4
4135; SSE4-NEXT:    testb $8, %al
4136; SSE4-NEXT:    jne .LBB13_7
4137; SSE4-NEXT:  .LBB13_8: # %else6
4138; SSE4-NEXT:    retq
4139; SSE4-NEXT:  .LBB13_1: # %cond.store
4140; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
4141; SSE4-NEXT:    testb $2, %al
4142; SSE4-NEXT:    je .LBB13_4
4143; SSE4-NEXT:  .LBB13_3: # %cond.store1
4144; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
4145; SSE4-NEXT:    testb $4, %al
4146; SSE4-NEXT:    je .LBB13_6
4147; SSE4-NEXT:  .LBB13_5: # %cond.store3
4148; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
4149; SSE4-NEXT:    testb $8, %al
4150; SSE4-NEXT:    je .LBB13_8
4151; SSE4-NEXT:  .LBB13_7: # %cond.store5
4152; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
4153; SSE4-NEXT:    retq
4154;
4155; AVX-LABEL: truncstore_v4i32_v4i16:
4156; AVX:       # %bb.0:
4157; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4158; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4159; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
4160; AVX-NEXT:    vmovmskps %xmm1, %eax
4161; AVX-NEXT:    xorl $15, %eax
4162; AVX-NEXT:    testb $1, %al
4163; AVX-NEXT:    jne .LBB13_1
4164; AVX-NEXT:  # %bb.2: # %else
4165; AVX-NEXT:    testb $2, %al
4166; AVX-NEXT:    jne .LBB13_3
4167; AVX-NEXT:  .LBB13_4: # %else2
4168; AVX-NEXT:    testb $4, %al
4169; AVX-NEXT:    jne .LBB13_5
4170; AVX-NEXT:  .LBB13_6: # %else4
4171; AVX-NEXT:    testb $8, %al
4172; AVX-NEXT:    jne .LBB13_7
4173; AVX-NEXT:  .LBB13_8: # %else6
4174; AVX-NEXT:    retq
4175; AVX-NEXT:  .LBB13_1: # %cond.store
4176; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
4177; AVX-NEXT:    testb $2, %al
4178; AVX-NEXT:    je .LBB13_4
4179; AVX-NEXT:  .LBB13_3: # %cond.store1
4180; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4181; AVX-NEXT:    testb $4, %al
4182; AVX-NEXT:    je .LBB13_6
4183; AVX-NEXT:  .LBB13_5: # %cond.store3
4184; AVX-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4185; AVX-NEXT:    testb $8, %al
4186; AVX-NEXT:    je .LBB13_8
4187; AVX-NEXT:  .LBB13_7: # %cond.store5
4188; AVX-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4189; AVX-NEXT:    retq
4190;
4191; AVX512F-LABEL: truncstore_v4i32_v4i16:
4192; AVX512F:       # %bb.0:
4193; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4194; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4195; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4196; AVX512F-NEXT:    kmovw %k0, %eax
4197; AVX512F-NEXT:    testb $1, %al
4198; AVX512F-NEXT:    jne .LBB13_1
4199; AVX512F-NEXT:  # %bb.2: # %else
4200; AVX512F-NEXT:    testb $2, %al
4201; AVX512F-NEXT:    jne .LBB13_3
4202; AVX512F-NEXT:  .LBB13_4: # %else2
4203; AVX512F-NEXT:    testb $4, %al
4204; AVX512F-NEXT:    jne .LBB13_5
4205; AVX512F-NEXT:  .LBB13_6: # %else4
4206; AVX512F-NEXT:    testb $8, %al
4207; AVX512F-NEXT:    jne .LBB13_7
4208; AVX512F-NEXT:  .LBB13_8: # %else6
4209; AVX512F-NEXT:    vzeroupper
4210; AVX512F-NEXT:    retq
4211; AVX512F-NEXT:  .LBB13_1: # %cond.store
4212; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
4213; AVX512F-NEXT:    testb $2, %al
4214; AVX512F-NEXT:    je .LBB13_4
4215; AVX512F-NEXT:  .LBB13_3: # %cond.store1
4216; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4217; AVX512F-NEXT:    testb $4, %al
4218; AVX512F-NEXT:    je .LBB13_6
4219; AVX512F-NEXT:  .LBB13_5: # %cond.store3
4220; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4221; AVX512F-NEXT:    testb $8, %al
4222; AVX512F-NEXT:    je .LBB13_8
4223; AVX512F-NEXT:  .LBB13_7: # %cond.store5
4224; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4225; AVX512F-NEXT:    vzeroupper
4226; AVX512F-NEXT:    retq
4227;
4228; AVX512BW-LABEL: truncstore_v4i32_v4i16:
4229; AVX512BW:       # %bb.0:
4230; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4231; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
4232; AVX512BW-NEXT:    kshiftld $28, %k0, %k0
4233; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1
4234; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4235; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
4236; AVX512BW-NEXT:    vzeroupper
4237; AVX512BW-NEXT:    retq
4238;
4239; AVX512BWVL-LABEL: truncstore_v4i32_v4i16:
4240; AVX512BWVL:       # %bb.0:
4241; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
4242; AVX512BWVL-NEXT:    vpmovdw %xmm0, (%rdi) {%k1}
4243; AVX512BWVL-NEXT:    retq
4244  %a = icmp ne <4 x i32> %mask, zeroinitializer
4245  %b = trunc <4 x i32> %x to <4 x i16>
4246  call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> %b, <4 x i16>* %p, i32 1, <4 x i1> %a)
4247  ret void
4248}
4249
4250define void @truncstore_v4i32_v4i8(<4 x i32> %x, <4 x i8>* %p, <4 x i32> %mask) {
4251; SSE2-LABEL: truncstore_v4i32_v4i8:
4252; SSE2:       # %bb.0:
4253; SSE2-NEXT:    pxor %xmm2, %xmm2
4254; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4255; SSE2-NEXT:    packuswb %xmm0, %xmm0
4256; SSE2-NEXT:    packuswb %xmm0, %xmm0
4257; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
4258; SSE2-NEXT:    movmskps %xmm2, %ecx
4259; SSE2-NEXT:    xorl $15, %ecx
4260; SSE2-NEXT:    testb $1, %cl
4261; SSE2-NEXT:    movd %xmm0, %eax
4262; SSE2-NEXT:    jne .LBB14_1
4263; SSE2-NEXT:  # %bb.2: # %else
4264; SSE2-NEXT:    testb $2, %cl
4265; SSE2-NEXT:    jne .LBB14_3
4266; SSE2-NEXT:  .LBB14_4: # %else2
4267; SSE2-NEXT:    testb $4, %cl
4268; SSE2-NEXT:    jne .LBB14_5
4269; SSE2-NEXT:  .LBB14_6: # %else4
4270; SSE2-NEXT:    testb $8, %cl
4271; SSE2-NEXT:    jne .LBB14_7
4272; SSE2-NEXT:  .LBB14_8: # %else6
4273; SSE2-NEXT:    retq
4274; SSE2-NEXT:  .LBB14_1: # %cond.store
4275; SSE2-NEXT:    movb %al, (%rdi)
4276; SSE2-NEXT:    testb $2, %cl
4277; SSE2-NEXT:    je .LBB14_4
4278; SSE2-NEXT:  .LBB14_3: # %cond.store1
4279; SSE2-NEXT:    movb %ah, 1(%rdi)
4280; SSE2-NEXT:    testb $4, %cl
4281; SSE2-NEXT:    je .LBB14_6
4282; SSE2-NEXT:  .LBB14_5: # %cond.store3
4283; SSE2-NEXT:    movl %eax, %edx
4284; SSE2-NEXT:    shrl $16, %edx
4285; SSE2-NEXT:    movb %dl, 2(%rdi)
4286; SSE2-NEXT:    testb $8, %cl
4287; SSE2-NEXT:    je .LBB14_8
4288; SSE2-NEXT:  .LBB14_7: # %cond.store5
4289; SSE2-NEXT:    shrl $24, %eax
4290; SSE2-NEXT:    movb %al, 3(%rdi)
4291; SSE2-NEXT:    retq
4292;
4293; SSE4-LABEL: truncstore_v4i32_v4i8:
4294; SSE4:       # %bb.0:
4295; SSE4-NEXT:    pxor %xmm2, %xmm2
4296; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
4297; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2
4298; SSE4-NEXT:    movmskps %xmm2, %eax
4299; SSE4-NEXT:    xorl $15, %eax
4300; SSE4-NEXT:    testb $1, %al
4301; SSE4-NEXT:    jne .LBB14_1
4302; SSE4-NEXT:  # %bb.2: # %else
4303; SSE4-NEXT:    testb $2, %al
4304; SSE4-NEXT:    jne .LBB14_3
4305; SSE4-NEXT:  .LBB14_4: # %else2
4306; SSE4-NEXT:    testb $4, %al
4307; SSE4-NEXT:    jne .LBB14_5
4308; SSE4-NEXT:  .LBB14_6: # %else4
4309; SSE4-NEXT:    testb $8, %al
4310; SSE4-NEXT:    jne .LBB14_7
4311; SSE4-NEXT:  .LBB14_8: # %else6
4312; SSE4-NEXT:    retq
4313; SSE4-NEXT:  .LBB14_1: # %cond.store
4314; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
4315; SSE4-NEXT:    testb $2, %al
4316; SSE4-NEXT:    je .LBB14_4
4317; SSE4-NEXT:  .LBB14_3: # %cond.store1
4318; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
4319; SSE4-NEXT:    testb $4, %al
4320; SSE4-NEXT:    je .LBB14_6
4321; SSE4-NEXT:  .LBB14_5: # %cond.store3
4322; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
4323; SSE4-NEXT:    testb $8, %al
4324; SSE4-NEXT:    je .LBB14_8
4325; SSE4-NEXT:  .LBB14_7: # %cond.store5
4326; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
4327; SSE4-NEXT:    retq
4328;
4329; AVX-LABEL: truncstore_v4i32_v4i8:
4330; AVX:       # %bb.0:
4331; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4332; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
4333; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
4334; AVX-NEXT:    vmovmskps %xmm1, %eax
4335; AVX-NEXT:    xorl $15, %eax
4336; AVX-NEXT:    testb $1, %al
4337; AVX-NEXT:    jne .LBB14_1
4338; AVX-NEXT:  # %bb.2: # %else
4339; AVX-NEXT:    testb $2, %al
4340; AVX-NEXT:    jne .LBB14_3
4341; AVX-NEXT:  .LBB14_4: # %else2
4342; AVX-NEXT:    testb $4, %al
4343; AVX-NEXT:    jne .LBB14_5
4344; AVX-NEXT:  .LBB14_6: # %else4
4345; AVX-NEXT:    testb $8, %al
4346; AVX-NEXT:    jne .LBB14_7
4347; AVX-NEXT:  .LBB14_8: # %else6
4348; AVX-NEXT:    retq
4349; AVX-NEXT:  .LBB14_1: # %cond.store
4350; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
4351; AVX-NEXT:    testb $2, %al
4352; AVX-NEXT:    je .LBB14_4
4353; AVX-NEXT:  .LBB14_3: # %cond.store1
4354; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4355; AVX-NEXT:    testb $4, %al
4356; AVX-NEXT:    je .LBB14_6
4357; AVX-NEXT:  .LBB14_5: # %cond.store3
4358; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4359; AVX-NEXT:    testb $8, %al
4360; AVX-NEXT:    je .LBB14_8
4361; AVX-NEXT:  .LBB14_7: # %cond.store5
4362; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4363; AVX-NEXT:    retq
4364;
4365; AVX512F-LABEL: truncstore_v4i32_v4i8:
4366; AVX512F:       # %bb.0:
4367; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4368; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4369; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
4370; AVX512F-NEXT:    kmovw %k0, %eax
4371; AVX512F-NEXT:    testb $1, %al
4372; AVX512F-NEXT:    jne .LBB14_1
4373; AVX512F-NEXT:  # %bb.2: # %else
4374; AVX512F-NEXT:    testb $2, %al
4375; AVX512F-NEXT:    jne .LBB14_3
4376; AVX512F-NEXT:  .LBB14_4: # %else2
4377; AVX512F-NEXT:    testb $4, %al
4378; AVX512F-NEXT:    jne .LBB14_5
4379; AVX512F-NEXT:  .LBB14_6: # %else4
4380; AVX512F-NEXT:    testb $8, %al
4381; AVX512F-NEXT:    jne .LBB14_7
4382; AVX512F-NEXT:  .LBB14_8: # %else6
4383; AVX512F-NEXT:    vzeroupper
4384; AVX512F-NEXT:    retq
4385; AVX512F-NEXT:  .LBB14_1: # %cond.store
4386; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
4387; AVX512F-NEXT:    testb $2, %al
4388; AVX512F-NEXT:    je .LBB14_4
4389; AVX512F-NEXT:  .LBB14_3: # %cond.store1
4390; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4391; AVX512F-NEXT:    testb $4, %al
4392; AVX512F-NEXT:    je .LBB14_6
4393; AVX512F-NEXT:  .LBB14_5: # %cond.store3
4394; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4395; AVX512F-NEXT:    testb $8, %al
4396; AVX512F-NEXT:    je .LBB14_8
4397; AVX512F-NEXT:  .LBB14_7: # %cond.store5
4398; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4399; AVX512F-NEXT:    vzeroupper
4400; AVX512F-NEXT:    retq
4401;
4402; AVX512BW-LABEL: truncstore_v4i32_v4i8:
4403; AVX512BW:       # %bb.0:
4404; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
4405; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
4406; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0
4407; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1
4408; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
4409; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
4410; AVX512BW-NEXT:    vzeroupper
4411; AVX512BW-NEXT:    retq
4412;
4413; AVX512BWVL-LABEL: truncstore_v4i32_v4i8:
4414; AVX512BWVL:       # %bb.0:
4415; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
4416; AVX512BWVL-NEXT:    vpmovdb %xmm0, (%rdi) {%k1}
4417; AVX512BWVL-NEXT:    retq
4418  %a = icmp ne <4 x i32> %mask, zeroinitializer
4419  %b = trunc <4 x i32> %x to <4 x i8>
4420  call void @llvm.masked.store.v4i8.p0v4i8(<4 x i8> %b, <4 x i8>* %p, i32 1, <4 x i1> %a)
4421  ret void
4422}
4423
4424define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %mask) {
4425; SSE2-LABEL: truncstore_v32i16_v32i8:
4426; SSE2:       # %bb.0:
4427; SSE2-NEXT:    pxor %xmm7, %xmm7
4428; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
4429; SSE2-NEXT:    pand %xmm6, %xmm1
4430; SSE2-NEXT:    pand %xmm6, %xmm0
4431; SSE2-NEXT:    packuswb %xmm1, %xmm0
4432; SSE2-NEXT:    pcmpeqb %xmm7, %xmm4
4433; SSE2-NEXT:    pmovmskb %xmm4, %ecx
4434; SSE2-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
4435; SSE2-NEXT:    pcmpeqb %xmm7, %xmm5
4436; SSE2-NEXT:    pmovmskb %xmm5, %eax
4437; SSE2-NEXT:    notl %eax
4438; SSE2-NEXT:    shll $16, %eax
4439; SSE2-NEXT:    orl %ecx, %eax
4440; SSE2-NEXT:    testb $1, %al
4441; SSE2-NEXT:    movd %xmm0, %ecx
4442; SSE2-NEXT:    jne .LBB15_1
4443; SSE2-NEXT:  # %bb.2: # %else
4444; SSE2-NEXT:    testb $2, %al
4445; SSE2-NEXT:    jne .LBB15_3
4446; SSE2-NEXT:  .LBB15_4: # %else2
4447; SSE2-NEXT:    testb $4, %al
4448; SSE2-NEXT:    jne .LBB15_5
4449; SSE2-NEXT:  .LBB15_6: # %else4
4450; SSE2-NEXT:    testb $8, %al
4451; SSE2-NEXT:    je .LBB15_8
4452; SSE2-NEXT:  .LBB15_7: # %cond.store5
4453; SSE2-NEXT:    shrl $24, %ecx
4454; SSE2-NEXT:    movb %cl, 3(%rdi)
4455; SSE2-NEXT:  .LBB15_8: # %else6
4456; SSE2-NEXT:    testb $16, %al
4457; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
4458; SSE2-NEXT:    je .LBB15_10
4459; SSE2-NEXT:  # %bb.9: # %cond.store7
4460; SSE2-NEXT:    movb %cl, 4(%rdi)
4461; SSE2-NEXT:  .LBB15_10: # %else8
4462; SSE2-NEXT:    testb $32, %al
4463; SSE2-NEXT:    je .LBB15_12
4464; SSE2-NEXT:  # %bb.11: # %cond.store9
4465; SSE2-NEXT:    movb %ch, 5(%rdi)
4466; SSE2-NEXT:  .LBB15_12: # %else10
4467; SSE2-NEXT:    testb $64, %al
4468; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
4469; SSE2-NEXT:    je .LBB15_14
4470; SSE2-NEXT:  # %bb.13: # %cond.store11
4471; SSE2-NEXT:    movb %cl, 6(%rdi)
4472; SSE2-NEXT:  .LBB15_14: # %else12
4473; SSE2-NEXT:    testb $-128, %al
4474; SSE2-NEXT:    je .LBB15_16
4475; SSE2-NEXT:  # %bb.15: # %cond.store13
4476; SSE2-NEXT:    movb %ch, 7(%rdi)
4477; SSE2-NEXT:  .LBB15_16: # %else14
4478; SSE2-NEXT:    testl $256, %eax # imm = 0x100
4479; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
4480; SSE2-NEXT:    je .LBB15_18
4481; SSE2-NEXT:  # %bb.17: # %cond.store15
4482; SSE2-NEXT:    movb %cl, 8(%rdi)
4483; SSE2-NEXT:  .LBB15_18: # %else16
4484; SSE2-NEXT:    testl $512, %eax # imm = 0x200
4485; SSE2-NEXT:    je .LBB15_20
4486; SSE2-NEXT:  # %bb.19: # %cond.store17
4487; SSE2-NEXT:    movb %ch, 9(%rdi)
4488; SSE2-NEXT:  .LBB15_20: # %else18
4489; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
4490; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
4491; SSE2-NEXT:    je .LBB15_22
4492; SSE2-NEXT:  # %bb.21: # %cond.store19
4493; SSE2-NEXT:    movb %cl, 10(%rdi)
4494; SSE2-NEXT:  .LBB15_22: # %else20
4495; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
4496; SSE2-NEXT:    je .LBB15_24
4497; SSE2-NEXT:  # %bb.23: # %cond.store21
4498; SSE2-NEXT:    movb %ch, 11(%rdi)
4499; SSE2-NEXT:  .LBB15_24: # %else22
4500; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
4501; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
4502; SSE2-NEXT:    je .LBB15_26
4503; SSE2-NEXT:  # %bb.25: # %cond.store23
4504; SSE2-NEXT:    movb %cl, 12(%rdi)
4505; SSE2-NEXT:  .LBB15_26: # %else24
4506; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
4507; SSE2-NEXT:    je .LBB15_28
4508; SSE2-NEXT:  # %bb.27: # %cond.store25
4509; SSE2-NEXT:    movb %ch, 13(%rdi)
4510; SSE2-NEXT:  .LBB15_28: # %else26
4511; SSE2-NEXT:    pand %xmm6, %xmm3
4512; SSE2-NEXT:    pand %xmm6, %xmm2
4513; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
4514; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
4515; SSE2-NEXT:    je .LBB15_30
4516; SSE2-NEXT:  # %bb.29: # %cond.store27
4517; SSE2-NEXT:    movb %cl, 14(%rdi)
4518; SSE2-NEXT:  .LBB15_30: # %else28
4519; SSE2-NEXT:    packuswb %xmm3, %xmm2
4520; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
4521; SSE2-NEXT:    je .LBB15_32
4522; SSE2-NEXT:  # %bb.31: # %cond.store29
4523; SSE2-NEXT:    movb %ch, 15(%rdi)
4524; SSE2-NEXT:  .LBB15_32: # %else30
4525; SSE2-NEXT:    testl $65536, %eax # imm = 0x10000
4526; SSE2-NEXT:    movd %xmm2, %ecx
4527; SSE2-NEXT:    jne .LBB15_33
4528; SSE2-NEXT:  # %bb.34: # %else32
4529; SSE2-NEXT:    testl $131072, %eax # imm = 0x20000
4530; SSE2-NEXT:    jne .LBB15_35
4531; SSE2-NEXT:  .LBB15_36: # %else34
4532; SSE2-NEXT:    testl $262144, %eax # imm = 0x40000
4533; SSE2-NEXT:    jne .LBB15_37
4534; SSE2-NEXT:  .LBB15_38: # %else36
4535; SSE2-NEXT:    testl $524288, %eax # imm = 0x80000
4536; SSE2-NEXT:    je .LBB15_40
4537; SSE2-NEXT:  .LBB15_39: # %cond.store37
4538; SSE2-NEXT:    shrl $24, %ecx
4539; SSE2-NEXT:    movb %cl, 19(%rdi)
4540; SSE2-NEXT:  .LBB15_40: # %else38
4541; SSE2-NEXT:    testl $1048576, %eax # imm = 0x100000
4542; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
4543; SSE2-NEXT:    je .LBB15_42
4544; SSE2-NEXT:  # %bb.41: # %cond.store39
4545; SSE2-NEXT:    movb %cl, 20(%rdi)
4546; SSE2-NEXT:  .LBB15_42: # %else40
4547; SSE2-NEXT:    testl $2097152, %eax # imm = 0x200000
4548; SSE2-NEXT:    je .LBB15_44
4549; SSE2-NEXT:  # %bb.43: # %cond.store41
4550; SSE2-NEXT:    movb %ch, 21(%rdi)
4551; SSE2-NEXT:  .LBB15_44: # %else42
4552; SSE2-NEXT:    testl $4194304, %eax # imm = 0x400000
4553; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
4554; SSE2-NEXT:    je .LBB15_46
4555; SSE2-NEXT:  # %bb.45: # %cond.store43
4556; SSE2-NEXT:    movb %cl, 22(%rdi)
4557; SSE2-NEXT:  .LBB15_46: # %else44
4558; SSE2-NEXT:    testl $8388608, %eax # imm = 0x800000
4559; SSE2-NEXT:    je .LBB15_48
4560; SSE2-NEXT:  # %bb.47: # %cond.store45
4561; SSE2-NEXT:    movb %ch, 23(%rdi)
4562; SSE2-NEXT:  .LBB15_48: # %else46
4563; SSE2-NEXT:    testl $16777216, %eax # imm = 0x1000000
4564; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
4565; SSE2-NEXT:    je .LBB15_50
4566; SSE2-NEXT:  # %bb.49: # %cond.store47
4567; SSE2-NEXT:    movb %cl, 24(%rdi)
4568; SSE2-NEXT:  .LBB15_50: # %else48
4569; SSE2-NEXT:    testl $33554432, %eax # imm = 0x2000000
4570; SSE2-NEXT:    je .LBB15_52
4571; SSE2-NEXT:  # %bb.51: # %cond.store49
4572; SSE2-NEXT:    movb %ch, 25(%rdi)
4573; SSE2-NEXT:  .LBB15_52: # %else50
4574; SSE2-NEXT:    testl $67108864, %eax # imm = 0x4000000
4575; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
4576; SSE2-NEXT:    je .LBB15_54
4577; SSE2-NEXT:  # %bb.53: # %cond.store51
4578; SSE2-NEXT:    movb %cl, 26(%rdi)
4579; SSE2-NEXT:  .LBB15_54: # %else52
4580; SSE2-NEXT:    testl $134217728, %eax # imm = 0x8000000
4581; SSE2-NEXT:    je .LBB15_56
4582; SSE2-NEXT:  # %bb.55: # %cond.store53
4583; SSE2-NEXT:    movb %ch, 27(%rdi)
4584; SSE2-NEXT:  .LBB15_56: # %else54
4585; SSE2-NEXT:    testl $268435456, %eax # imm = 0x10000000
4586; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
4587; SSE2-NEXT:    je .LBB15_58
4588; SSE2-NEXT:  # %bb.57: # %cond.store55
4589; SSE2-NEXT:    movb %cl, 28(%rdi)
4590; SSE2-NEXT:  .LBB15_58: # %else56
4591; SSE2-NEXT:    testl $536870912, %eax # imm = 0x20000000
4592; SSE2-NEXT:    je .LBB15_60
4593; SSE2-NEXT:  # %bb.59: # %cond.store57
4594; SSE2-NEXT:    movb %ch, 29(%rdi)
4595; SSE2-NEXT:  .LBB15_60: # %else58
4596; SSE2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
4597; SSE2-NEXT:    pextrw $7, %xmm2, %ecx
4598; SSE2-NEXT:    jne .LBB15_61
4599; SSE2-NEXT:  # %bb.62: # %else60
4600; SSE2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
4601; SSE2-NEXT:    jne .LBB15_63
4602; SSE2-NEXT:  .LBB15_64: # %else62
4603; SSE2-NEXT:    retq
4604; SSE2-NEXT:  .LBB15_1: # %cond.store
4605; SSE2-NEXT:    movb %cl, (%rdi)
4606; SSE2-NEXT:    testb $2, %al
4607; SSE2-NEXT:    je .LBB15_4
4608; SSE2-NEXT:  .LBB15_3: # %cond.store1
4609; SSE2-NEXT:    movb %ch, 1(%rdi)
4610; SSE2-NEXT:    testb $4, %al
4611; SSE2-NEXT:    je .LBB15_6
4612; SSE2-NEXT:  .LBB15_5: # %cond.store3
4613; SSE2-NEXT:    movl %ecx, %edx
4614; SSE2-NEXT:    shrl $16, %edx
4615; SSE2-NEXT:    movb %dl, 2(%rdi)
4616; SSE2-NEXT:    testb $8, %al
4617; SSE2-NEXT:    jne .LBB15_7
4618; SSE2-NEXT:    jmp .LBB15_8
4619; SSE2-NEXT:  .LBB15_33: # %cond.store31
4620; SSE2-NEXT:    movb %cl, 16(%rdi)
4621; SSE2-NEXT:    testl $131072, %eax # imm = 0x20000
4622; SSE2-NEXT:    je .LBB15_36
4623; SSE2-NEXT:  .LBB15_35: # %cond.store33
4624; SSE2-NEXT:    movb %ch, 17(%rdi)
4625; SSE2-NEXT:    testl $262144, %eax # imm = 0x40000
4626; SSE2-NEXT:    je .LBB15_38
4627; SSE2-NEXT:  .LBB15_37: # %cond.store35
4628; SSE2-NEXT:    movl %ecx, %edx
4629; SSE2-NEXT:    shrl $16, %edx
4630; SSE2-NEXT:    movb %dl, 18(%rdi)
4631; SSE2-NEXT:    testl $524288, %eax # imm = 0x80000
4632; SSE2-NEXT:    jne .LBB15_39
4633; SSE2-NEXT:    jmp .LBB15_40
4634; SSE2-NEXT:  .LBB15_61: # %cond.store59
4635; SSE2-NEXT:    movb %cl, 30(%rdi)
4636; SSE2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
4637; SSE2-NEXT:    je .LBB15_64
4638; SSE2-NEXT:  .LBB15_63: # %cond.store61
4639; SSE2-NEXT:    movb %ch, 31(%rdi)
4640; SSE2-NEXT:    retq
4641;
4642; SSE4-LABEL: truncstore_v32i16_v32i8:
4643; SSE4:       # %bb.0:
4644; SSE4-NEXT:    pxor %xmm7, %xmm7
4645; SSE4-NEXT:    movdqa {{.*#+}} xmm6 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
4646; SSE4-NEXT:    pand %xmm6, %xmm1
4647; SSE4-NEXT:    pand %xmm6, %xmm0
4648; SSE4-NEXT:    packuswb %xmm1, %xmm0
4649; SSE4-NEXT:    pcmpeqb %xmm7, %xmm4
4650; SSE4-NEXT:    pmovmskb %xmm4, %ecx
4651; SSE4-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
4652; SSE4-NEXT:    pcmpeqb %xmm7, %xmm5
4653; SSE4-NEXT:    pmovmskb %xmm5, %eax
4654; SSE4-NEXT:    notl %eax
4655; SSE4-NEXT:    shll $16, %eax
4656; SSE4-NEXT:    orl %ecx, %eax
4657; SSE4-NEXT:    testb $1, %al
4658; SSE4-NEXT:    jne .LBB15_1
4659; SSE4-NEXT:  # %bb.2: # %else
4660; SSE4-NEXT:    testb $2, %al
4661; SSE4-NEXT:    jne .LBB15_3
4662; SSE4-NEXT:  .LBB15_4: # %else2
4663; SSE4-NEXT:    testb $4, %al
4664; SSE4-NEXT:    jne .LBB15_5
4665; SSE4-NEXT:  .LBB15_6: # %else4
4666; SSE4-NEXT:    testb $8, %al
4667; SSE4-NEXT:    jne .LBB15_7
4668; SSE4-NEXT:  .LBB15_8: # %else6
4669; SSE4-NEXT:    testb $16, %al
4670; SSE4-NEXT:    jne .LBB15_9
4671; SSE4-NEXT:  .LBB15_10: # %else8
4672; SSE4-NEXT:    testb $32, %al
4673; SSE4-NEXT:    jne .LBB15_11
4674; SSE4-NEXT:  .LBB15_12: # %else10
4675; SSE4-NEXT:    testb $64, %al
4676; SSE4-NEXT:    jne .LBB15_13
4677; SSE4-NEXT:  .LBB15_14: # %else12
4678; SSE4-NEXT:    testb $-128, %al
4679; SSE4-NEXT:    jne .LBB15_15
4680; SSE4-NEXT:  .LBB15_16: # %else14
4681; SSE4-NEXT:    testl $256, %eax # imm = 0x100
4682; SSE4-NEXT:    jne .LBB15_17
4683; SSE4-NEXT:  .LBB15_18: # %else16
4684; SSE4-NEXT:    testl $512, %eax # imm = 0x200
4685; SSE4-NEXT:    jne .LBB15_19
4686; SSE4-NEXT:  .LBB15_20: # %else18
4687; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
4688; SSE4-NEXT:    jne .LBB15_21
4689; SSE4-NEXT:  .LBB15_22: # %else20
4690; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
4691; SSE4-NEXT:    jne .LBB15_23
4692; SSE4-NEXT:  .LBB15_24: # %else22
4693; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
4694; SSE4-NEXT:    jne .LBB15_25
4695; SSE4-NEXT:  .LBB15_26: # %else24
4696; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
4697; SSE4-NEXT:    jne .LBB15_27
4698; SSE4-NEXT:  .LBB15_28: # %else26
4699; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
4700; SSE4-NEXT:    je .LBB15_30
4701; SSE4-NEXT:  .LBB15_29: # %cond.store27
4702; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
4703; SSE4-NEXT:  .LBB15_30: # %else28
4704; SSE4-NEXT:    pand %xmm6, %xmm3
4705; SSE4-NEXT:    pand %xmm6, %xmm2
4706; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
4707; SSE4-NEXT:    je .LBB15_32
4708; SSE4-NEXT:  # %bb.31: # %cond.store29
4709; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
4710; SSE4-NEXT:  .LBB15_32: # %else30
4711; SSE4-NEXT:    packuswb %xmm3, %xmm2
4712; SSE4-NEXT:    testl $65536, %eax # imm = 0x10000
4713; SSE4-NEXT:    jne .LBB15_33
4714; SSE4-NEXT:  # %bb.34: # %else32
4715; SSE4-NEXT:    testl $131072, %eax # imm = 0x20000
4716; SSE4-NEXT:    jne .LBB15_35
4717; SSE4-NEXT:  .LBB15_36: # %else34
4718; SSE4-NEXT:    testl $262144, %eax # imm = 0x40000
4719; SSE4-NEXT:    jne .LBB15_37
4720; SSE4-NEXT:  .LBB15_38: # %else36
4721; SSE4-NEXT:    testl $524288, %eax # imm = 0x80000
4722; SSE4-NEXT:    jne .LBB15_39
4723; SSE4-NEXT:  .LBB15_40: # %else38
4724; SSE4-NEXT:    testl $1048576, %eax # imm = 0x100000
4725; SSE4-NEXT:    jne .LBB15_41
4726; SSE4-NEXT:  .LBB15_42: # %else40
4727; SSE4-NEXT:    testl $2097152, %eax # imm = 0x200000
4728; SSE4-NEXT:    jne .LBB15_43
4729; SSE4-NEXT:  .LBB15_44: # %else42
4730; SSE4-NEXT:    testl $4194304, %eax # imm = 0x400000
4731; SSE4-NEXT:    jne .LBB15_45
4732; SSE4-NEXT:  .LBB15_46: # %else44
4733; SSE4-NEXT:    testl $8388608, %eax # imm = 0x800000
4734; SSE4-NEXT:    jne .LBB15_47
4735; SSE4-NEXT:  .LBB15_48: # %else46
4736; SSE4-NEXT:    testl $16777216, %eax # imm = 0x1000000
4737; SSE4-NEXT:    jne .LBB15_49
4738; SSE4-NEXT:  .LBB15_50: # %else48
4739; SSE4-NEXT:    testl $33554432, %eax # imm = 0x2000000
4740; SSE4-NEXT:    jne .LBB15_51
4741; SSE4-NEXT:  .LBB15_52: # %else50
4742; SSE4-NEXT:    testl $67108864, %eax # imm = 0x4000000
4743; SSE4-NEXT:    jne .LBB15_53
4744; SSE4-NEXT:  .LBB15_54: # %else52
4745; SSE4-NEXT:    testl $134217728, %eax # imm = 0x8000000
4746; SSE4-NEXT:    jne .LBB15_55
4747; SSE4-NEXT:  .LBB15_56: # %else54
4748; SSE4-NEXT:    testl $268435456, %eax # imm = 0x10000000
4749; SSE4-NEXT:    jne .LBB15_57
4750; SSE4-NEXT:  .LBB15_58: # %else56
4751; SSE4-NEXT:    testl $536870912, %eax # imm = 0x20000000
4752; SSE4-NEXT:    jne .LBB15_59
4753; SSE4-NEXT:  .LBB15_60: # %else58
4754; SSE4-NEXT:    testl $1073741824, %eax # imm = 0x40000000
4755; SSE4-NEXT:    jne .LBB15_61
4756; SSE4-NEXT:  .LBB15_62: # %else60
4757; SSE4-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
4758; SSE4-NEXT:    jne .LBB15_63
4759; SSE4-NEXT:  .LBB15_64: # %else62
4760; SSE4-NEXT:    retq
4761; SSE4-NEXT:  .LBB15_1: # %cond.store
4762; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
4763; SSE4-NEXT:    testb $2, %al
4764; SSE4-NEXT:    je .LBB15_4
4765; SSE4-NEXT:  .LBB15_3: # %cond.store1
4766; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
4767; SSE4-NEXT:    testb $4, %al
4768; SSE4-NEXT:    je .LBB15_6
4769; SSE4-NEXT:  .LBB15_5: # %cond.store3
4770; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
4771; SSE4-NEXT:    testb $8, %al
4772; SSE4-NEXT:    je .LBB15_8
4773; SSE4-NEXT:  .LBB15_7: # %cond.store5
4774; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
4775; SSE4-NEXT:    testb $16, %al
4776; SSE4-NEXT:    je .LBB15_10
4777; SSE4-NEXT:  .LBB15_9: # %cond.store7
4778; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
4779; SSE4-NEXT:    testb $32, %al
4780; SSE4-NEXT:    je .LBB15_12
4781; SSE4-NEXT:  .LBB15_11: # %cond.store9
4782; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
4783; SSE4-NEXT:    testb $64, %al
4784; SSE4-NEXT:    je .LBB15_14
4785; SSE4-NEXT:  .LBB15_13: # %cond.store11
4786; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
4787; SSE4-NEXT:    testb $-128, %al
4788; SSE4-NEXT:    je .LBB15_16
4789; SSE4-NEXT:  .LBB15_15: # %cond.store13
4790; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
4791; SSE4-NEXT:    testl $256, %eax # imm = 0x100
4792; SSE4-NEXT:    je .LBB15_18
4793; SSE4-NEXT:  .LBB15_17: # %cond.store15
4794; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
4795; SSE4-NEXT:    testl $512, %eax # imm = 0x200
4796; SSE4-NEXT:    je .LBB15_20
4797; SSE4-NEXT:  .LBB15_19: # %cond.store17
4798; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
4799; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
4800; SSE4-NEXT:    je .LBB15_22
4801; SSE4-NEXT:  .LBB15_21: # %cond.store19
4802; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
4803; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
4804; SSE4-NEXT:    je .LBB15_24
4805; SSE4-NEXT:  .LBB15_23: # %cond.store21
4806; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
4807; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
4808; SSE4-NEXT:    je .LBB15_26
4809; SSE4-NEXT:  .LBB15_25: # %cond.store23
4810; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
4811; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
4812; SSE4-NEXT:    je .LBB15_28
4813; SSE4-NEXT:  .LBB15_27: # %cond.store25
4814; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
4815; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
4816; SSE4-NEXT:    jne .LBB15_29
4817; SSE4-NEXT:    jmp .LBB15_30
4818; SSE4-NEXT:  .LBB15_33: # %cond.store31
4819; SSE4-NEXT:    pextrb $0, %xmm2, 16(%rdi)
4820; SSE4-NEXT:    testl $131072, %eax # imm = 0x20000
4821; SSE4-NEXT:    je .LBB15_36
4822; SSE4-NEXT:  .LBB15_35: # %cond.store33
4823; SSE4-NEXT:    pextrb $1, %xmm2, 17(%rdi)
4824; SSE4-NEXT:    testl $262144, %eax # imm = 0x40000
4825; SSE4-NEXT:    je .LBB15_38
4826; SSE4-NEXT:  .LBB15_37: # %cond.store35
4827; SSE4-NEXT:    pextrb $2, %xmm2, 18(%rdi)
4828; SSE4-NEXT:    testl $524288, %eax # imm = 0x80000
4829; SSE4-NEXT:    je .LBB15_40
4830; SSE4-NEXT:  .LBB15_39: # %cond.store37
4831; SSE4-NEXT:    pextrb $3, %xmm2, 19(%rdi)
4832; SSE4-NEXT:    testl $1048576, %eax # imm = 0x100000
4833; SSE4-NEXT:    je .LBB15_42
4834; SSE4-NEXT:  .LBB15_41: # %cond.store39
4835; SSE4-NEXT:    pextrb $4, %xmm2, 20(%rdi)
4836; SSE4-NEXT:    testl $2097152, %eax # imm = 0x200000
4837; SSE4-NEXT:    je .LBB15_44
4838; SSE4-NEXT:  .LBB15_43: # %cond.store41
4839; SSE4-NEXT:    pextrb $5, %xmm2, 21(%rdi)
4840; SSE4-NEXT:    testl $4194304, %eax # imm = 0x400000
4841; SSE4-NEXT:    je .LBB15_46
4842; SSE4-NEXT:  .LBB15_45: # %cond.store43
4843; SSE4-NEXT:    pextrb $6, %xmm2, 22(%rdi)
4844; SSE4-NEXT:    testl $8388608, %eax # imm = 0x800000
4845; SSE4-NEXT:    je .LBB15_48
4846; SSE4-NEXT:  .LBB15_47: # %cond.store45
4847; SSE4-NEXT:    pextrb $7, %xmm2, 23(%rdi)
4848; SSE4-NEXT:    testl $16777216, %eax # imm = 0x1000000
4849; SSE4-NEXT:    je .LBB15_50
4850; SSE4-NEXT:  .LBB15_49: # %cond.store47
4851; SSE4-NEXT:    pextrb $8, %xmm2, 24(%rdi)
4852; SSE4-NEXT:    testl $33554432, %eax # imm = 0x2000000
4853; SSE4-NEXT:    je .LBB15_52
4854; SSE4-NEXT:  .LBB15_51: # %cond.store49
4855; SSE4-NEXT:    pextrb $9, %xmm2, 25(%rdi)
4856; SSE4-NEXT:    testl $67108864, %eax # imm = 0x4000000
4857; SSE4-NEXT:    je .LBB15_54
4858; SSE4-NEXT:  .LBB15_53: # %cond.store51
4859; SSE4-NEXT:    pextrb $10, %xmm2, 26(%rdi)
4860; SSE4-NEXT:    testl $134217728, %eax # imm = 0x8000000
4861; SSE4-NEXT:    je .LBB15_56
4862; SSE4-NEXT:  .LBB15_55: # %cond.store53
4863; SSE4-NEXT:    pextrb $11, %xmm2, 27(%rdi)
4864; SSE4-NEXT:    testl $268435456, %eax # imm = 0x10000000
4865; SSE4-NEXT:    je .LBB15_58
4866; SSE4-NEXT:  .LBB15_57: # %cond.store55
4867; SSE4-NEXT:    pextrb $12, %xmm2, 28(%rdi)
4868; SSE4-NEXT:    testl $536870912, %eax # imm = 0x20000000
4869; SSE4-NEXT:    je .LBB15_60
4870; SSE4-NEXT:  .LBB15_59: # %cond.store57
4871; SSE4-NEXT:    pextrb $13, %xmm2, 29(%rdi)
4872; SSE4-NEXT:    testl $1073741824, %eax # imm = 0x40000000
4873; SSE4-NEXT:    je .LBB15_62
4874; SSE4-NEXT:  .LBB15_61: # %cond.store59
4875; SSE4-NEXT:    pextrb $14, %xmm2, 30(%rdi)
4876; SSE4-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
4877; SSE4-NEXT:    je .LBB15_64
4878; SSE4-NEXT:  .LBB15_63: # %cond.store61
4879; SSE4-NEXT:    pextrb $15, %xmm2, 31(%rdi)
4880; SSE4-NEXT:    retq
4881;
4882; AVX1-LABEL: truncstore_v32i16_v32i8:
4883; AVX1:       # %bb.0:
4884; AVX1-NEXT:    vmovaps {{.*#+}} ymm3 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
4885; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
4886; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4887; AVX1-NEXT:    vpackuswb %xmm4, %xmm1, %xmm1
4888; AVX1-NEXT:    vandps %ymm3, %ymm0, %ymm0
4889; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
4890; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
4891; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
4892; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
4893; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
4894; AVX1-NEXT:    vpmovmskb %xmm3, %ecx
4895; AVX1-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
4896; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
4897; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
4898; AVX1-NEXT:    vpmovmskb %xmm1, %eax
4899; AVX1-NEXT:    notl %eax
4900; AVX1-NEXT:    shll $16, %eax
4901; AVX1-NEXT:    orl %ecx, %eax
4902; AVX1-NEXT:    testb $1, %al
4903; AVX1-NEXT:    jne .LBB15_1
4904; AVX1-NEXT:  # %bb.2: # %else
4905; AVX1-NEXT:    testb $2, %al
4906; AVX1-NEXT:    jne .LBB15_3
4907; AVX1-NEXT:  .LBB15_4: # %else2
4908; AVX1-NEXT:    testb $4, %al
4909; AVX1-NEXT:    jne .LBB15_5
4910; AVX1-NEXT:  .LBB15_6: # %else4
4911; AVX1-NEXT:    testb $8, %al
4912; AVX1-NEXT:    jne .LBB15_7
4913; AVX1-NEXT:  .LBB15_8: # %else6
4914; AVX1-NEXT:    testb $16, %al
4915; AVX1-NEXT:    jne .LBB15_9
4916; AVX1-NEXT:  .LBB15_10: # %else8
4917; AVX1-NEXT:    testb $32, %al
4918; AVX1-NEXT:    jne .LBB15_11
4919; AVX1-NEXT:  .LBB15_12: # %else10
4920; AVX1-NEXT:    testb $64, %al
4921; AVX1-NEXT:    jne .LBB15_13
4922; AVX1-NEXT:  .LBB15_14: # %else12
4923; AVX1-NEXT:    testb $-128, %al
4924; AVX1-NEXT:    jne .LBB15_15
4925; AVX1-NEXT:  .LBB15_16: # %else14
4926; AVX1-NEXT:    testl $256, %eax # imm = 0x100
4927; AVX1-NEXT:    jne .LBB15_17
4928; AVX1-NEXT:  .LBB15_18: # %else16
4929; AVX1-NEXT:    testl $512, %eax # imm = 0x200
4930; AVX1-NEXT:    jne .LBB15_19
4931; AVX1-NEXT:  .LBB15_20: # %else18
4932; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
4933; AVX1-NEXT:    jne .LBB15_21
4934; AVX1-NEXT:  .LBB15_22: # %else20
4935; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
4936; AVX1-NEXT:    jne .LBB15_23
4937; AVX1-NEXT:  .LBB15_24: # %else22
4938; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
4939; AVX1-NEXT:    jne .LBB15_25
4940; AVX1-NEXT:  .LBB15_26: # %else24
4941; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
4942; AVX1-NEXT:    jne .LBB15_27
4943; AVX1-NEXT:  .LBB15_28: # %else26
4944; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
4945; AVX1-NEXT:    jne .LBB15_29
4946; AVX1-NEXT:  .LBB15_30: # %else28
4947; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
4948; AVX1-NEXT:    je .LBB15_32
4949; AVX1-NEXT:  .LBB15_31: # %cond.store29
4950; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
4951; AVX1-NEXT:  .LBB15_32: # %else30
4952; AVX1-NEXT:    testl $65536, %eax # imm = 0x10000
4953; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
4954; AVX1-NEXT:    jne .LBB15_33
4955; AVX1-NEXT:  # %bb.34: # %else32
4956; AVX1-NEXT:    testl $131072, %eax # imm = 0x20000
4957; AVX1-NEXT:    jne .LBB15_35
4958; AVX1-NEXT:  .LBB15_36: # %else34
4959; AVX1-NEXT:    testl $262144, %eax # imm = 0x40000
4960; AVX1-NEXT:    jne .LBB15_37
4961; AVX1-NEXT:  .LBB15_38: # %else36
4962; AVX1-NEXT:    testl $524288, %eax # imm = 0x80000
4963; AVX1-NEXT:    jne .LBB15_39
4964; AVX1-NEXT:  .LBB15_40: # %else38
4965; AVX1-NEXT:    testl $1048576, %eax # imm = 0x100000
4966; AVX1-NEXT:    jne .LBB15_41
4967; AVX1-NEXT:  .LBB15_42: # %else40
4968; AVX1-NEXT:    testl $2097152, %eax # imm = 0x200000
4969; AVX1-NEXT:    jne .LBB15_43
4970; AVX1-NEXT:  .LBB15_44: # %else42
4971; AVX1-NEXT:    testl $4194304, %eax # imm = 0x400000
4972; AVX1-NEXT:    jne .LBB15_45
4973; AVX1-NEXT:  .LBB15_46: # %else44
4974; AVX1-NEXT:    testl $8388608, %eax # imm = 0x800000
4975; AVX1-NEXT:    jne .LBB15_47
4976; AVX1-NEXT:  .LBB15_48: # %else46
4977; AVX1-NEXT:    testl $16777216, %eax # imm = 0x1000000
4978; AVX1-NEXT:    jne .LBB15_49
4979; AVX1-NEXT:  .LBB15_50: # %else48
4980; AVX1-NEXT:    testl $33554432, %eax # imm = 0x2000000
4981; AVX1-NEXT:    jne .LBB15_51
4982; AVX1-NEXT:  .LBB15_52: # %else50
4983; AVX1-NEXT:    testl $67108864, %eax # imm = 0x4000000
4984; AVX1-NEXT:    jne .LBB15_53
4985; AVX1-NEXT:  .LBB15_54: # %else52
4986; AVX1-NEXT:    testl $134217728, %eax # imm = 0x8000000
4987; AVX1-NEXT:    jne .LBB15_55
4988; AVX1-NEXT:  .LBB15_56: # %else54
4989; AVX1-NEXT:    testl $268435456, %eax # imm = 0x10000000
4990; AVX1-NEXT:    jne .LBB15_57
4991; AVX1-NEXT:  .LBB15_58: # %else56
4992; AVX1-NEXT:    testl $536870912, %eax # imm = 0x20000000
4993; AVX1-NEXT:    jne .LBB15_59
4994; AVX1-NEXT:  .LBB15_60: # %else58
4995; AVX1-NEXT:    testl $1073741824, %eax # imm = 0x40000000
4996; AVX1-NEXT:    jne .LBB15_61
4997; AVX1-NEXT:  .LBB15_62: # %else60
4998; AVX1-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
4999; AVX1-NEXT:    jne .LBB15_63
5000; AVX1-NEXT:  .LBB15_64: # %else62
5001; AVX1-NEXT:    vzeroupper
5002; AVX1-NEXT:    retq
5003; AVX1-NEXT:  .LBB15_1: # %cond.store
5004; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
5005; AVX1-NEXT:    testb $2, %al
5006; AVX1-NEXT:    je .LBB15_4
5007; AVX1-NEXT:  .LBB15_3: # %cond.store1
5008; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5009; AVX1-NEXT:    testb $4, %al
5010; AVX1-NEXT:    je .LBB15_6
5011; AVX1-NEXT:  .LBB15_5: # %cond.store3
5012; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5013; AVX1-NEXT:    testb $8, %al
5014; AVX1-NEXT:    je .LBB15_8
5015; AVX1-NEXT:  .LBB15_7: # %cond.store5
5016; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5017; AVX1-NEXT:    testb $16, %al
5018; AVX1-NEXT:    je .LBB15_10
5019; AVX1-NEXT:  .LBB15_9: # %cond.store7
5020; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
5021; AVX1-NEXT:    testb $32, %al
5022; AVX1-NEXT:    je .LBB15_12
5023; AVX1-NEXT:  .LBB15_11: # %cond.store9
5024; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
5025; AVX1-NEXT:    testb $64, %al
5026; AVX1-NEXT:    je .LBB15_14
5027; AVX1-NEXT:  .LBB15_13: # %cond.store11
5028; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
5029; AVX1-NEXT:    testb $-128, %al
5030; AVX1-NEXT:    je .LBB15_16
5031; AVX1-NEXT:  .LBB15_15: # %cond.store13
5032; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
5033; AVX1-NEXT:    testl $256, %eax # imm = 0x100
5034; AVX1-NEXT:    je .LBB15_18
5035; AVX1-NEXT:  .LBB15_17: # %cond.store15
5036; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
5037; AVX1-NEXT:    testl $512, %eax # imm = 0x200
5038; AVX1-NEXT:    je .LBB15_20
5039; AVX1-NEXT:  .LBB15_19: # %cond.store17
5040; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
5041; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
5042; AVX1-NEXT:    je .LBB15_22
5043; AVX1-NEXT:  .LBB15_21: # %cond.store19
5044; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
5045; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
5046; AVX1-NEXT:    je .LBB15_24
5047; AVX1-NEXT:  .LBB15_23: # %cond.store21
5048; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
5049; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
5050; AVX1-NEXT:    je .LBB15_26
5051; AVX1-NEXT:  .LBB15_25: # %cond.store23
5052; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
5053; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
5054; AVX1-NEXT:    je .LBB15_28
5055; AVX1-NEXT:  .LBB15_27: # %cond.store25
5056; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
5057; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
5058; AVX1-NEXT:    je .LBB15_30
5059; AVX1-NEXT:  .LBB15_29: # %cond.store27
5060; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
5061; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
5062; AVX1-NEXT:    jne .LBB15_31
5063; AVX1-NEXT:    jmp .LBB15_32
5064; AVX1-NEXT:  .LBB15_33: # %cond.store31
5065; AVX1-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
5066; AVX1-NEXT:    testl $131072, %eax # imm = 0x20000
5067; AVX1-NEXT:    je .LBB15_36
5068; AVX1-NEXT:  .LBB15_35: # %cond.store33
5069; AVX1-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
5070; AVX1-NEXT:    testl $262144, %eax # imm = 0x40000
5071; AVX1-NEXT:    je .LBB15_38
5072; AVX1-NEXT:  .LBB15_37: # %cond.store35
5073; AVX1-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
5074; AVX1-NEXT:    testl $524288, %eax # imm = 0x80000
5075; AVX1-NEXT:    je .LBB15_40
5076; AVX1-NEXT:  .LBB15_39: # %cond.store37
5077; AVX1-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
5078; AVX1-NEXT:    testl $1048576, %eax # imm = 0x100000
5079; AVX1-NEXT:    je .LBB15_42
5080; AVX1-NEXT:  .LBB15_41: # %cond.store39
5081; AVX1-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
5082; AVX1-NEXT:    testl $2097152, %eax # imm = 0x200000
5083; AVX1-NEXT:    je .LBB15_44
5084; AVX1-NEXT:  .LBB15_43: # %cond.store41
5085; AVX1-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
5086; AVX1-NEXT:    testl $4194304, %eax # imm = 0x400000
5087; AVX1-NEXT:    je .LBB15_46
5088; AVX1-NEXT:  .LBB15_45: # %cond.store43
5089; AVX1-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
5090; AVX1-NEXT:    testl $8388608, %eax # imm = 0x800000
5091; AVX1-NEXT:    je .LBB15_48
5092; AVX1-NEXT:  .LBB15_47: # %cond.store45
5093; AVX1-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
5094; AVX1-NEXT:    testl $16777216, %eax # imm = 0x1000000
5095; AVX1-NEXT:    je .LBB15_50
5096; AVX1-NEXT:  .LBB15_49: # %cond.store47
5097; AVX1-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
5098; AVX1-NEXT:    testl $33554432, %eax # imm = 0x2000000
5099; AVX1-NEXT:    je .LBB15_52
5100; AVX1-NEXT:  .LBB15_51: # %cond.store49
5101; AVX1-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
5102; AVX1-NEXT:    testl $67108864, %eax # imm = 0x4000000
5103; AVX1-NEXT:    je .LBB15_54
5104; AVX1-NEXT:  .LBB15_53: # %cond.store51
5105; AVX1-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
5106; AVX1-NEXT:    testl $134217728, %eax # imm = 0x8000000
5107; AVX1-NEXT:    je .LBB15_56
5108; AVX1-NEXT:  .LBB15_55: # %cond.store53
5109; AVX1-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
5110; AVX1-NEXT:    testl $268435456, %eax # imm = 0x10000000
5111; AVX1-NEXT:    je .LBB15_58
5112; AVX1-NEXT:  .LBB15_57: # %cond.store55
5113; AVX1-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
5114; AVX1-NEXT:    testl $536870912, %eax # imm = 0x20000000
5115; AVX1-NEXT:    je .LBB15_60
5116; AVX1-NEXT:  .LBB15_59: # %cond.store57
5117; AVX1-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
5118; AVX1-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5119; AVX1-NEXT:    je .LBB15_62
5120; AVX1-NEXT:  .LBB15_61: # %cond.store59
5121; AVX1-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
5122; AVX1-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5123; AVX1-NEXT:    je .LBB15_64
5124; AVX1-NEXT:  .LBB15_63: # %cond.store61
5125; AVX1-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
5126; AVX1-NEXT:    vzeroupper
5127; AVX1-NEXT:    retq
5128;
5129; AVX2-LABEL: truncstore_v32i16_v32i8:
5130; AVX2:       # %bb.0:
5131; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
5132; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
5133; AVX2-NEXT:    vpand %ymm4, %ymm1, %ymm1
5134; AVX2-NEXT:    vpand %ymm4, %ymm0, %ymm0
5135; AVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0
5136; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
5137; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm1
5138; AVX2-NEXT:    vpmovmskb %ymm1, %eax
5139; AVX2-NEXT:    notl %eax
5140; AVX2-NEXT:    testb $1, %al
5141; AVX2-NEXT:    jne .LBB15_1
5142; AVX2-NEXT:  # %bb.2: # %else
5143; AVX2-NEXT:    testb $2, %al
5144; AVX2-NEXT:    jne .LBB15_3
5145; AVX2-NEXT:  .LBB15_4: # %else2
5146; AVX2-NEXT:    testb $4, %al
5147; AVX2-NEXT:    jne .LBB15_5
5148; AVX2-NEXT:  .LBB15_6: # %else4
5149; AVX2-NEXT:    testb $8, %al
5150; AVX2-NEXT:    jne .LBB15_7
5151; AVX2-NEXT:  .LBB15_8: # %else6
5152; AVX2-NEXT:    testb $16, %al
5153; AVX2-NEXT:    jne .LBB15_9
5154; AVX2-NEXT:  .LBB15_10: # %else8
5155; AVX2-NEXT:    testb $32, %al
5156; AVX2-NEXT:    jne .LBB15_11
5157; AVX2-NEXT:  .LBB15_12: # %else10
5158; AVX2-NEXT:    testb $64, %al
5159; AVX2-NEXT:    jne .LBB15_13
5160; AVX2-NEXT:  .LBB15_14: # %else12
5161; AVX2-NEXT:    testb $-128, %al
5162; AVX2-NEXT:    jne .LBB15_15
5163; AVX2-NEXT:  .LBB15_16: # %else14
5164; AVX2-NEXT:    testl $256, %eax # imm = 0x100
5165; AVX2-NEXT:    jne .LBB15_17
5166; AVX2-NEXT:  .LBB15_18: # %else16
5167; AVX2-NEXT:    testl $512, %eax # imm = 0x200
5168; AVX2-NEXT:    jne .LBB15_19
5169; AVX2-NEXT:  .LBB15_20: # %else18
5170; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
5171; AVX2-NEXT:    jne .LBB15_21
5172; AVX2-NEXT:  .LBB15_22: # %else20
5173; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
5174; AVX2-NEXT:    jne .LBB15_23
5175; AVX2-NEXT:  .LBB15_24: # %else22
5176; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
5177; AVX2-NEXT:    jne .LBB15_25
5178; AVX2-NEXT:  .LBB15_26: # %else24
5179; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
5180; AVX2-NEXT:    jne .LBB15_27
5181; AVX2-NEXT:  .LBB15_28: # %else26
5182; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
5183; AVX2-NEXT:    jne .LBB15_29
5184; AVX2-NEXT:  .LBB15_30: # %else28
5185; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
5186; AVX2-NEXT:    je .LBB15_32
5187; AVX2-NEXT:  .LBB15_31: # %cond.store29
5188; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
5189; AVX2-NEXT:  .LBB15_32: # %else30
5190; AVX2-NEXT:    testl $65536, %eax # imm = 0x10000
5191; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
5192; AVX2-NEXT:    jne .LBB15_33
5193; AVX2-NEXT:  # %bb.34: # %else32
5194; AVX2-NEXT:    testl $131072, %eax # imm = 0x20000
5195; AVX2-NEXT:    jne .LBB15_35
5196; AVX2-NEXT:  .LBB15_36: # %else34
5197; AVX2-NEXT:    testl $262144, %eax # imm = 0x40000
5198; AVX2-NEXT:    jne .LBB15_37
5199; AVX2-NEXT:  .LBB15_38: # %else36
5200; AVX2-NEXT:    testl $524288, %eax # imm = 0x80000
5201; AVX2-NEXT:    jne .LBB15_39
5202; AVX2-NEXT:  .LBB15_40: # %else38
5203; AVX2-NEXT:    testl $1048576, %eax # imm = 0x100000
5204; AVX2-NEXT:    jne .LBB15_41
5205; AVX2-NEXT:  .LBB15_42: # %else40
5206; AVX2-NEXT:    testl $2097152, %eax # imm = 0x200000
5207; AVX2-NEXT:    jne .LBB15_43
5208; AVX2-NEXT:  .LBB15_44: # %else42
5209; AVX2-NEXT:    testl $4194304, %eax # imm = 0x400000
5210; AVX2-NEXT:    jne .LBB15_45
5211; AVX2-NEXT:  .LBB15_46: # %else44
5212; AVX2-NEXT:    testl $8388608, %eax # imm = 0x800000
5213; AVX2-NEXT:    jne .LBB15_47
5214; AVX2-NEXT:  .LBB15_48: # %else46
5215; AVX2-NEXT:    testl $16777216, %eax # imm = 0x1000000
5216; AVX2-NEXT:    jne .LBB15_49
5217; AVX2-NEXT:  .LBB15_50: # %else48
5218; AVX2-NEXT:    testl $33554432, %eax # imm = 0x2000000
5219; AVX2-NEXT:    jne .LBB15_51
5220; AVX2-NEXT:  .LBB15_52: # %else50
5221; AVX2-NEXT:    testl $67108864, %eax # imm = 0x4000000
5222; AVX2-NEXT:    jne .LBB15_53
5223; AVX2-NEXT:  .LBB15_54: # %else52
5224; AVX2-NEXT:    testl $134217728, %eax # imm = 0x8000000
5225; AVX2-NEXT:    jne .LBB15_55
5226; AVX2-NEXT:  .LBB15_56: # %else54
5227; AVX2-NEXT:    testl $268435456, %eax # imm = 0x10000000
5228; AVX2-NEXT:    jne .LBB15_57
5229; AVX2-NEXT:  .LBB15_58: # %else56
5230; AVX2-NEXT:    testl $536870912, %eax # imm = 0x20000000
5231; AVX2-NEXT:    jne .LBB15_59
5232; AVX2-NEXT:  .LBB15_60: # %else58
5233; AVX2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5234; AVX2-NEXT:    jne .LBB15_61
5235; AVX2-NEXT:  .LBB15_62: # %else60
5236; AVX2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5237; AVX2-NEXT:    jne .LBB15_63
5238; AVX2-NEXT:  .LBB15_64: # %else62
5239; AVX2-NEXT:    vzeroupper
5240; AVX2-NEXT:    retq
5241; AVX2-NEXT:  .LBB15_1: # %cond.store
5242; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
5243; AVX2-NEXT:    testb $2, %al
5244; AVX2-NEXT:    je .LBB15_4
5245; AVX2-NEXT:  .LBB15_3: # %cond.store1
5246; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5247; AVX2-NEXT:    testb $4, %al
5248; AVX2-NEXT:    je .LBB15_6
5249; AVX2-NEXT:  .LBB15_5: # %cond.store3
5250; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5251; AVX2-NEXT:    testb $8, %al
5252; AVX2-NEXT:    je .LBB15_8
5253; AVX2-NEXT:  .LBB15_7: # %cond.store5
5254; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5255; AVX2-NEXT:    testb $16, %al
5256; AVX2-NEXT:    je .LBB15_10
5257; AVX2-NEXT:  .LBB15_9: # %cond.store7
5258; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
5259; AVX2-NEXT:    testb $32, %al
5260; AVX2-NEXT:    je .LBB15_12
5261; AVX2-NEXT:  .LBB15_11: # %cond.store9
5262; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
5263; AVX2-NEXT:    testb $64, %al
5264; AVX2-NEXT:    je .LBB15_14
5265; AVX2-NEXT:  .LBB15_13: # %cond.store11
5266; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
5267; AVX2-NEXT:    testb $-128, %al
5268; AVX2-NEXT:    je .LBB15_16
5269; AVX2-NEXT:  .LBB15_15: # %cond.store13
5270; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
5271; AVX2-NEXT:    testl $256, %eax # imm = 0x100
5272; AVX2-NEXT:    je .LBB15_18
5273; AVX2-NEXT:  .LBB15_17: # %cond.store15
5274; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
5275; AVX2-NEXT:    testl $512, %eax # imm = 0x200
5276; AVX2-NEXT:    je .LBB15_20
5277; AVX2-NEXT:  .LBB15_19: # %cond.store17
5278; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
5279; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
5280; AVX2-NEXT:    je .LBB15_22
5281; AVX2-NEXT:  .LBB15_21: # %cond.store19
5282; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
5283; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
5284; AVX2-NEXT:    je .LBB15_24
5285; AVX2-NEXT:  .LBB15_23: # %cond.store21
5286; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
5287; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
5288; AVX2-NEXT:    je .LBB15_26
5289; AVX2-NEXT:  .LBB15_25: # %cond.store23
5290; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
5291; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
5292; AVX2-NEXT:    je .LBB15_28
5293; AVX2-NEXT:  .LBB15_27: # %cond.store25
5294; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
5295; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
5296; AVX2-NEXT:    je .LBB15_30
5297; AVX2-NEXT:  .LBB15_29: # %cond.store27
5298; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
5299; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
5300; AVX2-NEXT:    jne .LBB15_31
5301; AVX2-NEXT:    jmp .LBB15_32
5302; AVX2-NEXT:  .LBB15_33: # %cond.store31
5303; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
5304; AVX2-NEXT:    testl $131072, %eax # imm = 0x20000
5305; AVX2-NEXT:    je .LBB15_36
5306; AVX2-NEXT:  .LBB15_35: # %cond.store33
5307; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
5308; AVX2-NEXT:    testl $262144, %eax # imm = 0x40000
5309; AVX2-NEXT:    je .LBB15_38
5310; AVX2-NEXT:  .LBB15_37: # %cond.store35
5311; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
5312; AVX2-NEXT:    testl $524288, %eax # imm = 0x80000
5313; AVX2-NEXT:    je .LBB15_40
5314; AVX2-NEXT:  .LBB15_39: # %cond.store37
5315; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
5316; AVX2-NEXT:    testl $1048576, %eax # imm = 0x100000
5317; AVX2-NEXT:    je .LBB15_42
5318; AVX2-NEXT:  .LBB15_41: # %cond.store39
5319; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
5320; AVX2-NEXT:    testl $2097152, %eax # imm = 0x200000
5321; AVX2-NEXT:    je .LBB15_44
5322; AVX2-NEXT:  .LBB15_43: # %cond.store41
5323; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
5324; AVX2-NEXT:    testl $4194304, %eax # imm = 0x400000
5325; AVX2-NEXT:    je .LBB15_46
5326; AVX2-NEXT:  .LBB15_45: # %cond.store43
5327; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
5328; AVX2-NEXT:    testl $8388608, %eax # imm = 0x800000
5329; AVX2-NEXT:    je .LBB15_48
5330; AVX2-NEXT:  .LBB15_47: # %cond.store45
5331; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
5332; AVX2-NEXT:    testl $16777216, %eax # imm = 0x1000000
5333; AVX2-NEXT:    je .LBB15_50
5334; AVX2-NEXT:  .LBB15_49: # %cond.store47
5335; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
5336; AVX2-NEXT:    testl $33554432, %eax # imm = 0x2000000
5337; AVX2-NEXT:    je .LBB15_52
5338; AVX2-NEXT:  .LBB15_51: # %cond.store49
5339; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
5340; AVX2-NEXT:    testl $67108864, %eax # imm = 0x4000000
5341; AVX2-NEXT:    je .LBB15_54
5342; AVX2-NEXT:  .LBB15_53: # %cond.store51
5343; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
5344; AVX2-NEXT:    testl $134217728, %eax # imm = 0x8000000
5345; AVX2-NEXT:    je .LBB15_56
5346; AVX2-NEXT:  .LBB15_55: # %cond.store53
5347; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
5348; AVX2-NEXT:    testl $268435456, %eax # imm = 0x10000000
5349; AVX2-NEXT:    je .LBB15_58
5350; AVX2-NEXT:  .LBB15_57: # %cond.store55
5351; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
5352; AVX2-NEXT:    testl $536870912, %eax # imm = 0x20000000
5353; AVX2-NEXT:    je .LBB15_60
5354; AVX2-NEXT:  .LBB15_59: # %cond.store57
5355; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
5356; AVX2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5357; AVX2-NEXT:    je .LBB15_62
5358; AVX2-NEXT:  .LBB15_61: # %cond.store59
5359; AVX2-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
5360; AVX2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5361; AVX2-NEXT:    je .LBB15_64
5362; AVX2-NEXT:  .LBB15_63: # %cond.store61
5363; AVX2-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
5364; AVX2-NEXT:    vzeroupper
5365; AVX2-NEXT:    retq
5366;
5367; AVX512F-LABEL: truncstore_v32i16_v32i8:
5368; AVX512F:       # %bb.0:
5369; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5370; AVX512F-NEXT:    vpcmpeqb %ymm2, %ymm1, %ymm1
5371; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm2 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
5372; AVX512F-NEXT:    vpmovdb %zmm2, %xmm2
5373; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm0
5374; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
5375; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
5376; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm2, %ymm0
5377; AVX512F-NEXT:    vpmovmskb %ymm1, %eax
5378; AVX512F-NEXT:    notl %eax
5379; AVX512F-NEXT:    testb $1, %al
5380; AVX512F-NEXT:    jne .LBB15_1
5381; AVX512F-NEXT:  # %bb.2: # %else
5382; AVX512F-NEXT:    testb $2, %al
5383; AVX512F-NEXT:    jne .LBB15_3
5384; AVX512F-NEXT:  .LBB15_4: # %else2
5385; AVX512F-NEXT:    testb $4, %al
5386; AVX512F-NEXT:    jne .LBB15_5
5387; AVX512F-NEXT:  .LBB15_6: # %else4
5388; AVX512F-NEXT:    testb $8, %al
5389; AVX512F-NEXT:    jne .LBB15_7
5390; AVX512F-NEXT:  .LBB15_8: # %else6
5391; AVX512F-NEXT:    testb $16, %al
5392; AVX512F-NEXT:    jne .LBB15_9
5393; AVX512F-NEXT:  .LBB15_10: # %else8
5394; AVX512F-NEXT:    testb $32, %al
5395; AVX512F-NEXT:    jne .LBB15_11
5396; AVX512F-NEXT:  .LBB15_12: # %else10
5397; AVX512F-NEXT:    testb $64, %al
5398; AVX512F-NEXT:    jne .LBB15_13
5399; AVX512F-NEXT:  .LBB15_14: # %else12
5400; AVX512F-NEXT:    testb $-128, %al
5401; AVX512F-NEXT:    jne .LBB15_15
5402; AVX512F-NEXT:  .LBB15_16: # %else14
5403; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
5404; AVX512F-NEXT:    jne .LBB15_17
5405; AVX512F-NEXT:  .LBB15_18: # %else16
5406; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
5407; AVX512F-NEXT:    jne .LBB15_19
5408; AVX512F-NEXT:  .LBB15_20: # %else18
5409; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
5410; AVX512F-NEXT:    jne .LBB15_21
5411; AVX512F-NEXT:  .LBB15_22: # %else20
5412; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
5413; AVX512F-NEXT:    jne .LBB15_23
5414; AVX512F-NEXT:  .LBB15_24: # %else22
5415; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
5416; AVX512F-NEXT:    jne .LBB15_25
5417; AVX512F-NEXT:  .LBB15_26: # %else24
5418; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
5419; AVX512F-NEXT:    jne .LBB15_27
5420; AVX512F-NEXT:  .LBB15_28: # %else26
5421; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
5422; AVX512F-NEXT:    jne .LBB15_29
5423; AVX512F-NEXT:  .LBB15_30: # %else28
5424; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
5425; AVX512F-NEXT:    je .LBB15_32
5426; AVX512F-NEXT:  .LBB15_31: # %cond.store29
5427; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
5428; AVX512F-NEXT:  .LBB15_32: # %else30
5429; AVX512F-NEXT:    testl $65536, %eax # imm = 0x10000
5430; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
5431; AVX512F-NEXT:    jne .LBB15_33
5432; AVX512F-NEXT:  # %bb.34: # %else32
5433; AVX512F-NEXT:    testl $131072, %eax # imm = 0x20000
5434; AVX512F-NEXT:    jne .LBB15_35
5435; AVX512F-NEXT:  .LBB15_36: # %else34
5436; AVX512F-NEXT:    testl $262144, %eax # imm = 0x40000
5437; AVX512F-NEXT:    jne .LBB15_37
5438; AVX512F-NEXT:  .LBB15_38: # %else36
5439; AVX512F-NEXT:    testl $524288, %eax # imm = 0x80000
5440; AVX512F-NEXT:    jne .LBB15_39
5441; AVX512F-NEXT:  .LBB15_40: # %else38
5442; AVX512F-NEXT:    testl $1048576, %eax # imm = 0x100000
5443; AVX512F-NEXT:    jne .LBB15_41
5444; AVX512F-NEXT:  .LBB15_42: # %else40
5445; AVX512F-NEXT:    testl $2097152, %eax # imm = 0x200000
5446; AVX512F-NEXT:    jne .LBB15_43
5447; AVX512F-NEXT:  .LBB15_44: # %else42
5448; AVX512F-NEXT:    testl $4194304, %eax # imm = 0x400000
5449; AVX512F-NEXT:    jne .LBB15_45
5450; AVX512F-NEXT:  .LBB15_46: # %else44
5451; AVX512F-NEXT:    testl $8388608, %eax # imm = 0x800000
5452; AVX512F-NEXT:    jne .LBB15_47
5453; AVX512F-NEXT:  .LBB15_48: # %else46
5454; AVX512F-NEXT:    testl $16777216, %eax # imm = 0x1000000
5455; AVX512F-NEXT:    jne .LBB15_49
5456; AVX512F-NEXT:  .LBB15_50: # %else48
5457; AVX512F-NEXT:    testl $33554432, %eax # imm = 0x2000000
5458; AVX512F-NEXT:    jne .LBB15_51
5459; AVX512F-NEXT:  .LBB15_52: # %else50
5460; AVX512F-NEXT:    testl $67108864, %eax # imm = 0x4000000
5461; AVX512F-NEXT:    jne .LBB15_53
5462; AVX512F-NEXT:  .LBB15_54: # %else52
5463; AVX512F-NEXT:    testl $134217728, %eax # imm = 0x8000000
5464; AVX512F-NEXT:    jne .LBB15_55
5465; AVX512F-NEXT:  .LBB15_56: # %else54
5466; AVX512F-NEXT:    testl $268435456, %eax # imm = 0x10000000
5467; AVX512F-NEXT:    jne .LBB15_57
5468; AVX512F-NEXT:  .LBB15_58: # %else56
5469; AVX512F-NEXT:    testl $536870912, %eax # imm = 0x20000000
5470; AVX512F-NEXT:    jne .LBB15_59
5471; AVX512F-NEXT:  .LBB15_60: # %else58
5472; AVX512F-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5473; AVX512F-NEXT:    jne .LBB15_61
5474; AVX512F-NEXT:  .LBB15_62: # %else60
5475; AVX512F-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5476; AVX512F-NEXT:    jne .LBB15_63
5477; AVX512F-NEXT:  .LBB15_64: # %else62
5478; AVX512F-NEXT:    vzeroupper
5479; AVX512F-NEXT:    retq
5480; AVX512F-NEXT:  .LBB15_1: # %cond.store
5481; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
5482; AVX512F-NEXT:    testb $2, %al
5483; AVX512F-NEXT:    je .LBB15_4
5484; AVX512F-NEXT:  .LBB15_3: # %cond.store1
5485; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5486; AVX512F-NEXT:    testb $4, %al
5487; AVX512F-NEXT:    je .LBB15_6
5488; AVX512F-NEXT:  .LBB15_5: # %cond.store3
5489; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5490; AVX512F-NEXT:    testb $8, %al
5491; AVX512F-NEXT:    je .LBB15_8
5492; AVX512F-NEXT:  .LBB15_7: # %cond.store5
5493; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5494; AVX512F-NEXT:    testb $16, %al
5495; AVX512F-NEXT:    je .LBB15_10
5496; AVX512F-NEXT:  .LBB15_9: # %cond.store7
5497; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
5498; AVX512F-NEXT:    testb $32, %al
5499; AVX512F-NEXT:    je .LBB15_12
5500; AVX512F-NEXT:  .LBB15_11: # %cond.store9
5501; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
5502; AVX512F-NEXT:    testb $64, %al
5503; AVX512F-NEXT:    je .LBB15_14
5504; AVX512F-NEXT:  .LBB15_13: # %cond.store11
5505; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
5506; AVX512F-NEXT:    testb $-128, %al
5507; AVX512F-NEXT:    je .LBB15_16
5508; AVX512F-NEXT:  .LBB15_15: # %cond.store13
5509; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
5510; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
5511; AVX512F-NEXT:    je .LBB15_18
5512; AVX512F-NEXT:  .LBB15_17: # %cond.store15
5513; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
5514; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
5515; AVX512F-NEXT:    je .LBB15_20
5516; AVX512F-NEXT:  .LBB15_19: # %cond.store17
5517; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
5518; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
5519; AVX512F-NEXT:    je .LBB15_22
5520; AVX512F-NEXT:  .LBB15_21: # %cond.store19
5521; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
5522; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
5523; AVX512F-NEXT:    je .LBB15_24
5524; AVX512F-NEXT:  .LBB15_23: # %cond.store21
5525; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
5526; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
5527; AVX512F-NEXT:    je .LBB15_26
5528; AVX512F-NEXT:  .LBB15_25: # %cond.store23
5529; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
5530; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
5531; AVX512F-NEXT:    je .LBB15_28
5532; AVX512F-NEXT:  .LBB15_27: # %cond.store25
5533; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
5534; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
5535; AVX512F-NEXT:    je .LBB15_30
5536; AVX512F-NEXT:  .LBB15_29: # %cond.store27
5537; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
5538; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
5539; AVX512F-NEXT:    jne .LBB15_31
5540; AVX512F-NEXT:    jmp .LBB15_32
5541; AVX512F-NEXT:  .LBB15_33: # %cond.store31
5542; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
5543; AVX512F-NEXT:    testl $131072, %eax # imm = 0x20000
5544; AVX512F-NEXT:    je .LBB15_36
5545; AVX512F-NEXT:  .LBB15_35: # %cond.store33
5546; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
5547; AVX512F-NEXT:    testl $262144, %eax # imm = 0x40000
5548; AVX512F-NEXT:    je .LBB15_38
5549; AVX512F-NEXT:  .LBB15_37: # %cond.store35
5550; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
5551; AVX512F-NEXT:    testl $524288, %eax # imm = 0x80000
5552; AVX512F-NEXT:    je .LBB15_40
5553; AVX512F-NEXT:  .LBB15_39: # %cond.store37
5554; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
5555; AVX512F-NEXT:    testl $1048576, %eax # imm = 0x100000
5556; AVX512F-NEXT:    je .LBB15_42
5557; AVX512F-NEXT:  .LBB15_41: # %cond.store39
5558; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
5559; AVX512F-NEXT:    testl $2097152, %eax # imm = 0x200000
5560; AVX512F-NEXT:    je .LBB15_44
5561; AVX512F-NEXT:  .LBB15_43: # %cond.store41
5562; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
5563; AVX512F-NEXT:    testl $4194304, %eax # imm = 0x400000
5564; AVX512F-NEXT:    je .LBB15_46
5565; AVX512F-NEXT:  .LBB15_45: # %cond.store43
5566; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
5567; AVX512F-NEXT:    testl $8388608, %eax # imm = 0x800000
5568; AVX512F-NEXT:    je .LBB15_48
5569; AVX512F-NEXT:  .LBB15_47: # %cond.store45
5570; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
5571; AVX512F-NEXT:    testl $16777216, %eax # imm = 0x1000000
5572; AVX512F-NEXT:    je .LBB15_50
5573; AVX512F-NEXT:  .LBB15_49: # %cond.store47
5574; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
5575; AVX512F-NEXT:    testl $33554432, %eax # imm = 0x2000000
5576; AVX512F-NEXT:    je .LBB15_52
5577; AVX512F-NEXT:  .LBB15_51: # %cond.store49
5578; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
5579; AVX512F-NEXT:    testl $67108864, %eax # imm = 0x4000000
5580; AVX512F-NEXT:    je .LBB15_54
5581; AVX512F-NEXT:  .LBB15_53: # %cond.store51
5582; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
5583; AVX512F-NEXT:    testl $134217728, %eax # imm = 0x8000000
5584; AVX512F-NEXT:    je .LBB15_56
5585; AVX512F-NEXT:  .LBB15_55: # %cond.store53
5586; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
5587; AVX512F-NEXT:    testl $268435456, %eax # imm = 0x10000000
5588; AVX512F-NEXT:    je .LBB15_58
5589; AVX512F-NEXT:  .LBB15_57: # %cond.store55
5590; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
5591; AVX512F-NEXT:    testl $536870912, %eax # imm = 0x20000000
5592; AVX512F-NEXT:    je .LBB15_60
5593; AVX512F-NEXT:  .LBB15_59: # %cond.store57
5594; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
5595; AVX512F-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5596; AVX512F-NEXT:    je .LBB15_62
5597; AVX512F-NEXT:  .LBB15_61: # %cond.store59
5598; AVX512F-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
5599; AVX512F-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5600; AVX512F-NEXT:    je .LBB15_64
5601; AVX512F-NEXT:  .LBB15_63: # %cond.store61
5602; AVX512F-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
5603; AVX512F-NEXT:    vzeroupper
5604; AVX512F-NEXT:    retq
5605;
5606; AVX512BW-LABEL: truncstore_v32i16_v32i8:
5607; AVX512BW:       # %bb.0:
5608; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
5609; AVX512BW-NEXT:    vptestmb %zmm1, %zmm1, %k1
5610; AVX512BW-NEXT:    vpmovwb %zmm0, (%rdi) {%k1}
5611; AVX512BW-NEXT:    vzeroupper
5612; AVX512BW-NEXT:    retq
5613;
5614; AVX512BWVL-LABEL: truncstore_v32i16_v32i8:
5615; AVX512BWVL:       # %bb.0:
5616; AVX512BWVL-NEXT:    vptestmb %ymm1, %ymm1, %k1
5617; AVX512BWVL-NEXT:    vpmovwb %zmm0, (%rdi) {%k1}
5618; AVX512BWVL-NEXT:    vzeroupper
5619; AVX512BWVL-NEXT:    retq
5620  %a = icmp ne <32 x i8> %mask, zeroinitializer
5621  %b = trunc <32 x i16> %x to <32 x i8>
5622  call void @llvm.masked.store.v32i8.p0v32i8(<32 x i8> %b, <32 x i8>* %p, i32 1, <32 x i1> %a)
5623  ret void
5624}
5625
5626define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %mask) {
5627; SSE2-LABEL: truncstore_v16i16_v16i8:
5628; SSE2:       # %bb.0:
5629; SSE2-NEXT:    pxor %xmm3, %xmm3
5630; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
5631; SSE2-NEXT:    pand %xmm4, %xmm1
5632; SSE2-NEXT:    pand %xmm4, %xmm0
5633; SSE2-NEXT:    packuswb %xmm1, %xmm0
5634; SSE2-NEXT:    pcmpeqb %xmm2, %xmm3
5635; SSE2-NEXT:    pmovmskb %xmm3, %eax
5636; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
5637; SSE2-NEXT:    testb $1, %al
5638; SSE2-NEXT:    movd %xmm0, %ecx
5639; SSE2-NEXT:    jne .LBB16_1
5640; SSE2-NEXT:  # %bb.2: # %else
5641; SSE2-NEXT:    testb $2, %al
5642; SSE2-NEXT:    jne .LBB16_3
5643; SSE2-NEXT:  .LBB16_4: # %else2
5644; SSE2-NEXT:    testb $4, %al
5645; SSE2-NEXT:    jne .LBB16_5
5646; SSE2-NEXT:  .LBB16_6: # %else4
5647; SSE2-NEXT:    testb $8, %al
5648; SSE2-NEXT:    je .LBB16_8
5649; SSE2-NEXT:  .LBB16_7: # %cond.store5
5650; SSE2-NEXT:    shrl $24, %ecx
5651; SSE2-NEXT:    movb %cl, 3(%rdi)
5652; SSE2-NEXT:  .LBB16_8: # %else6
5653; SSE2-NEXT:    testb $16, %al
5654; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
5655; SSE2-NEXT:    je .LBB16_10
5656; SSE2-NEXT:  # %bb.9: # %cond.store7
5657; SSE2-NEXT:    movb %cl, 4(%rdi)
5658; SSE2-NEXT:  .LBB16_10: # %else8
5659; SSE2-NEXT:    testb $32, %al
5660; SSE2-NEXT:    je .LBB16_12
5661; SSE2-NEXT:  # %bb.11: # %cond.store9
5662; SSE2-NEXT:    movb %ch, 5(%rdi)
5663; SSE2-NEXT:  .LBB16_12: # %else10
5664; SSE2-NEXT:    testb $64, %al
5665; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
5666; SSE2-NEXT:    je .LBB16_14
5667; SSE2-NEXT:  # %bb.13: # %cond.store11
5668; SSE2-NEXT:    movb %cl, 6(%rdi)
5669; SSE2-NEXT:  .LBB16_14: # %else12
5670; SSE2-NEXT:    testb $-128, %al
5671; SSE2-NEXT:    je .LBB16_16
5672; SSE2-NEXT:  # %bb.15: # %cond.store13
5673; SSE2-NEXT:    movb %ch, 7(%rdi)
5674; SSE2-NEXT:  .LBB16_16: # %else14
5675; SSE2-NEXT:    testl $256, %eax # imm = 0x100
5676; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
5677; SSE2-NEXT:    je .LBB16_18
5678; SSE2-NEXT:  # %bb.17: # %cond.store15
5679; SSE2-NEXT:    movb %cl, 8(%rdi)
5680; SSE2-NEXT:  .LBB16_18: # %else16
5681; SSE2-NEXT:    testl $512, %eax # imm = 0x200
5682; SSE2-NEXT:    je .LBB16_20
5683; SSE2-NEXT:  # %bb.19: # %cond.store17
5684; SSE2-NEXT:    movb %ch, 9(%rdi)
5685; SSE2-NEXT:  .LBB16_20: # %else18
5686; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
5687; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
5688; SSE2-NEXT:    je .LBB16_22
5689; SSE2-NEXT:  # %bb.21: # %cond.store19
5690; SSE2-NEXT:    movb %cl, 10(%rdi)
5691; SSE2-NEXT:  .LBB16_22: # %else20
5692; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
5693; SSE2-NEXT:    je .LBB16_24
5694; SSE2-NEXT:  # %bb.23: # %cond.store21
5695; SSE2-NEXT:    movb %ch, 11(%rdi)
5696; SSE2-NEXT:  .LBB16_24: # %else22
5697; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
5698; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
5699; SSE2-NEXT:    je .LBB16_26
5700; SSE2-NEXT:  # %bb.25: # %cond.store23
5701; SSE2-NEXT:    movb %cl, 12(%rdi)
5702; SSE2-NEXT:  .LBB16_26: # %else24
5703; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
5704; SSE2-NEXT:    je .LBB16_28
5705; SSE2-NEXT:  # %bb.27: # %cond.store25
5706; SSE2-NEXT:    movb %ch, 13(%rdi)
5707; SSE2-NEXT:  .LBB16_28: # %else26
5708; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
5709; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
5710; SSE2-NEXT:    jne .LBB16_29
5711; SSE2-NEXT:  # %bb.30: # %else28
5712; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
5713; SSE2-NEXT:    jne .LBB16_31
5714; SSE2-NEXT:  .LBB16_32: # %else30
5715; SSE2-NEXT:    retq
5716; SSE2-NEXT:  .LBB16_1: # %cond.store
5717; SSE2-NEXT:    movb %cl, (%rdi)
5718; SSE2-NEXT:    testb $2, %al
5719; SSE2-NEXT:    je .LBB16_4
5720; SSE2-NEXT:  .LBB16_3: # %cond.store1
5721; SSE2-NEXT:    movb %ch, 1(%rdi)
5722; SSE2-NEXT:    testb $4, %al
5723; SSE2-NEXT:    je .LBB16_6
5724; SSE2-NEXT:  .LBB16_5: # %cond.store3
5725; SSE2-NEXT:    movl %ecx, %edx
5726; SSE2-NEXT:    shrl $16, %edx
5727; SSE2-NEXT:    movb %dl, 2(%rdi)
5728; SSE2-NEXT:    testb $8, %al
5729; SSE2-NEXT:    jne .LBB16_7
5730; SSE2-NEXT:    jmp .LBB16_8
5731; SSE2-NEXT:  .LBB16_29: # %cond.store27
5732; SSE2-NEXT:    movb %cl, 14(%rdi)
5733; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
5734; SSE2-NEXT:    je .LBB16_32
5735; SSE2-NEXT:  .LBB16_31: # %cond.store29
5736; SSE2-NEXT:    movb %ch, 15(%rdi)
5737; SSE2-NEXT:    retq
5738;
5739; SSE4-LABEL: truncstore_v16i16_v16i8:
5740; SSE4:       # %bb.0:
5741; SSE4-NEXT:    pxor %xmm3, %xmm3
5742; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
5743; SSE4-NEXT:    pand %xmm4, %xmm1
5744; SSE4-NEXT:    pand %xmm4, %xmm0
5745; SSE4-NEXT:    packuswb %xmm1, %xmm0
5746; SSE4-NEXT:    pcmpeqb %xmm2, %xmm3
5747; SSE4-NEXT:    pmovmskb %xmm3, %eax
5748; SSE4-NEXT:    xorl $65535, %eax # imm = 0xFFFF
5749; SSE4-NEXT:    testb $1, %al
5750; SSE4-NEXT:    jne .LBB16_1
5751; SSE4-NEXT:  # %bb.2: # %else
5752; SSE4-NEXT:    testb $2, %al
5753; SSE4-NEXT:    jne .LBB16_3
5754; SSE4-NEXT:  .LBB16_4: # %else2
5755; SSE4-NEXT:    testb $4, %al
5756; SSE4-NEXT:    jne .LBB16_5
5757; SSE4-NEXT:  .LBB16_6: # %else4
5758; SSE4-NEXT:    testb $8, %al
5759; SSE4-NEXT:    jne .LBB16_7
5760; SSE4-NEXT:  .LBB16_8: # %else6
5761; SSE4-NEXT:    testb $16, %al
5762; SSE4-NEXT:    jne .LBB16_9
5763; SSE4-NEXT:  .LBB16_10: # %else8
5764; SSE4-NEXT:    testb $32, %al
5765; SSE4-NEXT:    jne .LBB16_11
5766; SSE4-NEXT:  .LBB16_12: # %else10
5767; SSE4-NEXT:    testb $64, %al
5768; SSE4-NEXT:    jne .LBB16_13
5769; SSE4-NEXT:  .LBB16_14: # %else12
5770; SSE4-NEXT:    testb $-128, %al
5771; SSE4-NEXT:    jne .LBB16_15
5772; SSE4-NEXT:  .LBB16_16: # %else14
5773; SSE4-NEXT:    testl $256, %eax # imm = 0x100
5774; SSE4-NEXT:    jne .LBB16_17
5775; SSE4-NEXT:  .LBB16_18: # %else16
5776; SSE4-NEXT:    testl $512, %eax # imm = 0x200
5777; SSE4-NEXT:    jne .LBB16_19
5778; SSE4-NEXT:  .LBB16_20: # %else18
5779; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
5780; SSE4-NEXT:    jne .LBB16_21
5781; SSE4-NEXT:  .LBB16_22: # %else20
5782; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
5783; SSE4-NEXT:    jne .LBB16_23
5784; SSE4-NEXT:  .LBB16_24: # %else22
5785; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
5786; SSE4-NEXT:    jne .LBB16_25
5787; SSE4-NEXT:  .LBB16_26: # %else24
5788; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
5789; SSE4-NEXT:    jne .LBB16_27
5790; SSE4-NEXT:  .LBB16_28: # %else26
5791; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
5792; SSE4-NEXT:    jne .LBB16_29
5793; SSE4-NEXT:  .LBB16_30: # %else28
5794; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
5795; SSE4-NEXT:    jne .LBB16_31
5796; SSE4-NEXT:  .LBB16_32: # %else30
5797; SSE4-NEXT:    retq
5798; SSE4-NEXT:  .LBB16_1: # %cond.store
5799; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
5800; SSE4-NEXT:    testb $2, %al
5801; SSE4-NEXT:    je .LBB16_4
5802; SSE4-NEXT:  .LBB16_3: # %cond.store1
5803; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
5804; SSE4-NEXT:    testb $4, %al
5805; SSE4-NEXT:    je .LBB16_6
5806; SSE4-NEXT:  .LBB16_5: # %cond.store3
5807; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
5808; SSE4-NEXT:    testb $8, %al
5809; SSE4-NEXT:    je .LBB16_8
5810; SSE4-NEXT:  .LBB16_7: # %cond.store5
5811; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
5812; SSE4-NEXT:    testb $16, %al
5813; SSE4-NEXT:    je .LBB16_10
5814; SSE4-NEXT:  .LBB16_9: # %cond.store7
5815; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
5816; SSE4-NEXT:    testb $32, %al
5817; SSE4-NEXT:    je .LBB16_12
5818; SSE4-NEXT:  .LBB16_11: # %cond.store9
5819; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
5820; SSE4-NEXT:    testb $64, %al
5821; SSE4-NEXT:    je .LBB16_14
5822; SSE4-NEXT:  .LBB16_13: # %cond.store11
5823; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
5824; SSE4-NEXT:    testb $-128, %al
5825; SSE4-NEXT:    je .LBB16_16
5826; SSE4-NEXT:  .LBB16_15: # %cond.store13
5827; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
5828; SSE4-NEXT:    testl $256, %eax # imm = 0x100
5829; SSE4-NEXT:    je .LBB16_18
5830; SSE4-NEXT:  .LBB16_17: # %cond.store15
5831; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
5832; SSE4-NEXT:    testl $512, %eax # imm = 0x200
5833; SSE4-NEXT:    je .LBB16_20
5834; SSE4-NEXT:  .LBB16_19: # %cond.store17
5835; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
5836; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
5837; SSE4-NEXT:    je .LBB16_22
5838; SSE4-NEXT:  .LBB16_21: # %cond.store19
5839; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
5840; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
5841; SSE4-NEXT:    je .LBB16_24
5842; SSE4-NEXT:  .LBB16_23: # %cond.store21
5843; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
5844; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
5845; SSE4-NEXT:    je .LBB16_26
5846; SSE4-NEXT:  .LBB16_25: # %cond.store23
5847; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
5848; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
5849; SSE4-NEXT:    je .LBB16_28
5850; SSE4-NEXT:  .LBB16_27: # %cond.store25
5851; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
5852; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
5853; SSE4-NEXT:    je .LBB16_30
5854; SSE4-NEXT:  .LBB16_29: # %cond.store27
5855; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
5856; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
5857; SSE4-NEXT:    je .LBB16_32
5858; SSE4-NEXT:  .LBB16_31: # %cond.store29
5859; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
5860; SSE4-NEXT:    retq
5861;
5862; AVX1-LABEL: truncstore_v16i16_v16i8:
5863; AVX1:       # %bb.0:
5864; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5865; AVX1-NEXT:    vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
5866; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
5867; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
5868; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
5869; AVX1-NEXT:    vpmovmskb %xmm1, %eax
5870; AVX1-NEXT:    xorl $65535, %eax # imm = 0xFFFF
5871; AVX1-NEXT:    testb $1, %al
5872; AVX1-NEXT:    jne .LBB16_1
5873; AVX1-NEXT:  # %bb.2: # %else
5874; AVX1-NEXT:    testb $2, %al
5875; AVX1-NEXT:    jne .LBB16_3
5876; AVX1-NEXT:  .LBB16_4: # %else2
5877; AVX1-NEXT:    testb $4, %al
5878; AVX1-NEXT:    jne .LBB16_5
5879; AVX1-NEXT:  .LBB16_6: # %else4
5880; AVX1-NEXT:    testb $8, %al
5881; AVX1-NEXT:    jne .LBB16_7
5882; AVX1-NEXT:  .LBB16_8: # %else6
5883; AVX1-NEXT:    testb $16, %al
5884; AVX1-NEXT:    jne .LBB16_9
5885; AVX1-NEXT:  .LBB16_10: # %else8
5886; AVX1-NEXT:    testb $32, %al
5887; AVX1-NEXT:    jne .LBB16_11
5888; AVX1-NEXT:  .LBB16_12: # %else10
5889; AVX1-NEXT:    testb $64, %al
5890; AVX1-NEXT:    jne .LBB16_13
5891; AVX1-NEXT:  .LBB16_14: # %else12
5892; AVX1-NEXT:    testb $-128, %al
5893; AVX1-NEXT:    jne .LBB16_15
5894; AVX1-NEXT:  .LBB16_16: # %else14
5895; AVX1-NEXT:    testl $256, %eax # imm = 0x100
5896; AVX1-NEXT:    jne .LBB16_17
5897; AVX1-NEXT:  .LBB16_18: # %else16
5898; AVX1-NEXT:    testl $512, %eax # imm = 0x200
5899; AVX1-NEXT:    jne .LBB16_19
5900; AVX1-NEXT:  .LBB16_20: # %else18
5901; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
5902; AVX1-NEXT:    jne .LBB16_21
5903; AVX1-NEXT:  .LBB16_22: # %else20
5904; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
5905; AVX1-NEXT:    jne .LBB16_23
5906; AVX1-NEXT:  .LBB16_24: # %else22
5907; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
5908; AVX1-NEXT:    jne .LBB16_25
5909; AVX1-NEXT:  .LBB16_26: # %else24
5910; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
5911; AVX1-NEXT:    jne .LBB16_27
5912; AVX1-NEXT:  .LBB16_28: # %else26
5913; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
5914; AVX1-NEXT:    jne .LBB16_29
5915; AVX1-NEXT:  .LBB16_30: # %else28
5916; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
5917; AVX1-NEXT:    jne .LBB16_31
5918; AVX1-NEXT:  .LBB16_32: # %else30
5919; AVX1-NEXT:    vzeroupper
5920; AVX1-NEXT:    retq
5921; AVX1-NEXT:  .LBB16_1: # %cond.store
5922; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
5923; AVX1-NEXT:    testb $2, %al
5924; AVX1-NEXT:    je .LBB16_4
5925; AVX1-NEXT:  .LBB16_3: # %cond.store1
5926; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5927; AVX1-NEXT:    testb $4, %al
5928; AVX1-NEXT:    je .LBB16_6
5929; AVX1-NEXT:  .LBB16_5: # %cond.store3
5930; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5931; AVX1-NEXT:    testb $8, %al
5932; AVX1-NEXT:    je .LBB16_8
5933; AVX1-NEXT:  .LBB16_7: # %cond.store5
5934; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5935; AVX1-NEXT:    testb $16, %al
5936; AVX1-NEXT:    je .LBB16_10
5937; AVX1-NEXT:  .LBB16_9: # %cond.store7
5938; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
5939; AVX1-NEXT:    testb $32, %al
5940; AVX1-NEXT:    je .LBB16_12
5941; AVX1-NEXT:  .LBB16_11: # %cond.store9
5942; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
5943; AVX1-NEXT:    testb $64, %al
5944; AVX1-NEXT:    je .LBB16_14
5945; AVX1-NEXT:  .LBB16_13: # %cond.store11
5946; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
5947; AVX1-NEXT:    testb $-128, %al
5948; AVX1-NEXT:    je .LBB16_16
5949; AVX1-NEXT:  .LBB16_15: # %cond.store13
5950; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
5951; AVX1-NEXT:    testl $256, %eax # imm = 0x100
5952; AVX1-NEXT:    je .LBB16_18
5953; AVX1-NEXT:  .LBB16_17: # %cond.store15
5954; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
5955; AVX1-NEXT:    testl $512, %eax # imm = 0x200
5956; AVX1-NEXT:    je .LBB16_20
5957; AVX1-NEXT:  .LBB16_19: # %cond.store17
5958; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
5959; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
5960; AVX1-NEXT:    je .LBB16_22
5961; AVX1-NEXT:  .LBB16_21: # %cond.store19
5962; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
5963; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
5964; AVX1-NEXT:    je .LBB16_24
5965; AVX1-NEXT:  .LBB16_23: # %cond.store21
5966; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
5967; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
5968; AVX1-NEXT:    je .LBB16_26
5969; AVX1-NEXT:  .LBB16_25: # %cond.store23
5970; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
5971; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
5972; AVX1-NEXT:    je .LBB16_28
5973; AVX1-NEXT:  .LBB16_27: # %cond.store25
5974; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
5975; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
5976; AVX1-NEXT:    je .LBB16_30
5977; AVX1-NEXT:  .LBB16_29: # %cond.store27
5978; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
5979; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
5980; AVX1-NEXT:    je .LBB16_32
5981; AVX1-NEXT:  .LBB16_31: # %cond.store29
5982; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
5983; AVX1-NEXT:    vzeroupper
5984; AVX1-NEXT:    retq
5985;
5986; AVX2-LABEL: truncstore_v16i16_v16i8:
5987; AVX2:       # %bb.0:
5988; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5989; AVX2-NEXT:    vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
5990; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
5991; AVX2-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
5992; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
5993; AVX2-NEXT:    vpmovmskb %xmm1, %eax
5994; AVX2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
5995; AVX2-NEXT:    testb $1, %al
5996; AVX2-NEXT:    jne .LBB16_1
5997; AVX2-NEXT:  # %bb.2: # %else
5998; AVX2-NEXT:    testb $2, %al
5999; AVX2-NEXT:    jne .LBB16_3
6000; AVX2-NEXT:  .LBB16_4: # %else2
6001; AVX2-NEXT:    testb $4, %al
6002; AVX2-NEXT:    jne .LBB16_5
6003; AVX2-NEXT:  .LBB16_6: # %else4
6004; AVX2-NEXT:    testb $8, %al
6005; AVX2-NEXT:    jne .LBB16_7
6006; AVX2-NEXT:  .LBB16_8: # %else6
6007; AVX2-NEXT:    testb $16, %al
6008; AVX2-NEXT:    jne .LBB16_9
6009; AVX2-NEXT:  .LBB16_10: # %else8
6010; AVX2-NEXT:    testb $32, %al
6011; AVX2-NEXT:    jne .LBB16_11
6012; AVX2-NEXT:  .LBB16_12: # %else10
6013; AVX2-NEXT:    testb $64, %al
6014; AVX2-NEXT:    jne .LBB16_13
6015; AVX2-NEXT:  .LBB16_14: # %else12
6016; AVX2-NEXT:    testb $-128, %al
6017; AVX2-NEXT:    jne .LBB16_15
6018; AVX2-NEXT:  .LBB16_16: # %else14
6019; AVX2-NEXT:    testl $256, %eax # imm = 0x100
6020; AVX2-NEXT:    jne .LBB16_17
6021; AVX2-NEXT:  .LBB16_18: # %else16
6022; AVX2-NEXT:    testl $512, %eax # imm = 0x200
6023; AVX2-NEXT:    jne .LBB16_19
6024; AVX2-NEXT:  .LBB16_20: # %else18
6025; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
6026; AVX2-NEXT:    jne .LBB16_21
6027; AVX2-NEXT:  .LBB16_22: # %else20
6028; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
6029; AVX2-NEXT:    jne .LBB16_23
6030; AVX2-NEXT:  .LBB16_24: # %else22
6031; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
6032; AVX2-NEXT:    jne .LBB16_25
6033; AVX2-NEXT:  .LBB16_26: # %else24
6034; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
6035; AVX2-NEXT:    jne .LBB16_27
6036; AVX2-NEXT:  .LBB16_28: # %else26
6037; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
6038; AVX2-NEXT:    jne .LBB16_29
6039; AVX2-NEXT:  .LBB16_30: # %else28
6040; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
6041; AVX2-NEXT:    jne .LBB16_31
6042; AVX2-NEXT:  .LBB16_32: # %else30
6043; AVX2-NEXT:    vzeroupper
6044; AVX2-NEXT:    retq
6045; AVX2-NEXT:  .LBB16_1: # %cond.store
6046; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
6047; AVX2-NEXT:    testb $2, %al
6048; AVX2-NEXT:    je .LBB16_4
6049; AVX2-NEXT:  .LBB16_3: # %cond.store1
6050; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6051; AVX2-NEXT:    testb $4, %al
6052; AVX2-NEXT:    je .LBB16_6
6053; AVX2-NEXT:  .LBB16_5: # %cond.store3
6054; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6055; AVX2-NEXT:    testb $8, %al
6056; AVX2-NEXT:    je .LBB16_8
6057; AVX2-NEXT:  .LBB16_7: # %cond.store5
6058; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6059; AVX2-NEXT:    testb $16, %al
6060; AVX2-NEXT:    je .LBB16_10
6061; AVX2-NEXT:  .LBB16_9: # %cond.store7
6062; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6063; AVX2-NEXT:    testb $32, %al
6064; AVX2-NEXT:    je .LBB16_12
6065; AVX2-NEXT:  .LBB16_11: # %cond.store9
6066; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6067; AVX2-NEXT:    testb $64, %al
6068; AVX2-NEXT:    je .LBB16_14
6069; AVX2-NEXT:  .LBB16_13: # %cond.store11
6070; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6071; AVX2-NEXT:    testb $-128, %al
6072; AVX2-NEXT:    je .LBB16_16
6073; AVX2-NEXT:  .LBB16_15: # %cond.store13
6074; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6075; AVX2-NEXT:    testl $256, %eax # imm = 0x100
6076; AVX2-NEXT:    je .LBB16_18
6077; AVX2-NEXT:  .LBB16_17: # %cond.store15
6078; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6079; AVX2-NEXT:    testl $512, %eax # imm = 0x200
6080; AVX2-NEXT:    je .LBB16_20
6081; AVX2-NEXT:  .LBB16_19: # %cond.store17
6082; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6083; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
6084; AVX2-NEXT:    je .LBB16_22
6085; AVX2-NEXT:  .LBB16_21: # %cond.store19
6086; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6087; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
6088; AVX2-NEXT:    je .LBB16_24
6089; AVX2-NEXT:  .LBB16_23: # %cond.store21
6090; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6091; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
6092; AVX2-NEXT:    je .LBB16_26
6093; AVX2-NEXT:  .LBB16_25: # %cond.store23
6094; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6095; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
6096; AVX2-NEXT:    je .LBB16_28
6097; AVX2-NEXT:  .LBB16_27: # %cond.store25
6098; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6099; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
6100; AVX2-NEXT:    je .LBB16_30
6101; AVX2-NEXT:  .LBB16_29: # %cond.store27
6102; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6103; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
6104; AVX2-NEXT:    je .LBB16_32
6105; AVX2-NEXT:  .LBB16_31: # %cond.store29
6106; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6107; AVX2-NEXT:    vzeroupper
6108; AVX2-NEXT:    retq
6109;
6110; AVX512F-LABEL: truncstore_v16i16_v16i8:
6111; AVX512F:       # %bb.0:
6112; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6113; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
6114; AVX512F-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
6115; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
6116; AVX512F-NEXT:    vpmovmskb %xmm1, %eax
6117; AVX512F-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6118; AVX512F-NEXT:    testb $1, %al
6119; AVX512F-NEXT:    jne .LBB16_1
6120; AVX512F-NEXT:  # %bb.2: # %else
6121; AVX512F-NEXT:    testb $2, %al
6122; AVX512F-NEXT:    jne .LBB16_3
6123; AVX512F-NEXT:  .LBB16_4: # %else2
6124; AVX512F-NEXT:    testb $4, %al
6125; AVX512F-NEXT:    jne .LBB16_5
6126; AVX512F-NEXT:  .LBB16_6: # %else4
6127; AVX512F-NEXT:    testb $8, %al
6128; AVX512F-NEXT:    jne .LBB16_7
6129; AVX512F-NEXT:  .LBB16_8: # %else6
6130; AVX512F-NEXT:    testb $16, %al
6131; AVX512F-NEXT:    jne .LBB16_9
6132; AVX512F-NEXT:  .LBB16_10: # %else8
6133; AVX512F-NEXT:    testb $32, %al
6134; AVX512F-NEXT:    jne .LBB16_11
6135; AVX512F-NEXT:  .LBB16_12: # %else10
6136; AVX512F-NEXT:    testb $64, %al
6137; AVX512F-NEXT:    jne .LBB16_13
6138; AVX512F-NEXT:  .LBB16_14: # %else12
6139; AVX512F-NEXT:    testb $-128, %al
6140; AVX512F-NEXT:    jne .LBB16_15
6141; AVX512F-NEXT:  .LBB16_16: # %else14
6142; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
6143; AVX512F-NEXT:    jne .LBB16_17
6144; AVX512F-NEXT:  .LBB16_18: # %else16
6145; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
6146; AVX512F-NEXT:    jne .LBB16_19
6147; AVX512F-NEXT:  .LBB16_20: # %else18
6148; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
6149; AVX512F-NEXT:    jne .LBB16_21
6150; AVX512F-NEXT:  .LBB16_22: # %else20
6151; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
6152; AVX512F-NEXT:    jne .LBB16_23
6153; AVX512F-NEXT:  .LBB16_24: # %else22
6154; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
6155; AVX512F-NEXT:    jne .LBB16_25
6156; AVX512F-NEXT:  .LBB16_26: # %else24
6157; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
6158; AVX512F-NEXT:    jne .LBB16_27
6159; AVX512F-NEXT:  .LBB16_28: # %else26
6160; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
6161; AVX512F-NEXT:    jne .LBB16_29
6162; AVX512F-NEXT:  .LBB16_30: # %else28
6163; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
6164; AVX512F-NEXT:    jne .LBB16_31
6165; AVX512F-NEXT:  .LBB16_32: # %else30
6166; AVX512F-NEXT:    vzeroupper
6167; AVX512F-NEXT:    retq
6168; AVX512F-NEXT:  .LBB16_1: # %cond.store
6169; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
6170; AVX512F-NEXT:    testb $2, %al
6171; AVX512F-NEXT:    je .LBB16_4
6172; AVX512F-NEXT:  .LBB16_3: # %cond.store1
6173; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6174; AVX512F-NEXT:    testb $4, %al
6175; AVX512F-NEXT:    je .LBB16_6
6176; AVX512F-NEXT:  .LBB16_5: # %cond.store3
6177; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6178; AVX512F-NEXT:    testb $8, %al
6179; AVX512F-NEXT:    je .LBB16_8
6180; AVX512F-NEXT:  .LBB16_7: # %cond.store5
6181; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6182; AVX512F-NEXT:    testb $16, %al
6183; AVX512F-NEXT:    je .LBB16_10
6184; AVX512F-NEXT:  .LBB16_9: # %cond.store7
6185; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6186; AVX512F-NEXT:    testb $32, %al
6187; AVX512F-NEXT:    je .LBB16_12
6188; AVX512F-NEXT:  .LBB16_11: # %cond.store9
6189; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6190; AVX512F-NEXT:    testb $64, %al
6191; AVX512F-NEXT:    je .LBB16_14
6192; AVX512F-NEXT:  .LBB16_13: # %cond.store11
6193; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6194; AVX512F-NEXT:    testb $-128, %al
6195; AVX512F-NEXT:    je .LBB16_16
6196; AVX512F-NEXT:  .LBB16_15: # %cond.store13
6197; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6198; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
6199; AVX512F-NEXT:    je .LBB16_18
6200; AVX512F-NEXT:  .LBB16_17: # %cond.store15
6201; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6202; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
6203; AVX512F-NEXT:    je .LBB16_20
6204; AVX512F-NEXT:  .LBB16_19: # %cond.store17
6205; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6206; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
6207; AVX512F-NEXT:    je .LBB16_22
6208; AVX512F-NEXT:  .LBB16_21: # %cond.store19
6209; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6210; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
6211; AVX512F-NEXT:    je .LBB16_24
6212; AVX512F-NEXT:  .LBB16_23: # %cond.store21
6213; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6214; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
6215; AVX512F-NEXT:    je .LBB16_26
6216; AVX512F-NEXT:  .LBB16_25: # %cond.store23
6217; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6218; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
6219; AVX512F-NEXT:    je .LBB16_28
6220; AVX512F-NEXT:  .LBB16_27: # %cond.store25
6221; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6222; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
6223; AVX512F-NEXT:    je .LBB16_30
6224; AVX512F-NEXT:  .LBB16_29: # %cond.store27
6225; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6226; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
6227; AVX512F-NEXT:    je .LBB16_32
6228; AVX512F-NEXT:  .LBB16_31: # %cond.store29
6229; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6230; AVX512F-NEXT:    vzeroupper
6231; AVX512F-NEXT:    retq
6232;
6233; AVX512BW-LABEL: truncstore_v16i16_v16i8:
6234; AVX512BW:       # %bb.0:
6235; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
6236; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
6237; AVX512BW-NEXT:    vptestmb %zmm1, %zmm1, %k0
6238; AVX512BW-NEXT:    kmovw %k0, %k1
6239; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
6240; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
6241; AVX512BW-NEXT:    vzeroupper
6242; AVX512BW-NEXT:    retq
6243;
6244; AVX512BWVL-LABEL: truncstore_v16i16_v16i8:
6245; AVX512BWVL:       # %bb.0:
6246; AVX512BWVL-NEXT:    vptestmb %xmm1, %xmm1, %k1
6247; AVX512BWVL-NEXT:    vpmovwb %ymm0, (%rdi) {%k1}
6248; AVX512BWVL-NEXT:    vzeroupper
6249; AVX512BWVL-NEXT:    retq
6250  %a = icmp ne <16 x i8> %mask, zeroinitializer
6251  %b = trunc <16 x i16> %x to <16 x i8>
6252  call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %b, <16 x i8>* %p, i32 1, <16 x i1> %a)
6253  ret void
6254}
6255
6256define void @truncstore_v8i16_v8i8(<8 x i16> %x, <8 x i8>* %p, <8 x i16> %mask) {
6257; SSE2-LABEL: truncstore_v8i16_v8i8:
6258; SSE2:       # %bb.0:
6259; SSE2-NEXT:    pxor %xmm2, %xmm2
6260; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6261; SSE2-NEXT:    packuswb %xmm0, %xmm0
6262; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2
6263; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
6264; SSE2-NEXT:    pxor %xmm2, %xmm1
6265; SSE2-NEXT:    packsswb %xmm1, %xmm1
6266; SSE2-NEXT:    pmovmskb %xmm1, %eax
6267; SSE2-NEXT:    testb $1, %al
6268; SSE2-NEXT:    movd %xmm0, %ecx
6269; SSE2-NEXT:    jne .LBB17_1
6270; SSE2-NEXT:  # %bb.2: # %else
6271; SSE2-NEXT:    testb $2, %al
6272; SSE2-NEXT:    jne .LBB17_3
6273; SSE2-NEXT:  .LBB17_4: # %else2
6274; SSE2-NEXT:    testb $4, %al
6275; SSE2-NEXT:    jne .LBB17_5
6276; SSE2-NEXT:  .LBB17_6: # %else4
6277; SSE2-NEXT:    testb $8, %al
6278; SSE2-NEXT:    je .LBB17_8
6279; SSE2-NEXT:  .LBB17_7: # %cond.store5
6280; SSE2-NEXT:    shrl $24, %ecx
6281; SSE2-NEXT:    movb %cl, 3(%rdi)
6282; SSE2-NEXT:  .LBB17_8: # %else6
6283; SSE2-NEXT:    testb $16, %al
6284; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
6285; SSE2-NEXT:    je .LBB17_10
6286; SSE2-NEXT:  # %bb.9: # %cond.store7
6287; SSE2-NEXT:    movb %cl, 4(%rdi)
6288; SSE2-NEXT:  .LBB17_10: # %else8
6289; SSE2-NEXT:    testb $32, %al
6290; SSE2-NEXT:    je .LBB17_12
6291; SSE2-NEXT:  # %bb.11: # %cond.store9
6292; SSE2-NEXT:    movb %ch, 5(%rdi)
6293; SSE2-NEXT:  .LBB17_12: # %else10
6294; SSE2-NEXT:    testb $64, %al
6295; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
6296; SSE2-NEXT:    jne .LBB17_13
6297; SSE2-NEXT:  # %bb.14: # %else12
6298; SSE2-NEXT:    testb $-128, %al
6299; SSE2-NEXT:    jne .LBB17_15
6300; SSE2-NEXT:  .LBB17_16: # %else14
6301; SSE2-NEXT:    retq
6302; SSE2-NEXT:  .LBB17_1: # %cond.store
6303; SSE2-NEXT:    movb %cl, (%rdi)
6304; SSE2-NEXT:    testb $2, %al
6305; SSE2-NEXT:    je .LBB17_4
6306; SSE2-NEXT:  .LBB17_3: # %cond.store1
6307; SSE2-NEXT:    movb %ch, 1(%rdi)
6308; SSE2-NEXT:    testb $4, %al
6309; SSE2-NEXT:    je .LBB17_6
6310; SSE2-NEXT:  .LBB17_5: # %cond.store3
6311; SSE2-NEXT:    movl %ecx, %edx
6312; SSE2-NEXT:    shrl $16, %edx
6313; SSE2-NEXT:    movb %dl, 2(%rdi)
6314; SSE2-NEXT:    testb $8, %al
6315; SSE2-NEXT:    jne .LBB17_7
6316; SSE2-NEXT:    jmp .LBB17_8
6317; SSE2-NEXT:  .LBB17_13: # %cond.store11
6318; SSE2-NEXT:    movb %cl, 6(%rdi)
6319; SSE2-NEXT:    testb $-128, %al
6320; SSE2-NEXT:    je .LBB17_16
6321; SSE2-NEXT:  .LBB17_15: # %cond.store13
6322; SSE2-NEXT:    movb %ch, 7(%rdi)
6323; SSE2-NEXT:    retq
6324;
6325; SSE4-LABEL: truncstore_v8i16_v8i8:
6326; SSE4:       # %bb.0:
6327; SSE4-NEXT:    pxor %xmm2, %xmm2
6328; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
6329; SSE4-NEXT:    pcmpeqw %xmm1, %xmm2
6330; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
6331; SSE4-NEXT:    pxor %xmm2, %xmm1
6332; SSE4-NEXT:    packsswb %xmm1, %xmm1
6333; SSE4-NEXT:    pmovmskb %xmm1, %eax
6334; SSE4-NEXT:    testb $1, %al
6335; SSE4-NEXT:    jne .LBB17_1
6336; SSE4-NEXT:  # %bb.2: # %else
6337; SSE4-NEXT:    testb $2, %al
6338; SSE4-NEXT:    jne .LBB17_3
6339; SSE4-NEXT:  .LBB17_4: # %else2
6340; SSE4-NEXT:    testb $4, %al
6341; SSE4-NEXT:    jne .LBB17_5
6342; SSE4-NEXT:  .LBB17_6: # %else4
6343; SSE4-NEXT:    testb $8, %al
6344; SSE4-NEXT:    jne .LBB17_7
6345; SSE4-NEXT:  .LBB17_8: # %else6
6346; SSE4-NEXT:    testb $16, %al
6347; SSE4-NEXT:    jne .LBB17_9
6348; SSE4-NEXT:  .LBB17_10: # %else8
6349; SSE4-NEXT:    testb $32, %al
6350; SSE4-NEXT:    jne .LBB17_11
6351; SSE4-NEXT:  .LBB17_12: # %else10
6352; SSE4-NEXT:    testb $64, %al
6353; SSE4-NEXT:    jne .LBB17_13
6354; SSE4-NEXT:  .LBB17_14: # %else12
6355; SSE4-NEXT:    testb $-128, %al
6356; SSE4-NEXT:    jne .LBB17_15
6357; SSE4-NEXT:  .LBB17_16: # %else14
6358; SSE4-NEXT:    retq
6359; SSE4-NEXT:  .LBB17_1: # %cond.store
6360; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
6361; SSE4-NEXT:    testb $2, %al
6362; SSE4-NEXT:    je .LBB17_4
6363; SSE4-NEXT:  .LBB17_3: # %cond.store1
6364; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
6365; SSE4-NEXT:    testb $4, %al
6366; SSE4-NEXT:    je .LBB17_6
6367; SSE4-NEXT:  .LBB17_5: # %cond.store3
6368; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
6369; SSE4-NEXT:    testb $8, %al
6370; SSE4-NEXT:    je .LBB17_8
6371; SSE4-NEXT:  .LBB17_7: # %cond.store5
6372; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
6373; SSE4-NEXT:    testb $16, %al
6374; SSE4-NEXT:    je .LBB17_10
6375; SSE4-NEXT:  .LBB17_9: # %cond.store7
6376; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
6377; SSE4-NEXT:    testb $32, %al
6378; SSE4-NEXT:    je .LBB17_12
6379; SSE4-NEXT:  .LBB17_11: # %cond.store9
6380; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
6381; SSE4-NEXT:    testb $64, %al
6382; SSE4-NEXT:    je .LBB17_14
6383; SSE4-NEXT:  .LBB17_13: # %cond.store11
6384; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
6385; SSE4-NEXT:    testb $-128, %al
6386; SSE4-NEXT:    je .LBB17_16
6387; SSE4-NEXT:  .LBB17_15: # %cond.store13
6388; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
6389; SSE4-NEXT:    retq
6390;
6391; AVX-LABEL: truncstore_v8i16_v8i8:
6392; AVX:       # %bb.0:
6393; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6394; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
6395; AVX-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
6396; AVX-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
6397; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
6398; AVX-NEXT:    vpacksswb %xmm1, %xmm1, %xmm1
6399; AVX-NEXT:    vpmovmskb %xmm1, %eax
6400; AVX-NEXT:    testb $1, %al
6401; AVX-NEXT:    jne .LBB17_1
6402; AVX-NEXT:  # %bb.2: # %else
6403; AVX-NEXT:    testb $2, %al
6404; AVX-NEXT:    jne .LBB17_3
6405; AVX-NEXT:  .LBB17_4: # %else2
6406; AVX-NEXT:    testb $4, %al
6407; AVX-NEXT:    jne .LBB17_5
6408; AVX-NEXT:  .LBB17_6: # %else4
6409; AVX-NEXT:    testb $8, %al
6410; AVX-NEXT:    jne .LBB17_7
6411; AVX-NEXT:  .LBB17_8: # %else6
6412; AVX-NEXT:    testb $16, %al
6413; AVX-NEXT:    jne .LBB17_9
6414; AVX-NEXT:  .LBB17_10: # %else8
6415; AVX-NEXT:    testb $32, %al
6416; AVX-NEXT:    jne .LBB17_11
6417; AVX-NEXT:  .LBB17_12: # %else10
6418; AVX-NEXT:    testb $64, %al
6419; AVX-NEXT:    jne .LBB17_13
6420; AVX-NEXT:  .LBB17_14: # %else12
6421; AVX-NEXT:    testb $-128, %al
6422; AVX-NEXT:    jne .LBB17_15
6423; AVX-NEXT:  .LBB17_16: # %else14
6424; AVX-NEXT:    retq
6425; AVX-NEXT:  .LBB17_1: # %cond.store
6426; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
6427; AVX-NEXT:    testb $2, %al
6428; AVX-NEXT:    je .LBB17_4
6429; AVX-NEXT:  .LBB17_3: # %cond.store1
6430; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6431; AVX-NEXT:    testb $4, %al
6432; AVX-NEXT:    je .LBB17_6
6433; AVX-NEXT:  .LBB17_5: # %cond.store3
6434; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6435; AVX-NEXT:    testb $8, %al
6436; AVX-NEXT:    je .LBB17_8
6437; AVX-NEXT:  .LBB17_7: # %cond.store5
6438; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6439; AVX-NEXT:    testb $16, %al
6440; AVX-NEXT:    je .LBB17_10
6441; AVX-NEXT:  .LBB17_9: # %cond.store7
6442; AVX-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6443; AVX-NEXT:    testb $32, %al
6444; AVX-NEXT:    je .LBB17_12
6445; AVX-NEXT:  .LBB17_11: # %cond.store9
6446; AVX-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6447; AVX-NEXT:    testb $64, %al
6448; AVX-NEXT:    je .LBB17_14
6449; AVX-NEXT:  .LBB17_13: # %cond.store11
6450; AVX-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6451; AVX-NEXT:    testb $-128, %al
6452; AVX-NEXT:    je .LBB17_16
6453; AVX-NEXT:  .LBB17_15: # %cond.store13
6454; AVX-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6455; AVX-NEXT:    retq
6456;
6457; AVX512F-LABEL: truncstore_v8i16_v8i8:
6458; AVX512F:       # %bb.0:
6459; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6460; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
6461; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
6462; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
6463; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
6464; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
6465; AVX512F-NEXT:    kmovw %k0, %eax
6466; AVX512F-NEXT:    testb $1, %al
6467; AVX512F-NEXT:    jne .LBB17_1
6468; AVX512F-NEXT:  # %bb.2: # %else
6469; AVX512F-NEXT:    testb $2, %al
6470; AVX512F-NEXT:    jne .LBB17_3
6471; AVX512F-NEXT:  .LBB17_4: # %else2
6472; AVX512F-NEXT:    testb $4, %al
6473; AVX512F-NEXT:    jne .LBB17_5
6474; AVX512F-NEXT:  .LBB17_6: # %else4
6475; AVX512F-NEXT:    testb $8, %al
6476; AVX512F-NEXT:    jne .LBB17_7
6477; AVX512F-NEXT:  .LBB17_8: # %else6
6478; AVX512F-NEXT:    testb $16, %al
6479; AVX512F-NEXT:    jne .LBB17_9
6480; AVX512F-NEXT:  .LBB17_10: # %else8
6481; AVX512F-NEXT:    testb $32, %al
6482; AVX512F-NEXT:    jne .LBB17_11
6483; AVX512F-NEXT:  .LBB17_12: # %else10
6484; AVX512F-NEXT:    testb $64, %al
6485; AVX512F-NEXT:    jne .LBB17_13
6486; AVX512F-NEXT:  .LBB17_14: # %else12
6487; AVX512F-NEXT:    testb $-128, %al
6488; AVX512F-NEXT:    jne .LBB17_15
6489; AVX512F-NEXT:  .LBB17_16: # %else14
6490; AVX512F-NEXT:    vzeroupper
6491; AVX512F-NEXT:    retq
6492; AVX512F-NEXT:  .LBB17_1: # %cond.store
6493; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
6494; AVX512F-NEXT:    testb $2, %al
6495; AVX512F-NEXT:    je .LBB17_4
6496; AVX512F-NEXT:  .LBB17_3: # %cond.store1
6497; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6498; AVX512F-NEXT:    testb $4, %al
6499; AVX512F-NEXT:    je .LBB17_6
6500; AVX512F-NEXT:  .LBB17_5: # %cond.store3
6501; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6502; AVX512F-NEXT:    testb $8, %al
6503; AVX512F-NEXT:    je .LBB17_8
6504; AVX512F-NEXT:  .LBB17_7: # %cond.store5
6505; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6506; AVX512F-NEXT:    testb $16, %al
6507; AVX512F-NEXT:    je .LBB17_10
6508; AVX512F-NEXT:  .LBB17_9: # %cond.store7
6509; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6510; AVX512F-NEXT:    testb $32, %al
6511; AVX512F-NEXT:    je .LBB17_12
6512; AVX512F-NEXT:  .LBB17_11: # %cond.store9
6513; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6514; AVX512F-NEXT:    testb $64, %al
6515; AVX512F-NEXT:    je .LBB17_14
6516; AVX512F-NEXT:  .LBB17_13: # %cond.store11
6517; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6518; AVX512F-NEXT:    testb $-128, %al
6519; AVX512F-NEXT:    je .LBB17_16
6520; AVX512F-NEXT:  .LBB17_15: # %cond.store13
6521; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6522; AVX512F-NEXT:    vzeroupper
6523; AVX512F-NEXT:    retq
6524;
6525; AVX512BW-LABEL: truncstore_v8i16_v8i8:
6526; AVX512BW:       # %bb.0:
6527; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
6528; AVX512BW-NEXT:    vptestmw %zmm1, %zmm1, %k0
6529; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0
6530; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1
6531; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
6532; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
6533; AVX512BW-NEXT:    vzeroupper
6534; AVX512BW-NEXT:    retq
6535;
6536; AVX512BWVL-LABEL: truncstore_v8i16_v8i8:
6537; AVX512BWVL:       # %bb.0:
6538; AVX512BWVL-NEXT:    vptestmw %xmm1, %xmm1, %k1
6539; AVX512BWVL-NEXT:    vpmovwb %xmm0, (%rdi) {%k1}
6540; AVX512BWVL-NEXT:    retq
6541  %a = icmp ne <8 x i16> %mask, zeroinitializer
6542  %b = trunc <8 x i16> %x to <8 x i8>
6543  call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %b, <8 x i8>* %p, i32 1, <8 x i1> %a)
6544  ret void
6545}
6546
6547declare void @llvm.masked.store.v8i32.p0v8i32(<8 x i32>, <8 x i32>*, i32, <8 x i1>)
6548declare void @llvm.masked.store.v8i16.p0v8i16(<8 x i16>, <8 x i16>*, i32, <8 x i1>)
6549declare void @llvm.masked.store.v8i8.p0v8i8(<8 x i8>, <8 x i8>*, i32, <8 x i1>)
6550declare void @llvm.masked.store.v4i32.p0v4i32(<4 x i32>, <4 x i32>*, i32, <4 x i1>)
6551declare void @llvm.masked.store.v4i16.p0v4i16(<4 x i16>, <4 x i16>*, i32, <4 x i1>)
6552declare void @llvm.masked.store.v4i8.p0v4i8(<4 x i8>, <4 x i8>*, i32, <4 x i1>)
6553declare void @llvm.masked.store.v2i32.p0v2i32(<2 x i32>, <2 x i32>*, i32, <2 x i1>)
6554declare void @llvm.masked.store.v2i16.p0v2i16(<2 x i16>, <2 x i16>*, i32, <2 x i1>)
6555declare void @llvm.masked.store.v2i8.p0v2i8(<2 x i8>, <2 x i8>*, i32, <2 x i1>)
6556declare void @llvm.masked.store.v16i16.p0v16i16(<16 x i16>, <16 x i16>*, i32, <16 x i1>)
6557declare void @llvm.masked.store.v16i8.p0v16i8(<16 x i8>, <16 x i8>*, i32, <16 x i1>)
6558declare void @llvm.masked.store.v32i8.p0v32i8(<32 x i8>, <32 x i8>*, i32, <32 x i1>)
6559