[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / masked_store_trunc_ssat.ll
blobcc73f563581ad0e5440421f0d125f65cb1e9f301
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 %xmm8, %xmm8
15 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483647,2147483647]
16 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648]
17 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
18 ; SSE2-NEXT:    pxor %xmm11, %xmm6
19 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [4294967295,4294967295]
20 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
21 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
22 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm7[0,0,2,2]
23 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm6
24 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
25 ; SSE2-NEXT:    pand %xmm12, %xmm6
26 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
27 ; SSE2-NEXT:    por %xmm6, %xmm13
28 ; SSE2-NEXT:    pand %xmm13, %xmm2
29 ; SSE2-NEXT:    pandn %xmm9, %xmm13
30 ; SSE2-NEXT:    por %xmm2, %xmm13
31 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
32 ; SSE2-NEXT:    pxor %xmm11, %xmm2
33 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
34 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6
35 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
36 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
37 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
38 ; SSE2-NEXT:    pand %xmm12, %xmm7
39 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
40 ; SSE2-NEXT:    por %xmm7, %xmm2
41 ; SSE2-NEXT:    pand %xmm2, %xmm3
42 ; SSE2-NEXT:    pandn %xmm9, %xmm2
43 ; SSE2-NEXT:    por %xmm3, %xmm2
44 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
45 ; SSE2-NEXT:    pxor %xmm11, %xmm3
46 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
47 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
48 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
49 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm3
50 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
51 ; SSE2-NEXT:    pand %xmm12, %xmm7
52 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
53 ; SSE2-NEXT:    por %xmm7, %xmm3
54 ; SSE2-NEXT:    pand %xmm3, %xmm0
55 ; SSE2-NEXT:    pandn %xmm9, %xmm3
56 ; SSE2-NEXT:    por %xmm0, %xmm3
57 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
58 ; SSE2-NEXT:    pxor %xmm11, %xmm0
59 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
60 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6
61 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
62 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
63 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
64 ; SSE2-NEXT:    pand %xmm7, %xmm0
65 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
66 ; SSE2-NEXT:    por %xmm0, %xmm6
67 ; SSE2-NEXT:    pand %xmm6, %xmm1
68 ; SSE2-NEXT:    pandn %xmm9, %xmm6
69 ; SSE2-NEXT:    por %xmm1, %xmm6
70 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [18446744071562067968,18446744071562067968]
71 ; SSE2-NEXT:    movdqa %xmm6, %xmm1
72 ; SSE2-NEXT:    pxor %xmm11, %xmm1
73 ; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [18446744069414584320,18446744069414584320]
74 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
75 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm7
76 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]
77 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm1
78 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
79 ; SSE2-NEXT:    pand %xmm0, %xmm1
80 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
81 ; SSE2-NEXT:    por %xmm1, %xmm0
82 ; SSE2-NEXT:    pand %xmm0, %xmm6
83 ; SSE2-NEXT:    pandn %xmm9, %xmm0
84 ; SSE2-NEXT:    por %xmm6, %xmm0
85 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
86 ; SSE2-NEXT:    pxor %xmm11, %xmm1
87 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
88 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm6
89 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
90 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm1
91 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
92 ; SSE2-NEXT:    pand %xmm10, %xmm7
93 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm6[1,1,3,3]
94 ; SSE2-NEXT:    por %xmm7, %xmm1
95 ; SSE2-NEXT:    pand %xmm1, %xmm3
96 ; SSE2-NEXT:    pandn %xmm9, %xmm1
97 ; SSE2-NEXT:    por %xmm3, %xmm1
98 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm0[0,2]
99 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
100 ; SSE2-NEXT:    pxor %xmm11, %xmm0
101 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
102 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm6
103 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
104 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm0
105 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
106 ; SSE2-NEXT:    pand %xmm7, %xmm3
107 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[1,1,3,3]
108 ; SSE2-NEXT:    pxor %xmm13, %xmm11
109 ; SSE2-NEXT:    movdqa %xmm11, %xmm6
110 ; SSE2-NEXT:    pcmpgtd %xmm12, %xmm6
111 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
112 ; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
113 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm11[1,1,3,3]
114 ; SSE2-NEXT:    pand %xmm7, %xmm0
115 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
116 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
117 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
118 ; SSE2-NEXT:    pxor %xmm7, %xmm5
119 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
120 ; SSE2-NEXT:    pxor %xmm7, %xmm4
121 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
122 ; SSE2-NEXT:    packsswb %xmm0, %xmm4
123 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
124 ; SSE2-NEXT:    testb $1, %al
125 ; SSE2-NEXT:    je .LBB0_2
126 ; SSE2-NEXT:  # %bb.1: # %cond.store
127 ; SSE2-NEXT:    movss %xmm1, (%rdi)
128 ; SSE2-NEXT:  .LBB0_2: # %else
129 ; SSE2-NEXT:    por %xmm10, %xmm3
130 ; SSE2-NEXT:    por %xmm6, %xmm0
131 ; SSE2-NEXT:    testb $2, %al
132 ; SSE2-NEXT:    je .LBB0_4
133 ; SSE2-NEXT:  # %bb.3: # %cond.store1
134 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[1,1,2,3]
135 ; SSE2-NEXT:    movd %xmm4, 4(%rdi)
136 ; SSE2-NEXT:  .LBB0_4: # %else2
137 ; SSE2-NEXT:    pand %xmm3, %xmm2
138 ; SSE2-NEXT:    pandn %xmm9, %xmm3
139 ; SSE2-NEXT:    pand %xmm0, %xmm13
140 ; SSE2-NEXT:    pandn %xmm9, %xmm0
141 ; SSE2-NEXT:    testb $4, %al
142 ; SSE2-NEXT:    je .LBB0_6
143 ; SSE2-NEXT:  # %bb.5: # %cond.store3
144 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]
145 ; SSE2-NEXT:    movd %xmm4, 8(%rdi)
146 ; SSE2-NEXT:  .LBB0_6: # %else4
147 ; SSE2-NEXT:    por %xmm3, %xmm2
148 ; SSE2-NEXT:    por %xmm0, %xmm13
149 ; SSE2-NEXT:    testb $8, %al
150 ; SSE2-NEXT:    je .LBB0_8
151 ; SSE2-NEXT:  # %bb.7: # %cond.store5
152 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[3,1,2,3]
153 ; SSE2-NEXT:    movd %xmm0, 12(%rdi)
154 ; SSE2-NEXT:  .LBB0_8: # %else6
155 ; SSE2-NEXT:    shufps {{.*#+}} xmm13 = xmm13[0,2],xmm2[0,2]
156 ; SSE2-NEXT:    testb $16, %al
157 ; SSE2-NEXT:    jne .LBB0_9
158 ; SSE2-NEXT:  # %bb.10: # %else8
159 ; SSE2-NEXT:    testb $32, %al
160 ; SSE2-NEXT:    jne .LBB0_11
161 ; SSE2-NEXT:  .LBB0_12: # %else10
162 ; SSE2-NEXT:    testb $64, %al
163 ; SSE2-NEXT:    jne .LBB0_13
164 ; SSE2-NEXT:  .LBB0_14: # %else12
165 ; SSE2-NEXT:    testb $-128, %al
166 ; SSE2-NEXT:    jne .LBB0_15
167 ; SSE2-NEXT:  .LBB0_16: # %else14
168 ; SSE2-NEXT:    retq
169 ; SSE2-NEXT:  .LBB0_9: # %cond.store7
170 ; SSE2-NEXT:    movss %xmm13, 16(%rdi)
171 ; SSE2-NEXT:    testb $32, %al
172 ; SSE2-NEXT:    je .LBB0_12
173 ; SSE2-NEXT:  .LBB0_11: # %cond.store9
174 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm13[1,1,2,3]
175 ; SSE2-NEXT:    movd %xmm0, 20(%rdi)
176 ; SSE2-NEXT:    testb $64, %al
177 ; SSE2-NEXT:    je .LBB0_14
178 ; SSE2-NEXT:  .LBB0_13: # %cond.store11
179 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm13[2,3,0,1]
180 ; SSE2-NEXT:    movd %xmm0, 24(%rdi)
181 ; SSE2-NEXT:    testb $-128, %al
182 ; SSE2-NEXT:    je .LBB0_16
183 ; SSE2-NEXT:  .LBB0_15: # %cond.store13
184 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm13[3,1,2,3]
185 ; SSE2-NEXT:    movd %xmm0, 28(%rdi)
186 ; SSE2-NEXT:    retq
188 ; SSE4-LABEL: truncstore_v8i64_v8i32:
189 ; SSE4:       # %bb.0:
190 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
191 ; SSE4-NEXT:    pxor %xmm8, %xmm8
192 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [2147483647,2147483647]
193 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
194 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
195 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
196 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm10
197 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
198 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
199 ; SSE4-NEXT:    movdqa %xmm7, %xmm6
200 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm6
201 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
202 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
203 ; SSE4-NEXT:    movdqa %xmm7, %xmm3
204 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm3
205 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
206 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
207 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm7
208 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]
209 ; SSE4-NEXT:    movapd %xmm7, %xmm0
210 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
211 ; SSE4-NEXT:    movdqa %xmm1, %xmm2
212 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm2
213 ; SSE4-NEXT:    movapd %xmm3, %xmm0
214 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
215 ; SSE4-NEXT:    movdqa %xmm1, %xmm7
216 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
217 ; SSE4-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,2],xmm2[0,2]
218 ; SSE4-NEXT:    movapd %xmm6, %xmm0
219 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
220 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
221 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm3
222 ; SSE4-NEXT:    movapd %xmm10, %xmm0
223 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
224 ; SSE4-NEXT:    blendvpd %xmm0, %xmm10, %xmm1
225 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
226 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
227 ; SSE4-NEXT:    pxor %xmm0, %xmm5
228 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
229 ; SSE4-NEXT:    pxor %xmm0, %xmm4
230 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
231 ; SSE4-NEXT:    packsswb %xmm0, %xmm4
232 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
233 ; SSE4-NEXT:    testb $1, %al
234 ; SSE4-NEXT:    jne .LBB0_1
235 ; SSE4-NEXT:  # %bb.2: # %else
236 ; SSE4-NEXT:    testb $2, %al
237 ; SSE4-NEXT:    jne .LBB0_3
238 ; SSE4-NEXT:  .LBB0_4: # %else2
239 ; SSE4-NEXT:    testb $4, %al
240 ; SSE4-NEXT:    jne .LBB0_5
241 ; SSE4-NEXT:  .LBB0_6: # %else4
242 ; SSE4-NEXT:    testb $8, %al
243 ; SSE4-NEXT:    je .LBB0_8
244 ; SSE4-NEXT:  .LBB0_7: # %cond.store5
245 ; SSE4-NEXT:    extractps $3, %xmm7, 12(%rdi)
246 ; SSE4-NEXT:  .LBB0_8: # %else6
247 ; SSE4-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
248 ; SSE4-NEXT:    testb $16, %al
249 ; SSE4-NEXT:    jne .LBB0_9
250 ; SSE4-NEXT:  # %bb.10: # %else8
251 ; SSE4-NEXT:    testb $32, %al
252 ; SSE4-NEXT:    jne .LBB0_11
253 ; SSE4-NEXT:  .LBB0_12: # %else10
254 ; SSE4-NEXT:    testb $64, %al
255 ; SSE4-NEXT:    jne .LBB0_13
256 ; SSE4-NEXT:  .LBB0_14: # %else12
257 ; SSE4-NEXT:    testb $-128, %al
258 ; SSE4-NEXT:    jne .LBB0_15
259 ; SSE4-NEXT:  .LBB0_16: # %else14
260 ; SSE4-NEXT:    retq
261 ; SSE4-NEXT:  .LBB0_1: # %cond.store
262 ; SSE4-NEXT:    movss %xmm7, (%rdi)
263 ; SSE4-NEXT:    testb $2, %al
264 ; SSE4-NEXT:    je .LBB0_4
265 ; SSE4-NEXT:  .LBB0_3: # %cond.store1
266 ; SSE4-NEXT:    extractps $1, %xmm7, 4(%rdi)
267 ; SSE4-NEXT:    testb $4, %al
268 ; SSE4-NEXT:    je .LBB0_6
269 ; SSE4-NEXT:  .LBB0_5: # %cond.store3
270 ; SSE4-NEXT:    extractps $2, %xmm7, 8(%rdi)
271 ; SSE4-NEXT:    testb $8, %al
272 ; SSE4-NEXT:    jne .LBB0_7
273 ; SSE4-NEXT:    jmp .LBB0_8
274 ; SSE4-NEXT:  .LBB0_9: # %cond.store7
275 ; SSE4-NEXT:    movss %xmm1, 16(%rdi)
276 ; SSE4-NEXT:    testb $32, %al
277 ; SSE4-NEXT:    je .LBB0_12
278 ; SSE4-NEXT:  .LBB0_11: # %cond.store9
279 ; SSE4-NEXT:    extractps $1, %xmm1, 20(%rdi)
280 ; SSE4-NEXT:    testb $64, %al
281 ; SSE4-NEXT:    je .LBB0_14
282 ; SSE4-NEXT:  .LBB0_13: # %cond.store11
283 ; SSE4-NEXT:    extractps $2, %xmm1, 24(%rdi)
284 ; SSE4-NEXT:    testb $-128, %al
285 ; SSE4-NEXT:    je .LBB0_16
286 ; SSE4-NEXT:  .LBB0_15: # %cond.store13
287 ; SSE4-NEXT:    extractps $3, %xmm1, 28(%rdi)
288 ; SSE4-NEXT:    retq
290 ; AVX1-LABEL: truncstore_v8i64_v8i32:
291 ; AVX1:       # %bb.0:
292 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
293 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
294 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
295 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
296 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
297 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
298 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
299 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm8
300 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
301 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [2147483647,2147483647]
302 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm9
303 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm6
304 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
305 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm4, %xmm2
306 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm5
307 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm4, %xmm0
308 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [18446744071562067968,18446744071562067968]
309 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm10
310 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm7, %xmm4, %xmm2
311 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm2, %xmm7
312 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm1, %xmm4, %xmm1
313 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm6
314 ; AVX1-NEXT:    vblendvpd %xmm9, %xmm3, %xmm4, %xmm3
315 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm4
316 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm5, %xmm3
317 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm1, %xmm5, %xmm1
318 ; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
319 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm2, %xmm5, %xmm2
320 ; AVX1-NEXT:    vblendvpd %xmm10, %xmm0, %xmm5, %xmm0
321 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
322 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
323 ; AVX1-NEXT:    vmaskmovps %ymm0, %ymm8, (%rdi)
324 ; AVX1-NEXT:    vzeroupper
325 ; AVX1-NEXT:    retq
327 ; AVX2-LABEL: truncstore_v8i64_v8i32:
328 ; AVX2:       # %bb.0:
329 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
330 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm2
331 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
332 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
333 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [2147483647,2147483647,2147483647,2147483647]
334 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
335 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
336 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm3, %ymm4
337 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
338 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
339 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4
340 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
341 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
342 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
343 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm3
344 ; AVX2-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
345 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3
346 ; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
347 ; AVX2-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
348 ; AVX2-NEXT:    vpmaskmovd %ymm0, %ymm2, (%rdi)
349 ; AVX2-NEXT:    vzeroupper
350 ; AVX2-NEXT:    retq
352 ; AVX512F-LABEL: truncstore_v8i64_v8i32:
353 ; AVX512F:       # %bb.0:
354 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
355 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k1
356 ; AVX512F-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
357 ; AVX512F-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
358 ; AVX512F-NEXT:    vpmovqd %zmm0, (%rdi) {%k1}
359 ; AVX512F-NEXT:    vzeroupper
360 ; AVX512F-NEXT:    retq
362 ; AVX512VL-LABEL: truncstore_v8i64_v8i32:
363 ; AVX512VL:       # %bb.0:
364 ; AVX512VL-NEXT:    vptestmd %ymm1, %ymm1, %k1
365 ; AVX512VL-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
366 ; AVX512VL-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
367 ; AVX512VL-NEXT:    vpmovqd %zmm0, (%rdi) {%k1}
368 ; AVX512VL-NEXT:    vzeroupper
369 ; AVX512VL-NEXT:    retq
371 ; AVX512BW-LABEL: truncstore_v8i64_v8i32:
372 ; AVX512BW:       # %bb.0:
373 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
374 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
375 ; AVX512BW-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
376 ; AVX512BW-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
377 ; AVX512BW-NEXT:    vpmovqd %zmm0, (%rdi) {%k1}
378 ; AVX512BW-NEXT:    vzeroupper
379 ; AVX512BW-NEXT:    retq
380   %a = icmp ne <8 x i32> %mask, zeroinitializer
381   %b = icmp slt <8 x i64> %x, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
382   %c = select <8 x i1> %b, <8 x i64> %x, <8 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
383   %d = icmp sgt <8 x i64> %c, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
384   %e = select <8 x i1> %d, <8 x i64> %c, <8 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
385   %f = trunc <8 x i64> %e to <8 x i32>
386   call void @llvm.masked.store.v8i32.p0v8i32(<8 x i32> %f, <8 x i32>* %p, i32 1, <8 x i1> %a)
387   ret void
390 define void @truncstore_v8i64_v8i16(<8 x i64> %x, <8 x i16>* %p, <8 x i32> %mask) {
391 ; SSE2-LABEL: truncstore_v8i64_v8i16:
392 ; SSE2:       # %bb.0:
393 ; SSE2-NEXT:    pxor %xmm8, %xmm8
394 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [32767,32767]
395 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648]
396 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
397 ; SSE2-NEXT:    pxor %xmm11, %xmm6
398 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147516415,2147516415]
399 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
400 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
401 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm7[0,0,2,2]
402 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm6
403 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
404 ; SSE2-NEXT:    pand %xmm12, %xmm6
405 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
406 ; SSE2-NEXT:    por %xmm6, %xmm13
407 ; SSE2-NEXT:    pand %xmm13, %xmm2
408 ; SSE2-NEXT:    pandn %xmm9, %xmm13
409 ; SSE2-NEXT:    por %xmm2, %xmm13
410 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
411 ; SSE2-NEXT:    pxor %xmm11, %xmm2
412 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
413 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6
414 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
415 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
416 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
417 ; SSE2-NEXT:    pand %xmm12, %xmm7
418 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
419 ; SSE2-NEXT:    por %xmm7, %xmm2
420 ; SSE2-NEXT:    pand %xmm2, %xmm3
421 ; SSE2-NEXT:    pandn %xmm9, %xmm2
422 ; SSE2-NEXT:    por %xmm3, %xmm2
423 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
424 ; SSE2-NEXT:    pxor %xmm11, %xmm3
425 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
426 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
427 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
428 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm3
429 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
430 ; SSE2-NEXT:    pand %xmm12, %xmm7
431 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
432 ; SSE2-NEXT:    por %xmm7, %xmm3
433 ; SSE2-NEXT:    pand %xmm3, %xmm0
434 ; SSE2-NEXT:    pandn %xmm9, %xmm3
435 ; SSE2-NEXT:    por %xmm0, %xmm3
436 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
437 ; SSE2-NEXT:    pxor %xmm11, %xmm0
438 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
439 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6
440 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
441 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
442 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
443 ; SSE2-NEXT:    pand %xmm7, %xmm0
444 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
445 ; SSE2-NEXT:    por %xmm0, %xmm6
446 ; SSE2-NEXT:    pand %xmm6, %xmm1
447 ; SSE2-NEXT:    pandn %xmm9, %xmm6
448 ; SSE2-NEXT:    por %xmm1, %xmm6
449 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [18446744073709518848,18446744073709518848]
450 ; SSE2-NEXT:    movdqa %xmm6, %xmm0
451 ; SSE2-NEXT:    pxor %xmm11, %xmm0
452 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [18446744071562035200,18446744071562035200]
453 ; SSE2-NEXT:    movdqa %xmm0, %xmm7
454 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm7
455 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]
456 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
457 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
458 ; SSE2-NEXT:    pand %xmm1, %xmm0
459 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]
460 ; SSE2-NEXT:    por %xmm0, %xmm1
461 ; SSE2-NEXT:    pand %xmm1, %xmm6
462 ; SSE2-NEXT:    pandn %xmm9, %xmm1
463 ; SSE2-NEXT:    por %xmm6, %xmm1
464 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
465 ; SSE2-NEXT:    pxor %xmm11, %xmm0
466 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
467 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6
468 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
469 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
470 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
471 ; SSE2-NEXT:    pand %xmm12, %xmm7
472 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
473 ; SSE2-NEXT:    por %xmm7, %xmm0
474 ; SSE2-NEXT:    pand %xmm0, %xmm3
475 ; SSE2-NEXT:    pandn %xmm9, %xmm0
476 ; SSE2-NEXT:    por %xmm3, %xmm0
477 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
478 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
479 ; SSE2-NEXT:    pxor %xmm11, %xmm1
480 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
481 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
482 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
483 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
484 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
485 ; SSE2-NEXT:    pand %xmm6, %xmm1
486 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
487 ; SSE2-NEXT:    por %xmm1, %xmm3
488 ; SSE2-NEXT:    pand %xmm3, %xmm2
489 ; SSE2-NEXT:    pandn %xmm9, %xmm3
490 ; SSE2-NEXT:    por %xmm2, %xmm3
491 ; SSE2-NEXT:    pxor %xmm13, %xmm11
492 ; SSE2-NEXT:    movdqa %xmm11, %xmm1
493 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1
494 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
495 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm11[1,1,3,3]
497 ; SSE2-NEXT:    pand %xmm2, %xmm6
498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
499 ; SSE2-NEXT:    por %xmm6, %xmm1
500 ; SSE2-NEXT:    pand %xmm1, %xmm13
501 ; SSE2-NEXT:    pandn %xmm9, %xmm1
502 ; SSE2-NEXT:    por %xmm13, %xmm1
503 ; SSE2-NEXT:    packssdw %xmm3, %xmm1
504 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
505 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
506 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
507 ; SSE2-NEXT:    pxor %xmm1, %xmm5
508 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
509 ; SSE2-NEXT:    pxor %xmm1, %xmm4
510 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
511 ; SSE2-NEXT:    packsswb %xmm0, %xmm4
512 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
513 ; SSE2-NEXT:    testb $1, %al
514 ; SSE2-NEXT:    jne .LBB1_1
515 ; SSE2-NEXT:  # %bb.2: # %else
516 ; SSE2-NEXT:    testb $2, %al
517 ; SSE2-NEXT:    jne .LBB1_3
518 ; SSE2-NEXT:  .LBB1_4: # %else2
519 ; SSE2-NEXT:    testb $4, %al
520 ; SSE2-NEXT:    jne .LBB1_5
521 ; SSE2-NEXT:  .LBB1_6: # %else4
522 ; SSE2-NEXT:    testb $8, %al
523 ; SSE2-NEXT:    jne .LBB1_7
524 ; SSE2-NEXT:  .LBB1_8: # %else6
525 ; SSE2-NEXT:    testb $16, %al
526 ; SSE2-NEXT:    jne .LBB1_9
527 ; SSE2-NEXT:  .LBB1_10: # %else8
528 ; SSE2-NEXT:    testb $32, %al
529 ; SSE2-NEXT:    jne .LBB1_11
530 ; SSE2-NEXT:  .LBB1_12: # %else10
531 ; SSE2-NEXT:    testb $64, %al
532 ; SSE2-NEXT:    jne .LBB1_13
533 ; SSE2-NEXT:  .LBB1_14: # %else12
534 ; SSE2-NEXT:    testb $-128, %al
535 ; SSE2-NEXT:    jne .LBB1_15
536 ; SSE2-NEXT:  .LBB1_16: # %else14
537 ; SSE2-NEXT:    retq
538 ; SSE2-NEXT:  .LBB1_1: # %cond.store
539 ; SSE2-NEXT:    movd %xmm0, %ecx
540 ; SSE2-NEXT:    movw %cx, (%rdi)
541 ; SSE2-NEXT:    testb $2, %al
542 ; SSE2-NEXT:    je .LBB1_4
543 ; SSE2-NEXT:  .LBB1_3: # %cond.store1
544 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
545 ; SSE2-NEXT:    movw %cx, 2(%rdi)
546 ; SSE2-NEXT:    testb $4, %al
547 ; SSE2-NEXT:    je .LBB1_6
548 ; SSE2-NEXT:  .LBB1_5: # %cond.store3
549 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
550 ; SSE2-NEXT:    movw %cx, 4(%rdi)
551 ; SSE2-NEXT:    testb $8, %al
552 ; SSE2-NEXT:    je .LBB1_8
553 ; SSE2-NEXT:  .LBB1_7: # %cond.store5
554 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
555 ; SSE2-NEXT:    movw %cx, 6(%rdi)
556 ; SSE2-NEXT:    testb $16, %al
557 ; SSE2-NEXT:    je .LBB1_10
558 ; SSE2-NEXT:  .LBB1_9: # %cond.store7
559 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
560 ; SSE2-NEXT:    movw %cx, 8(%rdi)
561 ; SSE2-NEXT:    testb $32, %al
562 ; SSE2-NEXT:    je .LBB1_12
563 ; SSE2-NEXT:  .LBB1_11: # %cond.store9
564 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
565 ; SSE2-NEXT:    movw %cx, 10(%rdi)
566 ; SSE2-NEXT:    testb $64, %al
567 ; SSE2-NEXT:    je .LBB1_14
568 ; SSE2-NEXT:  .LBB1_13: # %cond.store11
569 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
570 ; SSE2-NEXT:    movw %cx, 12(%rdi)
571 ; SSE2-NEXT:    testb $-128, %al
572 ; SSE2-NEXT:    je .LBB1_16
573 ; SSE2-NEXT:  .LBB1_15: # %cond.store13
574 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
575 ; SSE2-NEXT:    movw %ax, 14(%rdi)
576 ; SSE2-NEXT:    retq
578 ; SSE4-LABEL: truncstore_v8i64_v8i16:
579 ; SSE4:       # %bb.0:
580 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
581 ; SSE4-NEXT:    pxor %xmm8, %xmm8
582 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [32767,32767]
583 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
584 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
585 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
586 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm10
587 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
588 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
589 ; SSE4-NEXT:    movdqa %xmm7, %xmm2
590 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
591 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
592 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
593 ; SSE4-NEXT:    movdqa %xmm7, %xmm3
594 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm3
595 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
596 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
597 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm7
598 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]
599 ; SSE4-NEXT:    movapd %xmm7, %xmm0
600 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
601 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
602 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm6
603 ; SSE4-NEXT:    movapd %xmm3, %xmm0
604 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
605 ; SSE4-NEXT:    movdqa %xmm1, %xmm7
606 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
607 ; SSE4-NEXT:    packssdw %xmm6, %xmm7
608 ; SSE4-NEXT:    movapd %xmm2, %xmm0
609 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
610 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
611 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3
612 ; SSE4-NEXT:    movapd %xmm10, %xmm0
613 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
614 ; SSE4-NEXT:    blendvpd %xmm0, %xmm10, %xmm1
615 ; SSE4-NEXT:    packssdw %xmm3, %xmm1
616 ; SSE4-NEXT:    packssdw %xmm1, %xmm7
617 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
618 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
619 ; SSE4-NEXT:    pxor %xmm0, %xmm5
620 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
621 ; SSE4-NEXT:    pxor %xmm0, %xmm4
622 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
623 ; SSE4-NEXT:    packsswb %xmm0, %xmm4
624 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
625 ; SSE4-NEXT:    testb $1, %al
626 ; SSE4-NEXT:    jne .LBB1_1
627 ; SSE4-NEXT:  # %bb.2: # %else
628 ; SSE4-NEXT:    testb $2, %al
629 ; SSE4-NEXT:    jne .LBB1_3
630 ; SSE4-NEXT:  .LBB1_4: # %else2
631 ; SSE4-NEXT:    testb $4, %al
632 ; SSE4-NEXT:    jne .LBB1_5
633 ; SSE4-NEXT:  .LBB1_6: # %else4
634 ; SSE4-NEXT:    testb $8, %al
635 ; SSE4-NEXT:    jne .LBB1_7
636 ; SSE4-NEXT:  .LBB1_8: # %else6
637 ; SSE4-NEXT:    testb $16, %al
638 ; SSE4-NEXT:    jne .LBB1_9
639 ; SSE4-NEXT:  .LBB1_10: # %else8
640 ; SSE4-NEXT:    testb $32, %al
641 ; SSE4-NEXT:    jne .LBB1_11
642 ; SSE4-NEXT:  .LBB1_12: # %else10
643 ; SSE4-NEXT:    testb $64, %al
644 ; SSE4-NEXT:    jne .LBB1_13
645 ; SSE4-NEXT:  .LBB1_14: # %else12
646 ; SSE4-NEXT:    testb $-128, %al
647 ; SSE4-NEXT:    jne .LBB1_15
648 ; SSE4-NEXT:  .LBB1_16: # %else14
649 ; SSE4-NEXT:    retq
650 ; SSE4-NEXT:  .LBB1_1: # %cond.store
651 ; SSE4-NEXT:    pextrw $0, %xmm7, (%rdi)
652 ; SSE4-NEXT:    testb $2, %al
653 ; SSE4-NEXT:    je .LBB1_4
654 ; SSE4-NEXT:  .LBB1_3: # %cond.store1
655 ; SSE4-NEXT:    pextrw $1, %xmm7, 2(%rdi)
656 ; SSE4-NEXT:    testb $4, %al
657 ; SSE4-NEXT:    je .LBB1_6
658 ; SSE4-NEXT:  .LBB1_5: # %cond.store3
659 ; SSE4-NEXT:    pextrw $2, %xmm7, 4(%rdi)
660 ; SSE4-NEXT:    testb $8, %al
661 ; SSE4-NEXT:    je .LBB1_8
662 ; SSE4-NEXT:  .LBB1_7: # %cond.store5
663 ; SSE4-NEXT:    pextrw $3, %xmm7, 6(%rdi)
664 ; SSE4-NEXT:    testb $16, %al
665 ; SSE4-NEXT:    je .LBB1_10
666 ; SSE4-NEXT:  .LBB1_9: # %cond.store7
667 ; SSE4-NEXT:    pextrw $4, %xmm7, 8(%rdi)
668 ; SSE4-NEXT:    testb $32, %al
669 ; SSE4-NEXT:    je .LBB1_12
670 ; SSE4-NEXT:  .LBB1_11: # %cond.store9
671 ; SSE4-NEXT:    pextrw $5, %xmm7, 10(%rdi)
672 ; SSE4-NEXT:    testb $64, %al
673 ; SSE4-NEXT:    je .LBB1_14
674 ; SSE4-NEXT:  .LBB1_13: # %cond.store11
675 ; SSE4-NEXT:    pextrw $6, %xmm7, 12(%rdi)
676 ; SSE4-NEXT:    testb $-128, %al
677 ; SSE4-NEXT:    je .LBB1_16
678 ; SSE4-NEXT:  .LBB1_15: # %cond.store13
679 ; SSE4-NEXT:    pextrw $7, %xmm7, 14(%rdi)
680 ; SSE4-NEXT:    retq
682 ; AVX1-LABEL: truncstore_v8i64_v8i16:
683 ; AVX1:       # %bb.0:
684 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
685 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [32767,32767]
686 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm8
687 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm9
688 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
689 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm4, %xmm5
690 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm6
691 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
692 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [18446744073709518848,18446744073709518848]
693 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm10
694 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm7, %xmm4, %xmm5
695 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm5, %xmm11
696 ; AVX1-NEXT:    vblendvpd %xmm9, %xmm1, %xmm4, %xmm1
697 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm1, %xmm7
698 ; AVX1-NEXT:    vblendvpd %xmm8, %xmm3, %xmm4, %xmm3
699 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4
700 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
701 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm6, %xmm1
702 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm1, %xmm1
703 ; AVX1-NEXT:    vblendvpd %xmm11, %xmm5, %xmm6, %xmm3
704 ; AVX1-NEXT:    vblendvpd %xmm10, %xmm0, %xmm6, %xmm0
705 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
706 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
707 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1
708 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
709 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
710 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
711 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
712 ; AVX1-NEXT:    vmovmskps %ymm1, %eax
713 ; AVX1-NEXT:    notl %eax
714 ; AVX1-NEXT:    testb $1, %al
715 ; AVX1-NEXT:    jne .LBB1_1
716 ; AVX1-NEXT:  # %bb.2: # %else
717 ; AVX1-NEXT:    testb $2, %al
718 ; AVX1-NEXT:    jne .LBB1_3
719 ; AVX1-NEXT:  .LBB1_4: # %else2
720 ; AVX1-NEXT:    testb $4, %al
721 ; AVX1-NEXT:    jne .LBB1_5
722 ; AVX1-NEXT:  .LBB1_6: # %else4
723 ; AVX1-NEXT:    testb $8, %al
724 ; AVX1-NEXT:    jne .LBB1_7
725 ; AVX1-NEXT:  .LBB1_8: # %else6
726 ; AVX1-NEXT:    testb $16, %al
727 ; AVX1-NEXT:    jne .LBB1_9
728 ; AVX1-NEXT:  .LBB1_10: # %else8
729 ; AVX1-NEXT:    testb $32, %al
730 ; AVX1-NEXT:    jne .LBB1_11
731 ; AVX1-NEXT:  .LBB1_12: # %else10
732 ; AVX1-NEXT:    testb $64, %al
733 ; AVX1-NEXT:    jne .LBB1_13
734 ; AVX1-NEXT:  .LBB1_14: # %else12
735 ; AVX1-NEXT:    testb $-128, %al
736 ; AVX1-NEXT:    jne .LBB1_15
737 ; AVX1-NEXT:  .LBB1_16: # %else14
738 ; AVX1-NEXT:    vzeroupper
739 ; AVX1-NEXT:    retq
740 ; AVX1-NEXT:  .LBB1_1: # %cond.store
741 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
742 ; AVX1-NEXT:    testb $2, %al
743 ; AVX1-NEXT:    je .LBB1_4
744 ; AVX1-NEXT:  .LBB1_3: # %cond.store1
745 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
746 ; AVX1-NEXT:    testb $4, %al
747 ; AVX1-NEXT:    je .LBB1_6
748 ; AVX1-NEXT:  .LBB1_5: # %cond.store3
749 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
750 ; AVX1-NEXT:    testb $8, %al
751 ; AVX1-NEXT:    je .LBB1_8
752 ; AVX1-NEXT:  .LBB1_7: # %cond.store5
753 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
754 ; AVX1-NEXT:    testb $16, %al
755 ; AVX1-NEXT:    je .LBB1_10
756 ; AVX1-NEXT:  .LBB1_9: # %cond.store7
757 ; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
758 ; AVX1-NEXT:    testb $32, %al
759 ; AVX1-NEXT:    je .LBB1_12
760 ; AVX1-NEXT:  .LBB1_11: # %cond.store9
761 ; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
762 ; AVX1-NEXT:    testb $64, %al
763 ; AVX1-NEXT:    je .LBB1_14
764 ; AVX1-NEXT:  .LBB1_13: # %cond.store11
765 ; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
766 ; AVX1-NEXT:    testb $-128, %al
767 ; AVX1-NEXT:    je .LBB1_16
768 ; AVX1-NEXT:  .LBB1_15: # %cond.store13
769 ; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
770 ; AVX1-NEXT:    vzeroupper
771 ; AVX1-NEXT:    retq
773 ; AVX2-LABEL: truncstore_v8i64_v8i16:
774 ; AVX2:       # %bb.0:
775 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
776 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [32767,32767,32767,32767]
777 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm5
778 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
779 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm5
780 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
781 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
782 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm5
783 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
784 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm5
785 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
786 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
787 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
788 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
789 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
790 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1
791 ; AVX2-NEXT:    vmovmskps %ymm1, %eax
792 ; AVX2-NEXT:    notl %eax
793 ; AVX2-NEXT:    testb $1, %al
794 ; AVX2-NEXT:    jne .LBB1_1
795 ; AVX2-NEXT:  # %bb.2: # %else
796 ; AVX2-NEXT:    testb $2, %al
797 ; AVX2-NEXT:    jne .LBB1_3
798 ; AVX2-NEXT:  .LBB1_4: # %else2
799 ; AVX2-NEXT:    testb $4, %al
800 ; AVX2-NEXT:    jne .LBB1_5
801 ; AVX2-NEXT:  .LBB1_6: # %else4
802 ; AVX2-NEXT:    testb $8, %al
803 ; AVX2-NEXT:    jne .LBB1_7
804 ; AVX2-NEXT:  .LBB1_8: # %else6
805 ; AVX2-NEXT:    testb $16, %al
806 ; AVX2-NEXT:    jne .LBB1_9
807 ; AVX2-NEXT:  .LBB1_10: # %else8
808 ; AVX2-NEXT:    testb $32, %al
809 ; AVX2-NEXT:    jne .LBB1_11
810 ; AVX2-NEXT:  .LBB1_12: # %else10
811 ; AVX2-NEXT:    testb $64, %al
812 ; AVX2-NEXT:    jne .LBB1_13
813 ; AVX2-NEXT:  .LBB1_14: # %else12
814 ; AVX2-NEXT:    testb $-128, %al
815 ; AVX2-NEXT:    jne .LBB1_15
816 ; AVX2-NEXT:  .LBB1_16: # %else14
817 ; AVX2-NEXT:    vzeroupper
818 ; AVX2-NEXT:    retq
819 ; AVX2-NEXT:  .LBB1_1: # %cond.store
820 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
821 ; AVX2-NEXT:    testb $2, %al
822 ; AVX2-NEXT:    je .LBB1_4
823 ; AVX2-NEXT:  .LBB1_3: # %cond.store1
824 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
825 ; AVX2-NEXT:    testb $4, %al
826 ; AVX2-NEXT:    je .LBB1_6
827 ; AVX2-NEXT:  .LBB1_5: # %cond.store3
828 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
829 ; AVX2-NEXT:    testb $8, %al
830 ; AVX2-NEXT:    je .LBB1_8
831 ; AVX2-NEXT:  .LBB1_7: # %cond.store5
832 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
833 ; AVX2-NEXT:    testb $16, %al
834 ; AVX2-NEXT:    je .LBB1_10
835 ; AVX2-NEXT:  .LBB1_9: # %cond.store7
836 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
837 ; AVX2-NEXT:    testb $32, %al
838 ; AVX2-NEXT:    je .LBB1_12
839 ; AVX2-NEXT:  .LBB1_11: # %cond.store9
840 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
841 ; AVX2-NEXT:    testb $64, %al
842 ; AVX2-NEXT:    je .LBB1_14
843 ; AVX2-NEXT:  .LBB1_13: # %cond.store11
844 ; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
845 ; AVX2-NEXT:    testb $-128, %al
846 ; AVX2-NEXT:    je .LBB1_16
847 ; AVX2-NEXT:  .LBB1_15: # %cond.store13
848 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
849 ; AVX2-NEXT:    vzeroupper
850 ; AVX2-NEXT:    retq
852 ; AVX512F-LABEL: truncstore_v8i64_v8i16:
853 ; AVX512F:       # %bb.0:
854 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
855 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
856 ; AVX512F-NEXT:    vpmovsqw %zmm0, %xmm0
857 ; AVX512F-NEXT:    kmovw %k0, %eax
858 ; AVX512F-NEXT:    testb $1, %al
859 ; AVX512F-NEXT:    jne .LBB1_1
860 ; AVX512F-NEXT:  # %bb.2: # %else
861 ; AVX512F-NEXT:    testb $2, %al
862 ; AVX512F-NEXT:    jne .LBB1_3
863 ; AVX512F-NEXT:  .LBB1_4: # %else2
864 ; AVX512F-NEXT:    testb $4, %al
865 ; AVX512F-NEXT:    jne .LBB1_5
866 ; AVX512F-NEXT:  .LBB1_6: # %else4
867 ; AVX512F-NEXT:    testb $8, %al
868 ; AVX512F-NEXT:    jne .LBB1_7
869 ; AVX512F-NEXT:  .LBB1_8: # %else6
870 ; AVX512F-NEXT:    testb $16, %al
871 ; AVX512F-NEXT:    jne .LBB1_9
872 ; AVX512F-NEXT:  .LBB1_10: # %else8
873 ; AVX512F-NEXT:    testb $32, %al
874 ; AVX512F-NEXT:    jne .LBB1_11
875 ; AVX512F-NEXT:  .LBB1_12: # %else10
876 ; AVX512F-NEXT:    testb $64, %al
877 ; AVX512F-NEXT:    jne .LBB1_13
878 ; AVX512F-NEXT:  .LBB1_14: # %else12
879 ; AVX512F-NEXT:    testb $-128, %al
880 ; AVX512F-NEXT:    jne .LBB1_15
881 ; AVX512F-NEXT:  .LBB1_16: # %else14
882 ; AVX512F-NEXT:    vzeroupper
883 ; AVX512F-NEXT:    retq
884 ; AVX512F-NEXT:  .LBB1_1: # %cond.store
885 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
886 ; AVX512F-NEXT:    testb $2, %al
887 ; AVX512F-NEXT:    je .LBB1_4
888 ; AVX512F-NEXT:  .LBB1_3: # %cond.store1
889 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
890 ; AVX512F-NEXT:    testb $4, %al
891 ; AVX512F-NEXT:    je .LBB1_6
892 ; AVX512F-NEXT:  .LBB1_5: # %cond.store3
893 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
894 ; AVX512F-NEXT:    testb $8, %al
895 ; AVX512F-NEXT:    je .LBB1_8
896 ; AVX512F-NEXT:  .LBB1_7: # %cond.store5
897 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
898 ; AVX512F-NEXT:    testb $16, %al
899 ; AVX512F-NEXT:    je .LBB1_10
900 ; AVX512F-NEXT:  .LBB1_9: # %cond.store7
901 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
902 ; AVX512F-NEXT:    testb $32, %al
903 ; AVX512F-NEXT:    je .LBB1_12
904 ; AVX512F-NEXT:  .LBB1_11: # %cond.store9
905 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
906 ; AVX512F-NEXT:    testb $64, %al
907 ; AVX512F-NEXT:    je .LBB1_14
908 ; AVX512F-NEXT:  .LBB1_13: # %cond.store11
909 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
910 ; AVX512F-NEXT:    testb $-128, %al
911 ; AVX512F-NEXT:    je .LBB1_16
912 ; AVX512F-NEXT:  .LBB1_15: # %cond.store13
913 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
914 ; AVX512F-NEXT:    vzeroupper
915 ; AVX512F-NEXT:    retq
917 ; AVX512BW-LABEL: truncstore_v8i64_v8i16:
918 ; AVX512BW:       # %bb.0:
919 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
920 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
921 ; AVX512BW-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
922 ; AVX512BW-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
923 ; AVX512BW-NEXT:    vpmovqw %zmm0, (%rdi) {%k1}
924 ; AVX512BW-NEXT:    vzeroupper
925 ; AVX512BW-NEXT:    retq
927 ; AVX512BWVL-LABEL: truncstore_v8i64_v8i16:
928 ; AVX512BWVL:       # %bb.0:
929 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
930 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
931 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
932 ; AVX512BWVL-NEXT:    vpmovqw %zmm0, (%rdi) {%k1}
933 ; AVX512BWVL-NEXT:    vzeroupper
934 ; AVX512BWVL-NEXT:    retq
935   %a = icmp ne <8 x i32> %mask, zeroinitializer
936   %b = icmp slt <8 x i64> %x, <i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767>
937   %c = select <8 x i1> %b, <8 x i64> %x, <8 x i64> <i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767>
938   %d = icmp sgt <8 x i64> %c, <i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768>
939   %e = select <8 x i1> %d, <8 x i64> %c, <8 x i64> <i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768>
940   %f = trunc <8 x i64> %e to <8 x i16>
941   call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> %f, <8 x i16>* %p, i32 1, <8 x i1> %a)
942   ret void
945 define void @truncstore_v8i64_v8i8(<8 x i64> %x, <8 x i8>* %p, <8 x i32> %mask) {
946 ; SSE2-LABEL: truncstore_v8i64_v8i8:
947 ; SSE2:       # %bb.0:
948 ; SSE2-NEXT:    pxor %xmm8, %xmm8
949 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [127,127]
950 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648]
951 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
952 ; SSE2-NEXT:    pxor %xmm11, %xmm6
953 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483775,2147483775]
954 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
955 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
956 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm7[0,0,2,2]
957 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm6
958 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
959 ; SSE2-NEXT:    pand %xmm12, %xmm6
960 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
961 ; SSE2-NEXT:    por %xmm6, %xmm13
962 ; SSE2-NEXT:    pand %xmm13, %xmm3
963 ; SSE2-NEXT:    pandn %xmm9, %xmm13
964 ; SSE2-NEXT:    por %xmm3, %xmm13
965 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
966 ; SSE2-NEXT:    pxor %xmm11, %xmm3
967 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
968 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
969 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
970 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm3
971 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
972 ; SSE2-NEXT:    pand %xmm12, %xmm7
973 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
974 ; SSE2-NEXT:    por %xmm7, %xmm3
975 ; SSE2-NEXT:    pand %xmm3, %xmm2
976 ; SSE2-NEXT:    pandn %xmm9, %xmm3
977 ; SSE2-NEXT:    por %xmm2, %xmm3
978 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
979 ; SSE2-NEXT:    pxor %xmm11, %xmm2
980 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
981 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6
982 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
983 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
984 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
985 ; SSE2-NEXT:    pand %xmm12, %xmm7
986 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
987 ; SSE2-NEXT:    por %xmm7, %xmm2
988 ; SSE2-NEXT:    pand %xmm2, %xmm1
989 ; SSE2-NEXT:    pandn %xmm9, %xmm2
990 ; SSE2-NEXT:    por %xmm1, %xmm2
991 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
992 ; SSE2-NEXT:    pxor %xmm11, %xmm1
993 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
994 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
995 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
996 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
997 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
998 ; SSE2-NEXT:    pand %xmm7, %xmm1
999 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
1000 ; SSE2-NEXT:    por %xmm1, %xmm6
1001 ; SSE2-NEXT:    pand %xmm6, %xmm0
1002 ; SSE2-NEXT:    pandn %xmm9, %xmm6
1003 ; SSE2-NEXT:    por %xmm0, %xmm6
1004 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [18446744073709551488,18446744073709551488]
1005 ; SSE2-NEXT:    movdqa %xmm6, %xmm0
1006 ; SSE2-NEXT:    pxor %xmm11, %xmm0
1007 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [18446744071562067840,18446744071562067840]
1008 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1009 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1
1010 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm1[0,0,2,2]
1011 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1012 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1013 ; SSE2-NEXT:    pand %xmm12, %xmm7
1014 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
1015 ; SSE2-NEXT:    por %xmm7, %xmm0
1016 ; SSE2-NEXT:    pand %xmm0, %xmm6
1017 ; SSE2-NEXT:    pandn %xmm9, %xmm0
1018 ; SSE2-NEXT:    por %xmm6, %xmm0
1019 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1020 ; SSE2-NEXT:    pxor %xmm11, %xmm1
1021 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
1022 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6
1023 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
1024 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
1025 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
1026 ; SSE2-NEXT:    pand %xmm12, %xmm7
1027 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm6[1,1,3,3]
1028 ; SSE2-NEXT:    por %xmm7, %xmm1
1029 ; SSE2-NEXT:    pand %xmm1, %xmm2
1030 ; SSE2-NEXT:    pandn %xmm9, %xmm1
1031 ; SSE2-NEXT:    por %xmm2, %xmm1
1032 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1033 ; SSE2-NEXT:    pxor %xmm11, %xmm2
1034 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1035 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6
1036 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm6[0,0,2,2]
1037 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
1038 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1039 ; SSE2-NEXT:    pand %xmm12, %xmm7
1040 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
1041 ; SSE2-NEXT:    por %xmm7, %xmm2
1042 ; SSE2-NEXT:    pand %xmm2, %xmm3
1043 ; SSE2-NEXT:    pandn %xmm9, %xmm2
1044 ; SSE2-NEXT:    por %xmm3, %xmm2
1045 ; SSE2-NEXT:    pxor %xmm13, %xmm11
1046 ; SSE2-NEXT:    movdqa %xmm11, %xmm3
1047 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
1048 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1049 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
1050 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm11[1,1,3,3]
1051 ; SSE2-NEXT:    pand %xmm6, %xmm7
1052 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1053 ; SSE2-NEXT:    por %xmm7, %xmm3
1054 ; SSE2-NEXT:    pand %xmm3, %xmm13
1055 ; SSE2-NEXT:    pandn %xmm9, %xmm3
1056 ; SSE2-NEXT:    por %xmm13, %xmm3
1057 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1058 ; SSE2-NEXT:    pand %xmm6, %xmm3
1059 ; SSE2-NEXT:    pand %xmm6, %xmm2
1060 ; SSE2-NEXT:    packuswb %xmm3, %xmm2
1061 ; SSE2-NEXT:    pand %xmm6, %xmm1
1062 ; SSE2-NEXT:    pand %xmm6, %xmm0
1063 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
1064 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
1065 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
1066 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
1067 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
1068 ; SSE2-NEXT:    pxor %xmm1, %xmm5
1069 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
1070 ; SSE2-NEXT:    pxor %xmm1, %xmm4
1071 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
1072 ; SSE2-NEXT:    packsswb %xmm0, %xmm4
1073 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
1074 ; SSE2-NEXT:    testb $1, %al
1075 ; SSE2-NEXT:    movd %xmm0, %ecx
1076 ; SSE2-NEXT:    jne .LBB2_1
1077 ; SSE2-NEXT:  # %bb.2: # %else
1078 ; SSE2-NEXT:    testb $2, %al
1079 ; SSE2-NEXT:    jne .LBB2_3
1080 ; SSE2-NEXT:  .LBB2_4: # %else2
1081 ; SSE2-NEXT:    testb $4, %al
1082 ; SSE2-NEXT:    jne .LBB2_5
1083 ; SSE2-NEXT:  .LBB2_6: # %else4
1084 ; SSE2-NEXT:    testb $8, %al
1085 ; SSE2-NEXT:    je .LBB2_8
1086 ; SSE2-NEXT:  .LBB2_7: # %cond.store5
1087 ; SSE2-NEXT:    shrl $24, %ecx
1088 ; SSE2-NEXT:    movb %cl, 3(%rdi)
1089 ; SSE2-NEXT:  .LBB2_8: # %else6
1090 ; SSE2-NEXT:    testb $16, %al
1091 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
1092 ; SSE2-NEXT:    je .LBB2_10
1093 ; SSE2-NEXT:  # %bb.9: # %cond.store7
1094 ; SSE2-NEXT:    movb %cl, 4(%rdi)
1095 ; SSE2-NEXT:  .LBB2_10: # %else8
1096 ; SSE2-NEXT:    testb $32, %al
1097 ; SSE2-NEXT:    je .LBB2_12
1098 ; SSE2-NEXT:  # %bb.11: # %cond.store9
1099 ; SSE2-NEXT:    movb %ch, 5(%rdi)
1100 ; SSE2-NEXT:  .LBB2_12: # %else10
1101 ; SSE2-NEXT:    testb $64, %al
1102 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
1103 ; SSE2-NEXT:    jne .LBB2_13
1104 ; SSE2-NEXT:  # %bb.14: # %else12
1105 ; SSE2-NEXT:    testb $-128, %al
1106 ; SSE2-NEXT:    jne .LBB2_15
1107 ; SSE2-NEXT:  .LBB2_16: # %else14
1108 ; SSE2-NEXT:    retq
1109 ; SSE2-NEXT:  .LBB2_1: # %cond.store
1110 ; SSE2-NEXT:    movb %cl, (%rdi)
1111 ; SSE2-NEXT:    testb $2, %al
1112 ; SSE2-NEXT:    je .LBB2_4
1113 ; SSE2-NEXT:  .LBB2_3: # %cond.store1
1114 ; SSE2-NEXT:    movb %ch, 1(%rdi)
1115 ; SSE2-NEXT:    testb $4, %al
1116 ; SSE2-NEXT:    je .LBB2_6
1117 ; SSE2-NEXT:  .LBB2_5: # %cond.store3
1118 ; SSE2-NEXT:    movl %ecx, %edx
1119 ; SSE2-NEXT:    shrl $16, %edx
1120 ; SSE2-NEXT:    movb %dl, 2(%rdi)
1121 ; SSE2-NEXT:    testb $8, %al
1122 ; SSE2-NEXT:    jne .LBB2_7
1123 ; SSE2-NEXT:    jmp .LBB2_8
1124 ; SSE2-NEXT:  .LBB2_13: # %cond.store11
1125 ; SSE2-NEXT:    movb %cl, 6(%rdi)
1126 ; SSE2-NEXT:    testb $-128, %al
1127 ; SSE2-NEXT:    je .LBB2_16
1128 ; SSE2-NEXT:  .LBB2_15: # %cond.store13
1129 ; SSE2-NEXT:    movb %ch, 7(%rdi)
1130 ; SSE2-NEXT:    retq
1132 ; SSE4-LABEL: truncstore_v8i64_v8i8:
1133 ; SSE4:       # %bb.0:
1134 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
1135 ; SSE4-NEXT:    pxor %xmm8, %xmm8
1136 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [127,127]
1137 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
1138 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
1139 ; SSE4-NEXT:    movdqa %xmm7, %xmm10
1140 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm10
1141 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
1142 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
1143 ; SSE4-NEXT:    movdqa %xmm7, %xmm3
1144 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm3
1145 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
1146 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1147 ; SSE4-NEXT:    movdqa %xmm7, %xmm2
1148 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm2
1149 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
1150 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
1151 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm7
1152 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]
1153 ; SSE4-NEXT:    movapd %xmm7, %xmm0
1154 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1155 ; SSE4-NEXT:    movdqa %xmm1, %xmm6
1156 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm6
1157 ; SSE4-NEXT:    movapd %xmm2, %xmm0
1158 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1159 ; SSE4-NEXT:    movdqa %xmm1, %xmm7
1160 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm7
1161 ; SSE4-NEXT:    movapd %xmm3, %xmm0
1162 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1163 ; SSE4-NEXT:    movdqa %xmm1, %xmm2
1164 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
1165 ; SSE4-NEXT:    movapd %xmm10, %xmm0
1166 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1167 ; SSE4-NEXT:    blendvpd %xmm0, %xmm10, %xmm1
1168 ; SSE4-NEXT:    movapd {{.*#+}} xmm0 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1169 ; SSE4-NEXT:    andpd %xmm0, %xmm1
1170 ; SSE4-NEXT:    andpd %xmm0, %xmm2
1171 ; SSE4-NEXT:    packusdw %xmm1, %xmm2
1172 ; SSE4-NEXT:    andpd %xmm0, %xmm7
1173 ; SSE4-NEXT:    andpd %xmm0, %xmm6
1174 ; SSE4-NEXT:    packusdw %xmm7, %xmm6
1175 ; SSE4-NEXT:    packusdw %xmm2, %xmm6
1176 ; SSE4-NEXT:    packuswb %xmm6, %xmm6
1177 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
1178 ; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
1179 ; SSE4-NEXT:    pxor %xmm0, %xmm5
1180 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
1181 ; SSE4-NEXT:    pxor %xmm0, %xmm4
1182 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
1183 ; SSE4-NEXT:    packsswb %xmm0, %xmm4
1184 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
1185 ; SSE4-NEXT:    testb $1, %al
1186 ; SSE4-NEXT:    jne .LBB2_1
1187 ; SSE4-NEXT:  # %bb.2: # %else
1188 ; SSE4-NEXT:    testb $2, %al
1189 ; SSE4-NEXT:    jne .LBB2_3
1190 ; SSE4-NEXT:  .LBB2_4: # %else2
1191 ; SSE4-NEXT:    testb $4, %al
1192 ; SSE4-NEXT:    jne .LBB2_5
1193 ; SSE4-NEXT:  .LBB2_6: # %else4
1194 ; SSE4-NEXT:    testb $8, %al
1195 ; SSE4-NEXT:    jne .LBB2_7
1196 ; SSE4-NEXT:  .LBB2_8: # %else6
1197 ; SSE4-NEXT:    testb $16, %al
1198 ; SSE4-NEXT:    jne .LBB2_9
1199 ; SSE4-NEXT:  .LBB2_10: # %else8
1200 ; SSE4-NEXT:    testb $32, %al
1201 ; SSE4-NEXT:    jne .LBB2_11
1202 ; SSE4-NEXT:  .LBB2_12: # %else10
1203 ; SSE4-NEXT:    testb $64, %al
1204 ; SSE4-NEXT:    jne .LBB2_13
1205 ; SSE4-NEXT:  .LBB2_14: # %else12
1206 ; SSE4-NEXT:    testb $-128, %al
1207 ; SSE4-NEXT:    jne .LBB2_15
1208 ; SSE4-NEXT:  .LBB2_16: # %else14
1209 ; SSE4-NEXT:    retq
1210 ; SSE4-NEXT:  .LBB2_1: # %cond.store
1211 ; SSE4-NEXT:    pextrb $0, %xmm6, (%rdi)
1212 ; SSE4-NEXT:    testb $2, %al
1213 ; SSE4-NEXT:    je .LBB2_4
1214 ; SSE4-NEXT:  .LBB2_3: # %cond.store1
1215 ; SSE4-NEXT:    pextrb $1, %xmm6, 1(%rdi)
1216 ; SSE4-NEXT:    testb $4, %al
1217 ; SSE4-NEXT:    je .LBB2_6
1218 ; SSE4-NEXT:  .LBB2_5: # %cond.store3
1219 ; SSE4-NEXT:    pextrb $2, %xmm6, 2(%rdi)
1220 ; SSE4-NEXT:    testb $8, %al
1221 ; SSE4-NEXT:    je .LBB2_8
1222 ; SSE4-NEXT:  .LBB2_7: # %cond.store5
1223 ; SSE4-NEXT:    pextrb $3, %xmm6, 3(%rdi)
1224 ; SSE4-NEXT:    testb $16, %al
1225 ; SSE4-NEXT:    je .LBB2_10
1226 ; SSE4-NEXT:  .LBB2_9: # %cond.store7
1227 ; SSE4-NEXT:    pextrb $4, %xmm6, 4(%rdi)
1228 ; SSE4-NEXT:    testb $32, %al
1229 ; SSE4-NEXT:    je .LBB2_12
1230 ; SSE4-NEXT:  .LBB2_11: # %cond.store9
1231 ; SSE4-NEXT:    pextrb $5, %xmm6, 5(%rdi)
1232 ; SSE4-NEXT:    testb $64, %al
1233 ; SSE4-NEXT:    je .LBB2_14
1234 ; SSE4-NEXT:  .LBB2_13: # %cond.store11
1235 ; SSE4-NEXT:    pextrb $6, %xmm6, 6(%rdi)
1236 ; SSE4-NEXT:    testb $-128, %al
1237 ; SSE4-NEXT:    je .LBB2_16
1238 ; SSE4-NEXT:  .LBB2_15: # %cond.store13
1239 ; SSE4-NEXT:    pextrb $7, %xmm6, 7(%rdi)
1240 ; SSE4-NEXT:    retq
1242 ; AVX1-LABEL: truncstore_v8i64_v8i8:
1243 ; AVX1:       # %bb.0:
1244 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm9 = [127,127,127,127]
1245 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm10
1246 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [127,127]
1247 ; AVX1-NEXT:    vpcmpgtq %xmm10, %xmm5, %xmm6
1248 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm5, %xmm7
1249 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm7, %ymm8
1250 ; AVX1-NEXT:    vblendvpd %ymm8, %ymm1, %ymm9, %ymm8
1251 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1252 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm4
1253 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm5, %xmm11
1254 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm11, %ymm12
1255 ; AVX1-NEXT:    vblendvpd %ymm12, %ymm0, %ymm9, %ymm9
1256 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm12 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
1257 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm5, %xmm3
1258 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488]
1259 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
1260 ; AVX1-NEXT:    vblendvpd %xmm11, %xmm0, %xmm5, %xmm0
1261 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm0
1262 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0
1263 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm9, %ymm12, %ymm0
1264 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm10, %xmm5, %xmm3
1265 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
1266 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm1, %xmm5, %xmm1
1267 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm1, %xmm1
1268 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
1269 ; AVX1-NEXT:    vblendvpd %ymm1, %ymm8, %ymm12, %ymm1
1270 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm3 = [255,255,255,255]
1271 ; AVX1-NEXT:    vandpd %ymm3, %ymm1, %ymm1
1272 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
1273 ; AVX1-NEXT:    vpackusdw %xmm4, %xmm1, %xmm1
1274 ; AVX1-NEXT:    vandpd %ymm3, %ymm0, %ymm0
1275 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1276 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
1277 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
1278 ; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
1279 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm1
1280 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1281 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
1282 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
1283 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
1284 ; AVX1-NEXT:    vmovmskps %ymm1, %eax
1285 ; AVX1-NEXT:    notl %eax
1286 ; AVX1-NEXT:    testb $1, %al
1287 ; AVX1-NEXT:    jne .LBB2_1
1288 ; AVX1-NEXT:  # %bb.2: # %else
1289 ; AVX1-NEXT:    testb $2, %al
1290 ; AVX1-NEXT:    jne .LBB2_3
1291 ; AVX1-NEXT:  .LBB2_4: # %else2
1292 ; AVX1-NEXT:    testb $4, %al
1293 ; AVX1-NEXT:    jne .LBB2_5
1294 ; AVX1-NEXT:  .LBB2_6: # %else4
1295 ; AVX1-NEXT:    testb $8, %al
1296 ; AVX1-NEXT:    jne .LBB2_7
1297 ; AVX1-NEXT:  .LBB2_8: # %else6
1298 ; AVX1-NEXT:    testb $16, %al
1299 ; AVX1-NEXT:    jne .LBB2_9
1300 ; AVX1-NEXT:  .LBB2_10: # %else8
1301 ; AVX1-NEXT:    testb $32, %al
1302 ; AVX1-NEXT:    jne .LBB2_11
1303 ; AVX1-NEXT:  .LBB2_12: # %else10
1304 ; AVX1-NEXT:    testb $64, %al
1305 ; AVX1-NEXT:    jne .LBB2_13
1306 ; AVX1-NEXT:  .LBB2_14: # %else12
1307 ; AVX1-NEXT:    testb $-128, %al
1308 ; AVX1-NEXT:    jne .LBB2_15
1309 ; AVX1-NEXT:  .LBB2_16: # %else14
1310 ; AVX1-NEXT:    vzeroupper
1311 ; AVX1-NEXT:    retq
1312 ; AVX1-NEXT:  .LBB2_1: # %cond.store
1313 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
1314 ; AVX1-NEXT:    testb $2, %al
1315 ; AVX1-NEXT:    je .LBB2_4
1316 ; AVX1-NEXT:  .LBB2_3: # %cond.store1
1317 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1318 ; AVX1-NEXT:    testb $4, %al
1319 ; AVX1-NEXT:    je .LBB2_6
1320 ; AVX1-NEXT:  .LBB2_5: # %cond.store3
1321 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1322 ; AVX1-NEXT:    testb $8, %al
1323 ; AVX1-NEXT:    je .LBB2_8
1324 ; AVX1-NEXT:  .LBB2_7: # %cond.store5
1325 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1326 ; AVX1-NEXT:    testb $16, %al
1327 ; AVX1-NEXT:    je .LBB2_10
1328 ; AVX1-NEXT:  .LBB2_9: # %cond.store7
1329 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
1330 ; AVX1-NEXT:    testb $32, %al
1331 ; AVX1-NEXT:    je .LBB2_12
1332 ; AVX1-NEXT:  .LBB2_11: # %cond.store9
1333 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
1334 ; AVX1-NEXT:    testb $64, %al
1335 ; AVX1-NEXT:    je .LBB2_14
1336 ; AVX1-NEXT:  .LBB2_13: # %cond.store11
1337 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
1338 ; AVX1-NEXT:    testb $-128, %al
1339 ; AVX1-NEXT:    je .LBB2_16
1340 ; AVX1-NEXT:  .LBB2_15: # %cond.store13
1341 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
1342 ; AVX1-NEXT:    vzeroupper
1343 ; AVX1-NEXT:    retq
1345 ; AVX2-LABEL: truncstore_v8i64_v8i8:
1346 ; AVX2:       # %bb.0:
1347 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1348 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [127,127,127,127]
1349 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm5
1350 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
1351 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm5
1352 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
1353 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
1354 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm5
1355 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
1356 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm5
1357 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
1358 ; AVX2-NEXT:    vextractf128 $1, %ymm1, %xmm4
1359 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u>
1360 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1361 ; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1362 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]
1363 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm4
1364 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm5 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
1365 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1366 ; AVX2-NEXT:    vpshufb %xmm5, %xmm0, %xmm0
1367 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]
1368 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]
1369 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm2, %ymm1
1370 ; AVX2-NEXT:    vmovmskps %ymm1, %eax
1371 ; AVX2-NEXT:    notl %eax
1372 ; AVX2-NEXT:    testb $1, %al
1373 ; AVX2-NEXT:    jne .LBB2_1
1374 ; AVX2-NEXT:  # %bb.2: # %else
1375 ; AVX2-NEXT:    testb $2, %al
1376 ; AVX2-NEXT:    jne .LBB2_3
1377 ; AVX2-NEXT:  .LBB2_4: # %else2
1378 ; AVX2-NEXT:    testb $4, %al
1379 ; AVX2-NEXT:    jne .LBB2_5
1380 ; AVX2-NEXT:  .LBB2_6: # %else4
1381 ; AVX2-NEXT:    testb $8, %al
1382 ; AVX2-NEXT:    jne .LBB2_7
1383 ; AVX2-NEXT:  .LBB2_8: # %else6
1384 ; AVX2-NEXT:    testb $16, %al
1385 ; AVX2-NEXT:    jne .LBB2_9
1386 ; AVX2-NEXT:  .LBB2_10: # %else8
1387 ; AVX2-NEXT:    testb $32, %al
1388 ; AVX2-NEXT:    jne .LBB2_11
1389 ; AVX2-NEXT:  .LBB2_12: # %else10
1390 ; AVX2-NEXT:    testb $64, %al
1391 ; AVX2-NEXT:    jne .LBB2_13
1392 ; AVX2-NEXT:  .LBB2_14: # %else12
1393 ; AVX2-NEXT:    testb $-128, %al
1394 ; AVX2-NEXT:    jne .LBB2_15
1395 ; AVX2-NEXT:  .LBB2_16: # %else14
1396 ; AVX2-NEXT:    vzeroupper
1397 ; AVX2-NEXT:    retq
1398 ; AVX2-NEXT:  .LBB2_1: # %cond.store
1399 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
1400 ; AVX2-NEXT:    testb $2, %al
1401 ; AVX2-NEXT:    je .LBB2_4
1402 ; AVX2-NEXT:  .LBB2_3: # %cond.store1
1403 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1404 ; AVX2-NEXT:    testb $4, %al
1405 ; AVX2-NEXT:    je .LBB2_6
1406 ; AVX2-NEXT:  .LBB2_5: # %cond.store3
1407 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1408 ; AVX2-NEXT:    testb $8, %al
1409 ; AVX2-NEXT:    je .LBB2_8
1410 ; AVX2-NEXT:  .LBB2_7: # %cond.store5
1411 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1412 ; AVX2-NEXT:    testb $16, %al
1413 ; AVX2-NEXT:    je .LBB2_10
1414 ; AVX2-NEXT:  .LBB2_9: # %cond.store7
1415 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
1416 ; AVX2-NEXT:    testb $32, %al
1417 ; AVX2-NEXT:    je .LBB2_12
1418 ; AVX2-NEXT:  .LBB2_11: # %cond.store9
1419 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
1420 ; AVX2-NEXT:    testb $64, %al
1421 ; AVX2-NEXT:    je .LBB2_14
1422 ; AVX2-NEXT:  .LBB2_13: # %cond.store11
1423 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
1424 ; AVX2-NEXT:    testb $-128, %al
1425 ; AVX2-NEXT:    je .LBB2_16
1426 ; AVX2-NEXT:  .LBB2_15: # %cond.store13
1427 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
1428 ; AVX2-NEXT:    vzeroupper
1429 ; AVX2-NEXT:    retq
1431 ; AVX512F-LABEL: truncstore_v8i64_v8i8:
1432 ; AVX512F:       # %bb.0:
1433 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
1434 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
1435 ; AVX512F-NEXT:    vpmovsqb %zmm0, %xmm0
1436 ; AVX512F-NEXT:    kmovw %k0, %eax
1437 ; AVX512F-NEXT:    testb $1, %al
1438 ; AVX512F-NEXT:    jne .LBB2_1
1439 ; AVX512F-NEXT:  # %bb.2: # %else
1440 ; AVX512F-NEXT:    testb $2, %al
1441 ; AVX512F-NEXT:    jne .LBB2_3
1442 ; AVX512F-NEXT:  .LBB2_4: # %else2
1443 ; AVX512F-NEXT:    testb $4, %al
1444 ; AVX512F-NEXT:    jne .LBB2_5
1445 ; AVX512F-NEXT:  .LBB2_6: # %else4
1446 ; AVX512F-NEXT:    testb $8, %al
1447 ; AVX512F-NEXT:    jne .LBB2_7
1448 ; AVX512F-NEXT:  .LBB2_8: # %else6
1449 ; AVX512F-NEXT:    testb $16, %al
1450 ; AVX512F-NEXT:    jne .LBB2_9
1451 ; AVX512F-NEXT:  .LBB2_10: # %else8
1452 ; AVX512F-NEXT:    testb $32, %al
1453 ; AVX512F-NEXT:    jne .LBB2_11
1454 ; AVX512F-NEXT:  .LBB2_12: # %else10
1455 ; AVX512F-NEXT:    testb $64, %al
1456 ; AVX512F-NEXT:    jne .LBB2_13
1457 ; AVX512F-NEXT:  .LBB2_14: # %else12
1458 ; AVX512F-NEXT:    testb $-128, %al
1459 ; AVX512F-NEXT:    jne .LBB2_15
1460 ; AVX512F-NEXT:  .LBB2_16: # %else14
1461 ; AVX512F-NEXT:    vzeroupper
1462 ; AVX512F-NEXT:    retq
1463 ; AVX512F-NEXT:  .LBB2_1: # %cond.store
1464 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
1465 ; AVX512F-NEXT:    testb $2, %al
1466 ; AVX512F-NEXT:    je .LBB2_4
1467 ; AVX512F-NEXT:  .LBB2_3: # %cond.store1
1468 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1469 ; AVX512F-NEXT:    testb $4, %al
1470 ; AVX512F-NEXT:    je .LBB2_6
1471 ; AVX512F-NEXT:  .LBB2_5: # %cond.store3
1472 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1473 ; AVX512F-NEXT:    testb $8, %al
1474 ; AVX512F-NEXT:    je .LBB2_8
1475 ; AVX512F-NEXT:  .LBB2_7: # %cond.store5
1476 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1477 ; AVX512F-NEXT:    testb $16, %al
1478 ; AVX512F-NEXT:    je .LBB2_10
1479 ; AVX512F-NEXT:  .LBB2_9: # %cond.store7
1480 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
1481 ; AVX512F-NEXT:    testb $32, %al
1482 ; AVX512F-NEXT:    je .LBB2_12
1483 ; AVX512F-NEXT:  .LBB2_11: # %cond.store9
1484 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
1485 ; AVX512F-NEXT:    testb $64, %al
1486 ; AVX512F-NEXT:    je .LBB2_14
1487 ; AVX512F-NEXT:  .LBB2_13: # %cond.store11
1488 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
1489 ; AVX512F-NEXT:    testb $-128, %al
1490 ; AVX512F-NEXT:    je .LBB2_16
1491 ; AVX512F-NEXT:  .LBB2_15: # %cond.store13
1492 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
1493 ; AVX512F-NEXT:    vzeroupper
1494 ; AVX512F-NEXT:    retq
1496 ; AVX512BW-LABEL: truncstore_v8i64_v8i8:
1497 ; AVX512BW:       # %bb.0:
1498 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
1499 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
1500 ; AVX512BW-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1501 ; AVX512BW-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1502 ; AVX512BW-NEXT:    vpmovqb %zmm0, (%rdi) {%k1}
1503 ; AVX512BW-NEXT:    vzeroupper
1504 ; AVX512BW-NEXT:    retq
1506 ; AVX512BWVL-LABEL: truncstore_v8i64_v8i8:
1507 ; AVX512BWVL:       # %bb.0:
1508 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
1509 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1510 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1511 ; AVX512BWVL-NEXT:    vpmovqb %zmm0, (%rdi) {%k1}
1512 ; AVX512BWVL-NEXT:    vzeroupper
1513 ; AVX512BWVL-NEXT:    retq
1514   %a = icmp ne <8 x i32> %mask, zeroinitializer
1515   %b = icmp slt <8 x i64> %x, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127>
1516   %c = select <8 x i1> %b, <8 x i64> %x, <8 x i64> <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127>
1517   %d = icmp sgt <8 x i64> %c, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128>
1518   %e = select <8 x i1> %d, <8 x i64> %c, <8 x i64> <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128>
1519   %f = trunc <8 x i64> %e to <8 x i8>
1520   call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %f, <8 x i8>* %p, i32 1, <8 x i1> %a)
1521   ret void
1524 define void @truncstore_v4i64_v4i32(<4 x i64> %x, <4 x i32>* %p, <4 x i32> %mask) {
1525 ; SSE2-LABEL: truncstore_v4i64_v4i32:
1526 ; SSE2:       # %bb.0:
1527 ; SSE2-NEXT:    pxor %xmm9, %xmm9
1528 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483647,2147483647]
1529 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1530 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1531 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1532 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [4294967295,4294967295]
1533 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
1534 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1535 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
1536 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
1537 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1538 ; SSE2-NEXT:    pand %xmm3, %xmm6
1539 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1540 ; SSE2-NEXT:    por %xmm6, %xmm5
1541 ; SSE2-NEXT:    pand %xmm5, %xmm0
1542 ; SSE2-NEXT:    pandn %xmm8, %xmm5
1543 ; SSE2-NEXT:    por %xmm0, %xmm5
1544 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1545 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1546 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
1547 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
1548 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1549 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1550 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1551 ; SSE2-NEXT:    pand %xmm6, %xmm0
1552 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1553 ; SSE2-NEXT:    por %xmm0, %xmm3
1554 ; SSE2-NEXT:    pand %xmm3, %xmm1
1555 ; SSE2-NEXT:    pandn %xmm8, %xmm3
1556 ; SSE2-NEXT:    por %xmm1, %xmm3
1557 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744071562067968,18446744071562067968]
1558 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
1559 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1560 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [18446744069414584320,18446744069414584320]
1561 ; SSE2-NEXT:    movdqa %xmm0, %xmm7
1562 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
1563 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]
1564 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm0
1565 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1566 ; SSE2-NEXT:    pand %xmm1, %xmm0
1567 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]
1568 ; SSE2-NEXT:    por %xmm0, %xmm1
1569 ; SSE2-NEXT:    pand %xmm1, %xmm3
1570 ; SSE2-NEXT:    pandn %xmm8, %xmm1
1571 ; SSE2-NEXT:    por %xmm3, %xmm1
1572 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1573 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1574 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm0
1575 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,0,2,2]
1576 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
1577 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1578 ; SSE2-NEXT:    pand %xmm3, %xmm4
1579 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1580 ; SSE2-NEXT:    por %xmm4, %xmm0
1581 ; SSE2-NEXT:    pand %xmm0, %xmm5
1582 ; SSE2-NEXT:    pandn %xmm8, %xmm0
1583 ; SSE2-NEXT:    por %xmm5, %xmm0
1584 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
1585 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9
1586 ; SSE2-NEXT:    movmskps %xmm9, %eax
1587 ; SSE2-NEXT:    xorl $15, %eax
1588 ; SSE2-NEXT:    testb $1, %al
1589 ; SSE2-NEXT:    jne .LBB3_1
1590 ; SSE2-NEXT:  # %bb.2: # %else
1591 ; SSE2-NEXT:    testb $2, %al
1592 ; SSE2-NEXT:    jne .LBB3_3
1593 ; SSE2-NEXT:  .LBB3_4: # %else2
1594 ; SSE2-NEXT:    testb $4, %al
1595 ; SSE2-NEXT:    jne .LBB3_5
1596 ; SSE2-NEXT:  .LBB3_6: # %else4
1597 ; SSE2-NEXT:    testb $8, %al
1598 ; SSE2-NEXT:    jne .LBB3_7
1599 ; SSE2-NEXT:  .LBB3_8: # %else6
1600 ; SSE2-NEXT:    retq
1601 ; SSE2-NEXT:  .LBB3_1: # %cond.store
1602 ; SSE2-NEXT:    movss %xmm0, (%rdi)
1603 ; SSE2-NEXT:    testb $2, %al
1604 ; SSE2-NEXT:    je .LBB3_4
1605 ; SSE2-NEXT:  .LBB3_3: # %cond.store1
1606 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
1607 ; SSE2-NEXT:    movd %xmm1, 4(%rdi)
1608 ; SSE2-NEXT:    testb $4, %al
1609 ; SSE2-NEXT:    je .LBB3_6
1610 ; SSE2-NEXT:  .LBB3_5: # %cond.store3
1611 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
1612 ; SSE2-NEXT:    movd %xmm1, 8(%rdi)
1613 ; SSE2-NEXT:    testb $8, %al
1614 ; SSE2-NEXT:    je .LBB3_8
1615 ; SSE2-NEXT:  .LBB3_7: # %cond.store5
1616 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
1617 ; SSE2-NEXT:    movd %xmm0, 12(%rdi)
1618 ; SSE2-NEXT:    retq
1620 ; SSE4-LABEL: truncstore_v4i64_v4i32:
1621 ; SSE4:       # %bb.0:
1622 ; SSE4-NEXT:    movdqa %xmm0, %xmm3
1623 ; SSE4-NEXT:    pxor %xmm4, %xmm4
1624 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
1625 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1626 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
1627 ; SSE4-NEXT:    movdqa %xmm5, %xmm6
1628 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm6
1629 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1630 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1631 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
1632 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]
1633 ; SSE4-NEXT:    movapd %xmm5, %xmm0
1634 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1635 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
1636 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm3
1637 ; SSE4-NEXT:    movapd %xmm6, %xmm0
1638 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1639 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm1
1640 ; SSE4-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
1641 ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4
1642 ; SSE4-NEXT:    movmskps %xmm4, %eax
1643 ; SSE4-NEXT:    xorl $15, %eax
1644 ; SSE4-NEXT:    testb $1, %al
1645 ; SSE4-NEXT:    jne .LBB3_1
1646 ; SSE4-NEXT:  # %bb.2: # %else
1647 ; SSE4-NEXT:    testb $2, %al
1648 ; SSE4-NEXT:    jne .LBB3_3
1649 ; SSE4-NEXT:  .LBB3_4: # %else2
1650 ; SSE4-NEXT:    testb $4, %al
1651 ; SSE4-NEXT:    jne .LBB3_5
1652 ; SSE4-NEXT:  .LBB3_6: # %else4
1653 ; SSE4-NEXT:    testb $8, %al
1654 ; SSE4-NEXT:    jne .LBB3_7
1655 ; SSE4-NEXT:  .LBB3_8: # %else6
1656 ; SSE4-NEXT:    retq
1657 ; SSE4-NEXT:  .LBB3_1: # %cond.store
1658 ; SSE4-NEXT:    movss %xmm1, (%rdi)
1659 ; SSE4-NEXT:    testb $2, %al
1660 ; SSE4-NEXT:    je .LBB3_4
1661 ; SSE4-NEXT:  .LBB3_3: # %cond.store1
1662 ; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)
1663 ; SSE4-NEXT:    testb $4, %al
1664 ; SSE4-NEXT:    je .LBB3_6
1665 ; SSE4-NEXT:  .LBB3_5: # %cond.store3
1666 ; SSE4-NEXT:    extractps $2, %xmm1, 8(%rdi)
1667 ; SSE4-NEXT:    testb $8, %al
1668 ; SSE4-NEXT:    je .LBB3_8
1669 ; SSE4-NEXT:  .LBB3_7: # %cond.store5
1670 ; SSE4-NEXT:    extractps $3, %xmm1, 12(%rdi)
1671 ; SSE4-NEXT:    retq
1673 ; AVX1-LABEL: truncstore_v4i64_v4i32:
1674 ; AVX1:       # %bb.0:
1675 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1676 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1677 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1678 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1679 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1680 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [2147483647,2147483647]
1681 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm4
1682 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm5
1683 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm3, %xmm0
1684 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [18446744071562067968,18446744071562067968]
1685 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm6
1686 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm2, %xmm3, %xmm2
1687 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm2, %xmm3
1688 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm2, %xmm5, %xmm2
1689 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm5, %xmm0
1690 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1691 ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
1692 ; AVX1-NEXT:    vzeroupper
1693 ; AVX1-NEXT:    retq
1695 ; AVX2-LABEL: truncstore_v4i64_v4i32:
1696 ; AVX2:       # %bb.0:
1697 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1698 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1699 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1700 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1701 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [2147483647,2147483647,2147483647,2147483647]
1702 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
1703 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1704 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
1705 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm3
1706 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1707 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm2
1708 ; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1709 ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
1710 ; AVX2-NEXT:    vzeroupper
1711 ; AVX2-NEXT:    retq
1713 ; AVX512F-LABEL: truncstore_v4i64_v4i32:
1714 ; AVX512F:       # %bb.0:
1715 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1716 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1717 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
1718 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
1719 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
1720 ; AVX512F-NEXT:    vpmovsqd %zmm0, %ymm0
1721 ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1722 ; AVX512F-NEXT:    vzeroupper
1723 ; AVX512F-NEXT:    retq
1725 ; AVX512VL-LABEL: truncstore_v4i64_v4i32:
1726 ; AVX512VL:       # %bb.0:
1727 ; AVX512VL-NEXT:    vptestmd %xmm1, %xmm1, %k1
1728 ; AVX512VL-NEXT:    vpminsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
1729 ; AVX512VL-NEXT:    vpmaxsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
1730 ; AVX512VL-NEXT:    vpmovqd %ymm0, (%rdi) {%k1}
1731 ; AVX512VL-NEXT:    vzeroupper
1732 ; AVX512VL-NEXT:    retq
1734 ; AVX512BW-LABEL: truncstore_v4i64_v4i32:
1735 ; AVX512BW:       # %bb.0:
1736 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1737 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1738 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
1739 ; AVX512BW-NEXT:    kshiftlw $12, %k0, %k0
1740 ; AVX512BW-NEXT:    kshiftrw $12, %k0, %k1
1741 ; AVX512BW-NEXT:    vpmovsqd %zmm0, %ymm0
1742 ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1743 ; AVX512BW-NEXT:    vzeroupper
1744 ; AVX512BW-NEXT:    retq
1745   %a = icmp ne <4 x i32> %mask, zeroinitializer
1746   %b = icmp slt <4 x i64> %x, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
1747   %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
1748   %d = icmp sgt <4 x i64> %c, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
1749   %e = select <4 x i1> %d, <4 x i64> %c, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
1750   %f = trunc <4 x i64> %e to <4 x i32>
1751   call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> %f, <4 x i32>* %p, i32 1, <4 x i1> %a)
1752   ret void
1755 define void @truncstore_v4i64_v4i16(<4 x i64> %x, <4 x i16>* %p, <4 x i32> %mask) {
1756 ; SSE2-LABEL: truncstore_v4i64_v4i16:
1757 ; SSE2:       # %bb.0:
1758 ; SSE2-NEXT:    pxor %xmm9, %xmm9
1759 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32767,32767]
1760 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1761 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
1762 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1763 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147516415,2147516415]
1764 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
1765 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1766 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
1767 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
1768 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1769 ; SSE2-NEXT:    pand %xmm3, %xmm6
1770 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1771 ; SSE2-NEXT:    por %xmm6, %xmm5
1772 ; SSE2-NEXT:    pand %xmm5, %xmm1
1773 ; SSE2-NEXT:    pandn %xmm8, %xmm5
1774 ; SSE2-NEXT:    por %xmm1, %xmm5
1775 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1776 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1777 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
1778 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
1779 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1780 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
1781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1782 ; SSE2-NEXT:    pand %xmm6, %xmm1
1783 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1784 ; SSE2-NEXT:    por %xmm1, %xmm3
1785 ; SSE2-NEXT:    pand %xmm3, %xmm0
1786 ; SSE2-NEXT:    pandn %xmm8, %xmm3
1787 ; SSE2-NEXT:    por %xmm0, %xmm3
1788 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744073709518848,18446744073709518848]
1789 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
1790 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1791 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [18446744071562035200,18446744071562035200]
1792 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
1793 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
1794 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]
1795 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm1
1796 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1797 ; SSE2-NEXT:    pand %xmm0, %xmm1
1798 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
1799 ; SSE2-NEXT:    por %xmm1, %xmm0
1800 ; SSE2-NEXT:    pand %xmm0, %xmm3
1801 ; SSE2-NEXT:    pandn %xmm8, %xmm0
1802 ; SSE2-NEXT:    por %xmm3, %xmm0
1803 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1804 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
1805 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm1
1806 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1807 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
1808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1809 ; SSE2-NEXT:    pand %xmm3, %xmm4
1810 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1811 ; SSE2-NEXT:    por %xmm4, %xmm1
1812 ; SSE2-NEXT:    pand %xmm1, %xmm5
1813 ; SSE2-NEXT:    pandn %xmm8, %xmm1
1814 ; SSE2-NEXT:    por %xmm5, %xmm1
1815 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1816 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
1817 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1818 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1819 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1820 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9
1821 ; SSE2-NEXT:    movmskps %xmm9, %eax
1822 ; SSE2-NEXT:    xorl $15, %eax
1823 ; SSE2-NEXT:    testb $1, %al
1824 ; SSE2-NEXT:    jne .LBB4_1
1825 ; SSE2-NEXT:  # %bb.2: # %else
1826 ; SSE2-NEXT:    testb $2, %al
1827 ; SSE2-NEXT:    jne .LBB4_3
1828 ; SSE2-NEXT:  .LBB4_4: # %else2
1829 ; SSE2-NEXT:    testb $4, %al
1830 ; SSE2-NEXT:    jne .LBB4_5
1831 ; SSE2-NEXT:  .LBB4_6: # %else4
1832 ; SSE2-NEXT:    testb $8, %al
1833 ; SSE2-NEXT:    jne .LBB4_7
1834 ; SSE2-NEXT:  .LBB4_8: # %else6
1835 ; SSE2-NEXT:    retq
1836 ; SSE2-NEXT:  .LBB4_1: # %cond.store
1837 ; SSE2-NEXT:    movd %xmm0, %ecx
1838 ; SSE2-NEXT:    movw %cx, (%rdi)
1839 ; SSE2-NEXT:    testb $2, %al
1840 ; SSE2-NEXT:    je .LBB4_4
1841 ; SSE2-NEXT:  .LBB4_3: # %cond.store1
1842 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
1843 ; SSE2-NEXT:    movw %cx, 2(%rdi)
1844 ; SSE2-NEXT:    testb $4, %al
1845 ; SSE2-NEXT:    je .LBB4_6
1846 ; SSE2-NEXT:  .LBB4_5: # %cond.store3
1847 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
1848 ; SSE2-NEXT:    movw %cx, 4(%rdi)
1849 ; SSE2-NEXT:    testb $8, %al
1850 ; SSE2-NEXT:    je .LBB4_8
1851 ; SSE2-NEXT:  .LBB4_7: # %cond.store5
1852 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
1853 ; SSE2-NEXT:    movw %ax, 6(%rdi)
1854 ; SSE2-NEXT:    retq
1856 ; SSE4-LABEL: truncstore_v4i64_v4i16:
1857 ; SSE4:       # %bb.0:
1858 ; SSE4-NEXT:    movdqa %xmm0, %xmm3
1859 ; SSE4-NEXT:    pxor %xmm4, %xmm4
1860 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [32767,32767]
1861 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1862 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1863 ; SSE4-NEXT:    movdqa %xmm5, %xmm6
1864 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6
1865 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1866 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
1867 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5
1868 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]
1869 ; SSE4-NEXT:    movapd %xmm5, %xmm0
1870 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1871 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
1872 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm3
1873 ; SSE4-NEXT:    movapd %xmm6, %xmm0
1874 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1875 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm1
1876 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
1877 ; SSE4-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]
1878 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
1879 ; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1880 ; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1881 ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4
1882 ; SSE4-NEXT:    movmskps %xmm4, %eax
1883 ; SSE4-NEXT:    xorl $15, %eax
1884 ; SSE4-NEXT:    testb $1, %al
1885 ; SSE4-NEXT:    jne .LBB4_1
1886 ; SSE4-NEXT:  # %bb.2: # %else
1887 ; SSE4-NEXT:    testb $2, %al
1888 ; SSE4-NEXT:    jne .LBB4_3
1889 ; SSE4-NEXT:  .LBB4_4: # %else2
1890 ; SSE4-NEXT:    testb $4, %al
1891 ; SSE4-NEXT:    jne .LBB4_5
1892 ; SSE4-NEXT:  .LBB4_6: # %else4
1893 ; SSE4-NEXT:    testb $8, %al
1894 ; SSE4-NEXT:    jne .LBB4_7
1895 ; SSE4-NEXT:  .LBB4_8: # %else6
1896 ; SSE4-NEXT:    retq
1897 ; SSE4-NEXT:  .LBB4_1: # %cond.store
1898 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
1899 ; SSE4-NEXT:    testb $2, %al
1900 ; SSE4-NEXT:    je .LBB4_4
1901 ; SSE4-NEXT:  .LBB4_3: # %cond.store1
1902 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
1903 ; SSE4-NEXT:    testb $4, %al
1904 ; SSE4-NEXT:    je .LBB4_6
1905 ; SSE4-NEXT:  .LBB4_5: # %cond.store3
1906 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
1907 ; SSE4-NEXT:    testb $8, %al
1908 ; SSE4-NEXT:    je .LBB4_8
1909 ; SSE4-NEXT:  .LBB4_7: # %cond.store5
1910 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
1911 ; SSE4-NEXT:    retq
1913 ; AVX1-LABEL: truncstore_v4i64_v4i16:
1914 ; AVX1:       # %bb.0:
1915 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1916 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1917 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [32767,32767]
1918 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm5
1919 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm6
1920 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
1921 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [18446744073709518848,18446744073709518848]
1922 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm7
1923 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm3, %xmm4, %xmm3
1924 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4
1925 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
1926 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]
1927 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
1928 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm0, %xmm6, %xmm0
1929 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
1930 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1931 ; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1932 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1933 ; AVX1-NEXT:    vmovmskps %xmm1, %eax
1934 ; AVX1-NEXT:    xorl $15, %eax
1935 ; AVX1-NEXT:    testb $1, %al
1936 ; AVX1-NEXT:    jne .LBB4_1
1937 ; AVX1-NEXT:  # %bb.2: # %else
1938 ; AVX1-NEXT:    testb $2, %al
1939 ; AVX1-NEXT:    jne .LBB4_3
1940 ; AVX1-NEXT:  .LBB4_4: # %else2
1941 ; AVX1-NEXT:    testb $4, %al
1942 ; AVX1-NEXT:    jne .LBB4_5
1943 ; AVX1-NEXT:  .LBB4_6: # %else4
1944 ; AVX1-NEXT:    testb $8, %al
1945 ; AVX1-NEXT:    jne .LBB4_7
1946 ; AVX1-NEXT:  .LBB4_8: # %else6
1947 ; AVX1-NEXT:    vzeroupper
1948 ; AVX1-NEXT:    retq
1949 ; AVX1-NEXT:  .LBB4_1: # %cond.store
1950 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
1951 ; AVX1-NEXT:    testb $2, %al
1952 ; AVX1-NEXT:    je .LBB4_4
1953 ; AVX1-NEXT:  .LBB4_3: # %cond.store1
1954 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1955 ; AVX1-NEXT:    testb $4, %al
1956 ; AVX1-NEXT:    je .LBB4_6
1957 ; AVX1-NEXT:  .LBB4_5: # %cond.store3
1958 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
1959 ; AVX1-NEXT:    testb $8, %al
1960 ; AVX1-NEXT:    je .LBB4_8
1961 ; AVX1-NEXT:  .LBB4_7: # %cond.store5
1962 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
1963 ; AVX1-NEXT:    vzeroupper
1964 ; AVX1-NEXT:    retq
1966 ; AVX2-LABEL: truncstore_v4i64_v4i16:
1967 ; AVX2:       # %bb.0:
1968 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1969 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [32767,32767,32767,32767]
1970 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm3, %ymm4
1971 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1972 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
1973 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4
1974 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1975 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3
1976 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]
1977 ; AVX2-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
1978 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
1979 ; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1980 ; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1981 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1982 ; AVX2-NEXT:    vmovmskps %xmm1, %eax
1983 ; AVX2-NEXT:    xorl $15, %eax
1984 ; AVX2-NEXT:    testb $1, %al
1985 ; AVX2-NEXT:    jne .LBB4_1
1986 ; AVX2-NEXT:  # %bb.2: # %else
1987 ; AVX2-NEXT:    testb $2, %al
1988 ; AVX2-NEXT:    jne .LBB4_3
1989 ; AVX2-NEXT:  .LBB4_4: # %else2
1990 ; AVX2-NEXT:    testb $4, %al
1991 ; AVX2-NEXT:    jne .LBB4_5
1992 ; AVX2-NEXT:  .LBB4_6: # %else4
1993 ; AVX2-NEXT:    testb $8, %al
1994 ; AVX2-NEXT:    jne .LBB4_7
1995 ; AVX2-NEXT:  .LBB4_8: # %else6
1996 ; AVX2-NEXT:    vzeroupper
1997 ; AVX2-NEXT:    retq
1998 ; AVX2-NEXT:  .LBB4_1: # %cond.store
1999 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
2000 ; AVX2-NEXT:    testb $2, %al
2001 ; AVX2-NEXT:    je .LBB4_4
2002 ; AVX2-NEXT:  .LBB4_3: # %cond.store1
2003 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2004 ; AVX2-NEXT:    testb $4, %al
2005 ; AVX2-NEXT:    je .LBB4_6
2006 ; AVX2-NEXT:  .LBB4_5: # %cond.store3
2007 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2008 ; AVX2-NEXT:    testb $8, %al
2009 ; AVX2-NEXT:    je .LBB4_8
2010 ; AVX2-NEXT:  .LBB4_7: # %cond.store5
2011 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2012 ; AVX2-NEXT:    vzeroupper
2013 ; AVX2-NEXT:    retq
2015 ; AVX512F-LABEL: truncstore_v4i64_v4i16:
2016 ; AVX512F:       # %bb.0:
2017 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2018 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2019 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
2020 ; AVX512F-NEXT:    vpmovsqw %zmm0, %xmm0
2021 ; AVX512F-NEXT:    kmovw %k0, %eax
2022 ; AVX512F-NEXT:    testb $1, %al
2023 ; AVX512F-NEXT:    jne .LBB4_1
2024 ; AVX512F-NEXT:  # %bb.2: # %else
2025 ; AVX512F-NEXT:    testb $2, %al
2026 ; AVX512F-NEXT:    jne .LBB4_3
2027 ; AVX512F-NEXT:  .LBB4_4: # %else2
2028 ; AVX512F-NEXT:    testb $4, %al
2029 ; AVX512F-NEXT:    jne .LBB4_5
2030 ; AVX512F-NEXT:  .LBB4_6: # %else4
2031 ; AVX512F-NEXT:    testb $8, %al
2032 ; AVX512F-NEXT:    jne .LBB4_7
2033 ; AVX512F-NEXT:  .LBB4_8: # %else6
2034 ; AVX512F-NEXT:    vzeroupper
2035 ; AVX512F-NEXT:    retq
2036 ; AVX512F-NEXT:  .LBB4_1: # %cond.store
2037 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
2038 ; AVX512F-NEXT:    testb $2, %al
2039 ; AVX512F-NEXT:    je .LBB4_4
2040 ; AVX512F-NEXT:  .LBB4_3: # %cond.store1
2041 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2042 ; AVX512F-NEXT:    testb $4, %al
2043 ; AVX512F-NEXT:    je .LBB4_6
2044 ; AVX512F-NEXT:  .LBB4_5: # %cond.store3
2045 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2046 ; AVX512F-NEXT:    testb $8, %al
2047 ; AVX512F-NEXT:    je .LBB4_8
2048 ; AVX512F-NEXT:  .LBB4_7: # %cond.store5
2049 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2050 ; AVX512F-NEXT:    vzeroupper
2051 ; AVX512F-NEXT:    retq
2053 ; AVX512BW-LABEL: truncstore_v4i64_v4i16:
2054 ; AVX512BW:       # %bb.0:
2055 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2056 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2057 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
2058 ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0
2059 ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1
2060 ; AVX512BW-NEXT:    vpmovsqw %zmm0, %xmm0
2061 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
2062 ; AVX512BW-NEXT:    vzeroupper
2063 ; AVX512BW-NEXT:    retq
2065 ; AVX512BWVL-LABEL: truncstore_v4i64_v4i16:
2066 ; AVX512BWVL:       # %bb.0:
2067 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
2068 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2069 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2070 ; AVX512BWVL-NEXT:    vpmovqw %ymm0, (%rdi) {%k1}
2071 ; AVX512BWVL-NEXT:    vzeroupper
2072 ; AVX512BWVL-NEXT:    retq
2073   %a = icmp ne <4 x i32> %mask, zeroinitializer
2074   %b = icmp slt <4 x i64> %x, <i64 32767, i64 32767, i64 32767, i64 32767>
2075   %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 32767, i64 32767, i64 32767, i64 32767>
2076   %d = icmp sgt <4 x i64> %c, <i64 -32768, i64 -32768, i64 -32768, i64 -32768>
2077   %e = select <4 x i1> %d, <4 x i64> %c, <4 x i64> <i64 -32768, i64 -32768, i64 -32768, i64 -32768>
2078   %f = trunc <4 x i64> %e to <4 x i16>
2079   call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> %f, <4 x i16>* %p, i32 1, <4 x i1> %a)
2080   ret void
2083 define void @truncstore_v4i64_v4i8(<4 x i64> %x, <4 x i8>* %p, <4 x i32> %mask) {
2084 ; SSE2-LABEL: truncstore_v4i64_v4i8:
2085 ; SSE2:       # %bb.0:
2086 ; SSE2-NEXT:    pxor %xmm9, %xmm9
2087 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [127,127]
2088 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
2089 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
2090 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2091 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483775,2147483775]
2092 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
2093 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
2094 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
2095 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
2096 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
2097 ; SSE2-NEXT:    pand %xmm3, %xmm6
2098 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
2099 ; SSE2-NEXT:    por %xmm6, %xmm5
2100 ; SSE2-NEXT:    pand %xmm5, %xmm1
2101 ; SSE2-NEXT:    pandn %xmm8, %xmm5
2102 ; SSE2-NEXT:    por %xmm1, %xmm5
2103 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2104 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2105 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
2106 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
2107 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
2108 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
2109 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2110 ; SSE2-NEXT:    pand %xmm6, %xmm1
2111 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2112 ; SSE2-NEXT:    por %xmm1, %xmm3
2113 ; SSE2-NEXT:    pand %xmm3, %xmm0
2114 ; SSE2-NEXT:    pandn %xmm8, %xmm3
2115 ; SSE2-NEXT:    por %xmm0, %xmm3
2116 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488]
2117 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
2118 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2119 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [18446744071562067840,18446744071562067840]
2120 ; SSE2-NEXT:    movdqa %xmm0, %xmm7
2121 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm7
2122 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]
2123 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
2124 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
2125 ; SSE2-NEXT:    pand %xmm1, %xmm6
2126 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
2127 ; SSE2-NEXT:    por %xmm6, %xmm0
2128 ; SSE2-NEXT:    pand %xmm0, %xmm3
2129 ; SSE2-NEXT:    pandn %xmm8, %xmm0
2130 ; SSE2-NEXT:    por %xmm3, %xmm0
2131 ; SSE2-NEXT:    pxor %xmm5, %xmm4
2132 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
2133 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1
2134 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
2135 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm4
2136 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2137 ; SSE2-NEXT:    pand %xmm3, %xmm4
2138 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2139 ; SSE2-NEXT:    por %xmm4, %xmm1
2140 ; SSE2-NEXT:    pand %xmm1, %xmm5
2141 ; SSE2-NEXT:    pandn %xmm8, %xmm1
2142 ; SSE2-NEXT:    por %xmm5, %xmm1
2143 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2144 ; SSE2-NEXT:    pand %xmm3, %xmm1
2145 ; SSE2-NEXT:    pand %xmm3, %xmm0
2146 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
2147 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
2148 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
2149 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9
2150 ; SSE2-NEXT:    movmskps %xmm9, %ecx
2151 ; SSE2-NEXT:    xorl $15, %ecx
2152 ; SSE2-NEXT:    testb $1, %cl
2153 ; SSE2-NEXT:    movd %xmm0, %eax
2154 ; SSE2-NEXT:    jne .LBB5_1
2155 ; SSE2-NEXT:  # %bb.2: # %else
2156 ; SSE2-NEXT:    testb $2, %cl
2157 ; SSE2-NEXT:    jne .LBB5_3
2158 ; SSE2-NEXT:  .LBB5_4: # %else2
2159 ; SSE2-NEXT:    testb $4, %cl
2160 ; SSE2-NEXT:    jne .LBB5_5
2161 ; SSE2-NEXT:  .LBB5_6: # %else4
2162 ; SSE2-NEXT:    testb $8, %cl
2163 ; SSE2-NEXT:    jne .LBB5_7
2164 ; SSE2-NEXT:  .LBB5_8: # %else6
2165 ; SSE2-NEXT:    retq
2166 ; SSE2-NEXT:  .LBB5_1: # %cond.store
2167 ; SSE2-NEXT:    movb %al, (%rdi)
2168 ; SSE2-NEXT:    testb $2, %cl
2169 ; SSE2-NEXT:    je .LBB5_4
2170 ; SSE2-NEXT:  .LBB5_3: # %cond.store1
2171 ; SSE2-NEXT:    movb %ah, 1(%rdi)
2172 ; SSE2-NEXT:    testb $4, %cl
2173 ; SSE2-NEXT:    je .LBB5_6
2174 ; SSE2-NEXT:  .LBB5_5: # %cond.store3
2175 ; SSE2-NEXT:    movl %eax, %edx
2176 ; SSE2-NEXT:    shrl $16, %edx
2177 ; SSE2-NEXT:    movb %dl, 2(%rdi)
2178 ; SSE2-NEXT:    testb $8, %cl
2179 ; SSE2-NEXT:    je .LBB5_8
2180 ; SSE2-NEXT:  .LBB5_7: # %cond.store5
2181 ; SSE2-NEXT:    shrl $24, %eax
2182 ; SSE2-NEXT:    movb %al, 3(%rdi)
2183 ; SSE2-NEXT:    retq
2185 ; SSE4-LABEL: truncstore_v4i64_v4i8:
2186 ; SSE4:       # %bb.0:
2187 ; SSE4-NEXT:    movdqa %xmm0, %xmm3
2188 ; SSE4-NEXT:    pxor %xmm4, %xmm4
2189 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [127,127]
2190 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
2191 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
2192 ; SSE4-NEXT:    movdqa %xmm5, %xmm6
2193 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6
2194 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
2195 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
2196 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5
2197 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488]
2198 ; SSE4-NEXT:    movapd %xmm5, %xmm0
2199 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
2200 ; SSE4-NEXT:    movdqa %xmm3, %xmm1
2201 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm1
2202 ; SSE4-NEXT:    movapd %xmm6, %xmm0
2203 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
2204 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm3
2205 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2206 ; SSE4-NEXT:    pshufb %xmm0, %xmm3
2207 ; SSE4-NEXT:    pshufb %xmm0, %xmm1
2208 ; SSE4-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
2209 ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4
2210 ; SSE4-NEXT:    movmskps %xmm4, %eax
2211 ; SSE4-NEXT:    xorl $15, %eax
2212 ; SSE4-NEXT:    testb $1, %al
2213 ; SSE4-NEXT:    jne .LBB5_1
2214 ; SSE4-NEXT:  # %bb.2: # %else
2215 ; SSE4-NEXT:    testb $2, %al
2216 ; SSE4-NEXT:    jne .LBB5_3
2217 ; SSE4-NEXT:  .LBB5_4: # %else2
2218 ; SSE4-NEXT:    testb $4, %al
2219 ; SSE4-NEXT:    jne .LBB5_5
2220 ; SSE4-NEXT:  .LBB5_6: # %else4
2221 ; SSE4-NEXT:    testb $8, %al
2222 ; SSE4-NEXT:    jne .LBB5_7
2223 ; SSE4-NEXT:  .LBB5_8: # %else6
2224 ; SSE4-NEXT:    retq
2225 ; SSE4-NEXT:  .LBB5_1: # %cond.store
2226 ; SSE4-NEXT:    pextrb $0, %xmm1, (%rdi)
2227 ; SSE4-NEXT:    testb $2, %al
2228 ; SSE4-NEXT:    je .LBB5_4
2229 ; SSE4-NEXT:  .LBB5_3: # %cond.store1
2230 ; SSE4-NEXT:    pextrb $1, %xmm1, 1(%rdi)
2231 ; SSE4-NEXT:    testb $4, %al
2232 ; SSE4-NEXT:    je .LBB5_6
2233 ; SSE4-NEXT:  .LBB5_5: # %cond.store3
2234 ; SSE4-NEXT:    pextrb $2, %xmm1, 2(%rdi)
2235 ; SSE4-NEXT:    testb $8, %al
2236 ; SSE4-NEXT:    je .LBB5_8
2237 ; SSE4-NEXT:  .LBB5_7: # %cond.store5
2238 ; SSE4-NEXT:    pextrb $3, %xmm1, 3(%rdi)
2239 ; SSE4-NEXT:    retq
2241 ; AVX1-LABEL: truncstore_v4i64_v4i8:
2242 ; AVX1:       # %bb.0:
2243 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2244 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2245 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [127,127]
2246 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm5
2247 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm6
2248 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
2249 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [18446744073709551488,18446744073709551488]
2250 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm7
2251 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm3, %xmm4, %xmm3
2252 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4
2253 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
2254 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2255 ; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
2256 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm0, %xmm6, %xmm0
2257 ; AVX1-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
2258 ; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
2259 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
2260 ; AVX1-NEXT:    vmovmskps %xmm1, %eax
2261 ; AVX1-NEXT:    xorl $15, %eax
2262 ; AVX1-NEXT:    testb $1, %al
2263 ; AVX1-NEXT:    jne .LBB5_1
2264 ; AVX1-NEXT:  # %bb.2: # %else
2265 ; AVX1-NEXT:    testb $2, %al
2266 ; AVX1-NEXT:    jne .LBB5_3
2267 ; AVX1-NEXT:  .LBB5_4: # %else2
2268 ; AVX1-NEXT:    testb $4, %al
2269 ; AVX1-NEXT:    jne .LBB5_5
2270 ; AVX1-NEXT:  .LBB5_6: # %else4
2271 ; AVX1-NEXT:    testb $8, %al
2272 ; AVX1-NEXT:    jne .LBB5_7
2273 ; AVX1-NEXT:  .LBB5_8: # %else6
2274 ; AVX1-NEXT:    vzeroupper
2275 ; AVX1-NEXT:    retq
2276 ; AVX1-NEXT:  .LBB5_1: # %cond.store
2277 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
2278 ; AVX1-NEXT:    testb $2, %al
2279 ; AVX1-NEXT:    je .LBB5_4
2280 ; AVX1-NEXT:  .LBB5_3: # %cond.store1
2281 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2282 ; AVX1-NEXT:    testb $4, %al
2283 ; AVX1-NEXT:    je .LBB5_6
2284 ; AVX1-NEXT:  .LBB5_5: # %cond.store3
2285 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2286 ; AVX1-NEXT:    testb $8, %al
2287 ; AVX1-NEXT:    je .LBB5_8
2288 ; AVX1-NEXT:  .LBB5_7: # %cond.store5
2289 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2290 ; AVX1-NEXT:    vzeroupper
2291 ; AVX1-NEXT:    retq
2293 ; AVX2-LABEL: truncstore_v4i64_v4i8:
2294 ; AVX2:       # %bb.0:
2295 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2296 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [127,127,127,127]
2297 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm3, %ymm4
2298 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
2299 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2300 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4
2301 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
2302 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3
2303 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2304 ; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
2305 ; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
2306 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
2307 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
2308 ; AVX2-NEXT:    vmovmskps %xmm1, %eax
2309 ; AVX2-NEXT:    xorl $15, %eax
2310 ; AVX2-NEXT:    testb $1, %al
2311 ; AVX2-NEXT:    jne .LBB5_1
2312 ; AVX2-NEXT:  # %bb.2: # %else
2313 ; AVX2-NEXT:    testb $2, %al
2314 ; AVX2-NEXT:    jne .LBB5_3
2315 ; AVX2-NEXT:  .LBB5_4: # %else2
2316 ; AVX2-NEXT:    testb $4, %al
2317 ; AVX2-NEXT:    jne .LBB5_5
2318 ; AVX2-NEXT:  .LBB5_6: # %else4
2319 ; AVX2-NEXT:    testb $8, %al
2320 ; AVX2-NEXT:    jne .LBB5_7
2321 ; AVX2-NEXT:  .LBB5_8: # %else6
2322 ; AVX2-NEXT:    vzeroupper
2323 ; AVX2-NEXT:    retq
2324 ; AVX2-NEXT:  .LBB5_1: # %cond.store
2325 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
2326 ; AVX2-NEXT:    testb $2, %al
2327 ; AVX2-NEXT:    je .LBB5_4
2328 ; AVX2-NEXT:  .LBB5_3: # %cond.store1
2329 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2330 ; AVX2-NEXT:    testb $4, %al
2331 ; AVX2-NEXT:    je .LBB5_6
2332 ; AVX2-NEXT:  .LBB5_5: # %cond.store3
2333 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2334 ; AVX2-NEXT:    testb $8, %al
2335 ; AVX2-NEXT:    je .LBB5_8
2336 ; AVX2-NEXT:  .LBB5_7: # %cond.store5
2337 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2338 ; AVX2-NEXT:    vzeroupper
2339 ; AVX2-NEXT:    retq
2341 ; AVX512F-LABEL: truncstore_v4i64_v4i8:
2342 ; AVX512F:       # %bb.0:
2343 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2344 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2345 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
2346 ; AVX512F-NEXT:    vpmovsqb %zmm0, %xmm0
2347 ; AVX512F-NEXT:    kmovw %k0, %eax
2348 ; AVX512F-NEXT:    testb $1, %al
2349 ; AVX512F-NEXT:    jne .LBB5_1
2350 ; AVX512F-NEXT:  # %bb.2: # %else
2351 ; AVX512F-NEXT:    testb $2, %al
2352 ; AVX512F-NEXT:    jne .LBB5_3
2353 ; AVX512F-NEXT:  .LBB5_4: # %else2
2354 ; AVX512F-NEXT:    testb $4, %al
2355 ; AVX512F-NEXT:    jne .LBB5_5
2356 ; AVX512F-NEXT:  .LBB5_6: # %else4
2357 ; AVX512F-NEXT:    testb $8, %al
2358 ; AVX512F-NEXT:    jne .LBB5_7
2359 ; AVX512F-NEXT:  .LBB5_8: # %else6
2360 ; AVX512F-NEXT:    vzeroupper
2361 ; AVX512F-NEXT:    retq
2362 ; AVX512F-NEXT:  .LBB5_1: # %cond.store
2363 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
2364 ; AVX512F-NEXT:    testb $2, %al
2365 ; AVX512F-NEXT:    je .LBB5_4
2366 ; AVX512F-NEXT:  .LBB5_3: # %cond.store1
2367 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2368 ; AVX512F-NEXT:    testb $4, %al
2369 ; AVX512F-NEXT:    je .LBB5_6
2370 ; AVX512F-NEXT:  .LBB5_5: # %cond.store3
2371 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2372 ; AVX512F-NEXT:    testb $8, %al
2373 ; AVX512F-NEXT:    je .LBB5_8
2374 ; AVX512F-NEXT:  .LBB5_7: # %cond.store5
2375 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2376 ; AVX512F-NEXT:    vzeroupper
2377 ; AVX512F-NEXT:    retq
2379 ; AVX512BW-LABEL: truncstore_v4i64_v4i8:
2380 ; AVX512BW:       # %bb.0:
2381 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2382 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2383 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
2384 ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0
2385 ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1
2386 ; AVX512BW-NEXT:    vpmovsqb %zmm0, %xmm0
2387 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
2388 ; AVX512BW-NEXT:    vzeroupper
2389 ; AVX512BW-NEXT:    retq
2391 ; AVX512BWVL-LABEL: truncstore_v4i64_v4i8:
2392 ; AVX512BWVL:       # %bb.0:
2393 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
2394 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2395 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2396 ; AVX512BWVL-NEXT:    vpmovqb %ymm0, (%rdi) {%k1}
2397 ; AVX512BWVL-NEXT:    vzeroupper
2398 ; AVX512BWVL-NEXT:    retq
2399   %a = icmp ne <4 x i32> %mask, zeroinitializer
2400   %b = icmp slt <4 x i64> %x, <i64 127, i64 127, i64 127, i64 127>
2401   %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 127, i64 127, i64 127, i64 127>
2402   %d = icmp sgt <4 x i64> %c, <i64 -128, i64 -128, i64 -128, i64 -128>
2403   %e = select <4 x i1> %d, <4 x i64> %c, <4 x i64> <i64 -128, i64 -128, i64 -128, i64 -128>
2404   %f = trunc <4 x i64> %e to <4 x i8>
2405   call void @llvm.masked.store.v4i8.p0v4i8(<4 x i8> %f, <4 x i8>* %p, i32 1, <4 x i1> %a)
2406   ret void
2409 define void @truncstore_v2i64_v2i32(<2 x i64> %x, <2 x i32>* %p, <2 x i64> %mask) {
2410 ; SSE2-LABEL: truncstore_v2i64_v2i32:
2411 ; SSE2:       # %bb.0:
2412 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2413 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
2414 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2415 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2416 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [4294967295,4294967295]
2417 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2418 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2419 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2420 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2421 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2422 ; SSE2-NEXT:    pand %xmm7, %xmm4
2423 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2424 ; SSE2-NEXT:    por %xmm4, %xmm5
2425 ; SSE2-NEXT:    pand %xmm5, %xmm0
2426 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm5
2427 ; SSE2-NEXT:    por %xmm0, %xmm5
2428 ; SSE2-NEXT:    pxor %xmm5, %xmm3
2429 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18446744069414584320,18446744069414584320]
2430 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2431 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2432 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2433 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
2434 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
2435 ; SSE2-NEXT:    pand %xmm6, %xmm0
2436 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2437 ; SSE2-NEXT:    por %xmm0, %xmm3
2438 ; SSE2-NEXT:    pand %xmm3, %xmm5
2439 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3
2440 ; SSE2-NEXT:    por %xmm5, %xmm3
2441 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
2442 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
2443 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
2444 ; SSE2-NEXT:    pand %xmm2, %xmm1
2445 ; SSE2-NEXT:    movmskpd %xmm1, %eax
2446 ; SSE2-NEXT:    xorl $3, %eax
2447 ; SSE2-NEXT:    testb $1, %al
2448 ; SSE2-NEXT:    jne .LBB6_1
2449 ; SSE2-NEXT:  # %bb.2: # %else
2450 ; SSE2-NEXT:    testb $2, %al
2451 ; SSE2-NEXT:    jne .LBB6_3
2452 ; SSE2-NEXT:  .LBB6_4: # %else2
2453 ; SSE2-NEXT:    retq
2454 ; SSE2-NEXT:  .LBB6_1: # %cond.store
2455 ; SSE2-NEXT:    movd %xmm0, (%rdi)
2456 ; SSE2-NEXT:    testb $2, %al
2457 ; SSE2-NEXT:    je .LBB6_4
2458 ; SSE2-NEXT:  .LBB6_3: # %cond.store1
2459 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
2460 ; SSE2-NEXT:    movd %xmm0, 4(%rdi)
2461 ; SSE2-NEXT:    retq
2463 ; SSE4-LABEL: truncstore_v2i64_v2i32:
2464 ; SSE4:       # %bb.0:
2465 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
2466 ; SSE4-NEXT:    pxor %xmm3, %xmm3
2467 ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647]
2468 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
2469 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2470 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
2471 ; SSE4-NEXT:    movdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]
2472 ; SSE4-NEXT:    movapd %xmm4, %xmm0
2473 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2474 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
2475 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
2476 ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3
2477 ; SSE4-NEXT:    movmskpd %xmm3, %eax
2478 ; SSE4-NEXT:    xorl $3, %eax
2479 ; SSE4-NEXT:    testb $1, %al
2480 ; SSE4-NEXT:    jne .LBB6_1
2481 ; SSE4-NEXT:  # %bb.2: # %else
2482 ; SSE4-NEXT:    testb $2, %al
2483 ; SSE4-NEXT:    jne .LBB6_3
2484 ; SSE4-NEXT:  .LBB6_4: # %else2
2485 ; SSE4-NEXT:    retq
2486 ; SSE4-NEXT:  .LBB6_1: # %cond.store
2487 ; SSE4-NEXT:    movd %xmm0, (%rdi)
2488 ; SSE4-NEXT:    testb $2, %al
2489 ; SSE4-NEXT:    je .LBB6_4
2490 ; SSE4-NEXT:  .LBB6_3: # %cond.store1
2491 ; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)
2492 ; SSE4-NEXT:    retq
2494 ; AVX1-LABEL: truncstore_v2i64_v2i32:
2495 ; AVX1:       # %bb.0:
2496 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2497 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2498 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
2499 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
2500 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero
2501 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483647,2147483647]
2502 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm3
2503 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2504 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]
2505 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
2506 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2507 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
2508 ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
2509 ; AVX1-NEXT:    retq
2511 ; AVX2-LABEL: truncstore_v2i64_v2i32:
2512 ; AVX2:       # %bb.0:
2513 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2514 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2515 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
2516 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
2517 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero
2518 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483647,2147483647]
2519 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm3
2520 ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2521 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]
2522 ; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
2523 ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2524 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
2525 ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
2526 ; AVX2-NEXT:    retq
2528 ; AVX512F-LABEL: truncstore_v2i64_v2i32:
2529 ; AVX512F:       # %bb.0:
2530 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2531 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2532 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
2533 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
2534 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
2535 ; AVX512F-NEXT:    vpmovsqd %zmm0, %ymm0
2536 ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
2537 ; AVX512F-NEXT:    vzeroupper
2538 ; AVX512F-NEXT:    retq
2540 ; AVX512VL-LABEL: truncstore_v2i64_v2i32:
2541 ; AVX512VL:       # %bb.0:
2542 ; AVX512VL-NEXT:    vptestmq %xmm1, %xmm1, %k1
2543 ; AVX512VL-NEXT:    vpminsq {{.*}}(%rip), %xmm0, %xmm0
2544 ; AVX512VL-NEXT:    vpmaxsq {{.*}}(%rip), %xmm0, %xmm0
2545 ; AVX512VL-NEXT:    vpmovqd %xmm0, (%rdi) {%k1}
2546 ; AVX512VL-NEXT:    retq
2548 ; AVX512BW-LABEL: truncstore_v2i64_v2i32:
2549 ; AVX512BW:       # %bb.0:
2550 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2551 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2552 ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
2553 ; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0
2554 ; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1
2555 ; AVX512BW-NEXT:    vpmovsqd %zmm0, %ymm0
2556 ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
2557 ; AVX512BW-NEXT:    vzeroupper
2558 ; AVX512BW-NEXT:    retq
2559   %a = icmp ne <2 x i64> %mask, zeroinitializer
2560   %b = icmp slt <2 x i64> %x, <i64 2147483647, i64 2147483647>
2561   %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 2147483647, i64 2147483647>
2562   %d = icmp sgt <2 x i64> %c, <i64 -2147483648, i64 -2147483648>
2563   %e = select <2 x i1> %d, <2 x i64> %c, <2 x i64> <i64 -2147483648, i64 -2147483648>
2564   %f = trunc <2 x i64> %e to <2 x i32>
2565   call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %f, <2 x i32>* %p, i32 1, <2 x i1> %a)
2566   ret void
2569 define void @truncstore_v2i64_v2i16(<2 x i64> %x, <2 x i16>* %p, <2 x i64> %mask) {
2570 ; SSE2-LABEL: truncstore_v2i64_v2i16:
2571 ; SSE2:       # %bb.0:
2572 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2573 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
2574 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2575 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2576 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147516415,2147516415]
2577 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2578 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2579 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2580 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2581 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2582 ; SSE2-NEXT:    pand %xmm7, %xmm4
2583 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2584 ; SSE2-NEXT:    por %xmm4, %xmm5
2585 ; SSE2-NEXT:    pand %xmm5, %xmm0
2586 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm5
2587 ; SSE2-NEXT:    por %xmm0, %xmm5
2588 ; SSE2-NEXT:    pxor %xmm5, %xmm3
2589 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18446744071562035200,18446744071562035200]
2590 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2591 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2592 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2593 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
2594 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
2595 ; SSE2-NEXT:    pand %xmm6, %xmm0
2596 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2597 ; SSE2-NEXT:    por %xmm0, %xmm3
2598 ; SSE2-NEXT:    pand %xmm3, %xmm5
2599 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3
2600 ; SSE2-NEXT:    por %xmm5, %xmm3
2601 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
2602 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2603 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
2604 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
2605 ; SSE2-NEXT:    pand %xmm2, %xmm1
2606 ; SSE2-NEXT:    movmskpd %xmm1, %eax
2607 ; SSE2-NEXT:    xorl $3, %eax
2608 ; SSE2-NEXT:    testb $1, %al
2609 ; SSE2-NEXT:    jne .LBB7_1
2610 ; SSE2-NEXT:  # %bb.2: # %else
2611 ; SSE2-NEXT:    testb $2, %al
2612 ; SSE2-NEXT:    jne .LBB7_3
2613 ; SSE2-NEXT:  .LBB7_4: # %else2
2614 ; SSE2-NEXT:    retq
2615 ; SSE2-NEXT:  .LBB7_1: # %cond.store
2616 ; SSE2-NEXT:    movd %xmm0, %ecx
2617 ; SSE2-NEXT:    movw %cx, (%rdi)
2618 ; SSE2-NEXT:    testb $2, %al
2619 ; SSE2-NEXT:    je .LBB7_4
2620 ; SSE2-NEXT:  .LBB7_3: # %cond.store1
2621 ; SSE2-NEXT:    pextrw $1, %xmm0, %eax
2622 ; SSE2-NEXT:    movw %ax, 2(%rdi)
2623 ; SSE2-NEXT:    retq
2625 ; SSE4-LABEL: truncstore_v2i64_v2i16:
2626 ; SSE4:       # %bb.0:
2627 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
2628 ; SSE4-NEXT:    pxor %xmm3, %xmm3
2629 ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [32767,32767]
2630 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
2631 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2632 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
2633 ; SSE4-NEXT:    movdqa {{.*#+}} xmm2 = [18446744073709518848,18446744073709518848]
2634 ; SSE4-NEXT:    movapd %xmm4, %xmm0
2635 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2636 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
2637 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
2638 ; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2639 ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3
2640 ; SSE4-NEXT:    movmskpd %xmm3, %eax
2641 ; SSE4-NEXT:    xorl $3, %eax
2642 ; SSE4-NEXT:    testb $1, %al
2643 ; SSE4-NEXT:    jne .LBB7_1
2644 ; SSE4-NEXT:  # %bb.2: # %else
2645 ; SSE4-NEXT:    testb $2, %al
2646 ; SSE4-NEXT:    jne .LBB7_3
2647 ; SSE4-NEXT:  .LBB7_4: # %else2
2648 ; SSE4-NEXT:    retq
2649 ; SSE4-NEXT:  .LBB7_1: # %cond.store
2650 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
2651 ; SSE4-NEXT:    testb $2, %al
2652 ; SSE4-NEXT:    je .LBB7_4
2653 ; SSE4-NEXT:  .LBB7_3: # %cond.store1
2654 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
2655 ; SSE4-NEXT:    retq
2657 ; AVX-LABEL: truncstore_v2i64_v2i16:
2658 ; AVX:       # %bb.0:
2659 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2660 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [32767,32767]
2661 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
2662 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2663 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [18446744073709518848,18446744073709518848]
2664 ; AVX-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm4
2665 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2666 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
2667 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2668 ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2669 ; AVX-NEXT:    vmovmskpd %xmm1, %eax
2670 ; AVX-NEXT:    xorl $3, %eax
2671 ; AVX-NEXT:    testb $1, %al
2672 ; AVX-NEXT:    jne .LBB7_1
2673 ; AVX-NEXT:  # %bb.2: # %else
2674 ; AVX-NEXT:    testb $2, %al
2675 ; AVX-NEXT:    jne .LBB7_3
2676 ; AVX-NEXT:  .LBB7_4: # %else2
2677 ; AVX-NEXT:    retq
2678 ; AVX-NEXT:  .LBB7_1: # %cond.store
2679 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
2680 ; AVX-NEXT:    testb $2, %al
2681 ; AVX-NEXT:    je .LBB7_4
2682 ; AVX-NEXT:  .LBB7_3: # %cond.store1
2683 ; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2684 ; AVX-NEXT:    retq
2686 ; AVX512F-LABEL: truncstore_v2i64_v2i16:
2687 ; AVX512F:       # %bb.0:
2688 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2689 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2690 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
2691 ; AVX512F-NEXT:    vpmovsqw %zmm0, %xmm0
2692 ; AVX512F-NEXT:    kmovw %k0, %eax
2693 ; AVX512F-NEXT:    testb $1, %al
2694 ; AVX512F-NEXT:    jne .LBB7_1
2695 ; AVX512F-NEXT:  # %bb.2: # %else
2696 ; AVX512F-NEXT:    testb $2, %al
2697 ; AVX512F-NEXT:    jne .LBB7_3
2698 ; AVX512F-NEXT:  .LBB7_4: # %else2
2699 ; AVX512F-NEXT:    vzeroupper
2700 ; AVX512F-NEXT:    retq
2701 ; AVX512F-NEXT:  .LBB7_1: # %cond.store
2702 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
2703 ; AVX512F-NEXT:    testb $2, %al
2704 ; AVX512F-NEXT:    je .LBB7_4
2705 ; AVX512F-NEXT:  .LBB7_3: # %cond.store1
2706 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2707 ; AVX512F-NEXT:    vzeroupper
2708 ; AVX512F-NEXT:    retq
2710 ; AVX512BW-LABEL: truncstore_v2i64_v2i16:
2711 ; AVX512BW:       # %bb.0:
2712 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2713 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2714 ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
2715 ; AVX512BW-NEXT:    kshiftld $30, %k0, %k0
2716 ; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1
2717 ; AVX512BW-NEXT:    vpmovsqw %zmm0, %xmm0
2718 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
2719 ; AVX512BW-NEXT:    vzeroupper
2720 ; AVX512BW-NEXT:    retq
2722 ; AVX512BWVL-LABEL: truncstore_v2i64_v2i16:
2723 ; AVX512BWVL:       # %bb.0:
2724 ; AVX512BWVL-NEXT:    vptestmq %xmm1, %xmm1, %k1
2725 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip), %xmm0, %xmm0
2726 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip), %xmm0, %xmm0
2727 ; AVX512BWVL-NEXT:    vpmovqw %xmm0, (%rdi) {%k1}
2728 ; AVX512BWVL-NEXT:    retq
2729   %a = icmp ne <2 x i64> %mask, zeroinitializer
2730   %b = icmp slt <2 x i64> %x, <i64 32767, i64 32767>
2731   %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 32767, i64 32767>
2732   %d = icmp sgt <2 x i64> %c, <i64 -32768, i64 -32768>
2733   %e = select <2 x i1> %d, <2 x i64> %c, <2 x i64> <i64 -32768, i64 -32768>
2734   %f = trunc <2 x i64> %e to <2 x i16>
2735   call void @llvm.masked.store.v2i16.p0v2i16(<2 x i16> %f, <2 x i16>* %p, i32 1, <2 x i1> %a)
2736   ret void
2739 define void @truncstore_v2i64_v2i8(<2 x i64> %x, <2 x i8>* %p, <2 x i64> %mask) {
2740 ; SSE2-LABEL: truncstore_v2i64_v2i8:
2741 ; SSE2:       # %bb.0:
2742 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2743 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
2744 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2745 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2746 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483775,2147483775]
2747 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2748 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2749 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2750 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2751 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2752 ; SSE2-NEXT:    pand %xmm7, %xmm4
2753 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2754 ; SSE2-NEXT:    por %xmm4, %xmm5
2755 ; SSE2-NEXT:    pand %xmm5, %xmm0
2756 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm5
2757 ; SSE2-NEXT:    por %xmm0, %xmm5
2758 ; SSE2-NEXT:    pxor %xmm5, %xmm3
2759 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18446744071562067840,18446744071562067840]
2760 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2761 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2762 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2763 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
2764 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
2765 ; SSE2-NEXT:    pand %xmm6, %xmm0
2766 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2767 ; SSE2-NEXT:    por %xmm0, %xmm3
2768 ; SSE2-NEXT:    pand %xmm3, %xmm5
2769 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3
2770 ; SSE2-NEXT:    por %xmm5, %xmm3
2771 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
2772 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
2773 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
2774 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
2775 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
2776 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
2777 ; SSE2-NEXT:    pand %xmm2, %xmm0
2778 ; SSE2-NEXT:    movmskpd %xmm0, %eax
2779 ; SSE2-NEXT:    xorl $3, %eax
2780 ; SSE2-NEXT:    testb $1, %al
2781 ; SSE2-NEXT:    movd %xmm3, %ecx
2782 ; SSE2-NEXT:    jne .LBB8_1
2783 ; SSE2-NEXT:  # %bb.2: # %else
2784 ; SSE2-NEXT:    testb $2, %al
2785 ; SSE2-NEXT:    jne .LBB8_3
2786 ; SSE2-NEXT:  .LBB8_4: # %else2
2787 ; SSE2-NEXT:    retq
2788 ; SSE2-NEXT:  .LBB8_1: # %cond.store
2789 ; SSE2-NEXT:    movb %cl, (%rdi)
2790 ; SSE2-NEXT:    testb $2, %al
2791 ; SSE2-NEXT:    je .LBB8_4
2792 ; SSE2-NEXT:  .LBB8_3: # %cond.store1
2793 ; SSE2-NEXT:    movb %ch, 1(%rdi)
2794 ; SSE2-NEXT:    retq
2796 ; SSE4-LABEL: truncstore_v2i64_v2i8:
2797 ; SSE4:       # %bb.0:
2798 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
2799 ; SSE4-NEXT:    pxor %xmm3, %xmm3
2800 ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [127,127]
2801 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
2802 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2803 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
2804 ; SSE4-NEXT:    movdqa {{.*#+}} xmm2 = [18446744073709551488,18446744073709551488]
2805 ; SSE4-NEXT:    movapd %xmm4, %xmm0
2806 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2807 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
2808 ; SSE4-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
2809 ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3
2810 ; SSE4-NEXT:    movmskpd %xmm3, %eax
2811 ; SSE4-NEXT:    xorl $3, %eax
2812 ; SSE4-NEXT:    testb $1, %al
2813 ; SSE4-NEXT:    jne .LBB8_1
2814 ; SSE4-NEXT:  # %bb.2: # %else
2815 ; SSE4-NEXT:    testb $2, %al
2816 ; SSE4-NEXT:    jne .LBB8_3
2817 ; SSE4-NEXT:  .LBB8_4: # %else2
2818 ; SSE4-NEXT:    retq
2819 ; SSE4-NEXT:  .LBB8_1: # %cond.store
2820 ; SSE4-NEXT:    pextrb $0, %xmm2, (%rdi)
2821 ; SSE4-NEXT:    testb $2, %al
2822 ; SSE4-NEXT:    je .LBB8_4
2823 ; SSE4-NEXT:  .LBB8_3: # %cond.store1
2824 ; SSE4-NEXT:    pextrb $1, %xmm2, 1(%rdi)
2825 ; SSE4-NEXT:    retq
2827 ; AVX-LABEL: truncstore_v2i64_v2i8:
2828 ; AVX:       # %bb.0:
2829 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2830 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [127,127]
2831 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
2832 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2833 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488]
2834 ; AVX-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm4
2835 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2836 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
2837 ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2838 ; AVX-NEXT:    vmovmskpd %xmm1, %eax
2839 ; AVX-NEXT:    xorl $3, %eax
2840 ; AVX-NEXT:    testb $1, %al
2841 ; AVX-NEXT:    jne .LBB8_1
2842 ; AVX-NEXT:  # %bb.2: # %else
2843 ; AVX-NEXT:    testb $2, %al
2844 ; AVX-NEXT:    jne .LBB8_3
2845 ; AVX-NEXT:  .LBB8_4: # %else2
2846 ; AVX-NEXT:    retq
2847 ; AVX-NEXT:  .LBB8_1: # %cond.store
2848 ; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
2849 ; AVX-NEXT:    testb $2, %al
2850 ; AVX-NEXT:    je .LBB8_4
2851 ; AVX-NEXT:  .LBB8_3: # %cond.store1
2852 ; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2853 ; AVX-NEXT:    retq
2855 ; AVX512F-LABEL: truncstore_v2i64_v2i8:
2856 ; AVX512F:       # %bb.0:
2857 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2858 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2859 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
2860 ; AVX512F-NEXT:    vpmovsqb %zmm0, %xmm0
2861 ; AVX512F-NEXT:    kmovw %k0, %eax
2862 ; AVX512F-NEXT:    testb $1, %al
2863 ; AVX512F-NEXT:    jne .LBB8_1
2864 ; AVX512F-NEXT:  # %bb.2: # %else
2865 ; AVX512F-NEXT:    testb $2, %al
2866 ; AVX512F-NEXT:    jne .LBB8_3
2867 ; AVX512F-NEXT:  .LBB8_4: # %else2
2868 ; AVX512F-NEXT:    vzeroupper
2869 ; AVX512F-NEXT:    retq
2870 ; AVX512F-NEXT:  .LBB8_1: # %cond.store
2871 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
2872 ; AVX512F-NEXT:    testb $2, %al
2873 ; AVX512F-NEXT:    je .LBB8_4
2874 ; AVX512F-NEXT:  .LBB8_3: # %cond.store1
2875 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2876 ; AVX512F-NEXT:    vzeroupper
2877 ; AVX512F-NEXT:    retq
2879 ; AVX512BW-LABEL: truncstore_v2i64_v2i8:
2880 ; AVX512BW:       # %bb.0:
2881 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2882 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2883 ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
2884 ; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0
2885 ; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1
2886 ; AVX512BW-NEXT:    vpmovsqb %zmm0, %xmm0
2887 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
2888 ; AVX512BW-NEXT:    vzeroupper
2889 ; AVX512BW-NEXT:    retq
2891 ; AVX512BWVL-LABEL: truncstore_v2i64_v2i8:
2892 ; AVX512BWVL:       # %bb.0:
2893 ; AVX512BWVL-NEXT:    vptestmq %xmm1, %xmm1, %k1
2894 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip), %xmm0, %xmm0
2895 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip), %xmm0, %xmm0
2896 ; AVX512BWVL-NEXT:    vpmovqb %xmm0, (%rdi) {%k1}
2897 ; AVX512BWVL-NEXT:    retq
2898   %a = icmp ne <2 x i64> %mask, zeroinitializer
2899   %b = icmp slt <2 x i64> %x, <i64 127, i64 127>
2900   %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 127, i64 127>
2901   %d = icmp sgt <2 x i64> %c, <i64 -128, i64 -128>
2902   %e = select <2 x i1> %d, <2 x i64> %c, <2 x i64> <i64 -128, i64 -128>
2903   %f = trunc <2 x i64> %e to <2 x i8>
2904   call void @llvm.masked.store.v2i8.p0v2i8(<2 x i8> %f, <2 x i8>* %p, i32 1, <2 x i1> %a)
2905   ret void
2908 define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32> %mask) {
2909 ; SSE2-LABEL: truncstore_v16i32_v16i16:
2910 ; SSE2:       # %bb.0:
2911 ; SSE2-NEXT:    pxor %xmm8, %xmm8
2912 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
2913 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
2914 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
2915 ; SSE2-NEXT:    pxor %xmm1, %xmm7
2916 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
2917 ; SSE2-NEXT:    pxor %xmm1, %xmm6
2918 ; SSE2-NEXT:    packssdw %xmm7, %xmm6
2919 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
2920 ; SSE2-NEXT:    pxor %xmm1, %xmm5
2921 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
2922 ; SSE2-NEXT:    pxor %xmm1, %xmm4
2923 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
2924 ; SSE2-NEXT:    packsswb %xmm6, %xmm4
2925 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
2926 ; SSE2-NEXT:    testb $1, %al
2927 ; SSE2-NEXT:    jne .LBB9_1
2928 ; SSE2-NEXT:  # %bb.2: # %else
2929 ; SSE2-NEXT:    testb $2, %al
2930 ; SSE2-NEXT:    jne .LBB9_3
2931 ; SSE2-NEXT:  .LBB9_4: # %else2
2932 ; SSE2-NEXT:    testb $4, %al
2933 ; SSE2-NEXT:    jne .LBB9_5
2934 ; SSE2-NEXT:  .LBB9_6: # %else4
2935 ; SSE2-NEXT:    testb $8, %al
2936 ; SSE2-NEXT:    jne .LBB9_7
2937 ; SSE2-NEXT:  .LBB9_8: # %else6
2938 ; SSE2-NEXT:    testb $16, %al
2939 ; SSE2-NEXT:    jne .LBB9_9
2940 ; SSE2-NEXT:  .LBB9_10: # %else8
2941 ; SSE2-NEXT:    testb $32, %al
2942 ; SSE2-NEXT:    jne .LBB9_11
2943 ; SSE2-NEXT:  .LBB9_12: # %else10
2944 ; SSE2-NEXT:    testb $64, %al
2945 ; SSE2-NEXT:    jne .LBB9_13
2946 ; SSE2-NEXT:  .LBB9_14: # %else12
2947 ; SSE2-NEXT:    testb $-128, %al
2948 ; SSE2-NEXT:    je .LBB9_16
2949 ; SSE2-NEXT:  .LBB9_15: # %cond.store13
2950 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
2951 ; SSE2-NEXT:    movw %cx, 14(%rdi)
2952 ; SSE2-NEXT:  .LBB9_16: # %else14
2953 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
2954 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
2955 ; SSE2-NEXT:    jne .LBB9_17
2956 ; SSE2-NEXT:  # %bb.18: # %else16
2957 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
2958 ; SSE2-NEXT:    jne .LBB9_19
2959 ; SSE2-NEXT:  .LBB9_20: # %else18
2960 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
2961 ; SSE2-NEXT:    jne .LBB9_21
2962 ; SSE2-NEXT:  .LBB9_22: # %else20
2963 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
2964 ; SSE2-NEXT:    jne .LBB9_23
2965 ; SSE2-NEXT:  .LBB9_24: # %else22
2966 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
2967 ; SSE2-NEXT:    jne .LBB9_25
2968 ; SSE2-NEXT:  .LBB9_26: # %else24
2969 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
2970 ; SSE2-NEXT:    jne .LBB9_27
2971 ; SSE2-NEXT:  .LBB9_28: # %else26
2972 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
2973 ; SSE2-NEXT:    jne .LBB9_29
2974 ; SSE2-NEXT:  .LBB9_30: # %else28
2975 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
2976 ; SSE2-NEXT:    jne .LBB9_31
2977 ; SSE2-NEXT:  .LBB9_32: # %else30
2978 ; SSE2-NEXT:    retq
2979 ; SSE2-NEXT:  .LBB9_1: # %cond.store
2980 ; SSE2-NEXT:    movd %xmm0, %ecx
2981 ; SSE2-NEXT:    movw %cx, (%rdi)
2982 ; SSE2-NEXT:    testb $2, %al
2983 ; SSE2-NEXT:    je .LBB9_4
2984 ; SSE2-NEXT:  .LBB9_3: # %cond.store1
2985 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
2986 ; SSE2-NEXT:    movw %cx, 2(%rdi)
2987 ; SSE2-NEXT:    testb $4, %al
2988 ; SSE2-NEXT:    je .LBB9_6
2989 ; SSE2-NEXT:  .LBB9_5: # %cond.store3
2990 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
2991 ; SSE2-NEXT:    movw %cx, 4(%rdi)
2992 ; SSE2-NEXT:    testb $8, %al
2993 ; SSE2-NEXT:    je .LBB9_8
2994 ; SSE2-NEXT:  .LBB9_7: # %cond.store5
2995 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
2996 ; SSE2-NEXT:    movw %cx, 6(%rdi)
2997 ; SSE2-NEXT:    testb $16, %al
2998 ; SSE2-NEXT:    je .LBB9_10
2999 ; SSE2-NEXT:  .LBB9_9: # %cond.store7
3000 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
3001 ; SSE2-NEXT:    movw %cx, 8(%rdi)
3002 ; SSE2-NEXT:    testb $32, %al
3003 ; SSE2-NEXT:    je .LBB9_12
3004 ; SSE2-NEXT:  .LBB9_11: # %cond.store9
3005 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
3006 ; SSE2-NEXT:    movw %cx, 10(%rdi)
3007 ; SSE2-NEXT:    testb $64, %al
3008 ; SSE2-NEXT:    je .LBB9_14
3009 ; SSE2-NEXT:  .LBB9_13: # %cond.store11
3010 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
3011 ; SSE2-NEXT:    movw %cx, 12(%rdi)
3012 ; SSE2-NEXT:    testb $-128, %al
3013 ; SSE2-NEXT:    jne .LBB9_15
3014 ; SSE2-NEXT:    jmp .LBB9_16
3015 ; SSE2-NEXT:  .LBB9_17: # %cond.store15
3016 ; SSE2-NEXT:    movd %xmm2, %ecx
3017 ; SSE2-NEXT:    movw %cx, 16(%rdi)
3018 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
3019 ; SSE2-NEXT:    je .LBB9_20
3020 ; SSE2-NEXT:  .LBB9_19: # %cond.store17
3021 ; SSE2-NEXT:    pextrw $1, %xmm2, %ecx
3022 ; SSE2-NEXT:    movw %cx, 18(%rdi)
3023 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
3024 ; SSE2-NEXT:    je .LBB9_22
3025 ; SSE2-NEXT:  .LBB9_21: # %cond.store19
3026 ; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
3027 ; SSE2-NEXT:    movw %cx, 20(%rdi)
3028 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
3029 ; SSE2-NEXT:    je .LBB9_24
3030 ; SSE2-NEXT:  .LBB9_23: # %cond.store21
3031 ; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
3032 ; SSE2-NEXT:    movw %cx, 22(%rdi)
3033 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
3034 ; SSE2-NEXT:    je .LBB9_26
3035 ; SSE2-NEXT:  .LBB9_25: # %cond.store23
3036 ; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
3037 ; SSE2-NEXT:    movw %cx, 24(%rdi)
3038 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
3039 ; SSE2-NEXT:    je .LBB9_28
3040 ; SSE2-NEXT:  .LBB9_27: # %cond.store25
3041 ; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
3042 ; SSE2-NEXT:    movw %cx, 26(%rdi)
3043 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
3044 ; SSE2-NEXT:    je .LBB9_30
3045 ; SSE2-NEXT:  .LBB9_29: # %cond.store27
3046 ; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
3047 ; SSE2-NEXT:    movw %cx, 28(%rdi)
3048 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3049 ; SSE2-NEXT:    je .LBB9_32
3050 ; SSE2-NEXT:  .LBB9_31: # %cond.store29
3051 ; SSE2-NEXT:    pextrw $7, %xmm2, %eax
3052 ; SSE2-NEXT:    movw %ax, 30(%rdi)
3053 ; SSE2-NEXT:    retq
3055 ; SSE4-LABEL: truncstore_v16i32_v16i16:
3056 ; SSE4:       # %bb.0:
3057 ; SSE4-NEXT:    pxor %xmm8, %xmm8
3058 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
3059 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm7
3060 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
3061 ; SSE4-NEXT:    pxor %xmm1, %xmm7
3062 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm6
3063 ; SSE4-NEXT:    pxor %xmm1, %xmm6
3064 ; SSE4-NEXT:    packssdw %xmm7, %xmm6
3065 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
3066 ; SSE4-NEXT:    pxor %xmm1, %xmm5
3067 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
3068 ; SSE4-NEXT:    pxor %xmm1, %xmm4
3069 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
3070 ; SSE4-NEXT:    packsswb %xmm6, %xmm4
3071 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
3072 ; SSE4-NEXT:    testb $1, %al
3073 ; SSE4-NEXT:    jne .LBB9_1
3074 ; SSE4-NEXT:  # %bb.2: # %else
3075 ; SSE4-NEXT:    testb $2, %al
3076 ; SSE4-NEXT:    jne .LBB9_3
3077 ; SSE4-NEXT:  .LBB9_4: # %else2
3078 ; SSE4-NEXT:    testb $4, %al
3079 ; SSE4-NEXT:    jne .LBB9_5
3080 ; SSE4-NEXT:  .LBB9_6: # %else4
3081 ; SSE4-NEXT:    testb $8, %al
3082 ; SSE4-NEXT:    jne .LBB9_7
3083 ; SSE4-NEXT:  .LBB9_8: # %else6
3084 ; SSE4-NEXT:    testb $16, %al
3085 ; SSE4-NEXT:    jne .LBB9_9
3086 ; SSE4-NEXT:  .LBB9_10: # %else8
3087 ; SSE4-NEXT:    testb $32, %al
3088 ; SSE4-NEXT:    jne .LBB9_11
3089 ; SSE4-NEXT:  .LBB9_12: # %else10
3090 ; SSE4-NEXT:    testb $64, %al
3091 ; SSE4-NEXT:    jne .LBB9_13
3092 ; SSE4-NEXT:  .LBB9_14: # %else12
3093 ; SSE4-NEXT:    testb $-128, %al
3094 ; SSE4-NEXT:    je .LBB9_16
3095 ; SSE4-NEXT:  .LBB9_15: # %cond.store13
3096 ; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
3097 ; SSE4-NEXT:  .LBB9_16: # %else14
3098 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
3099 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
3100 ; SSE4-NEXT:    jne .LBB9_17
3101 ; SSE4-NEXT:  # %bb.18: # %else16
3102 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3103 ; SSE4-NEXT:    jne .LBB9_19
3104 ; SSE4-NEXT:  .LBB9_20: # %else18
3105 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3106 ; SSE4-NEXT:    jne .LBB9_21
3107 ; SSE4-NEXT:  .LBB9_22: # %else20
3108 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3109 ; SSE4-NEXT:    jne .LBB9_23
3110 ; SSE4-NEXT:  .LBB9_24: # %else22
3111 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3112 ; SSE4-NEXT:    jne .LBB9_25
3113 ; SSE4-NEXT:  .LBB9_26: # %else24
3114 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3115 ; SSE4-NEXT:    jne .LBB9_27
3116 ; SSE4-NEXT:  .LBB9_28: # %else26
3117 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3118 ; SSE4-NEXT:    jne .LBB9_29
3119 ; SSE4-NEXT:  .LBB9_30: # %else28
3120 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3121 ; SSE4-NEXT:    jne .LBB9_31
3122 ; SSE4-NEXT:  .LBB9_32: # %else30
3123 ; SSE4-NEXT:    retq
3124 ; SSE4-NEXT:  .LBB9_1: # %cond.store
3125 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
3126 ; SSE4-NEXT:    testb $2, %al
3127 ; SSE4-NEXT:    je .LBB9_4
3128 ; SSE4-NEXT:  .LBB9_3: # %cond.store1
3129 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
3130 ; SSE4-NEXT:    testb $4, %al
3131 ; SSE4-NEXT:    je .LBB9_6
3132 ; SSE4-NEXT:  .LBB9_5: # %cond.store3
3133 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
3134 ; SSE4-NEXT:    testb $8, %al
3135 ; SSE4-NEXT:    je .LBB9_8
3136 ; SSE4-NEXT:  .LBB9_7: # %cond.store5
3137 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
3138 ; SSE4-NEXT:    testb $16, %al
3139 ; SSE4-NEXT:    je .LBB9_10
3140 ; SSE4-NEXT:  .LBB9_9: # %cond.store7
3141 ; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
3142 ; SSE4-NEXT:    testb $32, %al
3143 ; SSE4-NEXT:    je .LBB9_12
3144 ; SSE4-NEXT:  .LBB9_11: # %cond.store9
3145 ; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
3146 ; SSE4-NEXT:    testb $64, %al
3147 ; SSE4-NEXT:    je .LBB9_14
3148 ; SSE4-NEXT:  .LBB9_13: # %cond.store11
3149 ; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
3150 ; SSE4-NEXT:    testb $-128, %al
3151 ; SSE4-NEXT:    jne .LBB9_15
3152 ; SSE4-NEXT:    jmp .LBB9_16
3153 ; SSE4-NEXT:  .LBB9_17: # %cond.store15
3154 ; SSE4-NEXT:    pextrw $0, %xmm2, 16(%rdi)
3155 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3156 ; SSE4-NEXT:    je .LBB9_20
3157 ; SSE4-NEXT:  .LBB9_19: # %cond.store17
3158 ; SSE4-NEXT:    pextrw $1, %xmm2, 18(%rdi)
3159 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3160 ; SSE4-NEXT:    je .LBB9_22
3161 ; SSE4-NEXT:  .LBB9_21: # %cond.store19
3162 ; SSE4-NEXT:    pextrw $2, %xmm2, 20(%rdi)
3163 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3164 ; SSE4-NEXT:    je .LBB9_24
3165 ; SSE4-NEXT:  .LBB9_23: # %cond.store21
3166 ; SSE4-NEXT:    pextrw $3, %xmm2, 22(%rdi)
3167 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3168 ; SSE4-NEXT:    je .LBB9_26
3169 ; SSE4-NEXT:  .LBB9_25: # %cond.store23
3170 ; SSE4-NEXT:    pextrw $4, %xmm2, 24(%rdi)
3171 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3172 ; SSE4-NEXT:    je .LBB9_28
3173 ; SSE4-NEXT:  .LBB9_27: # %cond.store25
3174 ; SSE4-NEXT:    pextrw $5, %xmm2, 26(%rdi)
3175 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3176 ; SSE4-NEXT:    je .LBB9_30
3177 ; SSE4-NEXT:  .LBB9_29: # %cond.store27
3178 ; SSE4-NEXT:    pextrw $6, %xmm2, 28(%rdi)
3179 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3180 ; SSE4-NEXT:    je .LBB9_32
3181 ; SSE4-NEXT:  .LBB9_31: # %cond.store29
3182 ; SSE4-NEXT:    pextrw $7, %xmm2, 30(%rdi)
3183 ; SSE4-NEXT:    retq
3185 ; AVX1-LABEL: truncstore_v16i32_v16i16:
3186 ; AVX1:       # %bb.0:
3187 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3188 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
3189 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
3190 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
3191 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3192 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
3193 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3194 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm1, %xmm1
3195 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
3196 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
3197 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3198 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3199 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm3, %xmm1
3200 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3201 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3202 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3203 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
3204 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
3205 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
3206 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm2, %xmm1
3207 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
3208 ; AVX1-NEXT:    testb $1, %al
3209 ; AVX1-NEXT:    jne .LBB9_1
3210 ; AVX1-NEXT:  # %bb.2: # %else
3211 ; AVX1-NEXT:    testb $2, %al
3212 ; AVX1-NEXT:    jne .LBB9_3
3213 ; AVX1-NEXT:  .LBB9_4: # %else2
3214 ; AVX1-NEXT:    testb $4, %al
3215 ; AVX1-NEXT:    jne .LBB9_5
3216 ; AVX1-NEXT:  .LBB9_6: # %else4
3217 ; AVX1-NEXT:    testb $8, %al
3218 ; AVX1-NEXT:    jne .LBB9_7
3219 ; AVX1-NEXT:  .LBB9_8: # %else6
3220 ; AVX1-NEXT:    testb $16, %al
3221 ; AVX1-NEXT:    jne .LBB9_9
3222 ; AVX1-NEXT:  .LBB9_10: # %else8
3223 ; AVX1-NEXT:    testb $32, %al
3224 ; AVX1-NEXT:    jne .LBB9_11
3225 ; AVX1-NEXT:  .LBB9_12: # %else10
3226 ; AVX1-NEXT:    testb $64, %al
3227 ; AVX1-NEXT:    jne .LBB9_13
3228 ; AVX1-NEXT:  .LBB9_14: # %else12
3229 ; AVX1-NEXT:    testb $-128, %al
3230 ; AVX1-NEXT:    je .LBB9_16
3231 ; AVX1-NEXT:  .LBB9_15: # %cond.store13
3232 ; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3233 ; AVX1-NEXT:  .LBB9_16: # %else14
3234 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
3235 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3236 ; AVX1-NEXT:    jne .LBB9_17
3237 ; AVX1-NEXT:  # %bb.18: # %else16
3238 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3239 ; AVX1-NEXT:    jne .LBB9_19
3240 ; AVX1-NEXT:  .LBB9_20: # %else18
3241 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3242 ; AVX1-NEXT:    jne .LBB9_21
3243 ; AVX1-NEXT:  .LBB9_22: # %else20
3244 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3245 ; AVX1-NEXT:    jne .LBB9_23
3246 ; AVX1-NEXT:  .LBB9_24: # %else22
3247 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3248 ; AVX1-NEXT:    jne .LBB9_25
3249 ; AVX1-NEXT:  .LBB9_26: # %else24
3250 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3251 ; AVX1-NEXT:    jne .LBB9_27
3252 ; AVX1-NEXT:  .LBB9_28: # %else26
3253 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3254 ; AVX1-NEXT:    jne .LBB9_29
3255 ; AVX1-NEXT:  .LBB9_30: # %else28
3256 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3257 ; AVX1-NEXT:    jne .LBB9_31
3258 ; AVX1-NEXT:  .LBB9_32: # %else30
3259 ; AVX1-NEXT:    vzeroupper
3260 ; AVX1-NEXT:    retq
3261 ; AVX1-NEXT:  .LBB9_1: # %cond.store
3262 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
3263 ; AVX1-NEXT:    testb $2, %al
3264 ; AVX1-NEXT:    je .LBB9_4
3265 ; AVX1-NEXT:  .LBB9_3: # %cond.store1
3266 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3267 ; AVX1-NEXT:    testb $4, %al
3268 ; AVX1-NEXT:    je .LBB9_6
3269 ; AVX1-NEXT:  .LBB9_5: # %cond.store3
3270 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3271 ; AVX1-NEXT:    testb $8, %al
3272 ; AVX1-NEXT:    je .LBB9_8
3273 ; AVX1-NEXT:  .LBB9_7: # %cond.store5
3274 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3275 ; AVX1-NEXT:    testb $16, %al
3276 ; AVX1-NEXT:    je .LBB9_10
3277 ; AVX1-NEXT:  .LBB9_9: # %cond.store7
3278 ; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3279 ; AVX1-NEXT:    testb $32, %al
3280 ; AVX1-NEXT:    je .LBB9_12
3281 ; AVX1-NEXT:  .LBB9_11: # %cond.store9
3282 ; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3283 ; AVX1-NEXT:    testb $64, %al
3284 ; AVX1-NEXT:    je .LBB9_14
3285 ; AVX1-NEXT:  .LBB9_13: # %cond.store11
3286 ; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3287 ; AVX1-NEXT:    testb $-128, %al
3288 ; AVX1-NEXT:    jne .LBB9_15
3289 ; AVX1-NEXT:    jmp .LBB9_16
3290 ; AVX1-NEXT:  .LBB9_17: # %cond.store15
3291 ; AVX1-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
3292 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3293 ; AVX1-NEXT:    je .LBB9_20
3294 ; AVX1-NEXT:  .LBB9_19: # %cond.store17
3295 ; AVX1-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
3296 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3297 ; AVX1-NEXT:    je .LBB9_22
3298 ; AVX1-NEXT:  .LBB9_21: # %cond.store19
3299 ; AVX1-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
3300 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3301 ; AVX1-NEXT:    je .LBB9_24
3302 ; AVX1-NEXT:  .LBB9_23: # %cond.store21
3303 ; AVX1-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
3304 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3305 ; AVX1-NEXT:    je .LBB9_26
3306 ; AVX1-NEXT:  .LBB9_25: # %cond.store23
3307 ; AVX1-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
3308 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3309 ; AVX1-NEXT:    je .LBB9_28
3310 ; AVX1-NEXT:  .LBB9_27: # %cond.store25
3311 ; AVX1-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
3312 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3313 ; AVX1-NEXT:    je .LBB9_30
3314 ; AVX1-NEXT:  .LBB9_29: # %cond.store27
3315 ; AVX1-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
3316 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3317 ; AVX1-NEXT:    je .LBB9_32
3318 ; AVX1-NEXT:  .LBB9_31: # %cond.store29
3319 ; AVX1-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
3320 ; AVX1-NEXT:    vzeroupper
3321 ; AVX1-NEXT:    retq
3323 ; AVX2-LABEL: truncstore_v16i32_v16i16:
3324 ; AVX2:       # %bb.0:
3325 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3326 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
3327 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3328 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm1
3329 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
3330 ; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
3331 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
3332 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
3333 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm2, %ymm1
3334 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
3335 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3336 ; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
3337 ; AVX2-NEXT:    vpmovmskb %xmm1, %eax
3338 ; AVX2-NEXT:    testb $1, %al
3339 ; AVX2-NEXT:    jne .LBB9_1
3340 ; AVX2-NEXT:  # %bb.2: # %else
3341 ; AVX2-NEXT:    testb $2, %al
3342 ; AVX2-NEXT:    jne .LBB9_3
3343 ; AVX2-NEXT:  .LBB9_4: # %else2
3344 ; AVX2-NEXT:    testb $4, %al
3345 ; AVX2-NEXT:    jne .LBB9_5
3346 ; AVX2-NEXT:  .LBB9_6: # %else4
3347 ; AVX2-NEXT:    testb $8, %al
3348 ; AVX2-NEXT:    jne .LBB9_7
3349 ; AVX2-NEXT:  .LBB9_8: # %else6
3350 ; AVX2-NEXT:    testb $16, %al
3351 ; AVX2-NEXT:    jne .LBB9_9
3352 ; AVX2-NEXT:  .LBB9_10: # %else8
3353 ; AVX2-NEXT:    testb $32, %al
3354 ; AVX2-NEXT:    jne .LBB9_11
3355 ; AVX2-NEXT:  .LBB9_12: # %else10
3356 ; AVX2-NEXT:    testb $64, %al
3357 ; AVX2-NEXT:    jne .LBB9_13
3358 ; AVX2-NEXT:  .LBB9_14: # %else12
3359 ; AVX2-NEXT:    testb $-128, %al
3360 ; AVX2-NEXT:    je .LBB9_16
3361 ; AVX2-NEXT:  .LBB9_15: # %cond.store13
3362 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3363 ; AVX2-NEXT:  .LBB9_16: # %else14
3364 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
3365 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
3366 ; AVX2-NEXT:    jne .LBB9_17
3367 ; AVX2-NEXT:  # %bb.18: # %else16
3368 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
3369 ; AVX2-NEXT:    jne .LBB9_19
3370 ; AVX2-NEXT:  .LBB9_20: # %else18
3371 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
3372 ; AVX2-NEXT:    jne .LBB9_21
3373 ; AVX2-NEXT:  .LBB9_22: # %else20
3374 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
3375 ; AVX2-NEXT:    jne .LBB9_23
3376 ; AVX2-NEXT:  .LBB9_24: # %else22
3377 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
3378 ; AVX2-NEXT:    jne .LBB9_25
3379 ; AVX2-NEXT:  .LBB9_26: # %else24
3380 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
3381 ; AVX2-NEXT:    jne .LBB9_27
3382 ; AVX2-NEXT:  .LBB9_28: # %else26
3383 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
3384 ; AVX2-NEXT:    jne .LBB9_29
3385 ; AVX2-NEXT:  .LBB9_30: # %else28
3386 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
3387 ; AVX2-NEXT:    jne .LBB9_31
3388 ; AVX2-NEXT:  .LBB9_32: # %else30
3389 ; AVX2-NEXT:    vzeroupper
3390 ; AVX2-NEXT:    retq
3391 ; AVX2-NEXT:  .LBB9_1: # %cond.store
3392 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
3393 ; AVX2-NEXT:    testb $2, %al
3394 ; AVX2-NEXT:    je .LBB9_4
3395 ; AVX2-NEXT:  .LBB9_3: # %cond.store1
3396 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3397 ; AVX2-NEXT:    testb $4, %al
3398 ; AVX2-NEXT:    je .LBB9_6
3399 ; AVX2-NEXT:  .LBB9_5: # %cond.store3
3400 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3401 ; AVX2-NEXT:    testb $8, %al
3402 ; AVX2-NEXT:    je .LBB9_8
3403 ; AVX2-NEXT:  .LBB9_7: # %cond.store5
3404 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3405 ; AVX2-NEXT:    testb $16, %al
3406 ; AVX2-NEXT:    je .LBB9_10
3407 ; AVX2-NEXT:  .LBB9_9: # %cond.store7
3408 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3409 ; AVX2-NEXT:    testb $32, %al
3410 ; AVX2-NEXT:    je .LBB9_12
3411 ; AVX2-NEXT:  .LBB9_11: # %cond.store9
3412 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3413 ; AVX2-NEXT:    testb $64, %al
3414 ; AVX2-NEXT:    je .LBB9_14
3415 ; AVX2-NEXT:  .LBB9_13: # %cond.store11
3416 ; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3417 ; AVX2-NEXT:    testb $-128, %al
3418 ; AVX2-NEXT:    jne .LBB9_15
3419 ; AVX2-NEXT:    jmp .LBB9_16
3420 ; AVX2-NEXT:  .LBB9_17: # %cond.store15
3421 ; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
3422 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
3423 ; AVX2-NEXT:    je .LBB9_20
3424 ; AVX2-NEXT:  .LBB9_19: # %cond.store17
3425 ; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
3426 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
3427 ; AVX2-NEXT:    je .LBB9_22
3428 ; AVX2-NEXT:  .LBB9_21: # %cond.store19
3429 ; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
3430 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
3431 ; AVX2-NEXT:    je .LBB9_24
3432 ; AVX2-NEXT:  .LBB9_23: # %cond.store21
3433 ; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
3434 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
3435 ; AVX2-NEXT:    je .LBB9_26
3436 ; AVX2-NEXT:  .LBB9_25: # %cond.store23
3437 ; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
3438 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
3439 ; AVX2-NEXT:    je .LBB9_28
3440 ; AVX2-NEXT:  .LBB9_27: # %cond.store25
3441 ; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
3442 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
3443 ; AVX2-NEXT:    je .LBB9_30
3444 ; AVX2-NEXT:  .LBB9_29: # %cond.store27
3445 ; AVX2-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
3446 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
3447 ; AVX2-NEXT:    je .LBB9_32
3448 ; AVX2-NEXT:  .LBB9_31: # %cond.store29
3449 ; AVX2-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
3450 ; AVX2-NEXT:    vzeroupper
3451 ; AVX2-NEXT:    retq
3453 ; AVX512F-LABEL: truncstore_v16i32_v16i16:
3454 ; AVX512F:       # %bb.0:
3455 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
3456 ; AVX512F-NEXT:    vpmovsdw %zmm0, %ymm0
3457 ; AVX512F-NEXT:    kmovw %k0, %eax
3458 ; AVX512F-NEXT:    testb $1, %al
3459 ; AVX512F-NEXT:    jne .LBB9_1
3460 ; AVX512F-NEXT:  # %bb.2: # %else
3461 ; AVX512F-NEXT:    testb $2, %al
3462 ; AVX512F-NEXT:    jne .LBB9_3
3463 ; AVX512F-NEXT:  .LBB9_4: # %else2
3464 ; AVX512F-NEXT:    testb $4, %al
3465 ; AVX512F-NEXT:    jne .LBB9_5
3466 ; AVX512F-NEXT:  .LBB9_6: # %else4
3467 ; AVX512F-NEXT:    testb $8, %al
3468 ; AVX512F-NEXT:    jne .LBB9_7
3469 ; AVX512F-NEXT:  .LBB9_8: # %else6
3470 ; AVX512F-NEXT:    testb $16, %al
3471 ; AVX512F-NEXT:    jne .LBB9_9
3472 ; AVX512F-NEXT:  .LBB9_10: # %else8
3473 ; AVX512F-NEXT:    testb $32, %al
3474 ; AVX512F-NEXT:    jne .LBB9_11
3475 ; AVX512F-NEXT:  .LBB9_12: # %else10
3476 ; AVX512F-NEXT:    testb $64, %al
3477 ; AVX512F-NEXT:    jne .LBB9_13
3478 ; AVX512F-NEXT:  .LBB9_14: # %else12
3479 ; AVX512F-NEXT:    testb $-128, %al
3480 ; AVX512F-NEXT:    je .LBB9_16
3481 ; AVX512F-NEXT:  .LBB9_15: # %cond.store13
3482 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3483 ; AVX512F-NEXT:  .LBB9_16: # %else14
3484 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
3485 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
3486 ; AVX512F-NEXT:    jne .LBB9_17
3487 ; AVX512F-NEXT:  # %bb.18: # %else16
3488 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
3489 ; AVX512F-NEXT:    jne .LBB9_19
3490 ; AVX512F-NEXT:  .LBB9_20: # %else18
3491 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
3492 ; AVX512F-NEXT:    jne .LBB9_21
3493 ; AVX512F-NEXT:  .LBB9_22: # %else20
3494 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
3495 ; AVX512F-NEXT:    jne .LBB9_23
3496 ; AVX512F-NEXT:  .LBB9_24: # %else22
3497 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
3498 ; AVX512F-NEXT:    jne .LBB9_25
3499 ; AVX512F-NEXT:  .LBB9_26: # %else24
3500 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
3501 ; AVX512F-NEXT:    jne .LBB9_27
3502 ; AVX512F-NEXT:  .LBB9_28: # %else26
3503 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
3504 ; AVX512F-NEXT:    jne .LBB9_29
3505 ; AVX512F-NEXT:  .LBB9_30: # %else28
3506 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
3507 ; AVX512F-NEXT:    jne .LBB9_31
3508 ; AVX512F-NEXT:  .LBB9_32: # %else30
3509 ; AVX512F-NEXT:    vzeroupper
3510 ; AVX512F-NEXT:    retq
3511 ; AVX512F-NEXT:  .LBB9_1: # %cond.store
3512 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
3513 ; AVX512F-NEXT:    testb $2, %al
3514 ; AVX512F-NEXT:    je .LBB9_4
3515 ; AVX512F-NEXT:  .LBB9_3: # %cond.store1
3516 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3517 ; AVX512F-NEXT:    testb $4, %al
3518 ; AVX512F-NEXT:    je .LBB9_6
3519 ; AVX512F-NEXT:  .LBB9_5: # %cond.store3
3520 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3521 ; AVX512F-NEXT:    testb $8, %al
3522 ; AVX512F-NEXT:    je .LBB9_8
3523 ; AVX512F-NEXT:  .LBB9_7: # %cond.store5
3524 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3525 ; AVX512F-NEXT:    testb $16, %al
3526 ; AVX512F-NEXT:    je .LBB9_10
3527 ; AVX512F-NEXT:  .LBB9_9: # %cond.store7
3528 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3529 ; AVX512F-NEXT:    testb $32, %al
3530 ; AVX512F-NEXT:    je .LBB9_12
3531 ; AVX512F-NEXT:  .LBB9_11: # %cond.store9
3532 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3533 ; AVX512F-NEXT:    testb $64, %al
3534 ; AVX512F-NEXT:    je .LBB9_14
3535 ; AVX512F-NEXT:  .LBB9_13: # %cond.store11
3536 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3537 ; AVX512F-NEXT:    testb $-128, %al
3538 ; AVX512F-NEXT:    jne .LBB9_15
3539 ; AVX512F-NEXT:    jmp .LBB9_16
3540 ; AVX512F-NEXT:  .LBB9_17: # %cond.store15
3541 ; AVX512F-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
3542 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
3543 ; AVX512F-NEXT:    je .LBB9_20
3544 ; AVX512F-NEXT:  .LBB9_19: # %cond.store17
3545 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
3546 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
3547 ; AVX512F-NEXT:    je .LBB9_22
3548 ; AVX512F-NEXT:  .LBB9_21: # %cond.store19
3549 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
3550 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
3551 ; AVX512F-NEXT:    je .LBB9_24
3552 ; AVX512F-NEXT:  .LBB9_23: # %cond.store21
3553 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
3554 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
3555 ; AVX512F-NEXT:    je .LBB9_26
3556 ; AVX512F-NEXT:  .LBB9_25: # %cond.store23
3557 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
3558 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
3559 ; AVX512F-NEXT:    je .LBB9_28
3560 ; AVX512F-NEXT:  .LBB9_27: # %cond.store25
3561 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
3562 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
3563 ; AVX512F-NEXT:    je .LBB9_30
3564 ; AVX512F-NEXT:  .LBB9_29: # %cond.store27
3565 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
3566 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
3567 ; AVX512F-NEXT:    je .LBB9_32
3568 ; AVX512F-NEXT:  .LBB9_31: # %cond.store29
3569 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
3570 ; AVX512F-NEXT:    vzeroupper
3571 ; AVX512F-NEXT:    retq
3573 ; AVX512BW-LABEL: truncstore_v16i32_v16i16:
3574 ; AVX512BW:       # %bb.0:
3575 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
3576 ; AVX512BW-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3577 ; AVX512BW-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3578 ; AVX512BW-NEXT:    vpmovdw %zmm0, (%rdi) {%k1}
3579 ; AVX512BW-NEXT:    vzeroupper
3580 ; AVX512BW-NEXT:    retq
3582 ; AVX512BWVL-LABEL: truncstore_v16i32_v16i16:
3583 ; AVX512BWVL:       # %bb.0:
3584 ; AVX512BWVL-NEXT:    vptestmd %zmm1, %zmm1, %k1
3585 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3586 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3587 ; AVX512BWVL-NEXT:    vpmovdw %zmm0, (%rdi) {%k1}
3588 ; AVX512BWVL-NEXT:    vzeroupper
3589 ; AVX512BWVL-NEXT:    retq
3590   %a = icmp ne <16 x i32> %mask, zeroinitializer
3591   %b = icmp slt <16 x i32> %x, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
3592   %c = select <16 x i1> %b, <16 x i32> %x, <16 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
3593   %d = icmp sgt <16 x i32> %c, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
3594   %e = select <16 x i1> %d, <16 x i32> %c, <16 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
3595   %f = trunc <16 x i32> %e to <16 x i16>
3596   call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> %f, <16 x i16>* %p, i32 1, <16 x i1> %a)
3597   ret void
3600 define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %mask) {
3601 ; SSE2-LABEL: truncstore_v16i32_v16i8:
3602 ; SSE2:       # %bb.0:
3603 ; SSE2-NEXT:    pxor %xmm8, %xmm8
3604 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
3605 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
3606 ; SSE2-NEXT:    packsswb %xmm2, %xmm0
3607 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
3608 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
3609 ; SSE2-NEXT:    pxor %xmm1, %xmm7
3610 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
3611 ; SSE2-NEXT:    pxor %xmm1, %xmm6
3612 ; SSE2-NEXT:    packssdw %xmm7, %xmm6
3613 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
3614 ; SSE2-NEXT:    pxor %xmm1, %xmm5
3615 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
3616 ; SSE2-NEXT:    pxor %xmm1, %xmm4
3617 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
3618 ; SSE2-NEXT:    packsswb %xmm6, %xmm4
3619 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
3620 ; SSE2-NEXT:    testb $1, %al
3621 ; SSE2-NEXT:    movd %xmm0, %ecx
3622 ; SSE2-NEXT:    jne .LBB10_1
3623 ; SSE2-NEXT:  # %bb.2: # %else
3624 ; SSE2-NEXT:    testb $2, %al
3625 ; SSE2-NEXT:    jne .LBB10_3
3626 ; SSE2-NEXT:  .LBB10_4: # %else2
3627 ; SSE2-NEXT:    testb $4, %al
3628 ; SSE2-NEXT:    jne .LBB10_5
3629 ; SSE2-NEXT:  .LBB10_6: # %else4
3630 ; SSE2-NEXT:    testb $8, %al
3631 ; SSE2-NEXT:    je .LBB10_8
3632 ; SSE2-NEXT:  .LBB10_7: # %cond.store5
3633 ; SSE2-NEXT:    shrl $24, %ecx
3634 ; SSE2-NEXT:    movb %cl, 3(%rdi)
3635 ; SSE2-NEXT:  .LBB10_8: # %else6
3636 ; SSE2-NEXT:    testb $16, %al
3637 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
3638 ; SSE2-NEXT:    je .LBB10_10
3639 ; SSE2-NEXT:  # %bb.9: # %cond.store7
3640 ; SSE2-NEXT:    movb %cl, 4(%rdi)
3641 ; SSE2-NEXT:  .LBB10_10: # %else8
3642 ; SSE2-NEXT:    testb $32, %al
3643 ; SSE2-NEXT:    je .LBB10_12
3644 ; SSE2-NEXT:  # %bb.11: # %cond.store9
3645 ; SSE2-NEXT:    movb %ch, 5(%rdi)
3646 ; SSE2-NEXT:  .LBB10_12: # %else10
3647 ; SSE2-NEXT:    testb $64, %al
3648 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
3649 ; SSE2-NEXT:    je .LBB10_14
3650 ; SSE2-NEXT:  # %bb.13: # %cond.store11
3651 ; SSE2-NEXT:    movb %cl, 6(%rdi)
3652 ; SSE2-NEXT:  .LBB10_14: # %else12
3653 ; SSE2-NEXT:    testb $-128, %al
3654 ; SSE2-NEXT:    je .LBB10_16
3655 ; SSE2-NEXT:  # %bb.15: # %cond.store13
3656 ; SSE2-NEXT:    movb %ch, 7(%rdi)
3657 ; SSE2-NEXT:  .LBB10_16: # %else14
3658 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
3659 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
3660 ; SSE2-NEXT:    je .LBB10_18
3661 ; SSE2-NEXT:  # %bb.17: # %cond.store15
3662 ; SSE2-NEXT:    movb %cl, 8(%rdi)
3663 ; SSE2-NEXT:  .LBB10_18: # %else16
3664 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
3665 ; SSE2-NEXT:    je .LBB10_20
3666 ; SSE2-NEXT:  # %bb.19: # %cond.store17
3667 ; SSE2-NEXT:    movb %ch, 9(%rdi)
3668 ; SSE2-NEXT:  .LBB10_20: # %else18
3669 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
3670 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
3671 ; SSE2-NEXT:    je .LBB10_22
3672 ; SSE2-NEXT:  # %bb.21: # %cond.store19
3673 ; SSE2-NEXT:    movb %cl, 10(%rdi)
3674 ; SSE2-NEXT:  .LBB10_22: # %else20
3675 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
3676 ; SSE2-NEXT:    je .LBB10_24
3677 ; SSE2-NEXT:  # %bb.23: # %cond.store21
3678 ; SSE2-NEXT:    movb %ch, 11(%rdi)
3679 ; SSE2-NEXT:  .LBB10_24: # %else22
3680 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
3681 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
3682 ; SSE2-NEXT:    je .LBB10_26
3683 ; SSE2-NEXT:  # %bb.25: # %cond.store23
3684 ; SSE2-NEXT:    movb %cl, 12(%rdi)
3685 ; SSE2-NEXT:  .LBB10_26: # %else24
3686 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
3687 ; SSE2-NEXT:    je .LBB10_28
3688 ; SSE2-NEXT:  # %bb.27: # %cond.store25
3689 ; SSE2-NEXT:    movb %ch, 13(%rdi)
3690 ; SSE2-NEXT:  .LBB10_28: # %else26
3691 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
3692 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
3693 ; SSE2-NEXT:    jne .LBB10_29
3694 ; SSE2-NEXT:  # %bb.30: # %else28
3695 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3696 ; SSE2-NEXT:    jne .LBB10_31
3697 ; SSE2-NEXT:  .LBB10_32: # %else30
3698 ; SSE2-NEXT:    retq
3699 ; SSE2-NEXT:  .LBB10_1: # %cond.store
3700 ; SSE2-NEXT:    movb %cl, (%rdi)
3701 ; SSE2-NEXT:    testb $2, %al
3702 ; SSE2-NEXT:    je .LBB10_4
3703 ; SSE2-NEXT:  .LBB10_3: # %cond.store1
3704 ; SSE2-NEXT:    movb %ch, 1(%rdi)
3705 ; SSE2-NEXT:    testb $4, %al
3706 ; SSE2-NEXT:    je .LBB10_6
3707 ; SSE2-NEXT:  .LBB10_5: # %cond.store3
3708 ; SSE2-NEXT:    movl %ecx, %edx
3709 ; SSE2-NEXT:    shrl $16, %edx
3710 ; SSE2-NEXT:    movb %dl, 2(%rdi)
3711 ; SSE2-NEXT:    testb $8, %al
3712 ; SSE2-NEXT:    jne .LBB10_7
3713 ; SSE2-NEXT:    jmp .LBB10_8
3714 ; SSE2-NEXT:  .LBB10_29: # %cond.store27
3715 ; SSE2-NEXT:    movb %cl, 14(%rdi)
3716 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3717 ; SSE2-NEXT:    je .LBB10_32
3718 ; SSE2-NEXT:  .LBB10_31: # %cond.store29
3719 ; SSE2-NEXT:    movb %ch, 15(%rdi)
3720 ; SSE2-NEXT:    retq
3722 ; SSE4-LABEL: truncstore_v16i32_v16i8:
3723 ; SSE4:       # %bb.0:
3724 ; SSE4-NEXT:    pxor %xmm8, %xmm8
3725 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
3726 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
3727 ; SSE4-NEXT:    packsswb %xmm2, %xmm0
3728 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm7
3729 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
3730 ; SSE4-NEXT:    pxor %xmm1, %xmm7
3731 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm6
3732 ; SSE4-NEXT:    pxor %xmm1, %xmm6
3733 ; SSE4-NEXT:    packssdw %xmm7, %xmm6
3734 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
3735 ; SSE4-NEXT:    pxor %xmm1, %xmm5
3736 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
3737 ; SSE4-NEXT:    pxor %xmm1, %xmm4
3738 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
3739 ; SSE4-NEXT:    packsswb %xmm6, %xmm4
3740 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
3741 ; SSE4-NEXT:    testb $1, %al
3742 ; SSE4-NEXT:    jne .LBB10_1
3743 ; SSE4-NEXT:  # %bb.2: # %else
3744 ; SSE4-NEXT:    testb $2, %al
3745 ; SSE4-NEXT:    jne .LBB10_3
3746 ; SSE4-NEXT:  .LBB10_4: # %else2
3747 ; SSE4-NEXT:    testb $4, %al
3748 ; SSE4-NEXT:    jne .LBB10_5
3749 ; SSE4-NEXT:  .LBB10_6: # %else4
3750 ; SSE4-NEXT:    testb $8, %al
3751 ; SSE4-NEXT:    jne .LBB10_7
3752 ; SSE4-NEXT:  .LBB10_8: # %else6
3753 ; SSE4-NEXT:    testb $16, %al
3754 ; SSE4-NEXT:    jne .LBB10_9
3755 ; SSE4-NEXT:  .LBB10_10: # %else8
3756 ; SSE4-NEXT:    testb $32, %al
3757 ; SSE4-NEXT:    jne .LBB10_11
3758 ; SSE4-NEXT:  .LBB10_12: # %else10
3759 ; SSE4-NEXT:    testb $64, %al
3760 ; SSE4-NEXT:    jne .LBB10_13
3761 ; SSE4-NEXT:  .LBB10_14: # %else12
3762 ; SSE4-NEXT:    testb $-128, %al
3763 ; SSE4-NEXT:    jne .LBB10_15
3764 ; SSE4-NEXT:  .LBB10_16: # %else14
3765 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
3766 ; SSE4-NEXT:    jne .LBB10_17
3767 ; SSE4-NEXT:  .LBB10_18: # %else16
3768 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3769 ; SSE4-NEXT:    jne .LBB10_19
3770 ; SSE4-NEXT:  .LBB10_20: # %else18
3771 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3772 ; SSE4-NEXT:    jne .LBB10_21
3773 ; SSE4-NEXT:  .LBB10_22: # %else20
3774 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3775 ; SSE4-NEXT:    jne .LBB10_23
3776 ; SSE4-NEXT:  .LBB10_24: # %else22
3777 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3778 ; SSE4-NEXT:    jne .LBB10_25
3779 ; SSE4-NEXT:  .LBB10_26: # %else24
3780 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3781 ; SSE4-NEXT:    jne .LBB10_27
3782 ; SSE4-NEXT:  .LBB10_28: # %else26
3783 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3784 ; SSE4-NEXT:    jne .LBB10_29
3785 ; SSE4-NEXT:  .LBB10_30: # %else28
3786 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3787 ; SSE4-NEXT:    jne .LBB10_31
3788 ; SSE4-NEXT:  .LBB10_32: # %else30
3789 ; SSE4-NEXT:    retq
3790 ; SSE4-NEXT:  .LBB10_1: # %cond.store
3791 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
3792 ; SSE4-NEXT:    testb $2, %al
3793 ; SSE4-NEXT:    je .LBB10_4
3794 ; SSE4-NEXT:  .LBB10_3: # %cond.store1
3795 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
3796 ; SSE4-NEXT:    testb $4, %al
3797 ; SSE4-NEXT:    je .LBB10_6
3798 ; SSE4-NEXT:  .LBB10_5: # %cond.store3
3799 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
3800 ; SSE4-NEXT:    testb $8, %al
3801 ; SSE4-NEXT:    je .LBB10_8
3802 ; SSE4-NEXT:  .LBB10_7: # %cond.store5
3803 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
3804 ; SSE4-NEXT:    testb $16, %al
3805 ; SSE4-NEXT:    je .LBB10_10
3806 ; SSE4-NEXT:  .LBB10_9: # %cond.store7
3807 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
3808 ; SSE4-NEXT:    testb $32, %al
3809 ; SSE4-NEXT:    je .LBB10_12
3810 ; SSE4-NEXT:  .LBB10_11: # %cond.store9
3811 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
3812 ; SSE4-NEXT:    testb $64, %al
3813 ; SSE4-NEXT:    je .LBB10_14
3814 ; SSE4-NEXT:  .LBB10_13: # %cond.store11
3815 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
3816 ; SSE4-NEXT:    testb $-128, %al
3817 ; SSE4-NEXT:    je .LBB10_16
3818 ; SSE4-NEXT:  .LBB10_15: # %cond.store13
3819 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
3820 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
3821 ; SSE4-NEXT:    je .LBB10_18
3822 ; SSE4-NEXT:  .LBB10_17: # %cond.store15
3823 ; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
3824 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3825 ; SSE4-NEXT:    je .LBB10_20
3826 ; SSE4-NEXT:  .LBB10_19: # %cond.store17
3827 ; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
3828 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3829 ; SSE4-NEXT:    je .LBB10_22
3830 ; SSE4-NEXT:  .LBB10_21: # %cond.store19
3831 ; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
3832 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3833 ; SSE4-NEXT:    je .LBB10_24
3834 ; SSE4-NEXT:  .LBB10_23: # %cond.store21
3835 ; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
3836 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3837 ; SSE4-NEXT:    je .LBB10_26
3838 ; SSE4-NEXT:  .LBB10_25: # %cond.store23
3839 ; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
3840 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3841 ; SSE4-NEXT:    je .LBB10_28
3842 ; SSE4-NEXT:  .LBB10_27: # %cond.store25
3843 ; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
3844 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3845 ; SSE4-NEXT:    je .LBB10_30
3846 ; SSE4-NEXT:  .LBB10_29: # %cond.store27
3847 ; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
3848 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3849 ; SSE4-NEXT:    je .LBB10_32
3850 ; SSE4-NEXT:  .LBB10_31: # %cond.store29
3851 ; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
3852 ; SSE4-NEXT:    retq
3854 ; AVX1-LABEL: truncstore_v16i32_v16i8:
3855 ; AVX1:       # %bb.0:
3856 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3857 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
3858 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
3859 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
3860 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3861 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
3862 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3863 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm1, %xmm1
3864 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
3865 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
3866 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3867 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3868 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm3, %xmm1
3869 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3870 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3871 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3872 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
3873 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
3874 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
3875 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm2, %xmm1
3876 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
3877 ; AVX1-NEXT:    testb $1, %al
3878 ; AVX1-NEXT:    jne .LBB10_1
3879 ; AVX1-NEXT:  # %bb.2: # %else
3880 ; AVX1-NEXT:    testb $2, %al
3881 ; AVX1-NEXT:    jne .LBB10_3
3882 ; AVX1-NEXT:  .LBB10_4: # %else2
3883 ; AVX1-NEXT:    testb $4, %al
3884 ; AVX1-NEXT:    jne .LBB10_5
3885 ; AVX1-NEXT:  .LBB10_6: # %else4
3886 ; AVX1-NEXT:    testb $8, %al
3887 ; AVX1-NEXT:    jne .LBB10_7
3888 ; AVX1-NEXT:  .LBB10_8: # %else6
3889 ; AVX1-NEXT:    testb $16, %al
3890 ; AVX1-NEXT:    jne .LBB10_9
3891 ; AVX1-NEXT:  .LBB10_10: # %else8
3892 ; AVX1-NEXT:    testb $32, %al
3893 ; AVX1-NEXT:    jne .LBB10_11
3894 ; AVX1-NEXT:  .LBB10_12: # %else10
3895 ; AVX1-NEXT:    testb $64, %al
3896 ; AVX1-NEXT:    jne .LBB10_13
3897 ; AVX1-NEXT:  .LBB10_14: # %else12
3898 ; AVX1-NEXT:    testb $-128, %al
3899 ; AVX1-NEXT:    jne .LBB10_15
3900 ; AVX1-NEXT:  .LBB10_16: # %else14
3901 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
3902 ; AVX1-NEXT:    jne .LBB10_17
3903 ; AVX1-NEXT:  .LBB10_18: # %else16
3904 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3905 ; AVX1-NEXT:    jne .LBB10_19
3906 ; AVX1-NEXT:  .LBB10_20: # %else18
3907 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3908 ; AVX1-NEXT:    jne .LBB10_21
3909 ; AVX1-NEXT:  .LBB10_22: # %else20
3910 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3911 ; AVX1-NEXT:    jne .LBB10_23
3912 ; AVX1-NEXT:  .LBB10_24: # %else22
3913 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3914 ; AVX1-NEXT:    jne .LBB10_25
3915 ; AVX1-NEXT:  .LBB10_26: # %else24
3916 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3917 ; AVX1-NEXT:    jne .LBB10_27
3918 ; AVX1-NEXT:  .LBB10_28: # %else26
3919 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3920 ; AVX1-NEXT:    jne .LBB10_29
3921 ; AVX1-NEXT:  .LBB10_30: # %else28
3922 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3923 ; AVX1-NEXT:    jne .LBB10_31
3924 ; AVX1-NEXT:  .LBB10_32: # %else30
3925 ; AVX1-NEXT:    vzeroupper
3926 ; AVX1-NEXT:    retq
3927 ; AVX1-NEXT:  .LBB10_1: # %cond.store
3928 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
3929 ; AVX1-NEXT:    testb $2, %al
3930 ; AVX1-NEXT:    je .LBB10_4
3931 ; AVX1-NEXT:  .LBB10_3: # %cond.store1
3932 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
3933 ; AVX1-NEXT:    testb $4, %al
3934 ; AVX1-NEXT:    je .LBB10_6
3935 ; AVX1-NEXT:  .LBB10_5: # %cond.store3
3936 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
3937 ; AVX1-NEXT:    testb $8, %al
3938 ; AVX1-NEXT:    je .LBB10_8
3939 ; AVX1-NEXT:  .LBB10_7: # %cond.store5
3940 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
3941 ; AVX1-NEXT:    testb $16, %al
3942 ; AVX1-NEXT:    je .LBB10_10
3943 ; AVX1-NEXT:  .LBB10_9: # %cond.store7
3944 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
3945 ; AVX1-NEXT:    testb $32, %al
3946 ; AVX1-NEXT:    je .LBB10_12
3947 ; AVX1-NEXT:  .LBB10_11: # %cond.store9
3948 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
3949 ; AVX1-NEXT:    testb $64, %al
3950 ; AVX1-NEXT:    je .LBB10_14
3951 ; AVX1-NEXT:  .LBB10_13: # %cond.store11
3952 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
3953 ; AVX1-NEXT:    testb $-128, %al
3954 ; AVX1-NEXT:    je .LBB10_16
3955 ; AVX1-NEXT:  .LBB10_15: # %cond.store13
3956 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
3957 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
3958 ; AVX1-NEXT:    je .LBB10_18
3959 ; AVX1-NEXT:  .LBB10_17: # %cond.store15
3960 ; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
3961 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3962 ; AVX1-NEXT:    je .LBB10_20
3963 ; AVX1-NEXT:  .LBB10_19: # %cond.store17
3964 ; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
3965 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3966 ; AVX1-NEXT:    je .LBB10_22
3967 ; AVX1-NEXT:  .LBB10_21: # %cond.store19
3968 ; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
3969 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3970 ; AVX1-NEXT:    je .LBB10_24
3971 ; AVX1-NEXT:  .LBB10_23: # %cond.store21
3972 ; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
3973 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3974 ; AVX1-NEXT:    je .LBB10_26
3975 ; AVX1-NEXT:  .LBB10_25: # %cond.store23
3976 ; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
3977 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3978 ; AVX1-NEXT:    je .LBB10_28
3979 ; AVX1-NEXT:  .LBB10_27: # %cond.store25
3980 ; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
3981 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3982 ; AVX1-NEXT:    je .LBB10_30
3983 ; AVX1-NEXT:  .LBB10_29: # %cond.store27
3984 ; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
3985 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3986 ; AVX1-NEXT:    je .LBB10_32
3987 ; AVX1-NEXT:  .LBB10_31: # %cond.store29
3988 ; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
3989 ; AVX1-NEXT:    vzeroupper
3990 ; AVX1-NEXT:    retq
3992 ; AVX2-LABEL: truncstore_v16i32_v16i8:
3993 ; AVX2:       # %bb.0:
3994 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3995 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
3996 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3997 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3998 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3999 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm1
4000 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
4001 ; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
4002 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
4003 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
4004 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm2, %ymm1
4005 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
4006 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
4007 ; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
4008 ; AVX2-NEXT:    vpmovmskb %xmm1, %eax
4009 ; AVX2-NEXT:    testb $1, %al
4010 ; AVX2-NEXT:    jne .LBB10_1
4011 ; AVX2-NEXT:  # %bb.2: # %else
4012 ; AVX2-NEXT:    testb $2, %al
4013 ; AVX2-NEXT:    jne .LBB10_3
4014 ; AVX2-NEXT:  .LBB10_4: # %else2
4015 ; AVX2-NEXT:    testb $4, %al
4016 ; AVX2-NEXT:    jne .LBB10_5
4017 ; AVX2-NEXT:  .LBB10_6: # %else4
4018 ; AVX2-NEXT:    testb $8, %al
4019 ; AVX2-NEXT:    jne .LBB10_7
4020 ; AVX2-NEXT:  .LBB10_8: # %else6
4021 ; AVX2-NEXT:    testb $16, %al
4022 ; AVX2-NEXT:    jne .LBB10_9
4023 ; AVX2-NEXT:  .LBB10_10: # %else8
4024 ; AVX2-NEXT:    testb $32, %al
4025 ; AVX2-NEXT:    jne .LBB10_11
4026 ; AVX2-NEXT:  .LBB10_12: # %else10
4027 ; AVX2-NEXT:    testb $64, %al
4028 ; AVX2-NEXT:    jne .LBB10_13
4029 ; AVX2-NEXT:  .LBB10_14: # %else12
4030 ; AVX2-NEXT:    testb $-128, %al
4031 ; AVX2-NEXT:    jne .LBB10_15
4032 ; AVX2-NEXT:  .LBB10_16: # %else14
4033 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
4034 ; AVX2-NEXT:    jne .LBB10_17
4035 ; AVX2-NEXT:  .LBB10_18: # %else16
4036 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
4037 ; AVX2-NEXT:    jne .LBB10_19
4038 ; AVX2-NEXT:  .LBB10_20: # %else18
4039 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
4040 ; AVX2-NEXT:    jne .LBB10_21
4041 ; AVX2-NEXT:  .LBB10_22: # %else20
4042 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
4043 ; AVX2-NEXT:    jne .LBB10_23
4044 ; AVX2-NEXT:  .LBB10_24: # %else22
4045 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
4046 ; AVX2-NEXT:    jne .LBB10_25
4047 ; AVX2-NEXT:  .LBB10_26: # %else24
4048 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
4049 ; AVX2-NEXT:    jne .LBB10_27
4050 ; AVX2-NEXT:  .LBB10_28: # %else26
4051 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
4052 ; AVX2-NEXT:    jne .LBB10_29
4053 ; AVX2-NEXT:  .LBB10_30: # %else28
4054 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
4055 ; AVX2-NEXT:    jne .LBB10_31
4056 ; AVX2-NEXT:  .LBB10_32: # %else30
4057 ; AVX2-NEXT:    vzeroupper
4058 ; AVX2-NEXT:    retq
4059 ; AVX2-NEXT:  .LBB10_1: # %cond.store
4060 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
4061 ; AVX2-NEXT:    testb $2, %al
4062 ; AVX2-NEXT:    je .LBB10_4
4063 ; AVX2-NEXT:  .LBB10_3: # %cond.store1
4064 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4065 ; AVX2-NEXT:    testb $4, %al
4066 ; AVX2-NEXT:    je .LBB10_6
4067 ; AVX2-NEXT:  .LBB10_5: # %cond.store3
4068 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4069 ; AVX2-NEXT:    testb $8, %al
4070 ; AVX2-NEXT:    je .LBB10_8
4071 ; AVX2-NEXT:  .LBB10_7: # %cond.store5
4072 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4073 ; AVX2-NEXT:    testb $16, %al
4074 ; AVX2-NEXT:    je .LBB10_10
4075 ; AVX2-NEXT:  .LBB10_9: # %cond.store7
4076 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4077 ; AVX2-NEXT:    testb $32, %al
4078 ; AVX2-NEXT:    je .LBB10_12
4079 ; AVX2-NEXT:  .LBB10_11: # %cond.store9
4080 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4081 ; AVX2-NEXT:    testb $64, %al
4082 ; AVX2-NEXT:    je .LBB10_14
4083 ; AVX2-NEXT:  .LBB10_13: # %cond.store11
4084 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4085 ; AVX2-NEXT:    testb $-128, %al
4086 ; AVX2-NEXT:    je .LBB10_16
4087 ; AVX2-NEXT:  .LBB10_15: # %cond.store13
4088 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4089 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
4090 ; AVX2-NEXT:    je .LBB10_18
4091 ; AVX2-NEXT:  .LBB10_17: # %cond.store15
4092 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
4093 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
4094 ; AVX2-NEXT:    je .LBB10_20
4095 ; AVX2-NEXT:  .LBB10_19: # %cond.store17
4096 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
4097 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
4098 ; AVX2-NEXT:    je .LBB10_22
4099 ; AVX2-NEXT:  .LBB10_21: # %cond.store19
4100 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
4101 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
4102 ; AVX2-NEXT:    je .LBB10_24
4103 ; AVX2-NEXT:  .LBB10_23: # %cond.store21
4104 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
4105 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
4106 ; AVX2-NEXT:    je .LBB10_26
4107 ; AVX2-NEXT:  .LBB10_25: # %cond.store23
4108 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
4109 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
4110 ; AVX2-NEXT:    je .LBB10_28
4111 ; AVX2-NEXT:  .LBB10_27: # %cond.store25
4112 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
4113 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
4114 ; AVX2-NEXT:    je .LBB10_30
4115 ; AVX2-NEXT:  .LBB10_29: # %cond.store27
4116 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
4117 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
4118 ; AVX2-NEXT:    je .LBB10_32
4119 ; AVX2-NEXT:  .LBB10_31: # %cond.store29
4120 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
4121 ; AVX2-NEXT:    vzeroupper
4122 ; AVX2-NEXT:    retq
4124 ; AVX512F-LABEL: truncstore_v16i32_v16i8:
4125 ; AVX512F:       # %bb.0:
4126 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4127 ; AVX512F-NEXT:    vpmovsdb %zmm0, %xmm0
4128 ; AVX512F-NEXT:    kmovw %k0, %eax
4129 ; AVX512F-NEXT:    testb $1, %al
4130 ; AVX512F-NEXT:    jne .LBB10_1
4131 ; AVX512F-NEXT:  # %bb.2: # %else
4132 ; AVX512F-NEXT:    testb $2, %al
4133 ; AVX512F-NEXT:    jne .LBB10_3
4134 ; AVX512F-NEXT:  .LBB10_4: # %else2
4135 ; AVX512F-NEXT:    testb $4, %al
4136 ; AVX512F-NEXT:    jne .LBB10_5
4137 ; AVX512F-NEXT:  .LBB10_6: # %else4
4138 ; AVX512F-NEXT:    testb $8, %al
4139 ; AVX512F-NEXT:    jne .LBB10_7
4140 ; AVX512F-NEXT:  .LBB10_8: # %else6
4141 ; AVX512F-NEXT:    testb $16, %al
4142 ; AVX512F-NEXT:    jne .LBB10_9
4143 ; AVX512F-NEXT:  .LBB10_10: # %else8
4144 ; AVX512F-NEXT:    testb $32, %al
4145 ; AVX512F-NEXT:    jne .LBB10_11
4146 ; AVX512F-NEXT:  .LBB10_12: # %else10
4147 ; AVX512F-NEXT:    testb $64, %al
4148 ; AVX512F-NEXT:    jne .LBB10_13
4149 ; AVX512F-NEXT:  .LBB10_14: # %else12
4150 ; AVX512F-NEXT:    testb $-128, %al
4151 ; AVX512F-NEXT:    jne .LBB10_15
4152 ; AVX512F-NEXT:  .LBB10_16: # %else14
4153 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
4154 ; AVX512F-NEXT:    jne .LBB10_17
4155 ; AVX512F-NEXT:  .LBB10_18: # %else16
4156 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
4157 ; AVX512F-NEXT:    jne .LBB10_19
4158 ; AVX512F-NEXT:  .LBB10_20: # %else18
4159 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
4160 ; AVX512F-NEXT:    jne .LBB10_21
4161 ; AVX512F-NEXT:  .LBB10_22: # %else20
4162 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
4163 ; AVX512F-NEXT:    jne .LBB10_23
4164 ; AVX512F-NEXT:  .LBB10_24: # %else22
4165 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
4166 ; AVX512F-NEXT:    jne .LBB10_25
4167 ; AVX512F-NEXT:  .LBB10_26: # %else24
4168 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
4169 ; AVX512F-NEXT:    jne .LBB10_27
4170 ; AVX512F-NEXT:  .LBB10_28: # %else26
4171 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
4172 ; AVX512F-NEXT:    jne .LBB10_29
4173 ; AVX512F-NEXT:  .LBB10_30: # %else28
4174 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
4175 ; AVX512F-NEXT:    jne .LBB10_31
4176 ; AVX512F-NEXT:  .LBB10_32: # %else30
4177 ; AVX512F-NEXT:    vzeroupper
4178 ; AVX512F-NEXT:    retq
4179 ; AVX512F-NEXT:  .LBB10_1: # %cond.store
4180 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
4181 ; AVX512F-NEXT:    testb $2, %al
4182 ; AVX512F-NEXT:    je .LBB10_4
4183 ; AVX512F-NEXT:  .LBB10_3: # %cond.store1
4184 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4185 ; AVX512F-NEXT:    testb $4, %al
4186 ; AVX512F-NEXT:    je .LBB10_6
4187 ; AVX512F-NEXT:  .LBB10_5: # %cond.store3
4188 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4189 ; AVX512F-NEXT:    testb $8, %al
4190 ; AVX512F-NEXT:    je .LBB10_8
4191 ; AVX512F-NEXT:  .LBB10_7: # %cond.store5
4192 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4193 ; AVX512F-NEXT:    testb $16, %al
4194 ; AVX512F-NEXT:    je .LBB10_10
4195 ; AVX512F-NEXT:  .LBB10_9: # %cond.store7
4196 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4197 ; AVX512F-NEXT:    testb $32, %al
4198 ; AVX512F-NEXT:    je .LBB10_12
4199 ; AVX512F-NEXT:  .LBB10_11: # %cond.store9
4200 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4201 ; AVX512F-NEXT:    testb $64, %al
4202 ; AVX512F-NEXT:    je .LBB10_14
4203 ; AVX512F-NEXT:  .LBB10_13: # %cond.store11
4204 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4205 ; AVX512F-NEXT:    testb $-128, %al
4206 ; AVX512F-NEXT:    je .LBB10_16
4207 ; AVX512F-NEXT:  .LBB10_15: # %cond.store13
4208 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4209 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
4210 ; AVX512F-NEXT:    je .LBB10_18
4211 ; AVX512F-NEXT:  .LBB10_17: # %cond.store15
4212 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
4213 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
4214 ; AVX512F-NEXT:    je .LBB10_20
4215 ; AVX512F-NEXT:  .LBB10_19: # %cond.store17
4216 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
4217 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
4218 ; AVX512F-NEXT:    je .LBB10_22
4219 ; AVX512F-NEXT:  .LBB10_21: # %cond.store19
4220 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
4221 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
4222 ; AVX512F-NEXT:    je .LBB10_24
4223 ; AVX512F-NEXT:  .LBB10_23: # %cond.store21
4224 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
4225 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
4226 ; AVX512F-NEXT:    je .LBB10_26
4227 ; AVX512F-NEXT:  .LBB10_25: # %cond.store23
4228 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
4229 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
4230 ; AVX512F-NEXT:    je .LBB10_28
4231 ; AVX512F-NEXT:  .LBB10_27: # %cond.store25
4232 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
4233 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
4234 ; AVX512F-NEXT:    je .LBB10_30
4235 ; AVX512F-NEXT:  .LBB10_29: # %cond.store27
4236 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
4237 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
4238 ; AVX512F-NEXT:    je .LBB10_32
4239 ; AVX512F-NEXT:  .LBB10_31: # %cond.store29
4240 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
4241 ; AVX512F-NEXT:    vzeroupper
4242 ; AVX512F-NEXT:    retq
4244 ; AVX512BW-LABEL: truncstore_v16i32_v16i8:
4245 ; AVX512BW:       # %bb.0:
4246 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
4247 ; AVX512BW-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4248 ; AVX512BW-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4249 ; AVX512BW-NEXT:    vpmovdb %zmm0, (%rdi) {%k1}
4250 ; AVX512BW-NEXT:    vzeroupper
4251 ; AVX512BW-NEXT:    retq
4253 ; AVX512BWVL-LABEL: truncstore_v16i32_v16i8:
4254 ; AVX512BWVL:       # %bb.0:
4255 ; AVX512BWVL-NEXT:    vptestmd %zmm1, %zmm1, %k1
4256 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4257 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4258 ; AVX512BWVL-NEXT:    vpmovdb %zmm0, (%rdi) {%k1}
4259 ; AVX512BWVL-NEXT:    vzeroupper
4260 ; AVX512BWVL-NEXT:    retq
4261   %a = icmp ne <16 x i32> %mask, zeroinitializer
4262   %b = icmp slt <16 x i32> %x, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
4263   %c = select <16 x i1> %b, <16 x i32> %x, <16 x i32> <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
4264   %d = icmp sgt <16 x i32> %c, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
4265   %e = select <16 x i1> %d, <16 x i32> %c, <16 x i32> <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
4266   %f = trunc <16 x i32> %e to <16 x i8>
4267   call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %f, <16 x i8>* %p, i32 1, <16 x i1> %a)
4268   ret void
4271 define void @truncstore_v8i32_v8i16(<8 x i32> %x, <8 x i16>* %p, <8 x i32> %mask) {
4272 ; SSE2-LABEL: truncstore_v8i32_v8i16:
4273 ; SSE2:       # %bb.0:
4274 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4275 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
4276 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3
4277 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
4278 ; SSE2-NEXT:    pxor %xmm1, %xmm3
4279 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
4280 ; SSE2-NEXT:    pxor %xmm1, %xmm2
4281 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
4282 ; SSE2-NEXT:    packsswb %xmm0, %xmm2
4283 ; SSE2-NEXT:    pmovmskb %xmm2, %eax
4284 ; SSE2-NEXT:    testb $1, %al
4285 ; SSE2-NEXT:    jne .LBB11_1
4286 ; SSE2-NEXT:  # %bb.2: # %else
4287 ; SSE2-NEXT:    testb $2, %al
4288 ; SSE2-NEXT:    jne .LBB11_3
4289 ; SSE2-NEXT:  .LBB11_4: # %else2
4290 ; SSE2-NEXT:    testb $4, %al
4291 ; SSE2-NEXT:    jne .LBB11_5
4292 ; SSE2-NEXT:  .LBB11_6: # %else4
4293 ; SSE2-NEXT:    testb $8, %al
4294 ; SSE2-NEXT:    jne .LBB11_7
4295 ; SSE2-NEXT:  .LBB11_8: # %else6
4296 ; SSE2-NEXT:    testb $16, %al
4297 ; SSE2-NEXT:    jne .LBB11_9
4298 ; SSE2-NEXT:  .LBB11_10: # %else8
4299 ; SSE2-NEXT:    testb $32, %al
4300 ; SSE2-NEXT:    jne .LBB11_11
4301 ; SSE2-NEXT:  .LBB11_12: # %else10
4302 ; SSE2-NEXT:    testb $64, %al
4303 ; SSE2-NEXT:    jne .LBB11_13
4304 ; SSE2-NEXT:  .LBB11_14: # %else12
4305 ; SSE2-NEXT:    testb $-128, %al
4306 ; SSE2-NEXT:    jne .LBB11_15
4307 ; SSE2-NEXT:  .LBB11_16: # %else14
4308 ; SSE2-NEXT:    retq
4309 ; SSE2-NEXT:  .LBB11_1: # %cond.store
4310 ; SSE2-NEXT:    movd %xmm0, %ecx
4311 ; SSE2-NEXT:    movw %cx, (%rdi)
4312 ; SSE2-NEXT:    testb $2, %al
4313 ; SSE2-NEXT:    je .LBB11_4
4314 ; SSE2-NEXT:  .LBB11_3: # %cond.store1
4315 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
4316 ; SSE2-NEXT:    movw %cx, 2(%rdi)
4317 ; SSE2-NEXT:    testb $4, %al
4318 ; SSE2-NEXT:    je .LBB11_6
4319 ; SSE2-NEXT:  .LBB11_5: # %cond.store3
4320 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
4321 ; SSE2-NEXT:    movw %cx, 4(%rdi)
4322 ; SSE2-NEXT:    testb $8, %al
4323 ; SSE2-NEXT:    je .LBB11_8
4324 ; SSE2-NEXT:  .LBB11_7: # %cond.store5
4325 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
4326 ; SSE2-NEXT:    movw %cx, 6(%rdi)
4327 ; SSE2-NEXT:    testb $16, %al
4328 ; SSE2-NEXT:    je .LBB11_10
4329 ; SSE2-NEXT:  .LBB11_9: # %cond.store7
4330 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
4331 ; SSE2-NEXT:    movw %cx, 8(%rdi)
4332 ; SSE2-NEXT:    testb $32, %al
4333 ; SSE2-NEXT:    je .LBB11_12
4334 ; SSE2-NEXT:  .LBB11_11: # %cond.store9
4335 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
4336 ; SSE2-NEXT:    movw %cx, 10(%rdi)
4337 ; SSE2-NEXT:    testb $64, %al
4338 ; SSE2-NEXT:    je .LBB11_14
4339 ; SSE2-NEXT:  .LBB11_13: # %cond.store11
4340 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
4341 ; SSE2-NEXT:    movw %cx, 12(%rdi)
4342 ; SSE2-NEXT:    testb $-128, %al
4343 ; SSE2-NEXT:    je .LBB11_16
4344 ; SSE2-NEXT:  .LBB11_15: # %cond.store13
4345 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
4346 ; SSE2-NEXT:    movw %ax, 14(%rdi)
4347 ; SSE2-NEXT:    retq
4349 ; SSE4-LABEL: truncstore_v8i32_v8i16:
4350 ; SSE4:       # %bb.0:
4351 ; SSE4-NEXT:    pxor %xmm4, %xmm4
4352 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
4353 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3
4354 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
4355 ; SSE4-NEXT:    pxor %xmm1, %xmm3
4356 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm2
4357 ; SSE4-NEXT:    pxor %xmm1, %xmm2
4358 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
4359 ; SSE4-NEXT:    packsswb %xmm0, %xmm2
4360 ; SSE4-NEXT:    pmovmskb %xmm2, %eax
4361 ; SSE4-NEXT:    testb $1, %al
4362 ; SSE4-NEXT:    jne .LBB11_1
4363 ; SSE4-NEXT:  # %bb.2: # %else
4364 ; SSE4-NEXT:    testb $2, %al
4365 ; SSE4-NEXT:    jne .LBB11_3
4366 ; SSE4-NEXT:  .LBB11_4: # %else2
4367 ; SSE4-NEXT:    testb $4, %al
4368 ; SSE4-NEXT:    jne .LBB11_5
4369 ; SSE4-NEXT:  .LBB11_6: # %else4
4370 ; SSE4-NEXT:    testb $8, %al
4371 ; SSE4-NEXT:    jne .LBB11_7
4372 ; SSE4-NEXT:  .LBB11_8: # %else6
4373 ; SSE4-NEXT:    testb $16, %al
4374 ; SSE4-NEXT:    jne .LBB11_9
4375 ; SSE4-NEXT:  .LBB11_10: # %else8
4376 ; SSE4-NEXT:    testb $32, %al
4377 ; SSE4-NEXT:    jne .LBB11_11
4378 ; SSE4-NEXT:  .LBB11_12: # %else10
4379 ; SSE4-NEXT:    testb $64, %al
4380 ; SSE4-NEXT:    jne .LBB11_13
4381 ; SSE4-NEXT:  .LBB11_14: # %else12
4382 ; SSE4-NEXT:    testb $-128, %al
4383 ; SSE4-NEXT:    jne .LBB11_15
4384 ; SSE4-NEXT:  .LBB11_16: # %else14
4385 ; SSE4-NEXT:    retq
4386 ; SSE4-NEXT:  .LBB11_1: # %cond.store
4387 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
4388 ; SSE4-NEXT:    testb $2, %al
4389 ; SSE4-NEXT:    je .LBB11_4
4390 ; SSE4-NEXT:  .LBB11_3: # %cond.store1
4391 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
4392 ; SSE4-NEXT:    testb $4, %al
4393 ; SSE4-NEXT:    je .LBB11_6
4394 ; SSE4-NEXT:  .LBB11_5: # %cond.store3
4395 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
4396 ; SSE4-NEXT:    testb $8, %al
4397 ; SSE4-NEXT:    je .LBB11_8
4398 ; SSE4-NEXT:  .LBB11_7: # %cond.store5
4399 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
4400 ; SSE4-NEXT:    testb $16, %al
4401 ; SSE4-NEXT:    je .LBB11_10
4402 ; SSE4-NEXT:  .LBB11_9: # %cond.store7
4403 ; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
4404 ; SSE4-NEXT:    testb $32, %al
4405 ; SSE4-NEXT:    je .LBB11_12
4406 ; SSE4-NEXT:  .LBB11_11: # %cond.store9
4407 ; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
4408 ; SSE4-NEXT:    testb $64, %al
4409 ; SSE4-NEXT:    je .LBB11_14
4410 ; SSE4-NEXT:  .LBB11_13: # %cond.store11
4411 ; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
4412 ; SSE4-NEXT:    testb $-128, %al
4413 ; SSE4-NEXT:    je .LBB11_16
4414 ; SSE4-NEXT:  .LBB11_15: # %cond.store13
4415 ; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
4416 ; SSE4-NEXT:    retq
4418 ; AVX1-LABEL: truncstore_v8i32_v8i16:
4419 ; AVX1:       # %bb.0:
4420 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4421 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
4422 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4423 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
4424 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
4425 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
4426 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4427 ; AVX1-NEXT:    vmovmskps %ymm1, %eax
4428 ; AVX1-NEXT:    notl %eax
4429 ; AVX1-NEXT:    testb $1, %al
4430 ; AVX1-NEXT:    jne .LBB11_1
4431 ; AVX1-NEXT:  # %bb.2: # %else
4432 ; AVX1-NEXT:    testb $2, %al
4433 ; AVX1-NEXT:    jne .LBB11_3
4434 ; AVX1-NEXT:  .LBB11_4: # %else2
4435 ; AVX1-NEXT:    testb $4, %al
4436 ; AVX1-NEXT:    jne .LBB11_5
4437 ; AVX1-NEXT:  .LBB11_6: # %else4
4438 ; AVX1-NEXT:    testb $8, %al
4439 ; AVX1-NEXT:    jne .LBB11_7
4440 ; AVX1-NEXT:  .LBB11_8: # %else6
4441 ; AVX1-NEXT:    testb $16, %al
4442 ; AVX1-NEXT:    jne .LBB11_9
4443 ; AVX1-NEXT:  .LBB11_10: # %else8
4444 ; AVX1-NEXT:    testb $32, %al
4445 ; AVX1-NEXT:    jne .LBB11_11
4446 ; AVX1-NEXT:  .LBB11_12: # %else10
4447 ; AVX1-NEXT:    testb $64, %al
4448 ; AVX1-NEXT:    jne .LBB11_13
4449 ; AVX1-NEXT:  .LBB11_14: # %else12
4450 ; AVX1-NEXT:    testb $-128, %al
4451 ; AVX1-NEXT:    jne .LBB11_15
4452 ; AVX1-NEXT:  .LBB11_16: # %else14
4453 ; AVX1-NEXT:    vzeroupper
4454 ; AVX1-NEXT:    retq
4455 ; AVX1-NEXT:  .LBB11_1: # %cond.store
4456 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
4457 ; AVX1-NEXT:    testb $2, %al
4458 ; AVX1-NEXT:    je .LBB11_4
4459 ; AVX1-NEXT:  .LBB11_3: # %cond.store1
4460 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4461 ; AVX1-NEXT:    testb $4, %al
4462 ; AVX1-NEXT:    je .LBB11_6
4463 ; AVX1-NEXT:  .LBB11_5: # %cond.store3
4464 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4465 ; AVX1-NEXT:    testb $8, %al
4466 ; AVX1-NEXT:    je .LBB11_8
4467 ; AVX1-NEXT:  .LBB11_7: # %cond.store5
4468 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4469 ; AVX1-NEXT:    testb $16, %al
4470 ; AVX1-NEXT:    je .LBB11_10
4471 ; AVX1-NEXT:  .LBB11_9: # %cond.store7
4472 ; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
4473 ; AVX1-NEXT:    testb $32, %al
4474 ; AVX1-NEXT:    je .LBB11_12
4475 ; AVX1-NEXT:  .LBB11_11: # %cond.store9
4476 ; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
4477 ; AVX1-NEXT:    testb $64, %al
4478 ; AVX1-NEXT:    je .LBB11_14
4479 ; AVX1-NEXT:  .LBB11_13: # %cond.store11
4480 ; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
4481 ; AVX1-NEXT:    testb $-128, %al
4482 ; AVX1-NEXT:    je .LBB11_16
4483 ; AVX1-NEXT:  .LBB11_15: # %cond.store13
4484 ; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
4485 ; AVX1-NEXT:    vzeroupper
4486 ; AVX1-NEXT:    retq
4488 ; AVX2-LABEL: truncstore_v8i32_v8i16:
4489 ; AVX2:       # %bb.0:
4490 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4491 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
4492 ; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
4493 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
4494 ; AVX2-NEXT:    vmovmskps %ymm1, %eax
4495 ; AVX2-NEXT:    notl %eax
4496 ; AVX2-NEXT:    testb $1, %al
4497 ; AVX2-NEXT:    jne .LBB11_1
4498 ; AVX2-NEXT:  # %bb.2: # %else
4499 ; AVX2-NEXT:    testb $2, %al
4500 ; AVX2-NEXT:    jne .LBB11_3
4501 ; AVX2-NEXT:  .LBB11_4: # %else2
4502 ; AVX2-NEXT:    testb $4, %al
4503 ; AVX2-NEXT:    jne .LBB11_5
4504 ; AVX2-NEXT:  .LBB11_6: # %else4
4505 ; AVX2-NEXT:    testb $8, %al
4506 ; AVX2-NEXT:    jne .LBB11_7
4507 ; AVX2-NEXT:  .LBB11_8: # %else6
4508 ; AVX2-NEXT:    testb $16, %al
4509 ; AVX2-NEXT:    jne .LBB11_9
4510 ; AVX2-NEXT:  .LBB11_10: # %else8
4511 ; AVX2-NEXT:    testb $32, %al
4512 ; AVX2-NEXT:    jne .LBB11_11
4513 ; AVX2-NEXT:  .LBB11_12: # %else10
4514 ; AVX2-NEXT:    testb $64, %al
4515 ; AVX2-NEXT:    jne .LBB11_13
4516 ; AVX2-NEXT:  .LBB11_14: # %else12
4517 ; AVX2-NEXT:    testb $-128, %al
4518 ; AVX2-NEXT:    jne .LBB11_15
4519 ; AVX2-NEXT:  .LBB11_16: # %else14
4520 ; AVX2-NEXT:    vzeroupper
4521 ; AVX2-NEXT:    retq
4522 ; AVX2-NEXT:  .LBB11_1: # %cond.store
4523 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
4524 ; AVX2-NEXT:    testb $2, %al
4525 ; AVX2-NEXT:    je .LBB11_4
4526 ; AVX2-NEXT:  .LBB11_3: # %cond.store1
4527 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4528 ; AVX2-NEXT:    testb $4, %al
4529 ; AVX2-NEXT:    je .LBB11_6
4530 ; AVX2-NEXT:  .LBB11_5: # %cond.store3
4531 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4532 ; AVX2-NEXT:    testb $8, %al
4533 ; AVX2-NEXT:    je .LBB11_8
4534 ; AVX2-NEXT:  .LBB11_7: # %cond.store5
4535 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4536 ; AVX2-NEXT:    testb $16, %al
4537 ; AVX2-NEXT:    je .LBB11_10
4538 ; AVX2-NEXT:  .LBB11_9: # %cond.store7
4539 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
4540 ; AVX2-NEXT:    testb $32, %al
4541 ; AVX2-NEXT:    je .LBB11_12
4542 ; AVX2-NEXT:  .LBB11_11: # %cond.store9
4543 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
4544 ; AVX2-NEXT:    testb $64, %al
4545 ; AVX2-NEXT:    je .LBB11_14
4546 ; AVX2-NEXT:  .LBB11_13: # %cond.store11
4547 ; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
4548 ; AVX2-NEXT:    testb $-128, %al
4549 ; AVX2-NEXT:    je .LBB11_16
4550 ; AVX2-NEXT:  .LBB11_15: # %cond.store13
4551 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
4552 ; AVX2-NEXT:    vzeroupper
4553 ; AVX2-NEXT:    retq
4555 ; AVX512F-LABEL: truncstore_v8i32_v8i16:
4556 ; AVX512F:       # %bb.0:
4557 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4558 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4559 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
4560 ; AVX512F-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
4561 ; AVX512F-NEXT:    kmovw %k0, %eax
4562 ; AVX512F-NEXT:    testb $1, %al
4563 ; AVX512F-NEXT:    jne .LBB11_1
4564 ; AVX512F-NEXT:  # %bb.2: # %else
4565 ; AVX512F-NEXT:    testb $2, %al
4566 ; AVX512F-NEXT:    jne .LBB11_3
4567 ; AVX512F-NEXT:  .LBB11_4: # %else2
4568 ; AVX512F-NEXT:    testb $4, %al
4569 ; AVX512F-NEXT:    jne .LBB11_5
4570 ; AVX512F-NEXT:  .LBB11_6: # %else4
4571 ; AVX512F-NEXT:    testb $8, %al
4572 ; AVX512F-NEXT:    jne .LBB11_7
4573 ; AVX512F-NEXT:  .LBB11_8: # %else6
4574 ; AVX512F-NEXT:    testb $16, %al
4575 ; AVX512F-NEXT:    jne .LBB11_9
4576 ; AVX512F-NEXT:  .LBB11_10: # %else8
4577 ; AVX512F-NEXT:    testb $32, %al
4578 ; AVX512F-NEXT:    jne .LBB11_11
4579 ; AVX512F-NEXT:  .LBB11_12: # %else10
4580 ; AVX512F-NEXT:    testb $64, %al
4581 ; AVX512F-NEXT:    jne .LBB11_13
4582 ; AVX512F-NEXT:  .LBB11_14: # %else12
4583 ; AVX512F-NEXT:    testb $-128, %al
4584 ; AVX512F-NEXT:    jne .LBB11_15
4585 ; AVX512F-NEXT:  .LBB11_16: # %else14
4586 ; AVX512F-NEXT:    vzeroupper
4587 ; AVX512F-NEXT:    retq
4588 ; AVX512F-NEXT:  .LBB11_1: # %cond.store
4589 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
4590 ; AVX512F-NEXT:    testb $2, %al
4591 ; AVX512F-NEXT:    je .LBB11_4
4592 ; AVX512F-NEXT:  .LBB11_3: # %cond.store1
4593 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4594 ; AVX512F-NEXT:    testb $4, %al
4595 ; AVX512F-NEXT:    je .LBB11_6
4596 ; AVX512F-NEXT:  .LBB11_5: # %cond.store3
4597 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4598 ; AVX512F-NEXT:    testb $8, %al
4599 ; AVX512F-NEXT:    je .LBB11_8
4600 ; AVX512F-NEXT:  .LBB11_7: # %cond.store5
4601 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4602 ; AVX512F-NEXT:    testb $16, %al
4603 ; AVX512F-NEXT:    je .LBB11_10
4604 ; AVX512F-NEXT:  .LBB11_9: # %cond.store7
4605 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
4606 ; AVX512F-NEXT:    testb $32, %al
4607 ; AVX512F-NEXT:    je .LBB11_12
4608 ; AVX512F-NEXT:  .LBB11_11: # %cond.store9
4609 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
4610 ; AVX512F-NEXT:    testb $64, %al
4611 ; AVX512F-NEXT:    je .LBB11_14
4612 ; AVX512F-NEXT:  .LBB11_13: # %cond.store11
4613 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
4614 ; AVX512F-NEXT:    testb $-128, %al
4615 ; AVX512F-NEXT:    je .LBB11_16
4616 ; AVX512F-NEXT:  .LBB11_15: # %cond.store13
4617 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
4618 ; AVX512F-NEXT:    vzeroupper
4619 ; AVX512F-NEXT:    retq
4621 ; AVX512BW-LABEL: truncstore_v8i32_v8i16:
4622 ; AVX512BW:       # %bb.0:
4623 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4624 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
4625 ; AVX512BW-NEXT:    kshiftld $24, %k0, %k0
4626 ; AVX512BW-NEXT:    kshiftrd $24, %k0, %k1
4627 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
4628 ; AVX512BW-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
4629 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
4630 ; AVX512BW-NEXT:    vzeroupper
4631 ; AVX512BW-NEXT:    retq
4633 ; AVX512BWVL-LABEL: truncstore_v8i32_v8i16:
4634 ; AVX512BWVL:       # %bb.0:
4635 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
4636 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
4637 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
4638 ; AVX512BWVL-NEXT:    vpmovdw %ymm0, (%rdi) {%k1}
4639 ; AVX512BWVL-NEXT:    vzeroupper
4640 ; AVX512BWVL-NEXT:    retq
4641   %a = icmp ne <8 x i32> %mask, zeroinitializer
4642   %b = icmp slt <8 x i32> %x, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
4643   %c = select <8 x i1> %b, <8 x i32> %x, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
4644   %d = icmp sgt <8 x i32> %c, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
4645   %e = select <8 x i1> %d, <8 x i32> %c, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
4646   %f = trunc <8 x i32> %e to <8 x i16>
4647   call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> %f, <8 x i16>* %p, i32 1, <8 x i1> %a)
4648   ret void
4651 define void @truncstore_v8i32_v8i8(<8 x i32> %x, <8 x i8>* %p, <8 x i32> %mask) {
4652 ; SSE2-LABEL: truncstore_v8i32_v8i8:
4653 ; SSE2:       # %bb.0:
4654 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4655 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
4656 ; SSE2-NEXT:    packsswb %xmm0, %xmm0
4657 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3
4658 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
4659 ; SSE2-NEXT:    pxor %xmm1, %xmm3
4660 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
4661 ; SSE2-NEXT:    pxor %xmm1, %xmm2
4662 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
4663 ; SSE2-NEXT:    packsswb %xmm0, %xmm2
4664 ; SSE2-NEXT:    pmovmskb %xmm2, %eax
4665 ; SSE2-NEXT:    testb $1, %al
4666 ; SSE2-NEXT:    movd %xmm0, %ecx
4667 ; SSE2-NEXT:    jne .LBB12_1
4668 ; SSE2-NEXT:  # %bb.2: # %else
4669 ; SSE2-NEXT:    testb $2, %al
4670 ; SSE2-NEXT:    jne .LBB12_3
4671 ; SSE2-NEXT:  .LBB12_4: # %else2
4672 ; SSE2-NEXT:    testb $4, %al
4673 ; SSE2-NEXT:    jne .LBB12_5
4674 ; SSE2-NEXT:  .LBB12_6: # %else4
4675 ; SSE2-NEXT:    testb $8, %al
4676 ; SSE2-NEXT:    je .LBB12_8
4677 ; SSE2-NEXT:  .LBB12_7: # %cond.store5
4678 ; SSE2-NEXT:    shrl $24, %ecx
4679 ; SSE2-NEXT:    movb %cl, 3(%rdi)
4680 ; SSE2-NEXT:  .LBB12_8: # %else6
4681 ; SSE2-NEXT:    testb $16, %al
4682 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
4683 ; SSE2-NEXT:    je .LBB12_10
4684 ; SSE2-NEXT:  # %bb.9: # %cond.store7
4685 ; SSE2-NEXT:    movb %cl, 4(%rdi)
4686 ; SSE2-NEXT:  .LBB12_10: # %else8
4687 ; SSE2-NEXT:    testb $32, %al
4688 ; SSE2-NEXT:    je .LBB12_12
4689 ; SSE2-NEXT:  # %bb.11: # %cond.store9
4690 ; SSE2-NEXT:    movb %ch, 5(%rdi)
4691 ; SSE2-NEXT:  .LBB12_12: # %else10
4692 ; SSE2-NEXT:    testb $64, %al
4693 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
4694 ; SSE2-NEXT:    jne .LBB12_13
4695 ; SSE2-NEXT:  # %bb.14: # %else12
4696 ; SSE2-NEXT:    testb $-128, %al
4697 ; SSE2-NEXT:    jne .LBB12_15
4698 ; SSE2-NEXT:  .LBB12_16: # %else14
4699 ; SSE2-NEXT:    retq
4700 ; SSE2-NEXT:  .LBB12_1: # %cond.store
4701 ; SSE2-NEXT:    movb %cl, (%rdi)
4702 ; SSE2-NEXT:    testb $2, %al
4703 ; SSE2-NEXT:    je .LBB12_4
4704 ; SSE2-NEXT:  .LBB12_3: # %cond.store1
4705 ; SSE2-NEXT:    movb %ch, 1(%rdi)
4706 ; SSE2-NEXT:    testb $4, %al
4707 ; SSE2-NEXT:    je .LBB12_6
4708 ; SSE2-NEXT:  .LBB12_5: # %cond.store3
4709 ; SSE2-NEXT:    movl %ecx, %edx
4710 ; SSE2-NEXT:    shrl $16, %edx
4711 ; SSE2-NEXT:    movb %dl, 2(%rdi)
4712 ; SSE2-NEXT:    testb $8, %al
4713 ; SSE2-NEXT:    jne .LBB12_7
4714 ; SSE2-NEXT:    jmp .LBB12_8
4715 ; SSE2-NEXT:  .LBB12_13: # %cond.store11
4716 ; SSE2-NEXT:    movb %cl, 6(%rdi)
4717 ; SSE2-NEXT:    testb $-128, %al
4718 ; SSE2-NEXT:    je .LBB12_16
4719 ; SSE2-NEXT:  .LBB12_15: # %cond.store13
4720 ; SSE2-NEXT:    movb %ch, 7(%rdi)
4721 ; SSE2-NEXT:    retq
4723 ; SSE4-LABEL: truncstore_v8i32_v8i8:
4724 ; SSE4:       # %bb.0:
4725 ; SSE4-NEXT:    pxor %xmm4, %xmm4
4726 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
4727 ; SSE4-NEXT:    packsswb %xmm0, %xmm0
4728 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3
4729 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
4730 ; SSE4-NEXT:    pxor %xmm1, %xmm3
4731 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm2
4732 ; SSE4-NEXT:    pxor %xmm1, %xmm2
4733 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
4734 ; SSE4-NEXT:    packsswb %xmm0, %xmm2
4735 ; SSE4-NEXT:    pmovmskb %xmm2, %eax
4736 ; SSE4-NEXT:    testb $1, %al
4737 ; SSE4-NEXT:    jne .LBB12_1
4738 ; SSE4-NEXT:  # %bb.2: # %else
4739 ; SSE4-NEXT:    testb $2, %al
4740 ; SSE4-NEXT:    jne .LBB12_3
4741 ; SSE4-NEXT:  .LBB12_4: # %else2
4742 ; SSE4-NEXT:    testb $4, %al
4743 ; SSE4-NEXT:    jne .LBB12_5
4744 ; SSE4-NEXT:  .LBB12_6: # %else4
4745 ; SSE4-NEXT:    testb $8, %al
4746 ; SSE4-NEXT:    jne .LBB12_7
4747 ; SSE4-NEXT:  .LBB12_8: # %else6
4748 ; SSE4-NEXT:    testb $16, %al
4749 ; SSE4-NEXT:    jne .LBB12_9
4750 ; SSE4-NEXT:  .LBB12_10: # %else8
4751 ; SSE4-NEXT:    testb $32, %al
4752 ; SSE4-NEXT:    jne .LBB12_11
4753 ; SSE4-NEXT:  .LBB12_12: # %else10
4754 ; SSE4-NEXT:    testb $64, %al
4755 ; SSE4-NEXT:    jne .LBB12_13
4756 ; SSE4-NEXT:  .LBB12_14: # %else12
4757 ; SSE4-NEXT:    testb $-128, %al
4758 ; SSE4-NEXT:    jne .LBB12_15
4759 ; SSE4-NEXT:  .LBB12_16: # %else14
4760 ; SSE4-NEXT:    retq
4761 ; SSE4-NEXT:  .LBB12_1: # %cond.store
4762 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
4763 ; SSE4-NEXT:    testb $2, %al
4764 ; SSE4-NEXT:    je .LBB12_4
4765 ; SSE4-NEXT:  .LBB12_3: # %cond.store1
4766 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
4767 ; SSE4-NEXT:    testb $4, %al
4768 ; SSE4-NEXT:    je .LBB12_6
4769 ; SSE4-NEXT:  .LBB12_5: # %cond.store3
4770 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
4771 ; SSE4-NEXT:    testb $8, %al
4772 ; SSE4-NEXT:    je .LBB12_8
4773 ; SSE4-NEXT:  .LBB12_7: # %cond.store5
4774 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
4775 ; SSE4-NEXT:    testb $16, %al
4776 ; SSE4-NEXT:    je .LBB12_10
4777 ; SSE4-NEXT:  .LBB12_9: # %cond.store7
4778 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
4779 ; SSE4-NEXT:    testb $32, %al
4780 ; SSE4-NEXT:    je .LBB12_12
4781 ; SSE4-NEXT:  .LBB12_11: # %cond.store9
4782 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
4783 ; SSE4-NEXT:    testb $64, %al
4784 ; SSE4-NEXT:    je .LBB12_14
4785 ; SSE4-NEXT:  .LBB12_13: # %cond.store11
4786 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
4787 ; SSE4-NEXT:    testb $-128, %al
4788 ; SSE4-NEXT:    je .LBB12_16
4789 ; SSE4-NEXT:  .LBB12_15: # %cond.store13
4790 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
4791 ; SSE4-NEXT:    retq
4793 ; AVX1-LABEL: truncstore_v8i32_v8i8:
4794 ; AVX1:       # %bb.0:
4795 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4796 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
4797 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
4798 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4799 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
4800 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
4801 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
4802 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4803 ; AVX1-NEXT:    vmovmskps %ymm1, %eax
4804 ; AVX1-NEXT:    notl %eax
4805 ; AVX1-NEXT:    testb $1, %al
4806 ; AVX1-NEXT:    jne .LBB12_1
4807 ; AVX1-NEXT:  # %bb.2: # %else
4808 ; AVX1-NEXT:    testb $2, %al
4809 ; AVX1-NEXT:    jne .LBB12_3
4810 ; AVX1-NEXT:  .LBB12_4: # %else2
4811 ; AVX1-NEXT:    testb $4, %al
4812 ; AVX1-NEXT:    jne .LBB12_5
4813 ; AVX1-NEXT:  .LBB12_6: # %else4
4814 ; AVX1-NEXT:    testb $8, %al
4815 ; AVX1-NEXT:    jne .LBB12_7
4816 ; AVX1-NEXT:  .LBB12_8: # %else6
4817 ; AVX1-NEXT:    testb $16, %al
4818 ; AVX1-NEXT:    jne .LBB12_9
4819 ; AVX1-NEXT:  .LBB12_10: # %else8
4820 ; AVX1-NEXT:    testb $32, %al
4821 ; AVX1-NEXT:    jne .LBB12_11
4822 ; AVX1-NEXT:  .LBB12_12: # %else10
4823 ; AVX1-NEXT:    testb $64, %al
4824 ; AVX1-NEXT:    jne .LBB12_13
4825 ; AVX1-NEXT:  .LBB12_14: # %else12
4826 ; AVX1-NEXT:    testb $-128, %al
4827 ; AVX1-NEXT:    jne .LBB12_15
4828 ; AVX1-NEXT:  .LBB12_16: # %else14
4829 ; AVX1-NEXT:    vzeroupper
4830 ; AVX1-NEXT:    retq
4831 ; AVX1-NEXT:  .LBB12_1: # %cond.store
4832 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
4833 ; AVX1-NEXT:    testb $2, %al
4834 ; AVX1-NEXT:    je .LBB12_4
4835 ; AVX1-NEXT:  .LBB12_3: # %cond.store1
4836 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4837 ; AVX1-NEXT:    testb $4, %al
4838 ; AVX1-NEXT:    je .LBB12_6
4839 ; AVX1-NEXT:  .LBB12_5: # %cond.store3
4840 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4841 ; AVX1-NEXT:    testb $8, %al
4842 ; AVX1-NEXT:    je .LBB12_8
4843 ; AVX1-NEXT:  .LBB12_7: # %cond.store5
4844 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4845 ; AVX1-NEXT:    testb $16, %al
4846 ; AVX1-NEXT:    je .LBB12_10
4847 ; AVX1-NEXT:  .LBB12_9: # %cond.store7
4848 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4849 ; AVX1-NEXT:    testb $32, %al
4850 ; AVX1-NEXT:    je .LBB12_12
4851 ; AVX1-NEXT:  .LBB12_11: # %cond.store9
4852 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4853 ; AVX1-NEXT:    testb $64, %al
4854 ; AVX1-NEXT:    je .LBB12_14
4855 ; AVX1-NEXT:  .LBB12_13: # %cond.store11
4856 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4857 ; AVX1-NEXT:    testb $-128, %al
4858 ; AVX1-NEXT:    je .LBB12_16
4859 ; AVX1-NEXT:  .LBB12_15: # %cond.store13
4860 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4861 ; AVX1-NEXT:    vzeroupper
4862 ; AVX1-NEXT:    retq
4864 ; AVX2-LABEL: truncstore_v8i32_v8i8:
4865 ; AVX2:       # %bb.0:
4866 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4867 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
4868 ; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
4869 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
4870 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
4871 ; AVX2-NEXT:    vmovmskps %ymm1, %eax
4872 ; AVX2-NEXT:    notl %eax
4873 ; AVX2-NEXT:    testb $1, %al
4874 ; AVX2-NEXT:    jne .LBB12_1
4875 ; AVX2-NEXT:  # %bb.2: # %else
4876 ; AVX2-NEXT:    testb $2, %al
4877 ; AVX2-NEXT:    jne .LBB12_3
4878 ; AVX2-NEXT:  .LBB12_4: # %else2
4879 ; AVX2-NEXT:    testb $4, %al
4880 ; AVX2-NEXT:    jne .LBB12_5
4881 ; AVX2-NEXT:  .LBB12_6: # %else4
4882 ; AVX2-NEXT:    testb $8, %al
4883 ; AVX2-NEXT:    jne .LBB12_7
4884 ; AVX2-NEXT:  .LBB12_8: # %else6
4885 ; AVX2-NEXT:    testb $16, %al
4886 ; AVX2-NEXT:    jne .LBB12_9
4887 ; AVX2-NEXT:  .LBB12_10: # %else8
4888 ; AVX2-NEXT:    testb $32, %al
4889 ; AVX2-NEXT:    jne .LBB12_11
4890 ; AVX2-NEXT:  .LBB12_12: # %else10
4891 ; AVX2-NEXT:    testb $64, %al
4892 ; AVX2-NEXT:    jne .LBB12_13
4893 ; AVX2-NEXT:  .LBB12_14: # %else12
4894 ; AVX2-NEXT:    testb $-128, %al
4895 ; AVX2-NEXT:    jne .LBB12_15
4896 ; AVX2-NEXT:  .LBB12_16: # %else14
4897 ; AVX2-NEXT:    vzeroupper
4898 ; AVX2-NEXT:    retq
4899 ; AVX2-NEXT:  .LBB12_1: # %cond.store
4900 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
4901 ; AVX2-NEXT:    testb $2, %al
4902 ; AVX2-NEXT:    je .LBB12_4
4903 ; AVX2-NEXT:  .LBB12_3: # %cond.store1
4904 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4905 ; AVX2-NEXT:    testb $4, %al
4906 ; AVX2-NEXT:    je .LBB12_6
4907 ; AVX2-NEXT:  .LBB12_5: # %cond.store3
4908 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4909 ; AVX2-NEXT:    testb $8, %al
4910 ; AVX2-NEXT:    je .LBB12_8
4911 ; AVX2-NEXT:  .LBB12_7: # %cond.store5
4912 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4913 ; AVX2-NEXT:    testb $16, %al
4914 ; AVX2-NEXT:    je .LBB12_10
4915 ; AVX2-NEXT:  .LBB12_9: # %cond.store7
4916 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4917 ; AVX2-NEXT:    testb $32, %al
4918 ; AVX2-NEXT:    je .LBB12_12
4919 ; AVX2-NEXT:  .LBB12_11: # %cond.store9
4920 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4921 ; AVX2-NEXT:    testb $64, %al
4922 ; AVX2-NEXT:    je .LBB12_14
4923 ; AVX2-NEXT:  .LBB12_13: # %cond.store11
4924 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4925 ; AVX2-NEXT:    testb $-128, %al
4926 ; AVX2-NEXT:    je .LBB12_16
4927 ; AVX2-NEXT:  .LBB12_15: # %cond.store13
4928 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4929 ; AVX2-NEXT:    vzeroupper
4930 ; AVX2-NEXT:    retq
4932 ; AVX512F-LABEL: truncstore_v8i32_v8i8:
4933 ; AVX512F:       # %bb.0:
4934 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4935 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4936 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm1
4937 ; AVX512F-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
4938 ; AVX512F-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
4939 ; AVX512F-NEXT:    kmovw %k0, %eax
4940 ; AVX512F-NEXT:    testb $1, %al
4941 ; AVX512F-NEXT:    jne .LBB12_1
4942 ; AVX512F-NEXT:  # %bb.2: # %else
4943 ; AVX512F-NEXT:    testb $2, %al
4944 ; AVX512F-NEXT:    jne .LBB12_3
4945 ; AVX512F-NEXT:  .LBB12_4: # %else2
4946 ; AVX512F-NEXT:    testb $4, %al
4947 ; AVX512F-NEXT:    jne .LBB12_5
4948 ; AVX512F-NEXT:  .LBB12_6: # %else4
4949 ; AVX512F-NEXT:    testb $8, %al
4950 ; AVX512F-NEXT:    jne .LBB12_7
4951 ; AVX512F-NEXT:  .LBB12_8: # %else6
4952 ; AVX512F-NEXT:    testb $16, %al
4953 ; AVX512F-NEXT:    jne .LBB12_9
4954 ; AVX512F-NEXT:  .LBB12_10: # %else8
4955 ; AVX512F-NEXT:    testb $32, %al
4956 ; AVX512F-NEXT:    jne .LBB12_11
4957 ; AVX512F-NEXT:  .LBB12_12: # %else10
4958 ; AVX512F-NEXT:    testb $64, %al
4959 ; AVX512F-NEXT:    jne .LBB12_13
4960 ; AVX512F-NEXT:  .LBB12_14: # %else12
4961 ; AVX512F-NEXT:    testb $-128, %al
4962 ; AVX512F-NEXT:    jne .LBB12_15
4963 ; AVX512F-NEXT:  .LBB12_16: # %else14
4964 ; AVX512F-NEXT:    vzeroupper
4965 ; AVX512F-NEXT:    retq
4966 ; AVX512F-NEXT:  .LBB12_1: # %cond.store
4967 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
4968 ; AVX512F-NEXT:    testb $2, %al
4969 ; AVX512F-NEXT:    je .LBB12_4
4970 ; AVX512F-NEXT:  .LBB12_3: # %cond.store1
4971 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4972 ; AVX512F-NEXT:    testb $4, %al
4973 ; AVX512F-NEXT:    je .LBB12_6
4974 ; AVX512F-NEXT:  .LBB12_5: # %cond.store3
4975 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4976 ; AVX512F-NEXT:    testb $8, %al
4977 ; AVX512F-NEXT:    je .LBB12_8
4978 ; AVX512F-NEXT:  .LBB12_7: # %cond.store5
4979 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4980 ; AVX512F-NEXT:    testb $16, %al
4981 ; AVX512F-NEXT:    je .LBB12_10
4982 ; AVX512F-NEXT:  .LBB12_9: # %cond.store7
4983 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4984 ; AVX512F-NEXT:    testb $32, %al
4985 ; AVX512F-NEXT:    je .LBB12_12
4986 ; AVX512F-NEXT:  .LBB12_11: # %cond.store9
4987 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4988 ; AVX512F-NEXT:    testb $64, %al
4989 ; AVX512F-NEXT:    je .LBB12_14
4990 ; AVX512F-NEXT:  .LBB12_13: # %cond.store11
4991 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4992 ; AVX512F-NEXT:    testb $-128, %al
4993 ; AVX512F-NEXT:    je .LBB12_16
4994 ; AVX512F-NEXT:  .LBB12_15: # %cond.store13
4995 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4996 ; AVX512F-NEXT:    vzeroupper
4997 ; AVX512F-NEXT:    retq
4999 ; AVX512BW-LABEL: truncstore_v8i32_v8i8:
5000 ; AVX512BW:       # %bb.0:
5001 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
5002 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
5003 ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0
5004 ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1
5005 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
5006 ; AVX512BW-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
5007 ; AVX512BW-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
5008 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
5009 ; AVX512BW-NEXT:    vzeroupper
5010 ; AVX512BW-NEXT:    retq
5012 ; AVX512BWVL-LABEL: truncstore_v8i32_v8i8:
5013 ; AVX512BWVL:       # %bb.0:
5014 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
5015 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
5016 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
5017 ; AVX512BWVL-NEXT:    vpmovdb %ymm0, (%rdi) {%k1}
5018 ; AVX512BWVL-NEXT:    vzeroupper
5019 ; AVX512BWVL-NEXT:    retq
5020   %a = icmp ne <8 x i32> %mask, zeroinitializer
5021   %b = icmp slt <8 x i32> %x, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
5022   %c = select <8 x i1> %b, <8 x i32> %x, <8 x i32> <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
5023   %d = icmp sgt <8 x i32> %c, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
5024   %e = select <8 x i1> %d, <8 x i32> %c, <8 x i32> <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
5025   %f = trunc <8 x i32> %e to <8 x i8>
5026   call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %f, <8 x i8>* %p, i32 1, <8 x i1> %a)
5027   ret void
5030 define void @truncstore_v4i32_v4i16(<4 x i32> %x, <4 x i16>* %p, <4 x i32> %mask) {
5031 ; SSE2-LABEL: truncstore_v4i32_v4i16:
5032 ; SSE2:       # %bb.0:
5033 ; SSE2-NEXT:    pxor %xmm2, %xmm2
5034 ; SSE2-NEXT:    packssdw %xmm0, %xmm0
5035 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
5036 ; SSE2-NEXT:    movmskps %xmm2, %eax
5037 ; SSE2-NEXT:    xorl $15, %eax
5038 ; SSE2-NEXT:    testb $1, %al
5039 ; SSE2-NEXT:    jne .LBB13_1
5040 ; SSE2-NEXT:  # %bb.2: # %else
5041 ; SSE2-NEXT:    testb $2, %al
5042 ; SSE2-NEXT:    jne .LBB13_3
5043 ; SSE2-NEXT:  .LBB13_4: # %else2
5044 ; SSE2-NEXT:    testb $4, %al
5045 ; SSE2-NEXT:    jne .LBB13_5
5046 ; SSE2-NEXT:  .LBB13_6: # %else4
5047 ; SSE2-NEXT:    testb $8, %al
5048 ; SSE2-NEXT:    jne .LBB13_7
5049 ; SSE2-NEXT:  .LBB13_8: # %else6
5050 ; SSE2-NEXT:    retq
5051 ; SSE2-NEXT:  .LBB13_1: # %cond.store
5052 ; SSE2-NEXT:    movd %xmm0, %ecx
5053 ; SSE2-NEXT:    movw %cx, (%rdi)
5054 ; SSE2-NEXT:    testb $2, %al
5055 ; SSE2-NEXT:    je .LBB13_4
5056 ; SSE2-NEXT:  .LBB13_3: # %cond.store1
5057 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
5058 ; SSE2-NEXT:    movw %cx, 2(%rdi)
5059 ; SSE2-NEXT:    testb $4, %al
5060 ; SSE2-NEXT:    je .LBB13_6
5061 ; SSE2-NEXT:  .LBB13_5: # %cond.store3
5062 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
5063 ; SSE2-NEXT:    movw %cx, 4(%rdi)
5064 ; SSE2-NEXT:    testb $8, %al
5065 ; SSE2-NEXT:    je .LBB13_8
5066 ; SSE2-NEXT:  .LBB13_7: # %cond.store5
5067 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
5068 ; SSE2-NEXT:    movw %ax, 6(%rdi)
5069 ; SSE2-NEXT:    retq
5071 ; SSE4-LABEL: truncstore_v4i32_v4i16:
5072 ; SSE4:       # %bb.0:
5073 ; SSE4-NEXT:    pxor %xmm2, %xmm2
5074 ; SSE4-NEXT:    packssdw %xmm0, %xmm0
5075 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2
5076 ; SSE4-NEXT:    movmskps %xmm2, %eax
5077 ; SSE4-NEXT:    xorl $15, %eax
5078 ; SSE4-NEXT:    testb $1, %al
5079 ; SSE4-NEXT:    jne .LBB13_1
5080 ; SSE4-NEXT:  # %bb.2: # %else
5081 ; SSE4-NEXT:    testb $2, %al
5082 ; SSE4-NEXT:    jne .LBB13_3
5083 ; SSE4-NEXT:  .LBB13_4: # %else2
5084 ; SSE4-NEXT:    testb $4, %al
5085 ; SSE4-NEXT:    jne .LBB13_5
5086 ; SSE4-NEXT:  .LBB13_6: # %else4
5087 ; SSE4-NEXT:    testb $8, %al
5088 ; SSE4-NEXT:    jne .LBB13_7
5089 ; SSE4-NEXT:  .LBB13_8: # %else6
5090 ; SSE4-NEXT:    retq
5091 ; SSE4-NEXT:  .LBB13_1: # %cond.store
5092 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
5093 ; SSE4-NEXT:    testb $2, %al
5094 ; SSE4-NEXT:    je .LBB13_4
5095 ; SSE4-NEXT:  .LBB13_3: # %cond.store1
5096 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
5097 ; SSE4-NEXT:    testb $4, %al
5098 ; SSE4-NEXT:    je .LBB13_6
5099 ; SSE4-NEXT:  .LBB13_5: # %cond.store3
5100 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
5101 ; SSE4-NEXT:    testb $8, %al
5102 ; SSE4-NEXT:    je .LBB13_8
5103 ; SSE4-NEXT:  .LBB13_7: # %cond.store5
5104 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
5105 ; SSE4-NEXT:    retq
5107 ; AVX-LABEL: truncstore_v4i32_v4i16:
5108 ; AVX:       # %bb.0:
5109 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5110 ; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
5111 ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
5112 ; AVX-NEXT:    vmovmskps %xmm1, %eax
5113 ; AVX-NEXT:    xorl $15, %eax
5114 ; AVX-NEXT:    testb $1, %al
5115 ; AVX-NEXT:    jne .LBB13_1
5116 ; AVX-NEXT:  # %bb.2: # %else
5117 ; AVX-NEXT:    testb $2, %al
5118 ; AVX-NEXT:    jne .LBB13_3
5119 ; AVX-NEXT:  .LBB13_4: # %else2
5120 ; AVX-NEXT:    testb $4, %al
5121 ; AVX-NEXT:    jne .LBB13_5
5122 ; AVX-NEXT:  .LBB13_6: # %else4
5123 ; AVX-NEXT:    testb $8, %al
5124 ; AVX-NEXT:    jne .LBB13_7
5125 ; AVX-NEXT:  .LBB13_8: # %else6
5126 ; AVX-NEXT:    retq
5127 ; AVX-NEXT:  .LBB13_1: # %cond.store
5128 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
5129 ; AVX-NEXT:    testb $2, %al
5130 ; AVX-NEXT:    je .LBB13_4
5131 ; AVX-NEXT:  .LBB13_3: # %cond.store1
5132 ; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
5133 ; AVX-NEXT:    testb $4, %al
5134 ; AVX-NEXT:    je .LBB13_6
5135 ; AVX-NEXT:  .LBB13_5: # %cond.store3
5136 ; AVX-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
5137 ; AVX-NEXT:    testb $8, %al
5138 ; AVX-NEXT:    je .LBB13_8
5139 ; AVX-NEXT:  .LBB13_7: # %cond.store5
5140 ; AVX-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
5141 ; AVX-NEXT:    retq
5143 ; AVX512F-LABEL: truncstore_v4i32_v4i16:
5144 ; AVX512F:       # %bb.0:
5145 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5146 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
5147 ; AVX512F-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
5148 ; AVX512F-NEXT:    kmovw %k0, %eax
5149 ; AVX512F-NEXT:    testb $1, %al
5150 ; AVX512F-NEXT:    jne .LBB13_1
5151 ; AVX512F-NEXT:  # %bb.2: # %else
5152 ; AVX512F-NEXT:    testb $2, %al
5153 ; AVX512F-NEXT:    jne .LBB13_3
5154 ; AVX512F-NEXT:  .LBB13_4: # %else2
5155 ; AVX512F-NEXT:    testb $4, %al
5156 ; AVX512F-NEXT:    jne .LBB13_5
5157 ; AVX512F-NEXT:  .LBB13_6: # %else4
5158 ; AVX512F-NEXT:    testb $8, %al
5159 ; AVX512F-NEXT:    jne .LBB13_7
5160 ; AVX512F-NEXT:  .LBB13_8: # %else6
5161 ; AVX512F-NEXT:    vzeroupper
5162 ; AVX512F-NEXT:    retq
5163 ; AVX512F-NEXT:  .LBB13_1: # %cond.store
5164 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
5165 ; AVX512F-NEXT:    testb $2, %al
5166 ; AVX512F-NEXT:    je .LBB13_4
5167 ; AVX512F-NEXT:  .LBB13_3: # %cond.store1
5168 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
5169 ; AVX512F-NEXT:    testb $4, %al
5170 ; AVX512F-NEXT:    je .LBB13_6
5171 ; AVX512F-NEXT:  .LBB13_5: # %cond.store3
5172 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
5173 ; AVX512F-NEXT:    testb $8, %al
5174 ; AVX512F-NEXT:    je .LBB13_8
5175 ; AVX512F-NEXT:  .LBB13_7: # %cond.store5
5176 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
5177 ; AVX512F-NEXT:    vzeroupper
5178 ; AVX512F-NEXT:    retq
5180 ; AVX512BW-LABEL: truncstore_v4i32_v4i16:
5181 ; AVX512BW:       # %bb.0:
5182 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5183 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
5184 ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0
5185 ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1
5186 ; AVX512BW-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
5187 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
5188 ; AVX512BW-NEXT:    vzeroupper
5189 ; AVX512BW-NEXT:    retq
5191 ; AVX512BWVL-LABEL: truncstore_v4i32_v4i16:
5192 ; AVX512BWVL:       # %bb.0:
5193 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
5194 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5195 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5196 ; AVX512BWVL-NEXT:    vpmovdw %xmm0, (%rdi) {%k1}
5197 ; AVX512BWVL-NEXT:    retq
5198   %a = icmp ne <4 x i32> %mask, zeroinitializer
5199   %b = icmp slt <4 x i32> %x, <i32 32767, i32 32767, i32 32767, i32 32767>
5200   %c = select <4 x i1> %b, <4 x i32> %x, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>
5201   %d = icmp sgt <4 x i32> %c, <i32 -32768, i32 -32768, i32 -32768, i32 -32768>
5202   %e = select <4 x i1> %d, <4 x i32> %c, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>
5203   %f = trunc <4 x i32> %e to <4 x i16>
5204   call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> %f, <4 x i16>* %p, i32 1, <4 x i1> %a)
5205   ret void
5208 define void @truncstore_v4i32_v4i8(<4 x i32> %x, <4 x i8>* %p, <4 x i32> %mask) {
5209 ; SSE2-LABEL: truncstore_v4i32_v4i8:
5210 ; SSE2:       # %bb.0:
5211 ; SSE2-NEXT:    pxor %xmm2, %xmm2
5212 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [127,127,127,127]
5213 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5214 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
5215 ; SSE2-NEXT:    pand %xmm4, %xmm0
5216 ; SSE2-NEXT:    pandn %xmm3, %xmm4
5217 ; SSE2-NEXT:    por %xmm0, %xmm4
5218 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [4294967168,4294967168,4294967168,4294967168]
5219 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
5220 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
5221 ; SSE2-NEXT:    pand %xmm3, %xmm4
5222 ; SSE2-NEXT:    pandn %xmm0, %xmm3
5223 ; SSE2-NEXT:    por %xmm4, %xmm3
5224 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
5225 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
5226 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
5227 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
5228 ; SSE2-NEXT:    movmskps %xmm2, %ecx
5229 ; SSE2-NEXT:    xorl $15, %ecx
5230 ; SSE2-NEXT:    testb $1, %cl
5231 ; SSE2-NEXT:    movd %xmm3, %eax
5232 ; SSE2-NEXT:    jne .LBB14_1
5233 ; SSE2-NEXT:  # %bb.2: # %else
5234 ; SSE2-NEXT:    testb $2, %cl
5235 ; SSE2-NEXT:    jne .LBB14_3
5236 ; SSE2-NEXT:  .LBB14_4: # %else2
5237 ; SSE2-NEXT:    testb $4, %cl
5238 ; SSE2-NEXT:    jne .LBB14_5
5239 ; SSE2-NEXT:  .LBB14_6: # %else4
5240 ; SSE2-NEXT:    testb $8, %cl
5241 ; SSE2-NEXT:    jne .LBB14_7
5242 ; SSE2-NEXT:  .LBB14_8: # %else6
5243 ; SSE2-NEXT:    retq
5244 ; SSE2-NEXT:  .LBB14_1: # %cond.store
5245 ; SSE2-NEXT:    movb %al, (%rdi)
5246 ; SSE2-NEXT:    testb $2, %cl
5247 ; SSE2-NEXT:    je .LBB14_4
5248 ; SSE2-NEXT:  .LBB14_3: # %cond.store1
5249 ; SSE2-NEXT:    movb %ah, 1(%rdi)
5250 ; SSE2-NEXT:    testb $4, %cl
5251 ; SSE2-NEXT:    je .LBB14_6
5252 ; SSE2-NEXT:  .LBB14_5: # %cond.store3
5253 ; SSE2-NEXT:    movl %eax, %edx
5254 ; SSE2-NEXT:    shrl $16, %edx
5255 ; SSE2-NEXT:    movb %dl, 2(%rdi)
5256 ; SSE2-NEXT:    testb $8, %cl
5257 ; SSE2-NEXT:    je .LBB14_8
5258 ; SSE2-NEXT:  .LBB14_7: # %cond.store5
5259 ; SSE2-NEXT:    shrl $24, %eax
5260 ; SSE2-NEXT:    movb %al, 3(%rdi)
5261 ; SSE2-NEXT:    retq
5263 ; SSE4-LABEL: truncstore_v4i32_v4i8:
5264 ; SSE4:       # %bb.0:
5265 ; SSE4-NEXT:    pxor %xmm2, %xmm2
5266 ; SSE4-NEXT:    pminsd {{.*}}(%rip), %xmm0
5267 ; SSE4-NEXT:    pmaxsd {{.*}}(%rip), %xmm0
5268 ; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5269 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2
5270 ; SSE4-NEXT:    movmskps %xmm2, %eax
5271 ; SSE4-NEXT:    xorl $15, %eax
5272 ; SSE4-NEXT:    testb $1, %al
5273 ; SSE4-NEXT:    jne .LBB14_1
5274 ; SSE4-NEXT:  # %bb.2: # %else
5275 ; SSE4-NEXT:    testb $2, %al
5276 ; SSE4-NEXT:    jne .LBB14_3
5277 ; SSE4-NEXT:  .LBB14_4: # %else2
5278 ; SSE4-NEXT:    testb $4, %al
5279 ; SSE4-NEXT:    jne .LBB14_5
5280 ; SSE4-NEXT:  .LBB14_6: # %else4
5281 ; SSE4-NEXT:    testb $8, %al
5282 ; SSE4-NEXT:    jne .LBB14_7
5283 ; SSE4-NEXT:  .LBB14_8: # %else6
5284 ; SSE4-NEXT:    retq
5285 ; SSE4-NEXT:  .LBB14_1: # %cond.store
5286 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
5287 ; SSE4-NEXT:    testb $2, %al
5288 ; SSE4-NEXT:    je .LBB14_4
5289 ; SSE4-NEXT:  .LBB14_3: # %cond.store1
5290 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
5291 ; SSE4-NEXT:    testb $4, %al
5292 ; SSE4-NEXT:    je .LBB14_6
5293 ; SSE4-NEXT:  .LBB14_5: # %cond.store3
5294 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
5295 ; SSE4-NEXT:    testb $8, %al
5296 ; SSE4-NEXT:    je .LBB14_8
5297 ; SSE4-NEXT:  .LBB14_7: # %cond.store5
5298 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
5299 ; SSE4-NEXT:    retq
5301 ; AVX1-LABEL: truncstore_v4i32_v4i8:
5302 ; AVX1:       # %bb.0:
5303 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5304 ; AVX1-NEXT:    vpminsd {{.*}}(%rip), %xmm0, %xmm0
5305 ; AVX1-NEXT:    vpmaxsd {{.*}}(%rip), %xmm0, %xmm0
5306 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5307 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
5308 ; AVX1-NEXT:    vmovmskps %xmm1, %eax
5309 ; AVX1-NEXT:    xorl $15, %eax
5310 ; AVX1-NEXT:    testb $1, %al
5311 ; AVX1-NEXT:    jne .LBB14_1
5312 ; AVX1-NEXT:  # %bb.2: # %else
5313 ; AVX1-NEXT:    testb $2, %al
5314 ; AVX1-NEXT:    jne .LBB14_3
5315 ; AVX1-NEXT:  .LBB14_4: # %else2
5316 ; AVX1-NEXT:    testb $4, %al
5317 ; AVX1-NEXT:    jne .LBB14_5
5318 ; AVX1-NEXT:  .LBB14_6: # %else4
5319 ; AVX1-NEXT:    testb $8, %al
5320 ; AVX1-NEXT:    jne .LBB14_7
5321 ; AVX1-NEXT:  .LBB14_8: # %else6
5322 ; AVX1-NEXT:    retq
5323 ; AVX1-NEXT:  .LBB14_1: # %cond.store
5324 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
5325 ; AVX1-NEXT:    testb $2, %al
5326 ; AVX1-NEXT:    je .LBB14_4
5327 ; AVX1-NEXT:  .LBB14_3: # %cond.store1
5328 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5329 ; AVX1-NEXT:    testb $4, %al
5330 ; AVX1-NEXT:    je .LBB14_6
5331 ; AVX1-NEXT:  .LBB14_5: # %cond.store3
5332 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5333 ; AVX1-NEXT:    testb $8, %al
5334 ; AVX1-NEXT:    je .LBB14_8
5335 ; AVX1-NEXT:  .LBB14_7: # %cond.store5
5336 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5337 ; AVX1-NEXT:    retq
5339 ; AVX2-LABEL: truncstore_v4i32_v4i8:
5340 ; AVX2:       # %bb.0:
5341 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5342 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [127,127,127,127]
5343 ; AVX2-NEXT:    vpminsd %xmm3, %xmm0, %xmm0
5344 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [4294967168,4294967168,4294967168,4294967168]
5345 ; AVX2-NEXT:    vpmaxsd %xmm3, %xmm0, %xmm0
5346 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5347 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
5348 ; AVX2-NEXT:    vmovmskps %xmm1, %eax
5349 ; AVX2-NEXT:    xorl $15, %eax
5350 ; AVX2-NEXT:    testb $1, %al
5351 ; AVX2-NEXT:    jne .LBB14_1
5352 ; AVX2-NEXT:  # %bb.2: # %else
5353 ; AVX2-NEXT:    testb $2, %al
5354 ; AVX2-NEXT:    jne .LBB14_3
5355 ; AVX2-NEXT:  .LBB14_4: # %else2
5356 ; AVX2-NEXT:    testb $4, %al
5357 ; AVX2-NEXT:    jne .LBB14_5
5358 ; AVX2-NEXT:  .LBB14_6: # %else4
5359 ; AVX2-NEXT:    testb $8, %al
5360 ; AVX2-NEXT:    jne .LBB14_7
5361 ; AVX2-NEXT:  .LBB14_8: # %else6
5362 ; AVX2-NEXT:    retq
5363 ; AVX2-NEXT:  .LBB14_1: # %cond.store
5364 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
5365 ; AVX2-NEXT:    testb $2, %al
5366 ; AVX2-NEXT:    je .LBB14_4
5367 ; AVX2-NEXT:  .LBB14_3: # %cond.store1
5368 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5369 ; AVX2-NEXT:    testb $4, %al
5370 ; AVX2-NEXT:    je .LBB14_6
5371 ; AVX2-NEXT:  .LBB14_5: # %cond.store3
5372 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5373 ; AVX2-NEXT:    testb $8, %al
5374 ; AVX2-NEXT:    je .LBB14_8
5375 ; AVX2-NEXT:  .LBB14_7: # %cond.store5
5376 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5377 ; AVX2-NEXT:    retq
5379 ; AVX512F-LABEL: truncstore_v4i32_v4i8:
5380 ; AVX512F:       # %bb.0:
5381 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5382 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5383 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
5384 ; AVX512F-NEXT:    vpmovsdb %zmm0, %xmm0
5385 ; AVX512F-NEXT:    kmovw %k0, %eax
5386 ; AVX512F-NEXT:    testb $1, %al
5387 ; AVX512F-NEXT:    jne .LBB14_1
5388 ; AVX512F-NEXT:  # %bb.2: # %else
5389 ; AVX512F-NEXT:    testb $2, %al
5390 ; AVX512F-NEXT:    jne .LBB14_3
5391 ; AVX512F-NEXT:  .LBB14_4: # %else2
5392 ; AVX512F-NEXT:    testb $4, %al
5393 ; AVX512F-NEXT:    jne .LBB14_5
5394 ; AVX512F-NEXT:  .LBB14_6: # %else4
5395 ; AVX512F-NEXT:    testb $8, %al
5396 ; AVX512F-NEXT:    jne .LBB14_7
5397 ; AVX512F-NEXT:  .LBB14_8: # %else6
5398 ; AVX512F-NEXT:    vzeroupper
5399 ; AVX512F-NEXT:    retq
5400 ; AVX512F-NEXT:  .LBB14_1: # %cond.store
5401 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
5402 ; AVX512F-NEXT:    testb $2, %al
5403 ; AVX512F-NEXT:    je .LBB14_4
5404 ; AVX512F-NEXT:  .LBB14_3: # %cond.store1
5405 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5406 ; AVX512F-NEXT:    testb $4, %al
5407 ; AVX512F-NEXT:    je .LBB14_6
5408 ; AVX512F-NEXT:  .LBB14_5: # %cond.store3
5409 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5410 ; AVX512F-NEXT:    testb $8, %al
5411 ; AVX512F-NEXT:    je .LBB14_8
5412 ; AVX512F-NEXT:  .LBB14_7: # %cond.store5
5413 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5414 ; AVX512F-NEXT:    vzeroupper
5415 ; AVX512F-NEXT:    retq
5417 ; AVX512BW-LABEL: truncstore_v4i32_v4i8:
5418 ; AVX512BW:       # %bb.0:
5419 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5420 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5421 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
5422 ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0
5423 ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1
5424 ; AVX512BW-NEXT:    vpmovsdb %zmm0, %xmm0
5425 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
5426 ; AVX512BW-NEXT:    vzeroupper
5427 ; AVX512BW-NEXT:    retq
5429 ; AVX512BWVL-LABEL: truncstore_v4i32_v4i8:
5430 ; AVX512BWVL:       # %bb.0:
5431 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
5432 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5433 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5434 ; AVX512BWVL-NEXT:    vpmovdb %xmm0, (%rdi) {%k1}
5435 ; AVX512BWVL-NEXT:    retq
5436   %a = icmp ne <4 x i32> %mask, zeroinitializer
5437   %b = icmp slt <4 x i32> %x, <i32 127, i32 127, i32 127, i32 127>
5438   %c = select <4 x i1> %b, <4 x i32> %x, <4 x i32> <i32 127, i32 127, i32 127, i32 127>
5439   %d = icmp sgt <4 x i32> %c, <i32 -128, i32 -128, i32 -128, i32 -128>
5440   %e = select <4 x i1> %d, <4 x i32> %c, <4 x i32> <i32 -128, i32 -128, i32 -128, i32 -128>
5441   %f = trunc <4 x i32> %e to <4 x i8>
5442   call void @llvm.masked.store.v4i8.p0v4i8(<4 x i8> %f, <4 x i8>* %p, i32 1, <4 x i1> %a)
5443   ret void
5446 define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %mask) {
5447 ; SSE2-LABEL: truncstore_v32i16_v32i8:
5448 ; SSE2:       # %bb.0:
5449 ; SSE2-NEXT:    pxor %xmm6, %xmm6
5450 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
5451 ; SSE2-NEXT:    pcmpeqb %xmm6, %xmm4
5452 ; SSE2-NEXT:    pmovmskb %xmm4, %ecx
5453 ; SSE2-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
5454 ; SSE2-NEXT:    pcmpeqb %xmm6, %xmm5
5455 ; SSE2-NEXT:    pmovmskb %xmm5, %eax
5456 ; SSE2-NEXT:    notl %eax
5457 ; SSE2-NEXT:    shll $16, %eax
5458 ; SSE2-NEXT:    orl %ecx, %eax
5459 ; SSE2-NEXT:    testb $1, %al
5460 ; SSE2-NEXT:    movd %xmm0, %ecx
5461 ; SSE2-NEXT:    jne .LBB15_1
5462 ; SSE2-NEXT:  # %bb.2: # %else
5463 ; SSE2-NEXT:    testb $2, %al
5464 ; SSE2-NEXT:    jne .LBB15_3
5465 ; SSE2-NEXT:  .LBB15_4: # %else2
5466 ; SSE2-NEXT:    testb $4, %al
5467 ; SSE2-NEXT:    jne .LBB15_5
5468 ; SSE2-NEXT:  .LBB15_6: # %else4
5469 ; SSE2-NEXT:    testb $8, %al
5470 ; SSE2-NEXT:    je .LBB15_8
5471 ; SSE2-NEXT:  .LBB15_7: # %cond.store5
5472 ; SSE2-NEXT:    shrl $24, %ecx
5473 ; SSE2-NEXT:    movb %cl, 3(%rdi)
5474 ; SSE2-NEXT:  .LBB15_8: # %else6
5475 ; SSE2-NEXT:    testb $16, %al
5476 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
5477 ; SSE2-NEXT:    je .LBB15_10
5478 ; SSE2-NEXT:  # %bb.9: # %cond.store7
5479 ; SSE2-NEXT:    movb %cl, 4(%rdi)
5480 ; SSE2-NEXT:  .LBB15_10: # %else8
5481 ; SSE2-NEXT:    testb $32, %al
5482 ; SSE2-NEXT:    je .LBB15_12
5483 ; SSE2-NEXT:  # %bb.11: # %cond.store9
5484 ; SSE2-NEXT:    movb %ch, 5(%rdi)
5485 ; SSE2-NEXT:  .LBB15_12: # %else10
5486 ; SSE2-NEXT:    testb $64, %al
5487 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
5488 ; SSE2-NEXT:    je .LBB15_14
5489 ; SSE2-NEXT:  # %bb.13: # %cond.store11
5490 ; SSE2-NEXT:    movb %cl, 6(%rdi)
5491 ; SSE2-NEXT:  .LBB15_14: # %else12
5492 ; SSE2-NEXT:    testb $-128, %al
5493 ; SSE2-NEXT:    je .LBB15_16
5494 ; SSE2-NEXT:  # %bb.15: # %cond.store13
5495 ; SSE2-NEXT:    movb %ch, 7(%rdi)
5496 ; SSE2-NEXT:  .LBB15_16: # %else14
5497 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
5498 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
5499 ; SSE2-NEXT:    je .LBB15_18
5500 ; SSE2-NEXT:  # %bb.17: # %cond.store15
5501 ; SSE2-NEXT:    movb %cl, 8(%rdi)
5502 ; SSE2-NEXT:  .LBB15_18: # %else16
5503 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
5504 ; SSE2-NEXT:    je .LBB15_20
5505 ; SSE2-NEXT:  # %bb.19: # %cond.store17
5506 ; SSE2-NEXT:    movb %ch, 9(%rdi)
5507 ; SSE2-NEXT:  .LBB15_20: # %else18
5508 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
5509 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
5510 ; SSE2-NEXT:    je .LBB15_22
5511 ; SSE2-NEXT:  # %bb.21: # %cond.store19
5512 ; SSE2-NEXT:    movb %cl, 10(%rdi)
5513 ; SSE2-NEXT:  .LBB15_22: # %else20
5514 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
5515 ; SSE2-NEXT:    je .LBB15_24
5516 ; SSE2-NEXT:  # %bb.23: # %cond.store21
5517 ; SSE2-NEXT:    movb %ch, 11(%rdi)
5518 ; SSE2-NEXT:  .LBB15_24: # %else22
5519 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
5520 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
5521 ; SSE2-NEXT:    je .LBB15_26
5522 ; SSE2-NEXT:  # %bb.25: # %cond.store23
5523 ; SSE2-NEXT:    movb %cl, 12(%rdi)
5524 ; SSE2-NEXT:  .LBB15_26: # %else24
5525 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
5526 ; SSE2-NEXT:    je .LBB15_28
5527 ; SSE2-NEXT:  # %bb.27: # %cond.store25
5528 ; SSE2-NEXT:    movb %ch, 13(%rdi)
5529 ; SSE2-NEXT:  .LBB15_28: # %else26
5530 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
5531 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
5532 ; SSE2-NEXT:    je .LBB15_30
5533 ; SSE2-NEXT:  # %bb.29: # %cond.store27
5534 ; SSE2-NEXT:    movb %cl, 14(%rdi)
5535 ; SSE2-NEXT:  .LBB15_30: # %else28
5536 ; SSE2-NEXT:    packsswb %xmm3, %xmm2
5537 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
5538 ; SSE2-NEXT:    je .LBB15_32
5539 ; SSE2-NEXT:  # %bb.31: # %cond.store29
5540 ; SSE2-NEXT:    movb %ch, 15(%rdi)
5541 ; SSE2-NEXT:  .LBB15_32: # %else30
5542 ; SSE2-NEXT:    testl $65536, %eax # imm = 0x10000
5543 ; SSE2-NEXT:    movd %xmm2, %ecx
5544 ; SSE2-NEXT:    jne .LBB15_33
5545 ; SSE2-NEXT:  # %bb.34: # %else32
5546 ; SSE2-NEXT:    testl $131072, %eax # imm = 0x20000
5547 ; SSE2-NEXT:    jne .LBB15_35
5548 ; SSE2-NEXT:  .LBB15_36: # %else34
5549 ; SSE2-NEXT:    testl $262144, %eax # imm = 0x40000
5550 ; SSE2-NEXT:    jne .LBB15_37
5551 ; SSE2-NEXT:  .LBB15_38: # %else36
5552 ; SSE2-NEXT:    testl $524288, %eax # imm = 0x80000
5553 ; SSE2-NEXT:    je .LBB15_40
5554 ; SSE2-NEXT:  .LBB15_39: # %cond.store37
5555 ; SSE2-NEXT:    shrl $24, %ecx
5556 ; SSE2-NEXT:    movb %cl, 19(%rdi)
5557 ; SSE2-NEXT:  .LBB15_40: # %else38
5558 ; SSE2-NEXT:    testl $1048576, %eax # imm = 0x100000
5559 ; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
5560 ; SSE2-NEXT:    je .LBB15_42
5561 ; SSE2-NEXT:  # %bb.41: # %cond.store39
5562 ; SSE2-NEXT:    movb %cl, 20(%rdi)
5563 ; SSE2-NEXT:  .LBB15_42: # %else40
5564 ; SSE2-NEXT:    testl $2097152, %eax # imm = 0x200000
5565 ; SSE2-NEXT:    je .LBB15_44
5566 ; SSE2-NEXT:  # %bb.43: # %cond.store41
5567 ; SSE2-NEXT:    movb %ch, 21(%rdi)
5568 ; SSE2-NEXT:  .LBB15_44: # %else42
5569 ; SSE2-NEXT:    testl $4194304, %eax # imm = 0x400000
5570 ; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
5571 ; SSE2-NEXT:    je .LBB15_46
5572 ; SSE2-NEXT:  # %bb.45: # %cond.store43
5573 ; SSE2-NEXT:    movb %cl, 22(%rdi)
5574 ; SSE2-NEXT:  .LBB15_46: # %else44
5575 ; SSE2-NEXT:    testl $8388608, %eax # imm = 0x800000
5576 ; SSE2-NEXT:    je .LBB15_48
5577 ; SSE2-NEXT:  # %bb.47: # %cond.store45
5578 ; SSE2-NEXT:    movb %ch, 23(%rdi)
5579 ; SSE2-NEXT:  .LBB15_48: # %else46
5580 ; SSE2-NEXT:    testl $16777216, %eax # imm = 0x1000000
5581 ; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
5582 ; SSE2-NEXT:    je .LBB15_50
5583 ; SSE2-NEXT:  # %bb.49: # %cond.store47
5584 ; SSE2-NEXT:    movb %cl, 24(%rdi)
5585 ; SSE2-NEXT:  .LBB15_50: # %else48
5586 ; SSE2-NEXT:    testl $33554432, %eax # imm = 0x2000000
5587 ; SSE2-NEXT:    je .LBB15_52
5588 ; SSE2-NEXT:  # %bb.51: # %cond.store49
5589 ; SSE2-NEXT:    movb %ch, 25(%rdi)
5590 ; SSE2-NEXT:  .LBB15_52: # %else50
5591 ; SSE2-NEXT:    testl $67108864, %eax # imm = 0x4000000
5592 ; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
5593 ; SSE2-NEXT:    je .LBB15_54
5594 ; SSE2-NEXT:  # %bb.53: # %cond.store51
5595 ; SSE2-NEXT:    movb %cl, 26(%rdi)
5596 ; SSE2-NEXT:  .LBB15_54: # %else52
5597 ; SSE2-NEXT:    testl $134217728, %eax # imm = 0x8000000
5598 ; SSE2-NEXT:    je .LBB15_56
5599 ; SSE2-NEXT:  # %bb.55: # %cond.store53
5600 ; SSE2-NEXT:    movb %ch, 27(%rdi)
5601 ; SSE2-NEXT:  .LBB15_56: # %else54
5602 ; SSE2-NEXT:    testl $268435456, %eax # imm = 0x10000000
5603 ; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
5604 ; SSE2-NEXT:    je .LBB15_58
5605 ; SSE2-NEXT:  # %bb.57: # %cond.store55
5606 ; SSE2-NEXT:    movb %cl, 28(%rdi)
5607 ; SSE2-NEXT:  .LBB15_58: # %else56
5608 ; SSE2-NEXT:    testl $536870912, %eax # imm = 0x20000000
5609 ; SSE2-NEXT:    je .LBB15_60
5610 ; SSE2-NEXT:  # %bb.59: # %cond.store57
5611 ; SSE2-NEXT:    movb %ch, 29(%rdi)
5612 ; SSE2-NEXT:  .LBB15_60: # %else58
5613 ; SSE2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5614 ; SSE2-NEXT:    pextrw $7, %xmm2, %ecx
5615 ; SSE2-NEXT:    jne .LBB15_61
5616 ; SSE2-NEXT:  # %bb.62: # %else60
5617 ; SSE2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5618 ; SSE2-NEXT:    jne .LBB15_63
5619 ; SSE2-NEXT:  .LBB15_64: # %else62
5620 ; SSE2-NEXT:    retq
5621 ; SSE2-NEXT:  .LBB15_1: # %cond.store
5622 ; SSE2-NEXT:    movb %cl, (%rdi)
5623 ; SSE2-NEXT:    testb $2, %al
5624 ; SSE2-NEXT:    je .LBB15_4
5625 ; SSE2-NEXT:  .LBB15_3: # %cond.store1
5626 ; SSE2-NEXT:    movb %ch, 1(%rdi)
5627 ; SSE2-NEXT:    testb $4, %al
5628 ; SSE2-NEXT:    je .LBB15_6
5629 ; SSE2-NEXT:  .LBB15_5: # %cond.store3
5630 ; SSE2-NEXT:    movl %ecx, %edx
5631 ; SSE2-NEXT:    shrl $16, %edx
5632 ; SSE2-NEXT:    movb %dl, 2(%rdi)
5633 ; SSE2-NEXT:    testb $8, %al
5634 ; SSE2-NEXT:    jne .LBB15_7
5635 ; SSE2-NEXT:    jmp .LBB15_8
5636 ; SSE2-NEXT:  .LBB15_33: # %cond.store31
5637 ; SSE2-NEXT:    movb %cl, 16(%rdi)
5638 ; SSE2-NEXT:    testl $131072, %eax # imm = 0x20000
5639 ; SSE2-NEXT:    je .LBB15_36
5640 ; SSE2-NEXT:  .LBB15_35: # %cond.store33
5641 ; SSE2-NEXT:    movb %ch, 17(%rdi)
5642 ; SSE2-NEXT:    testl $262144, %eax # imm = 0x40000
5643 ; SSE2-NEXT:    je .LBB15_38
5644 ; SSE2-NEXT:  .LBB15_37: # %cond.store35
5645 ; SSE2-NEXT:    movl %ecx, %edx
5646 ; SSE2-NEXT:    shrl $16, %edx
5647 ; SSE2-NEXT:    movb %dl, 18(%rdi)
5648 ; SSE2-NEXT:    testl $524288, %eax # imm = 0x80000
5649 ; SSE2-NEXT:    jne .LBB15_39
5650 ; SSE2-NEXT:    jmp .LBB15_40
5651 ; SSE2-NEXT:  .LBB15_61: # %cond.store59
5652 ; SSE2-NEXT:    movb %cl, 30(%rdi)
5653 ; SSE2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5654 ; SSE2-NEXT:    je .LBB15_64
5655 ; SSE2-NEXT:  .LBB15_63: # %cond.store61
5656 ; SSE2-NEXT:    movb %ch, 31(%rdi)
5657 ; SSE2-NEXT:    retq
5659 ; SSE4-LABEL: truncstore_v32i16_v32i8:
5660 ; SSE4:       # %bb.0:
5661 ; SSE4-NEXT:    pxor %xmm6, %xmm6
5662 ; SSE4-NEXT:    packsswb %xmm1, %xmm0
5663 ; SSE4-NEXT:    pcmpeqb %xmm6, %xmm4
5664 ; SSE4-NEXT:    pmovmskb %xmm4, %ecx
5665 ; SSE4-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
5666 ; SSE4-NEXT:    pcmpeqb %xmm6, %xmm5
5667 ; SSE4-NEXT:    pmovmskb %xmm5, %eax
5668 ; SSE4-NEXT:    notl %eax
5669 ; SSE4-NEXT:    shll $16, %eax
5670 ; SSE4-NEXT:    orl %ecx, %eax
5671 ; SSE4-NEXT:    testb $1, %al
5672 ; SSE4-NEXT:    jne .LBB15_1
5673 ; SSE4-NEXT:  # %bb.2: # %else
5674 ; SSE4-NEXT:    testb $2, %al
5675 ; SSE4-NEXT:    jne .LBB15_3
5676 ; SSE4-NEXT:  .LBB15_4: # %else2
5677 ; SSE4-NEXT:    testb $4, %al
5678 ; SSE4-NEXT:    jne .LBB15_5
5679 ; SSE4-NEXT:  .LBB15_6: # %else4
5680 ; SSE4-NEXT:    testb $8, %al
5681 ; SSE4-NEXT:    jne .LBB15_7
5682 ; SSE4-NEXT:  .LBB15_8: # %else6
5683 ; SSE4-NEXT:    testb $16, %al
5684 ; SSE4-NEXT:    jne .LBB15_9
5685 ; SSE4-NEXT:  .LBB15_10: # %else8
5686 ; SSE4-NEXT:    testb $32, %al
5687 ; SSE4-NEXT:    jne .LBB15_11
5688 ; SSE4-NEXT:  .LBB15_12: # %else10
5689 ; SSE4-NEXT:    testb $64, %al
5690 ; SSE4-NEXT:    jne .LBB15_13
5691 ; SSE4-NEXT:  .LBB15_14: # %else12
5692 ; SSE4-NEXT:    testb $-128, %al
5693 ; SSE4-NEXT:    jne .LBB15_15
5694 ; SSE4-NEXT:  .LBB15_16: # %else14
5695 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
5696 ; SSE4-NEXT:    jne .LBB15_17
5697 ; SSE4-NEXT:  .LBB15_18: # %else16
5698 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
5699 ; SSE4-NEXT:    jne .LBB15_19
5700 ; SSE4-NEXT:  .LBB15_20: # %else18
5701 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
5702 ; SSE4-NEXT:    jne .LBB15_21
5703 ; SSE4-NEXT:  .LBB15_22: # %else20
5704 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
5705 ; SSE4-NEXT:    jne .LBB15_23
5706 ; SSE4-NEXT:  .LBB15_24: # %else22
5707 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
5708 ; SSE4-NEXT:    jne .LBB15_25
5709 ; SSE4-NEXT:  .LBB15_26: # %else24
5710 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
5711 ; SSE4-NEXT:    jne .LBB15_27
5712 ; SSE4-NEXT:  .LBB15_28: # %else26
5713 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
5714 ; SSE4-NEXT:    jne .LBB15_29
5715 ; SSE4-NEXT:  .LBB15_30: # %else28
5716 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
5717 ; SSE4-NEXT:    je .LBB15_32
5718 ; SSE4-NEXT:  .LBB15_31: # %cond.store29
5719 ; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
5720 ; SSE4-NEXT:  .LBB15_32: # %else30
5721 ; SSE4-NEXT:    packsswb %xmm3, %xmm2
5722 ; SSE4-NEXT:    testl $65536, %eax # imm = 0x10000
5723 ; SSE4-NEXT:    jne .LBB15_33
5724 ; SSE4-NEXT:  # %bb.34: # %else32
5725 ; SSE4-NEXT:    testl $131072, %eax # imm = 0x20000
5726 ; SSE4-NEXT:    jne .LBB15_35
5727 ; SSE4-NEXT:  .LBB15_36: # %else34
5728 ; SSE4-NEXT:    testl $262144, %eax # imm = 0x40000
5729 ; SSE4-NEXT:    jne .LBB15_37
5730 ; SSE4-NEXT:  .LBB15_38: # %else36
5731 ; SSE4-NEXT:    testl $524288, %eax # imm = 0x80000
5732 ; SSE4-NEXT:    jne .LBB15_39
5733 ; SSE4-NEXT:  .LBB15_40: # %else38
5734 ; SSE4-NEXT:    testl $1048576, %eax # imm = 0x100000
5735 ; SSE4-NEXT:    jne .LBB15_41
5736 ; SSE4-NEXT:  .LBB15_42: # %else40
5737 ; SSE4-NEXT:    testl $2097152, %eax # imm = 0x200000
5738 ; SSE4-NEXT:    jne .LBB15_43
5739 ; SSE4-NEXT:  .LBB15_44: # %else42
5740 ; SSE4-NEXT:    testl $4194304, %eax # imm = 0x400000
5741 ; SSE4-NEXT:    jne .LBB15_45
5742 ; SSE4-NEXT:  .LBB15_46: # %else44
5743 ; SSE4-NEXT:    testl $8388608, %eax # imm = 0x800000
5744 ; SSE4-NEXT:    jne .LBB15_47
5745 ; SSE4-NEXT:  .LBB15_48: # %else46
5746 ; SSE4-NEXT:    testl $16777216, %eax # imm = 0x1000000
5747 ; SSE4-NEXT:    jne .LBB15_49
5748 ; SSE4-NEXT:  .LBB15_50: # %else48
5749 ; SSE4-NEXT:    testl $33554432, %eax # imm = 0x2000000
5750 ; SSE4-NEXT:    jne .LBB15_51
5751 ; SSE4-NEXT:  .LBB15_52: # %else50
5752 ; SSE4-NEXT:    testl $67108864, %eax # imm = 0x4000000
5753 ; SSE4-NEXT:    jne .LBB15_53
5754 ; SSE4-NEXT:  .LBB15_54: # %else52
5755 ; SSE4-NEXT:    testl $134217728, %eax # imm = 0x8000000
5756 ; SSE4-NEXT:    jne .LBB15_55
5757 ; SSE4-NEXT:  .LBB15_56: # %else54
5758 ; SSE4-NEXT:    testl $268435456, %eax # imm = 0x10000000
5759 ; SSE4-NEXT:    jne .LBB15_57
5760 ; SSE4-NEXT:  .LBB15_58: # %else56
5761 ; SSE4-NEXT:    testl $536870912, %eax # imm = 0x20000000
5762 ; SSE4-NEXT:    jne .LBB15_59
5763 ; SSE4-NEXT:  .LBB15_60: # %else58
5764 ; SSE4-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5765 ; SSE4-NEXT:    jne .LBB15_61
5766 ; SSE4-NEXT:  .LBB15_62: # %else60
5767 ; SSE4-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5768 ; SSE4-NEXT:    jne .LBB15_63
5769 ; SSE4-NEXT:  .LBB15_64: # %else62
5770 ; SSE4-NEXT:    retq
5771 ; SSE4-NEXT:  .LBB15_1: # %cond.store
5772 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
5773 ; SSE4-NEXT:    testb $2, %al
5774 ; SSE4-NEXT:    je .LBB15_4
5775 ; SSE4-NEXT:  .LBB15_3: # %cond.store1
5776 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
5777 ; SSE4-NEXT:    testb $4, %al
5778 ; SSE4-NEXT:    je .LBB15_6
5779 ; SSE4-NEXT:  .LBB15_5: # %cond.store3
5780 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
5781 ; SSE4-NEXT:    testb $8, %al
5782 ; SSE4-NEXT:    je .LBB15_8
5783 ; SSE4-NEXT:  .LBB15_7: # %cond.store5
5784 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
5785 ; SSE4-NEXT:    testb $16, %al
5786 ; SSE4-NEXT:    je .LBB15_10
5787 ; SSE4-NEXT:  .LBB15_9: # %cond.store7
5788 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
5789 ; SSE4-NEXT:    testb $32, %al
5790 ; SSE4-NEXT:    je .LBB15_12
5791 ; SSE4-NEXT:  .LBB15_11: # %cond.store9
5792 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
5793 ; SSE4-NEXT:    testb $64, %al
5794 ; SSE4-NEXT:    je .LBB15_14
5795 ; SSE4-NEXT:  .LBB15_13: # %cond.store11
5796 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
5797 ; SSE4-NEXT:    testb $-128, %al
5798 ; SSE4-NEXT:    je .LBB15_16
5799 ; SSE4-NEXT:  .LBB15_15: # %cond.store13
5800 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
5801 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
5802 ; SSE4-NEXT:    je .LBB15_18
5803 ; SSE4-NEXT:  .LBB15_17: # %cond.store15
5804 ; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
5805 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
5806 ; SSE4-NEXT:    je .LBB15_20
5807 ; SSE4-NEXT:  .LBB15_19: # %cond.store17
5808 ; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
5809 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
5810 ; SSE4-NEXT:    je .LBB15_22
5811 ; SSE4-NEXT:  .LBB15_21: # %cond.store19
5812 ; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
5813 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
5814 ; SSE4-NEXT:    je .LBB15_24
5815 ; SSE4-NEXT:  .LBB15_23: # %cond.store21
5816 ; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
5817 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
5818 ; SSE4-NEXT:    je .LBB15_26
5819 ; SSE4-NEXT:  .LBB15_25: # %cond.store23
5820 ; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
5821 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
5822 ; SSE4-NEXT:    je .LBB15_28
5823 ; SSE4-NEXT:  .LBB15_27: # %cond.store25
5824 ; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
5825 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
5826 ; SSE4-NEXT:    je .LBB15_30
5827 ; SSE4-NEXT:  .LBB15_29: # %cond.store27
5828 ; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
5829 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
5830 ; SSE4-NEXT:    jne .LBB15_31
5831 ; SSE4-NEXT:    jmp .LBB15_32
5832 ; SSE4-NEXT:  .LBB15_33: # %cond.store31
5833 ; SSE4-NEXT:    pextrb $0, %xmm2, 16(%rdi)
5834 ; SSE4-NEXT:    testl $131072, %eax # imm = 0x20000
5835 ; SSE4-NEXT:    je .LBB15_36
5836 ; SSE4-NEXT:  .LBB15_35: # %cond.store33
5837 ; SSE4-NEXT:    pextrb $1, %xmm2, 17(%rdi)
5838 ; SSE4-NEXT:    testl $262144, %eax # imm = 0x40000
5839 ; SSE4-NEXT:    je .LBB15_38
5840 ; SSE4-NEXT:  .LBB15_37: # %cond.store35
5841 ; SSE4-NEXT:    pextrb $2, %xmm2, 18(%rdi)
5842 ; SSE4-NEXT:    testl $524288, %eax # imm = 0x80000
5843 ; SSE4-NEXT:    je .LBB15_40
5844 ; SSE4-NEXT:  .LBB15_39: # %cond.store37
5845 ; SSE4-NEXT:    pextrb $3, %xmm2, 19(%rdi)
5846 ; SSE4-NEXT:    testl $1048576, %eax # imm = 0x100000
5847 ; SSE4-NEXT:    je .LBB15_42
5848 ; SSE4-NEXT:  .LBB15_41: # %cond.store39
5849 ; SSE4-NEXT:    pextrb $4, %xmm2, 20(%rdi)
5850 ; SSE4-NEXT:    testl $2097152, %eax # imm = 0x200000
5851 ; SSE4-NEXT:    je .LBB15_44
5852 ; SSE4-NEXT:  .LBB15_43: # %cond.store41
5853 ; SSE4-NEXT:    pextrb $5, %xmm2, 21(%rdi)
5854 ; SSE4-NEXT:    testl $4194304, %eax # imm = 0x400000
5855 ; SSE4-NEXT:    je .LBB15_46
5856 ; SSE4-NEXT:  .LBB15_45: # %cond.store43
5857 ; SSE4-NEXT:    pextrb $6, %xmm2, 22(%rdi)
5858 ; SSE4-NEXT:    testl $8388608, %eax # imm = 0x800000
5859 ; SSE4-NEXT:    je .LBB15_48
5860 ; SSE4-NEXT:  .LBB15_47: # %cond.store45
5861 ; SSE4-NEXT:    pextrb $7, %xmm2, 23(%rdi)
5862 ; SSE4-NEXT:    testl $16777216, %eax # imm = 0x1000000
5863 ; SSE4-NEXT:    je .LBB15_50
5864 ; SSE4-NEXT:  .LBB15_49: # %cond.store47
5865 ; SSE4-NEXT:    pextrb $8, %xmm2, 24(%rdi)
5866 ; SSE4-NEXT:    testl $33554432, %eax # imm = 0x2000000
5867 ; SSE4-NEXT:    je .LBB15_52
5868 ; SSE4-NEXT:  .LBB15_51: # %cond.store49
5869 ; SSE4-NEXT:    pextrb $9, %xmm2, 25(%rdi)
5870 ; SSE4-NEXT:    testl $67108864, %eax # imm = 0x4000000
5871 ; SSE4-NEXT:    je .LBB15_54
5872 ; SSE4-NEXT:  .LBB15_53: # %cond.store51
5873 ; SSE4-NEXT:    pextrb $10, %xmm2, 26(%rdi)
5874 ; SSE4-NEXT:    testl $134217728, %eax # imm = 0x8000000
5875 ; SSE4-NEXT:    je .LBB15_56
5876 ; SSE4-NEXT:  .LBB15_55: # %cond.store53
5877 ; SSE4-NEXT:    pextrb $11, %xmm2, 27(%rdi)
5878 ; SSE4-NEXT:    testl $268435456, %eax # imm = 0x10000000
5879 ; SSE4-NEXT:    je .LBB15_58
5880 ; SSE4-NEXT:  .LBB15_57: # %cond.store55
5881 ; SSE4-NEXT:    pextrb $12, %xmm2, 28(%rdi)
5882 ; SSE4-NEXT:    testl $536870912, %eax # imm = 0x20000000
5883 ; SSE4-NEXT:    je .LBB15_60
5884 ; SSE4-NEXT:  .LBB15_59: # %cond.store57
5885 ; SSE4-NEXT:    pextrb $13, %xmm2, 29(%rdi)
5886 ; SSE4-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5887 ; SSE4-NEXT:    je .LBB15_62
5888 ; SSE4-NEXT:  .LBB15_61: # %cond.store59
5889 ; SSE4-NEXT:    pextrb $14, %xmm2, 30(%rdi)
5890 ; SSE4-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5891 ; SSE4-NEXT:    je .LBB15_64
5892 ; SSE4-NEXT:  .LBB15_63: # %cond.store61
5893 ; SSE4-NEXT:    pextrb $15, %xmm2, 31(%rdi)
5894 ; SSE4-NEXT:    retq
5896 ; AVX1-LABEL: truncstore_v32i16_v32i8:
5897 ; AVX1:       # %bb.0:
5898 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5899 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
5900 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
5901 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
5902 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
5903 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5904 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
5905 ; AVX1-NEXT:    vpmovmskb %xmm3, %ecx
5906 ; AVX1-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
5907 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
5908 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
5909 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
5910 ; AVX1-NEXT:    notl %eax
5911 ; AVX1-NEXT:    shll $16, %eax
5912 ; AVX1-NEXT:    orl %ecx, %eax
5913 ; AVX1-NEXT:    testb $1, %al
5914 ; AVX1-NEXT:    jne .LBB15_1
5915 ; AVX1-NEXT:  # %bb.2: # %else
5916 ; AVX1-NEXT:    testb $2, %al
5917 ; AVX1-NEXT:    jne .LBB15_3
5918 ; AVX1-NEXT:  .LBB15_4: # %else2
5919 ; AVX1-NEXT:    testb $4, %al
5920 ; AVX1-NEXT:    jne .LBB15_5
5921 ; AVX1-NEXT:  .LBB15_6: # %else4
5922 ; AVX1-NEXT:    testb $8, %al
5923 ; AVX1-NEXT:    jne .LBB15_7
5924 ; AVX1-NEXT:  .LBB15_8: # %else6
5925 ; AVX1-NEXT:    testb $16, %al
5926 ; AVX1-NEXT:    jne .LBB15_9
5927 ; AVX1-NEXT:  .LBB15_10: # %else8
5928 ; AVX1-NEXT:    testb $32, %al
5929 ; AVX1-NEXT:    jne .LBB15_11
5930 ; AVX1-NEXT:  .LBB15_12: # %else10
5931 ; AVX1-NEXT:    testb $64, %al
5932 ; AVX1-NEXT:    jne .LBB15_13
5933 ; AVX1-NEXT:  .LBB15_14: # %else12
5934 ; AVX1-NEXT:    testb $-128, %al
5935 ; AVX1-NEXT:    jne .LBB15_15
5936 ; AVX1-NEXT:  .LBB15_16: # %else14
5937 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
5938 ; AVX1-NEXT:    jne .LBB15_17
5939 ; AVX1-NEXT:  .LBB15_18: # %else16
5940 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
5941 ; AVX1-NEXT:    jne .LBB15_19
5942 ; AVX1-NEXT:  .LBB15_20: # %else18
5943 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
5944 ; AVX1-NEXT:    jne .LBB15_21
5945 ; AVX1-NEXT:  .LBB15_22: # %else20
5946 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
5947 ; AVX1-NEXT:    jne .LBB15_23
5948 ; AVX1-NEXT:  .LBB15_24: # %else22
5949 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
5950 ; AVX1-NEXT:    jne .LBB15_25
5951 ; AVX1-NEXT:  .LBB15_26: # %else24
5952 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
5953 ; AVX1-NEXT:    jne .LBB15_27
5954 ; AVX1-NEXT:  .LBB15_28: # %else26
5955 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
5956 ; AVX1-NEXT:    jne .LBB15_29
5957 ; AVX1-NEXT:  .LBB15_30: # %else28
5958 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
5959 ; AVX1-NEXT:    je .LBB15_32
5960 ; AVX1-NEXT:  .LBB15_31: # %cond.store29
5961 ; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
5962 ; AVX1-NEXT:  .LBB15_32: # %else30
5963 ; AVX1-NEXT:    testl $65536, %eax # imm = 0x10000
5964 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5965 ; AVX1-NEXT:    jne .LBB15_33
5966 ; AVX1-NEXT:  # %bb.34: # %else32
5967 ; AVX1-NEXT:    testl $131072, %eax # imm = 0x20000
5968 ; AVX1-NEXT:    jne .LBB15_35
5969 ; AVX1-NEXT:  .LBB15_36: # %else34
5970 ; AVX1-NEXT:    testl $262144, %eax # imm = 0x40000
5971 ; AVX1-NEXT:    jne .LBB15_37
5972 ; AVX1-NEXT:  .LBB15_38: # %else36
5973 ; AVX1-NEXT:    testl $524288, %eax # imm = 0x80000
5974 ; AVX1-NEXT:    jne .LBB15_39
5975 ; AVX1-NEXT:  .LBB15_40: # %else38
5976 ; AVX1-NEXT:    testl $1048576, %eax # imm = 0x100000
5977 ; AVX1-NEXT:    jne .LBB15_41
5978 ; AVX1-NEXT:  .LBB15_42: # %else40
5979 ; AVX1-NEXT:    testl $2097152, %eax # imm = 0x200000
5980 ; AVX1-NEXT:    jne .LBB15_43
5981 ; AVX1-NEXT:  .LBB15_44: # %else42
5982 ; AVX1-NEXT:    testl $4194304, %eax # imm = 0x400000
5983 ; AVX1-NEXT:    jne .LBB15_45
5984 ; AVX1-NEXT:  .LBB15_46: # %else44
5985 ; AVX1-NEXT:    testl $8388608, %eax # imm = 0x800000
5986 ; AVX1-NEXT:    jne .LBB15_47
5987 ; AVX1-NEXT:  .LBB15_48: # %else46
5988 ; AVX1-NEXT:    testl $16777216, %eax # imm = 0x1000000
5989 ; AVX1-NEXT:    jne .LBB15_49
5990 ; AVX1-NEXT:  .LBB15_50: # %else48
5991 ; AVX1-NEXT:    testl $33554432, %eax # imm = 0x2000000
5992 ; AVX1-NEXT:    jne .LBB15_51
5993 ; AVX1-NEXT:  .LBB15_52: # %else50
5994 ; AVX1-NEXT:    testl $67108864, %eax # imm = 0x4000000
5995 ; AVX1-NEXT:    jne .LBB15_53
5996 ; AVX1-NEXT:  .LBB15_54: # %else52
5997 ; AVX1-NEXT:    testl $134217728, %eax # imm = 0x8000000
5998 ; AVX1-NEXT:    jne .LBB15_55
5999 ; AVX1-NEXT:  .LBB15_56: # %else54
6000 ; AVX1-NEXT:    testl $268435456, %eax # imm = 0x10000000
6001 ; AVX1-NEXT:    jne .LBB15_57
6002 ; AVX1-NEXT:  .LBB15_58: # %else56
6003 ; AVX1-NEXT:    testl $536870912, %eax # imm = 0x20000000
6004 ; AVX1-NEXT:    jne .LBB15_59
6005 ; AVX1-NEXT:  .LBB15_60: # %else58
6006 ; AVX1-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6007 ; AVX1-NEXT:    jne .LBB15_61
6008 ; AVX1-NEXT:  .LBB15_62: # %else60
6009 ; AVX1-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6010 ; AVX1-NEXT:    jne .LBB15_63
6011 ; AVX1-NEXT:  .LBB15_64: # %else62
6012 ; AVX1-NEXT:    vzeroupper
6013 ; AVX1-NEXT:    retq
6014 ; AVX1-NEXT:  .LBB15_1: # %cond.store
6015 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
6016 ; AVX1-NEXT:    testb $2, %al
6017 ; AVX1-NEXT:    je .LBB15_4
6018 ; AVX1-NEXT:  .LBB15_3: # %cond.store1
6019 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6020 ; AVX1-NEXT:    testb $4, %al
6021 ; AVX1-NEXT:    je .LBB15_6
6022 ; AVX1-NEXT:  .LBB15_5: # %cond.store3
6023 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6024 ; AVX1-NEXT:    testb $8, %al
6025 ; AVX1-NEXT:    je .LBB15_8
6026 ; AVX1-NEXT:  .LBB15_7: # %cond.store5
6027 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6028 ; AVX1-NEXT:    testb $16, %al
6029 ; AVX1-NEXT:    je .LBB15_10
6030 ; AVX1-NEXT:  .LBB15_9: # %cond.store7
6031 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6032 ; AVX1-NEXT:    testb $32, %al
6033 ; AVX1-NEXT:    je .LBB15_12
6034 ; AVX1-NEXT:  .LBB15_11: # %cond.store9
6035 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6036 ; AVX1-NEXT:    testb $64, %al
6037 ; AVX1-NEXT:    je .LBB15_14
6038 ; AVX1-NEXT:  .LBB15_13: # %cond.store11
6039 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6040 ; AVX1-NEXT:    testb $-128, %al
6041 ; AVX1-NEXT:    je .LBB15_16
6042 ; AVX1-NEXT:  .LBB15_15: # %cond.store13
6043 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6044 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
6045 ; AVX1-NEXT:    je .LBB15_18
6046 ; AVX1-NEXT:  .LBB15_17: # %cond.store15
6047 ; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6048 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
6049 ; AVX1-NEXT:    je .LBB15_20
6050 ; AVX1-NEXT:  .LBB15_19: # %cond.store17
6051 ; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6052 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
6053 ; AVX1-NEXT:    je .LBB15_22
6054 ; AVX1-NEXT:  .LBB15_21: # %cond.store19
6055 ; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6056 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
6057 ; AVX1-NEXT:    je .LBB15_24
6058 ; AVX1-NEXT:  .LBB15_23: # %cond.store21
6059 ; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6060 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
6061 ; AVX1-NEXT:    je .LBB15_26
6062 ; AVX1-NEXT:  .LBB15_25: # %cond.store23
6063 ; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6064 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
6065 ; AVX1-NEXT:    je .LBB15_28
6066 ; AVX1-NEXT:  .LBB15_27: # %cond.store25
6067 ; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6068 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
6069 ; AVX1-NEXT:    je .LBB15_30
6070 ; AVX1-NEXT:  .LBB15_29: # %cond.store27
6071 ; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6072 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
6073 ; AVX1-NEXT:    jne .LBB15_31
6074 ; AVX1-NEXT:    jmp .LBB15_32
6075 ; AVX1-NEXT:  .LBB15_33: # %cond.store31
6076 ; AVX1-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
6077 ; AVX1-NEXT:    testl $131072, %eax # imm = 0x20000
6078 ; AVX1-NEXT:    je .LBB15_36
6079 ; AVX1-NEXT:  .LBB15_35: # %cond.store33
6080 ; AVX1-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
6081 ; AVX1-NEXT:    testl $262144, %eax # imm = 0x40000
6082 ; AVX1-NEXT:    je .LBB15_38
6083 ; AVX1-NEXT:  .LBB15_37: # %cond.store35
6084 ; AVX1-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
6085 ; AVX1-NEXT:    testl $524288, %eax # imm = 0x80000
6086 ; AVX1-NEXT:    je .LBB15_40
6087 ; AVX1-NEXT:  .LBB15_39: # %cond.store37
6088 ; AVX1-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
6089 ; AVX1-NEXT:    testl $1048576, %eax # imm = 0x100000
6090 ; AVX1-NEXT:    je .LBB15_42
6091 ; AVX1-NEXT:  .LBB15_41: # %cond.store39
6092 ; AVX1-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
6093 ; AVX1-NEXT:    testl $2097152, %eax # imm = 0x200000
6094 ; AVX1-NEXT:    je .LBB15_44
6095 ; AVX1-NEXT:  .LBB15_43: # %cond.store41
6096 ; AVX1-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
6097 ; AVX1-NEXT:    testl $4194304, %eax # imm = 0x400000
6098 ; AVX1-NEXT:    je .LBB15_46
6099 ; AVX1-NEXT:  .LBB15_45: # %cond.store43
6100 ; AVX1-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
6101 ; AVX1-NEXT:    testl $8388608, %eax # imm = 0x800000
6102 ; AVX1-NEXT:    je .LBB15_48
6103 ; AVX1-NEXT:  .LBB15_47: # %cond.store45
6104 ; AVX1-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
6105 ; AVX1-NEXT:    testl $16777216, %eax # imm = 0x1000000
6106 ; AVX1-NEXT:    je .LBB15_50
6107 ; AVX1-NEXT:  .LBB15_49: # %cond.store47
6108 ; AVX1-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
6109 ; AVX1-NEXT:    testl $33554432, %eax # imm = 0x2000000
6110 ; AVX1-NEXT:    je .LBB15_52
6111 ; AVX1-NEXT:  .LBB15_51: # %cond.store49
6112 ; AVX1-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
6113 ; AVX1-NEXT:    testl $67108864, %eax # imm = 0x4000000
6114 ; AVX1-NEXT:    je .LBB15_54
6115 ; AVX1-NEXT:  .LBB15_53: # %cond.store51
6116 ; AVX1-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
6117 ; AVX1-NEXT:    testl $134217728, %eax # imm = 0x8000000
6118 ; AVX1-NEXT:    je .LBB15_56
6119 ; AVX1-NEXT:  .LBB15_55: # %cond.store53
6120 ; AVX1-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
6121 ; AVX1-NEXT:    testl $268435456, %eax # imm = 0x10000000
6122 ; AVX1-NEXT:    je .LBB15_58
6123 ; AVX1-NEXT:  .LBB15_57: # %cond.store55
6124 ; AVX1-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
6125 ; AVX1-NEXT:    testl $536870912, %eax # imm = 0x20000000
6126 ; AVX1-NEXT:    je .LBB15_60
6127 ; AVX1-NEXT:  .LBB15_59: # %cond.store57
6128 ; AVX1-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
6129 ; AVX1-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6130 ; AVX1-NEXT:    je .LBB15_62
6131 ; AVX1-NEXT:  .LBB15_61: # %cond.store59
6132 ; AVX1-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
6133 ; AVX1-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6134 ; AVX1-NEXT:    je .LBB15_64
6135 ; AVX1-NEXT:  .LBB15_63: # %cond.store61
6136 ; AVX1-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
6137 ; AVX1-NEXT:    vzeroupper
6138 ; AVX1-NEXT:    retq
6140 ; AVX2-LABEL: truncstore_v32i16_v32i8:
6141 ; AVX2:       # %bb.0:
6142 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
6143 ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
6144 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6145 ; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm1
6146 ; AVX2-NEXT:    vpmovmskb %ymm1, %eax
6147 ; AVX2-NEXT:    notl %eax
6148 ; AVX2-NEXT:    testb $1, %al
6149 ; AVX2-NEXT:    jne .LBB15_1
6150 ; AVX2-NEXT:  # %bb.2: # %else
6151 ; AVX2-NEXT:    testb $2, %al
6152 ; AVX2-NEXT:    jne .LBB15_3
6153 ; AVX2-NEXT:  .LBB15_4: # %else2
6154 ; AVX2-NEXT:    testb $4, %al
6155 ; AVX2-NEXT:    jne .LBB15_5
6156 ; AVX2-NEXT:  .LBB15_6: # %else4
6157 ; AVX2-NEXT:    testb $8, %al
6158 ; AVX2-NEXT:    jne .LBB15_7
6159 ; AVX2-NEXT:  .LBB15_8: # %else6
6160 ; AVX2-NEXT:    testb $16, %al
6161 ; AVX2-NEXT:    jne .LBB15_9
6162 ; AVX2-NEXT:  .LBB15_10: # %else8
6163 ; AVX2-NEXT:    testb $32, %al
6164 ; AVX2-NEXT:    jne .LBB15_11
6165 ; AVX2-NEXT:  .LBB15_12: # %else10
6166 ; AVX2-NEXT:    testb $64, %al
6167 ; AVX2-NEXT:    jne .LBB15_13
6168 ; AVX2-NEXT:  .LBB15_14: # %else12
6169 ; AVX2-NEXT:    testb $-128, %al
6170 ; AVX2-NEXT:    jne .LBB15_15
6171 ; AVX2-NEXT:  .LBB15_16: # %else14
6172 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
6173 ; AVX2-NEXT:    jne .LBB15_17
6174 ; AVX2-NEXT:  .LBB15_18: # %else16
6175 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
6176 ; AVX2-NEXT:    jne .LBB15_19
6177 ; AVX2-NEXT:  .LBB15_20: # %else18
6178 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
6179 ; AVX2-NEXT:    jne .LBB15_21
6180 ; AVX2-NEXT:  .LBB15_22: # %else20
6181 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
6182 ; AVX2-NEXT:    jne .LBB15_23
6183 ; AVX2-NEXT:  .LBB15_24: # %else22
6184 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
6185 ; AVX2-NEXT:    jne .LBB15_25
6186 ; AVX2-NEXT:  .LBB15_26: # %else24
6187 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
6188 ; AVX2-NEXT:    jne .LBB15_27
6189 ; AVX2-NEXT:  .LBB15_28: # %else26
6190 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
6191 ; AVX2-NEXT:    jne .LBB15_29
6192 ; AVX2-NEXT:  .LBB15_30: # %else28
6193 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
6194 ; AVX2-NEXT:    je .LBB15_32
6195 ; AVX2-NEXT:  .LBB15_31: # %cond.store29
6196 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6197 ; AVX2-NEXT:  .LBB15_32: # %else30
6198 ; AVX2-NEXT:    testl $65536, %eax # imm = 0x10000
6199 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
6200 ; AVX2-NEXT:    jne .LBB15_33
6201 ; AVX2-NEXT:  # %bb.34: # %else32
6202 ; AVX2-NEXT:    testl $131072, %eax # imm = 0x20000
6203 ; AVX2-NEXT:    jne .LBB15_35
6204 ; AVX2-NEXT:  .LBB15_36: # %else34
6205 ; AVX2-NEXT:    testl $262144, %eax # imm = 0x40000
6206 ; AVX2-NEXT:    jne .LBB15_37
6207 ; AVX2-NEXT:  .LBB15_38: # %else36
6208 ; AVX2-NEXT:    testl $524288, %eax # imm = 0x80000
6209 ; AVX2-NEXT:    jne .LBB15_39
6210 ; AVX2-NEXT:  .LBB15_40: # %else38
6211 ; AVX2-NEXT:    testl $1048576, %eax # imm = 0x100000
6212 ; AVX2-NEXT:    jne .LBB15_41
6213 ; AVX2-NEXT:  .LBB15_42: # %else40
6214 ; AVX2-NEXT:    testl $2097152, %eax # imm = 0x200000
6215 ; AVX2-NEXT:    jne .LBB15_43
6216 ; AVX2-NEXT:  .LBB15_44: # %else42
6217 ; AVX2-NEXT:    testl $4194304, %eax # imm = 0x400000
6218 ; AVX2-NEXT:    jne .LBB15_45
6219 ; AVX2-NEXT:  .LBB15_46: # %else44
6220 ; AVX2-NEXT:    testl $8388608, %eax # imm = 0x800000
6221 ; AVX2-NEXT:    jne .LBB15_47
6222 ; AVX2-NEXT:  .LBB15_48: # %else46
6223 ; AVX2-NEXT:    testl $16777216, %eax # imm = 0x1000000
6224 ; AVX2-NEXT:    jne .LBB15_49
6225 ; AVX2-NEXT:  .LBB15_50: # %else48
6226 ; AVX2-NEXT:    testl $33554432, %eax # imm = 0x2000000
6227 ; AVX2-NEXT:    jne .LBB15_51
6228 ; AVX2-NEXT:  .LBB15_52: # %else50
6229 ; AVX2-NEXT:    testl $67108864, %eax # imm = 0x4000000
6230 ; AVX2-NEXT:    jne .LBB15_53
6231 ; AVX2-NEXT:  .LBB15_54: # %else52
6232 ; AVX2-NEXT:    testl $134217728, %eax # imm = 0x8000000
6233 ; AVX2-NEXT:    jne .LBB15_55
6234 ; AVX2-NEXT:  .LBB15_56: # %else54
6235 ; AVX2-NEXT:    testl $268435456, %eax # imm = 0x10000000
6236 ; AVX2-NEXT:    jne .LBB15_57
6237 ; AVX2-NEXT:  .LBB15_58: # %else56
6238 ; AVX2-NEXT:    testl $536870912, %eax # imm = 0x20000000
6239 ; AVX2-NEXT:    jne .LBB15_59
6240 ; AVX2-NEXT:  .LBB15_60: # %else58
6241 ; AVX2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6242 ; AVX2-NEXT:    jne .LBB15_61
6243 ; AVX2-NEXT:  .LBB15_62: # %else60
6244 ; AVX2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6245 ; AVX2-NEXT:    jne .LBB15_63
6246 ; AVX2-NEXT:  .LBB15_64: # %else62
6247 ; AVX2-NEXT:    vzeroupper
6248 ; AVX2-NEXT:    retq
6249 ; AVX2-NEXT:  .LBB15_1: # %cond.store
6250 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
6251 ; AVX2-NEXT:    testb $2, %al
6252 ; AVX2-NEXT:    je .LBB15_4
6253 ; AVX2-NEXT:  .LBB15_3: # %cond.store1
6254 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6255 ; AVX2-NEXT:    testb $4, %al
6256 ; AVX2-NEXT:    je .LBB15_6
6257 ; AVX2-NEXT:  .LBB15_5: # %cond.store3
6258 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6259 ; AVX2-NEXT:    testb $8, %al
6260 ; AVX2-NEXT:    je .LBB15_8
6261 ; AVX2-NEXT:  .LBB15_7: # %cond.store5
6262 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6263 ; AVX2-NEXT:    testb $16, %al
6264 ; AVX2-NEXT:    je .LBB15_10
6265 ; AVX2-NEXT:  .LBB15_9: # %cond.store7
6266 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6267 ; AVX2-NEXT:    testb $32, %al
6268 ; AVX2-NEXT:    je .LBB15_12
6269 ; AVX2-NEXT:  .LBB15_11: # %cond.store9
6270 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6271 ; AVX2-NEXT:    testb $64, %al
6272 ; AVX2-NEXT:    je .LBB15_14
6273 ; AVX2-NEXT:  .LBB15_13: # %cond.store11
6274 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6275 ; AVX2-NEXT:    testb $-128, %al
6276 ; AVX2-NEXT:    je .LBB15_16
6277 ; AVX2-NEXT:  .LBB15_15: # %cond.store13
6278 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6279 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
6280 ; AVX2-NEXT:    je .LBB15_18
6281 ; AVX2-NEXT:  .LBB15_17: # %cond.store15
6282 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6283 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
6284 ; AVX2-NEXT:    je .LBB15_20
6285 ; AVX2-NEXT:  .LBB15_19: # %cond.store17
6286 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6287 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
6288 ; AVX2-NEXT:    je .LBB15_22
6289 ; AVX2-NEXT:  .LBB15_21: # %cond.store19
6290 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6291 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
6292 ; AVX2-NEXT:    je .LBB15_24
6293 ; AVX2-NEXT:  .LBB15_23: # %cond.store21
6294 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6295 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
6296 ; AVX2-NEXT:    je .LBB15_26
6297 ; AVX2-NEXT:  .LBB15_25: # %cond.store23
6298 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6299 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
6300 ; AVX2-NEXT:    je .LBB15_28
6301 ; AVX2-NEXT:  .LBB15_27: # %cond.store25
6302 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6303 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
6304 ; AVX2-NEXT:    je .LBB15_30
6305 ; AVX2-NEXT:  .LBB15_29: # %cond.store27
6306 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6307 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
6308 ; AVX2-NEXT:    jne .LBB15_31
6309 ; AVX2-NEXT:    jmp .LBB15_32
6310 ; AVX2-NEXT:  .LBB15_33: # %cond.store31
6311 ; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
6312 ; AVX2-NEXT:    testl $131072, %eax # imm = 0x20000
6313 ; AVX2-NEXT:    je .LBB15_36
6314 ; AVX2-NEXT:  .LBB15_35: # %cond.store33
6315 ; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
6316 ; AVX2-NEXT:    testl $262144, %eax # imm = 0x40000
6317 ; AVX2-NEXT:    je .LBB15_38
6318 ; AVX2-NEXT:  .LBB15_37: # %cond.store35
6319 ; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
6320 ; AVX2-NEXT:    testl $524288, %eax # imm = 0x80000
6321 ; AVX2-NEXT:    je .LBB15_40
6322 ; AVX2-NEXT:  .LBB15_39: # %cond.store37
6323 ; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
6324 ; AVX2-NEXT:    testl $1048576, %eax # imm = 0x100000
6325 ; AVX2-NEXT:    je .LBB15_42
6326 ; AVX2-NEXT:  .LBB15_41: # %cond.store39
6327 ; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
6328 ; AVX2-NEXT:    testl $2097152, %eax # imm = 0x200000
6329 ; AVX2-NEXT:    je .LBB15_44
6330 ; AVX2-NEXT:  .LBB15_43: # %cond.store41
6331 ; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
6332 ; AVX2-NEXT:    testl $4194304, %eax # imm = 0x400000
6333 ; AVX2-NEXT:    je .LBB15_46
6334 ; AVX2-NEXT:  .LBB15_45: # %cond.store43
6335 ; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
6336 ; AVX2-NEXT:    testl $8388608, %eax # imm = 0x800000
6337 ; AVX2-NEXT:    je .LBB15_48
6338 ; AVX2-NEXT:  .LBB15_47: # %cond.store45
6339 ; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
6340 ; AVX2-NEXT:    testl $16777216, %eax # imm = 0x1000000
6341 ; AVX2-NEXT:    je .LBB15_50
6342 ; AVX2-NEXT:  .LBB15_49: # %cond.store47
6343 ; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
6344 ; AVX2-NEXT:    testl $33554432, %eax # imm = 0x2000000
6345 ; AVX2-NEXT:    je .LBB15_52
6346 ; AVX2-NEXT:  .LBB15_51: # %cond.store49
6347 ; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
6348 ; AVX2-NEXT:    testl $67108864, %eax # imm = 0x4000000
6349 ; AVX2-NEXT:    je .LBB15_54
6350 ; AVX2-NEXT:  .LBB15_53: # %cond.store51
6351 ; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
6352 ; AVX2-NEXT:    testl $134217728, %eax # imm = 0x8000000
6353 ; AVX2-NEXT:    je .LBB15_56
6354 ; AVX2-NEXT:  .LBB15_55: # %cond.store53
6355 ; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
6356 ; AVX2-NEXT:    testl $268435456, %eax # imm = 0x10000000
6357 ; AVX2-NEXT:    je .LBB15_58
6358 ; AVX2-NEXT:  .LBB15_57: # %cond.store55
6359 ; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
6360 ; AVX2-NEXT:    testl $536870912, %eax # imm = 0x20000000
6361 ; AVX2-NEXT:    je .LBB15_60
6362 ; AVX2-NEXT:  .LBB15_59: # %cond.store57
6363 ; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
6364 ; AVX2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6365 ; AVX2-NEXT:    je .LBB15_62
6366 ; AVX2-NEXT:  .LBB15_61: # %cond.store59
6367 ; AVX2-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
6368 ; AVX2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6369 ; AVX2-NEXT:    je .LBB15_64
6370 ; AVX2-NEXT:  .LBB15_63: # %cond.store61
6371 ; AVX2-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
6372 ; AVX2-NEXT:    vzeroupper
6373 ; AVX2-NEXT:    retq
6375 ; AVX512F-LABEL: truncstore_v32i16_v32i8:
6376 ; AVX512F:       # %bb.0:
6377 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
6378 ; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3
6379 ; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm1, %ymm1
6380 ; AVX512F-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
6381 ; AVX512F-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6382 ; AVX512F-NEXT:    vpmovmskb %ymm1, %eax
6383 ; AVX512F-NEXT:    notl %eax
6384 ; AVX512F-NEXT:    testb $1, %al
6385 ; AVX512F-NEXT:    jne .LBB15_1
6386 ; AVX512F-NEXT:  # %bb.2: # %else
6387 ; AVX512F-NEXT:    testb $2, %al
6388 ; AVX512F-NEXT:    jne .LBB15_3
6389 ; AVX512F-NEXT:  .LBB15_4: # %else2
6390 ; AVX512F-NEXT:    testb $4, %al
6391 ; AVX512F-NEXT:    jne .LBB15_5
6392 ; AVX512F-NEXT:  .LBB15_6: # %else4
6393 ; AVX512F-NEXT:    testb $8, %al
6394 ; AVX512F-NEXT:    jne .LBB15_7
6395 ; AVX512F-NEXT:  .LBB15_8: # %else6
6396 ; AVX512F-NEXT:    testb $16, %al
6397 ; AVX512F-NEXT:    jne .LBB15_9
6398 ; AVX512F-NEXT:  .LBB15_10: # %else8
6399 ; AVX512F-NEXT:    testb $32, %al
6400 ; AVX512F-NEXT:    jne .LBB15_11
6401 ; AVX512F-NEXT:  .LBB15_12: # %else10
6402 ; AVX512F-NEXT:    testb $64, %al
6403 ; AVX512F-NEXT:    jne .LBB15_13
6404 ; AVX512F-NEXT:  .LBB15_14: # %else12
6405 ; AVX512F-NEXT:    testb $-128, %al
6406 ; AVX512F-NEXT:    jne .LBB15_15
6407 ; AVX512F-NEXT:  .LBB15_16: # %else14
6408 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
6409 ; AVX512F-NEXT:    jne .LBB15_17
6410 ; AVX512F-NEXT:  .LBB15_18: # %else16
6411 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
6412 ; AVX512F-NEXT:    jne .LBB15_19
6413 ; AVX512F-NEXT:  .LBB15_20: # %else18
6414 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
6415 ; AVX512F-NEXT:    jne .LBB15_21
6416 ; AVX512F-NEXT:  .LBB15_22: # %else20
6417 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
6418 ; AVX512F-NEXT:    jne .LBB15_23
6419 ; AVX512F-NEXT:  .LBB15_24: # %else22
6420 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
6421 ; AVX512F-NEXT:    jne .LBB15_25
6422 ; AVX512F-NEXT:  .LBB15_26: # %else24
6423 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
6424 ; AVX512F-NEXT:    jne .LBB15_27
6425 ; AVX512F-NEXT:  .LBB15_28: # %else26
6426 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
6427 ; AVX512F-NEXT:    jne .LBB15_29
6428 ; AVX512F-NEXT:  .LBB15_30: # %else28
6429 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
6430 ; AVX512F-NEXT:    je .LBB15_32
6431 ; AVX512F-NEXT:  .LBB15_31: # %cond.store29
6432 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6433 ; AVX512F-NEXT:  .LBB15_32: # %else30
6434 ; AVX512F-NEXT:    testl $65536, %eax # imm = 0x10000
6435 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6436 ; AVX512F-NEXT:    jne .LBB15_33
6437 ; AVX512F-NEXT:  # %bb.34: # %else32
6438 ; AVX512F-NEXT:    testl $131072, %eax # imm = 0x20000
6439 ; AVX512F-NEXT:    jne .LBB15_35
6440 ; AVX512F-NEXT:  .LBB15_36: # %else34
6441 ; AVX512F-NEXT:    testl $262144, %eax # imm = 0x40000
6442 ; AVX512F-NEXT:    jne .LBB15_37
6443 ; AVX512F-NEXT:  .LBB15_38: # %else36
6444 ; AVX512F-NEXT:    testl $524288, %eax # imm = 0x80000
6445 ; AVX512F-NEXT:    jne .LBB15_39
6446 ; AVX512F-NEXT:  .LBB15_40: # %else38
6447 ; AVX512F-NEXT:    testl $1048576, %eax # imm = 0x100000
6448 ; AVX512F-NEXT:    jne .LBB15_41
6449 ; AVX512F-NEXT:  .LBB15_42: # %else40
6450 ; AVX512F-NEXT:    testl $2097152, %eax # imm = 0x200000
6451 ; AVX512F-NEXT:    jne .LBB15_43
6452 ; AVX512F-NEXT:  .LBB15_44: # %else42
6453 ; AVX512F-NEXT:    testl $4194304, %eax # imm = 0x400000
6454 ; AVX512F-NEXT:    jne .LBB15_45
6455 ; AVX512F-NEXT:  .LBB15_46: # %else44
6456 ; AVX512F-NEXT:    testl $8388608, %eax # imm = 0x800000
6457 ; AVX512F-NEXT:    jne .LBB15_47
6458 ; AVX512F-NEXT:  .LBB15_48: # %else46
6459 ; AVX512F-NEXT:    testl $16777216, %eax # imm = 0x1000000
6460 ; AVX512F-NEXT:    jne .LBB15_49
6461 ; AVX512F-NEXT:  .LBB15_50: # %else48
6462 ; AVX512F-NEXT:    testl $33554432, %eax # imm = 0x2000000
6463 ; AVX512F-NEXT:    jne .LBB15_51
6464 ; AVX512F-NEXT:  .LBB15_52: # %else50
6465 ; AVX512F-NEXT:    testl $67108864, %eax # imm = 0x4000000
6466 ; AVX512F-NEXT:    jne .LBB15_53
6467 ; AVX512F-NEXT:  .LBB15_54: # %else52
6468 ; AVX512F-NEXT:    testl $134217728, %eax # imm = 0x8000000
6469 ; AVX512F-NEXT:    jne .LBB15_55
6470 ; AVX512F-NEXT:  .LBB15_56: # %else54
6471 ; AVX512F-NEXT:    testl $268435456, %eax # imm = 0x10000000
6472 ; AVX512F-NEXT:    jne .LBB15_57
6473 ; AVX512F-NEXT:  .LBB15_58: # %else56
6474 ; AVX512F-NEXT:    testl $536870912, %eax # imm = 0x20000000
6475 ; AVX512F-NEXT:    jne .LBB15_59
6476 ; AVX512F-NEXT:  .LBB15_60: # %else58
6477 ; AVX512F-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6478 ; AVX512F-NEXT:    jne .LBB15_61
6479 ; AVX512F-NEXT:  .LBB15_62: # %else60
6480 ; AVX512F-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6481 ; AVX512F-NEXT:    jne .LBB15_63
6482 ; AVX512F-NEXT:  .LBB15_64: # %else62
6483 ; AVX512F-NEXT:    vzeroupper
6484 ; AVX512F-NEXT:    retq
6485 ; AVX512F-NEXT:  .LBB15_1: # %cond.store
6486 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
6487 ; AVX512F-NEXT:    testb $2, %al
6488 ; AVX512F-NEXT:    je .LBB15_4
6489 ; AVX512F-NEXT:  .LBB15_3: # %cond.store1
6490 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6491 ; AVX512F-NEXT:    testb $4, %al
6492 ; AVX512F-NEXT:    je .LBB15_6
6493 ; AVX512F-NEXT:  .LBB15_5: # %cond.store3
6494 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6495 ; AVX512F-NEXT:    testb $8, %al
6496 ; AVX512F-NEXT:    je .LBB15_8
6497 ; AVX512F-NEXT:  .LBB15_7: # %cond.store5
6498 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6499 ; AVX512F-NEXT:    testb $16, %al
6500 ; AVX512F-NEXT:    je .LBB15_10
6501 ; AVX512F-NEXT:  .LBB15_9: # %cond.store7
6502 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6503 ; AVX512F-NEXT:    testb $32, %al
6504 ; AVX512F-NEXT:    je .LBB15_12
6505 ; AVX512F-NEXT:  .LBB15_11: # %cond.store9
6506 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6507 ; AVX512F-NEXT:    testb $64, %al
6508 ; AVX512F-NEXT:    je .LBB15_14
6509 ; AVX512F-NEXT:  .LBB15_13: # %cond.store11
6510 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6511 ; AVX512F-NEXT:    testb $-128, %al
6512 ; AVX512F-NEXT:    je .LBB15_16
6513 ; AVX512F-NEXT:  .LBB15_15: # %cond.store13
6514 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6515 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
6516 ; AVX512F-NEXT:    je .LBB15_18
6517 ; AVX512F-NEXT:  .LBB15_17: # %cond.store15
6518 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6519 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
6520 ; AVX512F-NEXT:    je .LBB15_20
6521 ; AVX512F-NEXT:  .LBB15_19: # %cond.store17
6522 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6523 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
6524 ; AVX512F-NEXT:    je .LBB15_22
6525 ; AVX512F-NEXT:  .LBB15_21: # %cond.store19
6526 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6527 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
6528 ; AVX512F-NEXT:    je .LBB15_24
6529 ; AVX512F-NEXT:  .LBB15_23: # %cond.store21
6530 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6531 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
6532 ; AVX512F-NEXT:    je .LBB15_26
6533 ; AVX512F-NEXT:  .LBB15_25: # %cond.store23
6534 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6535 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
6536 ; AVX512F-NEXT:    je .LBB15_28
6537 ; AVX512F-NEXT:  .LBB15_27: # %cond.store25
6538 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6539 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
6540 ; AVX512F-NEXT:    je .LBB15_30
6541 ; AVX512F-NEXT:  .LBB15_29: # %cond.store27
6542 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6543 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
6544 ; AVX512F-NEXT:    jne .LBB15_31
6545 ; AVX512F-NEXT:    jmp .LBB15_32
6546 ; AVX512F-NEXT:  .LBB15_33: # %cond.store31
6547 ; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
6548 ; AVX512F-NEXT:    testl $131072, %eax # imm = 0x20000
6549 ; AVX512F-NEXT:    je .LBB15_36
6550 ; AVX512F-NEXT:  .LBB15_35: # %cond.store33
6551 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
6552 ; AVX512F-NEXT:    testl $262144, %eax # imm = 0x40000
6553 ; AVX512F-NEXT:    je .LBB15_38
6554 ; AVX512F-NEXT:  .LBB15_37: # %cond.store35
6555 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
6556 ; AVX512F-NEXT:    testl $524288, %eax # imm = 0x80000
6557 ; AVX512F-NEXT:    je .LBB15_40
6558 ; AVX512F-NEXT:  .LBB15_39: # %cond.store37
6559 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
6560 ; AVX512F-NEXT:    testl $1048576, %eax # imm = 0x100000
6561 ; AVX512F-NEXT:    je .LBB15_42
6562 ; AVX512F-NEXT:  .LBB15_41: # %cond.store39
6563 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
6564 ; AVX512F-NEXT:    testl $2097152, %eax # imm = 0x200000
6565 ; AVX512F-NEXT:    je .LBB15_44
6566 ; AVX512F-NEXT:  .LBB15_43: # %cond.store41
6567 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
6568 ; AVX512F-NEXT:    testl $4194304, %eax # imm = 0x400000
6569 ; AVX512F-NEXT:    je .LBB15_46
6570 ; AVX512F-NEXT:  .LBB15_45: # %cond.store43
6571 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
6572 ; AVX512F-NEXT:    testl $8388608, %eax # imm = 0x800000
6573 ; AVX512F-NEXT:    je .LBB15_48
6574 ; AVX512F-NEXT:  .LBB15_47: # %cond.store45
6575 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
6576 ; AVX512F-NEXT:    testl $16777216, %eax # imm = 0x1000000
6577 ; AVX512F-NEXT:    je .LBB15_50
6578 ; AVX512F-NEXT:  .LBB15_49: # %cond.store47
6579 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
6580 ; AVX512F-NEXT:    testl $33554432, %eax # imm = 0x2000000
6581 ; AVX512F-NEXT:    je .LBB15_52
6582 ; AVX512F-NEXT:  .LBB15_51: # %cond.store49
6583 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
6584 ; AVX512F-NEXT:    testl $67108864, %eax # imm = 0x4000000
6585 ; AVX512F-NEXT:    je .LBB15_54
6586 ; AVX512F-NEXT:  .LBB15_53: # %cond.store51
6587 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
6588 ; AVX512F-NEXT:    testl $134217728, %eax # imm = 0x8000000
6589 ; AVX512F-NEXT:    je .LBB15_56
6590 ; AVX512F-NEXT:  .LBB15_55: # %cond.store53
6591 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
6592 ; AVX512F-NEXT:    testl $268435456, %eax # imm = 0x10000000
6593 ; AVX512F-NEXT:    je .LBB15_58
6594 ; AVX512F-NEXT:  .LBB15_57: # %cond.store55
6595 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
6596 ; AVX512F-NEXT:    testl $536870912, %eax # imm = 0x20000000
6597 ; AVX512F-NEXT:    je .LBB15_60
6598 ; AVX512F-NEXT:  .LBB15_59: # %cond.store57
6599 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
6600 ; AVX512F-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6601 ; AVX512F-NEXT:    je .LBB15_62
6602 ; AVX512F-NEXT:  .LBB15_61: # %cond.store59
6603 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
6604 ; AVX512F-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6605 ; AVX512F-NEXT:    je .LBB15_64
6606 ; AVX512F-NEXT:  .LBB15_63: # %cond.store61
6607 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
6608 ; AVX512F-NEXT:    vzeroupper
6609 ; AVX512F-NEXT:    retq
6611 ; AVX512BW-LABEL: truncstore_v32i16_v32i8:
6612 ; AVX512BW:       # %bb.0:
6613 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
6614 ; AVX512BW-NEXT:    vptestmb %zmm1, %zmm1, %k1
6615 ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %zmm0, %zmm0
6616 ; AVX512BW-NEXT:    vpmaxsw {{.*}}(%rip), %zmm0, %zmm0
6617 ; AVX512BW-NEXT:    vpmovwb %zmm0, (%rdi) {%k1}
6618 ; AVX512BW-NEXT:    vzeroupper
6619 ; AVX512BW-NEXT:    retq
6621 ; AVX512BWVL-LABEL: truncstore_v32i16_v32i8:
6622 ; AVX512BWVL:       # %bb.0:
6623 ; AVX512BWVL-NEXT:    vptestmb %ymm1, %ymm1, %k1
6624 ; AVX512BWVL-NEXT:    vpminsw {{.*}}(%rip), %zmm0, %zmm0
6625 ; AVX512BWVL-NEXT:    vpmaxsw {{.*}}(%rip), %zmm0, %zmm0
6626 ; AVX512BWVL-NEXT:    vpmovwb %zmm0, (%rdi) {%k1}
6627 ; AVX512BWVL-NEXT:    vzeroupper
6628 ; AVX512BWVL-NEXT:    retq
6629   %a = icmp ne <32 x i8> %mask, zeroinitializer
6630   %b = icmp slt <32 x i16> %x, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
6631   %c = select <32 x i1> %b, <32 x i16> %x, <32 x i16> <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
6632   %d = icmp sgt <32 x i16> %c, <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
6633   %e = select <32 x i1> %d, <32 x i16> %c, <32 x i16> <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
6634   %f = trunc <32 x i16> %e to <32 x i8>
6635   call void @llvm.masked.store.v32i8.p0v32i8(<32 x i8> %f, <32 x i8>* %p, i32 1, <32 x i1> %a)
6636   ret void
6639 define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %mask) {
6640 ; SSE2-LABEL: truncstore_v16i16_v16i8:
6641 ; SSE2:       # %bb.0:
6642 ; SSE2-NEXT:    pxor %xmm3, %xmm3
6643 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
6644 ; SSE2-NEXT:    pcmpeqb %xmm2, %xmm3
6645 ; SSE2-NEXT:    pmovmskb %xmm3, %eax
6646 ; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6647 ; SSE2-NEXT:    testb $1, %al
6648 ; SSE2-NEXT:    movd %xmm0, %ecx
6649 ; SSE2-NEXT:    jne .LBB16_1
6650 ; SSE2-NEXT:  # %bb.2: # %else
6651 ; SSE2-NEXT:    testb $2, %al
6652 ; SSE2-NEXT:    jne .LBB16_3
6653 ; SSE2-NEXT:  .LBB16_4: # %else2
6654 ; SSE2-NEXT:    testb $4, %al
6655 ; SSE2-NEXT:    jne .LBB16_5
6656 ; SSE2-NEXT:  .LBB16_6: # %else4
6657 ; SSE2-NEXT:    testb $8, %al
6658 ; SSE2-NEXT:    je .LBB16_8
6659 ; SSE2-NEXT:  .LBB16_7: # %cond.store5
6660 ; SSE2-NEXT:    shrl $24, %ecx
6661 ; SSE2-NEXT:    movb %cl, 3(%rdi)
6662 ; SSE2-NEXT:  .LBB16_8: # %else6
6663 ; SSE2-NEXT:    testb $16, %al
6664 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
6665 ; SSE2-NEXT:    je .LBB16_10
6666 ; SSE2-NEXT:  # %bb.9: # %cond.store7
6667 ; SSE2-NEXT:    movb %cl, 4(%rdi)
6668 ; SSE2-NEXT:  .LBB16_10: # %else8
6669 ; SSE2-NEXT:    testb $32, %al
6670 ; SSE2-NEXT:    je .LBB16_12
6671 ; SSE2-NEXT:  # %bb.11: # %cond.store9
6672 ; SSE2-NEXT:    movb %ch, 5(%rdi)
6673 ; SSE2-NEXT:  .LBB16_12: # %else10
6674 ; SSE2-NEXT:    testb $64, %al
6675 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
6676 ; SSE2-NEXT:    je .LBB16_14
6677 ; SSE2-NEXT:  # %bb.13: # %cond.store11
6678 ; SSE2-NEXT:    movb %cl, 6(%rdi)
6679 ; SSE2-NEXT:  .LBB16_14: # %else12
6680 ; SSE2-NEXT:    testb $-128, %al
6681 ; SSE2-NEXT:    je .LBB16_16
6682 ; SSE2-NEXT:  # %bb.15: # %cond.store13
6683 ; SSE2-NEXT:    movb %ch, 7(%rdi)
6684 ; SSE2-NEXT:  .LBB16_16: # %else14
6685 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
6686 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
6687 ; SSE2-NEXT:    je .LBB16_18
6688 ; SSE2-NEXT:  # %bb.17: # %cond.store15
6689 ; SSE2-NEXT:    movb %cl, 8(%rdi)
6690 ; SSE2-NEXT:  .LBB16_18: # %else16
6691 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
6692 ; SSE2-NEXT:    je .LBB16_20
6693 ; SSE2-NEXT:  # %bb.19: # %cond.store17
6694 ; SSE2-NEXT:    movb %ch, 9(%rdi)
6695 ; SSE2-NEXT:  .LBB16_20: # %else18
6696 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
6697 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
6698 ; SSE2-NEXT:    je .LBB16_22
6699 ; SSE2-NEXT:  # %bb.21: # %cond.store19
6700 ; SSE2-NEXT:    movb %cl, 10(%rdi)
6701 ; SSE2-NEXT:  .LBB16_22: # %else20
6702 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
6703 ; SSE2-NEXT:    je .LBB16_24
6704 ; SSE2-NEXT:  # %bb.23: # %cond.store21
6705 ; SSE2-NEXT:    movb %ch, 11(%rdi)
6706 ; SSE2-NEXT:  .LBB16_24: # %else22
6707 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
6708 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
6709 ; SSE2-NEXT:    je .LBB16_26
6710 ; SSE2-NEXT:  # %bb.25: # %cond.store23
6711 ; SSE2-NEXT:    movb %cl, 12(%rdi)
6712 ; SSE2-NEXT:  .LBB16_26: # %else24
6713 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
6714 ; SSE2-NEXT:    je .LBB16_28
6715 ; SSE2-NEXT:  # %bb.27: # %cond.store25
6716 ; SSE2-NEXT:    movb %ch, 13(%rdi)
6717 ; SSE2-NEXT:  .LBB16_28: # %else26
6718 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
6719 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
6720 ; SSE2-NEXT:    jne .LBB16_29
6721 ; SSE2-NEXT:  # %bb.30: # %else28
6722 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
6723 ; SSE2-NEXT:    jne .LBB16_31
6724 ; SSE2-NEXT:  .LBB16_32: # %else30
6725 ; SSE2-NEXT:    retq
6726 ; SSE2-NEXT:  .LBB16_1: # %cond.store
6727 ; SSE2-NEXT:    movb %cl, (%rdi)
6728 ; SSE2-NEXT:    testb $2, %al
6729 ; SSE2-NEXT:    je .LBB16_4
6730 ; SSE2-NEXT:  .LBB16_3: # %cond.store1
6731 ; SSE2-NEXT:    movb %ch, 1(%rdi)
6732 ; SSE2-NEXT:    testb $4, %al
6733 ; SSE2-NEXT:    je .LBB16_6
6734 ; SSE2-NEXT:  .LBB16_5: # %cond.store3
6735 ; SSE2-NEXT:    movl %ecx, %edx
6736 ; SSE2-NEXT:    shrl $16, %edx
6737 ; SSE2-NEXT:    movb %dl, 2(%rdi)
6738 ; SSE2-NEXT:    testb $8, %al
6739 ; SSE2-NEXT:    jne .LBB16_7
6740 ; SSE2-NEXT:    jmp .LBB16_8
6741 ; SSE2-NEXT:  .LBB16_29: # %cond.store27
6742 ; SSE2-NEXT:    movb %cl, 14(%rdi)
6743 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
6744 ; SSE2-NEXT:    je .LBB16_32
6745 ; SSE2-NEXT:  .LBB16_31: # %cond.store29
6746 ; SSE2-NEXT:    movb %ch, 15(%rdi)
6747 ; SSE2-NEXT:    retq
6749 ; SSE4-LABEL: truncstore_v16i16_v16i8:
6750 ; SSE4:       # %bb.0:
6751 ; SSE4-NEXT:    pxor %xmm3, %xmm3
6752 ; SSE4-NEXT:    packsswb %xmm1, %xmm0
6753 ; SSE4-NEXT:    pcmpeqb %xmm2, %xmm3
6754 ; SSE4-NEXT:    pmovmskb %xmm3, %eax
6755 ; SSE4-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6756 ; SSE4-NEXT:    testb $1, %al
6757 ; SSE4-NEXT:    jne .LBB16_1
6758 ; SSE4-NEXT:  # %bb.2: # %else
6759 ; SSE4-NEXT:    testb $2, %al
6760 ; SSE4-NEXT:    jne .LBB16_3
6761 ; SSE4-NEXT:  .LBB16_4: # %else2
6762 ; SSE4-NEXT:    testb $4, %al
6763 ; SSE4-NEXT:    jne .LBB16_5
6764 ; SSE4-NEXT:  .LBB16_6: # %else4
6765 ; SSE4-NEXT:    testb $8, %al
6766 ; SSE4-NEXT:    jne .LBB16_7
6767 ; SSE4-NEXT:  .LBB16_8: # %else6
6768 ; SSE4-NEXT:    testb $16, %al
6769 ; SSE4-NEXT:    jne .LBB16_9
6770 ; SSE4-NEXT:  .LBB16_10: # %else8
6771 ; SSE4-NEXT:    testb $32, %al
6772 ; SSE4-NEXT:    jne .LBB16_11
6773 ; SSE4-NEXT:  .LBB16_12: # %else10
6774 ; SSE4-NEXT:    testb $64, %al
6775 ; SSE4-NEXT:    jne .LBB16_13
6776 ; SSE4-NEXT:  .LBB16_14: # %else12
6777 ; SSE4-NEXT:    testb $-128, %al
6778 ; SSE4-NEXT:    jne .LBB16_15
6779 ; SSE4-NEXT:  .LBB16_16: # %else14
6780 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
6781 ; SSE4-NEXT:    jne .LBB16_17
6782 ; SSE4-NEXT:  .LBB16_18: # %else16
6783 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
6784 ; SSE4-NEXT:    jne .LBB16_19
6785 ; SSE4-NEXT:  .LBB16_20: # %else18
6786 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
6787 ; SSE4-NEXT:    jne .LBB16_21
6788 ; SSE4-NEXT:  .LBB16_22: # %else20
6789 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
6790 ; SSE4-NEXT:    jne .LBB16_23
6791 ; SSE4-NEXT:  .LBB16_24: # %else22
6792 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
6793 ; SSE4-NEXT:    jne .LBB16_25
6794 ; SSE4-NEXT:  .LBB16_26: # %else24
6795 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
6796 ; SSE4-NEXT:    jne .LBB16_27
6797 ; SSE4-NEXT:  .LBB16_28: # %else26
6798 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
6799 ; SSE4-NEXT:    jne .LBB16_29
6800 ; SSE4-NEXT:  .LBB16_30: # %else28
6801 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
6802 ; SSE4-NEXT:    jne .LBB16_31
6803 ; SSE4-NEXT:  .LBB16_32: # %else30
6804 ; SSE4-NEXT:    retq
6805 ; SSE4-NEXT:  .LBB16_1: # %cond.store
6806 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
6807 ; SSE4-NEXT:    testb $2, %al
6808 ; SSE4-NEXT:    je .LBB16_4
6809 ; SSE4-NEXT:  .LBB16_3: # %cond.store1
6810 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
6811 ; SSE4-NEXT:    testb $4, %al
6812 ; SSE4-NEXT:    je .LBB16_6
6813 ; SSE4-NEXT:  .LBB16_5: # %cond.store3
6814 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
6815 ; SSE4-NEXT:    testb $8, %al
6816 ; SSE4-NEXT:    je .LBB16_8
6817 ; SSE4-NEXT:  .LBB16_7: # %cond.store5
6818 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
6819 ; SSE4-NEXT:    testb $16, %al
6820 ; SSE4-NEXT:    je .LBB16_10
6821 ; SSE4-NEXT:  .LBB16_9: # %cond.store7
6822 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
6823 ; SSE4-NEXT:    testb $32, %al
6824 ; SSE4-NEXT:    je .LBB16_12
6825 ; SSE4-NEXT:  .LBB16_11: # %cond.store9
6826 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
6827 ; SSE4-NEXT:    testb $64, %al
6828 ; SSE4-NEXT:    je .LBB16_14
6829 ; SSE4-NEXT:  .LBB16_13: # %cond.store11
6830 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
6831 ; SSE4-NEXT:    testb $-128, %al
6832 ; SSE4-NEXT:    je .LBB16_16
6833 ; SSE4-NEXT:  .LBB16_15: # %cond.store13
6834 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
6835 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
6836 ; SSE4-NEXT:    je .LBB16_18
6837 ; SSE4-NEXT:  .LBB16_17: # %cond.store15
6838 ; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
6839 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
6840 ; SSE4-NEXT:    je .LBB16_20
6841 ; SSE4-NEXT:  .LBB16_19: # %cond.store17
6842 ; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
6843 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
6844 ; SSE4-NEXT:    je .LBB16_22
6845 ; SSE4-NEXT:  .LBB16_21: # %cond.store19
6846 ; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
6847 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
6848 ; SSE4-NEXT:    je .LBB16_24
6849 ; SSE4-NEXT:  .LBB16_23: # %cond.store21
6850 ; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
6851 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
6852 ; SSE4-NEXT:    je .LBB16_26
6853 ; SSE4-NEXT:  .LBB16_25: # %cond.store23
6854 ; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
6855 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
6856 ; SSE4-NEXT:    je .LBB16_28
6857 ; SSE4-NEXT:  .LBB16_27: # %cond.store25
6858 ; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
6859 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
6860 ; SSE4-NEXT:    je .LBB16_30
6861 ; SSE4-NEXT:  .LBB16_29: # %cond.store27
6862 ; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
6863 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
6864 ; SSE4-NEXT:    je .LBB16_32
6865 ; SSE4-NEXT:  .LBB16_31: # %cond.store29
6866 ; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
6867 ; SSE4-NEXT:    retq
6869 ; AVX1-LABEL: truncstore_v16i16_v16i8:
6870 ; AVX1:       # %bb.0:
6871 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6872 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
6873 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
6874 ; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
6875 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
6876 ; AVX1-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6877 ; AVX1-NEXT:    testb $1, %al
6878 ; AVX1-NEXT:    jne .LBB16_1
6879 ; AVX1-NEXT:  # %bb.2: # %else
6880 ; AVX1-NEXT:    testb $2, %al
6881 ; AVX1-NEXT:    jne .LBB16_3
6882 ; AVX1-NEXT:  .LBB16_4: # %else2
6883 ; AVX1-NEXT:    testb $4, %al
6884 ; AVX1-NEXT:    jne .LBB16_5
6885 ; AVX1-NEXT:  .LBB16_6: # %else4
6886 ; AVX1-NEXT:    testb $8, %al
6887 ; AVX1-NEXT:    jne .LBB16_7
6888 ; AVX1-NEXT:  .LBB16_8: # %else6
6889 ; AVX1-NEXT:    testb $16, %al
6890 ; AVX1-NEXT:    jne .LBB16_9
6891 ; AVX1-NEXT:  .LBB16_10: # %else8
6892 ; AVX1-NEXT:    testb $32, %al
6893 ; AVX1-NEXT:    jne .LBB16_11
6894 ; AVX1-NEXT:  .LBB16_12: # %else10
6895 ; AVX1-NEXT:    testb $64, %al
6896 ; AVX1-NEXT:    jne .LBB16_13
6897 ; AVX1-NEXT:  .LBB16_14: # %else12
6898 ; AVX1-NEXT:    testb $-128, %al
6899 ; AVX1-NEXT:    jne .LBB16_15
6900 ; AVX1-NEXT:  .LBB16_16: # %else14
6901 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
6902 ; AVX1-NEXT:    jne .LBB16_17
6903 ; AVX1-NEXT:  .LBB16_18: # %else16
6904 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
6905 ; AVX1-NEXT:    jne .LBB16_19
6906 ; AVX1-NEXT:  .LBB16_20: # %else18
6907 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
6908 ; AVX1-NEXT:    jne .LBB16_21
6909 ; AVX1-NEXT:  .LBB16_22: # %else20
6910 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
6911 ; AVX1-NEXT:    jne .LBB16_23
6912 ; AVX1-NEXT:  .LBB16_24: # %else22
6913 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
6914 ; AVX1-NEXT:    jne .LBB16_25
6915 ; AVX1-NEXT:  .LBB16_26: # %else24
6916 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
6917 ; AVX1-NEXT:    jne .LBB16_27
6918 ; AVX1-NEXT:  .LBB16_28: # %else26
6919 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
6920 ; AVX1-NEXT:    jne .LBB16_29
6921 ; AVX1-NEXT:  .LBB16_30: # %else28
6922 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
6923 ; AVX1-NEXT:    jne .LBB16_31
6924 ; AVX1-NEXT:  .LBB16_32: # %else30
6925 ; AVX1-NEXT:    vzeroupper
6926 ; AVX1-NEXT:    retq
6927 ; AVX1-NEXT:  .LBB16_1: # %cond.store
6928 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
6929 ; AVX1-NEXT:    testb $2, %al
6930 ; AVX1-NEXT:    je .LBB16_4
6931 ; AVX1-NEXT:  .LBB16_3: # %cond.store1
6932 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6933 ; AVX1-NEXT:    testb $4, %al
6934 ; AVX1-NEXT:    je .LBB16_6
6935 ; AVX1-NEXT:  .LBB16_5: # %cond.store3
6936 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6937 ; AVX1-NEXT:    testb $8, %al
6938 ; AVX1-NEXT:    je .LBB16_8
6939 ; AVX1-NEXT:  .LBB16_7: # %cond.store5
6940 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6941 ; AVX1-NEXT:    testb $16, %al
6942 ; AVX1-NEXT:    je .LBB16_10
6943 ; AVX1-NEXT:  .LBB16_9: # %cond.store7
6944 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6945 ; AVX1-NEXT:    testb $32, %al
6946 ; AVX1-NEXT:    je .LBB16_12
6947 ; AVX1-NEXT:  .LBB16_11: # %cond.store9
6948 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6949 ; AVX1-NEXT:    testb $64, %al
6950 ; AVX1-NEXT:    je .LBB16_14
6951 ; AVX1-NEXT:  .LBB16_13: # %cond.store11
6952 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6953 ; AVX1-NEXT:    testb $-128, %al
6954 ; AVX1-NEXT:    je .LBB16_16
6955 ; AVX1-NEXT:  .LBB16_15: # %cond.store13
6956 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6957 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
6958 ; AVX1-NEXT:    je .LBB16_18
6959 ; AVX1-NEXT:  .LBB16_17: # %cond.store15
6960 ; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6961 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
6962 ; AVX1-NEXT:    je .LBB16_20
6963 ; AVX1-NEXT:  .LBB16_19: # %cond.store17
6964 ; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6965 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
6966 ; AVX1-NEXT:    je .LBB16_22
6967 ; AVX1-NEXT:  .LBB16_21: # %cond.store19
6968 ; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6969 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
6970 ; AVX1-NEXT:    je .LBB16_24
6971 ; AVX1-NEXT:  .LBB16_23: # %cond.store21
6972 ; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6973 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
6974 ; AVX1-NEXT:    je .LBB16_26
6975 ; AVX1-NEXT:  .LBB16_25: # %cond.store23
6976 ; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6977 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
6978 ; AVX1-NEXT:    je .LBB16_28
6979 ; AVX1-NEXT:  .LBB16_27: # %cond.store25
6980 ; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6981 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
6982 ; AVX1-NEXT:    je .LBB16_30
6983 ; AVX1-NEXT:  .LBB16_29: # %cond.store27
6984 ; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6985 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
6986 ; AVX1-NEXT:    je .LBB16_32
6987 ; AVX1-NEXT:  .LBB16_31: # %cond.store29
6988 ; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6989 ; AVX1-NEXT:    vzeroupper
6990 ; AVX1-NEXT:    retq
6992 ; AVX2-LABEL: truncstore_v16i16_v16i8:
6993 ; AVX2:       # %bb.0:
6994 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6995 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
6996 ; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
6997 ; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
6998 ; AVX2-NEXT:    vpmovmskb %xmm1, %eax
6999 ; AVX2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
7000 ; AVX2-NEXT:    testb $1, %al
7001 ; AVX2-NEXT:    jne .LBB16_1
7002 ; AVX2-NEXT:  # %bb.2: # %else
7003 ; AVX2-NEXT:    testb $2, %al
7004 ; AVX2-NEXT:    jne .LBB16_3
7005 ; AVX2-NEXT:  .LBB16_4: # %else2
7006 ; AVX2-NEXT:    testb $4, %al
7007 ; AVX2-NEXT:    jne .LBB16_5
7008 ; AVX2-NEXT:  .LBB16_6: # %else4
7009 ; AVX2-NEXT:    testb $8, %al
7010 ; AVX2-NEXT:    jne .LBB16_7
7011 ; AVX2-NEXT:  .LBB16_8: # %else6
7012 ; AVX2-NEXT:    testb $16, %al
7013 ; AVX2-NEXT:    jne .LBB16_9
7014 ; AVX2-NEXT:  .LBB16_10: # %else8
7015 ; AVX2-NEXT:    testb $32, %al
7016 ; AVX2-NEXT:    jne .LBB16_11
7017 ; AVX2-NEXT:  .LBB16_12: # %else10
7018 ; AVX2-NEXT:    testb $64, %al
7019 ; AVX2-NEXT:    jne .LBB16_13
7020 ; AVX2-NEXT:  .LBB16_14: # %else12
7021 ; AVX2-NEXT:    testb $-128, %al
7022 ; AVX2-NEXT:    jne .LBB16_15
7023 ; AVX2-NEXT:  .LBB16_16: # %else14
7024 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
7025 ; AVX2-NEXT:    jne .LBB16_17
7026 ; AVX2-NEXT:  .LBB16_18: # %else16
7027 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
7028 ; AVX2-NEXT:    jne .LBB16_19
7029 ; AVX2-NEXT:  .LBB16_20: # %else18
7030 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
7031 ; AVX2-NEXT:    jne .LBB16_21
7032 ; AVX2-NEXT:  .LBB16_22: # %else20
7033 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
7034 ; AVX2-NEXT:    jne .LBB16_23
7035 ; AVX2-NEXT:  .LBB16_24: # %else22
7036 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
7037 ; AVX2-NEXT:    jne .LBB16_25
7038 ; AVX2-NEXT:  .LBB16_26: # %else24
7039 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
7040 ; AVX2-NEXT:    jne .LBB16_27
7041 ; AVX2-NEXT:  .LBB16_28: # %else26
7042 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
7043 ; AVX2-NEXT:    jne .LBB16_29
7044 ; AVX2-NEXT:  .LBB16_30: # %else28
7045 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
7046 ; AVX2-NEXT:    jne .LBB16_31
7047 ; AVX2-NEXT:  .LBB16_32: # %else30
7048 ; AVX2-NEXT:    vzeroupper
7049 ; AVX2-NEXT:    retq
7050 ; AVX2-NEXT:  .LBB16_1: # %cond.store
7051 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
7052 ; AVX2-NEXT:    testb $2, %al
7053 ; AVX2-NEXT:    je .LBB16_4
7054 ; AVX2-NEXT:  .LBB16_3: # %cond.store1
7055 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7056 ; AVX2-NEXT:    testb $4, %al
7057 ; AVX2-NEXT:    je .LBB16_6
7058 ; AVX2-NEXT:  .LBB16_5: # %cond.store3
7059 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7060 ; AVX2-NEXT:    testb $8, %al
7061 ; AVX2-NEXT:    je .LBB16_8
7062 ; AVX2-NEXT:  .LBB16_7: # %cond.store5
7063 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7064 ; AVX2-NEXT:    testb $16, %al
7065 ; AVX2-NEXT:    je .LBB16_10
7066 ; AVX2-NEXT:  .LBB16_9: # %cond.store7
7067 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7068 ; AVX2-NEXT:    testb $32, %al
7069 ; AVX2-NEXT:    je .LBB16_12
7070 ; AVX2-NEXT:  .LBB16_11: # %cond.store9
7071 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7072 ; AVX2-NEXT:    testb $64, %al
7073 ; AVX2-NEXT:    je .LBB16_14
7074 ; AVX2-NEXT:  .LBB16_13: # %cond.store11
7075 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7076 ; AVX2-NEXT:    testb $-128, %al
7077 ; AVX2-NEXT:    je .LBB16_16
7078 ; AVX2-NEXT:  .LBB16_15: # %cond.store13
7079 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7080 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
7081 ; AVX2-NEXT:    je .LBB16_18
7082 ; AVX2-NEXT:  .LBB16_17: # %cond.store15
7083 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
7084 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
7085 ; AVX2-NEXT:    je .LBB16_20
7086 ; AVX2-NEXT:  .LBB16_19: # %cond.store17
7087 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
7088 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
7089 ; AVX2-NEXT:    je .LBB16_22
7090 ; AVX2-NEXT:  .LBB16_21: # %cond.store19
7091 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
7092 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
7093 ; AVX2-NEXT:    je .LBB16_24
7094 ; AVX2-NEXT:  .LBB16_23: # %cond.store21
7095 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
7096 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
7097 ; AVX2-NEXT:    je .LBB16_26
7098 ; AVX2-NEXT:  .LBB16_25: # %cond.store23
7099 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
7100 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
7101 ; AVX2-NEXT:    je .LBB16_28
7102 ; AVX2-NEXT:  .LBB16_27: # %cond.store25
7103 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
7104 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
7105 ; AVX2-NEXT:    je .LBB16_30
7106 ; AVX2-NEXT:  .LBB16_29: # %cond.store27
7107 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
7108 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
7109 ; AVX2-NEXT:    je .LBB16_32
7110 ; AVX2-NEXT:  .LBB16_31: # %cond.store29
7111 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
7112 ; AVX2-NEXT:    vzeroupper
7113 ; AVX2-NEXT:    retq
7115 ; AVX512F-LABEL: truncstore_v16i16_v16i8:
7116 ; AVX512F:       # %bb.0:
7117 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7118 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
7119 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm2
7120 ; AVX512F-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
7121 ; AVX512F-NEXT:    vpmovmskb %xmm1, %eax
7122 ; AVX512F-NEXT:    xorl $65535, %eax # imm = 0xFFFF
7123 ; AVX512F-NEXT:    testb $1, %al
7124 ; AVX512F-NEXT:    jne .LBB16_1
7125 ; AVX512F-NEXT:  # %bb.2: # %else
7126 ; AVX512F-NEXT:    testb $2, %al
7127 ; AVX512F-NEXT:    jne .LBB16_3
7128 ; AVX512F-NEXT:  .LBB16_4: # %else2
7129 ; AVX512F-NEXT:    testb $4, %al
7130 ; AVX512F-NEXT:    jne .LBB16_5
7131 ; AVX512F-NEXT:  .LBB16_6: # %else4
7132 ; AVX512F-NEXT:    testb $8, %al
7133 ; AVX512F-NEXT:    jne .LBB16_7
7134 ; AVX512F-NEXT:  .LBB16_8: # %else6
7135 ; AVX512F-NEXT:    testb $16, %al
7136 ; AVX512F-NEXT:    jne .LBB16_9
7137 ; AVX512F-NEXT:  .LBB16_10: # %else8
7138 ; AVX512F-NEXT:    testb $32, %al
7139 ; AVX512F-NEXT:    jne .LBB16_11
7140 ; AVX512F-NEXT:  .LBB16_12: # %else10
7141 ; AVX512F-NEXT:    testb $64, %al
7142 ; AVX512F-NEXT:    jne .LBB16_13
7143 ; AVX512F-NEXT:  .LBB16_14: # %else12
7144 ; AVX512F-NEXT:    testb $-128, %al
7145 ; AVX512F-NEXT:    jne .LBB16_15
7146 ; AVX512F-NEXT:  .LBB16_16: # %else14
7147 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
7148 ; AVX512F-NEXT:    jne .LBB16_17
7149 ; AVX512F-NEXT:  .LBB16_18: # %else16
7150 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
7151 ; AVX512F-NEXT:    jne .LBB16_19
7152 ; AVX512F-NEXT:  .LBB16_20: # %else18
7153 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
7154 ; AVX512F-NEXT:    jne .LBB16_21
7155 ; AVX512F-NEXT:  .LBB16_22: # %else20
7156 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
7157 ; AVX512F-NEXT:    jne .LBB16_23
7158 ; AVX512F-NEXT:  .LBB16_24: # %else22
7159 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
7160 ; AVX512F-NEXT:    jne .LBB16_25
7161 ; AVX512F-NEXT:  .LBB16_26: # %else24
7162 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
7163 ; AVX512F-NEXT:    jne .LBB16_27
7164 ; AVX512F-NEXT:  .LBB16_28: # %else26
7165 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
7166 ; AVX512F-NEXT:    jne .LBB16_29
7167 ; AVX512F-NEXT:  .LBB16_30: # %else28
7168 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
7169 ; AVX512F-NEXT:    jne .LBB16_31
7170 ; AVX512F-NEXT:  .LBB16_32: # %else30
7171 ; AVX512F-NEXT:    vzeroupper
7172 ; AVX512F-NEXT:    retq
7173 ; AVX512F-NEXT:  .LBB16_1: # %cond.store
7174 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
7175 ; AVX512F-NEXT:    testb $2, %al
7176 ; AVX512F-NEXT:    je .LBB16_4
7177 ; AVX512F-NEXT:  .LBB16_3: # %cond.store1
7178 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7179 ; AVX512F-NEXT:    testb $4, %al
7180 ; AVX512F-NEXT:    je .LBB16_6
7181 ; AVX512F-NEXT:  .LBB16_5: # %cond.store3
7182 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7183 ; AVX512F-NEXT:    testb $8, %al
7184 ; AVX512F-NEXT:    je .LBB16_8
7185 ; AVX512F-NEXT:  .LBB16_7: # %cond.store5
7186 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7187 ; AVX512F-NEXT:    testb $16, %al
7188 ; AVX512F-NEXT:    je .LBB16_10
7189 ; AVX512F-NEXT:  .LBB16_9: # %cond.store7
7190 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7191 ; AVX512F-NEXT:    testb $32, %al
7192 ; AVX512F-NEXT:    je .LBB16_12
7193 ; AVX512F-NEXT:  .LBB16_11: # %cond.store9
7194 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7195 ; AVX512F-NEXT:    testb $64, %al
7196 ; AVX512F-NEXT:    je .LBB16_14
7197 ; AVX512F-NEXT:  .LBB16_13: # %cond.store11
7198 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7199 ; AVX512F-NEXT:    testb $-128, %al
7200 ; AVX512F-NEXT:    je .LBB16_16
7201 ; AVX512F-NEXT:  .LBB16_15: # %cond.store13
7202 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7203 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
7204 ; AVX512F-NEXT:    je .LBB16_18
7205 ; AVX512F-NEXT:  .LBB16_17: # %cond.store15
7206 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
7207 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
7208 ; AVX512F-NEXT:    je .LBB16_20
7209 ; AVX512F-NEXT:  .LBB16_19: # %cond.store17
7210 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
7211 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
7212 ; AVX512F-NEXT:    je .LBB16_22
7213 ; AVX512F-NEXT:  .LBB16_21: # %cond.store19
7214 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
7215 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
7216 ; AVX512F-NEXT:    je .LBB16_24
7217 ; AVX512F-NEXT:  .LBB16_23: # %cond.store21
7218 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
7219 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
7220 ; AVX512F-NEXT:    je .LBB16_26
7221 ; AVX512F-NEXT:  .LBB16_25: # %cond.store23
7222 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
7223 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
7224 ; AVX512F-NEXT:    je .LBB16_28
7225 ; AVX512F-NEXT:  .LBB16_27: # %cond.store25
7226 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
7227 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
7228 ; AVX512F-NEXT:    je .LBB16_30
7229 ; AVX512F-NEXT:  .LBB16_29: # %cond.store27
7230 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
7231 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
7232 ; AVX512F-NEXT:    je .LBB16_32
7233 ; AVX512F-NEXT:  .LBB16_31: # %cond.store29
7234 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
7235 ; AVX512F-NEXT:    vzeroupper
7236 ; AVX512F-NEXT:    retq
7238 ; AVX512BW-LABEL: truncstore_v16i16_v16i8:
7239 ; AVX512BW:       # %bb.0:
7240 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
7241 ; AVX512BW-NEXT:    vptestmb %zmm1, %zmm1, %k0
7242 ; AVX512BW-NEXT:    kmovw %k0, %k1
7243 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
7244 ; AVX512BW-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
7245 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
7246 ; AVX512BW-NEXT:    vzeroupper
7247 ; AVX512BW-NEXT:    retq
7249 ; AVX512BWVL-LABEL: truncstore_v16i16_v16i8:
7250 ; AVX512BWVL:       # %bb.0:
7251 ; AVX512BWVL-NEXT:    vptestmb %xmm1, %xmm1, %k1
7252 ; AVX512BWVL-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
7253 ; AVX512BWVL-NEXT:    vpmaxsw {{.*}}(%rip), %ymm0, %ymm0
7254 ; AVX512BWVL-NEXT:    vpmovwb %ymm0, (%rdi) {%k1}
7255 ; AVX512BWVL-NEXT:    vzeroupper
7256 ; AVX512BWVL-NEXT:    retq
7257   %a = icmp ne <16 x i8> %mask, zeroinitializer
7258   %b = icmp slt <16 x i16> %x, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
7259   %c = select <16 x i1> %b, <16 x i16> %x, <16 x i16> <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
7260   %d = icmp sgt <16 x i16> %c, <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
7261   %e = select <16 x i1> %d, <16 x i16> %c, <16 x i16> <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
7262   %f = trunc <16 x i16> %e to <16 x i8>
7263   call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %f, <16 x i8>* %p, i32 1, <16 x i1> %a)
7264   ret void
7267 define void @truncstore_v8i16_v8i8(<8 x i16> %x, <8 x i8>* %p, <8 x i16> %mask) {
7268 ; SSE2-LABEL: truncstore_v8i16_v8i8:
7269 ; SSE2:       # %bb.0:
7270 ; SSE2-NEXT:    pxor %xmm2, %xmm2
7271 ; SSE2-NEXT:    packsswb %xmm0, %xmm0
7272 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2
7273 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
7274 ; SSE2-NEXT:    pxor %xmm2, %xmm1
7275 ; SSE2-NEXT:    packsswb %xmm0, %xmm1
7276 ; SSE2-NEXT:    pmovmskb %xmm1, %eax
7277 ; SSE2-NEXT:    testb $1, %al
7278 ; SSE2-NEXT:    movd %xmm0, %ecx
7279 ; SSE2-NEXT:    jne .LBB17_1
7280 ; SSE2-NEXT:  # %bb.2: # %else
7281 ; SSE2-NEXT:    testb $2, %al
7282 ; SSE2-NEXT:    jne .LBB17_3
7283 ; SSE2-NEXT:  .LBB17_4: # %else2
7284 ; SSE2-NEXT:    testb $4, %al
7285 ; SSE2-NEXT:    jne .LBB17_5
7286 ; SSE2-NEXT:  .LBB17_6: # %else4
7287 ; SSE2-NEXT:    testb $8, %al
7288 ; SSE2-NEXT:    je .LBB17_8
7289 ; SSE2-NEXT:  .LBB17_7: # %cond.store5
7290 ; SSE2-NEXT:    shrl $24, %ecx
7291 ; SSE2-NEXT:    movb %cl, 3(%rdi)
7292 ; SSE2-NEXT:  .LBB17_8: # %else6
7293 ; SSE2-NEXT:    testb $16, %al
7294 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
7295 ; SSE2-NEXT:    je .LBB17_10
7296 ; SSE2-NEXT:  # %bb.9: # %cond.store7
7297 ; SSE2-NEXT:    movb %cl, 4(%rdi)
7298 ; SSE2-NEXT:  .LBB17_10: # %else8
7299 ; SSE2-NEXT:    testb $32, %al
7300 ; SSE2-NEXT:    je .LBB17_12
7301 ; SSE2-NEXT:  # %bb.11: # %cond.store9
7302 ; SSE2-NEXT:    movb %ch, 5(%rdi)
7303 ; SSE2-NEXT:  .LBB17_12: # %else10
7304 ; SSE2-NEXT:    testb $64, %al
7305 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
7306 ; SSE2-NEXT:    jne .LBB17_13
7307 ; SSE2-NEXT:  # %bb.14: # %else12
7308 ; SSE2-NEXT:    testb $-128, %al
7309 ; SSE2-NEXT:    jne .LBB17_15
7310 ; SSE2-NEXT:  .LBB17_16: # %else14
7311 ; SSE2-NEXT:    retq
7312 ; SSE2-NEXT:  .LBB17_1: # %cond.store
7313 ; SSE2-NEXT:    movb %cl, (%rdi)
7314 ; SSE2-NEXT:    testb $2, %al
7315 ; SSE2-NEXT:    je .LBB17_4
7316 ; SSE2-NEXT:  .LBB17_3: # %cond.store1
7317 ; SSE2-NEXT:    movb %ch, 1(%rdi)
7318 ; SSE2-NEXT:    testb $4, %al
7319 ; SSE2-NEXT:    je .LBB17_6
7320 ; SSE2-NEXT:  .LBB17_5: # %cond.store3
7321 ; SSE2-NEXT:    movl %ecx, %edx
7322 ; SSE2-NEXT:    shrl $16, %edx
7323 ; SSE2-NEXT:    movb %dl, 2(%rdi)
7324 ; SSE2-NEXT:    testb $8, %al
7325 ; SSE2-NEXT:    jne .LBB17_7
7326 ; SSE2-NEXT:    jmp .LBB17_8
7327 ; SSE2-NEXT:  .LBB17_13: # %cond.store11
7328 ; SSE2-NEXT:    movb %cl, 6(%rdi)
7329 ; SSE2-NEXT:    testb $-128, %al
7330 ; SSE2-NEXT:    je .LBB17_16
7331 ; SSE2-NEXT:  .LBB17_15: # %cond.store13
7332 ; SSE2-NEXT:    movb %ch, 7(%rdi)
7333 ; SSE2-NEXT:    retq
7335 ; SSE4-LABEL: truncstore_v8i16_v8i8:
7336 ; SSE4:       # %bb.0:
7337 ; SSE4-NEXT:    pxor %xmm2, %xmm2
7338 ; SSE4-NEXT:    packsswb %xmm0, %xmm0
7339 ; SSE4-NEXT:    pcmpeqw %xmm1, %xmm2
7340 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
7341 ; SSE4-NEXT:    pxor %xmm2, %xmm1
7342 ; SSE4-NEXT:    packsswb %xmm0, %xmm1
7343 ; SSE4-NEXT:    pmovmskb %xmm1, %eax
7344 ; SSE4-NEXT:    testb $1, %al
7345 ; SSE4-NEXT:    jne .LBB17_1
7346 ; SSE4-NEXT:  # %bb.2: # %else
7347 ; SSE4-NEXT:    testb $2, %al
7348 ; SSE4-NEXT:    jne .LBB17_3
7349 ; SSE4-NEXT:  .LBB17_4: # %else2
7350 ; SSE4-NEXT:    testb $4, %al
7351 ; SSE4-NEXT:    jne .LBB17_5
7352 ; SSE4-NEXT:  .LBB17_6: # %else4
7353 ; SSE4-NEXT:    testb $8, %al
7354 ; SSE4-NEXT:    jne .LBB17_7
7355 ; SSE4-NEXT:  .LBB17_8: # %else6
7356 ; SSE4-NEXT:    testb $16, %al
7357 ; SSE4-NEXT:    jne .LBB17_9
7358 ; SSE4-NEXT:  .LBB17_10: # %else8
7359 ; SSE4-NEXT:    testb $32, %al
7360 ; SSE4-NEXT:    jne .LBB17_11
7361 ; SSE4-NEXT:  .LBB17_12: # %else10
7362 ; SSE4-NEXT:    testb $64, %al
7363 ; SSE4-NEXT:    jne .LBB17_13
7364 ; SSE4-NEXT:  .LBB17_14: # %else12
7365 ; SSE4-NEXT:    testb $-128, %al
7366 ; SSE4-NEXT:    jne .LBB17_15
7367 ; SSE4-NEXT:  .LBB17_16: # %else14
7368 ; SSE4-NEXT:    retq
7369 ; SSE4-NEXT:  .LBB17_1: # %cond.store
7370 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
7371 ; SSE4-NEXT:    testb $2, %al
7372 ; SSE4-NEXT:    je .LBB17_4
7373 ; SSE4-NEXT:  .LBB17_3: # %cond.store1
7374 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
7375 ; SSE4-NEXT:    testb $4, %al
7376 ; SSE4-NEXT:    je .LBB17_6
7377 ; SSE4-NEXT:  .LBB17_5: # %cond.store3
7378 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
7379 ; SSE4-NEXT:    testb $8, %al
7380 ; SSE4-NEXT:    je .LBB17_8
7381 ; SSE4-NEXT:  .LBB17_7: # %cond.store5
7382 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
7383 ; SSE4-NEXT:    testb $16, %al
7384 ; SSE4-NEXT:    je .LBB17_10
7385 ; SSE4-NEXT:  .LBB17_9: # %cond.store7
7386 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
7387 ; SSE4-NEXT:    testb $32, %al
7388 ; SSE4-NEXT:    je .LBB17_12
7389 ; SSE4-NEXT:  .LBB17_11: # %cond.store9
7390 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
7391 ; SSE4-NEXT:    testb $64, %al
7392 ; SSE4-NEXT:    je .LBB17_14
7393 ; SSE4-NEXT:  .LBB17_13: # %cond.store11
7394 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
7395 ; SSE4-NEXT:    testb $-128, %al
7396 ; SSE4-NEXT:    je .LBB17_16
7397 ; SSE4-NEXT:  .LBB17_15: # %cond.store13
7398 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
7399 ; SSE4-NEXT:    retq
7401 ; AVX-LABEL: truncstore_v8i16_v8i8:
7402 ; AVX:       # %bb.0:
7403 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7404 ; AVX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
7405 ; AVX-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
7406 ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
7407 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
7408 ; AVX-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
7409 ; AVX-NEXT:    vpmovmskb %xmm1, %eax
7410 ; AVX-NEXT:    testb $1, %al
7411 ; AVX-NEXT:    jne .LBB17_1
7412 ; AVX-NEXT:  # %bb.2: # %else
7413 ; AVX-NEXT:    testb $2, %al
7414 ; AVX-NEXT:    jne .LBB17_3
7415 ; AVX-NEXT:  .LBB17_4: # %else2
7416 ; AVX-NEXT:    testb $4, %al
7417 ; AVX-NEXT:    jne .LBB17_5
7418 ; AVX-NEXT:  .LBB17_6: # %else4
7419 ; AVX-NEXT:    testb $8, %al
7420 ; AVX-NEXT:    jne .LBB17_7
7421 ; AVX-NEXT:  .LBB17_8: # %else6
7422 ; AVX-NEXT:    testb $16, %al
7423 ; AVX-NEXT:    jne .LBB17_9
7424 ; AVX-NEXT:  .LBB17_10: # %else8
7425 ; AVX-NEXT:    testb $32, %al
7426 ; AVX-NEXT:    jne .LBB17_11
7427 ; AVX-NEXT:  .LBB17_12: # %else10
7428 ; AVX-NEXT:    testb $64, %al
7429 ; AVX-NEXT:    jne .LBB17_13
7430 ; AVX-NEXT:  .LBB17_14: # %else12
7431 ; AVX-NEXT:    testb $-128, %al
7432 ; AVX-NEXT:    jne .LBB17_15
7433 ; AVX-NEXT:  .LBB17_16: # %else14
7434 ; AVX-NEXT:    retq
7435 ; AVX-NEXT:  .LBB17_1: # %cond.store
7436 ; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
7437 ; AVX-NEXT:    testb $2, %al
7438 ; AVX-NEXT:    je .LBB17_4
7439 ; AVX-NEXT:  .LBB17_3: # %cond.store1
7440 ; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7441 ; AVX-NEXT:    testb $4, %al
7442 ; AVX-NEXT:    je .LBB17_6
7443 ; AVX-NEXT:  .LBB17_5: # %cond.store3
7444 ; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7445 ; AVX-NEXT:    testb $8, %al
7446 ; AVX-NEXT:    je .LBB17_8
7447 ; AVX-NEXT:  .LBB17_7: # %cond.store5
7448 ; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7449 ; AVX-NEXT:    testb $16, %al
7450 ; AVX-NEXT:    je .LBB17_10
7451 ; AVX-NEXT:  .LBB17_9: # %cond.store7
7452 ; AVX-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7453 ; AVX-NEXT:    testb $32, %al
7454 ; AVX-NEXT:    je .LBB17_12
7455 ; AVX-NEXT:  .LBB17_11: # %cond.store9
7456 ; AVX-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7457 ; AVX-NEXT:    testb $64, %al
7458 ; AVX-NEXT:    je .LBB17_14
7459 ; AVX-NEXT:  .LBB17_13: # %cond.store11
7460 ; AVX-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7461 ; AVX-NEXT:    testb $-128, %al
7462 ; AVX-NEXT:    je .LBB17_16
7463 ; AVX-NEXT:  .LBB17_15: # %cond.store13
7464 ; AVX-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7465 ; AVX-NEXT:    retq
7467 ; AVX512F-LABEL: truncstore_v8i16_v8i8:
7468 ; AVX512F:       # %bb.0:
7469 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7470 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
7471 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
7472 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
7473 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
7474 ; AVX512F-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
7475 ; AVX512F-NEXT:    kmovw %k0, %eax
7476 ; AVX512F-NEXT:    testb $1, %al
7477 ; AVX512F-NEXT:    jne .LBB17_1
7478 ; AVX512F-NEXT:  # %bb.2: # %else
7479 ; AVX512F-NEXT:    testb $2, %al
7480 ; AVX512F-NEXT:    jne .LBB17_3
7481 ; AVX512F-NEXT:  .LBB17_4: # %else2
7482 ; AVX512F-NEXT:    testb $4, %al
7483 ; AVX512F-NEXT:    jne .LBB17_5
7484 ; AVX512F-NEXT:  .LBB17_6: # %else4
7485 ; AVX512F-NEXT:    testb $8, %al
7486 ; AVX512F-NEXT:    jne .LBB17_7
7487 ; AVX512F-NEXT:  .LBB17_8: # %else6
7488 ; AVX512F-NEXT:    testb $16, %al
7489 ; AVX512F-NEXT:    jne .LBB17_9
7490 ; AVX512F-NEXT:  .LBB17_10: # %else8
7491 ; AVX512F-NEXT:    testb $32, %al
7492 ; AVX512F-NEXT:    jne .LBB17_11
7493 ; AVX512F-NEXT:  .LBB17_12: # %else10
7494 ; AVX512F-NEXT:    testb $64, %al
7495 ; AVX512F-NEXT:    jne .LBB17_13
7496 ; AVX512F-NEXT:  .LBB17_14: # %else12
7497 ; AVX512F-NEXT:    testb $-128, %al
7498 ; AVX512F-NEXT:    jne .LBB17_15
7499 ; AVX512F-NEXT:  .LBB17_16: # %else14
7500 ; AVX512F-NEXT:    vzeroupper
7501 ; AVX512F-NEXT:    retq
7502 ; AVX512F-NEXT:  .LBB17_1: # %cond.store
7503 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
7504 ; AVX512F-NEXT:    testb $2, %al
7505 ; AVX512F-NEXT:    je .LBB17_4
7506 ; AVX512F-NEXT:  .LBB17_3: # %cond.store1
7507 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7508 ; AVX512F-NEXT:    testb $4, %al
7509 ; AVX512F-NEXT:    je .LBB17_6
7510 ; AVX512F-NEXT:  .LBB17_5: # %cond.store3
7511 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7512 ; AVX512F-NEXT:    testb $8, %al
7513 ; AVX512F-NEXT:    je .LBB17_8
7514 ; AVX512F-NEXT:  .LBB17_7: # %cond.store5
7515 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7516 ; AVX512F-NEXT:    testb $16, %al
7517 ; AVX512F-NEXT:    je .LBB17_10
7518 ; AVX512F-NEXT:  .LBB17_9: # %cond.store7
7519 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7520 ; AVX512F-NEXT:    testb $32, %al
7521 ; AVX512F-NEXT:    je .LBB17_12
7522 ; AVX512F-NEXT:  .LBB17_11: # %cond.store9
7523 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7524 ; AVX512F-NEXT:    testb $64, %al
7525 ; AVX512F-NEXT:    je .LBB17_14
7526 ; AVX512F-NEXT:  .LBB17_13: # %cond.store11
7527 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7528 ; AVX512F-NEXT:    testb $-128, %al
7529 ; AVX512F-NEXT:    je .LBB17_16
7530 ; AVX512F-NEXT:  .LBB17_15: # %cond.store13
7531 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7532 ; AVX512F-NEXT:    vzeroupper
7533 ; AVX512F-NEXT:    retq
7535 ; AVX512BW-LABEL: truncstore_v8i16_v8i8:
7536 ; AVX512BW:       # %bb.0:
7537 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
7538 ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm1, %k0
7539 ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0
7540 ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1
7541 ; AVX512BW-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
7542 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
7543 ; AVX512BW-NEXT:    vzeroupper
7544 ; AVX512BW-NEXT:    retq
7546 ; AVX512BWVL-LABEL: truncstore_v8i16_v8i8:
7547 ; AVX512BWVL:       # %bb.0:
7548 ; AVX512BWVL-NEXT:    vptestmw %xmm1, %xmm1, %k1
7549 ; AVX512BWVL-NEXT:    vpminsw {{.*}}(%rip), %xmm0, %xmm0
7550 ; AVX512BWVL-NEXT:    vpmaxsw {{.*}}(%rip), %xmm0, %xmm0
7551 ; AVX512BWVL-NEXT:    vpmovwb %xmm0, (%rdi) {%k1}
7552 ; AVX512BWVL-NEXT:    retq
7553   %a = icmp ne <8 x i16> %mask, zeroinitializer
7554   %b = icmp slt <8 x i16> %x, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
7555   %c = select <8 x i1> %b, <8 x i16> %x, <8 x i16> <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
7556   %d = icmp sgt <8 x i16> %c, <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
7557   %e = select <8 x i1> %d, <8 x i16> %c, <8 x i16> <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
7558   %f = trunc <8 x i16> %e to <8 x i8>
7559   call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %f, <8 x i8>* %p, i32 1, <8 x i1> %a)
7560   ret void
7563 declare void @llvm.masked.store.v8i32.p0v8i32(<8 x i32>, <8 x i32>*, i32, <8 x i1>)
7564 declare void @llvm.masked.store.v8i16.p0v8i16(<8 x i16>, <8 x i16>*, i32, <8 x i1>)
7565 declare void @llvm.masked.store.v8i8.p0v8i8(<8 x i8>, <8 x i8>*, i32, <8 x i1>)
7566 declare void @llvm.masked.store.v4i32.p0v4i32(<4 x i32>, <4 x i32>*, i32, <4 x i1>)
7567 declare void @llvm.masked.store.v4i16.p0v4i16(<4 x i16>, <4 x i16>*, i32, <4 x i1>)
7568 declare void @llvm.masked.store.v4i8.p0v4i8(<4 x i8>, <4 x i8>*, i32, <4 x i1>)
7569 declare void @llvm.masked.store.v2i32.p0v2i32(<2 x i32>, <2 x i32>*, i32, <2 x i1>)
7570 declare void @llvm.masked.store.v2i16.p0v2i16(<2 x i16>, <2 x i16>*, i32, <2 x i1>)
7571 declare void @llvm.masked.store.v2i8.p0v2i8(<2 x i8>, <2 x i8>*, i32, <2 x i1>)
7572 declare void @llvm.masked.store.v16i16.p0v16i16(<16 x i16>, <16 x i16>*, i32, <16 x i1>)
7573 declare void @llvm.masked.store.v16i8.p0v16i8(<16 x i8>, <16 x i8>*, i32, <16 x i1>)
7574 declare void @llvm.masked.store.v32i8.p0v32i8(<32 x i8>, <32 x i8>*, i32, <32 x i1>)