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