[x86] fix assert with horizontal math + broadcast of vector (PR43402)
[llvm-core.git] / test / CodeGen / X86 / masked_store_trunc_ssat.ll
blob777d4d14e4e40b60e8866d80221f75e2011f72f1
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:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1436 ; AVX512F-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1437 ; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0
1438 ; AVX512F-NEXT:    kmovw %k0, %eax
1439 ; AVX512F-NEXT:    testb $1, %al
1440 ; AVX512F-NEXT:    jne .LBB2_1
1441 ; AVX512F-NEXT:  # %bb.2: # %else
1442 ; AVX512F-NEXT:    testb $2, %al
1443 ; AVX512F-NEXT:    jne .LBB2_3
1444 ; AVX512F-NEXT:  .LBB2_4: # %else2
1445 ; AVX512F-NEXT:    testb $4, %al
1446 ; AVX512F-NEXT:    jne .LBB2_5
1447 ; AVX512F-NEXT:  .LBB2_6: # %else4
1448 ; AVX512F-NEXT:    testb $8, %al
1449 ; AVX512F-NEXT:    jne .LBB2_7
1450 ; AVX512F-NEXT:  .LBB2_8: # %else6
1451 ; AVX512F-NEXT:    testb $16, %al
1452 ; AVX512F-NEXT:    jne .LBB2_9
1453 ; AVX512F-NEXT:  .LBB2_10: # %else8
1454 ; AVX512F-NEXT:    testb $32, %al
1455 ; AVX512F-NEXT:    jne .LBB2_11
1456 ; AVX512F-NEXT:  .LBB2_12: # %else10
1457 ; AVX512F-NEXT:    testb $64, %al
1458 ; AVX512F-NEXT:    jne .LBB2_13
1459 ; AVX512F-NEXT:  .LBB2_14: # %else12
1460 ; AVX512F-NEXT:    testb $-128, %al
1461 ; AVX512F-NEXT:    jne .LBB2_15
1462 ; AVX512F-NEXT:  .LBB2_16: # %else14
1463 ; AVX512F-NEXT:    vzeroupper
1464 ; AVX512F-NEXT:    retq
1465 ; AVX512F-NEXT:  .LBB2_1: # %cond.store
1466 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
1467 ; AVX512F-NEXT:    testb $2, %al
1468 ; AVX512F-NEXT:    je .LBB2_4
1469 ; AVX512F-NEXT:  .LBB2_3: # %cond.store1
1470 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
1471 ; AVX512F-NEXT:    testb $4, %al
1472 ; AVX512F-NEXT:    je .LBB2_6
1473 ; AVX512F-NEXT:  .LBB2_5: # %cond.store3
1474 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
1475 ; AVX512F-NEXT:    testb $8, %al
1476 ; AVX512F-NEXT:    je .LBB2_8
1477 ; AVX512F-NEXT:  .LBB2_7: # %cond.store5
1478 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
1479 ; AVX512F-NEXT:    testb $16, %al
1480 ; AVX512F-NEXT:    je .LBB2_10
1481 ; AVX512F-NEXT:  .LBB2_9: # %cond.store7
1482 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
1483 ; AVX512F-NEXT:    testb $32, %al
1484 ; AVX512F-NEXT:    je .LBB2_12
1485 ; AVX512F-NEXT:  .LBB2_11: # %cond.store9
1486 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
1487 ; AVX512F-NEXT:    testb $64, %al
1488 ; AVX512F-NEXT:    je .LBB2_14
1489 ; AVX512F-NEXT:  .LBB2_13: # %cond.store11
1490 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
1491 ; AVX512F-NEXT:    testb $-128, %al
1492 ; AVX512F-NEXT:    je .LBB2_16
1493 ; AVX512F-NEXT:  .LBB2_15: # %cond.store13
1494 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
1495 ; AVX512F-NEXT:    vzeroupper
1496 ; AVX512F-NEXT:    retq
1498 ; AVX512BW-LABEL: truncstore_v8i64_v8i8:
1499 ; AVX512BW:       # %bb.0:
1500 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
1501 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
1502 ; AVX512BW-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1503 ; AVX512BW-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1504 ; AVX512BW-NEXT:    vpmovqb %zmm0, (%rdi) {%k1}
1505 ; AVX512BW-NEXT:    vzeroupper
1506 ; AVX512BW-NEXT:    retq
1508 ; AVX512BWVL-LABEL: truncstore_v8i64_v8i8:
1509 ; AVX512BWVL:       # %bb.0:
1510 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
1511 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1512 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1513 ; AVX512BWVL-NEXT:    vpmovqb %zmm0, (%rdi) {%k1}
1514 ; AVX512BWVL-NEXT:    vzeroupper
1515 ; AVX512BWVL-NEXT:    retq
1516   %a = icmp ne <8 x i32> %mask, zeroinitializer
1517   %b = icmp slt <8 x i64> %x, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127>
1518   %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>
1519   %d = icmp sgt <8 x i64> %c, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128>
1520   %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>
1521   %f = trunc <8 x i64> %e to <8 x i8>
1522   call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %f, <8 x i8>* %p, i32 1, <8 x i1> %a)
1523   ret void
1526 define void @truncstore_v4i64_v4i32(<4 x i64> %x, <4 x i32>* %p, <4 x i32> %mask) {
1527 ; SSE2-LABEL: truncstore_v4i64_v4i32:
1528 ; SSE2:       # %bb.0:
1529 ; SSE2-NEXT:    pxor %xmm9, %xmm9
1530 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483647,2147483647]
1531 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1532 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1533 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1534 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [4294967295,4294967295]
1535 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
1536 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1537 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
1538 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
1539 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1540 ; SSE2-NEXT:    pand %xmm3, %xmm6
1541 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1542 ; SSE2-NEXT:    por %xmm6, %xmm5
1543 ; SSE2-NEXT:    pand %xmm5, %xmm0
1544 ; SSE2-NEXT:    pandn %xmm8, %xmm5
1545 ; SSE2-NEXT:    por %xmm0, %xmm5
1546 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1547 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1548 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
1549 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
1550 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1551 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1552 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1553 ; SSE2-NEXT:    pand %xmm6, %xmm0
1554 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1555 ; SSE2-NEXT:    por %xmm0, %xmm3
1556 ; SSE2-NEXT:    pand %xmm3, %xmm1
1557 ; SSE2-NEXT:    pandn %xmm8, %xmm3
1558 ; SSE2-NEXT:    por %xmm1, %xmm3
1559 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744071562067968,18446744071562067968]
1560 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
1561 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1562 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [18446744069414584320,18446744069414584320]
1563 ; SSE2-NEXT:    movdqa %xmm0, %xmm7
1564 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
1565 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]
1566 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm0
1567 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1568 ; SSE2-NEXT:    pand %xmm1, %xmm0
1569 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[1,1,3,3]
1570 ; SSE2-NEXT:    por %xmm0, %xmm1
1571 ; SSE2-NEXT:    pand %xmm1, %xmm3
1572 ; SSE2-NEXT:    pandn %xmm8, %xmm1
1573 ; SSE2-NEXT:    por %xmm3, %xmm1
1574 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1575 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1576 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm0
1577 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[0,0,2,2]
1578 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
1579 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1580 ; SSE2-NEXT:    pand %xmm3, %xmm4
1581 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1582 ; SSE2-NEXT:    por %xmm4, %xmm0
1583 ; SSE2-NEXT:    pand %xmm0, %xmm5
1584 ; SSE2-NEXT:    pandn %xmm8, %xmm0
1585 ; SSE2-NEXT:    por %xmm5, %xmm0
1586 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
1587 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9
1588 ; SSE2-NEXT:    movmskps %xmm9, %eax
1589 ; SSE2-NEXT:    xorl $15, %eax
1590 ; SSE2-NEXT:    testb $1, %al
1591 ; SSE2-NEXT:    jne .LBB3_1
1592 ; SSE2-NEXT:  # %bb.2: # %else
1593 ; SSE2-NEXT:    testb $2, %al
1594 ; SSE2-NEXT:    jne .LBB3_3
1595 ; SSE2-NEXT:  .LBB3_4: # %else2
1596 ; SSE2-NEXT:    testb $4, %al
1597 ; SSE2-NEXT:    jne .LBB3_5
1598 ; SSE2-NEXT:  .LBB3_6: # %else4
1599 ; SSE2-NEXT:    testb $8, %al
1600 ; SSE2-NEXT:    jne .LBB3_7
1601 ; SSE2-NEXT:  .LBB3_8: # %else6
1602 ; SSE2-NEXT:    retq
1603 ; SSE2-NEXT:  .LBB3_1: # %cond.store
1604 ; SSE2-NEXT:    movss %xmm0, (%rdi)
1605 ; SSE2-NEXT:    testb $2, %al
1606 ; SSE2-NEXT:    je .LBB3_4
1607 ; SSE2-NEXT:  .LBB3_3: # %cond.store1
1608 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
1609 ; SSE2-NEXT:    movd %xmm1, 4(%rdi)
1610 ; SSE2-NEXT:    testb $4, %al
1611 ; SSE2-NEXT:    je .LBB3_6
1612 ; SSE2-NEXT:  .LBB3_5: # %cond.store3
1613 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
1614 ; SSE2-NEXT:    movd %xmm1, 8(%rdi)
1615 ; SSE2-NEXT:    testb $8, %al
1616 ; SSE2-NEXT:    je .LBB3_8
1617 ; SSE2-NEXT:  .LBB3_7: # %cond.store5
1618 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
1619 ; SSE2-NEXT:    movd %xmm0, 12(%rdi)
1620 ; SSE2-NEXT:    retq
1622 ; SSE4-LABEL: truncstore_v4i64_v4i32:
1623 ; SSE4:       # %bb.0:
1624 ; SSE4-NEXT:    movdqa %xmm0, %xmm3
1625 ; SSE4-NEXT:    pxor %xmm4, %xmm4
1626 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
1627 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1628 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
1629 ; SSE4-NEXT:    movdqa %xmm5, %xmm6
1630 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm6
1631 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1632 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1633 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
1634 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]
1635 ; SSE4-NEXT:    movapd %xmm5, %xmm0
1636 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1637 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
1638 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm3
1639 ; SSE4-NEXT:    movapd %xmm6, %xmm0
1640 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1641 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm1
1642 ; SSE4-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
1643 ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4
1644 ; SSE4-NEXT:    movmskps %xmm4, %eax
1645 ; SSE4-NEXT:    xorl $15, %eax
1646 ; SSE4-NEXT:    testb $1, %al
1647 ; SSE4-NEXT:    jne .LBB3_1
1648 ; SSE4-NEXT:  # %bb.2: # %else
1649 ; SSE4-NEXT:    testb $2, %al
1650 ; SSE4-NEXT:    jne .LBB3_3
1651 ; SSE4-NEXT:  .LBB3_4: # %else2
1652 ; SSE4-NEXT:    testb $4, %al
1653 ; SSE4-NEXT:    jne .LBB3_5
1654 ; SSE4-NEXT:  .LBB3_6: # %else4
1655 ; SSE4-NEXT:    testb $8, %al
1656 ; SSE4-NEXT:    jne .LBB3_7
1657 ; SSE4-NEXT:  .LBB3_8: # %else6
1658 ; SSE4-NEXT:    retq
1659 ; SSE4-NEXT:  .LBB3_1: # %cond.store
1660 ; SSE4-NEXT:    movss %xmm1, (%rdi)
1661 ; SSE4-NEXT:    testb $2, %al
1662 ; SSE4-NEXT:    je .LBB3_4
1663 ; SSE4-NEXT:  .LBB3_3: # %cond.store1
1664 ; SSE4-NEXT:    extractps $1, %xmm1, 4(%rdi)
1665 ; SSE4-NEXT:    testb $4, %al
1666 ; SSE4-NEXT:    je .LBB3_6
1667 ; SSE4-NEXT:  .LBB3_5: # %cond.store3
1668 ; SSE4-NEXT:    extractps $2, %xmm1, 8(%rdi)
1669 ; SSE4-NEXT:    testb $8, %al
1670 ; SSE4-NEXT:    je .LBB3_8
1671 ; SSE4-NEXT:  .LBB3_7: # %cond.store5
1672 ; SSE4-NEXT:    extractps $3, %xmm1, 12(%rdi)
1673 ; SSE4-NEXT:    retq
1675 ; AVX1-LABEL: truncstore_v4i64_v4i32:
1676 ; AVX1:       # %bb.0:
1677 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1678 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1679 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1680 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1681 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1682 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [2147483647,2147483647]
1683 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm4
1684 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm5
1685 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm3, %xmm0
1686 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [18446744071562067968,18446744071562067968]
1687 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm6
1688 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm2, %xmm3, %xmm2
1689 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm2, %xmm3
1690 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm2, %xmm5, %xmm2
1691 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm5, %xmm0
1692 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1693 ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
1694 ; AVX1-NEXT:    vzeroupper
1695 ; AVX1-NEXT:    retq
1697 ; AVX2-LABEL: truncstore_v4i64_v4i32:
1698 ; AVX2:       # %bb.0:
1699 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1700 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1701 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
1702 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
1703 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [2147483647,2147483647,2147483647,2147483647]
1704 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
1705 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1706 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
1707 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm3
1708 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1709 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm2
1710 ; AVX2-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1711 ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
1712 ; AVX2-NEXT:    vzeroupper
1713 ; AVX2-NEXT:    retq
1715 ; AVX512F-LABEL: truncstore_v4i64_v4i32:
1716 ; AVX512F:       # %bb.0:
1717 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1718 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1719 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
1720 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
1721 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
1722 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647]
1723 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
1724 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
1725 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
1726 ; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
1727 ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1728 ; AVX512F-NEXT:    vzeroupper
1729 ; AVX512F-NEXT:    retq
1731 ; AVX512VL-LABEL: truncstore_v4i64_v4i32:
1732 ; AVX512VL:       # %bb.0:
1733 ; AVX512VL-NEXT:    vptestmd %xmm1, %xmm1, %k1
1734 ; AVX512VL-NEXT:    vpminsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
1735 ; AVX512VL-NEXT:    vpmaxsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
1736 ; AVX512VL-NEXT:    vpmovqd %ymm0, (%rdi) {%k1}
1737 ; AVX512VL-NEXT:    vzeroupper
1738 ; AVX512VL-NEXT:    retq
1740 ; AVX512BW-LABEL: truncstore_v4i64_v4i32:
1741 ; AVX512BW:       # %bb.0:
1742 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
1743 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
1744 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
1745 ; AVX512BW-NEXT:    kshiftlw $12, %k0, %k0
1746 ; AVX512BW-NEXT:    kshiftrw $12, %k0, %k1
1747 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647]
1748 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
1749 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
1750 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
1751 ; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
1752 ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
1753 ; AVX512BW-NEXT:    vzeroupper
1754 ; AVX512BW-NEXT:    retq
1755   %a = icmp ne <4 x i32> %mask, zeroinitializer
1756   %b = icmp slt <4 x i64> %x, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
1757   %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647>
1758   %d = icmp sgt <4 x i64> %c, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
1759   %e = select <4 x i1> %d, <4 x i64> %c, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648>
1760   %f = trunc <4 x i64> %e to <4 x i32>
1761   call void @llvm.masked.store.v4i32.p0v4i32(<4 x i32> %f, <4 x i32>* %p, i32 1, <4 x i1> %a)
1762   ret void
1765 define void @truncstore_v4i64_v4i16(<4 x i64> %x, <4 x i16>* %p, <4 x i32> %mask) {
1766 ; SSE2-LABEL: truncstore_v4i64_v4i16:
1767 ; SSE2:       # %bb.0:
1768 ; SSE2-NEXT:    pxor %xmm9, %xmm9
1769 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32767,32767]
1770 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1771 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
1772 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1773 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147516415,2147516415]
1774 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
1775 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1776 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
1777 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
1778 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1779 ; SSE2-NEXT:    pand %xmm3, %xmm6
1780 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1781 ; SSE2-NEXT:    por %xmm6, %xmm5
1782 ; SSE2-NEXT:    pand %xmm5, %xmm1
1783 ; SSE2-NEXT:    pandn %xmm8, %xmm5
1784 ; SSE2-NEXT:    por %xmm1, %xmm5
1785 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1786 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1787 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
1788 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
1789 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1790 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
1791 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1792 ; SSE2-NEXT:    pand %xmm6, %xmm1
1793 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1794 ; SSE2-NEXT:    por %xmm1, %xmm3
1795 ; SSE2-NEXT:    pand %xmm3, %xmm0
1796 ; SSE2-NEXT:    pandn %xmm8, %xmm3
1797 ; SSE2-NEXT:    por %xmm0, %xmm3
1798 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744073709518848,18446744073709518848]
1799 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
1800 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1801 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [18446744071562035200,18446744071562035200]
1802 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
1803 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
1804 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]
1805 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm1
1806 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1807 ; SSE2-NEXT:    pand %xmm0, %xmm1
1808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
1809 ; SSE2-NEXT:    por %xmm1, %xmm0
1810 ; SSE2-NEXT:    pand %xmm0, %xmm3
1811 ; SSE2-NEXT:    pandn %xmm8, %xmm0
1812 ; SSE2-NEXT:    por %xmm3, %xmm0
1813 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1814 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
1815 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm1
1816 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1817 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm4
1818 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1819 ; SSE2-NEXT:    pand %xmm3, %xmm4
1820 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1821 ; SSE2-NEXT:    por %xmm4, %xmm1
1822 ; SSE2-NEXT:    pand %xmm1, %xmm5
1823 ; SSE2-NEXT:    pandn %xmm8, %xmm1
1824 ; SSE2-NEXT:    por %xmm5, %xmm1
1825 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1826 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
1827 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1828 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1829 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1830 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9
1831 ; SSE2-NEXT:    movmskps %xmm9, %eax
1832 ; SSE2-NEXT:    xorl $15, %eax
1833 ; SSE2-NEXT:    testb $1, %al
1834 ; SSE2-NEXT:    jne .LBB4_1
1835 ; SSE2-NEXT:  # %bb.2: # %else
1836 ; SSE2-NEXT:    testb $2, %al
1837 ; SSE2-NEXT:    jne .LBB4_3
1838 ; SSE2-NEXT:  .LBB4_4: # %else2
1839 ; SSE2-NEXT:    testb $4, %al
1840 ; SSE2-NEXT:    jne .LBB4_5
1841 ; SSE2-NEXT:  .LBB4_6: # %else4
1842 ; SSE2-NEXT:    testb $8, %al
1843 ; SSE2-NEXT:    jne .LBB4_7
1844 ; SSE2-NEXT:  .LBB4_8: # %else6
1845 ; SSE2-NEXT:    retq
1846 ; SSE2-NEXT:  .LBB4_1: # %cond.store
1847 ; SSE2-NEXT:    movd %xmm0, %ecx
1848 ; SSE2-NEXT:    movw %cx, (%rdi)
1849 ; SSE2-NEXT:    testb $2, %al
1850 ; SSE2-NEXT:    je .LBB4_4
1851 ; SSE2-NEXT:  .LBB4_3: # %cond.store1
1852 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
1853 ; SSE2-NEXT:    movw %cx, 2(%rdi)
1854 ; SSE2-NEXT:    testb $4, %al
1855 ; SSE2-NEXT:    je .LBB4_6
1856 ; SSE2-NEXT:  .LBB4_5: # %cond.store3
1857 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
1858 ; SSE2-NEXT:    movw %cx, 4(%rdi)
1859 ; SSE2-NEXT:    testb $8, %al
1860 ; SSE2-NEXT:    je .LBB4_8
1861 ; SSE2-NEXT:  .LBB4_7: # %cond.store5
1862 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
1863 ; SSE2-NEXT:    movw %ax, 6(%rdi)
1864 ; SSE2-NEXT:    retq
1866 ; SSE4-LABEL: truncstore_v4i64_v4i16:
1867 ; SSE4:       # %bb.0:
1868 ; SSE4-NEXT:    movdqa %xmm0, %xmm3
1869 ; SSE4-NEXT:    pxor %xmm4, %xmm4
1870 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [32767,32767]
1871 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1872 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1873 ; SSE4-NEXT:    movdqa %xmm5, %xmm6
1874 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6
1875 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
1876 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
1877 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5
1878 ; SSE4-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]
1879 ; SSE4-NEXT:    movapd %xmm5, %xmm0
1880 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1881 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
1882 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm3
1883 ; SSE4-NEXT:    movapd %xmm6, %xmm0
1884 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
1885 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm1
1886 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
1887 ; SSE4-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]
1888 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
1889 ; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1890 ; SSE4-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1891 ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4
1892 ; SSE4-NEXT:    movmskps %xmm4, %eax
1893 ; SSE4-NEXT:    xorl $15, %eax
1894 ; SSE4-NEXT:    testb $1, %al
1895 ; SSE4-NEXT:    jne .LBB4_1
1896 ; SSE4-NEXT:  # %bb.2: # %else
1897 ; SSE4-NEXT:    testb $2, %al
1898 ; SSE4-NEXT:    jne .LBB4_3
1899 ; SSE4-NEXT:  .LBB4_4: # %else2
1900 ; SSE4-NEXT:    testb $4, %al
1901 ; SSE4-NEXT:    jne .LBB4_5
1902 ; SSE4-NEXT:  .LBB4_6: # %else4
1903 ; SSE4-NEXT:    testb $8, %al
1904 ; SSE4-NEXT:    jne .LBB4_7
1905 ; SSE4-NEXT:  .LBB4_8: # %else6
1906 ; SSE4-NEXT:    retq
1907 ; SSE4-NEXT:  .LBB4_1: # %cond.store
1908 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
1909 ; SSE4-NEXT:    testb $2, %al
1910 ; SSE4-NEXT:    je .LBB4_4
1911 ; SSE4-NEXT:  .LBB4_3: # %cond.store1
1912 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
1913 ; SSE4-NEXT:    testb $4, %al
1914 ; SSE4-NEXT:    je .LBB4_6
1915 ; SSE4-NEXT:  .LBB4_5: # %cond.store3
1916 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
1917 ; SSE4-NEXT:    testb $8, %al
1918 ; SSE4-NEXT:    je .LBB4_8
1919 ; SSE4-NEXT:  .LBB4_7: # %cond.store5
1920 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
1921 ; SSE4-NEXT:    retq
1923 ; AVX1-LABEL: truncstore_v4i64_v4i16:
1924 ; AVX1:       # %bb.0:
1925 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1926 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1927 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [32767,32767]
1928 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm5
1929 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm6
1930 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
1931 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [18446744073709518848,18446744073709518848]
1932 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm7
1933 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm3, %xmm4, %xmm3
1934 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4
1935 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
1936 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]
1937 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
1938 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm0, %xmm6, %xmm0
1939 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
1940 ; AVX1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1941 ; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1942 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1943 ; AVX1-NEXT:    vmovmskps %xmm1, %eax
1944 ; AVX1-NEXT:    xorl $15, %eax
1945 ; AVX1-NEXT:    testb $1, %al
1946 ; AVX1-NEXT:    jne .LBB4_1
1947 ; AVX1-NEXT:  # %bb.2: # %else
1948 ; AVX1-NEXT:    testb $2, %al
1949 ; AVX1-NEXT:    jne .LBB4_3
1950 ; AVX1-NEXT:  .LBB4_4: # %else2
1951 ; AVX1-NEXT:    testb $4, %al
1952 ; AVX1-NEXT:    jne .LBB4_5
1953 ; AVX1-NEXT:  .LBB4_6: # %else4
1954 ; AVX1-NEXT:    testb $8, %al
1955 ; AVX1-NEXT:    jne .LBB4_7
1956 ; AVX1-NEXT:  .LBB4_8: # %else6
1957 ; AVX1-NEXT:    vzeroupper
1958 ; AVX1-NEXT:    retq
1959 ; AVX1-NEXT:  .LBB4_1: # %cond.store
1960 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
1961 ; AVX1-NEXT:    testb $2, %al
1962 ; AVX1-NEXT:    je .LBB4_4
1963 ; AVX1-NEXT:  .LBB4_3: # %cond.store1
1964 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
1965 ; AVX1-NEXT:    testb $4, %al
1966 ; AVX1-NEXT:    je .LBB4_6
1967 ; AVX1-NEXT:  .LBB4_5: # %cond.store3
1968 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
1969 ; AVX1-NEXT:    testb $8, %al
1970 ; AVX1-NEXT:    je .LBB4_8
1971 ; AVX1-NEXT:  .LBB4_7: # %cond.store5
1972 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
1973 ; AVX1-NEXT:    vzeroupper
1974 ; AVX1-NEXT:    retq
1976 ; AVX2-LABEL: truncstore_v4i64_v4i16:
1977 ; AVX2:       # %bb.0:
1978 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1979 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [32767,32767,32767,32767]
1980 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm3, %ymm4
1981 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1982 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
1983 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4
1984 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1985 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3
1986 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm3 = xmm3[0,2,2,3]
1987 ; AVX2-NEXT:    vpshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
1988 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
1989 ; AVX2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1990 ; AVX2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1991 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
1992 ; AVX2-NEXT:    vmovmskps %xmm1, %eax
1993 ; AVX2-NEXT:    xorl $15, %eax
1994 ; AVX2-NEXT:    testb $1, %al
1995 ; AVX2-NEXT:    jne .LBB4_1
1996 ; AVX2-NEXT:  # %bb.2: # %else
1997 ; AVX2-NEXT:    testb $2, %al
1998 ; AVX2-NEXT:    jne .LBB4_3
1999 ; AVX2-NEXT:  .LBB4_4: # %else2
2000 ; AVX2-NEXT:    testb $4, %al
2001 ; AVX2-NEXT:    jne .LBB4_5
2002 ; AVX2-NEXT:  .LBB4_6: # %else4
2003 ; AVX2-NEXT:    testb $8, %al
2004 ; AVX2-NEXT:    jne .LBB4_7
2005 ; AVX2-NEXT:  .LBB4_8: # %else6
2006 ; AVX2-NEXT:    vzeroupper
2007 ; AVX2-NEXT:    retq
2008 ; AVX2-NEXT:  .LBB4_1: # %cond.store
2009 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
2010 ; AVX2-NEXT:    testb $2, %al
2011 ; AVX2-NEXT:    je .LBB4_4
2012 ; AVX2-NEXT:  .LBB4_3: # %cond.store1
2013 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2014 ; AVX2-NEXT:    testb $4, %al
2015 ; AVX2-NEXT:    je .LBB4_6
2016 ; AVX2-NEXT:  .LBB4_5: # %cond.store3
2017 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2018 ; AVX2-NEXT:    testb $8, %al
2019 ; AVX2-NEXT:    je .LBB4_8
2020 ; AVX2-NEXT:  .LBB4_7: # %cond.store5
2021 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2022 ; AVX2-NEXT:    vzeroupper
2023 ; AVX2-NEXT:    retq
2025 ; AVX512F-LABEL: truncstore_v4i64_v4i16:
2026 ; AVX512F:       # %bb.0:
2027 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2028 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2029 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
2030 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32767,32767,32767,32767]
2031 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2032 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
2033 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2034 ; AVX512F-NEXT:    vpmovqw %zmm0, %xmm0
2035 ; AVX512F-NEXT:    kmovw %k0, %eax
2036 ; AVX512F-NEXT:    testb $1, %al
2037 ; AVX512F-NEXT:    jne .LBB4_1
2038 ; AVX512F-NEXT:  # %bb.2: # %else
2039 ; AVX512F-NEXT:    testb $2, %al
2040 ; AVX512F-NEXT:    jne .LBB4_3
2041 ; AVX512F-NEXT:  .LBB4_4: # %else2
2042 ; AVX512F-NEXT:    testb $4, %al
2043 ; AVX512F-NEXT:    jne .LBB4_5
2044 ; AVX512F-NEXT:  .LBB4_6: # %else4
2045 ; AVX512F-NEXT:    testb $8, %al
2046 ; AVX512F-NEXT:    jne .LBB4_7
2047 ; AVX512F-NEXT:  .LBB4_8: # %else6
2048 ; AVX512F-NEXT:    vzeroupper
2049 ; AVX512F-NEXT:    retq
2050 ; AVX512F-NEXT:  .LBB4_1: # %cond.store
2051 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
2052 ; AVX512F-NEXT:    testb $2, %al
2053 ; AVX512F-NEXT:    je .LBB4_4
2054 ; AVX512F-NEXT:  .LBB4_3: # %cond.store1
2055 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2056 ; AVX512F-NEXT:    testb $4, %al
2057 ; AVX512F-NEXT:    je .LBB4_6
2058 ; AVX512F-NEXT:  .LBB4_5: # %cond.store3
2059 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
2060 ; AVX512F-NEXT:    testb $8, %al
2061 ; AVX512F-NEXT:    je .LBB4_8
2062 ; AVX512F-NEXT:  .LBB4_7: # %cond.store5
2063 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
2064 ; AVX512F-NEXT:    vzeroupper
2065 ; AVX512F-NEXT:    retq
2067 ; AVX512BW-LABEL: truncstore_v4i64_v4i16:
2068 ; AVX512BW:       # %bb.0:
2069 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2070 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2071 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
2072 ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0
2073 ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1
2074 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [32767,32767,32767,32767]
2075 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2076 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
2077 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2078 ; AVX512BW-NEXT:    vpmovqw %zmm0, %xmm0
2079 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
2080 ; AVX512BW-NEXT:    vzeroupper
2081 ; AVX512BW-NEXT:    retq
2083 ; AVX512BWVL-LABEL: truncstore_v4i64_v4i16:
2084 ; AVX512BWVL:       # %bb.0:
2085 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
2086 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2087 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2088 ; AVX512BWVL-NEXT:    vpmovqw %ymm0, (%rdi) {%k1}
2089 ; AVX512BWVL-NEXT:    vzeroupper
2090 ; AVX512BWVL-NEXT:    retq
2091   %a = icmp ne <4 x i32> %mask, zeroinitializer
2092   %b = icmp slt <4 x i64> %x, <i64 32767, i64 32767, i64 32767, i64 32767>
2093   %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 32767, i64 32767, i64 32767, i64 32767>
2094   %d = icmp sgt <4 x i64> %c, <i64 -32768, i64 -32768, i64 -32768, i64 -32768>
2095   %e = select <4 x i1> %d, <4 x i64> %c, <4 x i64> <i64 -32768, i64 -32768, i64 -32768, i64 -32768>
2096   %f = trunc <4 x i64> %e to <4 x i16>
2097   call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> %f, <4 x i16>* %p, i32 1, <4 x i1> %a)
2098   ret void
2101 define void @truncstore_v4i64_v4i8(<4 x i64> %x, <4 x i8>* %p, <4 x i32> %mask) {
2102 ; SSE2-LABEL: truncstore_v4i64_v4i8:
2103 ; SSE2:       # %bb.0:
2104 ; SSE2-NEXT:    pxor %xmm9, %xmm9
2105 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [127,127]
2106 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
2107 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
2108 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2109 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483775,2147483775]
2110 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
2111 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
2112 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm7[0,0,2,2]
2113 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
2114 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
2115 ; SSE2-NEXT:    pand %xmm3, %xmm6
2116 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
2117 ; SSE2-NEXT:    por %xmm6, %xmm5
2118 ; SSE2-NEXT:    pand %xmm5, %xmm1
2119 ; SSE2-NEXT:    pandn %xmm8, %xmm5
2120 ; SSE2-NEXT:    por %xmm1, %xmm5
2121 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2122 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2123 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
2124 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
2125 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
2126 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
2127 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2128 ; SSE2-NEXT:    pand %xmm6, %xmm1
2129 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2130 ; SSE2-NEXT:    por %xmm1, %xmm3
2131 ; SSE2-NEXT:    pand %xmm3, %xmm0
2132 ; SSE2-NEXT:    pandn %xmm8, %xmm3
2133 ; SSE2-NEXT:    por %xmm0, %xmm3
2134 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488]
2135 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
2136 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2137 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [18446744071562067840,18446744071562067840]
2138 ; SSE2-NEXT:    movdqa %xmm0, %xmm7
2139 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm7
2140 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[0,0,2,2]
2141 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
2142 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
2143 ; SSE2-NEXT:    pand %xmm1, %xmm6
2144 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
2145 ; SSE2-NEXT:    por %xmm6, %xmm0
2146 ; SSE2-NEXT:    pand %xmm0, %xmm3
2147 ; SSE2-NEXT:    pandn %xmm8, %xmm0
2148 ; SSE2-NEXT:    por %xmm3, %xmm0
2149 ; SSE2-NEXT:    pxor %xmm5, %xmm4
2150 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
2151 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1
2152 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
2153 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm4
2154 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2155 ; SSE2-NEXT:    pand %xmm3, %xmm4
2156 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2157 ; SSE2-NEXT:    por %xmm4, %xmm1
2158 ; SSE2-NEXT:    pand %xmm1, %xmm5
2159 ; SSE2-NEXT:    pandn %xmm8, %xmm1
2160 ; SSE2-NEXT:    por %xmm5, %xmm1
2161 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2162 ; SSE2-NEXT:    pand %xmm3, %xmm1
2163 ; SSE2-NEXT:    pand %xmm3, %xmm0
2164 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
2165 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
2166 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
2167 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm9
2168 ; SSE2-NEXT:    movmskps %xmm9, %ecx
2169 ; SSE2-NEXT:    xorl $15, %ecx
2170 ; SSE2-NEXT:    testb $1, %cl
2171 ; SSE2-NEXT:    movd %xmm0, %eax
2172 ; SSE2-NEXT:    jne .LBB5_1
2173 ; SSE2-NEXT:  # %bb.2: # %else
2174 ; SSE2-NEXT:    testb $2, %cl
2175 ; SSE2-NEXT:    jne .LBB5_3
2176 ; SSE2-NEXT:  .LBB5_4: # %else2
2177 ; SSE2-NEXT:    testb $4, %cl
2178 ; SSE2-NEXT:    jne .LBB5_5
2179 ; SSE2-NEXT:  .LBB5_6: # %else4
2180 ; SSE2-NEXT:    testb $8, %cl
2181 ; SSE2-NEXT:    jne .LBB5_7
2182 ; SSE2-NEXT:  .LBB5_8: # %else6
2183 ; SSE2-NEXT:    retq
2184 ; SSE2-NEXT:  .LBB5_1: # %cond.store
2185 ; SSE2-NEXT:    movb %al, (%rdi)
2186 ; SSE2-NEXT:    testb $2, %cl
2187 ; SSE2-NEXT:    je .LBB5_4
2188 ; SSE2-NEXT:  .LBB5_3: # %cond.store1
2189 ; SSE2-NEXT:    movb %ah, 1(%rdi)
2190 ; SSE2-NEXT:    testb $4, %cl
2191 ; SSE2-NEXT:    je .LBB5_6
2192 ; SSE2-NEXT:  .LBB5_5: # %cond.store3
2193 ; SSE2-NEXT:    movl %eax, %edx
2194 ; SSE2-NEXT:    shrl $16, %edx
2195 ; SSE2-NEXT:    movb %dl, 2(%rdi)
2196 ; SSE2-NEXT:    testb $8, %cl
2197 ; SSE2-NEXT:    je .LBB5_8
2198 ; SSE2-NEXT:  .LBB5_7: # %cond.store5
2199 ; SSE2-NEXT:    shrl $24, %eax
2200 ; SSE2-NEXT:    movb %al, 3(%rdi)
2201 ; SSE2-NEXT:    retq
2203 ; SSE4-LABEL: truncstore_v4i64_v4i8:
2204 ; SSE4:       # %bb.0:
2205 ; SSE4-NEXT:    movdqa %xmm0, %xmm3
2206 ; SSE4-NEXT:    pxor %xmm4, %xmm4
2207 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [127,127]
2208 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
2209 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
2210 ; SSE4-NEXT:    movdqa %xmm5, %xmm6
2211 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6
2212 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
2213 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
2214 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm5
2215 ; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488]
2216 ; SSE4-NEXT:    movapd %xmm5, %xmm0
2217 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
2218 ; SSE4-NEXT:    movdqa %xmm3, %xmm1
2219 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm1
2220 ; SSE4-NEXT:    movapd %xmm6, %xmm0
2221 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
2222 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm3
2223 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2224 ; SSE4-NEXT:    pshufb %xmm0, %xmm3
2225 ; SSE4-NEXT:    pshufb %xmm0, %xmm1
2226 ; SSE4-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
2227 ; SSE4-NEXT:    pcmpeqd %xmm2, %xmm4
2228 ; SSE4-NEXT:    movmskps %xmm4, %eax
2229 ; SSE4-NEXT:    xorl $15, %eax
2230 ; SSE4-NEXT:    testb $1, %al
2231 ; SSE4-NEXT:    jne .LBB5_1
2232 ; SSE4-NEXT:  # %bb.2: # %else
2233 ; SSE4-NEXT:    testb $2, %al
2234 ; SSE4-NEXT:    jne .LBB5_3
2235 ; SSE4-NEXT:  .LBB5_4: # %else2
2236 ; SSE4-NEXT:    testb $4, %al
2237 ; SSE4-NEXT:    jne .LBB5_5
2238 ; SSE4-NEXT:  .LBB5_6: # %else4
2239 ; SSE4-NEXT:    testb $8, %al
2240 ; SSE4-NEXT:    jne .LBB5_7
2241 ; SSE4-NEXT:  .LBB5_8: # %else6
2242 ; SSE4-NEXT:    retq
2243 ; SSE4-NEXT:  .LBB5_1: # %cond.store
2244 ; SSE4-NEXT:    pextrb $0, %xmm1, (%rdi)
2245 ; SSE4-NEXT:    testb $2, %al
2246 ; SSE4-NEXT:    je .LBB5_4
2247 ; SSE4-NEXT:  .LBB5_3: # %cond.store1
2248 ; SSE4-NEXT:    pextrb $1, %xmm1, 1(%rdi)
2249 ; SSE4-NEXT:    testb $4, %al
2250 ; SSE4-NEXT:    je .LBB5_6
2251 ; SSE4-NEXT:  .LBB5_5: # %cond.store3
2252 ; SSE4-NEXT:    pextrb $2, %xmm1, 2(%rdi)
2253 ; SSE4-NEXT:    testb $8, %al
2254 ; SSE4-NEXT:    je .LBB5_8
2255 ; SSE4-NEXT:  .LBB5_7: # %cond.store5
2256 ; SSE4-NEXT:    pextrb $3, %xmm1, 3(%rdi)
2257 ; SSE4-NEXT:    retq
2259 ; AVX1-LABEL: truncstore_v4i64_v4i8:
2260 ; AVX1:       # %bb.0:
2261 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2262 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2263 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [127,127]
2264 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm5
2265 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm6
2266 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
2267 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [18446744073709551488,18446744073709551488]
2268 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm0, %xmm7
2269 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm3, %xmm4, %xmm3
2270 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm4
2271 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
2272 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2273 ; AVX1-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
2274 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm0, %xmm6, %xmm0
2275 ; AVX1-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
2276 ; AVX1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
2277 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
2278 ; AVX1-NEXT:    vmovmskps %xmm1, %eax
2279 ; AVX1-NEXT:    xorl $15, %eax
2280 ; AVX1-NEXT:    testb $1, %al
2281 ; AVX1-NEXT:    jne .LBB5_1
2282 ; AVX1-NEXT:  # %bb.2: # %else
2283 ; AVX1-NEXT:    testb $2, %al
2284 ; AVX1-NEXT:    jne .LBB5_3
2285 ; AVX1-NEXT:  .LBB5_4: # %else2
2286 ; AVX1-NEXT:    testb $4, %al
2287 ; AVX1-NEXT:    jne .LBB5_5
2288 ; AVX1-NEXT:  .LBB5_6: # %else4
2289 ; AVX1-NEXT:    testb $8, %al
2290 ; AVX1-NEXT:    jne .LBB5_7
2291 ; AVX1-NEXT:  .LBB5_8: # %else6
2292 ; AVX1-NEXT:    vzeroupper
2293 ; AVX1-NEXT:    retq
2294 ; AVX1-NEXT:  .LBB5_1: # %cond.store
2295 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
2296 ; AVX1-NEXT:    testb $2, %al
2297 ; AVX1-NEXT:    je .LBB5_4
2298 ; AVX1-NEXT:  .LBB5_3: # %cond.store1
2299 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2300 ; AVX1-NEXT:    testb $4, %al
2301 ; AVX1-NEXT:    je .LBB5_6
2302 ; AVX1-NEXT:  .LBB5_5: # %cond.store3
2303 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2304 ; AVX1-NEXT:    testb $8, %al
2305 ; AVX1-NEXT:    je .LBB5_8
2306 ; AVX1-NEXT:  .LBB5_7: # %cond.store5
2307 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2308 ; AVX1-NEXT:    vzeroupper
2309 ; AVX1-NEXT:    retq
2311 ; AVX2-LABEL: truncstore_v4i64_v4i8:
2312 ; AVX2:       # %bb.0:
2313 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2314 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [127,127,127,127]
2315 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm3, %ymm4
2316 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
2317 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm3 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2318 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm0, %ymm4
2319 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
2320 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm3
2321 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2322 ; AVX2-NEXT:    vpshufb %xmm4, %xmm3, %xmm3
2323 ; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
2324 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
2325 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
2326 ; AVX2-NEXT:    vmovmskps %xmm1, %eax
2327 ; AVX2-NEXT:    xorl $15, %eax
2328 ; AVX2-NEXT:    testb $1, %al
2329 ; AVX2-NEXT:    jne .LBB5_1
2330 ; AVX2-NEXT:  # %bb.2: # %else
2331 ; AVX2-NEXT:    testb $2, %al
2332 ; AVX2-NEXT:    jne .LBB5_3
2333 ; AVX2-NEXT:  .LBB5_4: # %else2
2334 ; AVX2-NEXT:    testb $4, %al
2335 ; AVX2-NEXT:    jne .LBB5_5
2336 ; AVX2-NEXT:  .LBB5_6: # %else4
2337 ; AVX2-NEXT:    testb $8, %al
2338 ; AVX2-NEXT:    jne .LBB5_7
2339 ; AVX2-NEXT:  .LBB5_8: # %else6
2340 ; AVX2-NEXT:    vzeroupper
2341 ; AVX2-NEXT:    retq
2342 ; AVX2-NEXT:  .LBB5_1: # %cond.store
2343 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
2344 ; AVX2-NEXT:    testb $2, %al
2345 ; AVX2-NEXT:    je .LBB5_4
2346 ; AVX2-NEXT:  .LBB5_3: # %cond.store1
2347 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2348 ; AVX2-NEXT:    testb $4, %al
2349 ; AVX2-NEXT:    je .LBB5_6
2350 ; AVX2-NEXT:  .LBB5_5: # %cond.store3
2351 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2352 ; AVX2-NEXT:    testb $8, %al
2353 ; AVX2-NEXT:    je .LBB5_8
2354 ; AVX2-NEXT:  .LBB5_7: # %cond.store5
2355 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2356 ; AVX2-NEXT:    vzeroupper
2357 ; AVX2-NEXT:    retq
2359 ; AVX512F-LABEL: truncstore_v4i64_v4i8:
2360 ; AVX512F:       # %bb.0:
2361 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2362 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2363 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
2364 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [127,127,127,127]
2365 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2366 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2367 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2368 ; AVX512F-NEXT:    vpmovqb %zmm0, %xmm0
2369 ; AVX512F-NEXT:    kmovw %k0, %eax
2370 ; AVX512F-NEXT:    testb $1, %al
2371 ; AVX512F-NEXT:    jne .LBB5_1
2372 ; AVX512F-NEXT:  # %bb.2: # %else
2373 ; AVX512F-NEXT:    testb $2, %al
2374 ; AVX512F-NEXT:    jne .LBB5_3
2375 ; AVX512F-NEXT:  .LBB5_4: # %else2
2376 ; AVX512F-NEXT:    testb $4, %al
2377 ; AVX512F-NEXT:    jne .LBB5_5
2378 ; AVX512F-NEXT:  .LBB5_6: # %else4
2379 ; AVX512F-NEXT:    testb $8, %al
2380 ; AVX512F-NEXT:    jne .LBB5_7
2381 ; AVX512F-NEXT:  .LBB5_8: # %else6
2382 ; AVX512F-NEXT:    vzeroupper
2383 ; AVX512F-NEXT:    retq
2384 ; AVX512F-NEXT:  .LBB5_1: # %cond.store
2385 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
2386 ; AVX512F-NEXT:    testb $2, %al
2387 ; AVX512F-NEXT:    je .LBB5_4
2388 ; AVX512F-NEXT:  .LBB5_3: # %cond.store1
2389 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2390 ; AVX512F-NEXT:    testb $4, %al
2391 ; AVX512F-NEXT:    je .LBB5_6
2392 ; AVX512F-NEXT:  .LBB5_5: # %cond.store3
2393 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
2394 ; AVX512F-NEXT:    testb $8, %al
2395 ; AVX512F-NEXT:    je .LBB5_8
2396 ; AVX512F-NEXT:  .LBB5_7: # %cond.store5
2397 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
2398 ; AVX512F-NEXT:    vzeroupper
2399 ; AVX512F-NEXT:    retq
2401 ; AVX512BW-LABEL: truncstore_v4i64_v4i8:
2402 ; AVX512BW:       # %bb.0:
2403 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2404 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
2405 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
2406 ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0
2407 ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1
2408 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [127,127,127,127]
2409 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2410 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2411 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2412 ; AVX512BW-NEXT:    vpmovqb %zmm0, %xmm0
2413 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
2414 ; AVX512BW-NEXT:    vzeroupper
2415 ; AVX512BW-NEXT:    retq
2417 ; AVX512BWVL-LABEL: truncstore_v4i64_v4i8:
2418 ; AVX512BWVL:       # %bb.0:
2419 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
2420 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2421 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip){1to4}, %ymm0, %ymm0
2422 ; AVX512BWVL-NEXT:    vpmovqb %ymm0, (%rdi) {%k1}
2423 ; AVX512BWVL-NEXT:    vzeroupper
2424 ; AVX512BWVL-NEXT:    retq
2425   %a = icmp ne <4 x i32> %mask, zeroinitializer
2426   %b = icmp slt <4 x i64> %x, <i64 127, i64 127, i64 127, i64 127>
2427   %c = select <4 x i1> %b, <4 x i64> %x, <4 x i64> <i64 127, i64 127, i64 127, i64 127>
2428   %d = icmp sgt <4 x i64> %c, <i64 -128, i64 -128, i64 -128, i64 -128>
2429   %e = select <4 x i1> %d, <4 x i64> %c, <4 x i64> <i64 -128, i64 -128, i64 -128, i64 -128>
2430   %f = trunc <4 x i64> %e to <4 x i8>
2431   call void @llvm.masked.store.v4i8.p0v4i8(<4 x i8> %f, <4 x i8>* %p, i32 1, <4 x i1> %a)
2432   ret void
2435 define void @truncstore_v2i64_v2i32(<2 x i64> %x, <2 x i32>* %p, <2 x i64> %mask) {
2436 ; SSE2-LABEL: truncstore_v2i64_v2i32:
2437 ; SSE2:       # %bb.0:
2438 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2439 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
2440 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2441 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2442 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [4294967295,4294967295]
2443 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2444 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2445 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2446 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2447 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2448 ; SSE2-NEXT:    pand %xmm7, %xmm4
2449 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2450 ; SSE2-NEXT:    por %xmm4, %xmm5
2451 ; SSE2-NEXT:    pand %xmm5, %xmm0
2452 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm5
2453 ; SSE2-NEXT:    por %xmm0, %xmm5
2454 ; SSE2-NEXT:    pxor %xmm5, %xmm3
2455 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18446744069414584320,18446744069414584320]
2456 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2457 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2458 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2459 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
2460 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
2461 ; SSE2-NEXT:    pand %xmm6, %xmm0
2462 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2463 ; SSE2-NEXT:    por %xmm0, %xmm3
2464 ; SSE2-NEXT:    pand %xmm3, %xmm5
2465 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3
2466 ; SSE2-NEXT:    por %xmm5, %xmm3
2467 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
2468 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
2469 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
2470 ; SSE2-NEXT:    pand %xmm2, %xmm1
2471 ; SSE2-NEXT:    movmskpd %xmm1, %eax
2472 ; SSE2-NEXT:    xorl $3, %eax
2473 ; SSE2-NEXT:    testb $1, %al
2474 ; SSE2-NEXT:    jne .LBB6_1
2475 ; SSE2-NEXT:  # %bb.2: # %else
2476 ; SSE2-NEXT:    testb $2, %al
2477 ; SSE2-NEXT:    jne .LBB6_3
2478 ; SSE2-NEXT:  .LBB6_4: # %else2
2479 ; SSE2-NEXT:    retq
2480 ; SSE2-NEXT:  .LBB6_1: # %cond.store
2481 ; SSE2-NEXT:    movd %xmm0, (%rdi)
2482 ; SSE2-NEXT:    testb $2, %al
2483 ; SSE2-NEXT:    je .LBB6_4
2484 ; SSE2-NEXT:  .LBB6_3: # %cond.store1
2485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
2486 ; SSE2-NEXT:    movd %xmm0, 4(%rdi)
2487 ; SSE2-NEXT:    retq
2489 ; SSE4-LABEL: truncstore_v2i64_v2i32:
2490 ; SSE4:       # %bb.0:
2491 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
2492 ; SSE4-NEXT:    pxor %xmm3, %xmm3
2493 ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [2147483647,2147483647]
2494 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
2495 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2496 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
2497 ; SSE4-NEXT:    movdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]
2498 ; SSE4-NEXT:    movapd %xmm4, %xmm0
2499 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2500 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
2501 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
2502 ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3
2503 ; SSE4-NEXT:    movmskpd %xmm3, %eax
2504 ; SSE4-NEXT:    xorl $3, %eax
2505 ; SSE4-NEXT:    testb $1, %al
2506 ; SSE4-NEXT:    jne .LBB6_1
2507 ; SSE4-NEXT:  # %bb.2: # %else
2508 ; SSE4-NEXT:    testb $2, %al
2509 ; SSE4-NEXT:    jne .LBB6_3
2510 ; SSE4-NEXT:  .LBB6_4: # %else2
2511 ; SSE4-NEXT:    retq
2512 ; SSE4-NEXT:  .LBB6_1: # %cond.store
2513 ; SSE4-NEXT:    movd %xmm0, (%rdi)
2514 ; SSE4-NEXT:    testb $2, %al
2515 ; SSE4-NEXT:    je .LBB6_4
2516 ; SSE4-NEXT:  .LBB6_3: # %cond.store1
2517 ; SSE4-NEXT:    pextrd $1, %xmm0, 4(%rdi)
2518 ; SSE4-NEXT:    retq
2520 ; AVX1-LABEL: truncstore_v2i64_v2i32:
2521 ; AVX1:       # %bb.0:
2522 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2523 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2524 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
2525 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
2526 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero
2527 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483647,2147483647]
2528 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm3
2529 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2530 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]
2531 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
2532 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2533 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
2534 ; AVX1-NEXT:    vmaskmovps %xmm0, %xmm1, (%rdi)
2535 ; AVX1-NEXT:    retq
2537 ; AVX2-LABEL: truncstore_v2i64_v2i32:
2538 ; AVX2:       # %bb.0:
2539 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2540 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2541 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
2542 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
2543 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,2],zero,zero
2544 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483647,2147483647]
2545 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm3
2546 ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2547 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968]
2548 ; AVX2-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
2549 ; AVX2-NEXT:    vblendvpd %xmm3, %xmm0, %xmm2, %xmm0
2550 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
2551 ; AVX2-NEXT:    vpmaskmovd %xmm0, %xmm1, (%rdi)
2552 ; AVX2-NEXT:    retq
2554 ; AVX512F-LABEL: truncstore_v2i64_v2i32:
2555 ; AVX512F:       # %bb.0:
2556 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2557 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2558 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
2559 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
2560 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
2561 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [2147483647,2147483647]
2562 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2563 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]
2564 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2565 ; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2566 ; AVX512F-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
2567 ; AVX512F-NEXT:    vzeroupper
2568 ; AVX512F-NEXT:    retq
2570 ; AVX512VL-LABEL: truncstore_v2i64_v2i32:
2571 ; AVX512VL:       # %bb.0:
2572 ; AVX512VL-NEXT:    vptestmq %xmm1, %xmm1, %k1
2573 ; AVX512VL-NEXT:    vpminsq {{.*}}(%rip), %xmm0, %xmm0
2574 ; AVX512VL-NEXT:    vpmaxsq {{.*}}(%rip), %xmm0, %xmm0
2575 ; AVX512VL-NEXT:    vpmovqd %xmm0, (%rdi) {%k1}
2576 ; AVX512VL-NEXT:    retq
2578 ; AVX512BW-LABEL: truncstore_v2i64_v2i32:
2579 ; AVX512BW:       # %bb.0:
2580 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2581 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2582 ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
2583 ; AVX512BW-NEXT:    kshiftlw $14, %k0, %k0
2584 ; AVX512BW-NEXT:    kshiftrw $14, %k0, %k1
2585 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [2147483647,2147483647]
2586 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2587 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968]
2588 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2589 ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2590 ; AVX512BW-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
2591 ; AVX512BW-NEXT:    vzeroupper
2592 ; AVX512BW-NEXT:    retq
2593   %a = icmp ne <2 x i64> %mask, zeroinitializer
2594   %b = icmp slt <2 x i64> %x, <i64 2147483647, i64 2147483647>
2595   %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 2147483647, i64 2147483647>
2596   %d = icmp sgt <2 x i64> %c, <i64 -2147483648, i64 -2147483648>
2597   %e = select <2 x i1> %d, <2 x i64> %c, <2 x i64> <i64 -2147483648, i64 -2147483648>
2598   %f = trunc <2 x i64> %e to <2 x i32>
2599   call void @llvm.masked.store.v2i32.p0v2i32(<2 x i32> %f, <2 x i32>* %p, i32 1, <2 x i1> %a)
2600   ret void
2603 define void @truncstore_v2i64_v2i16(<2 x i64> %x, <2 x i16>* %p, <2 x i64> %mask) {
2604 ; SSE2-LABEL: truncstore_v2i64_v2i16:
2605 ; SSE2:       # %bb.0:
2606 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2607 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
2608 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2609 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2610 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147516415,2147516415]
2611 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2612 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2613 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2614 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2615 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2616 ; SSE2-NEXT:    pand %xmm7, %xmm4
2617 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2618 ; SSE2-NEXT:    por %xmm4, %xmm5
2619 ; SSE2-NEXT:    pand %xmm5, %xmm0
2620 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm5
2621 ; SSE2-NEXT:    por %xmm0, %xmm5
2622 ; SSE2-NEXT:    pxor %xmm5, %xmm3
2623 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18446744071562035200,18446744071562035200]
2624 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2625 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2626 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2627 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
2628 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
2629 ; SSE2-NEXT:    pand %xmm6, %xmm0
2630 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2631 ; SSE2-NEXT:    por %xmm0, %xmm3
2632 ; SSE2-NEXT:    pand %xmm3, %xmm5
2633 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3
2634 ; SSE2-NEXT:    por %xmm5, %xmm3
2635 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,2,2,3]
2636 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2637 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
2638 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
2639 ; SSE2-NEXT:    pand %xmm2, %xmm1
2640 ; SSE2-NEXT:    movmskpd %xmm1, %eax
2641 ; SSE2-NEXT:    xorl $3, %eax
2642 ; SSE2-NEXT:    testb $1, %al
2643 ; SSE2-NEXT:    jne .LBB7_1
2644 ; SSE2-NEXT:  # %bb.2: # %else
2645 ; SSE2-NEXT:    testb $2, %al
2646 ; SSE2-NEXT:    jne .LBB7_3
2647 ; SSE2-NEXT:  .LBB7_4: # %else2
2648 ; SSE2-NEXT:    retq
2649 ; SSE2-NEXT:  .LBB7_1: # %cond.store
2650 ; SSE2-NEXT:    movd %xmm0, %ecx
2651 ; SSE2-NEXT:    movw %cx, (%rdi)
2652 ; SSE2-NEXT:    testb $2, %al
2653 ; SSE2-NEXT:    je .LBB7_4
2654 ; SSE2-NEXT:  .LBB7_3: # %cond.store1
2655 ; SSE2-NEXT:    pextrw $1, %xmm0, %eax
2656 ; SSE2-NEXT:    movw %ax, 2(%rdi)
2657 ; SSE2-NEXT:    retq
2659 ; SSE4-LABEL: truncstore_v2i64_v2i16:
2660 ; SSE4:       # %bb.0:
2661 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
2662 ; SSE4-NEXT:    pxor %xmm3, %xmm3
2663 ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [32767,32767]
2664 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
2665 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2666 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
2667 ; SSE4-NEXT:    movdqa {{.*#+}} xmm2 = [18446744073709518848,18446744073709518848]
2668 ; SSE4-NEXT:    movapd %xmm4, %xmm0
2669 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2670 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
2671 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
2672 ; SSE4-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2673 ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3
2674 ; SSE4-NEXT:    movmskpd %xmm3, %eax
2675 ; SSE4-NEXT:    xorl $3, %eax
2676 ; SSE4-NEXT:    testb $1, %al
2677 ; SSE4-NEXT:    jne .LBB7_1
2678 ; SSE4-NEXT:  # %bb.2: # %else
2679 ; SSE4-NEXT:    testb $2, %al
2680 ; SSE4-NEXT:    jne .LBB7_3
2681 ; SSE4-NEXT:  .LBB7_4: # %else2
2682 ; SSE4-NEXT:    retq
2683 ; SSE4-NEXT:  .LBB7_1: # %cond.store
2684 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
2685 ; SSE4-NEXT:    testb $2, %al
2686 ; SSE4-NEXT:    je .LBB7_4
2687 ; SSE4-NEXT:  .LBB7_3: # %cond.store1
2688 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
2689 ; SSE4-NEXT:    retq
2691 ; AVX-LABEL: truncstore_v2i64_v2i16:
2692 ; AVX:       # %bb.0:
2693 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2694 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [32767,32767]
2695 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
2696 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2697 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [18446744073709518848,18446744073709518848]
2698 ; AVX-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm4
2699 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2700 ; AVX-NEXT:    vpermilps {{.*#+}} xmm0 = xmm0[0,2,2,3]
2701 ; AVX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2702 ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2703 ; AVX-NEXT:    vmovmskpd %xmm1, %eax
2704 ; AVX-NEXT:    xorl $3, %eax
2705 ; AVX-NEXT:    testb $1, %al
2706 ; AVX-NEXT:    jne .LBB7_1
2707 ; AVX-NEXT:  # %bb.2: # %else
2708 ; AVX-NEXT:    testb $2, %al
2709 ; AVX-NEXT:    jne .LBB7_3
2710 ; AVX-NEXT:  .LBB7_4: # %else2
2711 ; AVX-NEXT:    retq
2712 ; AVX-NEXT:  .LBB7_1: # %cond.store
2713 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
2714 ; AVX-NEXT:    testb $2, %al
2715 ; AVX-NEXT:    je .LBB7_4
2716 ; AVX-NEXT:  .LBB7_3: # %cond.store1
2717 ; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2718 ; AVX-NEXT:    retq
2720 ; AVX512F-LABEL: truncstore_v2i64_v2i16:
2721 ; AVX512F:       # %bb.0:
2722 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2723 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2724 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
2725 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [32767,32767]
2726 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2727 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]
2728 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2729 ; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2730 ; AVX512F-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2731 ; AVX512F-NEXT:    kmovw %k0, %eax
2732 ; AVX512F-NEXT:    testb $1, %al
2733 ; AVX512F-NEXT:    jne .LBB7_1
2734 ; AVX512F-NEXT:  # %bb.2: # %else
2735 ; AVX512F-NEXT:    testb $2, %al
2736 ; AVX512F-NEXT:    jne .LBB7_3
2737 ; AVX512F-NEXT:  .LBB7_4: # %else2
2738 ; AVX512F-NEXT:    vzeroupper
2739 ; AVX512F-NEXT:    retq
2740 ; AVX512F-NEXT:  .LBB7_1: # %cond.store
2741 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
2742 ; AVX512F-NEXT:    testb $2, %al
2743 ; AVX512F-NEXT:    je .LBB7_4
2744 ; AVX512F-NEXT:  .LBB7_3: # %cond.store1
2745 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
2746 ; AVX512F-NEXT:    vzeroupper
2747 ; AVX512F-NEXT:    retq
2749 ; AVX512BW-LABEL: truncstore_v2i64_v2i16:
2750 ; AVX512BW:       # %bb.0:
2751 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2752 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2753 ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
2754 ; AVX512BW-NEXT:    kshiftld $30, %k0, %k0
2755 ; AVX512BW-NEXT:    kshiftrd $30, %k0, %k1
2756 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [32767,32767]
2757 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2758 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709518848,18446744073709518848]
2759 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2760 ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2761 ; AVX512BW-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
2762 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
2763 ; AVX512BW-NEXT:    vzeroupper
2764 ; AVX512BW-NEXT:    retq
2766 ; AVX512BWVL-LABEL: truncstore_v2i64_v2i16:
2767 ; AVX512BWVL:       # %bb.0:
2768 ; AVX512BWVL-NEXT:    vptestmq %xmm1, %xmm1, %k1
2769 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip), %xmm0, %xmm0
2770 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip), %xmm0, %xmm0
2771 ; AVX512BWVL-NEXT:    vpmovqw %xmm0, (%rdi) {%k1}
2772 ; AVX512BWVL-NEXT:    retq
2773   %a = icmp ne <2 x i64> %mask, zeroinitializer
2774   %b = icmp slt <2 x i64> %x, <i64 32767, i64 32767>
2775   %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 32767, i64 32767>
2776   %d = icmp sgt <2 x i64> %c, <i64 -32768, i64 -32768>
2777   %e = select <2 x i1> %d, <2 x i64> %c, <2 x i64> <i64 -32768, i64 -32768>
2778   %f = trunc <2 x i64> %e to <2 x i16>
2779   call void @llvm.masked.store.v2i16.p0v2i16(<2 x i16> %f, <2 x i16>* %p, i32 1, <2 x i1> %a)
2780   ret void
2783 define void @truncstore_v2i64_v2i8(<2 x i64> %x, <2 x i8>* %p, <2 x i64> %mask) {
2784 ; SSE2-LABEL: truncstore_v2i64_v2i8:
2785 ; SSE2:       # %bb.0:
2786 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2787 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
2788 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2789 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2790 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483775,2147483775]
2791 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
2792 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2793 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2794 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2795 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2796 ; SSE2-NEXT:    pand %xmm7, %xmm4
2797 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2798 ; SSE2-NEXT:    por %xmm4, %xmm5
2799 ; SSE2-NEXT:    pand %xmm5, %xmm0
2800 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm5
2801 ; SSE2-NEXT:    por %xmm0, %xmm5
2802 ; SSE2-NEXT:    pxor %xmm5, %xmm3
2803 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18446744071562067840,18446744071562067840]
2804 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2805 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2806 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2807 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
2808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
2809 ; SSE2-NEXT:    pand %xmm6, %xmm0
2810 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2811 ; SSE2-NEXT:    por %xmm0, %xmm3
2812 ; SSE2-NEXT:    pand %xmm3, %xmm5
2813 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm3
2814 ; SSE2-NEXT:    por %xmm5, %xmm3
2815 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
2816 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
2817 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
2818 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
2819 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
2820 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
2821 ; SSE2-NEXT:    pand %xmm2, %xmm0
2822 ; SSE2-NEXT:    movmskpd %xmm0, %eax
2823 ; SSE2-NEXT:    xorl $3, %eax
2824 ; SSE2-NEXT:    testb $1, %al
2825 ; SSE2-NEXT:    movd %xmm3, %ecx
2826 ; SSE2-NEXT:    jne .LBB8_1
2827 ; SSE2-NEXT:  # %bb.2: # %else
2828 ; SSE2-NEXT:    testb $2, %al
2829 ; SSE2-NEXT:    jne .LBB8_3
2830 ; SSE2-NEXT:  .LBB8_4: # %else2
2831 ; SSE2-NEXT:    retq
2832 ; SSE2-NEXT:  .LBB8_1: # %cond.store
2833 ; SSE2-NEXT:    movb %cl, (%rdi)
2834 ; SSE2-NEXT:    testb $2, %al
2835 ; SSE2-NEXT:    je .LBB8_4
2836 ; SSE2-NEXT:  .LBB8_3: # %cond.store1
2837 ; SSE2-NEXT:    movb %ch, 1(%rdi)
2838 ; SSE2-NEXT:    retq
2840 ; SSE4-LABEL: truncstore_v2i64_v2i8:
2841 ; SSE4:       # %bb.0:
2842 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
2843 ; SSE4-NEXT:    pxor %xmm3, %xmm3
2844 ; SSE4-NEXT:    movdqa {{.*#+}} xmm4 = [127,127]
2845 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
2846 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2847 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
2848 ; SSE4-NEXT:    movdqa {{.*#+}} xmm2 = [18446744073709551488,18446744073709551488]
2849 ; SSE4-NEXT:    movapd %xmm4, %xmm0
2850 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
2851 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
2852 ; SSE4-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
2853 ; SSE4-NEXT:    pcmpeqq %xmm1, %xmm3
2854 ; SSE4-NEXT:    movmskpd %xmm3, %eax
2855 ; SSE4-NEXT:    xorl $3, %eax
2856 ; SSE4-NEXT:    testb $1, %al
2857 ; SSE4-NEXT:    jne .LBB8_1
2858 ; SSE4-NEXT:  # %bb.2: # %else
2859 ; SSE4-NEXT:    testb $2, %al
2860 ; SSE4-NEXT:    jne .LBB8_3
2861 ; SSE4-NEXT:  .LBB8_4: # %else2
2862 ; SSE4-NEXT:    retq
2863 ; SSE4-NEXT:  .LBB8_1: # %cond.store
2864 ; SSE4-NEXT:    pextrb $0, %xmm2, (%rdi)
2865 ; SSE4-NEXT:    testb $2, %al
2866 ; SSE4-NEXT:    je .LBB8_4
2867 ; SSE4-NEXT:  .LBB8_3: # %cond.store1
2868 ; SSE4-NEXT:    pextrb $1, %xmm2, 1(%rdi)
2869 ; SSE4-NEXT:    retq
2871 ; AVX-LABEL: truncstore_v2i64_v2i8:
2872 ; AVX:       # %bb.0:
2873 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2874 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [127,127]
2875 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
2876 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2877 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488]
2878 ; AVX-NEXT:    vpcmpgtq %xmm3, %xmm0, %xmm4
2879 ; AVX-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2880 ; AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
2881 ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm1, %xmm1
2882 ; AVX-NEXT:    vmovmskpd %xmm1, %eax
2883 ; AVX-NEXT:    xorl $3, %eax
2884 ; AVX-NEXT:    testb $1, %al
2885 ; AVX-NEXT:    jne .LBB8_1
2886 ; AVX-NEXT:  # %bb.2: # %else
2887 ; AVX-NEXT:    testb $2, %al
2888 ; AVX-NEXT:    jne .LBB8_3
2889 ; AVX-NEXT:  .LBB8_4: # %else2
2890 ; AVX-NEXT:    retq
2891 ; AVX-NEXT:  .LBB8_1: # %cond.store
2892 ; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
2893 ; AVX-NEXT:    testb $2, %al
2894 ; AVX-NEXT:    je .LBB8_4
2895 ; AVX-NEXT:  .LBB8_3: # %cond.store1
2896 ; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2897 ; AVX-NEXT:    retq
2899 ; AVX512F-LABEL: truncstore_v2i64_v2i8:
2900 ; AVX512F:       # %bb.0:
2901 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2902 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2903 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
2904 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [127,127]
2905 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2906 ; AVX512F-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]
2907 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2908 ; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
2909 ; AVX512F-NEXT:    kmovw %k0, %eax
2910 ; AVX512F-NEXT:    testb $1, %al
2911 ; AVX512F-NEXT:    jne .LBB8_1
2912 ; AVX512F-NEXT:  # %bb.2: # %else
2913 ; AVX512F-NEXT:    testb $2, %al
2914 ; AVX512F-NEXT:    jne .LBB8_3
2915 ; AVX512F-NEXT:  .LBB8_4: # %else2
2916 ; AVX512F-NEXT:    vzeroupper
2917 ; AVX512F-NEXT:    retq
2918 ; AVX512F-NEXT:  .LBB8_1: # %cond.store
2919 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
2920 ; AVX512F-NEXT:    testb $2, %al
2921 ; AVX512F-NEXT:    je .LBB8_4
2922 ; AVX512F-NEXT:  .LBB8_3: # %cond.store1
2923 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
2924 ; AVX512F-NEXT:    vzeroupper
2925 ; AVX512F-NEXT:    retq
2927 ; AVX512BW-LABEL: truncstore_v2i64_v2i8:
2928 ; AVX512BW:       # %bb.0:
2929 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
2930 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2931 ; AVX512BW-NEXT:    vptestmq %zmm1, %zmm1, %k0
2932 ; AVX512BW-NEXT:    kshiftlq $62, %k0, %k0
2933 ; AVX512BW-NEXT:    kshiftrq $62, %k0, %k1
2934 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [127,127]
2935 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
2936 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]
2937 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2938 ; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u]
2939 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
2940 ; AVX512BW-NEXT:    vzeroupper
2941 ; AVX512BW-NEXT:    retq
2943 ; AVX512BWVL-LABEL: truncstore_v2i64_v2i8:
2944 ; AVX512BWVL:       # %bb.0:
2945 ; AVX512BWVL-NEXT:    vptestmq %xmm1, %xmm1, %k1
2946 ; AVX512BWVL-NEXT:    vpminsq {{.*}}(%rip), %xmm0, %xmm0
2947 ; AVX512BWVL-NEXT:    vpmaxsq {{.*}}(%rip), %xmm0, %xmm0
2948 ; AVX512BWVL-NEXT:    vpmovqb %xmm0, (%rdi) {%k1}
2949 ; AVX512BWVL-NEXT:    retq
2950   %a = icmp ne <2 x i64> %mask, zeroinitializer
2951   %b = icmp slt <2 x i64> %x, <i64 127, i64 127>
2952   %c = select <2 x i1> %b, <2 x i64> %x, <2 x i64> <i64 127, i64 127>
2953   %d = icmp sgt <2 x i64> %c, <i64 -128, i64 -128>
2954   %e = select <2 x i1> %d, <2 x i64> %c, <2 x i64> <i64 -128, i64 -128>
2955   %f = trunc <2 x i64> %e to <2 x i8>
2956   call void @llvm.masked.store.v2i8.p0v2i8(<2 x i8> %f, <2 x i8>* %p, i32 1, <2 x i1> %a)
2957   ret void
2960 define void @truncstore_v16i32_v16i16(<16 x i32> %x, <16 x i16>* %p, <16 x i32> %mask) {
2961 ; SSE2-LABEL: truncstore_v16i32_v16i16:
2962 ; SSE2:       # %bb.0:
2963 ; SSE2-NEXT:    pxor %xmm8, %xmm8
2964 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
2965 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
2966 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
2967 ; SSE2-NEXT:    pxor %xmm1, %xmm7
2968 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
2969 ; SSE2-NEXT:    pxor %xmm1, %xmm6
2970 ; SSE2-NEXT:    packssdw %xmm7, %xmm6
2971 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
2972 ; SSE2-NEXT:    pxor %xmm1, %xmm5
2973 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
2974 ; SSE2-NEXT:    pxor %xmm1, %xmm4
2975 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
2976 ; SSE2-NEXT:    packsswb %xmm6, %xmm4
2977 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
2978 ; SSE2-NEXT:    testb $1, %al
2979 ; SSE2-NEXT:    jne .LBB9_1
2980 ; SSE2-NEXT:  # %bb.2: # %else
2981 ; SSE2-NEXT:    testb $2, %al
2982 ; SSE2-NEXT:    jne .LBB9_3
2983 ; SSE2-NEXT:  .LBB9_4: # %else2
2984 ; SSE2-NEXT:    testb $4, %al
2985 ; SSE2-NEXT:    jne .LBB9_5
2986 ; SSE2-NEXT:  .LBB9_6: # %else4
2987 ; SSE2-NEXT:    testb $8, %al
2988 ; SSE2-NEXT:    jne .LBB9_7
2989 ; SSE2-NEXT:  .LBB9_8: # %else6
2990 ; SSE2-NEXT:    testb $16, %al
2991 ; SSE2-NEXT:    jne .LBB9_9
2992 ; SSE2-NEXT:  .LBB9_10: # %else8
2993 ; SSE2-NEXT:    testb $32, %al
2994 ; SSE2-NEXT:    jne .LBB9_11
2995 ; SSE2-NEXT:  .LBB9_12: # %else10
2996 ; SSE2-NEXT:    testb $64, %al
2997 ; SSE2-NEXT:    jne .LBB9_13
2998 ; SSE2-NEXT:  .LBB9_14: # %else12
2999 ; SSE2-NEXT:    testb $-128, %al
3000 ; SSE2-NEXT:    je .LBB9_16
3001 ; SSE2-NEXT:  .LBB9_15: # %cond.store13
3002 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
3003 ; SSE2-NEXT:    movw %cx, 14(%rdi)
3004 ; SSE2-NEXT:  .LBB9_16: # %else14
3005 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
3006 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
3007 ; SSE2-NEXT:    jne .LBB9_17
3008 ; SSE2-NEXT:  # %bb.18: # %else16
3009 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
3010 ; SSE2-NEXT:    jne .LBB9_19
3011 ; SSE2-NEXT:  .LBB9_20: # %else18
3012 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
3013 ; SSE2-NEXT:    jne .LBB9_21
3014 ; SSE2-NEXT:  .LBB9_22: # %else20
3015 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
3016 ; SSE2-NEXT:    jne .LBB9_23
3017 ; SSE2-NEXT:  .LBB9_24: # %else22
3018 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
3019 ; SSE2-NEXT:    jne .LBB9_25
3020 ; SSE2-NEXT:  .LBB9_26: # %else24
3021 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
3022 ; SSE2-NEXT:    jne .LBB9_27
3023 ; SSE2-NEXT:  .LBB9_28: # %else26
3024 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
3025 ; SSE2-NEXT:    jne .LBB9_29
3026 ; SSE2-NEXT:  .LBB9_30: # %else28
3027 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3028 ; SSE2-NEXT:    jne .LBB9_31
3029 ; SSE2-NEXT:  .LBB9_32: # %else30
3030 ; SSE2-NEXT:    retq
3031 ; SSE2-NEXT:  .LBB9_1: # %cond.store
3032 ; SSE2-NEXT:    movd %xmm0, %ecx
3033 ; SSE2-NEXT:    movw %cx, (%rdi)
3034 ; SSE2-NEXT:    testb $2, %al
3035 ; SSE2-NEXT:    je .LBB9_4
3036 ; SSE2-NEXT:  .LBB9_3: # %cond.store1
3037 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
3038 ; SSE2-NEXT:    movw %cx, 2(%rdi)
3039 ; SSE2-NEXT:    testb $4, %al
3040 ; SSE2-NEXT:    je .LBB9_6
3041 ; SSE2-NEXT:  .LBB9_5: # %cond.store3
3042 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
3043 ; SSE2-NEXT:    movw %cx, 4(%rdi)
3044 ; SSE2-NEXT:    testb $8, %al
3045 ; SSE2-NEXT:    je .LBB9_8
3046 ; SSE2-NEXT:  .LBB9_7: # %cond.store5
3047 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
3048 ; SSE2-NEXT:    movw %cx, 6(%rdi)
3049 ; SSE2-NEXT:    testb $16, %al
3050 ; SSE2-NEXT:    je .LBB9_10
3051 ; SSE2-NEXT:  .LBB9_9: # %cond.store7
3052 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
3053 ; SSE2-NEXT:    movw %cx, 8(%rdi)
3054 ; SSE2-NEXT:    testb $32, %al
3055 ; SSE2-NEXT:    je .LBB9_12
3056 ; SSE2-NEXT:  .LBB9_11: # %cond.store9
3057 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
3058 ; SSE2-NEXT:    movw %cx, 10(%rdi)
3059 ; SSE2-NEXT:    testb $64, %al
3060 ; SSE2-NEXT:    je .LBB9_14
3061 ; SSE2-NEXT:  .LBB9_13: # %cond.store11
3062 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
3063 ; SSE2-NEXT:    movw %cx, 12(%rdi)
3064 ; SSE2-NEXT:    testb $-128, %al
3065 ; SSE2-NEXT:    jne .LBB9_15
3066 ; SSE2-NEXT:    jmp .LBB9_16
3067 ; SSE2-NEXT:  .LBB9_17: # %cond.store15
3068 ; SSE2-NEXT:    movd %xmm2, %ecx
3069 ; SSE2-NEXT:    movw %cx, 16(%rdi)
3070 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
3071 ; SSE2-NEXT:    je .LBB9_20
3072 ; SSE2-NEXT:  .LBB9_19: # %cond.store17
3073 ; SSE2-NEXT:    pextrw $1, %xmm2, %ecx
3074 ; SSE2-NEXT:    movw %cx, 18(%rdi)
3075 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
3076 ; SSE2-NEXT:    je .LBB9_22
3077 ; SSE2-NEXT:  .LBB9_21: # %cond.store19
3078 ; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
3079 ; SSE2-NEXT:    movw %cx, 20(%rdi)
3080 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
3081 ; SSE2-NEXT:    je .LBB9_24
3082 ; SSE2-NEXT:  .LBB9_23: # %cond.store21
3083 ; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
3084 ; SSE2-NEXT:    movw %cx, 22(%rdi)
3085 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
3086 ; SSE2-NEXT:    je .LBB9_26
3087 ; SSE2-NEXT:  .LBB9_25: # %cond.store23
3088 ; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
3089 ; SSE2-NEXT:    movw %cx, 24(%rdi)
3090 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
3091 ; SSE2-NEXT:    je .LBB9_28
3092 ; SSE2-NEXT:  .LBB9_27: # %cond.store25
3093 ; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
3094 ; SSE2-NEXT:    movw %cx, 26(%rdi)
3095 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
3096 ; SSE2-NEXT:    je .LBB9_30
3097 ; SSE2-NEXT:  .LBB9_29: # %cond.store27
3098 ; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
3099 ; SSE2-NEXT:    movw %cx, 28(%rdi)
3100 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3101 ; SSE2-NEXT:    je .LBB9_32
3102 ; SSE2-NEXT:  .LBB9_31: # %cond.store29
3103 ; SSE2-NEXT:    pextrw $7, %xmm2, %eax
3104 ; SSE2-NEXT:    movw %ax, 30(%rdi)
3105 ; SSE2-NEXT:    retq
3107 ; SSE4-LABEL: truncstore_v16i32_v16i16:
3108 ; SSE4:       # %bb.0:
3109 ; SSE4-NEXT:    pxor %xmm8, %xmm8
3110 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
3111 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm7
3112 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
3113 ; SSE4-NEXT:    pxor %xmm1, %xmm7
3114 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm6
3115 ; SSE4-NEXT:    pxor %xmm1, %xmm6
3116 ; SSE4-NEXT:    packssdw %xmm7, %xmm6
3117 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
3118 ; SSE4-NEXT:    pxor %xmm1, %xmm5
3119 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
3120 ; SSE4-NEXT:    pxor %xmm1, %xmm4
3121 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
3122 ; SSE4-NEXT:    packsswb %xmm6, %xmm4
3123 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
3124 ; SSE4-NEXT:    testb $1, %al
3125 ; SSE4-NEXT:    jne .LBB9_1
3126 ; SSE4-NEXT:  # %bb.2: # %else
3127 ; SSE4-NEXT:    testb $2, %al
3128 ; SSE4-NEXT:    jne .LBB9_3
3129 ; SSE4-NEXT:  .LBB9_4: # %else2
3130 ; SSE4-NEXT:    testb $4, %al
3131 ; SSE4-NEXT:    jne .LBB9_5
3132 ; SSE4-NEXT:  .LBB9_6: # %else4
3133 ; SSE4-NEXT:    testb $8, %al
3134 ; SSE4-NEXT:    jne .LBB9_7
3135 ; SSE4-NEXT:  .LBB9_8: # %else6
3136 ; SSE4-NEXT:    testb $16, %al
3137 ; SSE4-NEXT:    jne .LBB9_9
3138 ; SSE4-NEXT:  .LBB9_10: # %else8
3139 ; SSE4-NEXT:    testb $32, %al
3140 ; SSE4-NEXT:    jne .LBB9_11
3141 ; SSE4-NEXT:  .LBB9_12: # %else10
3142 ; SSE4-NEXT:    testb $64, %al
3143 ; SSE4-NEXT:    jne .LBB9_13
3144 ; SSE4-NEXT:  .LBB9_14: # %else12
3145 ; SSE4-NEXT:    testb $-128, %al
3146 ; SSE4-NEXT:    je .LBB9_16
3147 ; SSE4-NEXT:  .LBB9_15: # %cond.store13
3148 ; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
3149 ; SSE4-NEXT:  .LBB9_16: # %else14
3150 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
3151 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
3152 ; SSE4-NEXT:    jne .LBB9_17
3153 ; SSE4-NEXT:  # %bb.18: # %else16
3154 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3155 ; SSE4-NEXT:    jne .LBB9_19
3156 ; SSE4-NEXT:  .LBB9_20: # %else18
3157 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3158 ; SSE4-NEXT:    jne .LBB9_21
3159 ; SSE4-NEXT:  .LBB9_22: # %else20
3160 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3161 ; SSE4-NEXT:    jne .LBB9_23
3162 ; SSE4-NEXT:  .LBB9_24: # %else22
3163 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3164 ; SSE4-NEXT:    jne .LBB9_25
3165 ; SSE4-NEXT:  .LBB9_26: # %else24
3166 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3167 ; SSE4-NEXT:    jne .LBB9_27
3168 ; SSE4-NEXT:  .LBB9_28: # %else26
3169 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3170 ; SSE4-NEXT:    jne .LBB9_29
3171 ; SSE4-NEXT:  .LBB9_30: # %else28
3172 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3173 ; SSE4-NEXT:    jne .LBB9_31
3174 ; SSE4-NEXT:  .LBB9_32: # %else30
3175 ; SSE4-NEXT:    retq
3176 ; SSE4-NEXT:  .LBB9_1: # %cond.store
3177 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
3178 ; SSE4-NEXT:    testb $2, %al
3179 ; SSE4-NEXT:    je .LBB9_4
3180 ; SSE4-NEXT:  .LBB9_3: # %cond.store1
3181 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
3182 ; SSE4-NEXT:    testb $4, %al
3183 ; SSE4-NEXT:    je .LBB9_6
3184 ; SSE4-NEXT:  .LBB9_5: # %cond.store3
3185 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
3186 ; SSE4-NEXT:    testb $8, %al
3187 ; SSE4-NEXT:    je .LBB9_8
3188 ; SSE4-NEXT:  .LBB9_7: # %cond.store5
3189 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
3190 ; SSE4-NEXT:    testb $16, %al
3191 ; SSE4-NEXT:    je .LBB9_10
3192 ; SSE4-NEXT:  .LBB9_9: # %cond.store7
3193 ; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
3194 ; SSE4-NEXT:    testb $32, %al
3195 ; SSE4-NEXT:    je .LBB9_12
3196 ; SSE4-NEXT:  .LBB9_11: # %cond.store9
3197 ; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
3198 ; SSE4-NEXT:    testb $64, %al
3199 ; SSE4-NEXT:    je .LBB9_14
3200 ; SSE4-NEXT:  .LBB9_13: # %cond.store11
3201 ; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
3202 ; SSE4-NEXT:    testb $-128, %al
3203 ; SSE4-NEXT:    jne .LBB9_15
3204 ; SSE4-NEXT:    jmp .LBB9_16
3205 ; SSE4-NEXT:  .LBB9_17: # %cond.store15
3206 ; SSE4-NEXT:    pextrw $0, %xmm2, 16(%rdi)
3207 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3208 ; SSE4-NEXT:    je .LBB9_20
3209 ; SSE4-NEXT:  .LBB9_19: # %cond.store17
3210 ; SSE4-NEXT:    pextrw $1, %xmm2, 18(%rdi)
3211 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3212 ; SSE4-NEXT:    je .LBB9_22
3213 ; SSE4-NEXT:  .LBB9_21: # %cond.store19
3214 ; SSE4-NEXT:    pextrw $2, %xmm2, 20(%rdi)
3215 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3216 ; SSE4-NEXT:    je .LBB9_24
3217 ; SSE4-NEXT:  .LBB9_23: # %cond.store21
3218 ; SSE4-NEXT:    pextrw $3, %xmm2, 22(%rdi)
3219 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3220 ; SSE4-NEXT:    je .LBB9_26
3221 ; SSE4-NEXT:  .LBB9_25: # %cond.store23
3222 ; SSE4-NEXT:    pextrw $4, %xmm2, 24(%rdi)
3223 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3224 ; SSE4-NEXT:    je .LBB9_28
3225 ; SSE4-NEXT:  .LBB9_27: # %cond.store25
3226 ; SSE4-NEXT:    pextrw $5, %xmm2, 26(%rdi)
3227 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3228 ; SSE4-NEXT:    je .LBB9_30
3229 ; SSE4-NEXT:  .LBB9_29: # %cond.store27
3230 ; SSE4-NEXT:    pextrw $6, %xmm2, 28(%rdi)
3231 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3232 ; SSE4-NEXT:    je .LBB9_32
3233 ; SSE4-NEXT:  .LBB9_31: # %cond.store29
3234 ; SSE4-NEXT:    pextrw $7, %xmm2, 30(%rdi)
3235 ; SSE4-NEXT:    retq
3237 ; AVX1-LABEL: truncstore_v16i32_v16i16:
3238 ; AVX1:       # %bb.0:
3239 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3240 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
3241 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
3242 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
3243 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3244 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
3245 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3246 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm1, %xmm1
3247 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
3248 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
3249 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3250 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3251 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm3, %xmm1
3252 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3253 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3254 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3255 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
3256 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
3257 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
3258 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm2, %xmm1
3259 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
3260 ; AVX1-NEXT:    testb $1, %al
3261 ; AVX1-NEXT:    jne .LBB9_1
3262 ; AVX1-NEXT:  # %bb.2: # %else
3263 ; AVX1-NEXT:    testb $2, %al
3264 ; AVX1-NEXT:    jne .LBB9_3
3265 ; AVX1-NEXT:  .LBB9_4: # %else2
3266 ; AVX1-NEXT:    testb $4, %al
3267 ; AVX1-NEXT:    jne .LBB9_5
3268 ; AVX1-NEXT:  .LBB9_6: # %else4
3269 ; AVX1-NEXT:    testb $8, %al
3270 ; AVX1-NEXT:    jne .LBB9_7
3271 ; AVX1-NEXT:  .LBB9_8: # %else6
3272 ; AVX1-NEXT:    testb $16, %al
3273 ; AVX1-NEXT:    jne .LBB9_9
3274 ; AVX1-NEXT:  .LBB9_10: # %else8
3275 ; AVX1-NEXT:    testb $32, %al
3276 ; AVX1-NEXT:    jne .LBB9_11
3277 ; AVX1-NEXT:  .LBB9_12: # %else10
3278 ; AVX1-NEXT:    testb $64, %al
3279 ; AVX1-NEXT:    jne .LBB9_13
3280 ; AVX1-NEXT:  .LBB9_14: # %else12
3281 ; AVX1-NEXT:    testb $-128, %al
3282 ; AVX1-NEXT:    je .LBB9_16
3283 ; AVX1-NEXT:  .LBB9_15: # %cond.store13
3284 ; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3285 ; AVX1-NEXT:  .LBB9_16: # %else14
3286 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
3287 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3288 ; AVX1-NEXT:    jne .LBB9_17
3289 ; AVX1-NEXT:  # %bb.18: # %else16
3290 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3291 ; AVX1-NEXT:    jne .LBB9_19
3292 ; AVX1-NEXT:  .LBB9_20: # %else18
3293 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3294 ; AVX1-NEXT:    jne .LBB9_21
3295 ; AVX1-NEXT:  .LBB9_22: # %else20
3296 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3297 ; AVX1-NEXT:    jne .LBB9_23
3298 ; AVX1-NEXT:  .LBB9_24: # %else22
3299 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3300 ; AVX1-NEXT:    jne .LBB9_25
3301 ; AVX1-NEXT:  .LBB9_26: # %else24
3302 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3303 ; AVX1-NEXT:    jne .LBB9_27
3304 ; AVX1-NEXT:  .LBB9_28: # %else26
3305 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3306 ; AVX1-NEXT:    jne .LBB9_29
3307 ; AVX1-NEXT:  .LBB9_30: # %else28
3308 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3309 ; AVX1-NEXT:    jne .LBB9_31
3310 ; AVX1-NEXT:  .LBB9_32: # %else30
3311 ; AVX1-NEXT:    vzeroupper
3312 ; AVX1-NEXT:    retq
3313 ; AVX1-NEXT:  .LBB9_1: # %cond.store
3314 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
3315 ; AVX1-NEXT:    testb $2, %al
3316 ; AVX1-NEXT:    je .LBB9_4
3317 ; AVX1-NEXT:  .LBB9_3: # %cond.store1
3318 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3319 ; AVX1-NEXT:    testb $4, %al
3320 ; AVX1-NEXT:    je .LBB9_6
3321 ; AVX1-NEXT:  .LBB9_5: # %cond.store3
3322 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3323 ; AVX1-NEXT:    testb $8, %al
3324 ; AVX1-NEXT:    je .LBB9_8
3325 ; AVX1-NEXT:  .LBB9_7: # %cond.store5
3326 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3327 ; AVX1-NEXT:    testb $16, %al
3328 ; AVX1-NEXT:    je .LBB9_10
3329 ; AVX1-NEXT:  .LBB9_9: # %cond.store7
3330 ; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3331 ; AVX1-NEXT:    testb $32, %al
3332 ; AVX1-NEXT:    je .LBB9_12
3333 ; AVX1-NEXT:  .LBB9_11: # %cond.store9
3334 ; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3335 ; AVX1-NEXT:    testb $64, %al
3336 ; AVX1-NEXT:    je .LBB9_14
3337 ; AVX1-NEXT:  .LBB9_13: # %cond.store11
3338 ; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3339 ; AVX1-NEXT:    testb $-128, %al
3340 ; AVX1-NEXT:    jne .LBB9_15
3341 ; AVX1-NEXT:    jmp .LBB9_16
3342 ; AVX1-NEXT:  .LBB9_17: # %cond.store15
3343 ; AVX1-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
3344 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3345 ; AVX1-NEXT:    je .LBB9_20
3346 ; AVX1-NEXT:  .LBB9_19: # %cond.store17
3347 ; AVX1-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
3348 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3349 ; AVX1-NEXT:    je .LBB9_22
3350 ; AVX1-NEXT:  .LBB9_21: # %cond.store19
3351 ; AVX1-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
3352 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3353 ; AVX1-NEXT:    je .LBB9_24
3354 ; AVX1-NEXT:  .LBB9_23: # %cond.store21
3355 ; AVX1-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
3356 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3357 ; AVX1-NEXT:    je .LBB9_26
3358 ; AVX1-NEXT:  .LBB9_25: # %cond.store23
3359 ; AVX1-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
3360 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3361 ; AVX1-NEXT:    je .LBB9_28
3362 ; AVX1-NEXT:  .LBB9_27: # %cond.store25
3363 ; AVX1-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
3364 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3365 ; AVX1-NEXT:    je .LBB9_30
3366 ; AVX1-NEXT:  .LBB9_29: # %cond.store27
3367 ; AVX1-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
3368 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3369 ; AVX1-NEXT:    je .LBB9_32
3370 ; AVX1-NEXT:  .LBB9_31: # %cond.store29
3371 ; AVX1-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
3372 ; AVX1-NEXT:    vzeroupper
3373 ; AVX1-NEXT:    retq
3375 ; AVX2-LABEL: truncstore_v16i32_v16i16:
3376 ; AVX2:       # %bb.0:
3377 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3378 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
3379 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3380 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm1
3381 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
3382 ; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
3383 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
3384 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
3385 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm2, %ymm1
3386 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
3387 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3388 ; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
3389 ; AVX2-NEXT:    vpmovmskb %xmm1, %eax
3390 ; AVX2-NEXT:    testb $1, %al
3391 ; AVX2-NEXT:    jne .LBB9_1
3392 ; AVX2-NEXT:  # %bb.2: # %else
3393 ; AVX2-NEXT:    testb $2, %al
3394 ; AVX2-NEXT:    jne .LBB9_3
3395 ; AVX2-NEXT:  .LBB9_4: # %else2
3396 ; AVX2-NEXT:    testb $4, %al
3397 ; AVX2-NEXT:    jne .LBB9_5
3398 ; AVX2-NEXT:  .LBB9_6: # %else4
3399 ; AVX2-NEXT:    testb $8, %al
3400 ; AVX2-NEXT:    jne .LBB9_7
3401 ; AVX2-NEXT:  .LBB9_8: # %else6
3402 ; AVX2-NEXT:    testb $16, %al
3403 ; AVX2-NEXT:    jne .LBB9_9
3404 ; AVX2-NEXT:  .LBB9_10: # %else8
3405 ; AVX2-NEXT:    testb $32, %al
3406 ; AVX2-NEXT:    jne .LBB9_11
3407 ; AVX2-NEXT:  .LBB9_12: # %else10
3408 ; AVX2-NEXT:    testb $64, %al
3409 ; AVX2-NEXT:    jne .LBB9_13
3410 ; AVX2-NEXT:  .LBB9_14: # %else12
3411 ; AVX2-NEXT:    testb $-128, %al
3412 ; AVX2-NEXT:    je .LBB9_16
3413 ; AVX2-NEXT:  .LBB9_15: # %cond.store13
3414 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3415 ; AVX2-NEXT:  .LBB9_16: # %else14
3416 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
3417 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
3418 ; AVX2-NEXT:    jne .LBB9_17
3419 ; AVX2-NEXT:  # %bb.18: # %else16
3420 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
3421 ; AVX2-NEXT:    jne .LBB9_19
3422 ; AVX2-NEXT:  .LBB9_20: # %else18
3423 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
3424 ; AVX2-NEXT:    jne .LBB9_21
3425 ; AVX2-NEXT:  .LBB9_22: # %else20
3426 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
3427 ; AVX2-NEXT:    jne .LBB9_23
3428 ; AVX2-NEXT:  .LBB9_24: # %else22
3429 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
3430 ; AVX2-NEXT:    jne .LBB9_25
3431 ; AVX2-NEXT:  .LBB9_26: # %else24
3432 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
3433 ; AVX2-NEXT:    jne .LBB9_27
3434 ; AVX2-NEXT:  .LBB9_28: # %else26
3435 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
3436 ; AVX2-NEXT:    jne .LBB9_29
3437 ; AVX2-NEXT:  .LBB9_30: # %else28
3438 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
3439 ; AVX2-NEXT:    jne .LBB9_31
3440 ; AVX2-NEXT:  .LBB9_32: # %else30
3441 ; AVX2-NEXT:    vzeroupper
3442 ; AVX2-NEXT:    retq
3443 ; AVX2-NEXT:  .LBB9_1: # %cond.store
3444 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
3445 ; AVX2-NEXT:    testb $2, %al
3446 ; AVX2-NEXT:    je .LBB9_4
3447 ; AVX2-NEXT:  .LBB9_3: # %cond.store1
3448 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3449 ; AVX2-NEXT:    testb $4, %al
3450 ; AVX2-NEXT:    je .LBB9_6
3451 ; AVX2-NEXT:  .LBB9_5: # %cond.store3
3452 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3453 ; AVX2-NEXT:    testb $8, %al
3454 ; AVX2-NEXT:    je .LBB9_8
3455 ; AVX2-NEXT:  .LBB9_7: # %cond.store5
3456 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3457 ; AVX2-NEXT:    testb $16, %al
3458 ; AVX2-NEXT:    je .LBB9_10
3459 ; AVX2-NEXT:  .LBB9_9: # %cond.store7
3460 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3461 ; AVX2-NEXT:    testb $32, %al
3462 ; AVX2-NEXT:    je .LBB9_12
3463 ; AVX2-NEXT:  .LBB9_11: # %cond.store9
3464 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3465 ; AVX2-NEXT:    testb $64, %al
3466 ; AVX2-NEXT:    je .LBB9_14
3467 ; AVX2-NEXT:  .LBB9_13: # %cond.store11
3468 ; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3469 ; AVX2-NEXT:    testb $-128, %al
3470 ; AVX2-NEXT:    jne .LBB9_15
3471 ; AVX2-NEXT:    jmp .LBB9_16
3472 ; AVX2-NEXT:  .LBB9_17: # %cond.store15
3473 ; AVX2-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
3474 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
3475 ; AVX2-NEXT:    je .LBB9_20
3476 ; AVX2-NEXT:  .LBB9_19: # %cond.store17
3477 ; AVX2-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
3478 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
3479 ; AVX2-NEXT:    je .LBB9_22
3480 ; AVX2-NEXT:  .LBB9_21: # %cond.store19
3481 ; AVX2-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
3482 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
3483 ; AVX2-NEXT:    je .LBB9_24
3484 ; AVX2-NEXT:  .LBB9_23: # %cond.store21
3485 ; AVX2-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
3486 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
3487 ; AVX2-NEXT:    je .LBB9_26
3488 ; AVX2-NEXT:  .LBB9_25: # %cond.store23
3489 ; AVX2-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
3490 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
3491 ; AVX2-NEXT:    je .LBB9_28
3492 ; AVX2-NEXT:  .LBB9_27: # %cond.store25
3493 ; AVX2-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
3494 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
3495 ; AVX2-NEXT:    je .LBB9_30
3496 ; AVX2-NEXT:  .LBB9_29: # %cond.store27
3497 ; AVX2-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
3498 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
3499 ; AVX2-NEXT:    je .LBB9_32
3500 ; AVX2-NEXT:  .LBB9_31: # %cond.store29
3501 ; AVX2-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
3502 ; AVX2-NEXT:    vzeroupper
3503 ; AVX2-NEXT:    retq
3505 ; AVX512F-LABEL: truncstore_v16i32_v16i16:
3506 ; AVX512F:       # %bb.0:
3507 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
3508 ; AVX512F-NEXT:    vpmovsdw %zmm0, %ymm0
3509 ; AVX512F-NEXT:    kmovw %k0, %eax
3510 ; AVX512F-NEXT:    testb $1, %al
3511 ; AVX512F-NEXT:    jne .LBB9_1
3512 ; AVX512F-NEXT:  # %bb.2: # %else
3513 ; AVX512F-NEXT:    testb $2, %al
3514 ; AVX512F-NEXT:    jne .LBB9_3
3515 ; AVX512F-NEXT:  .LBB9_4: # %else2
3516 ; AVX512F-NEXT:    testb $4, %al
3517 ; AVX512F-NEXT:    jne .LBB9_5
3518 ; AVX512F-NEXT:  .LBB9_6: # %else4
3519 ; AVX512F-NEXT:    testb $8, %al
3520 ; AVX512F-NEXT:    jne .LBB9_7
3521 ; AVX512F-NEXT:  .LBB9_8: # %else6
3522 ; AVX512F-NEXT:    testb $16, %al
3523 ; AVX512F-NEXT:    jne .LBB9_9
3524 ; AVX512F-NEXT:  .LBB9_10: # %else8
3525 ; AVX512F-NEXT:    testb $32, %al
3526 ; AVX512F-NEXT:    jne .LBB9_11
3527 ; AVX512F-NEXT:  .LBB9_12: # %else10
3528 ; AVX512F-NEXT:    testb $64, %al
3529 ; AVX512F-NEXT:    jne .LBB9_13
3530 ; AVX512F-NEXT:  .LBB9_14: # %else12
3531 ; AVX512F-NEXT:    testb $-128, %al
3532 ; AVX512F-NEXT:    je .LBB9_16
3533 ; AVX512F-NEXT:  .LBB9_15: # %cond.store13
3534 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
3535 ; AVX512F-NEXT:  .LBB9_16: # %else14
3536 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
3537 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
3538 ; AVX512F-NEXT:    jne .LBB9_17
3539 ; AVX512F-NEXT:  # %bb.18: # %else16
3540 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
3541 ; AVX512F-NEXT:    jne .LBB9_19
3542 ; AVX512F-NEXT:  .LBB9_20: # %else18
3543 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
3544 ; AVX512F-NEXT:    jne .LBB9_21
3545 ; AVX512F-NEXT:  .LBB9_22: # %else20
3546 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
3547 ; AVX512F-NEXT:    jne .LBB9_23
3548 ; AVX512F-NEXT:  .LBB9_24: # %else22
3549 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
3550 ; AVX512F-NEXT:    jne .LBB9_25
3551 ; AVX512F-NEXT:  .LBB9_26: # %else24
3552 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
3553 ; AVX512F-NEXT:    jne .LBB9_27
3554 ; AVX512F-NEXT:  .LBB9_28: # %else26
3555 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
3556 ; AVX512F-NEXT:    jne .LBB9_29
3557 ; AVX512F-NEXT:  .LBB9_30: # %else28
3558 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
3559 ; AVX512F-NEXT:    jne .LBB9_31
3560 ; AVX512F-NEXT:  .LBB9_32: # %else30
3561 ; AVX512F-NEXT:    vzeroupper
3562 ; AVX512F-NEXT:    retq
3563 ; AVX512F-NEXT:  .LBB9_1: # %cond.store
3564 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
3565 ; AVX512F-NEXT:    testb $2, %al
3566 ; AVX512F-NEXT:    je .LBB9_4
3567 ; AVX512F-NEXT:  .LBB9_3: # %cond.store1
3568 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
3569 ; AVX512F-NEXT:    testb $4, %al
3570 ; AVX512F-NEXT:    je .LBB9_6
3571 ; AVX512F-NEXT:  .LBB9_5: # %cond.store3
3572 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
3573 ; AVX512F-NEXT:    testb $8, %al
3574 ; AVX512F-NEXT:    je .LBB9_8
3575 ; AVX512F-NEXT:  .LBB9_7: # %cond.store5
3576 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
3577 ; AVX512F-NEXT:    testb $16, %al
3578 ; AVX512F-NEXT:    je .LBB9_10
3579 ; AVX512F-NEXT:  .LBB9_9: # %cond.store7
3580 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
3581 ; AVX512F-NEXT:    testb $32, %al
3582 ; AVX512F-NEXT:    je .LBB9_12
3583 ; AVX512F-NEXT:  .LBB9_11: # %cond.store9
3584 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
3585 ; AVX512F-NEXT:    testb $64, %al
3586 ; AVX512F-NEXT:    je .LBB9_14
3587 ; AVX512F-NEXT:  .LBB9_13: # %cond.store11
3588 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
3589 ; AVX512F-NEXT:    testb $-128, %al
3590 ; AVX512F-NEXT:    jne .LBB9_15
3591 ; AVX512F-NEXT:    jmp .LBB9_16
3592 ; AVX512F-NEXT:  .LBB9_17: # %cond.store15
3593 ; AVX512F-NEXT:    vpextrw $0, %xmm0, 16(%rdi)
3594 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
3595 ; AVX512F-NEXT:    je .LBB9_20
3596 ; AVX512F-NEXT:  .LBB9_19: # %cond.store17
3597 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 18(%rdi)
3598 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
3599 ; AVX512F-NEXT:    je .LBB9_22
3600 ; AVX512F-NEXT:  .LBB9_21: # %cond.store19
3601 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 20(%rdi)
3602 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
3603 ; AVX512F-NEXT:    je .LBB9_24
3604 ; AVX512F-NEXT:  .LBB9_23: # %cond.store21
3605 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 22(%rdi)
3606 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
3607 ; AVX512F-NEXT:    je .LBB9_26
3608 ; AVX512F-NEXT:  .LBB9_25: # %cond.store23
3609 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 24(%rdi)
3610 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
3611 ; AVX512F-NEXT:    je .LBB9_28
3612 ; AVX512F-NEXT:  .LBB9_27: # %cond.store25
3613 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 26(%rdi)
3614 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
3615 ; AVX512F-NEXT:    je .LBB9_30
3616 ; AVX512F-NEXT:  .LBB9_29: # %cond.store27
3617 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 28(%rdi)
3618 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
3619 ; AVX512F-NEXT:    je .LBB9_32
3620 ; AVX512F-NEXT:  .LBB9_31: # %cond.store29
3621 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 30(%rdi)
3622 ; AVX512F-NEXT:    vzeroupper
3623 ; AVX512F-NEXT:    retq
3625 ; AVX512BW-LABEL: truncstore_v16i32_v16i16:
3626 ; AVX512BW:       # %bb.0:
3627 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
3628 ; AVX512BW-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3629 ; AVX512BW-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3630 ; AVX512BW-NEXT:    vpmovdw %zmm0, (%rdi) {%k1}
3631 ; AVX512BW-NEXT:    vzeroupper
3632 ; AVX512BW-NEXT:    retq
3634 ; AVX512BWVL-LABEL: truncstore_v16i32_v16i16:
3635 ; AVX512BWVL:       # %bb.0:
3636 ; AVX512BWVL-NEXT:    vptestmd %zmm1, %zmm1, %k1
3637 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3638 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
3639 ; AVX512BWVL-NEXT:    vpmovdw %zmm0, (%rdi) {%k1}
3640 ; AVX512BWVL-NEXT:    vzeroupper
3641 ; AVX512BWVL-NEXT:    retq
3642   %a = icmp ne <16 x i32> %mask, zeroinitializer
3643   %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>
3644   %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>
3645   %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>
3646   %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>
3647   %f = trunc <16 x i32> %e to <16 x i16>
3648   call void @llvm.masked.store.v16i16.p0v16i16(<16 x i16> %f, <16 x i16>* %p, i32 1, <16 x i1> %a)
3649   ret void
3652 define void @truncstore_v16i32_v16i8(<16 x i32> %x, <16 x i8>* %p, <16 x i32> %mask) {
3653 ; SSE2-LABEL: truncstore_v16i32_v16i8:
3654 ; SSE2:       # %bb.0:
3655 ; SSE2-NEXT:    pxor %xmm8, %xmm8
3656 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
3657 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
3658 ; SSE2-NEXT:    packsswb %xmm2, %xmm0
3659 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm7
3660 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
3661 ; SSE2-NEXT:    pxor %xmm1, %xmm7
3662 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm6
3663 ; SSE2-NEXT:    pxor %xmm1, %xmm6
3664 ; SSE2-NEXT:    packssdw %xmm7, %xmm6
3665 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm5
3666 ; SSE2-NEXT:    pxor %xmm1, %xmm5
3667 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm4
3668 ; SSE2-NEXT:    pxor %xmm1, %xmm4
3669 ; SSE2-NEXT:    packssdw %xmm5, %xmm4
3670 ; SSE2-NEXT:    packsswb %xmm6, %xmm4
3671 ; SSE2-NEXT:    pmovmskb %xmm4, %eax
3672 ; SSE2-NEXT:    testb $1, %al
3673 ; SSE2-NEXT:    movd %xmm0, %ecx
3674 ; SSE2-NEXT:    jne .LBB10_1
3675 ; SSE2-NEXT:  # %bb.2: # %else
3676 ; SSE2-NEXT:    testb $2, %al
3677 ; SSE2-NEXT:    jne .LBB10_3
3678 ; SSE2-NEXT:  .LBB10_4: # %else2
3679 ; SSE2-NEXT:    testb $4, %al
3680 ; SSE2-NEXT:    jne .LBB10_5
3681 ; SSE2-NEXT:  .LBB10_6: # %else4
3682 ; SSE2-NEXT:    testb $8, %al
3683 ; SSE2-NEXT:    je .LBB10_8
3684 ; SSE2-NEXT:  .LBB10_7: # %cond.store5
3685 ; SSE2-NEXT:    shrl $24, %ecx
3686 ; SSE2-NEXT:    movb %cl, 3(%rdi)
3687 ; SSE2-NEXT:  .LBB10_8: # %else6
3688 ; SSE2-NEXT:    testb $16, %al
3689 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
3690 ; SSE2-NEXT:    je .LBB10_10
3691 ; SSE2-NEXT:  # %bb.9: # %cond.store7
3692 ; SSE2-NEXT:    movb %cl, 4(%rdi)
3693 ; SSE2-NEXT:  .LBB10_10: # %else8
3694 ; SSE2-NEXT:    testb $32, %al
3695 ; SSE2-NEXT:    je .LBB10_12
3696 ; SSE2-NEXT:  # %bb.11: # %cond.store9
3697 ; SSE2-NEXT:    movb %ch, 5(%rdi)
3698 ; SSE2-NEXT:  .LBB10_12: # %else10
3699 ; SSE2-NEXT:    testb $64, %al
3700 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
3701 ; SSE2-NEXT:    je .LBB10_14
3702 ; SSE2-NEXT:  # %bb.13: # %cond.store11
3703 ; SSE2-NEXT:    movb %cl, 6(%rdi)
3704 ; SSE2-NEXT:  .LBB10_14: # %else12
3705 ; SSE2-NEXT:    testb $-128, %al
3706 ; SSE2-NEXT:    je .LBB10_16
3707 ; SSE2-NEXT:  # %bb.15: # %cond.store13
3708 ; SSE2-NEXT:    movb %ch, 7(%rdi)
3709 ; SSE2-NEXT:  .LBB10_16: # %else14
3710 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
3711 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
3712 ; SSE2-NEXT:    je .LBB10_18
3713 ; SSE2-NEXT:  # %bb.17: # %cond.store15
3714 ; SSE2-NEXT:    movb %cl, 8(%rdi)
3715 ; SSE2-NEXT:  .LBB10_18: # %else16
3716 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
3717 ; SSE2-NEXT:    je .LBB10_20
3718 ; SSE2-NEXT:  # %bb.19: # %cond.store17
3719 ; SSE2-NEXT:    movb %ch, 9(%rdi)
3720 ; SSE2-NEXT:  .LBB10_20: # %else18
3721 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
3722 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
3723 ; SSE2-NEXT:    je .LBB10_22
3724 ; SSE2-NEXT:  # %bb.21: # %cond.store19
3725 ; SSE2-NEXT:    movb %cl, 10(%rdi)
3726 ; SSE2-NEXT:  .LBB10_22: # %else20
3727 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
3728 ; SSE2-NEXT:    je .LBB10_24
3729 ; SSE2-NEXT:  # %bb.23: # %cond.store21
3730 ; SSE2-NEXT:    movb %ch, 11(%rdi)
3731 ; SSE2-NEXT:  .LBB10_24: # %else22
3732 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
3733 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
3734 ; SSE2-NEXT:    je .LBB10_26
3735 ; SSE2-NEXT:  # %bb.25: # %cond.store23
3736 ; SSE2-NEXT:    movb %cl, 12(%rdi)
3737 ; SSE2-NEXT:  .LBB10_26: # %else24
3738 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
3739 ; SSE2-NEXT:    je .LBB10_28
3740 ; SSE2-NEXT:  # %bb.27: # %cond.store25
3741 ; SSE2-NEXT:    movb %ch, 13(%rdi)
3742 ; SSE2-NEXT:  .LBB10_28: # %else26
3743 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
3744 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
3745 ; SSE2-NEXT:    jne .LBB10_29
3746 ; SSE2-NEXT:  # %bb.30: # %else28
3747 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3748 ; SSE2-NEXT:    jne .LBB10_31
3749 ; SSE2-NEXT:  .LBB10_32: # %else30
3750 ; SSE2-NEXT:    retq
3751 ; SSE2-NEXT:  .LBB10_1: # %cond.store
3752 ; SSE2-NEXT:    movb %cl, (%rdi)
3753 ; SSE2-NEXT:    testb $2, %al
3754 ; SSE2-NEXT:    je .LBB10_4
3755 ; SSE2-NEXT:  .LBB10_3: # %cond.store1
3756 ; SSE2-NEXT:    movb %ch, 1(%rdi)
3757 ; SSE2-NEXT:    testb $4, %al
3758 ; SSE2-NEXT:    je .LBB10_6
3759 ; SSE2-NEXT:  .LBB10_5: # %cond.store3
3760 ; SSE2-NEXT:    movl %ecx, %edx
3761 ; SSE2-NEXT:    shrl $16, %edx
3762 ; SSE2-NEXT:    movb %dl, 2(%rdi)
3763 ; SSE2-NEXT:    testb $8, %al
3764 ; SSE2-NEXT:    jne .LBB10_7
3765 ; SSE2-NEXT:    jmp .LBB10_8
3766 ; SSE2-NEXT:  .LBB10_29: # %cond.store27
3767 ; SSE2-NEXT:    movb %cl, 14(%rdi)
3768 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
3769 ; SSE2-NEXT:    je .LBB10_32
3770 ; SSE2-NEXT:  .LBB10_31: # %cond.store29
3771 ; SSE2-NEXT:    movb %ch, 15(%rdi)
3772 ; SSE2-NEXT:    retq
3774 ; SSE4-LABEL: truncstore_v16i32_v16i8:
3775 ; SSE4:       # %bb.0:
3776 ; SSE4-NEXT:    pxor %xmm8, %xmm8
3777 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
3778 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
3779 ; SSE4-NEXT:    packsswb %xmm2, %xmm0
3780 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm7
3781 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
3782 ; SSE4-NEXT:    pxor %xmm1, %xmm7
3783 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm6
3784 ; SSE4-NEXT:    pxor %xmm1, %xmm6
3785 ; SSE4-NEXT:    packssdw %xmm7, %xmm6
3786 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm5
3787 ; SSE4-NEXT:    pxor %xmm1, %xmm5
3788 ; SSE4-NEXT:    pcmpeqd %xmm8, %xmm4
3789 ; SSE4-NEXT:    pxor %xmm1, %xmm4
3790 ; SSE4-NEXT:    packssdw %xmm5, %xmm4
3791 ; SSE4-NEXT:    packsswb %xmm6, %xmm4
3792 ; SSE4-NEXT:    pmovmskb %xmm4, %eax
3793 ; SSE4-NEXT:    testb $1, %al
3794 ; SSE4-NEXT:    jne .LBB10_1
3795 ; SSE4-NEXT:  # %bb.2: # %else
3796 ; SSE4-NEXT:    testb $2, %al
3797 ; SSE4-NEXT:    jne .LBB10_3
3798 ; SSE4-NEXT:  .LBB10_4: # %else2
3799 ; SSE4-NEXT:    testb $4, %al
3800 ; SSE4-NEXT:    jne .LBB10_5
3801 ; SSE4-NEXT:  .LBB10_6: # %else4
3802 ; SSE4-NEXT:    testb $8, %al
3803 ; SSE4-NEXT:    jne .LBB10_7
3804 ; SSE4-NEXT:  .LBB10_8: # %else6
3805 ; SSE4-NEXT:    testb $16, %al
3806 ; SSE4-NEXT:    jne .LBB10_9
3807 ; SSE4-NEXT:  .LBB10_10: # %else8
3808 ; SSE4-NEXT:    testb $32, %al
3809 ; SSE4-NEXT:    jne .LBB10_11
3810 ; SSE4-NEXT:  .LBB10_12: # %else10
3811 ; SSE4-NEXT:    testb $64, %al
3812 ; SSE4-NEXT:    jne .LBB10_13
3813 ; SSE4-NEXT:  .LBB10_14: # %else12
3814 ; SSE4-NEXT:    testb $-128, %al
3815 ; SSE4-NEXT:    jne .LBB10_15
3816 ; SSE4-NEXT:  .LBB10_16: # %else14
3817 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
3818 ; SSE4-NEXT:    jne .LBB10_17
3819 ; SSE4-NEXT:  .LBB10_18: # %else16
3820 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3821 ; SSE4-NEXT:    jne .LBB10_19
3822 ; SSE4-NEXT:  .LBB10_20: # %else18
3823 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3824 ; SSE4-NEXT:    jne .LBB10_21
3825 ; SSE4-NEXT:  .LBB10_22: # %else20
3826 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3827 ; SSE4-NEXT:    jne .LBB10_23
3828 ; SSE4-NEXT:  .LBB10_24: # %else22
3829 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3830 ; SSE4-NEXT:    jne .LBB10_25
3831 ; SSE4-NEXT:  .LBB10_26: # %else24
3832 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3833 ; SSE4-NEXT:    jne .LBB10_27
3834 ; SSE4-NEXT:  .LBB10_28: # %else26
3835 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3836 ; SSE4-NEXT:    jne .LBB10_29
3837 ; SSE4-NEXT:  .LBB10_30: # %else28
3838 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3839 ; SSE4-NEXT:    jne .LBB10_31
3840 ; SSE4-NEXT:  .LBB10_32: # %else30
3841 ; SSE4-NEXT:    retq
3842 ; SSE4-NEXT:  .LBB10_1: # %cond.store
3843 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
3844 ; SSE4-NEXT:    testb $2, %al
3845 ; SSE4-NEXT:    je .LBB10_4
3846 ; SSE4-NEXT:  .LBB10_3: # %cond.store1
3847 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
3848 ; SSE4-NEXT:    testb $4, %al
3849 ; SSE4-NEXT:    je .LBB10_6
3850 ; SSE4-NEXT:  .LBB10_5: # %cond.store3
3851 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
3852 ; SSE4-NEXT:    testb $8, %al
3853 ; SSE4-NEXT:    je .LBB10_8
3854 ; SSE4-NEXT:  .LBB10_7: # %cond.store5
3855 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
3856 ; SSE4-NEXT:    testb $16, %al
3857 ; SSE4-NEXT:    je .LBB10_10
3858 ; SSE4-NEXT:  .LBB10_9: # %cond.store7
3859 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
3860 ; SSE4-NEXT:    testb $32, %al
3861 ; SSE4-NEXT:    je .LBB10_12
3862 ; SSE4-NEXT:  .LBB10_11: # %cond.store9
3863 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
3864 ; SSE4-NEXT:    testb $64, %al
3865 ; SSE4-NEXT:    je .LBB10_14
3866 ; SSE4-NEXT:  .LBB10_13: # %cond.store11
3867 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
3868 ; SSE4-NEXT:    testb $-128, %al
3869 ; SSE4-NEXT:    je .LBB10_16
3870 ; SSE4-NEXT:  .LBB10_15: # %cond.store13
3871 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
3872 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
3873 ; SSE4-NEXT:    je .LBB10_18
3874 ; SSE4-NEXT:  .LBB10_17: # %cond.store15
3875 ; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
3876 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
3877 ; SSE4-NEXT:    je .LBB10_20
3878 ; SSE4-NEXT:  .LBB10_19: # %cond.store17
3879 ; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
3880 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
3881 ; SSE4-NEXT:    je .LBB10_22
3882 ; SSE4-NEXT:  .LBB10_21: # %cond.store19
3883 ; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
3884 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
3885 ; SSE4-NEXT:    je .LBB10_24
3886 ; SSE4-NEXT:  .LBB10_23: # %cond.store21
3887 ; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
3888 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
3889 ; SSE4-NEXT:    je .LBB10_26
3890 ; SSE4-NEXT:  .LBB10_25: # %cond.store23
3891 ; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
3892 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
3893 ; SSE4-NEXT:    je .LBB10_28
3894 ; SSE4-NEXT:  .LBB10_27: # %cond.store25
3895 ; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
3896 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
3897 ; SSE4-NEXT:    je .LBB10_30
3898 ; SSE4-NEXT:  .LBB10_29: # %cond.store27
3899 ; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
3900 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
3901 ; SSE4-NEXT:    je .LBB10_32
3902 ; SSE4-NEXT:  .LBB10_31: # %cond.store29
3903 ; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
3904 ; SSE4-NEXT:    retq
3906 ; AVX1-LABEL: truncstore_v16i32_v16i8:
3907 ; AVX1:       # %bb.0:
3908 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3909 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm1, %xmm1
3910 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
3911 ; AVX1-NEXT:    vpackssdw %xmm4, %xmm0, %xmm0
3912 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
3913 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm1
3914 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
3915 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm1, %xmm1
3916 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
3917 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
3918 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3919 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3920 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm3, %xmm1
3921 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
3922 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm3, %xmm3
3923 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm3
3924 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm2, %xmm2
3925 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
3926 ; AVX1-NEXT:    vpackssdw %xmm3, %xmm2, %xmm2
3927 ; AVX1-NEXT:    vpacksswb %xmm1, %xmm2, %xmm1
3928 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
3929 ; AVX1-NEXT:    testb $1, %al
3930 ; AVX1-NEXT:    jne .LBB10_1
3931 ; AVX1-NEXT:  # %bb.2: # %else
3932 ; AVX1-NEXT:    testb $2, %al
3933 ; AVX1-NEXT:    jne .LBB10_3
3934 ; AVX1-NEXT:  .LBB10_4: # %else2
3935 ; AVX1-NEXT:    testb $4, %al
3936 ; AVX1-NEXT:    jne .LBB10_5
3937 ; AVX1-NEXT:  .LBB10_6: # %else4
3938 ; AVX1-NEXT:    testb $8, %al
3939 ; AVX1-NEXT:    jne .LBB10_7
3940 ; AVX1-NEXT:  .LBB10_8: # %else6
3941 ; AVX1-NEXT:    testb $16, %al
3942 ; AVX1-NEXT:    jne .LBB10_9
3943 ; AVX1-NEXT:  .LBB10_10: # %else8
3944 ; AVX1-NEXT:    testb $32, %al
3945 ; AVX1-NEXT:    jne .LBB10_11
3946 ; AVX1-NEXT:  .LBB10_12: # %else10
3947 ; AVX1-NEXT:    testb $64, %al
3948 ; AVX1-NEXT:    jne .LBB10_13
3949 ; AVX1-NEXT:  .LBB10_14: # %else12
3950 ; AVX1-NEXT:    testb $-128, %al
3951 ; AVX1-NEXT:    jne .LBB10_15
3952 ; AVX1-NEXT:  .LBB10_16: # %else14
3953 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
3954 ; AVX1-NEXT:    jne .LBB10_17
3955 ; AVX1-NEXT:  .LBB10_18: # %else16
3956 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
3957 ; AVX1-NEXT:    jne .LBB10_19
3958 ; AVX1-NEXT:  .LBB10_20: # %else18
3959 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
3960 ; AVX1-NEXT:    jne .LBB10_21
3961 ; AVX1-NEXT:  .LBB10_22: # %else20
3962 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
3963 ; AVX1-NEXT:    jne .LBB10_23
3964 ; AVX1-NEXT:  .LBB10_24: # %else22
3965 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
3966 ; AVX1-NEXT:    jne .LBB10_25
3967 ; AVX1-NEXT:  .LBB10_26: # %else24
3968 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
3969 ; AVX1-NEXT:    jne .LBB10_27
3970 ; AVX1-NEXT:  .LBB10_28: # %else26
3971 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
3972 ; AVX1-NEXT:    jne .LBB10_29
3973 ; AVX1-NEXT:  .LBB10_30: # %else28
3974 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
3975 ; AVX1-NEXT:    jne .LBB10_31
3976 ; AVX1-NEXT:  .LBB10_32: # %else30
3977 ; AVX1-NEXT:    vzeroupper
3978 ; AVX1-NEXT:    retq
3979 ; AVX1-NEXT:  .LBB10_1: # %cond.store
3980 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
3981 ; AVX1-NEXT:    testb $2, %al
3982 ; AVX1-NEXT:    je .LBB10_4
3983 ; AVX1-NEXT:  .LBB10_3: # %cond.store1
3984 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
3985 ; AVX1-NEXT:    testb $4, %al
3986 ; AVX1-NEXT:    je .LBB10_6
3987 ; AVX1-NEXT:  .LBB10_5: # %cond.store3
3988 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
3989 ; AVX1-NEXT:    testb $8, %al
3990 ; AVX1-NEXT:    je .LBB10_8
3991 ; AVX1-NEXT:  .LBB10_7: # %cond.store5
3992 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
3993 ; AVX1-NEXT:    testb $16, %al
3994 ; AVX1-NEXT:    je .LBB10_10
3995 ; AVX1-NEXT:  .LBB10_9: # %cond.store7
3996 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
3997 ; AVX1-NEXT:    testb $32, %al
3998 ; AVX1-NEXT:    je .LBB10_12
3999 ; AVX1-NEXT:  .LBB10_11: # %cond.store9
4000 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4001 ; AVX1-NEXT:    testb $64, %al
4002 ; AVX1-NEXT:    je .LBB10_14
4003 ; AVX1-NEXT:  .LBB10_13: # %cond.store11
4004 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4005 ; AVX1-NEXT:    testb $-128, %al
4006 ; AVX1-NEXT:    je .LBB10_16
4007 ; AVX1-NEXT:  .LBB10_15: # %cond.store13
4008 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4009 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
4010 ; AVX1-NEXT:    je .LBB10_18
4011 ; AVX1-NEXT:  .LBB10_17: # %cond.store15
4012 ; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
4013 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
4014 ; AVX1-NEXT:    je .LBB10_20
4015 ; AVX1-NEXT:  .LBB10_19: # %cond.store17
4016 ; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
4017 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
4018 ; AVX1-NEXT:    je .LBB10_22
4019 ; AVX1-NEXT:  .LBB10_21: # %cond.store19
4020 ; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
4021 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
4022 ; AVX1-NEXT:    je .LBB10_24
4023 ; AVX1-NEXT:  .LBB10_23: # %cond.store21
4024 ; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
4025 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
4026 ; AVX1-NEXT:    je .LBB10_26
4027 ; AVX1-NEXT:  .LBB10_25: # %cond.store23
4028 ; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
4029 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
4030 ; AVX1-NEXT:    je .LBB10_28
4031 ; AVX1-NEXT:  .LBB10_27: # %cond.store25
4032 ; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
4033 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
4034 ; AVX1-NEXT:    je .LBB10_30
4035 ; AVX1-NEXT:  .LBB10_29: # %cond.store27
4036 ; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
4037 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
4038 ; AVX1-NEXT:    je .LBB10_32
4039 ; AVX1-NEXT:  .LBB10_31: # %cond.store29
4040 ; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
4041 ; AVX1-NEXT:    vzeroupper
4042 ; AVX1-NEXT:    retq
4044 ; AVX2-LABEL: truncstore_v16i32_v16i8:
4045 ; AVX2:       # %bb.0:
4046 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
4047 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
4048 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4049 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
4050 ; AVX2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0
4051 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm1
4052 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
4053 ; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
4054 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm2
4055 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
4056 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm2, %ymm1
4057 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
4058 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
4059 ; AVX2-NEXT:    vpacksswb %xmm2, %xmm1, %xmm1
4060 ; AVX2-NEXT:    vpmovmskb %xmm1, %eax
4061 ; AVX2-NEXT:    testb $1, %al
4062 ; AVX2-NEXT:    jne .LBB10_1
4063 ; AVX2-NEXT:  # %bb.2: # %else
4064 ; AVX2-NEXT:    testb $2, %al
4065 ; AVX2-NEXT:    jne .LBB10_3
4066 ; AVX2-NEXT:  .LBB10_4: # %else2
4067 ; AVX2-NEXT:    testb $4, %al
4068 ; AVX2-NEXT:    jne .LBB10_5
4069 ; AVX2-NEXT:  .LBB10_6: # %else4
4070 ; AVX2-NEXT:    testb $8, %al
4071 ; AVX2-NEXT:    jne .LBB10_7
4072 ; AVX2-NEXT:  .LBB10_8: # %else6
4073 ; AVX2-NEXT:    testb $16, %al
4074 ; AVX2-NEXT:    jne .LBB10_9
4075 ; AVX2-NEXT:  .LBB10_10: # %else8
4076 ; AVX2-NEXT:    testb $32, %al
4077 ; AVX2-NEXT:    jne .LBB10_11
4078 ; AVX2-NEXT:  .LBB10_12: # %else10
4079 ; AVX2-NEXT:    testb $64, %al
4080 ; AVX2-NEXT:    jne .LBB10_13
4081 ; AVX2-NEXT:  .LBB10_14: # %else12
4082 ; AVX2-NEXT:    testb $-128, %al
4083 ; AVX2-NEXT:    jne .LBB10_15
4084 ; AVX2-NEXT:  .LBB10_16: # %else14
4085 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
4086 ; AVX2-NEXT:    jne .LBB10_17
4087 ; AVX2-NEXT:  .LBB10_18: # %else16
4088 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
4089 ; AVX2-NEXT:    jne .LBB10_19
4090 ; AVX2-NEXT:  .LBB10_20: # %else18
4091 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
4092 ; AVX2-NEXT:    jne .LBB10_21
4093 ; AVX2-NEXT:  .LBB10_22: # %else20
4094 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
4095 ; AVX2-NEXT:    jne .LBB10_23
4096 ; AVX2-NEXT:  .LBB10_24: # %else22
4097 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
4098 ; AVX2-NEXT:    jne .LBB10_25
4099 ; AVX2-NEXT:  .LBB10_26: # %else24
4100 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
4101 ; AVX2-NEXT:    jne .LBB10_27
4102 ; AVX2-NEXT:  .LBB10_28: # %else26
4103 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
4104 ; AVX2-NEXT:    jne .LBB10_29
4105 ; AVX2-NEXT:  .LBB10_30: # %else28
4106 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
4107 ; AVX2-NEXT:    jne .LBB10_31
4108 ; AVX2-NEXT:  .LBB10_32: # %else30
4109 ; AVX2-NEXT:    vzeroupper
4110 ; AVX2-NEXT:    retq
4111 ; AVX2-NEXT:  .LBB10_1: # %cond.store
4112 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
4113 ; AVX2-NEXT:    testb $2, %al
4114 ; AVX2-NEXT:    je .LBB10_4
4115 ; AVX2-NEXT:  .LBB10_3: # %cond.store1
4116 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4117 ; AVX2-NEXT:    testb $4, %al
4118 ; AVX2-NEXT:    je .LBB10_6
4119 ; AVX2-NEXT:  .LBB10_5: # %cond.store3
4120 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4121 ; AVX2-NEXT:    testb $8, %al
4122 ; AVX2-NEXT:    je .LBB10_8
4123 ; AVX2-NEXT:  .LBB10_7: # %cond.store5
4124 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4125 ; AVX2-NEXT:    testb $16, %al
4126 ; AVX2-NEXT:    je .LBB10_10
4127 ; AVX2-NEXT:  .LBB10_9: # %cond.store7
4128 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4129 ; AVX2-NEXT:    testb $32, %al
4130 ; AVX2-NEXT:    je .LBB10_12
4131 ; AVX2-NEXT:  .LBB10_11: # %cond.store9
4132 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4133 ; AVX2-NEXT:    testb $64, %al
4134 ; AVX2-NEXT:    je .LBB10_14
4135 ; AVX2-NEXT:  .LBB10_13: # %cond.store11
4136 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4137 ; AVX2-NEXT:    testb $-128, %al
4138 ; AVX2-NEXT:    je .LBB10_16
4139 ; AVX2-NEXT:  .LBB10_15: # %cond.store13
4140 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4141 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
4142 ; AVX2-NEXT:    je .LBB10_18
4143 ; AVX2-NEXT:  .LBB10_17: # %cond.store15
4144 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
4145 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
4146 ; AVX2-NEXT:    je .LBB10_20
4147 ; AVX2-NEXT:  .LBB10_19: # %cond.store17
4148 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
4149 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
4150 ; AVX2-NEXT:    je .LBB10_22
4151 ; AVX2-NEXT:  .LBB10_21: # %cond.store19
4152 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
4153 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
4154 ; AVX2-NEXT:    je .LBB10_24
4155 ; AVX2-NEXT:  .LBB10_23: # %cond.store21
4156 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
4157 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
4158 ; AVX2-NEXT:    je .LBB10_26
4159 ; AVX2-NEXT:  .LBB10_25: # %cond.store23
4160 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
4161 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
4162 ; AVX2-NEXT:    je .LBB10_28
4163 ; AVX2-NEXT:  .LBB10_27: # %cond.store25
4164 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
4165 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
4166 ; AVX2-NEXT:    je .LBB10_30
4167 ; AVX2-NEXT:  .LBB10_29: # %cond.store27
4168 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
4169 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
4170 ; AVX2-NEXT:    je .LBB10_32
4171 ; AVX2-NEXT:  .LBB10_31: # %cond.store29
4172 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
4173 ; AVX2-NEXT:    vzeroupper
4174 ; AVX2-NEXT:    retq
4176 ; AVX512F-LABEL: truncstore_v16i32_v16i8:
4177 ; AVX512F:       # %bb.0:
4178 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4179 ; AVX512F-NEXT:    vpmovsdb %zmm0, %xmm0
4180 ; AVX512F-NEXT:    kmovw %k0, %eax
4181 ; AVX512F-NEXT:    testb $1, %al
4182 ; AVX512F-NEXT:    jne .LBB10_1
4183 ; AVX512F-NEXT:  # %bb.2: # %else
4184 ; AVX512F-NEXT:    testb $2, %al
4185 ; AVX512F-NEXT:    jne .LBB10_3
4186 ; AVX512F-NEXT:  .LBB10_4: # %else2
4187 ; AVX512F-NEXT:    testb $4, %al
4188 ; AVX512F-NEXT:    jne .LBB10_5
4189 ; AVX512F-NEXT:  .LBB10_6: # %else4
4190 ; AVX512F-NEXT:    testb $8, %al
4191 ; AVX512F-NEXT:    jne .LBB10_7
4192 ; AVX512F-NEXT:  .LBB10_8: # %else6
4193 ; AVX512F-NEXT:    testb $16, %al
4194 ; AVX512F-NEXT:    jne .LBB10_9
4195 ; AVX512F-NEXT:  .LBB10_10: # %else8
4196 ; AVX512F-NEXT:    testb $32, %al
4197 ; AVX512F-NEXT:    jne .LBB10_11
4198 ; AVX512F-NEXT:  .LBB10_12: # %else10
4199 ; AVX512F-NEXT:    testb $64, %al
4200 ; AVX512F-NEXT:    jne .LBB10_13
4201 ; AVX512F-NEXT:  .LBB10_14: # %else12
4202 ; AVX512F-NEXT:    testb $-128, %al
4203 ; AVX512F-NEXT:    jne .LBB10_15
4204 ; AVX512F-NEXT:  .LBB10_16: # %else14
4205 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
4206 ; AVX512F-NEXT:    jne .LBB10_17
4207 ; AVX512F-NEXT:  .LBB10_18: # %else16
4208 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
4209 ; AVX512F-NEXT:    jne .LBB10_19
4210 ; AVX512F-NEXT:  .LBB10_20: # %else18
4211 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
4212 ; AVX512F-NEXT:    jne .LBB10_21
4213 ; AVX512F-NEXT:  .LBB10_22: # %else20
4214 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
4215 ; AVX512F-NEXT:    jne .LBB10_23
4216 ; AVX512F-NEXT:  .LBB10_24: # %else22
4217 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
4218 ; AVX512F-NEXT:    jne .LBB10_25
4219 ; AVX512F-NEXT:  .LBB10_26: # %else24
4220 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
4221 ; AVX512F-NEXT:    jne .LBB10_27
4222 ; AVX512F-NEXT:  .LBB10_28: # %else26
4223 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
4224 ; AVX512F-NEXT:    jne .LBB10_29
4225 ; AVX512F-NEXT:  .LBB10_30: # %else28
4226 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
4227 ; AVX512F-NEXT:    jne .LBB10_31
4228 ; AVX512F-NEXT:  .LBB10_32: # %else30
4229 ; AVX512F-NEXT:    vzeroupper
4230 ; AVX512F-NEXT:    retq
4231 ; AVX512F-NEXT:  .LBB10_1: # %cond.store
4232 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
4233 ; AVX512F-NEXT:    testb $2, %al
4234 ; AVX512F-NEXT:    je .LBB10_4
4235 ; AVX512F-NEXT:  .LBB10_3: # %cond.store1
4236 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4237 ; AVX512F-NEXT:    testb $4, %al
4238 ; AVX512F-NEXT:    je .LBB10_6
4239 ; AVX512F-NEXT:  .LBB10_5: # %cond.store3
4240 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4241 ; AVX512F-NEXT:    testb $8, %al
4242 ; AVX512F-NEXT:    je .LBB10_8
4243 ; AVX512F-NEXT:  .LBB10_7: # %cond.store5
4244 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4245 ; AVX512F-NEXT:    testb $16, %al
4246 ; AVX512F-NEXT:    je .LBB10_10
4247 ; AVX512F-NEXT:  .LBB10_9: # %cond.store7
4248 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4249 ; AVX512F-NEXT:    testb $32, %al
4250 ; AVX512F-NEXT:    je .LBB10_12
4251 ; AVX512F-NEXT:  .LBB10_11: # %cond.store9
4252 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4253 ; AVX512F-NEXT:    testb $64, %al
4254 ; AVX512F-NEXT:    je .LBB10_14
4255 ; AVX512F-NEXT:  .LBB10_13: # %cond.store11
4256 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4257 ; AVX512F-NEXT:    testb $-128, %al
4258 ; AVX512F-NEXT:    je .LBB10_16
4259 ; AVX512F-NEXT:  .LBB10_15: # %cond.store13
4260 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4261 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
4262 ; AVX512F-NEXT:    je .LBB10_18
4263 ; AVX512F-NEXT:  .LBB10_17: # %cond.store15
4264 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
4265 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
4266 ; AVX512F-NEXT:    je .LBB10_20
4267 ; AVX512F-NEXT:  .LBB10_19: # %cond.store17
4268 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
4269 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
4270 ; AVX512F-NEXT:    je .LBB10_22
4271 ; AVX512F-NEXT:  .LBB10_21: # %cond.store19
4272 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
4273 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
4274 ; AVX512F-NEXT:    je .LBB10_24
4275 ; AVX512F-NEXT:  .LBB10_23: # %cond.store21
4276 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
4277 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
4278 ; AVX512F-NEXT:    je .LBB10_26
4279 ; AVX512F-NEXT:  .LBB10_25: # %cond.store23
4280 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
4281 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
4282 ; AVX512F-NEXT:    je .LBB10_28
4283 ; AVX512F-NEXT:  .LBB10_27: # %cond.store25
4284 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
4285 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
4286 ; AVX512F-NEXT:    je .LBB10_30
4287 ; AVX512F-NEXT:  .LBB10_29: # %cond.store27
4288 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
4289 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
4290 ; AVX512F-NEXT:    je .LBB10_32
4291 ; AVX512F-NEXT:  .LBB10_31: # %cond.store29
4292 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
4293 ; AVX512F-NEXT:    vzeroupper
4294 ; AVX512F-NEXT:    retq
4296 ; AVX512BW-LABEL: truncstore_v16i32_v16i8:
4297 ; AVX512BW:       # %bb.0:
4298 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k1
4299 ; AVX512BW-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4300 ; AVX512BW-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4301 ; AVX512BW-NEXT:    vpmovdb %zmm0, (%rdi) {%k1}
4302 ; AVX512BW-NEXT:    vzeroupper
4303 ; AVX512BW-NEXT:    retq
4305 ; AVX512BWVL-LABEL: truncstore_v16i32_v16i8:
4306 ; AVX512BWVL:       # %bb.0:
4307 ; AVX512BWVL-NEXT:    vptestmd %zmm1, %zmm1, %k1
4308 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4309 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to16}, %zmm0, %zmm0
4310 ; AVX512BWVL-NEXT:    vpmovdb %zmm0, (%rdi) {%k1}
4311 ; AVX512BWVL-NEXT:    vzeroupper
4312 ; AVX512BWVL-NEXT:    retq
4313   %a = icmp ne <16 x i32> %mask, zeroinitializer
4314   %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>
4315   %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>
4316   %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>
4317   %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>
4318   %f = trunc <16 x i32> %e to <16 x i8>
4319   call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %f, <16 x i8>* %p, i32 1, <16 x i1> %a)
4320   ret void
4323 define void @truncstore_v8i32_v8i16(<8 x i32> %x, <8 x i16>* %p, <8 x i32> %mask) {
4324 ; SSE2-LABEL: truncstore_v8i32_v8i16:
4325 ; SSE2:       # %bb.0:
4326 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4327 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
4328 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3
4329 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
4330 ; SSE2-NEXT:    pxor %xmm1, %xmm3
4331 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
4332 ; SSE2-NEXT:    pxor %xmm1, %xmm2
4333 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
4334 ; SSE2-NEXT:    packsswb %xmm0, %xmm2
4335 ; SSE2-NEXT:    pmovmskb %xmm2, %eax
4336 ; SSE2-NEXT:    testb $1, %al
4337 ; SSE2-NEXT:    jne .LBB11_1
4338 ; SSE2-NEXT:  # %bb.2: # %else
4339 ; SSE2-NEXT:    testb $2, %al
4340 ; SSE2-NEXT:    jne .LBB11_3
4341 ; SSE2-NEXT:  .LBB11_4: # %else2
4342 ; SSE2-NEXT:    testb $4, %al
4343 ; SSE2-NEXT:    jne .LBB11_5
4344 ; SSE2-NEXT:  .LBB11_6: # %else4
4345 ; SSE2-NEXT:    testb $8, %al
4346 ; SSE2-NEXT:    jne .LBB11_7
4347 ; SSE2-NEXT:  .LBB11_8: # %else6
4348 ; SSE2-NEXT:    testb $16, %al
4349 ; SSE2-NEXT:    jne .LBB11_9
4350 ; SSE2-NEXT:  .LBB11_10: # %else8
4351 ; SSE2-NEXT:    testb $32, %al
4352 ; SSE2-NEXT:    jne .LBB11_11
4353 ; SSE2-NEXT:  .LBB11_12: # %else10
4354 ; SSE2-NEXT:    testb $64, %al
4355 ; SSE2-NEXT:    jne .LBB11_13
4356 ; SSE2-NEXT:  .LBB11_14: # %else12
4357 ; SSE2-NEXT:    testb $-128, %al
4358 ; SSE2-NEXT:    jne .LBB11_15
4359 ; SSE2-NEXT:  .LBB11_16: # %else14
4360 ; SSE2-NEXT:    retq
4361 ; SSE2-NEXT:  .LBB11_1: # %cond.store
4362 ; SSE2-NEXT:    movd %xmm0, %ecx
4363 ; SSE2-NEXT:    movw %cx, (%rdi)
4364 ; SSE2-NEXT:    testb $2, %al
4365 ; SSE2-NEXT:    je .LBB11_4
4366 ; SSE2-NEXT:  .LBB11_3: # %cond.store1
4367 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
4368 ; SSE2-NEXT:    movw %cx, 2(%rdi)
4369 ; SSE2-NEXT:    testb $4, %al
4370 ; SSE2-NEXT:    je .LBB11_6
4371 ; SSE2-NEXT:  .LBB11_5: # %cond.store3
4372 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
4373 ; SSE2-NEXT:    movw %cx, 4(%rdi)
4374 ; SSE2-NEXT:    testb $8, %al
4375 ; SSE2-NEXT:    je .LBB11_8
4376 ; SSE2-NEXT:  .LBB11_7: # %cond.store5
4377 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
4378 ; SSE2-NEXT:    movw %cx, 6(%rdi)
4379 ; SSE2-NEXT:    testb $16, %al
4380 ; SSE2-NEXT:    je .LBB11_10
4381 ; SSE2-NEXT:  .LBB11_9: # %cond.store7
4382 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
4383 ; SSE2-NEXT:    movw %cx, 8(%rdi)
4384 ; SSE2-NEXT:    testb $32, %al
4385 ; SSE2-NEXT:    je .LBB11_12
4386 ; SSE2-NEXT:  .LBB11_11: # %cond.store9
4387 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
4388 ; SSE2-NEXT:    movw %cx, 10(%rdi)
4389 ; SSE2-NEXT:    testb $64, %al
4390 ; SSE2-NEXT:    je .LBB11_14
4391 ; SSE2-NEXT:  .LBB11_13: # %cond.store11
4392 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
4393 ; SSE2-NEXT:    movw %cx, 12(%rdi)
4394 ; SSE2-NEXT:    testb $-128, %al
4395 ; SSE2-NEXT:    je .LBB11_16
4396 ; SSE2-NEXT:  .LBB11_15: # %cond.store13
4397 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
4398 ; SSE2-NEXT:    movw %ax, 14(%rdi)
4399 ; SSE2-NEXT:    retq
4401 ; SSE4-LABEL: truncstore_v8i32_v8i16:
4402 ; SSE4:       # %bb.0:
4403 ; SSE4-NEXT:    pxor %xmm4, %xmm4
4404 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
4405 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3
4406 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
4407 ; SSE4-NEXT:    pxor %xmm1, %xmm3
4408 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm2
4409 ; SSE4-NEXT:    pxor %xmm1, %xmm2
4410 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
4411 ; SSE4-NEXT:    packsswb %xmm0, %xmm2
4412 ; SSE4-NEXT:    pmovmskb %xmm2, %eax
4413 ; SSE4-NEXT:    testb $1, %al
4414 ; SSE4-NEXT:    jne .LBB11_1
4415 ; SSE4-NEXT:  # %bb.2: # %else
4416 ; SSE4-NEXT:    testb $2, %al
4417 ; SSE4-NEXT:    jne .LBB11_3
4418 ; SSE4-NEXT:  .LBB11_4: # %else2
4419 ; SSE4-NEXT:    testb $4, %al
4420 ; SSE4-NEXT:    jne .LBB11_5
4421 ; SSE4-NEXT:  .LBB11_6: # %else4
4422 ; SSE4-NEXT:    testb $8, %al
4423 ; SSE4-NEXT:    jne .LBB11_7
4424 ; SSE4-NEXT:  .LBB11_8: # %else6
4425 ; SSE4-NEXT:    testb $16, %al
4426 ; SSE4-NEXT:    jne .LBB11_9
4427 ; SSE4-NEXT:  .LBB11_10: # %else8
4428 ; SSE4-NEXT:    testb $32, %al
4429 ; SSE4-NEXT:    jne .LBB11_11
4430 ; SSE4-NEXT:  .LBB11_12: # %else10
4431 ; SSE4-NEXT:    testb $64, %al
4432 ; SSE4-NEXT:    jne .LBB11_13
4433 ; SSE4-NEXT:  .LBB11_14: # %else12
4434 ; SSE4-NEXT:    testb $-128, %al
4435 ; SSE4-NEXT:    jne .LBB11_15
4436 ; SSE4-NEXT:  .LBB11_16: # %else14
4437 ; SSE4-NEXT:    retq
4438 ; SSE4-NEXT:  .LBB11_1: # %cond.store
4439 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
4440 ; SSE4-NEXT:    testb $2, %al
4441 ; SSE4-NEXT:    je .LBB11_4
4442 ; SSE4-NEXT:  .LBB11_3: # %cond.store1
4443 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
4444 ; SSE4-NEXT:    testb $4, %al
4445 ; SSE4-NEXT:    je .LBB11_6
4446 ; SSE4-NEXT:  .LBB11_5: # %cond.store3
4447 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
4448 ; SSE4-NEXT:    testb $8, %al
4449 ; SSE4-NEXT:    je .LBB11_8
4450 ; SSE4-NEXT:  .LBB11_7: # %cond.store5
4451 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
4452 ; SSE4-NEXT:    testb $16, %al
4453 ; SSE4-NEXT:    je .LBB11_10
4454 ; SSE4-NEXT:  .LBB11_9: # %cond.store7
4455 ; SSE4-NEXT:    pextrw $4, %xmm0, 8(%rdi)
4456 ; SSE4-NEXT:    testb $32, %al
4457 ; SSE4-NEXT:    je .LBB11_12
4458 ; SSE4-NEXT:  .LBB11_11: # %cond.store9
4459 ; SSE4-NEXT:    pextrw $5, %xmm0, 10(%rdi)
4460 ; SSE4-NEXT:    testb $64, %al
4461 ; SSE4-NEXT:    je .LBB11_14
4462 ; SSE4-NEXT:  .LBB11_13: # %cond.store11
4463 ; SSE4-NEXT:    pextrw $6, %xmm0, 12(%rdi)
4464 ; SSE4-NEXT:    testb $-128, %al
4465 ; SSE4-NEXT:    je .LBB11_16
4466 ; SSE4-NEXT:  .LBB11_15: # %cond.store13
4467 ; SSE4-NEXT:    pextrw $7, %xmm0, 14(%rdi)
4468 ; SSE4-NEXT:    retq
4470 ; AVX1-LABEL: truncstore_v8i32_v8i16:
4471 ; AVX1:       # %bb.0:
4472 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4473 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
4474 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4475 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
4476 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
4477 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
4478 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4479 ; AVX1-NEXT:    vmovmskps %ymm1, %eax
4480 ; AVX1-NEXT:    notl %eax
4481 ; AVX1-NEXT:    testb $1, %al
4482 ; AVX1-NEXT:    jne .LBB11_1
4483 ; AVX1-NEXT:  # %bb.2: # %else
4484 ; AVX1-NEXT:    testb $2, %al
4485 ; AVX1-NEXT:    jne .LBB11_3
4486 ; AVX1-NEXT:  .LBB11_4: # %else2
4487 ; AVX1-NEXT:    testb $4, %al
4488 ; AVX1-NEXT:    jne .LBB11_5
4489 ; AVX1-NEXT:  .LBB11_6: # %else4
4490 ; AVX1-NEXT:    testb $8, %al
4491 ; AVX1-NEXT:    jne .LBB11_7
4492 ; AVX1-NEXT:  .LBB11_8: # %else6
4493 ; AVX1-NEXT:    testb $16, %al
4494 ; AVX1-NEXT:    jne .LBB11_9
4495 ; AVX1-NEXT:  .LBB11_10: # %else8
4496 ; AVX1-NEXT:    testb $32, %al
4497 ; AVX1-NEXT:    jne .LBB11_11
4498 ; AVX1-NEXT:  .LBB11_12: # %else10
4499 ; AVX1-NEXT:    testb $64, %al
4500 ; AVX1-NEXT:    jne .LBB11_13
4501 ; AVX1-NEXT:  .LBB11_14: # %else12
4502 ; AVX1-NEXT:    testb $-128, %al
4503 ; AVX1-NEXT:    jne .LBB11_15
4504 ; AVX1-NEXT:  .LBB11_16: # %else14
4505 ; AVX1-NEXT:    vzeroupper
4506 ; AVX1-NEXT:    retq
4507 ; AVX1-NEXT:  .LBB11_1: # %cond.store
4508 ; AVX1-NEXT:    vpextrw $0, %xmm0, (%rdi)
4509 ; AVX1-NEXT:    testb $2, %al
4510 ; AVX1-NEXT:    je .LBB11_4
4511 ; AVX1-NEXT:  .LBB11_3: # %cond.store1
4512 ; AVX1-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4513 ; AVX1-NEXT:    testb $4, %al
4514 ; AVX1-NEXT:    je .LBB11_6
4515 ; AVX1-NEXT:  .LBB11_5: # %cond.store3
4516 ; AVX1-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4517 ; AVX1-NEXT:    testb $8, %al
4518 ; AVX1-NEXT:    je .LBB11_8
4519 ; AVX1-NEXT:  .LBB11_7: # %cond.store5
4520 ; AVX1-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4521 ; AVX1-NEXT:    testb $16, %al
4522 ; AVX1-NEXT:    je .LBB11_10
4523 ; AVX1-NEXT:  .LBB11_9: # %cond.store7
4524 ; AVX1-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
4525 ; AVX1-NEXT:    testb $32, %al
4526 ; AVX1-NEXT:    je .LBB11_12
4527 ; AVX1-NEXT:  .LBB11_11: # %cond.store9
4528 ; AVX1-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
4529 ; AVX1-NEXT:    testb $64, %al
4530 ; AVX1-NEXT:    je .LBB11_14
4531 ; AVX1-NEXT:  .LBB11_13: # %cond.store11
4532 ; AVX1-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
4533 ; AVX1-NEXT:    testb $-128, %al
4534 ; AVX1-NEXT:    je .LBB11_16
4535 ; AVX1-NEXT:  .LBB11_15: # %cond.store13
4536 ; AVX1-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
4537 ; AVX1-NEXT:    vzeroupper
4538 ; AVX1-NEXT:    retq
4540 ; AVX2-LABEL: truncstore_v8i32_v8i16:
4541 ; AVX2:       # %bb.0:
4542 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4543 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
4544 ; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
4545 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
4546 ; AVX2-NEXT:    vmovmskps %ymm1, %eax
4547 ; AVX2-NEXT:    notl %eax
4548 ; AVX2-NEXT:    testb $1, %al
4549 ; AVX2-NEXT:    jne .LBB11_1
4550 ; AVX2-NEXT:  # %bb.2: # %else
4551 ; AVX2-NEXT:    testb $2, %al
4552 ; AVX2-NEXT:    jne .LBB11_3
4553 ; AVX2-NEXT:  .LBB11_4: # %else2
4554 ; AVX2-NEXT:    testb $4, %al
4555 ; AVX2-NEXT:    jne .LBB11_5
4556 ; AVX2-NEXT:  .LBB11_6: # %else4
4557 ; AVX2-NEXT:    testb $8, %al
4558 ; AVX2-NEXT:    jne .LBB11_7
4559 ; AVX2-NEXT:  .LBB11_8: # %else6
4560 ; AVX2-NEXT:    testb $16, %al
4561 ; AVX2-NEXT:    jne .LBB11_9
4562 ; AVX2-NEXT:  .LBB11_10: # %else8
4563 ; AVX2-NEXT:    testb $32, %al
4564 ; AVX2-NEXT:    jne .LBB11_11
4565 ; AVX2-NEXT:  .LBB11_12: # %else10
4566 ; AVX2-NEXT:    testb $64, %al
4567 ; AVX2-NEXT:    jne .LBB11_13
4568 ; AVX2-NEXT:  .LBB11_14: # %else12
4569 ; AVX2-NEXT:    testb $-128, %al
4570 ; AVX2-NEXT:    jne .LBB11_15
4571 ; AVX2-NEXT:  .LBB11_16: # %else14
4572 ; AVX2-NEXT:    vzeroupper
4573 ; AVX2-NEXT:    retq
4574 ; AVX2-NEXT:  .LBB11_1: # %cond.store
4575 ; AVX2-NEXT:    vpextrw $0, %xmm0, (%rdi)
4576 ; AVX2-NEXT:    testb $2, %al
4577 ; AVX2-NEXT:    je .LBB11_4
4578 ; AVX2-NEXT:  .LBB11_3: # %cond.store1
4579 ; AVX2-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4580 ; AVX2-NEXT:    testb $4, %al
4581 ; AVX2-NEXT:    je .LBB11_6
4582 ; AVX2-NEXT:  .LBB11_5: # %cond.store3
4583 ; AVX2-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4584 ; AVX2-NEXT:    testb $8, %al
4585 ; AVX2-NEXT:    je .LBB11_8
4586 ; AVX2-NEXT:  .LBB11_7: # %cond.store5
4587 ; AVX2-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4588 ; AVX2-NEXT:    testb $16, %al
4589 ; AVX2-NEXT:    je .LBB11_10
4590 ; AVX2-NEXT:  .LBB11_9: # %cond.store7
4591 ; AVX2-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
4592 ; AVX2-NEXT:    testb $32, %al
4593 ; AVX2-NEXT:    je .LBB11_12
4594 ; AVX2-NEXT:  .LBB11_11: # %cond.store9
4595 ; AVX2-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
4596 ; AVX2-NEXT:    testb $64, %al
4597 ; AVX2-NEXT:    je .LBB11_14
4598 ; AVX2-NEXT:  .LBB11_13: # %cond.store11
4599 ; AVX2-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
4600 ; AVX2-NEXT:    testb $-128, %al
4601 ; AVX2-NEXT:    je .LBB11_16
4602 ; AVX2-NEXT:  .LBB11_15: # %cond.store13
4603 ; AVX2-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
4604 ; AVX2-NEXT:    vzeroupper
4605 ; AVX2-NEXT:    retq
4607 ; AVX512F-LABEL: truncstore_v8i32_v8i16:
4608 ; AVX512F:       # %bb.0:
4609 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4610 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4611 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [32767,32767,32767,32767,32767,32767,32767,32767]
4612 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
4613 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528]
4614 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
4615 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
4616 ; AVX512F-NEXT:    kmovw %k0, %eax
4617 ; AVX512F-NEXT:    testb $1, %al
4618 ; AVX512F-NEXT:    jne .LBB11_1
4619 ; AVX512F-NEXT:  # %bb.2: # %else
4620 ; AVX512F-NEXT:    testb $2, %al
4621 ; AVX512F-NEXT:    jne .LBB11_3
4622 ; AVX512F-NEXT:  .LBB11_4: # %else2
4623 ; AVX512F-NEXT:    testb $4, %al
4624 ; AVX512F-NEXT:    jne .LBB11_5
4625 ; AVX512F-NEXT:  .LBB11_6: # %else4
4626 ; AVX512F-NEXT:    testb $8, %al
4627 ; AVX512F-NEXT:    jne .LBB11_7
4628 ; AVX512F-NEXT:  .LBB11_8: # %else6
4629 ; AVX512F-NEXT:    testb $16, %al
4630 ; AVX512F-NEXT:    jne .LBB11_9
4631 ; AVX512F-NEXT:  .LBB11_10: # %else8
4632 ; AVX512F-NEXT:    testb $32, %al
4633 ; AVX512F-NEXT:    jne .LBB11_11
4634 ; AVX512F-NEXT:  .LBB11_12: # %else10
4635 ; AVX512F-NEXT:    testb $64, %al
4636 ; AVX512F-NEXT:    jne .LBB11_13
4637 ; AVX512F-NEXT:  .LBB11_14: # %else12
4638 ; AVX512F-NEXT:    testb $-128, %al
4639 ; AVX512F-NEXT:    jne .LBB11_15
4640 ; AVX512F-NEXT:  .LBB11_16: # %else14
4641 ; AVX512F-NEXT:    vzeroupper
4642 ; AVX512F-NEXT:    retq
4643 ; AVX512F-NEXT:  .LBB11_1: # %cond.store
4644 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
4645 ; AVX512F-NEXT:    testb $2, %al
4646 ; AVX512F-NEXT:    je .LBB11_4
4647 ; AVX512F-NEXT:  .LBB11_3: # %cond.store1
4648 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
4649 ; AVX512F-NEXT:    testb $4, %al
4650 ; AVX512F-NEXT:    je .LBB11_6
4651 ; AVX512F-NEXT:  .LBB11_5: # %cond.store3
4652 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
4653 ; AVX512F-NEXT:    testb $8, %al
4654 ; AVX512F-NEXT:    je .LBB11_8
4655 ; AVX512F-NEXT:  .LBB11_7: # %cond.store5
4656 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
4657 ; AVX512F-NEXT:    testb $16, %al
4658 ; AVX512F-NEXT:    je .LBB11_10
4659 ; AVX512F-NEXT:  .LBB11_9: # %cond.store7
4660 ; AVX512F-NEXT:    vpextrw $4, %xmm0, 8(%rdi)
4661 ; AVX512F-NEXT:    testb $32, %al
4662 ; AVX512F-NEXT:    je .LBB11_12
4663 ; AVX512F-NEXT:  .LBB11_11: # %cond.store9
4664 ; AVX512F-NEXT:    vpextrw $5, %xmm0, 10(%rdi)
4665 ; AVX512F-NEXT:    testb $64, %al
4666 ; AVX512F-NEXT:    je .LBB11_14
4667 ; AVX512F-NEXT:  .LBB11_13: # %cond.store11
4668 ; AVX512F-NEXT:    vpextrw $6, %xmm0, 12(%rdi)
4669 ; AVX512F-NEXT:    testb $-128, %al
4670 ; AVX512F-NEXT:    je .LBB11_16
4671 ; AVX512F-NEXT:  .LBB11_15: # %cond.store13
4672 ; AVX512F-NEXT:    vpextrw $7, %xmm0, 14(%rdi)
4673 ; AVX512F-NEXT:    vzeroupper
4674 ; AVX512F-NEXT:    retq
4676 ; AVX512BW-LABEL: truncstore_v8i32_v8i16:
4677 ; AVX512BW:       # %bb.0:
4678 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4679 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
4680 ; AVX512BW-NEXT:    kshiftld $24, %k0, %k0
4681 ; AVX512BW-NEXT:    kshiftrd $24, %k0, %k1
4682 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [32767,32767,32767,32767,32767,32767,32767,32767]
4683 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
4684 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528]
4685 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
4686 ; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
4687 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
4688 ; AVX512BW-NEXT:    vzeroupper
4689 ; AVX512BW-NEXT:    retq
4691 ; AVX512BWVL-LABEL: truncstore_v8i32_v8i16:
4692 ; AVX512BWVL:       # %bb.0:
4693 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
4694 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
4695 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
4696 ; AVX512BWVL-NEXT:    vpmovdw %ymm0, (%rdi) {%k1}
4697 ; AVX512BWVL-NEXT:    vzeroupper
4698 ; AVX512BWVL-NEXT:    retq
4699   %a = icmp ne <8 x i32> %mask, zeroinitializer
4700   %b = icmp slt <8 x i32> %x, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767>
4701   %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>
4702   %d = icmp sgt <8 x i32> %c, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768>
4703   %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>
4704   %f = trunc <8 x i32> %e to <8 x i16>
4705   call void @llvm.masked.store.v8i16.p0v8i16(<8 x i16> %f, <8 x i16>* %p, i32 1, <8 x i1> %a)
4706   ret void
4709 define void @truncstore_v8i32_v8i8(<8 x i32> %x, <8 x i8>* %p, <8 x i32> %mask) {
4710 ; SSE2-LABEL: truncstore_v8i32_v8i8:
4711 ; SSE2:       # %bb.0:
4712 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4713 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
4714 ; SSE2-NEXT:    packsswb %xmm0, %xmm0
4715 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm3
4716 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
4717 ; SSE2-NEXT:    pxor %xmm1, %xmm3
4718 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
4719 ; SSE2-NEXT:    pxor %xmm1, %xmm2
4720 ; SSE2-NEXT:    packssdw %xmm3, %xmm2
4721 ; SSE2-NEXT:    packsswb %xmm0, %xmm2
4722 ; SSE2-NEXT:    pmovmskb %xmm2, %eax
4723 ; SSE2-NEXT:    testb $1, %al
4724 ; SSE2-NEXT:    movd %xmm0, %ecx
4725 ; SSE2-NEXT:    jne .LBB12_1
4726 ; SSE2-NEXT:  # %bb.2: # %else
4727 ; SSE2-NEXT:    testb $2, %al
4728 ; SSE2-NEXT:    jne .LBB12_3
4729 ; SSE2-NEXT:  .LBB12_4: # %else2
4730 ; SSE2-NEXT:    testb $4, %al
4731 ; SSE2-NEXT:    jne .LBB12_5
4732 ; SSE2-NEXT:  .LBB12_6: # %else4
4733 ; SSE2-NEXT:    testb $8, %al
4734 ; SSE2-NEXT:    je .LBB12_8
4735 ; SSE2-NEXT:  .LBB12_7: # %cond.store5
4736 ; SSE2-NEXT:    shrl $24, %ecx
4737 ; SSE2-NEXT:    movb %cl, 3(%rdi)
4738 ; SSE2-NEXT:  .LBB12_8: # %else6
4739 ; SSE2-NEXT:    testb $16, %al
4740 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
4741 ; SSE2-NEXT:    je .LBB12_10
4742 ; SSE2-NEXT:  # %bb.9: # %cond.store7
4743 ; SSE2-NEXT:    movb %cl, 4(%rdi)
4744 ; SSE2-NEXT:  .LBB12_10: # %else8
4745 ; SSE2-NEXT:    testb $32, %al
4746 ; SSE2-NEXT:    je .LBB12_12
4747 ; SSE2-NEXT:  # %bb.11: # %cond.store9
4748 ; SSE2-NEXT:    movb %ch, 5(%rdi)
4749 ; SSE2-NEXT:  .LBB12_12: # %else10
4750 ; SSE2-NEXT:    testb $64, %al
4751 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
4752 ; SSE2-NEXT:    jne .LBB12_13
4753 ; SSE2-NEXT:  # %bb.14: # %else12
4754 ; SSE2-NEXT:    testb $-128, %al
4755 ; SSE2-NEXT:    jne .LBB12_15
4756 ; SSE2-NEXT:  .LBB12_16: # %else14
4757 ; SSE2-NEXT:    retq
4758 ; SSE2-NEXT:  .LBB12_1: # %cond.store
4759 ; SSE2-NEXT:    movb %cl, (%rdi)
4760 ; SSE2-NEXT:    testb $2, %al
4761 ; SSE2-NEXT:    je .LBB12_4
4762 ; SSE2-NEXT:  .LBB12_3: # %cond.store1
4763 ; SSE2-NEXT:    movb %ch, 1(%rdi)
4764 ; SSE2-NEXT:    testb $4, %al
4765 ; SSE2-NEXT:    je .LBB12_6
4766 ; SSE2-NEXT:  .LBB12_5: # %cond.store3
4767 ; SSE2-NEXT:    movl %ecx, %edx
4768 ; SSE2-NEXT:    shrl $16, %edx
4769 ; SSE2-NEXT:    movb %dl, 2(%rdi)
4770 ; SSE2-NEXT:    testb $8, %al
4771 ; SSE2-NEXT:    jne .LBB12_7
4772 ; SSE2-NEXT:    jmp .LBB12_8
4773 ; SSE2-NEXT:  .LBB12_13: # %cond.store11
4774 ; SSE2-NEXT:    movb %cl, 6(%rdi)
4775 ; SSE2-NEXT:    testb $-128, %al
4776 ; SSE2-NEXT:    je .LBB12_16
4777 ; SSE2-NEXT:  .LBB12_15: # %cond.store13
4778 ; SSE2-NEXT:    movb %ch, 7(%rdi)
4779 ; SSE2-NEXT:    retq
4781 ; SSE4-LABEL: truncstore_v8i32_v8i8:
4782 ; SSE4:       # %bb.0:
4783 ; SSE4-NEXT:    pxor %xmm4, %xmm4
4784 ; SSE4-NEXT:    packssdw %xmm1, %xmm0
4785 ; SSE4-NEXT:    packsswb %xmm0, %xmm0
4786 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm3
4787 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
4788 ; SSE4-NEXT:    pxor %xmm1, %xmm3
4789 ; SSE4-NEXT:    pcmpeqd %xmm4, %xmm2
4790 ; SSE4-NEXT:    pxor %xmm1, %xmm2
4791 ; SSE4-NEXT:    packssdw %xmm3, %xmm2
4792 ; SSE4-NEXT:    packsswb %xmm0, %xmm2
4793 ; SSE4-NEXT:    pmovmskb %xmm2, %eax
4794 ; SSE4-NEXT:    testb $1, %al
4795 ; SSE4-NEXT:    jne .LBB12_1
4796 ; SSE4-NEXT:  # %bb.2: # %else
4797 ; SSE4-NEXT:    testb $2, %al
4798 ; SSE4-NEXT:    jne .LBB12_3
4799 ; SSE4-NEXT:  .LBB12_4: # %else2
4800 ; SSE4-NEXT:    testb $4, %al
4801 ; SSE4-NEXT:    jne .LBB12_5
4802 ; SSE4-NEXT:  .LBB12_6: # %else4
4803 ; SSE4-NEXT:    testb $8, %al
4804 ; SSE4-NEXT:    jne .LBB12_7
4805 ; SSE4-NEXT:  .LBB12_8: # %else6
4806 ; SSE4-NEXT:    testb $16, %al
4807 ; SSE4-NEXT:    jne .LBB12_9
4808 ; SSE4-NEXT:  .LBB12_10: # %else8
4809 ; SSE4-NEXT:    testb $32, %al
4810 ; SSE4-NEXT:    jne .LBB12_11
4811 ; SSE4-NEXT:  .LBB12_12: # %else10
4812 ; SSE4-NEXT:    testb $64, %al
4813 ; SSE4-NEXT:    jne .LBB12_13
4814 ; SSE4-NEXT:  .LBB12_14: # %else12
4815 ; SSE4-NEXT:    testb $-128, %al
4816 ; SSE4-NEXT:    jne .LBB12_15
4817 ; SSE4-NEXT:  .LBB12_16: # %else14
4818 ; SSE4-NEXT:    retq
4819 ; SSE4-NEXT:  .LBB12_1: # %cond.store
4820 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
4821 ; SSE4-NEXT:    testb $2, %al
4822 ; SSE4-NEXT:    je .LBB12_4
4823 ; SSE4-NEXT:  .LBB12_3: # %cond.store1
4824 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
4825 ; SSE4-NEXT:    testb $4, %al
4826 ; SSE4-NEXT:    je .LBB12_6
4827 ; SSE4-NEXT:  .LBB12_5: # %cond.store3
4828 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
4829 ; SSE4-NEXT:    testb $8, %al
4830 ; SSE4-NEXT:    je .LBB12_8
4831 ; SSE4-NEXT:  .LBB12_7: # %cond.store5
4832 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
4833 ; SSE4-NEXT:    testb $16, %al
4834 ; SSE4-NEXT:    je .LBB12_10
4835 ; SSE4-NEXT:  .LBB12_9: # %cond.store7
4836 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
4837 ; SSE4-NEXT:    testb $32, %al
4838 ; SSE4-NEXT:    je .LBB12_12
4839 ; SSE4-NEXT:  .LBB12_11: # %cond.store9
4840 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
4841 ; SSE4-NEXT:    testb $64, %al
4842 ; SSE4-NEXT:    je .LBB12_14
4843 ; SSE4-NEXT:  .LBB12_13: # %cond.store11
4844 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
4845 ; SSE4-NEXT:    testb $-128, %al
4846 ; SSE4-NEXT:    je .LBB12_16
4847 ; SSE4-NEXT:  .LBB12_15: # %cond.store13
4848 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
4849 ; SSE4-NEXT:    retq
4851 ; AVX1-LABEL: truncstore_v8i32_v8i8:
4852 ; AVX1:       # %bb.0:
4853 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4854 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
4855 ; AVX1-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
4856 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4857 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
4858 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
4859 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm1, %xmm1
4860 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4861 ; AVX1-NEXT:    vmovmskps %ymm1, %eax
4862 ; AVX1-NEXT:    notl %eax
4863 ; AVX1-NEXT:    testb $1, %al
4864 ; AVX1-NEXT:    jne .LBB12_1
4865 ; AVX1-NEXT:  # %bb.2: # %else
4866 ; AVX1-NEXT:    testb $2, %al
4867 ; AVX1-NEXT:    jne .LBB12_3
4868 ; AVX1-NEXT:  .LBB12_4: # %else2
4869 ; AVX1-NEXT:    testb $4, %al
4870 ; AVX1-NEXT:    jne .LBB12_5
4871 ; AVX1-NEXT:  .LBB12_6: # %else4
4872 ; AVX1-NEXT:    testb $8, %al
4873 ; AVX1-NEXT:    jne .LBB12_7
4874 ; AVX1-NEXT:  .LBB12_8: # %else6
4875 ; AVX1-NEXT:    testb $16, %al
4876 ; AVX1-NEXT:    jne .LBB12_9
4877 ; AVX1-NEXT:  .LBB12_10: # %else8
4878 ; AVX1-NEXT:    testb $32, %al
4879 ; AVX1-NEXT:    jne .LBB12_11
4880 ; AVX1-NEXT:  .LBB12_12: # %else10
4881 ; AVX1-NEXT:    testb $64, %al
4882 ; AVX1-NEXT:    jne .LBB12_13
4883 ; AVX1-NEXT:  .LBB12_14: # %else12
4884 ; AVX1-NEXT:    testb $-128, %al
4885 ; AVX1-NEXT:    jne .LBB12_15
4886 ; AVX1-NEXT:  .LBB12_16: # %else14
4887 ; AVX1-NEXT:    vzeroupper
4888 ; AVX1-NEXT:    retq
4889 ; AVX1-NEXT:  .LBB12_1: # %cond.store
4890 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
4891 ; AVX1-NEXT:    testb $2, %al
4892 ; AVX1-NEXT:    je .LBB12_4
4893 ; AVX1-NEXT:  .LBB12_3: # %cond.store1
4894 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4895 ; AVX1-NEXT:    testb $4, %al
4896 ; AVX1-NEXT:    je .LBB12_6
4897 ; AVX1-NEXT:  .LBB12_5: # %cond.store3
4898 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4899 ; AVX1-NEXT:    testb $8, %al
4900 ; AVX1-NEXT:    je .LBB12_8
4901 ; AVX1-NEXT:  .LBB12_7: # %cond.store5
4902 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4903 ; AVX1-NEXT:    testb $16, %al
4904 ; AVX1-NEXT:    je .LBB12_10
4905 ; AVX1-NEXT:  .LBB12_9: # %cond.store7
4906 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4907 ; AVX1-NEXT:    testb $32, %al
4908 ; AVX1-NEXT:    je .LBB12_12
4909 ; AVX1-NEXT:  .LBB12_11: # %cond.store9
4910 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4911 ; AVX1-NEXT:    testb $64, %al
4912 ; AVX1-NEXT:    je .LBB12_14
4913 ; AVX1-NEXT:  .LBB12_13: # %cond.store11
4914 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4915 ; AVX1-NEXT:    testb $-128, %al
4916 ; AVX1-NEXT:    je .LBB12_16
4917 ; AVX1-NEXT:  .LBB12_15: # %cond.store13
4918 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4919 ; AVX1-NEXT:    vzeroupper
4920 ; AVX1-NEXT:    retq
4922 ; AVX2-LABEL: truncstore_v8i32_v8i8:
4923 ; AVX2:       # %bb.0:
4924 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4925 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
4926 ; AVX2-NEXT:    vpackssdw %xmm3, %xmm0, %xmm0
4927 ; AVX2-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
4928 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm1, %ymm1
4929 ; AVX2-NEXT:    vmovmskps %ymm1, %eax
4930 ; AVX2-NEXT:    notl %eax
4931 ; AVX2-NEXT:    testb $1, %al
4932 ; AVX2-NEXT:    jne .LBB12_1
4933 ; AVX2-NEXT:  # %bb.2: # %else
4934 ; AVX2-NEXT:    testb $2, %al
4935 ; AVX2-NEXT:    jne .LBB12_3
4936 ; AVX2-NEXT:  .LBB12_4: # %else2
4937 ; AVX2-NEXT:    testb $4, %al
4938 ; AVX2-NEXT:    jne .LBB12_5
4939 ; AVX2-NEXT:  .LBB12_6: # %else4
4940 ; AVX2-NEXT:    testb $8, %al
4941 ; AVX2-NEXT:    jne .LBB12_7
4942 ; AVX2-NEXT:  .LBB12_8: # %else6
4943 ; AVX2-NEXT:    testb $16, %al
4944 ; AVX2-NEXT:    jne .LBB12_9
4945 ; AVX2-NEXT:  .LBB12_10: # %else8
4946 ; AVX2-NEXT:    testb $32, %al
4947 ; AVX2-NEXT:    jne .LBB12_11
4948 ; AVX2-NEXT:  .LBB12_12: # %else10
4949 ; AVX2-NEXT:    testb $64, %al
4950 ; AVX2-NEXT:    jne .LBB12_13
4951 ; AVX2-NEXT:  .LBB12_14: # %else12
4952 ; AVX2-NEXT:    testb $-128, %al
4953 ; AVX2-NEXT:    jne .LBB12_15
4954 ; AVX2-NEXT:  .LBB12_16: # %else14
4955 ; AVX2-NEXT:    vzeroupper
4956 ; AVX2-NEXT:    retq
4957 ; AVX2-NEXT:  .LBB12_1: # %cond.store
4958 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
4959 ; AVX2-NEXT:    testb $2, %al
4960 ; AVX2-NEXT:    je .LBB12_4
4961 ; AVX2-NEXT:  .LBB12_3: # %cond.store1
4962 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
4963 ; AVX2-NEXT:    testb $4, %al
4964 ; AVX2-NEXT:    je .LBB12_6
4965 ; AVX2-NEXT:  .LBB12_5: # %cond.store3
4966 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
4967 ; AVX2-NEXT:    testb $8, %al
4968 ; AVX2-NEXT:    je .LBB12_8
4969 ; AVX2-NEXT:  .LBB12_7: # %cond.store5
4970 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
4971 ; AVX2-NEXT:    testb $16, %al
4972 ; AVX2-NEXT:    je .LBB12_10
4973 ; AVX2-NEXT:  .LBB12_9: # %cond.store7
4974 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
4975 ; AVX2-NEXT:    testb $32, %al
4976 ; AVX2-NEXT:    je .LBB12_12
4977 ; AVX2-NEXT:  .LBB12_11: # %cond.store9
4978 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
4979 ; AVX2-NEXT:    testb $64, %al
4980 ; AVX2-NEXT:    je .LBB12_14
4981 ; AVX2-NEXT:  .LBB12_13: # %cond.store11
4982 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
4983 ; AVX2-NEXT:    testb $-128, %al
4984 ; AVX2-NEXT:    je .LBB12_16
4985 ; AVX2-NEXT:  .LBB12_15: # %cond.store13
4986 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
4987 ; AVX2-NEXT:    vzeroupper
4988 ; AVX2-NEXT:    retq
4990 ; AVX512F-LABEL: truncstore_v8i32_v8i8:
4991 ; AVX512F:       # %bb.0:
4992 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
4993 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
4994 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]
4995 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
4996 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
4997 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
4998 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4999 ; AVX512F-NEXT:    kmovw %k0, %eax
5000 ; AVX512F-NEXT:    testb $1, %al
5001 ; AVX512F-NEXT:    jne .LBB12_1
5002 ; AVX512F-NEXT:  # %bb.2: # %else
5003 ; AVX512F-NEXT:    testb $2, %al
5004 ; AVX512F-NEXT:    jne .LBB12_3
5005 ; AVX512F-NEXT:  .LBB12_4: # %else2
5006 ; AVX512F-NEXT:    testb $4, %al
5007 ; AVX512F-NEXT:    jne .LBB12_5
5008 ; AVX512F-NEXT:  .LBB12_6: # %else4
5009 ; AVX512F-NEXT:    testb $8, %al
5010 ; AVX512F-NEXT:    jne .LBB12_7
5011 ; AVX512F-NEXT:  .LBB12_8: # %else6
5012 ; AVX512F-NEXT:    testb $16, %al
5013 ; AVX512F-NEXT:    jne .LBB12_9
5014 ; AVX512F-NEXT:  .LBB12_10: # %else8
5015 ; AVX512F-NEXT:    testb $32, %al
5016 ; AVX512F-NEXT:    jne .LBB12_11
5017 ; AVX512F-NEXT:  .LBB12_12: # %else10
5018 ; AVX512F-NEXT:    testb $64, %al
5019 ; AVX512F-NEXT:    jne .LBB12_13
5020 ; AVX512F-NEXT:  .LBB12_14: # %else12
5021 ; AVX512F-NEXT:    testb $-128, %al
5022 ; AVX512F-NEXT:    jne .LBB12_15
5023 ; AVX512F-NEXT:  .LBB12_16: # %else14
5024 ; AVX512F-NEXT:    vzeroupper
5025 ; AVX512F-NEXT:    retq
5026 ; AVX512F-NEXT:  .LBB12_1: # %cond.store
5027 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
5028 ; AVX512F-NEXT:    testb $2, %al
5029 ; AVX512F-NEXT:    je .LBB12_4
5030 ; AVX512F-NEXT:  .LBB12_3: # %cond.store1
5031 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5032 ; AVX512F-NEXT:    testb $4, %al
5033 ; AVX512F-NEXT:    je .LBB12_6
5034 ; AVX512F-NEXT:  .LBB12_5: # %cond.store3
5035 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5036 ; AVX512F-NEXT:    testb $8, %al
5037 ; AVX512F-NEXT:    je .LBB12_8
5038 ; AVX512F-NEXT:  .LBB12_7: # %cond.store5
5039 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5040 ; AVX512F-NEXT:    testb $16, %al
5041 ; AVX512F-NEXT:    je .LBB12_10
5042 ; AVX512F-NEXT:  .LBB12_9: # %cond.store7
5043 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
5044 ; AVX512F-NEXT:    testb $32, %al
5045 ; AVX512F-NEXT:    je .LBB12_12
5046 ; AVX512F-NEXT:  .LBB12_11: # %cond.store9
5047 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
5048 ; AVX512F-NEXT:    testb $64, %al
5049 ; AVX512F-NEXT:    je .LBB12_14
5050 ; AVX512F-NEXT:  .LBB12_13: # %cond.store11
5051 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
5052 ; AVX512F-NEXT:    testb $-128, %al
5053 ; AVX512F-NEXT:    je .LBB12_16
5054 ; AVX512F-NEXT:  .LBB12_15: # %cond.store13
5055 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
5056 ; AVX512F-NEXT:    vzeroupper
5057 ; AVX512F-NEXT:    retq
5059 ; AVX512BW-LABEL: truncstore_v8i32_v8i8:
5060 ; AVX512BW:       # %bb.0:
5061 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
5062 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
5063 ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0
5064 ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1
5065 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]
5066 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
5067 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
5068 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
5069 ; AVX512BW-NEXT:    vpmovdb %zmm0, %xmm0
5070 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
5071 ; AVX512BW-NEXT:    vzeroupper
5072 ; AVX512BW-NEXT:    retq
5074 ; AVX512BWVL-LABEL: truncstore_v8i32_v8i8:
5075 ; AVX512BWVL:       # %bb.0:
5076 ; AVX512BWVL-NEXT:    vptestmd %ymm1, %ymm1, %k1
5077 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
5078 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
5079 ; AVX512BWVL-NEXT:    vpmovdb %ymm0, (%rdi) {%k1}
5080 ; AVX512BWVL-NEXT:    vzeroupper
5081 ; AVX512BWVL-NEXT:    retq
5082   %a = icmp ne <8 x i32> %mask, zeroinitializer
5083   %b = icmp slt <8 x i32> %x, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
5084   %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>
5085   %d = icmp sgt <8 x i32> %c, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
5086   %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>
5087   %f = trunc <8 x i32> %e to <8 x i8>
5088   call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %f, <8 x i8>* %p, i32 1, <8 x i1> %a)
5089   ret void
5092 define void @truncstore_v4i32_v4i16(<4 x i32> %x, <4 x i16>* %p, <4 x i32> %mask) {
5093 ; SSE2-LABEL: truncstore_v4i32_v4i16:
5094 ; SSE2:       # %bb.0:
5095 ; SSE2-NEXT:    pxor %xmm2, %xmm2
5096 ; SSE2-NEXT:    packssdw %xmm0, %xmm0
5097 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
5098 ; SSE2-NEXT:    movmskps %xmm2, %eax
5099 ; SSE2-NEXT:    xorl $15, %eax
5100 ; SSE2-NEXT:    testb $1, %al
5101 ; SSE2-NEXT:    jne .LBB13_1
5102 ; SSE2-NEXT:  # %bb.2: # %else
5103 ; SSE2-NEXT:    testb $2, %al
5104 ; SSE2-NEXT:    jne .LBB13_3
5105 ; SSE2-NEXT:  .LBB13_4: # %else2
5106 ; SSE2-NEXT:    testb $4, %al
5107 ; SSE2-NEXT:    jne .LBB13_5
5108 ; SSE2-NEXT:  .LBB13_6: # %else4
5109 ; SSE2-NEXT:    testb $8, %al
5110 ; SSE2-NEXT:    jne .LBB13_7
5111 ; SSE2-NEXT:  .LBB13_8: # %else6
5112 ; SSE2-NEXT:    retq
5113 ; SSE2-NEXT:  .LBB13_1: # %cond.store
5114 ; SSE2-NEXT:    movd %xmm0, %ecx
5115 ; SSE2-NEXT:    movw %cx, (%rdi)
5116 ; SSE2-NEXT:    testb $2, %al
5117 ; SSE2-NEXT:    je .LBB13_4
5118 ; SSE2-NEXT:  .LBB13_3: # %cond.store1
5119 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
5120 ; SSE2-NEXT:    movw %cx, 2(%rdi)
5121 ; SSE2-NEXT:    testb $4, %al
5122 ; SSE2-NEXT:    je .LBB13_6
5123 ; SSE2-NEXT:  .LBB13_5: # %cond.store3
5124 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
5125 ; SSE2-NEXT:    movw %cx, 4(%rdi)
5126 ; SSE2-NEXT:    testb $8, %al
5127 ; SSE2-NEXT:    je .LBB13_8
5128 ; SSE2-NEXT:  .LBB13_7: # %cond.store5
5129 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
5130 ; SSE2-NEXT:    movw %ax, 6(%rdi)
5131 ; SSE2-NEXT:    retq
5133 ; SSE4-LABEL: truncstore_v4i32_v4i16:
5134 ; SSE4:       # %bb.0:
5135 ; SSE4-NEXT:    pxor %xmm2, %xmm2
5136 ; SSE4-NEXT:    packssdw %xmm0, %xmm0
5137 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2
5138 ; SSE4-NEXT:    movmskps %xmm2, %eax
5139 ; SSE4-NEXT:    xorl $15, %eax
5140 ; SSE4-NEXT:    testb $1, %al
5141 ; SSE4-NEXT:    jne .LBB13_1
5142 ; SSE4-NEXT:  # %bb.2: # %else
5143 ; SSE4-NEXT:    testb $2, %al
5144 ; SSE4-NEXT:    jne .LBB13_3
5145 ; SSE4-NEXT:  .LBB13_4: # %else2
5146 ; SSE4-NEXT:    testb $4, %al
5147 ; SSE4-NEXT:    jne .LBB13_5
5148 ; SSE4-NEXT:  .LBB13_6: # %else4
5149 ; SSE4-NEXT:    testb $8, %al
5150 ; SSE4-NEXT:    jne .LBB13_7
5151 ; SSE4-NEXT:  .LBB13_8: # %else6
5152 ; SSE4-NEXT:    retq
5153 ; SSE4-NEXT:  .LBB13_1: # %cond.store
5154 ; SSE4-NEXT:    pextrw $0, %xmm0, (%rdi)
5155 ; SSE4-NEXT:    testb $2, %al
5156 ; SSE4-NEXT:    je .LBB13_4
5157 ; SSE4-NEXT:  .LBB13_3: # %cond.store1
5158 ; SSE4-NEXT:    pextrw $1, %xmm0, 2(%rdi)
5159 ; SSE4-NEXT:    testb $4, %al
5160 ; SSE4-NEXT:    je .LBB13_6
5161 ; SSE4-NEXT:  .LBB13_5: # %cond.store3
5162 ; SSE4-NEXT:    pextrw $2, %xmm0, 4(%rdi)
5163 ; SSE4-NEXT:    testb $8, %al
5164 ; SSE4-NEXT:    je .LBB13_8
5165 ; SSE4-NEXT:  .LBB13_7: # %cond.store5
5166 ; SSE4-NEXT:    pextrw $3, %xmm0, 6(%rdi)
5167 ; SSE4-NEXT:    retq
5169 ; AVX-LABEL: truncstore_v4i32_v4i16:
5170 ; AVX:       # %bb.0:
5171 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5172 ; AVX-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
5173 ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
5174 ; AVX-NEXT:    vmovmskps %xmm1, %eax
5175 ; AVX-NEXT:    xorl $15, %eax
5176 ; AVX-NEXT:    testb $1, %al
5177 ; AVX-NEXT:    jne .LBB13_1
5178 ; AVX-NEXT:  # %bb.2: # %else
5179 ; AVX-NEXT:    testb $2, %al
5180 ; AVX-NEXT:    jne .LBB13_3
5181 ; AVX-NEXT:  .LBB13_4: # %else2
5182 ; AVX-NEXT:    testb $4, %al
5183 ; AVX-NEXT:    jne .LBB13_5
5184 ; AVX-NEXT:  .LBB13_6: # %else4
5185 ; AVX-NEXT:    testb $8, %al
5186 ; AVX-NEXT:    jne .LBB13_7
5187 ; AVX-NEXT:  .LBB13_8: # %else6
5188 ; AVX-NEXT:    retq
5189 ; AVX-NEXT:  .LBB13_1: # %cond.store
5190 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
5191 ; AVX-NEXT:    testb $2, %al
5192 ; AVX-NEXT:    je .LBB13_4
5193 ; AVX-NEXT:  .LBB13_3: # %cond.store1
5194 ; AVX-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
5195 ; AVX-NEXT:    testb $4, %al
5196 ; AVX-NEXT:    je .LBB13_6
5197 ; AVX-NEXT:  .LBB13_5: # %cond.store3
5198 ; AVX-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
5199 ; AVX-NEXT:    testb $8, %al
5200 ; AVX-NEXT:    je .LBB13_8
5201 ; AVX-NEXT:  .LBB13_7: # %cond.store5
5202 ; AVX-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
5203 ; AVX-NEXT:    retq
5205 ; AVX512F-LABEL: truncstore_v4i32_v4i16:
5206 ; AVX512F:       # %bb.0:
5207 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5208 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
5209 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
5210 ; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
5211 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294934528,4294934528,4294934528,4294934528]
5212 ; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
5213 ; AVX512F-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
5214 ; AVX512F-NEXT:    kmovw %k0, %eax
5215 ; AVX512F-NEXT:    testb $1, %al
5216 ; AVX512F-NEXT:    jne .LBB13_1
5217 ; AVX512F-NEXT:  # %bb.2: # %else
5218 ; AVX512F-NEXT:    testb $2, %al
5219 ; AVX512F-NEXT:    jne .LBB13_3
5220 ; AVX512F-NEXT:  .LBB13_4: # %else2
5221 ; AVX512F-NEXT:    testb $4, %al
5222 ; AVX512F-NEXT:    jne .LBB13_5
5223 ; AVX512F-NEXT:  .LBB13_6: # %else4
5224 ; AVX512F-NEXT:    testb $8, %al
5225 ; AVX512F-NEXT:    jne .LBB13_7
5226 ; AVX512F-NEXT:  .LBB13_8: # %else6
5227 ; AVX512F-NEXT:    vzeroupper
5228 ; AVX512F-NEXT:    retq
5229 ; AVX512F-NEXT:  .LBB13_1: # %cond.store
5230 ; AVX512F-NEXT:    vpextrw $0, %xmm0, (%rdi)
5231 ; AVX512F-NEXT:    testb $2, %al
5232 ; AVX512F-NEXT:    je .LBB13_4
5233 ; AVX512F-NEXT:  .LBB13_3: # %cond.store1
5234 ; AVX512F-NEXT:    vpextrw $1, %xmm0, 2(%rdi)
5235 ; AVX512F-NEXT:    testb $4, %al
5236 ; AVX512F-NEXT:    je .LBB13_6
5237 ; AVX512F-NEXT:  .LBB13_5: # %cond.store3
5238 ; AVX512F-NEXT:    vpextrw $2, %xmm0, 4(%rdi)
5239 ; AVX512F-NEXT:    testb $8, %al
5240 ; AVX512F-NEXT:    je .LBB13_8
5241 ; AVX512F-NEXT:  .LBB13_7: # %cond.store5
5242 ; AVX512F-NEXT:    vpextrw $3, %xmm0, 6(%rdi)
5243 ; AVX512F-NEXT:    vzeroupper
5244 ; AVX512F-NEXT:    retq
5246 ; AVX512BW-LABEL: truncstore_v4i32_v4i16:
5247 ; AVX512BW:       # %bb.0:
5248 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5249 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
5250 ; AVX512BW-NEXT:    kshiftld $28, %k0, %k0
5251 ; AVX512BW-NEXT:    kshiftrd $28, %k0, %k1
5252 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
5253 ; AVX512BW-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
5254 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294934528,4294934528,4294934528,4294934528]
5255 ; AVX512BW-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
5256 ; AVX512BW-NEXT:    vpackssdw %xmm0, %xmm0, %xmm0
5257 ; AVX512BW-NEXT:    vmovdqu16 %zmm0, (%rdi) {%k1}
5258 ; AVX512BW-NEXT:    vzeroupper
5259 ; AVX512BW-NEXT:    retq
5261 ; AVX512BWVL-LABEL: truncstore_v4i32_v4i16:
5262 ; AVX512BWVL:       # %bb.0:
5263 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
5264 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5265 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5266 ; AVX512BWVL-NEXT:    vpmovdw %xmm0, (%rdi) {%k1}
5267 ; AVX512BWVL-NEXT:    retq
5268   %a = icmp ne <4 x i32> %mask, zeroinitializer
5269   %b = icmp slt <4 x i32> %x, <i32 32767, i32 32767, i32 32767, i32 32767>
5270   %c = select <4 x i1> %b, <4 x i32> %x, <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>
5271   %d = icmp sgt <4 x i32> %c, <i32 -32768, i32 -32768, i32 -32768, i32 -32768>
5272   %e = select <4 x i1> %d, <4 x i32> %c, <4 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768>
5273   %f = trunc <4 x i32> %e to <4 x i16>
5274   call void @llvm.masked.store.v4i16.p0v4i16(<4 x i16> %f, <4 x i16>* %p, i32 1, <4 x i1> %a)
5275   ret void
5278 define void @truncstore_v4i32_v4i8(<4 x i32> %x, <4 x i8>* %p, <4 x i32> %mask) {
5279 ; SSE2-LABEL: truncstore_v4i32_v4i8:
5280 ; SSE2:       # %bb.0:
5281 ; SSE2-NEXT:    pxor %xmm2, %xmm2
5282 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [127,127,127,127]
5283 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5284 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
5285 ; SSE2-NEXT:    pand %xmm4, %xmm0
5286 ; SSE2-NEXT:    pandn %xmm3, %xmm4
5287 ; SSE2-NEXT:    por %xmm0, %xmm4
5288 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [4294967168,4294967168,4294967168,4294967168]
5289 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
5290 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
5291 ; SSE2-NEXT:    pand %xmm3, %xmm4
5292 ; SSE2-NEXT:    pandn %xmm0, %xmm3
5293 ; SSE2-NEXT:    por %xmm4, %xmm3
5294 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
5295 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
5296 ; SSE2-NEXT:    packuswb %xmm3, %xmm3
5297 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
5298 ; SSE2-NEXT:    movmskps %xmm2, %ecx
5299 ; SSE2-NEXT:    xorl $15, %ecx
5300 ; SSE2-NEXT:    testb $1, %cl
5301 ; SSE2-NEXT:    movd %xmm3, %eax
5302 ; SSE2-NEXT:    jne .LBB14_1
5303 ; SSE2-NEXT:  # %bb.2: # %else
5304 ; SSE2-NEXT:    testb $2, %cl
5305 ; SSE2-NEXT:    jne .LBB14_3
5306 ; SSE2-NEXT:  .LBB14_4: # %else2
5307 ; SSE2-NEXT:    testb $4, %cl
5308 ; SSE2-NEXT:    jne .LBB14_5
5309 ; SSE2-NEXT:  .LBB14_6: # %else4
5310 ; SSE2-NEXT:    testb $8, %cl
5311 ; SSE2-NEXT:    jne .LBB14_7
5312 ; SSE2-NEXT:  .LBB14_8: # %else6
5313 ; SSE2-NEXT:    retq
5314 ; SSE2-NEXT:  .LBB14_1: # %cond.store
5315 ; SSE2-NEXT:    movb %al, (%rdi)
5316 ; SSE2-NEXT:    testb $2, %cl
5317 ; SSE2-NEXT:    je .LBB14_4
5318 ; SSE2-NEXT:  .LBB14_3: # %cond.store1
5319 ; SSE2-NEXT:    movb %ah, 1(%rdi)
5320 ; SSE2-NEXT:    testb $4, %cl
5321 ; SSE2-NEXT:    je .LBB14_6
5322 ; SSE2-NEXT:  .LBB14_5: # %cond.store3
5323 ; SSE2-NEXT:    movl %eax, %edx
5324 ; SSE2-NEXT:    shrl $16, %edx
5325 ; SSE2-NEXT:    movb %dl, 2(%rdi)
5326 ; SSE2-NEXT:    testb $8, %cl
5327 ; SSE2-NEXT:    je .LBB14_8
5328 ; SSE2-NEXT:  .LBB14_7: # %cond.store5
5329 ; SSE2-NEXT:    shrl $24, %eax
5330 ; SSE2-NEXT:    movb %al, 3(%rdi)
5331 ; SSE2-NEXT:    retq
5333 ; SSE4-LABEL: truncstore_v4i32_v4i8:
5334 ; SSE4:       # %bb.0:
5335 ; SSE4-NEXT:    pxor %xmm2, %xmm2
5336 ; SSE4-NEXT:    pminsd {{.*}}(%rip), %xmm0
5337 ; SSE4-NEXT:    pmaxsd {{.*}}(%rip), %xmm0
5338 ; SSE4-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5339 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm2
5340 ; SSE4-NEXT:    movmskps %xmm2, %eax
5341 ; SSE4-NEXT:    xorl $15, %eax
5342 ; SSE4-NEXT:    testb $1, %al
5343 ; SSE4-NEXT:    jne .LBB14_1
5344 ; SSE4-NEXT:  # %bb.2: # %else
5345 ; SSE4-NEXT:    testb $2, %al
5346 ; SSE4-NEXT:    jne .LBB14_3
5347 ; SSE4-NEXT:  .LBB14_4: # %else2
5348 ; SSE4-NEXT:    testb $4, %al
5349 ; SSE4-NEXT:    jne .LBB14_5
5350 ; SSE4-NEXT:  .LBB14_6: # %else4
5351 ; SSE4-NEXT:    testb $8, %al
5352 ; SSE4-NEXT:    jne .LBB14_7
5353 ; SSE4-NEXT:  .LBB14_8: # %else6
5354 ; SSE4-NEXT:    retq
5355 ; SSE4-NEXT:  .LBB14_1: # %cond.store
5356 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
5357 ; SSE4-NEXT:    testb $2, %al
5358 ; SSE4-NEXT:    je .LBB14_4
5359 ; SSE4-NEXT:  .LBB14_3: # %cond.store1
5360 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
5361 ; SSE4-NEXT:    testb $4, %al
5362 ; SSE4-NEXT:    je .LBB14_6
5363 ; SSE4-NEXT:  .LBB14_5: # %cond.store3
5364 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
5365 ; SSE4-NEXT:    testb $8, %al
5366 ; SSE4-NEXT:    je .LBB14_8
5367 ; SSE4-NEXT:  .LBB14_7: # %cond.store5
5368 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
5369 ; SSE4-NEXT:    retq
5371 ; AVX1-LABEL: truncstore_v4i32_v4i8:
5372 ; AVX1:       # %bb.0:
5373 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5374 ; AVX1-NEXT:    vpminsd {{.*}}(%rip), %xmm0, %xmm0
5375 ; AVX1-NEXT:    vpmaxsd {{.*}}(%rip), %xmm0, %xmm0
5376 ; AVX1-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5377 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
5378 ; AVX1-NEXT:    vmovmskps %xmm1, %eax
5379 ; AVX1-NEXT:    xorl $15, %eax
5380 ; AVX1-NEXT:    testb $1, %al
5381 ; AVX1-NEXT:    jne .LBB14_1
5382 ; AVX1-NEXT:  # %bb.2: # %else
5383 ; AVX1-NEXT:    testb $2, %al
5384 ; AVX1-NEXT:    jne .LBB14_3
5385 ; AVX1-NEXT:  .LBB14_4: # %else2
5386 ; AVX1-NEXT:    testb $4, %al
5387 ; AVX1-NEXT:    jne .LBB14_5
5388 ; AVX1-NEXT:  .LBB14_6: # %else4
5389 ; AVX1-NEXT:    testb $8, %al
5390 ; AVX1-NEXT:    jne .LBB14_7
5391 ; AVX1-NEXT:  .LBB14_8: # %else6
5392 ; AVX1-NEXT:    retq
5393 ; AVX1-NEXT:  .LBB14_1: # %cond.store
5394 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
5395 ; AVX1-NEXT:    testb $2, %al
5396 ; AVX1-NEXT:    je .LBB14_4
5397 ; AVX1-NEXT:  .LBB14_3: # %cond.store1
5398 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5399 ; AVX1-NEXT:    testb $4, %al
5400 ; AVX1-NEXT:    je .LBB14_6
5401 ; AVX1-NEXT:  .LBB14_5: # %cond.store3
5402 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5403 ; AVX1-NEXT:    testb $8, %al
5404 ; AVX1-NEXT:    je .LBB14_8
5405 ; AVX1-NEXT:  .LBB14_7: # %cond.store5
5406 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5407 ; AVX1-NEXT:    retq
5409 ; AVX2-LABEL: truncstore_v4i32_v4i8:
5410 ; AVX2:       # %bb.0:
5411 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5412 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [127,127,127,127]
5413 ; AVX2-NEXT:    vpminsd %xmm3, %xmm0, %xmm0
5414 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm3 = [4294967168,4294967168,4294967168,4294967168]
5415 ; AVX2-NEXT:    vpmaxsd %xmm3, %xmm0, %xmm0
5416 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5417 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm1, %xmm1
5418 ; AVX2-NEXT:    vmovmskps %xmm1, %eax
5419 ; AVX2-NEXT:    xorl $15, %eax
5420 ; AVX2-NEXT:    testb $1, %al
5421 ; AVX2-NEXT:    jne .LBB14_1
5422 ; AVX2-NEXT:  # %bb.2: # %else
5423 ; AVX2-NEXT:    testb $2, %al
5424 ; AVX2-NEXT:    jne .LBB14_3
5425 ; AVX2-NEXT:  .LBB14_4: # %else2
5426 ; AVX2-NEXT:    testb $4, %al
5427 ; AVX2-NEXT:    jne .LBB14_5
5428 ; AVX2-NEXT:  .LBB14_6: # %else4
5429 ; AVX2-NEXT:    testb $8, %al
5430 ; AVX2-NEXT:    jne .LBB14_7
5431 ; AVX2-NEXT:  .LBB14_8: # %else6
5432 ; AVX2-NEXT:    retq
5433 ; AVX2-NEXT:  .LBB14_1: # %cond.store
5434 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
5435 ; AVX2-NEXT:    testb $2, %al
5436 ; AVX2-NEXT:    je .LBB14_4
5437 ; AVX2-NEXT:  .LBB14_3: # %cond.store1
5438 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5439 ; AVX2-NEXT:    testb $4, %al
5440 ; AVX2-NEXT:    je .LBB14_6
5441 ; AVX2-NEXT:  .LBB14_5: # %cond.store3
5442 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5443 ; AVX2-NEXT:    testb $8, %al
5444 ; AVX2-NEXT:    je .LBB14_8
5445 ; AVX2-NEXT:  .LBB14_7: # %cond.store5
5446 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5447 ; AVX2-NEXT:    retq
5449 ; AVX512F-LABEL: truncstore_v4i32_v4i8:
5450 ; AVX512F:       # %bb.0:
5451 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5452 ; AVX512F-NEXT:    vptestmd %zmm1, %zmm1, %k0
5453 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [127,127,127,127]
5454 ; AVX512F-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
5455 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168]
5456 ; AVX512F-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
5457 ; AVX512F-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5458 ; AVX512F-NEXT:    kmovw %k0, %eax
5459 ; AVX512F-NEXT:    testb $1, %al
5460 ; AVX512F-NEXT:    jne .LBB14_1
5461 ; AVX512F-NEXT:  # %bb.2: # %else
5462 ; AVX512F-NEXT:    testb $2, %al
5463 ; AVX512F-NEXT:    jne .LBB14_3
5464 ; AVX512F-NEXT:  .LBB14_4: # %else2
5465 ; AVX512F-NEXT:    testb $4, %al
5466 ; AVX512F-NEXT:    jne .LBB14_5
5467 ; AVX512F-NEXT:  .LBB14_6: # %else4
5468 ; AVX512F-NEXT:    testb $8, %al
5469 ; AVX512F-NEXT:    jne .LBB14_7
5470 ; AVX512F-NEXT:  .LBB14_8: # %else6
5471 ; AVX512F-NEXT:    vzeroupper
5472 ; AVX512F-NEXT:    retq
5473 ; AVX512F-NEXT:  .LBB14_1: # %cond.store
5474 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
5475 ; AVX512F-NEXT:    testb $2, %al
5476 ; AVX512F-NEXT:    je .LBB14_4
5477 ; AVX512F-NEXT:  .LBB14_3: # %cond.store1
5478 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
5479 ; AVX512F-NEXT:    testb $4, %al
5480 ; AVX512F-NEXT:    je .LBB14_6
5481 ; AVX512F-NEXT:  .LBB14_5: # %cond.store3
5482 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
5483 ; AVX512F-NEXT:    testb $8, %al
5484 ; AVX512F-NEXT:    je .LBB14_8
5485 ; AVX512F-NEXT:  .LBB14_7: # %cond.store5
5486 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
5487 ; AVX512F-NEXT:    vzeroupper
5488 ; AVX512F-NEXT:    retq
5490 ; AVX512BW-LABEL: truncstore_v4i32_v4i8:
5491 ; AVX512BW:       # %bb.0:
5492 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
5493 ; AVX512BW-NEXT:    vptestmd %zmm1, %zmm1, %k0
5494 ; AVX512BW-NEXT:    kshiftlq $60, %k0, %k0
5495 ; AVX512BW-NEXT:    kshiftrq $60, %k0, %k1
5496 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [127,127,127,127]
5497 ; AVX512BW-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
5498 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168]
5499 ; AVX512BW-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
5500 ; AVX512BW-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u]
5501 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
5502 ; AVX512BW-NEXT:    vzeroupper
5503 ; AVX512BW-NEXT:    retq
5505 ; AVX512BWVL-LABEL: truncstore_v4i32_v4i8:
5506 ; AVX512BWVL:       # %bb.0:
5507 ; AVX512BWVL-NEXT:    vptestmd %xmm1, %xmm1, %k1
5508 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5509 ; AVX512BWVL-NEXT:    vpmaxsd {{.*}}(%rip){1to4}, %xmm0, %xmm0
5510 ; AVX512BWVL-NEXT:    vpmovdb %xmm0, (%rdi) {%k1}
5511 ; AVX512BWVL-NEXT:    retq
5512   %a = icmp ne <4 x i32> %mask, zeroinitializer
5513   %b = icmp slt <4 x i32> %x, <i32 127, i32 127, i32 127, i32 127>
5514   %c = select <4 x i1> %b, <4 x i32> %x, <4 x i32> <i32 127, i32 127, i32 127, i32 127>
5515   %d = icmp sgt <4 x i32> %c, <i32 -128, i32 -128, i32 -128, i32 -128>
5516   %e = select <4 x i1> %d, <4 x i32> %c, <4 x i32> <i32 -128, i32 -128, i32 -128, i32 -128>
5517   %f = trunc <4 x i32> %e to <4 x i8>
5518   call void @llvm.masked.store.v4i8.p0v4i8(<4 x i8> %f, <4 x i8>* %p, i32 1, <4 x i1> %a)
5519   ret void
5522 define void @truncstore_v32i16_v32i8(<32 x i16> %x, <32 x i8>* %p, <32 x i8> %mask) {
5523 ; SSE2-LABEL: truncstore_v32i16_v32i8:
5524 ; SSE2:       # %bb.0:
5525 ; SSE2-NEXT:    pxor %xmm6, %xmm6
5526 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
5527 ; SSE2-NEXT:    pcmpeqb %xmm6, %xmm4
5528 ; SSE2-NEXT:    pmovmskb %xmm4, %ecx
5529 ; SSE2-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
5530 ; SSE2-NEXT:    pcmpeqb %xmm6, %xmm5
5531 ; SSE2-NEXT:    pmovmskb %xmm5, %eax
5532 ; SSE2-NEXT:    notl %eax
5533 ; SSE2-NEXT:    shll $16, %eax
5534 ; SSE2-NEXT:    orl %ecx, %eax
5535 ; SSE2-NEXT:    testb $1, %al
5536 ; SSE2-NEXT:    movd %xmm0, %ecx
5537 ; SSE2-NEXT:    jne .LBB15_1
5538 ; SSE2-NEXT:  # %bb.2: # %else
5539 ; SSE2-NEXT:    testb $2, %al
5540 ; SSE2-NEXT:    jne .LBB15_3
5541 ; SSE2-NEXT:  .LBB15_4: # %else2
5542 ; SSE2-NEXT:    testb $4, %al
5543 ; SSE2-NEXT:    jne .LBB15_5
5544 ; SSE2-NEXT:  .LBB15_6: # %else4
5545 ; SSE2-NEXT:    testb $8, %al
5546 ; SSE2-NEXT:    je .LBB15_8
5547 ; SSE2-NEXT:  .LBB15_7: # %cond.store5
5548 ; SSE2-NEXT:    shrl $24, %ecx
5549 ; SSE2-NEXT:    movb %cl, 3(%rdi)
5550 ; SSE2-NEXT:  .LBB15_8: # %else6
5551 ; SSE2-NEXT:    testb $16, %al
5552 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
5553 ; SSE2-NEXT:    je .LBB15_10
5554 ; SSE2-NEXT:  # %bb.9: # %cond.store7
5555 ; SSE2-NEXT:    movb %cl, 4(%rdi)
5556 ; SSE2-NEXT:  .LBB15_10: # %else8
5557 ; SSE2-NEXT:    testb $32, %al
5558 ; SSE2-NEXT:    je .LBB15_12
5559 ; SSE2-NEXT:  # %bb.11: # %cond.store9
5560 ; SSE2-NEXT:    movb %ch, 5(%rdi)
5561 ; SSE2-NEXT:  .LBB15_12: # %else10
5562 ; SSE2-NEXT:    testb $64, %al
5563 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
5564 ; SSE2-NEXT:    je .LBB15_14
5565 ; SSE2-NEXT:  # %bb.13: # %cond.store11
5566 ; SSE2-NEXT:    movb %cl, 6(%rdi)
5567 ; SSE2-NEXT:  .LBB15_14: # %else12
5568 ; SSE2-NEXT:    testb $-128, %al
5569 ; SSE2-NEXT:    je .LBB15_16
5570 ; SSE2-NEXT:  # %bb.15: # %cond.store13
5571 ; SSE2-NEXT:    movb %ch, 7(%rdi)
5572 ; SSE2-NEXT:  .LBB15_16: # %else14
5573 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
5574 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
5575 ; SSE2-NEXT:    je .LBB15_18
5576 ; SSE2-NEXT:  # %bb.17: # %cond.store15
5577 ; SSE2-NEXT:    movb %cl, 8(%rdi)
5578 ; SSE2-NEXT:  .LBB15_18: # %else16
5579 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
5580 ; SSE2-NEXT:    je .LBB15_20
5581 ; SSE2-NEXT:  # %bb.19: # %cond.store17
5582 ; SSE2-NEXT:    movb %ch, 9(%rdi)
5583 ; SSE2-NEXT:  .LBB15_20: # %else18
5584 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
5585 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
5586 ; SSE2-NEXT:    je .LBB15_22
5587 ; SSE2-NEXT:  # %bb.21: # %cond.store19
5588 ; SSE2-NEXT:    movb %cl, 10(%rdi)
5589 ; SSE2-NEXT:  .LBB15_22: # %else20
5590 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
5591 ; SSE2-NEXT:    je .LBB15_24
5592 ; SSE2-NEXT:  # %bb.23: # %cond.store21
5593 ; SSE2-NEXT:    movb %ch, 11(%rdi)
5594 ; SSE2-NEXT:  .LBB15_24: # %else22
5595 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
5596 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
5597 ; SSE2-NEXT:    je .LBB15_26
5598 ; SSE2-NEXT:  # %bb.25: # %cond.store23
5599 ; SSE2-NEXT:    movb %cl, 12(%rdi)
5600 ; SSE2-NEXT:  .LBB15_26: # %else24
5601 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
5602 ; SSE2-NEXT:    je .LBB15_28
5603 ; SSE2-NEXT:  # %bb.27: # %cond.store25
5604 ; SSE2-NEXT:    movb %ch, 13(%rdi)
5605 ; SSE2-NEXT:  .LBB15_28: # %else26
5606 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
5607 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
5608 ; SSE2-NEXT:    je .LBB15_30
5609 ; SSE2-NEXT:  # %bb.29: # %cond.store27
5610 ; SSE2-NEXT:    movb %cl, 14(%rdi)
5611 ; SSE2-NEXT:  .LBB15_30: # %else28
5612 ; SSE2-NEXT:    packsswb %xmm3, %xmm2
5613 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
5614 ; SSE2-NEXT:    je .LBB15_32
5615 ; SSE2-NEXT:  # %bb.31: # %cond.store29
5616 ; SSE2-NEXT:    movb %ch, 15(%rdi)
5617 ; SSE2-NEXT:  .LBB15_32: # %else30
5618 ; SSE2-NEXT:    testl $65536, %eax # imm = 0x10000
5619 ; SSE2-NEXT:    movd %xmm2, %ecx
5620 ; SSE2-NEXT:    jne .LBB15_33
5621 ; SSE2-NEXT:  # %bb.34: # %else32
5622 ; SSE2-NEXT:    testl $131072, %eax # imm = 0x20000
5623 ; SSE2-NEXT:    jne .LBB15_35
5624 ; SSE2-NEXT:  .LBB15_36: # %else34
5625 ; SSE2-NEXT:    testl $262144, %eax # imm = 0x40000
5626 ; SSE2-NEXT:    jne .LBB15_37
5627 ; SSE2-NEXT:  .LBB15_38: # %else36
5628 ; SSE2-NEXT:    testl $524288, %eax # imm = 0x80000
5629 ; SSE2-NEXT:    je .LBB15_40
5630 ; SSE2-NEXT:  .LBB15_39: # %cond.store37
5631 ; SSE2-NEXT:    shrl $24, %ecx
5632 ; SSE2-NEXT:    movb %cl, 19(%rdi)
5633 ; SSE2-NEXT:  .LBB15_40: # %else38
5634 ; SSE2-NEXT:    testl $1048576, %eax # imm = 0x100000
5635 ; SSE2-NEXT:    pextrw $2, %xmm2, %ecx
5636 ; SSE2-NEXT:    je .LBB15_42
5637 ; SSE2-NEXT:  # %bb.41: # %cond.store39
5638 ; SSE2-NEXT:    movb %cl, 20(%rdi)
5639 ; SSE2-NEXT:  .LBB15_42: # %else40
5640 ; SSE2-NEXT:    testl $2097152, %eax # imm = 0x200000
5641 ; SSE2-NEXT:    je .LBB15_44
5642 ; SSE2-NEXT:  # %bb.43: # %cond.store41
5643 ; SSE2-NEXT:    movb %ch, 21(%rdi)
5644 ; SSE2-NEXT:  .LBB15_44: # %else42
5645 ; SSE2-NEXT:    testl $4194304, %eax # imm = 0x400000
5646 ; SSE2-NEXT:    pextrw $3, %xmm2, %ecx
5647 ; SSE2-NEXT:    je .LBB15_46
5648 ; SSE2-NEXT:  # %bb.45: # %cond.store43
5649 ; SSE2-NEXT:    movb %cl, 22(%rdi)
5650 ; SSE2-NEXT:  .LBB15_46: # %else44
5651 ; SSE2-NEXT:    testl $8388608, %eax # imm = 0x800000
5652 ; SSE2-NEXT:    je .LBB15_48
5653 ; SSE2-NEXT:  # %bb.47: # %cond.store45
5654 ; SSE2-NEXT:    movb %ch, 23(%rdi)
5655 ; SSE2-NEXT:  .LBB15_48: # %else46
5656 ; SSE2-NEXT:    testl $16777216, %eax # imm = 0x1000000
5657 ; SSE2-NEXT:    pextrw $4, %xmm2, %ecx
5658 ; SSE2-NEXT:    je .LBB15_50
5659 ; SSE2-NEXT:  # %bb.49: # %cond.store47
5660 ; SSE2-NEXT:    movb %cl, 24(%rdi)
5661 ; SSE2-NEXT:  .LBB15_50: # %else48
5662 ; SSE2-NEXT:    testl $33554432, %eax # imm = 0x2000000
5663 ; SSE2-NEXT:    je .LBB15_52
5664 ; SSE2-NEXT:  # %bb.51: # %cond.store49
5665 ; SSE2-NEXT:    movb %ch, 25(%rdi)
5666 ; SSE2-NEXT:  .LBB15_52: # %else50
5667 ; SSE2-NEXT:    testl $67108864, %eax # imm = 0x4000000
5668 ; SSE2-NEXT:    pextrw $5, %xmm2, %ecx
5669 ; SSE2-NEXT:    je .LBB15_54
5670 ; SSE2-NEXT:  # %bb.53: # %cond.store51
5671 ; SSE2-NEXT:    movb %cl, 26(%rdi)
5672 ; SSE2-NEXT:  .LBB15_54: # %else52
5673 ; SSE2-NEXT:    testl $134217728, %eax # imm = 0x8000000
5674 ; SSE2-NEXT:    je .LBB15_56
5675 ; SSE2-NEXT:  # %bb.55: # %cond.store53
5676 ; SSE2-NEXT:    movb %ch, 27(%rdi)
5677 ; SSE2-NEXT:  .LBB15_56: # %else54
5678 ; SSE2-NEXT:    testl $268435456, %eax # imm = 0x10000000
5679 ; SSE2-NEXT:    pextrw $6, %xmm2, %ecx
5680 ; SSE2-NEXT:    je .LBB15_58
5681 ; SSE2-NEXT:  # %bb.57: # %cond.store55
5682 ; SSE2-NEXT:    movb %cl, 28(%rdi)
5683 ; SSE2-NEXT:  .LBB15_58: # %else56
5684 ; SSE2-NEXT:    testl $536870912, %eax # imm = 0x20000000
5685 ; SSE2-NEXT:    je .LBB15_60
5686 ; SSE2-NEXT:  # %bb.59: # %cond.store57
5687 ; SSE2-NEXT:    movb %ch, 29(%rdi)
5688 ; SSE2-NEXT:  .LBB15_60: # %else58
5689 ; SSE2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5690 ; SSE2-NEXT:    pextrw $7, %xmm2, %ecx
5691 ; SSE2-NEXT:    jne .LBB15_61
5692 ; SSE2-NEXT:  # %bb.62: # %else60
5693 ; SSE2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5694 ; SSE2-NEXT:    jne .LBB15_63
5695 ; SSE2-NEXT:  .LBB15_64: # %else62
5696 ; SSE2-NEXT:    retq
5697 ; SSE2-NEXT:  .LBB15_1: # %cond.store
5698 ; SSE2-NEXT:    movb %cl, (%rdi)
5699 ; SSE2-NEXT:    testb $2, %al
5700 ; SSE2-NEXT:    je .LBB15_4
5701 ; SSE2-NEXT:  .LBB15_3: # %cond.store1
5702 ; SSE2-NEXT:    movb %ch, 1(%rdi)
5703 ; SSE2-NEXT:    testb $4, %al
5704 ; SSE2-NEXT:    je .LBB15_6
5705 ; SSE2-NEXT:  .LBB15_5: # %cond.store3
5706 ; SSE2-NEXT:    movl %ecx, %edx
5707 ; SSE2-NEXT:    shrl $16, %edx
5708 ; SSE2-NEXT:    movb %dl, 2(%rdi)
5709 ; SSE2-NEXT:    testb $8, %al
5710 ; SSE2-NEXT:    jne .LBB15_7
5711 ; SSE2-NEXT:    jmp .LBB15_8
5712 ; SSE2-NEXT:  .LBB15_33: # %cond.store31
5713 ; SSE2-NEXT:    movb %cl, 16(%rdi)
5714 ; SSE2-NEXT:    testl $131072, %eax # imm = 0x20000
5715 ; SSE2-NEXT:    je .LBB15_36
5716 ; SSE2-NEXT:  .LBB15_35: # %cond.store33
5717 ; SSE2-NEXT:    movb %ch, 17(%rdi)
5718 ; SSE2-NEXT:    testl $262144, %eax # imm = 0x40000
5719 ; SSE2-NEXT:    je .LBB15_38
5720 ; SSE2-NEXT:  .LBB15_37: # %cond.store35
5721 ; SSE2-NEXT:    movl %ecx, %edx
5722 ; SSE2-NEXT:    shrl $16, %edx
5723 ; SSE2-NEXT:    movb %dl, 18(%rdi)
5724 ; SSE2-NEXT:    testl $524288, %eax # imm = 0x80000
5725 ; SSE2-NEXT:    jne .LBB15_39
5726 ; SSE2-NEXT:    jmp .LBB15_40
5727 ; SSE2-NEXT:  .LBB15_61: # %cond.store59
5728 ; SSE2-NEXT:    movb %cl, 30(%rdi)
5729 ; SSE2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5730 ; SSE2-NEXT:    je .LBB15_64
5731 ; SSE2-NEXT:  .LBB15_63: # %cond.store61
5732 ; SSE2-NEXT:    movb %ch, 31(%rdi)
5733 ; SSE2-NEXT:    retq
5735 ; SSE4-LABEL: truncstore_v32i16_v32i8:
5736 ; SSE4:       # %bb.0:
5737 ; SSE4-NEXT:    pxor %xmm6, %xmm6
5738 ; SSE4-NEXT:    packsswb %xmm1, %xmm0
5739 ; SSE4-NEXT:    pcmpeqb %xmm6, %xmm4
5740 ; SSE4-NEXT:    pmovmskb %xmm4, %ecx
5741 ; SSE4-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
5742 ; SSE4-NEXT:    pcmpeqb %xmm6, %xmm5
5743 ; SSE4-NEXT:    pmovmskb %xmm5, %eax
5744 ; SSE4-NEXT:    notl %eax
5745 ; SSE4-NEXT:    shll $16, %eax
5746 ; SSE4-NEXT:    orl %ecx, %eax
5747 ; SSE4-NEXT:    testb $1, %al
5748 ; SSE4-NEXT:    jne .LBB15_1
5749 ; SSE4-NEXT:  # %bb.2: # %else
5750 ; SSE4-NEXT:    testb $2, %al
5751 ; SSE4-NEXT:    jne .LBB15_3
5752 ; SSE4-NEXT:  .LBB15_4: # %else2
5753 ; SSE4-NEXT:    testb $4, %al
5754 ; SSE4-NEXT:    jne .LBB15_5
5755 ; SSE4-NEXT:  .LBB15_6: # %else4
5756 ; SSE4-NEXT:    testb $8, %al
5757 ; SSE4-NEXT:    jne .LBB15_7
5758 ; SSE4-NEXT:  .LBB15_8: # %else6
5759 ; SSE4-NEXT:    testb $16, %al
5760 ; SSE4-NEXT:    jne .LBB15_9
5761 ; SSE4-NEXT:  .LBB15_10: # %else8
5762 ; SSE4-NEXT:    testb $32, %al
5763 ; SSE4-NEXT:    jne .LBB15_11
5764 ; SSE4-NEXT:  .LBB15_12: # %else10
5765 ; SSE4-NEXT:    testb $64, %al
5766 ; SSE4-NEXT:    jne .LBB15_13
5767 ; SSE4-NEXT:  .LBB15_14: # %else12
5768 ; SSE4-NEXT:    testb $-128, %al
5769 ; SSE4-NEXT:    jne .LBB15_15
5770 ; SSE4-NEXT:  .LBB15_16: # %else14
5771 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
5772 ; SSE4-NEXT:    jne .LBB15_17
5773 ; SSE4-NEXT:  .LBB15_18: # %else16
5774 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
5775 ; SSE4-NEXT:    jne .LBB15_19
5776 ; SSE4-NEXT:  .LBB15_20: # %else18
5777 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
5778 ; SSE4-NEXT:    jne .LBB15_21
5779 ; SSE4-NEXT:  .LBB15_22: # %else20
5780 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
5781 ; SSE4-NEXT:    jne .LBB15_23
5782 ; SSE4-NEXT:  .LBB15_24: # %else22
5783 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
5784 ; SSE4-NEXT:    jne .LBB15_25
5785 ; SSE4-NEXT:  .LBB15_26: # %else24
5786 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
5787 ; SSE4-NEXT:    jne .LBB15_27
5788 ; SSE4-NEXT:  .LBB15_28: # %else26
5789 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
5790 ; SSE4-NEXT:    jne .LBB15_29
5791 ; SSE4-NEXT:  .LBB15_30: # %else28
5792 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
5793 ; SSE4-NEXT:    je .LBB15_32
5794 ; SSE4-NEXT:  .LBB15_31: # %cond.store29
5795 ; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
5796 ; SSE4-NEXT:  .LBB15_32: # %else30
5797 ; SSE4-NEXT:    packsswb %xmm3, %xmm2
5798 ; SSE4-NEXT:    testl $65536, %eax # imm = 0x10000
5799 ; SSE4-NEXT:    jne .LBB15_33
5800 ; SSE4-NEXT:  # %bb.34: # %else32
5801 ; SSE4-NEXT:    testl $131072, %eax # imm = 0x20000
5802 ; SSE4-NEXT:    jne .LBB15_35
5803 ; SSE4-NEXT:  .LBB15_36: # %else34
5804 ; SSE4-NEXT:    testl $262144, %eax # imm = 0x40000
5805 ; SSE4-NEXT:    jne .LBB15_37
5806 ; SSE4-NEXT:  .LBB15_38: # %else36
5807 ; SSE4-NEXT:    testl $524288, %eax # imm = 0x80000
5808 ; SSE4-NEXT:    jne .LBB15_39
5809 ; SSE4-NEXT:  .LBB15_40: # %else38
5810 ; SSE4-NEXT:    testl $1048576, %eax # imm = 0x100000
5811 ; SSE4-NEXT:    jne .LBB15_41
5812 ; SSE4-NEXT:  .LBB15_42: # %else40
5813 ; SSE4-NEXT:    testl $2097152, %eax # imm = 0x200000
5814 ; SSE4-NEXT:    jne .LBB15_43
5815 ; SSE4-NEXT:  .LBB15_44: # %else42
5816 ; SSE4-NEXT:    testl $4194304, %eax # imm = 0x400000
5817 ; SSE4-NEXT:    jne .LBB15_45
5818 ; SSE4-NEXT:  .LBB15_46: # %else44
5819 ; SSE4-NEXT:    testl $8388608, %eax # imm = 0x800000
5820 ; SSE4-NEXT:    jne .LBB15_47
5821 ; SSE4-NEXT:  .LBB15_48: # %else46
5822 ; SSE4-NEXT:    testl $16777216, %eax # imm = 0x1000000
5823 ; SSE4-NEXT:    jne .LBB15_49
5824 ; SSE4-NEXT:  .LBB15_50: # %else48
5825 ; SSE4-NEXT:    testl $33554432, %eax # imm = 0x2000000
5826 ; SSE4-NEXT:    jne .LBB15_51
5827 ; SSE4-NEXT:  .LBB15_52: # %else50
5828 ; SSE4-NEXT:    testl $67108864, %eax # imm = 0x4000000
5829 ; SSE4-NEXT:    jne .LBB15_53
5830 ; SSE4-NEXT:  .LBB15_54: # %else52
5831 ; SSE4-NEXT:    testl $134217728, %eax # imm = 0x8000000
5832 ; SSE4-NEXT:    jne .LBB15_55
5833 ; SSE4-NEXT:  .LBB15_56: # %else54
5834 ; SSE4-NEXT:    testl $268435456, %eax # imm = 0x10000000
5835 ; SSE4-NEXT:    jne .LBB15_57
5836 ; SSE4-NEXT:  .LBB15_58: # %else56
5837 ; SSE4-NEXT:    testl $536870912, %eax # imm = 0x20000000
5838 ; SSE4-NEXT:    jne .LBB15_59
5839 ; SSE4-NEXT:  .LBB15_60: # %else58
5840 ; SSE4-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5841 ; SSE4-NEXT:    jne .LBB15_61
5842 ; SSE4-NEXT:  .LBB15_62: # %else60
5843 ; SSE4-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5844 ; SSE4-NEXT:    jne .LBB15_63
5845 ; SSE4-NEXT:  .LBB15_64: # %else62
5846 ; SSE4-NEXT:    retq
5847 ; SSE4-NEXT:  .LBB15_1: # %cond.store
5848 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
5849 ; SSE4-NEXT:    testb $2, %al
5850 ; SSE4-NEXT:    je .LBB15_4
5851 ; SSE4-NEXT:  .LBB15_3: # %cond.store1
5852 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
5853 ; SSE4-NEXT:    testb $4, %al
5854 ; SSE4-NEXT:    je .LBB15_6
5855 ; SSE4-NEXT:  .LBB15_5: # %cond.store3
5856 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
5857 ; SSE4-NEXT:    testb $8, %al
5858 ; SSE4-NEXT:    je .LBB15_8
5859 ; SSE4-NEXT:  .LBB15_7: # %cond.store5
5860 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
5861 ; SSE4-NEXT:    testb $16, %al
5862 ; SSE4-NEXT:    je .LBB15_10
5863 ; SSE4-NEXT:  .LBB15_9: # %cond.store7
5864 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
5865 ; SSE4-NEXT:    testb $32, %al
5866 ; SSE4-NEXT:    je .LBB15_12
5867 ; SSE4-NEXT:  .LBB15_11: # %cond.store9
5868 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
5869 ; SSE4-NEXT:    testb $64, %al
5870 ; SSE4-NEXT:    je .LBB15_14
5871 ; SSE4-NEXT:  .LBB15_13: # %cond.store11
5872 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
5873 ; SSE4-NEXT:    testb $-128, %al
5874 ; SSE4-NEXT:    je .LBB15_16
5875 ; SSE4-NEXT:  .LBB15_15: # %cond.store13
5876 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
5877 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
5878 ; SSE4-NEXT:    je .LBB15_18
5879 ; SSE4-NEXT:  .LBB15_17: # %cond.store15
5880 ; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
5881 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
5882 ; SSE4-NEXT:    je .LBB15_20
5883 ; SSE4-NEXT:  .LBB15_19: # %cond.store17
5884 ; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
5885 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
5886 ; SSE4-NEXT:    je .LBB15_22
5887 ; SSE4-NEXT:  .LBB15_21: # %cond.store19
5888 ; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
5889 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
5890 ; SSE4-NEXT:    je .LBB15_24
5891 ; SSE4-NEXT:  .LBB15_23: # %cond.store21
5892 ; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
5893 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
5894 ; SSE4-NEXT:    je .LBB15_26
5895 ; SSE4-NEXT:  .LBB15_25: # %cond.store23
5896 ; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
5897 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
5898 ; SSE4-NEXT:    je .LBB15_28
5899 ; SSE4-NEXT:  .LBB15_27: # %cond.store25
5900 ; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
5901 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
5902 ; SSE4-NEXT:    je .LBB15_30
5903 ; SSE4-NEXT:  .LBB15_29: # %cond.store27
5904 ; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
5905 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
5906 ; SSE4-NEXT:    jne .LBB15_31
5907 ; SSE4-NEXT:    jmp .LBB15_32
5908 ; SSE4-NEXT:  .LBB15_33: # %cond.store31
5909 ; SSE4-NEXT:    pextrb $0, %xmm2, 16(%rdi)
5910 ; SSE4-NEXT:    testl $131072, %eax # imm = 0x20000
5911 ; SSE4-NEXT:    je .LBB15_36
5912 ; SSE4-NEXT:  .LBB15_35: # %cond.store33
5913 ; SSE4-NEXT:    pextrb $1, %xmm2, 17(%rdi)
5914 ; SSE4-NEXT:    testl $262144, %eax # imm = 0x40000
5915 ; SSE4-NEXT:    je .LBB15_38
5916 ; SSE4-NEXT:  .LBB15_37: # %cond.store35
5917 ; SSE4-NEXT:    pextrb $2, %xmm2, 18(%rdi)
5918 ; SSE4-NEXT:    testl $524288, %eax # imm = 0x80000
5919 ; SSE4-NEXT:    je .LBB15_40
5920 ; SSE4-NEXT:  .LBB15_39: # %cond.store37
5921 ; SSE4-NEXT:    pextrb $3, %xmm2, 19(%rdi)
5922 ; SSE4-NEXT:    testl $1048576, %eax # imm = 0x100000
5923 ; SSE4-NEXT:    je .LBB15_42
5924 ; SSE4-NEXT:  .LBB15_41: # %cond.store39
5925 ; SSE4-NEXT:    pextrb $4, %xmm2, 20(%rdi)
5926 ; SSE4-NEXT:    testl $2097152, %eax # imm = 0x200000
5927 ; SSE4-NEXT:    je .LBB15_44
5928 ; SSE4-NEXT:  .LBB15_43: # %cond.store41
5929 ; SSE4-NEXT:    pextrb $5, %xmm2, 21(%rdi)
5930 ; SSE4-NEXT:    testl $4194304, %eax # imm = 0x400000
5931 ; SSE4-NEXT:    je .LBB15_46
5932 ; SSE4-NEXT:  .LBB15_45: # %cond.store43
5933 ; SSE4-NEXT:    pextrb $6, %xmm2, 22(%rdi)
5934 ; SSE4-NEXT:    testl $8388608, %eax # imm = 0x800000
5935 ; SSE4-NEXT:    je .LBB15_48
5936 ; SSE4-NEXT:  .LBB15_47: # %cond.store45
5937 ; SSE4-NEXT:    pextrb $7, %xmm2, 23(%rdi)
5938 ; SSE4-NEXT:    testl $16777216, %eax # imm = 0x1000000
5939 ; SSE4-NEXT:    je .LBB15_50
5940 ; SSE4-NEXT:  .LBB15_49: # %cond.store47
5941 ; SSE4-NEXT:    pextrb $8, %xmm2, 24(%rdi)
5942 ; SSE4-NEXT:    testl $33554432, %eax # imm = 0x2000000
5943 ; SSE4-NEXT:    je .LBB15_52
5944 ; SSE4-NEXT:  .LBB15_51: # %cond.store49
5945 ; SSE4-NEXT:    pextrb $9, %xmm2, 25(%rdi)
5946 ; SSE4-NEXT:    testl $67108864, %eax # imm = 0x4000000
5947 ; SSE4-NEXT:    je .LBB15_54
5948 ; SSE4-NEXT:  .LBB15_53: # %cond.store51
5949 ; SSE4-NEXT:    pextrb $10, %xmm2, 26(%rdi)
5950 ; SSE4-NEXT:    testl $134217728, %eax # imm = 0x8000000
5951 ; SSE4-NEXT:    je .LBB15_56
5952 ; SSE4-NEXT:  .LBB15_55: # %cond.store53
5953 ; SSE4-NEXT:    pextrb $11, %xmm2, 27(%rdi)
5954 ; SSE4-NEXT:    testl $268435456, %eax # imm = 0x10000000
5955 ; SSE4-NEXT:    je .LBB15_58
5956 ; SSE4-NEXT:  .LBB15_57: # %cond.store55
5957 ; SSE4-NEXT:    pextrb $12, %xmm2, 28(%rdi)
5958 ; SSE4-NEXT:    testl $536870912, %eax # imm = 0x20000000
5959 ; SSE4-NEXT:    je .LBB15_60
5960 ; SSE4-NEXT:  .LBB15_59: # %cond.store57
5961 ; SSE4-NEXT:    pextrb $13, %xmm2, 29(%rdi)
5962 ; SSE4-NEXT:    testl $1073741824, %eax # imm = 0x40000000
5963 ; SSE4-NEXT:    je .LBB15_62
5964 ; SSE4-NEXT:  .LBB15_61: # %cond.store59
5965 ; SSE4-NEXT:    pextrb $14, %xmm2, 30(%rdi)
5966 ; SSE4-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
5967 ; SSE4-NEXT:    je .LBB15_64
5968 ; SSE4-NEXT:  .LBB15_63: # %cond.store61
5969 ; SSE4-NEXT:    pextrb $15, %xmm2, 31(%rdi)
5970 ; SSE4-NEXT:    retq
5972 ; AVX1-LABEL: truncstore_v32i16_v32i8:
5973 ; AVX1:       # %bb.0:
5974 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5975 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm1, %xmm1
5976 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
5977 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
5978 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
5979 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5980 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm3
5981 ; AVX1-NEXT:    vpmovmskb %xmm3, %ecx
5982 ; AVX1-NEXT:    xorl $65535, %ecx # imm = 0xFFFF
5983 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
5984 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
5985 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
5986 ; AVX1-NEXT:    notl %eax
5987 ; AVX1-NEXT:    shll $16, %eax
5988 ; AVX1-NEXT:    orl %ecx, %eax
5989 ; AVX1-NEXT:    testb $1, %al
5990 ; AVX1-NEXT:    jne .LBB15_1
5991 ; AVX1-NEXT:  # %bb.2: # %else
5992 ; AVX1-NEXT:    testb $2, %al
5993 ; AVX1-NEXT:    jne .LBB15_3
5994 ; AVX1-NEXT:  .LBB15_4: # %else2
5995 ; AVX1-NEXT:    testb $4, %al
5996 ; AVX1-NEXT:    jne .LBB15_5
5997 ; AVX1-NEXT:  .LBB15_6: # %else4
5998 ; AVX1-NEXT:    testb $8, %al
5999 ; AVX1-NEXT:    jne .LBB15_7
6000 ; AVX1-NEXT:  .LBB15_8: # %else6
6001 ; AVX1-NEXT:    testb $16, %al
6002 ; AVX1-NEXT:    jne .LBB15_9
6003 ; AVX1-NEXT:  .LBB15_10: # %else8
6004 ; AVX1-NEXT:    testb $32, %al
6005 ; AVX1-NEXT:    jne .LBB15_11
6006 ; AVX1-NEXT:  .LBB15_12: # %else10
6007 ; AVX1-NEXT:    testb $64, %al
6008 ; AVX1-NEXT:    jne .LBB15_13
6009 ; AVX1-NEXT:  .LBB15_14: # %else12
6010 ; AVX1-NEXT:    testb $-128, %al
6011 ; AVX1-NEXT:    jne .LBB15_15
6012 ; AVX1-NEXT:  .LBB15_16: # %else14
6013 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
6014 ; AVX1-NEXT:    jne .LBB15_17
6015 ; AVX1-NEXT:  .LBB15_18: # %else16
6016 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
6017 ; AVX1-NEXT:    jne .LBB15_19
6018 ; AVX1-NEXT:  .LBB15_20: # %else18
6019 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
6020 ; AVX1-NEXT:    jne .LBB15_21
6021 ; AVX1-NEXT:  .LBB15_22: # %else20
6022 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
6023 ; AVX1-NEXT:    jne .LBB15_23
6024 ; AVX1-NEXT:  .LBB15_24: # %else22
6025 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
6026 ; AVX1-NEXT:    jne .LBB15_25
6027 ; AVX1-NEXT:  .LBB15_26: # %else24
6028 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
6029 ; AVX1-NEXT:    jne .LBB15_27
6030 ; AVX1-NEXT:  .LBB15_28: # %else26
6031 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
6032 ; AVX1-NEXT:    jne .LBB15_29
6033 ; AVX1-NEXT:  .LBB15_30: # %else28
6034 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
6035 ; AVX1-NEXT:    je .LBB15_32
6036 ; AVX1-NEXT:  .LBB15_31: # %cond.store29
6037 ; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6038 ; AVX1-NEXT:  .LBB15_32: # %else30
6039 ; AVX1-NEXT:    testl $65536, %eax # imm = 0x10000
6040 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
6041 ; AVX1-NEXT:    jne .LBB15_33
6042 ; AVX1-NEXT:  # %bb.34: # %else32
6043 ; AVX1-NEXT:    testl $131072, %eax # imm = 0x20000
6044 ; AVX1-NEXT:    jne .LBB15_35
6045 ; AVX1-NEXT:  .LBB15_36: # %else34
6046 ; AVX1-NEXT:    testl $262144, %eax # imm = 0x40000
6047 ; AVX1-NEXT:    jne .LBB15_37
6048 ; AVX1-NEXT:  .LBB15_38: # %else36
6049 ; AVX1-NEXT:    testl $524288, %eax # imm = 0x80000
6050 ; AVX1-NEXT:    jne .LBB15_39
6051 ; AVX1-NEXT:  .LBB15_40: # %else38
6052 ; AVX1-NEXT:    testl $1048576, %eax # imm = 0x100000
6053 ; AVX1-NEXT:    jne .LBB15_41
6054 ; AVX1-NEXT:  .LBB15_42: # %else40
6055 ; AVX1-NEXT:    testl $2097152, %eax # imm = 0x200000
6056 ; AVX1-NEXT:    jne .LBB15_43
6057 ; AVX1-NEXT:  .LBB15_44: # %else42
6058 ; AVX1-NEXT:    testl $4194304, %eax # imm = 0x400000
6059 ; AVX1-NEXT:    jne .LBB15_45
6060 ; AVX1-NEXT:  .LBB15_46: # %else44
6061 ; AVX1-NEXT:    testl $8388608, %eax # imm = 0x800000
6062 ; AVX1-NEXT:    jne .LBB15_47
6063 ; AVX1-NEXT:  .LBB15_48: # %else46
6064 ; AVX1-NEXT:    testl $16777216, %eax # imm = 0x1000000
6065 ; AVX1-NEXT:    jne .LBB15_49
6066 ; AVX1-NEXT:  .LBB15_50: # %else48
6067 ; AVX1-NEXT:    testl $33554432, %eax # imm = 0x2000000
6068 ; AVX1-NEXT:    jne .LBB15_51
6069 ; AVX1-NEXT:  .LBB15_52: # %else50
6070 ; AVX1-NEXT:    testl $67108864, %eax # imm = 0x4000000
6071 ; AVX1-NEXT:    jne .LBB15_53
6072 ; AVX1-NEXT:  .LBB15_54: # %else52
6073 ; AVX1-NEXT:    testl $134217728, %eax # imm = 0x8000000
6074 ; AVX1-NEXT:    jne .LBB15_55
6075 ; AVX1-NEXT:  .LBB15_56: # %else54
6076 ; AVX1-NEXT:    testl $268435456, %eax # imm = 0x10000000
6077 ; AVX1-NEXT:    jne .LBB15_57
6078 ; AVX1-NEXT:  .LBB15_58: # %else56
6079 ; AVX1-NEXT:    testl $536870912, %eax # imm = 0x20000000
6080 ; AVX1-NEXT:    jne .LBB15_59
6081 ; AVX1-NEXT:  .LBB15_60: # %else58
6082 ; AVX1-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6083 ; AVX1-NEXT:    jne .LBB15_61
6084 ; AVX1-NEXT:  .LBB15_62: # %else60
6085 ; AVX1-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6086 ; AVX1-NEXT:    jne .LBB15_63
6087 ; AVX1-NEXT:  .LBB15_64: # %else62
6088 ; AVX1-NEXT:    vzeroupper
6089 ; AVX1-NEXT:    retq
6090 ; AVX1-NEXT:  .LBB15_1: # %cond.store
6091 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
6092 ; AVX1-NEXT:    testb $2, %al
6093 ; AVX1-NEXT:    je .LBB15_4
6094 ; AVX1-NEXT:  .LBB15_3: # %cond.store1
6095 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6096 ; AVX1-NEXT:    testb $4, %al
6097 ; AVX1-NEXT:    je .LBB15_6
6098 ; AVX1-NEXT:  .LBB15_5: # %cond.store3
6099 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6100 ; AVX1-NEXT:    testb $8, %al
6101 ; AVX1-NEXT:    je .LBB15_8
6102 ; AVX1-NEXT:  .LBB15_7: # %cond.store5
6103 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6104 ; AVX1-NEXT:    testb $16, %al
6105 ; AVX1-NEXT:    je .LBB15_10
6106 ; AVX1-NEXT:  .LBB15_9: # %cond.store7
6107 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6108 ; AVX1-NEXT:    testb $32, %al
6109 ; AVX1-NEXT:    je .LBB15_12
6110 ; AVX1-NEXT:  .LBB15_11: # %cond.store9
6111 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6112 ; AVX1-NEXT:    testb $64, %al
6113 ; AVX1-NEXT:    je .LBB15_14
6114 ; AVX1-NEXT:  .LBB15_13: # %cond.store11
6115 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6116 ; AVX1-NEXT:    testb $-128, %al
6117 ; AVX1-NEXT:    je .LBB15_16
6118 ; AVX1-NEXT:  .LBB15_15: # %cond.store13
6119 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6120 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
6121 ; AVX1-NEXT:    je .LBB15_18
6122 ; AVX1-NEXT:  .LBB15_17: # %cond.store15
6123 ; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6124 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
6125 ; AVX1-NEXT:    je .LBB15_20
6126 ; AVX1-NEXT:  .LBB15_19: # %cond.store17
6127 ; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6128 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
6129 ; AVX1-NEXT:    je .LBB15_22
6130 ; AVX1-NEXT:  .LBB15_21: # %cond.store19
6131 ; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6132 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
6133 ; AVX1-NEXT:    je .LBB15_24
6134 ; AVX1-NEXT:  .LBB15_23: # %cond.store21
6135 ; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6136 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
6137 ; AVX1-NEXT:    je .LBB15_26
6138 ; AVX1-NEXT:  .LBB15_25: # %cond.store23
6139 ; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6140 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
6141 ; AVX1-NEXT:    je .LBB15_28
6142 ; AVX1-NEXT:  .LBB15_27: # %cond.store25
6143 ; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6144 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
6145 ; AVX1-NEXT:    je .LBB15_30
6146 ; AVX1-NEXT:  .LBB15_29: # %cond.store27
6147 ; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6148 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
6149 ; AVX1-NEXT:    jne .LBB15_31
6150 ; AVX1-NEXT:    jmp .LBB15_32
6151 ; AVX1-NEXT:  .LBB15_33: # %cond.store31
6152 ; AVX1-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
6153 ; AVX1-NEXT:    testl $131072, %eax # imm = 0x20000
6154 ; AVX1-NEXT:    je .LBB15_36
6155 ; AVX1-NEXT:  .LBB15_35: # %cond.store33
6156 ; AVX1-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
6157 ; AVX1-NEXT:    testl $262144, %eax # imm = 0x40000
6158 ; AVX1-NEXT:    je .LBB15_38
6159 ; AVX1-NEXT:  .LBB15_37: # %cond.store35
6160 ; AVX1-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
6161 ; AVX1-NEXT:    testl $524288, %eax # imm = 0x80000
6162 ; AVX1-NEXT:    je .LBB15_40
6163 ; AVX1-NEXT:  .LBB15_39: # %cond.store37
6164 ; AVX1-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
6165 ; AVX1-NEXT:    testl $1048576, %eax # imm = 0x100000
6166 ; AVX1-NEXT:    je .LBB15_42
6167 ; AVX1-NEXT:  .LBB15_41: # %cond.store39
6168 ; AVX1-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
6169 ; AVX1-NEXT:    testl $2097152, %eax # imm = 0x200000
6170 ; AVX1-NEXT:    je .LBB15_44
6171 ; AVX1-NEXT:  .LBB15_43: # %cond.store41
6172 ; AVX1-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
6173 ; AVX1-NEXT:    testl $4194304, %eax # imm = 0x400000
6174 ; AVX1-NEXT:    je .LBB15_46
6175 ; AVX1-NEXT:  .LBB15_45: # %cond.store43
6176 ; AVX1-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
6177 ; AVX1-NEXT:    testl $8388608, %eax # imm = 0x800000
6178 ; AVX1-NEXT:    je .LBB15_48
6179 ; AVX1-NEXT:  .LBB15_47: # %cond.store45
6180 ; AVX1-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
6181 ; AVX1-NEXT:    testl $16777216, %eax # imm = 0x1000000
6182 ; AVX1-NEXT:    je .LBB15_50
6183 ; AVX1-NEXT:  .LBB15_49: # %cond.store47
6184 ; AVX1-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
6185 ; AVX1-NEXT:    testl $33554432, %eax # imm = 0x2000000
6186 ; AVX1-NEXT:    je .LBB15_52
6187 ; AVX1-NEXT:  .LBB15_51: # %cond.store49
6188 ; AVX1-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
6189 ; AVX1-NEXT:    testl $67108864, %eax # imm = 0x4000000
6190 ; AVX1-NEXT:    je .LBB15_54
6191 ; AVX1-NEXT:  .LBB15_53: # %cond.store51
6192 ; AVX1-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
6193 ; AVX1-NEXT:    testl $134217728, %eax # imm = 0x8000000
6194 ; AVX1-NEXT:    je .LBB15_56
6195 ; AVX1-NEXT:  .LBB15_55: # %cond.store53
6196 ; AVX1-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
6197 ; AVX1-NEXT:    testl $268435456, %eax # imm = 0x10000000
6198 ; AVX1-NEXT:    je .LBB15_58
6199 ; AVX1-NEXT:  .LBB15_57: # %cond.store55
6200 ; AVX1-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
6201 ; AVX1-NEXT:    testl $536870912, %eax # imm = 0x20000000
6202 ; AVX1-NEXT:    je .LBB15_60
6203 ; AVX1-NEXT:  .LBB15_59: # %cond.store57
6204 ; AVX1-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
6205 ; AVX1-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6206 ; AVX1-NEXT:    je .LBB15_62
6207 ; AVX1-NEXT:  .LBB15_61: # %cond.store59
6208 ; AVX1-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
6209 ; AVX1-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6210 ; AVX1-NEXT:    je .LBB15_64
6211 ; AVX1-NEXT:  .LBB15_63: # %cond.store61
6212 ; AVX1-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
6213 ; AVX1-NEXT:    vzeroupper
6214 ; AVX1-NEXT:    retq
6216 ; AVX2-LABEL: truncstore_v32i16_v32i8:
6217 ; AVX2:       # %bb.0:
6218 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
6219 ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
6220 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6221 ; AVX2-NEXT:    vpcmpeqb %ymm3, %ymm2, %ymm1
6222 ; AVX2-NEXT:    vpmovmskb %ymm1, %eax
6223 ; AVX2-NEXT:    notl %eax
6224 ; AVX2-NEXT:    testb $1, %al
6225 ; AVX2-NEXT:    jne .LBB15_1
6226 ; AVX2-NEXT:  # %bb.2: # %else
6227 ; AVX2-NEXT:    testb $2, %al
6228 ; AVX2-NEXT:    jne .LBB15_3
6229 ; AVX2-NEXT:  .LBB15_4: # %else2
6230 ; AVX2-NEXT:    testb $4, %al
6231 ; AVX2-NEXT:    jne .LBB15_5
6232 ; AVX2-NEXT:  .LBB15_6: # %else4
6233 ; AVX2-NEXT:    testb $8, %al
6234 ; AVX2-NEXT:    jne .LBB15_7
6235 ; AVX2-NEXT:  .LBB15_8: # %else6
6236 ; AVX2-NEXT:    testb $16, %al
6237 ; AVX2-NEXT:    jne .LBB15_9
6238 ; AVX2-NEXT:  .LBB15_10: # %else8
6239 ; AVX2-NEXT:    testb $32, %al
6240 ; AVX2-NEXT:    jne .LBB15_11
6241 ; AVX2-NEXT:  .LBB15_12: # %else10
6242 ; AVX2-NEXT:    testb $64, %al
6243 ; AVX2-NEXT:    jne .LBB15_13
6244 ; AVX2-NEXT:  .LBB15_14: # %else12
6245 ; AVX2-NEXT:    testb $-128, %al
6246 ; AVX2-NEXT:    jne .LBB15_15
6247 ; AVX2-NEXT:  .LBB15_16: # %else14
6248 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
6249 ; AVX2-NEXT:    jne .LBB15_17
6250 ; AVX2-NEXT:  .LBB15_18: # %else16
6251 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
6252 ; AVX2-NEXT:    jne .LBB15_19
6253 ; AVX2-NEXT:  .LBB15_20: # %else18
6254 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
6255 ; AVX2-NEXT:    jne .LBB15_21
6256 ; AVX2-NEXT:  .LBB15_22: # %else20
6257 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
6258 ; AVX2-NEXT:    jne .LBB15_23
6259 ; AVX2-NEXT:  .LBB15_24: # %else22
6260 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
6261 ; AVX2-NEXT:    jne .LBB15_25
6262 ; AVX2-NEXT:  .LBB15_26: # %else24
6263 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
6264 ; AVX2-NEXT:    jne .LBB15_27
6265 ; AVX2-NEXT:  .LBB15_28: # %else26
6266 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
6267 ; AVX2-NEXT:    jne .LBB15_29
6268 ; AVX2-NEXT:  .LBB15_30: # %else28
6269 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
6270 ; AVX2-NEXT:    je .LBB15_32
6271 ; AVX2-NEXT:  .LBB15_31: # %cond.store29
6272 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6273 ; AVX2-NEXT:  .LBB15_32: # %else30
6274 ; AVX2-NEXT:    testl $65536, %eax # imm = 0x10000
6275 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
6276 ; AVX2-NEXT:    jne .LBB15_33
6277 ; AVX2-NEXT:  # %bb.34: # %else32
6278 ; AVX2-NEXT:    testl $131072, %eax # imm = 0x20000
6279 ; AVX2-NEXT:    jne .LBB15_35
6280 ; AVX2-NEXT:  .LBB15_36: # %else34
6281 ; AVX2-NEXT:    testl $262144, %eax # imm = 0x40000
6282 ; AVX2-NEXT:    jne .LBB15_37
6283 ; AVX2-NEXT:  .LBB15_38: # %else36
6284 ; AVX2-NEXT:    testl $524288, %eax # imm = 0x80000
6285 ; AVX2-NEXT:    jne .LBB15_39
6286 ; AVX2-NEXT:  .LBB15_40: # %else38
6287 ; AVX2-NEXT:    testl $1048576, %eax # imm = 0x100000
6288 ; AVX2-NEXT:    jne .LBB15_41
6289 ; AVX2-NEXT:  .LBB15_42: # %else40
6290 ; AVX2-NEXT:    testl $2097152, %eax # imm = 0x200000
6291 ; AVX2-NEXT:    jne .LBB15_43
6292 ; AVX2-NEXT:  .LBB15_44: # %else42
6293 ; AVX2-NEXT:    testl $4194304, %eax # imm = 0x400000
6294 ; AVX2-NEXT:    jne .LBB15_45
6295 ; AVX2-NEXT:  .LBB15_46: # %else44
6296 ; AVX2-NEXT:    testl $8388608, %eax # imm = 0x800000
6297 ; AVX2-NEXT:    jne .LBB15_47
6298 ; AVX2-NEXT:  .LBB15_48: # %else46
6299 ; AVX2-NEXT:    testl $16777216, %eax # imm = 0x1000000
6300 ; AVX2-NEXT:    jne .LBB15_49
6301 ; AVX2-NEXT:  .LBB15_50: # %else48
6302 ; AVX2-NEXT:    testl $33554432, %eax # imm = 0x2000000
6303 ; AVX2-NEXT:    jne .LBB15_51
6304 ; AVX2-NEXT:  .LBB15_52: # %else50
6305 ; AVX2-NEXT:    testl $67108864, %eax # imm = 0x4000000
6306 ; AVX2-NEXT:    jne .LBB15_53
6307 ; AVX2-NEXT:  .LBB15_54: # %else52
6308 ; AVX2-NEXT:    testl $134217728, %eax # imm = 0x8000000
6309 ; AVX2-NEXT:    jne .LBB15_55
6310 ; AVX2-NEXT:  .LBB15_56: # %else54
6311 ; AVX2-NEXT:    testl $268435456, %eax # imm = 0x10000000
6312 ; AVX2-NEXT:    jne .LBB15_57
6313 ; AVX2-NEXT:  .LBB15_58: # %else56
6314 ; AVX2-NEXT:    testl $536870912, %eax # imm = 0x20000000
6315 ; AVX2-NEXT:    jne .LBB15_59
6316 ; AVX2-NEXT:  .LBB15_60: # %else58
6317 ; AVX2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6318 ; AVX2-NEXT:    jne .LBB15_61
6319 ; AVX2-NEXT:  .LBB15_62: # %else60
6320 ; AVX2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6321 ; AVX2-NEXT:    jne .LBB15_63
6322 ; AVX2-NEXT:  .LBB15_64: # %else62
6323 ; AVX2-NEXT:    vzeroupper
6324 ; AVX2-NEXT:    retq
6325 ; AVX2-NEXT:  .LBB15_1: # %cond.store
6326 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
6327 ; AVX2-NEXT:    testb $2, %al
6328 ; AVX2-NEXT:    je .LBB15_4
6329 ; AVX2-NEXT:  .LBB15_3: # %cond.store1
6330 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6331 ; AVX2-NEXT:    testb $4, %al
6332 ; AVX2-NEXT:    je .LBB15_6
6333 ; AVX2-NEXT:  .LBB15_5: # %cond.store3
6334 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6335 ; AVX2-NEXT:    testb $8, %al
6336 ; AVX2-NEXT:    je .LBB15_8
6337 ; AVX2-NEXT:  .LBB15_7: # %cond.store5
6338 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6339 ; AVX2-NEXT:    testb $16, %al
6340 ; AVX2-NEXT:    je .LBB15_10
6341 ; AVX2-NEXT:  .LBB15_9: # %cond.store7
6342 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6343 ; AVX2-NEXT:    testb $32, %al
6344 ; AVX2-NEXT:    je .LBB15_12
6345 ; AVX2-NEXT:  .LBB15_11: # %cond.store9
6346 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6347 ; AVX2-NEXT:    testb $64, %al
6348 ; AVX2-NEXT:    je .LBB15_14
6349 ; AVX2-NEXT:  .LBB15_13: # %cond.store11
6350 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6351 ; AVX2-NEXT:    testb $-128, %al
6352 ; AVX2-NEXT:    je .LBB15_16
6353 ; AVX2-NEXT:  .LBB15_15: # %cond.store13
6354 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6355 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
6356 ; AVX2-NEXT:    je .LBB15_18
6357 ; AVX2-NEXT:  .LBB15_17: # %cond.store15
6358 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6359 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
6360 ; AVX2-NEXT:    je .LBB15_20
6361 ; AVX2-NEXT:  .LBB15_19: # %cond.store17
6362 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6363 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
6364 ; AVX2-NEXT:    je .LBB15_22
6365 ; AVX2-NEXT:  .LBB15_21: # %cond.store19
6366 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6367 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
6368 ; AVX2-NEXT:    je .LBB15_24
6369 ; AVX2-NEXT:  .LBB15_23: # %cond.store21
6370 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6371 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
6372 ; AVX2-NEXT:    je .LBB15_26
6373 ; AVX2-NEXT:  .LBB15_25: # %cond.store23
6374 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6375 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
6376 ; AVX2-NEXT:    je .LBB15_28
6377 ; AVX2-NEXT:  .LBB15_27: # %cond.store25
6378 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6379 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
6380 ; AVX2-NEXT:    je .LBB15_30
6381 ; AVX2-NEXT:  .LBB15_29: # %cond.store27
6382 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6383 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
6384 ; AVX2-NEXT:    jne .LBB15_31
6385 ; AVX2-NEXT:    jmp .LBB15_32
6386 ; AVX2-NEXT:  .LBB15_33: # %cond.store31
6387 ; AVX2-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
6388 ; AVX2-NEXT:    testl $131072, %eax # imm = 0x20000
6389 ; AVX2-NEXT:    je .LBB15_36
6390 ; AVX2-NEXT:  .LBB15_35: # %cond.store33
6391 ; AVX2-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
6392 ; AVX2-NEXT:    testl $262144, %eax # imm = 0x40000
6393 ; AVX2-NEXT:    je .LBB15_38
6394 ; AVX2-NEXT:  .LBB15_37: # %cond.store35
6395 ; AVX2-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
6396 ; AVX2-NEXT:    testl $524288, %eax # imm = 0x80000
6397 ; AVX2-NEXT:    je .LBB15_40
6398 ; AVX2-NEXT:  .LBB15_39: # %cond.store37
6399 ; AVX2-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
6400 ; AVX2-NEXT:    testl $1048576, %eax # imm = 0x100000
6401 ; AVX2-NEXT:    je .LBB15_42
6402 ; AVX2-NEXT:  .LBB15_41: # %cond.store39
6403 ; AVX2-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
6404 ; AVX2-NEXT:    testl $2097152, %eax # imm = 0x200000
6405 ; AVX2-NEXT:    je .LBB15_44
6406 ; AVX2-NEXT:  .LBB15_43: # %cond.store41
6407 ; AVX2-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
6408 ; AVX2-NEXT:    testl $4194304, %eax # imm = 0x400000
6409 ; AVX2-NEXT:    je .LBB15_46
6410 ; AVX2-NEXT:  .LBB15_45: # %cond.store43
6411 ; AVX2-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
6412 ; AVX2-NEXT:    testl $8388608, %eax # imm = 0x800000
6413 ; AVX2-NEXT:    je .LBB15_48
6414 ; AVX2-NEXT:  .LBB15_47: # %cond.store45
6415 ; AVX2-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
6416 ; AVX2-NEXT:    testl $16777216, %eax # imm = 0x1000000
6417 ; AVX2-NEXT:    je .LBB15_50
6418 ; AVX2-NEXT:  .LBB15_49: # %cond.store47
6419 ; AVX2-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
6420 ; AVX2-NEXT:    testl $33554432, %eax # imm = 0x2000000
6421 ; AVX2-NEXT:    je .LBB15_52
6422 ; AVX2-NEXT:  .LBB15_51: # %cond.store49
6423 ; AVX2-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
6424 ; AVX2-NEXT:    testl $67108864, %eax # imm = 0x4000000
6425 ; AVX2-NEXT:    je .LBB15_54
6426 ; AVX2-NEXT:  .LBB15_53: # %cond.store51
6427 ; AVX2-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
6428 ; AVX2-NEXT:    testl $134217728, %eax # imm = 0x8000000
6429 ; AVX2-NEXT:    je .LBB15_56
6430 ; AVX2-NEXT:  .LBB15_55: # %cond.store53
6431 ; AVX2-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
6432 ; AVX2-NEXT:    testl $268435456, %eax # imm = 0x10000000
6433 ; AVX2-NEXT:    je .LBB15_58
6434 ; AVX2-NEXT:  .LBB15_57: # %cond.store55
6435 ; AVX2-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
6436 ; AVX2-NEXT:    testl $536870912, %eax # imm = 0x20000000
6437 ; AVX2-NEXT:    je .LBB15_60
6438 ; AVX2-NEXT:  .LBB15_59: # %cond.store57
6439 ; AVX2-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
6440 ; AVX2-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6441 ; AVX2-NEXT:    je .LBB15_62
6442 ; AVX2-NEXT:  .LBB15_61: # %cond.store59
6443 ; AVX2-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
6444 ; AVX2-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6445 ; AVX2-NEXT:    je .LBB15_64
6446 ; AVX2-NEXT:  .LBB15_63: # %cond.store61
6447 ; AVX2-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
6448 ; AVX2-NEXT:    vzeroupper
6449 ; AVX2-NEXT:    retq
6451 ; AVX512F-LABEL: truncstore_v32i16_v32i8:
6452 ; AVX512F:       # %bb.0:
6453 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm2
6454 ; AVX512F-NEXT:    vpxor %xmm3, %xmm3, %xmm3
6455 ; AVX512F-NEXT:    vpcmpeqb %ymm3, %ymm1, %ymm1
6456 ; AVX512F-NEXT:    vpacksswb %ymm2, %ymm0, %ymm0
6457 ; AVX512F-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
6458 ; AVX512F-NEXT:    vpmovmskb %ymm1, %eax
6459 ; AVX512F-NEXT:    notl %eax
6460 ; AVX512F-NEXT:    testb $1, %al
6461 ; AVX512F-NEXT:    jne .LBB15_1
6462 ; AVX512F-NEXT:  # %bb.2: # %else
6463 ; AVX512F-NEXT:    testb $2, %al
6464 ; AVX512F-NEXT:    jne .LBB15_3
6465 ; AVX512F-NEXT:  .LBB15_4: # %else2
6466 ; AVX512F-NEXT:    testb $4, %al
6467 ; AVX512F-NEXT:    jne .LBB15_5
6468 ; AVX512F-NEXT:  .LBB15_6: # %else4
6469 ; AVX512F-NEXT:    testb $8, %al
6470 ; AVX512F-NEXT:    jne .LBB15_7
6471 ; AVX512F-NEXT:  .LBB15_8: # %else6
6472 ; AVX512F-NEXT:    testb $16, %al
6473 ; AVX512F-NEXT:    jne .LBB15_9
6474 ; AVX512F-NEXT:  .LBB15_10: # %else8
6475 ; AVX512F-NEXT:    testb $32, %al
6476 ; AVX512F-NEXT:    jne .LBB15_11
6477 ; AVX512F-NEXT:  .LBB15_12: # %else10
6478 ; AVX512F-NEXT:    testb $64, %al
6479 ; AVX512F-NEXT:    jne .LBB15_13
6480 ; AVX512F-NEXT:  .LBB15_14: # %else12
6481 ; AVX512F-NEXT:    testb $-128, %al
6482 ; AVX512F-NEXT:    jne .LBB15_15
6483 ; AVX512F-NEXT:  .LBB15_16: # %else14
6484 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
6485 ; AVX512F-NEXT:    jne .LBB15_17
6486 ; AVX512F-NEXT:  .LBB15_18: # %else16
6487 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
6488 ; AVX512F-NEXT:    jne .LBB15_19
6489 ; AVX512F-NEXT:  .LBB15_20: # %else18
6490 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
6491 ; AVX512F-NEXT:    jne .LBB15_21
6492 ; AVX512F-NEXT:  .LBB15_22: # %else20
6493 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
6494 ; AVX512F-NEXT:    jne .LBB15_23
6495 ; AVX512F-NEXT:  .LBB15_24: # %else22
6496 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
6497 ; AVX512F-NEXT:    jne .LBB15_25
6498 ; AVX512F-NEXT:  .LBB15_26: # %else24
6499 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
6500 ; AVX512F-NEXT:    jne .LBB15_27
6501 ; AVX512F-NEXT:  .LBB15_28: # %else26
6502 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
6503 ; AVX512F-NEXT:    jne .LBB15_29
6504 ; AVX512F-NEXT:  .LBB15_30: # %else28
6505 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
6506 ; AVX512F-NEXT:    je .LBB15_32
6507 ; AVX512F-NEXT:  .LBB15_31: # %cond.store29
6508 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
6509 ; AVX512F-NEXT:  .LBB15_32: # %else30
6510 ; AVX512F-NEXT:    testl $65536, %eax # imm = 0x10000
6511 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6512 ; AVX512F-NEXT:    jne .LBB15_33
6513 ; AVX512F-NEXT:  # %bb.34: # %else32
6514 ; AVX512F-NEXT:    testl $131072, %eax # imm = 0x20000
6515 ; AVX512F-NEXT:    jne .LBB15_35
6516 ; AVX512F-NEXT:  .LBB15_36: # %else34
6517 ; AVX512F-NEXT:    testl $262144, %eax # imm = 0x40000
6518 ; AVX512F-NEXT:    jne .LBB15_37
6519 ; AVX512F-NEXT:  .LBB15_38: # %else36
6520 ; AVX512F-NEXT:    testl $524288, %eax # imm = 0x80000
6521 ; AVX512F-NEXT:    jne .LBB15_39
6522 ; AVX512F-NEXT:  .LBB15_40: # %else38
6523 ; AVX512F-NEXT:    testl $1048576, %eax # imm = 0x100000
6524 ; AVX512F-NEXT:    jne .LBB15_41
6525 ; AVX512F-NEXT:  .LBB15_42: # %else40
6526 ; AVX512F-NEXT:    testl $2097152, %eax # imm = 0x200000
6527 ; AVX512F-NEXT:    jne .LBB15_43
6528 ; AVX512F-NEXT:  .LBB15_44: # %else42
6529 ; AVX512F-NEXT:    testl $4194304, %eax # imm = 0x400000
6530 ; AVX512F-NEXT:    jne .LBB15_45
6531 ; AVX512F-NEXT:  .LBB15_46: # %else44
6532 ; AVX512F-NEXT:    testl $8388608, %eax # imm = 0x800000
6533 ; AVX512F-NEXT:    jne .LBB15_47
6534 ; AVX512F-NEXT:  .LBB15_48: # %else46
6535 ; AVX512F-NEXT:    testl $16777216, %eax # imm = 0x1000000
6536 ; AVX512F-NEXT:    jne .LBB15_49
6537 ; AVX512F-NEXT:  .LBB15_50: # %else48
6538 ; AVX512F-NEXT:    testl $33554432, %eax # imm = 0x2000000
6539 ; AVX512F-NEXT:    jne .LBB15_51
6540 ; AVX512F-NEXT:  .LBB15_52: # %else50
6541 ; AVX512F-NEXT:    testl $67108864, %eax # imm = 0x4000000
6542 ; AVX512F-NEXT:    jne .LBB15_53
6543 ; AVX512F-NEXT:  .LBB15_54: # %else52
6544 ; AVX512F-NEXT:    testl $134217728, %eax # imm = 0x8000000
6545 ; AVX512F-NEXT:    jne .LBB15_55
6546 ; AVX512F-NEXT:  .LBB15_56: # %else54
6547 ; AVX512F-NEXT:    testl $268435456, %eax # imm = 0x10000000
6548 ; AVX512F-NEXT:    jne .LBB15_57
6549 ; AVX512F-NEXT:  .LBB15_58: # %else56
6550 ; AVX512F-NEXT:    testl $536870912, %eax # imm = 0x20000000
6551 ; AVX512F-NEXT:    jne .LBB15_59
6552 ; AVX512F-NEXT:  .LBB15_60: # %else58
6553 ; AVX512F-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6554 ; AVX512F-NEXT:    jne .LBB15_61
6555 ; AVX512F-NEXT:  .LBB15_62: # %else60
6556 ; AVX512F-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6557 ; AVX512F-NEXT:    jne .LBB15_63
6558 ; AVX512F-NEXT:  .LBB15_64: # %else62
6559 ; AVX512F-NEXT:    vzeroupper
6560 ; AVX512F-NEXT:    retq
6561 ; AVX512F-NEXT:  .LBB15_1: # %cond.store
6562 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
6563 ; AVX512F-NEXT:    testb $2, %al
6564 ; AVX512F-NEXT:    je .LBB15_4
6565 ; AVX512F-NEXT:  .LBB15_3: # %cond.store1
6566 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
6567 ; AVX512F-NEXT:    testb $4, %al
6568 ; AVX512F-NEXT:    je .LBB15_6
6569 ; AVX512F-NEXT:  .LBB15_5: # %cond.store3
6570 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
6571 ; AVX512F-NEXT:    testb $8, %al
6572 ; AVX512F-NEXT:    je .LBB15_8
6573 ; AVX512F-NEXT:  .LBB15_7: # %cond.store5
6574 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
6575 ; AVX512F-NEXT:    testb $16, %al
6576 ; AVX512F-NEXT:    je .LBB15_10
6577 ; AVX512F-NEXT:  .LBB15_9: # %cond.store7
6578 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
6579 ; AVX512F-NEXT:    testb $32, %al
6580 ; AVX512F-NEXT:    je .LBB15_12
6581 ; AVX512F-NEXT:  .LBB15_11: # %cond.store9
6582 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
6583 ; AVX512F-NEXT:    testb $64, %al
6584 ; AVX512F-NEXT:    je .LBB15_14
6585 ; AVX512F-NEXT:  .LBB15_13: # %cond.store11
6586 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
6587 ; AVX512F-NEXT:    testb $-128, %al
6588 ; AVX512F-NEXT:    je .LBB15_16
6589 ; AVX512F-NEXT:  .LBB15_15: # %cond.store13
6590 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
6591 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
6592 ; AVX512F-NEXT:    je .LBB15_18
6593 ; AVX512F-NEXT:  .LBB15_17: # %cond.store15
6594 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
6595 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
6596 ; AVX512F-NEXT:    je .LBB15_20
6597 ; AVX512F-NEXT:  .LBB15_19: # %cond.store17
6598 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
6599 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
6600 ; AVX512F-NEXT:    je .LBB15_22
6601 ; AVX512F-NEXT:  .LBB15_21: # %cond.store19
6602 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
6603 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
6604 ; AVX512F-NEXT:    je .LBB15_24
6605 ; AVX512F-NEXT:  .LBB15_23: # %cond.store21
6606 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
6607 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
6608 ; AVX512F-NEXT:    je .LBB15_26
6609 ; AVX512F-NEXT:  .LBB15_25: # %cond.store23
6610 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
6611 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
6612 ; AVX512F-NEXT:    je .LBB15_28
6613 ; AVX512F-NEXT:  .LBB15_27: # %cond.store25
6614 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
6615 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
6616 ; AVX512F-NEXT:    je .LBB15_30
6617 ; AVX512F-NEXT:  .LBB15_29: # %cond.store27
6618 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
6619 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
6620 ; AVX512F-NEXT:    jne .LBB15_31
6621 ; AVX512F-NEXT:    jmp .LBB15_32
6622 ; AVX512F-NEXT:  .LBB15_33: # %cond.store31
6623 ; AVX512F-NEXT:    vpextrb $0, %xmm0, 16(%rdi)
6624 ; AVX512F-NEXT:    testl $131072, %eax # imm = 0x20000
6625 ; AVX512F-NEXT:    je .LBB15_36
6626 ; AVX512F-NEXT:  .LBB15_35: # %cond.store33
6627 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 17(%rdi)
6628 ; AVX512F-NEXT:    testl $262144, %eax # imm = 0x40000
6629 ; AVX512F-NEXT:    je .LBB15_38
6630 ; AVX512F-NEXT:  .LBB15_37: # %cond.store35
6631 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 18(%rdi)
6632 ; AVX512F-NEXT:    testl $524288, %eax # imm = 0x80000
6633 ; AVX512F-NEXT:    je .LBB15_40
6634 ; AVX512F-NEXT:  .LBB15_39: # %cond.store37
6635 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 19(%rdi)
6636 ; AVX512F-NEXT:    testl $1048576, %eax # imm = 0x100000
6637 ; AVX512F-NEXT:    je .LBB15_42
6638 ; AVX512F-NEXT:  .LBB15_41: # %cond.store39
6639 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 20(%rdi)
6640 ; AVX512F-NEXT:    testl $2097152, %eax # imm = 0x200000
6641 ; AVX512F-NEXT:    je .LBB15_44
6642 ; AVX512F-NEXT:  .LBB15_43: # %cond.store41
6643 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 21(%rdi)
6644 ; AVX512F-NEXT:    testl $4194304, %eax # imm = 0x400000
6645 ; AVX512F-NEXT:    je .LBB15_46
6646 ; AVX512F-NEXT:  .LBB15_45: # %cond.store43
6647 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 22(%rdi)
6648 ; AVX512F-NEXT:    testl $8388608, %eax # imm = 0x800000
6649 ; AVX512F-NEXT:    je .LBB15_48
6650 ; AVX512F-NEXT:  .LBB15_47: # %cond.store45
6651 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 23(%rdi)
6652 ; AVX512F-NEXT:    testl $16777216, %eax # imm = 0x1000000
6653 ; AVX512F-NEXT:    je .LBB15_50
6654 ; AVX512F-NEXT:  .LBB15_49: # %cond.store47
6655 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 24(%rdi)
6656 ; AVX512F-NEXT:    testl $33554432, %eax # imm = 0x2000000
6657 ; AVX512F-NEXT:    je .LBB15_52
6658 ; AVX512F-NEXT:  .LBB15_51: # %cond.store49
6659 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 25(%rdi)
6660 ; AVX512F-NEXT:    testl $67108864, %eax # imm = 0x4000000
6661 ; AVX512F-NEXT:    je .LBB15_54
6662 ; AVX512F-NEXT:  .LBB15_53: # %cond.store51
6663 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 26(%rdi)
6664 ; AVX512F-NEXT:    testl $134217728, %eax # imm = 0x8000000
6665 ; AVX512F-NEXT:    je .LBB15_56
6666 ; AVX512F-NEXT:  .LBB15_55: # %cond.store53
6667 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 27(%rdi)
6668 ; AVX512F-NEXT:    testl $268435456, %eax # imm = 0x10000000
6669 ; AVX512F-NEXT:    je .LBB15_58
6670 ; AVX512F-NEXT:  .LBB15_57: # %cond.store55
6671 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 28(%rdi)
6672 ; AVX512F-NEXT:    testl $536870912, %eax # imm = 0x20000000
6673 ; AVX512F-NEXT:    je .LBB15_60
6674 ; AVX512F-NEXT:  .LBB15_59: # %cond.store57
6675 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 29(%rdi)
6676 ; AVX512F-NEXT:    testl $1073741824, %eax # imm = 0x40000000
6677 ; AVX512F-NEXT:    je .LBB15_62
6678 ; AVX512F-NEXT:  .LBB15_61: # %cond.store59
6679 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 30(%rdi)
6680 ; AVX512F-NEXT:    testl $-2147483648, %eax # imm = 0x80000000
6681 ; AVX512F-NEXT:    je .LBB15_64
6682 ; AVX512F-NEXT:  .LBB15_63: # %cond.store61
6683 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 31(%rdi)
6684 ; AVX512F-NEXT:    vzeroupper
6685 ; AVX512F-NEXT:    retq
6687 ; AVX512BW-LABEL: truncstore_v32i16_v32i8:
6688 ; AVX512BW:       # %bb.0:
6689 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
6690 ; AVX512BW-NEXT:    vptestmb %zmm1, %zmm1, %k1
6691 ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %zmm0, %zmm0
6692 ; AVX512BW-NEXT:    vpmaxsw {{.*}}(%rip), %zmm0, %zmm0
6693 ; AVX512BW-NEXT:    vpmovwb %zmm0, (%rdi) {%k1}
6694 ; AVX512BW-NEXT:    vzeroupper
6695 ; AVX512BW-NEXT:    retq
6697 ; AVX512BWVL-LABEL: truncstore_v32i16_v32i8:
6698 ; AVX512BWVL:       # %bb.0:
6699 ; AVX512BWVL-NEXT:    vptestmb %ymm1, %ymm1, %k1
6700 ; AVX512BWVL-NEXT:    vpminsw {{.*}}(%rip), %zmm0, %zmm0
6701 ; AVX512BWVL-NEXT:    vpmaxsw {{.*}}(%rip), %zmm0, %zmm0
6702 ; AVX512BWVL-NEXT:    vpmovwb %zmm0, (%rdi) {%k1}
6703 ; AVX512BWVL-NEXT:    vzeroupper
6704 ; AVX512BWVL-NEXT:    retq
6705   %a = icmp ne <32 x i8> %mask, zeroinitializer
6706   %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>
6707   %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>
6708   %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>
6709   %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>
6710   %f = trunc <32 x i16> %e to <32 x i8>
6711   call void @llvm.masked.store.v32i8.p0v32i8(<32 x i8> %f, <32 x i8>* %p, i32 1, <32 x i1> %a)
6712   ret void
6715 define void @truncstore_v16i16_v16i8(<16 x i16> %x, <16 x i8>* %p, <16 x i8> %mask) {
6716 ; SSE2-LABEL: truncstore_v16i16_v16i8:
6717 ; SSE2:       # %bb.0:
6718 ; SSE2-NEXT:    pxor %xmm3, %xmm3
6719 ; SSE2-NEXT:    packsswb %xmm1, %xmm0
6720 ; SSE2-NEXT:    pcmpeqb %xmm2, %xmm3
6721 ; SSE2-NEXT:    pmovmskb %xmm3, %eax
6722 ; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6723 ; SSE2-NEXT:    testb $1, %al
6724 ; SSE2-NEXT:    movd %xmm0, %ecx
6725 ; SSE2-NEXT:    jne .LBB16_1
6726 ; SSE2-NEXT:  # %bb.2: # %else
6727 ; SSE2-NEXT:    testb $2, %al
6728 ; SSE2-NEXT:    jne .LBB16_3
6729 ; SSE2-NEXT:  .LBB16_4: # %else2
6730 ; SSE2-NEXT:    testb $4, %al
6731 ; SSE2-NEXT:    jne .LBB16_5
6732 ; SSE2-NEXT:  .LBB16_6: # %else4
6733 ; SSE2-NEXT:    testb $8, %al
6734 ; SSE2-NEXT:    je .LBB16_8
6735 ; SSE2-NEXT:  .LBB16_7: # %cond.store5
6736 ; SSE2-NEXT:    shrl $24, %ecx
6737 ; SSE2-NEXT:    movb %cl, 3(%rdi)
6738 ; SSE2-NEXT:  .LBB16_8: # %else6
6739 ; SSE2-NEXT:    testb $16, %al
6740 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
6741 ; SSE2-NEXT:    je .LBB16_10
6742 ; SSE2-NEXT:  # %bb.9: # %cond.store7
6743 ; SSE2-NEXT:    movb %cl, 4(%rdi)
6744 ; SSE2-NEXT:  .LBB16_10: # %else8
6745 ; SSE2-NEXT:    testb $32, %al
6746 ; SSE2-NEXT:    je .LBB16_12
6747 ; SSE2-NEXT:  # %bb.11: # %cond.store9
6748 ; SSE2-NEXT:    movb %ch, 5(%rdi)
6749 ; SSE2-NEXT:  .LBB16_12: # %else10
6750 ; SSE2-NEXT:    testb $64, %al
6751 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
6752 ; SSE2-NEXT:    je .LBB16_14
6753 ; SSE2-NEXT:  # %bb.13: # %cond.store11
6754 ; SSE2-NEXT:    movb %cl, 6(%rdi)
6755 ; SSE2-NEXT:  .LBB16_14: # %else12
6756 ; SSE2-NEXT:    testb $-128, %al
6757 ; SSE2-NEXT:    je .LBB16_16
6758 ; SSE2-NEXT:  # %bb.15: # %cond.store13
6759 ; SSE2-NEXT:    movb %ch, 7(%rdi)
6760 ; SSE2-NEXT:  .LBB16_16: # %else14
6761 ; SSE2-NEXT:    testl $256, %eax # imm = 0x100
6762 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
6763 ; SSE2-NEXT:    je .LBB16_18
6764 ; SSE2-NEXT:  # %bb.17: # %cond.store15
6765 ; SSE2-NEXT:    movb %cl, 8(%rdi)
6766 ; SSE2-NEXT:  .LBB16_18: # %else16
6767 ; SSE2-NEXT:    testl $512, %eax # imm = 0x200
6768 ; SSE2-NEXT:    je .LBB16_20
6769 ; SSE2-NEXT:  # %bb.19: # %cond.store17
6770 ; SSE2-NEXT:    movb %ch, 9(%rdi)
6771 ; SSE2-NEXT:  .LBB16_20: # %else18
6772 ; SSE2-NEXT:    testl $1024, %eax # imm = 0x400
6773 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
6774 ; SSE2-NEXT:    je .LBB16_22
6775 ; SSE2-NEXT:  # %bb.21: # %cond.store19
6776 ; SSE2-NEXT:    movb %cl, 10(%rdi)
6777 ; SSE2-NEXT:  .LBB16_22: # %else20
6778 ; SSE2-NEXT:    testl $2048, %eax # imm = 0x800
6779 ; SSE2-NEXT:    je .LBB16_24
6780 ; SSE2-NEXT:  # %bb.23: # %cond.store21
6781 ; SSE2-NEXT:    movb %ch, 11(%rdi)
6782 ; SSE2-NEXT:  .LBB16_24: # %else22
6783 ; SSE2-NEXT:    testl $4096, %eax # imm = 0x1000
6784 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
6785 ; SSE2-NEXT:    je .LBB16_26
6786 ; SSE2-NEXT:  # %bb.25: # %cond.store23
6787 ; SSE2-NEXT:    movb %cl, 12(%rdi)
6788 ; SSE2-NEXT:  .LBB16_26: # %else24
6789 ; SSE2-NEXT:    testl $8192, %eax # imm = 0x2000
6790 ; SSE2-NEXT:    je .LBB16_28
6791 ; SSE2-NEXT:  # %bb.27: # %cond.store25
6792 ; SSE2-NEXT:    movb %ch, 13(%rdi)
6793 ; SSE2-NEXT:  .LBB16_28: # %else26
6794 ; SSE2-NEXT:    testl $16384, %eax # imm = 0x4000
6795 ; SSE2-NEXT:    pextrw $7, %xmm0, %ecx
6796 ; SSE2-NEXT:    jne .LBB16_29
6797 ; SSE2-NEXT:  # %bb.30: # %else28
6798 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
6799 ; SSE2-NEXT:    jne .LBB16_31
6800 ; SSE2-NEXT:  .LBB16_32: # %else30
6801 ; SSE2-NEXT:    retq
6802 ; SSE2-NEXT:  .LBB16_1: # %cond.store
6803 ; SSE2-NEXT:    movb %cl, (%rdi)
6804 ; SSE2-NEXT:    testb $2, %al
6805 ; SSE2-NEXT:    je .LBB16_4
6806 ; SSE2-NEXT:  .LBB16_3: # %cond.store1
6807 ; SSE2-NEXT:    movb %ch, 1(%rdi)
6808 ; SSE2-NEXT:    testb $4, %al
6809 ; SSE2-NEXT:    je .LBB16_6
6810 ; SSE2-NEXT:  .LBB16_5: # %cond.store3
6811 ; SSE2-NEXT:    movl %ecx, %edx
6812 ; SSE2-NEXT:    shrl $16, %edx
6813 ; SSE2-NEXT:    movb %dl, 2(%rdi)
6814 ; SSE2-NEXT:    testb $8, %al
6815 ; SSE2-NEXT:    jne .LBB16_7
6816 ; SSE2-NEXT:    jmp .LBB16_8
6817 ; SSE2-NEXT:  .LBB16_29: # %cond.store27
6818 ; SSE2-NEXT:    movb %cl, 14(%rdi)
6819 ; SSE2-NEXT:    testl $32768, %eax # imm = 0x8000
6820 ; SSE2-NEXT:    je .LBB16_32
6821 ; SSE2-NEXT:  .LBB16_31: # %cond.store29
6822 ; SSE2-NEXT:    movb %ch, 15(%rdi)
6823 ; SSE2-NEXT:    retq
6825 ; SSE4-LABEL: truncstore_v16i16_v16i8:
6826 ; SSE4:       # %bb.0:
6827 ; SSE4-NEXT:    pxor %xmm3, %xmm3
6828 ; SSE4-NEXT:    packsswb %xmm1, %xmm0
6829 ; SSE4-NEXT:    pcmpeqb %xmm2, %xmm3
6830 ; SSE4-NEXT:    pmovmskb %xmm3, %eax
6831 ; SSE4-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6832 ; SSE4-NEXT:    testb $1, %al
6833 ; SSE4-NEXT:    jne .LBB16_1
6834 ; SSE4-NEXT:  # %bb.2: # %else
6835 ; SSE4-NEXT:    testb $2, %al
6836 ; SSE4-NEXT:    jne .LBB16_3
6837 ; SSE4-NEXT:  .LBB16_4: # %else2
6838 ; SSE4-NEXT:    testb $4, %al
6839 ; SSE4-NEXT:    jne .LBB16_5
6840 ; SSE4-NEXT:  .LBB16_6: # %else4
6841 ; SSE4-NEXT:    testb $8, %al
6842 ; SSE4-NEXT:    jne .LBB16_7
6843 ; SSE4-NEXT:  .LBB16_8: # %else6
6844 ; SSE4-NEXT:    testb $16, %al
6845 ; SSE4-NEXT:    jne .LBB16_9
6846 ; SSE4-NEXT:  .LBB16_10: # %else8
6847 ; SSE4-NEXT:    testb $32, %al
6848 ; SSE4-NEXT:    jne .LBB16_11
6849 ; SSE4-NEXT:  .LBB16_12: # %else10
6850 ; SSE4-NEXT:    testb $64, %al
6851 ; SSE4-NEXT:    jne .LBB16_13
6852 ; SSE4-NEXT:  .LBB16_14: # %else12
6853 ; SSE4-NEXT:    testb $-128, %al
6854 ; SSE4-NEXT:    jne .LBB16_15
6855 ; SSE4-NEXT:  .LBB16_16: # %else14
6856 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
6857 ; SSE4-NEXT:    jne .LBB16_17
6858 ; SSE4-NEXT:  .LBB16_18: # %else16
6859 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
6860 ; SSE4-NEXT:    jne .LBB16_19
6861 ; SSE4-NEXT:  .LBB16_20: # %else18
6862 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
6863 ; SSE4-NEXT:    jne .LBB16_21
6864 ; SSE4-NEXT:  .LBB16_22: # %else20
6865 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
6866 ; SSE4-NEXT:    jne .LBB16_23
6867 ; SSE4-NEXT:  .LBB16_24: # %else22
6868 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
6869 ; SSE4-NEXT:    jne .LBB16_25
6870 ; SSE4-NEXT:  .LBB16_26: # %else24
6871 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
6872 ; SSE4-NEXT:    jne .LBB16_27
6873 ; SSE4-NEXT:  .LBB16_28: # %else26
6874 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
6875 ; SSE4-NEXT:    jne .LBB16_29
6876 ; SSE4-NEXT:  .LBB16_30: # %else28
6877 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
6878 ; SSE4-NEXT:    jne .LBB16_31
6879 ; SSE4-NEXT:  .LBB16_32: # %else30
6880 ; SSE4-NEXT:    retq
6881 ; SSE4-NEXT:  .LBB16_1: # %cond.store
6882 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
6883 ; SSE4-NEXT:    testb $2, %al
6884 ; SSE4-NEXT:    je .LBB16_4
6885 ; SSE4-NEXT:  .LBB16_3: # %cond.store1
6886 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
6887 ; SSE4-NEXT:    testb $4, %al
6888 ; SSE4-NEXT:    je .LBB16_6
6889 ; SSE4-NEXT:  .LBB16_5: # %cond.store3
6890 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
6891 ; SSE4-NEXT:    testb $8, %al
6892 ; SSE4-NEXT:    je .LBB16_8
6893 ; SSE4-NEXT:  .LBB16_7: # %cond.store5
6894 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
6895 ; SSE4-NEXT:    testb $16, %al
6896 ; SSE4-NEXT:    je .LBB16_10
6897 ; SSE4-NEXT:  .LBB16_9: # %cond.store7
6898 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
6899 ; SSE4-NEXT:    testb $32, %al
6900 ; SSE4-NEXT:    je .LBB16_12
6901 ; SSE4-NEXT:  .LBB16_11: # %cond.store9
6902 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
6903 ; SSE4-NEXT:    testb $64, %al
6904 ; SSE4-NEXT:    je .LBB16_14
6905 ; SSE4-NEXT:  .LBB16_13: # %cond.store11
6906 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
6907 ; SSE4-NEXT:    testb $-128, %al
6908 ; SSE4-NEXT:    je .LBB16_16
6909 ; SSE4-NEXT:  .LBB16_15: # %cond.store13
6910 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
6911 ; SSE4-NEXT:    testl $256, %eax # imm = 0x100
6912 ; SSE4-NEXT:    je .LBB16_18
6913 ; SSE4-NEXT:  .LBB16_17: # %cond.store15
6914 ; SSE4-NEXT:    pextrb $8, %xmm0, 8(%rdi)
6915 ; SSE4-NEXT:    testl $512, %eax # imm = 0x200
6916 ; SSE4-NEXT:    je .LBB16_20
6917 ; SSE4-NEXT:  .LBB16_19: # %cond.store17
6918 ; SSE4-NEXT:    pextrb $9, %xmm0, 9(%rdi)
6919 ; SSE4-NEXT:    testl $1024, %eax # imm = 0x400
6920 ; SSE4-NEXT:    je .LBB16_22
6921 ; SSE4-NEXT:  .LBB16_21: # %cond.store19
6922 ; SSE4-NEXT:    pextrb $10, %xmm0, 10(%rdi)
6923 ; SSE4-NEXT:    testl $2048, %eax # imm = 0x800
6924 ; SSE4-NEXT:    je .LBB16_24
6925 ; SSE4-NEXT:  .LBB16_23: # %cond.store21
6926 ; SSE4-NEXT:    pextrb $11, %xmm0, 11(%rdi)
6927 ; SSE4-NEXT:    testl $4096, %eax # imm = 0x1000
6928 ; SSE4-NEXT:    je .LBB16_26
6929 ; SSE4-NEXT:  .LBB16_25: # %cond.store23
6930 ; SSE4-NEXT:    pextrb $12, %xmm0, 12(%rdi)
6931 ; SSE4-NEXT:    testl $8192, %eax # imm = 0x2000
6932 ; SSE4-NEXT:    je .LBB16_28
6933 ; SSE4-NEXT:  .LBB16_27: # %cond.store25
6934 ; SSE4-NEXT:    pextrb $13, %xmm0, 13(%rdi)
6935 ; SSE4-NEXT:    testl $16384, %eax # imm = 0x4000
6936 ; SSE4-NEXT:    je .LBB16_30
6937 ; SSE4-NEXT:  .LBB16_29: # %cond.store27
6938 ; SSE4-NEXT:    pextrb $14, %xmm0, 14(%rdi)
6939 ; SSE4-NEXT:    testl $32768, %eax # imm = 0x8000
6940 ; SSE4-NEXT:    je .LBB16_32
6941 ; SSE4-NEXT:  .LBB16_31: # %cond.store29
6942 ; SSE4-NEXT:    pextrb $15, %xmm0, 15(%rdi)
6943 ; SSE4-NEXT:    retq
6945 ; AVX1-LABEL: truncstore_v16i16_v16i8:
6946 ; AVX1:       # %bb.0:
6947 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6948 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
6949 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
6950 ; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
6951 ; AVX1-NEXT:    vpmovmskb %xmm1, %eax
6952 ; AVX1-NEXT:    xorl $65535, %eax # imm = 0xFFFF
6953 ; AVX1-NEXT:    testb $1, %al
6954 ; AVX1-NEXT:    jne .LBB16_1
6955 ; AVX1-NEXT:  # %bb.2: # %else
6956 ; AVX1-NEXT:    testb $2, %al
6957 ; AVX1-NEXT:    jne .LBB16_3
6958 ; AVX1-NEXT:  .LBB16_4: # %else2
6959 ; AVX1-NEXT:    testb $4, %al
6960 ; AVX1-NEXT:    jne .LBB16_5
6961 ; AVX1-NEXT:  .LBB16_6: # %else4
6962 ; AVX1-NEXT:    testb $8, %al
6963 ; AVX1-NEXT:    jne .LBB16_7
6964 ; AVX1-NEXT:  .LBB16_8: # %else6
6965 ; AVX1-NEXT:    testb $16, %al
6966 ; AVX1-NEXT:    jne .LBB16_9
6967 ; AVX1-NEXT:  .LBB16_10: # %else8
6968 ; AVX1-NEXT:    testb $32, %al
6969 ; AVX1-NEXT:    jne .LBB16_11
6970 ; AVX1-NEXT:  .LBB16_12: # %else10
6971 ; AVX1-NEXT:    testb $64, %al
6972 ; AVX1-NEXT:    jne .LBB16_13
6973 ; AVX1-NEXT:  .LBB16_14: # %else12
6974 ; AVX1-NEXT:    testb $-128, %al
6975 ; AVX1-NEXT:    jne .LBB16_15
6976 ; AVX1-NEXT:  .LBB16_16: # %else14
6977 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
6978 ; AVX1-NEXT:    jne .LBB16_17
6979 ; AVX1-NEXT:  .LBB16_18: # %else16
6980 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
6981 ; AVX1-NEXT:    jne .LBB16_19
6982 ; AVX1-NEXT:  .LBB16_20: # %else18
6983 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
6984 ; AVX1-NEXT:    jne .LBB16_21
6985 ; AVX1-NEXT:  .LBB16_22: # %else20
6986 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
6987 ; AVX1-NEXT:    jne .LBB16_23
6988 ; AVX1-NEXT:  .LBB16_24: # %else22
6989 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
6990 ; AVX1-NEXT:    jne .LBB16_25
6991 ; AVX1-NEXT:  .LBB16_26: # %else24
6992 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
6993 ; AVX1-NEXT:    jne .LBB16_27
6994 ; AVX1-NEXT:  .LBB16_28: # %else26
6995 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
6996 ; AVX1-NEXT:    jne .LBB16_29
6997 ; AVX1-NEXT:  .LBB16_30: # %else28
6998 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
6999 ; AVX1-NEXT:    jne .LBB16_31
7000 ; AVX1-NEXT:  .LBB16_32: # %else30
7001 ; AVX1-NEXT:    vzeroupper
7002 ; AVX1-NEXT:    retq
7003 ; AVX1-NEXT:  .LBB16_1: # %cond.store
7004 ; AVX1-NEXT:    vpextrb $0, %xmm0, (%rdi)
7005 ; AVX1-NEXT:    testb $2, %al
7006 ; AVX1-NEXT:    je .LBB16_4
7007 ; AVX1-NEXT:  .LBB16_3: # %cond.store1
7008 ; AVX1-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7009 ; AVX1-NEXT:    testb $4, %al
7010 ; AVX1-NEXT:    je .LBB16_6
7011 ; AVX1-NEXT:  .LBB16_5: # %cond.store3
7012 ; AVX1-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7013 ; AVX1-NEXT:    testb $8, %al
7014 ; AVX1-NEXT:    je .LBB16_8
7015 ; AVX1-NEXT:  .LBB16_7: # %cond.store5
7016 ; AVX1-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7017 ; AVX1-NEXT:    testb $16, %al
7018 ; AVX1-NEXT:    je .LBB16_10
7019 ; AVX1-NEXT:  .LBB16_9: # %cond.store7
7020 ; AVX1-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7021 ; AVX1-NEXT:    testb $32, %al
7022 ; AVX1-NEXT:    je .LBB16_12
7023 ; AVX1-NEXT:  .LBB16_11: # %cond.store9
7024 ; AVX1-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7025 ; AVX1-NEXT:    testb $64, %al
7026 ; AVX1-NEXT:    je .LBB16_14
7027 ; AVX1-NEXT:  .LBB16_13: # %cond.store11
7028 ; AVX1-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7029 ; AVX1-NEXT:    testb $-128, %al
7030 ; AVX1-NEXT:    je .LBB16_16
7031 ; AVX1-NEXT:  .LBB16_15: # %cond.store13
7032 ; AVX1-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7033 ; AVX1-NEXT:    testl $256, %eax # imm = 0x100
7034 ; AVX1-NEXT:    je .LBB16_18
7035 ; AVX1-NEXT:  .LBB16_17: # %cond.store15
7036 ; AVX1-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
7037 ; AVX1-NEXT:    testl $512, %eax # imm = 0x200
7038 ; AVX1-NEXT:    je .LBB16_20
7039 ; AVX1-NEXT:  .LBB16_19: # %cond.store17
7040 ; AVX1-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
7041 ; AVX1-NEXT:    testl $1024, %eax # imm = 0x400
7042 ; AVX1-NEXT:    je .LBB16_22
7043 ; AVX1-NEXT:  .LBB16_21: # %cond.store19
7044 ; AVX1-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
7045 ; AVX1-NEXT:    testl $2048, %eax # imm = 0x800
7046 ; AVX1-NEXT:    je .LBB16_24
7047 ; AVX1-NEXT:  .LBB16_23: # %cond.store21
7048 ; AVX1-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
7049 ; AVX1-NEXT:    testl $4096, %eax # imm = 0x1000
7050 ; AVX1-NEXT:    je .LBB16_26
7051 ; AVX1-NEXT:  .LBB16_25: # %cond.store23
7052 ; AVX1-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
7053 ; AVX1-NEXT:    testl $8192, %eax # imm = 0x2000
7054 ; AVX1-NEXT:    je .LBB16_28
7055 ; AVX1-NEXT:  .LBB16_27: # %cond.store25
7056 ; AVX1-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
7057 ; AVX1-NEXT:    testl $16384, %eax # imm = 0x4000
7058 ; AVX1-NEXT:    je .LBB16_30
7059 ; AVX1-NEXT:  .LBB16_29: # %cond.store27
7060 ; AVX1-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
7061 ; AVX1-NEXT:    testl $32768, %eax # imm = 0x8000
7062 ; AVX1-NEXT:    je .LBB16_32
7063 ; AVX1-NEXT:  .LBB16_31: # %cond.store29
7064 ; AVX1-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
7065 ; AVX1-NEXT:    vzeroupper
7066 ; AVX1-NEXT:    retq
7068 ; AVX2-LABEL: truncstore_v16i16_v16i8:
7069 ; AVX2:       # %bb.0:
7070 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7071 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
7072 ; AVX2-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
7073 ; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
7074 ; AVX2-NEXT:    vpmovmskb %xmm1, %eax
7075 ; AVX2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
7076 ; AVX2-NEXT:    testb $1, %al
7077 ; AVX2-NEXT:    jne .LBB16_1
7078 ; AVX2-NEXT:  # %bb.2: # %else
7079 ; AVX2-NEXT:    testb $2, %al
7080 ; AVX2-NEXT:    jne .LBB16_3
7081 ; AVX2-NEXT:  .LBB16_4: # %else2
7082 ; AVX2-NEXT:    testb $4, %al
7083 ; AVX2-NEXT:    jne .LBB16_5
7084 ; AVX2-NEXT:  .LBB16_6: # %else4
7085 ; AVX2-NEXT:    testb $8, %al
7086 ; AVX2-NEXT:    jne .LBB16_7
7087 ; AVX2-NEXT:  .LBB16_8: # %else6
7088 ; AVX2-NEXT:    testb $16, %al
7089 ; AVX2-NEXT:    jne .LBB16_9
7090 ; AVX2-NEXT:  .LBB16_10: # %else8
7091 ; AVX2-NEXT:    testb $32, %al
7092 ; AVX2-NEXT:    jne .LBB16_11
7093 ; AVX2-NEXT:  .LBB16_12: # %else10
7094 ; AVX2-NEXT:    testb $64, %al
7095 ; AVX2-NEXT:    jne .LBB16_13
7096 ; AVX2-NEXT:  .LBB16_14: # %else12
7097 ; AVX2-NEXT:    testb $-128, %al
7098 ; AVX2-NEXT:    jne .LBB16_15
7099 ; AVX2-NEXT:  .LBB16_16: # %else14
7100 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
7101 ; AVX2-NEXT:    jne .LBB16_17
7102 ; AVX2-NEXT:  .LBB16_18: # %else16
7103 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
7104 ; AVX2-NEXT:    jne .LBB16_19
7105 ; AVX2-NEXT:  .LBB16_20: # %else18
7106 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
7107 ; AVX2-NEXT:    jne .LBB16_21
7108 ; AVX2-NEXT:  .LBB16_22: # %else20
7109 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
7110 ; AVX2-NEXT:    jne .LBB16_23
7111 ; AVX2-NEXT:  .LBB16_24: # %else22
7112 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
7113 ; AVX2-NEXT:    jne .LBB16_25
7114 ; AVX2-NEXT:  .LBB16_26: # %else24
7115 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
7116 ; AVX2-NEXT:    jne .LBB16_27
7117 ; AVX2-NEXT:  .LBB16_28: # %else26
7118 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
7119 ; AVX2-NEXT:    jne .LBB16_29
7120 ; AVX2-NEXT:  .LBB16_30: # %else28
7121 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
7122 ; AVX2-NEXT:    jne .LBB16_31
7123 ; AVX2-NEXT:  .LBB16_32: # %else30
7124 ; AVX2-NEXT:    vzeroupper
7125 ; AVX2-NEXT:    retq
7126 ; AVX2-NEXT:  .LBB16_1: # %cond.store
7127 ; AVX2-NEXT:    vpextrb $0, %xmm0, (%rdi)
7128 ; AVX2-NEXT:    testb $2, %al
7129 ; AVX2-NEXT:    je .LBB16_4
7130 ; AVX2-NEXT:  .LBB16_3: # %cond.store1
7131 ; AVX2-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7132 ; AVX2-NEXT:    testb $4, %al
7133 ; AVX2-NEXT:    je .LBB16_6
7134 ; AVX2-NEXT:  .LBB16_5: # %cond.store3
7135 ; AVX2-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7136 ; AVX2-NEXT:    testb $8, %al
7137 ; AVX2-NEXT:    je .LBB16_8
7138 ; AVX2-NEXT:  .LBB16_7: # %cond.store5
7139 ; AVX2-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7140 ; AVX2-NEXT:    testb $16, %al
7141 ; AVX2-NEXT:    je .LBB16_10
7142 ; AVX2-NEXT:  .LBB16_9: # %cond.store7
7143 ; AVX2-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7144 ; AVX2-NEXT:    testb $32, %al
7145 ; AVX2-NEXT:    je .LBB16_12
7146 ; AVX2-NEXT:  .LBB16_11: # %cond.store9
7147 ; AVX2-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7148 ; AVX2-NEXT:    testb $64, %al
7149 ; AVX2-NEXT:    je .LBB16_14
7150 ; AVX2-NEXT:  .LBB16_13: # %cond.store11
7151 ; AVX2-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7152 ; AVX2-NEXT:    testb $-128, %al
7153 ; AVX2-NEXT:    je .LBB16_16
7154 ; AVX2-NEXT:  .LBB16_15: # %cond.store13
7155 ; AVX2-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7156 ; AVX2-NEXT:    testl $256, %eax # imm = 0x100
7157 ; AVX2-NEXT:    je .LBB16_18
7158 ; AVX2-NEXT:  .LBB16_17: # %cond.store15
7159 ; AVX2-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
7160 ; AVX2-NEXT:    testl $512, %eax # imm = 0x200
7161 ; AVX2-NEXT:    je .LBB16_20
7162 ; AVX2-NEXT:  .LBB16_19: # %cond.store17
7163 ; AVX2-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
7164 ; AVX2-NEXT:    testl $1024, %eax # imm = 0x400
7165 ; AVX2-NEXT:    je .LBB16_22
7166 ; AVX2-NEXT:  .LBB16_21: # %cond.store19
7167 ; AVX2-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
7168 ; AVX2-NEXT:    testl $2048, %eax # imm = 0x800
7169 ; AVX2-NEXT:    je .LBB16_24
7170 ; AVX2-NEXT:  .LBB16_23: # %cond.store21
7171 ; AVX2-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
7172 ; AVX2-NEXT:    testl $4096, %eax # imm = 0x1000
7173 ; AVX2-NEXT:    je .LBB16_26
7174 ; AVX2-NEXT:  .LBB16_25: # %cond.store23
7175 ; AVX2-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
7176 ; AVX2-NEXT:    testl $8192, %eax # imm = 0x2000
7177 ; AVX2-NEXT:    je .LBB16_28
7178 ; AVX2-NEXT:  .LBB16_27: # %cond.store25
7179 ; AVX2-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
7180 ; AVX2-NEXT:    testl $16384, %eax # imm = 0x4000
7181 ; AVX2-NEXT:    je .LBB16_30
7182 ; AVX2-NEXT:  .LBB16_29: # %cond.store27
7183 ; AVX2-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
7184 ; AVX2-NEXT:    testl $32768, %eax # imm = 0x8000
7185 ; AVX2-NEXT:    je .LBB16_32
7186 ; AVX2-NEXT:  .LBB16_31: # %cond.store29
7187 ; AVX2-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
7188 ; AVX2-NEXT:    vzeroupper
7189 ; AVX2-NEXT:    retq
7191 ; AVX512F-LABEL: truncstore_v16i16_v16i8:
7192 ; AVX512F:       # %bb.0:
7193 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7194 ; AVX512F-NEXT:    vpcmpeqb %xmm2, %xmm1, %xmm1
7195 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm2
7196 ; AVX512F-NEXT:    vpacksswb %xmm2, %xmm0, %xmm0
7197 ; AVX512F-NEXT:    vpmovmskb %xmm1, %eax
7198 ; AVX512F-NEXT:    xorl $65535, %eax # imm = 0xFFFF
7199 ; AVX512F-NEXT:    testb $1, %al
7200 ; AVX512F-NEXT:    jne .LBB16_1
7201 ; AVX512F-NEXT:  # %bb.2: # %else
7202 ; AVX512F-NEXT:    testb $2, %al
7203 ; AVX512F-NEXT:    jne .LBB16_3
7204 ; AVX512F-NEXT:  .LBB16_4: # %else2
7205 ; AVX512F-NEXT:    testb $4, %al
7206 ; AVX512F-NEXT:    jne .LBB16_5
7207 ; AVX512F-NEXT:  .LBB16_6: # %else4
7208 ; AVX512F-NEXT:    testb $8, %al
7209 ; AVX512F-NEXT:    jne .LBB16_7
7210 ; AVX512F-NEXT:  .LBB16_8: # %else6
7211 ; AVX512F-NEXT:    testb $16, %al
7212 ; AVX512F-NEXT:    jne .LBB16_9
7213 ; AVX512F-NEXT:  .LBB16_10: # %else8
7214 ; AVX512F-NEXT:    testb $32, %al
7215 ; AVX512F-NEXT:    jne .LBB16_11
7216 ; AVX512F-NEXT:  .LBB16_12: # %else10
7217 ; AVX512F-NEXT:    testb $64, %al
7218 ; AVX512F-NEXT:    jne .LBB16_13
7219 ; AVX512F-NEXT:  .LBB16_14: # %else12
7220 ; AVX512F-NEXT:    testb $-128, %al
7221 ; AVX512F-NEXT:    jne .LBB16_15
7222 ; AVX512F-NEXT:  .LBB16_16: # %else14
7223 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
7224 ; AVX512F-NEXT:    jne .LBB16_17
7225 ; AVX512F-NEXT:  .LBB16_18: # %else16
7226 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
7227 ; AVX512F-NEXT:    jne .LBB16_19
7228 ; AVX512F-NEXT:  .LBB16_20: # %else18
7229 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
7230 ; AVX512F-NEXT:    jne .LBB16_21
7231 ; AVX512F-NEXT:  .LBB16_22: # %else20
7232 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
7233 ; AVX512F-NEXT:    jne .LBB16_23
7234 ; AVX512F-NEXT:  .LBB16_24: # %else22
7235 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
7236 ; AVX512F-NEXT:    jne .LBB16_25
7237 ; AVX512F-NEXT:  .LBB16_26: # %else24
7238 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
7239 ; AVX512F-NEXT:    jne .LBB16_27
7240 ; AVX512F-NEXT:  .LBB16_28: # %else26
7241 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
7242 ; AVX512F-NEXT:    jne .LBB16_29
7243 ; AVX512F-NEXT:  .LBB16_30: # %else28
7244 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
7245 ; AVX512F-NEXT:    jne .LBB16_31
7246 ; AVX512F-NEXT:  .LBB16_32: # %else30
7247 ; AVX512F-NEXT:    vzeroupper
7248 ; AVX512F-NEXT:    retq
7249 ; AVX512F-NEXT:  .LBB16_1: # %cond.store
7250 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
7251 ; AVX512F-NEXT:    testb $2, %al
7252 ; AVX512F-NEXT:    je .LBB16_4
7253 ; AVX512F-NEXT:  .LBB16_3: # %cond.store1
7254 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7255 ; AVX512F-NEXT:    testb $4, %al
7256 ; AVX512F-NEXT:    je .LBB16_6
7257 ; AVX512F-NEXT:  .LBB16_5: # %cond.store3
7258 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7259 ; AVX512F-NEXT:    testb $8, %al
7260 ; AVX512F-NEXT:    je .LBB16_8
7261 ; AVX512F-NEXT:  .LBB16_7: # %cond.store5
7262 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7263 ; AVX512F-NEXT:    testb $16, %al
7264 ; AVX512F-NEXT:    je .LBB16_10
7265 ; AVX512F-NEXT:  .LBB16_9: # %cond.store7
7266 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7267 ; AVX512F-NEXT:    testb $32, %al
7268 ; AVX512F-NEXT:    je .LBB16_12
7269 ; AVX512F-NEXT:  .LBB16_11: # %cond.store9
7270 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7271 ; AVX512F-NEXT:    testb $64, %al
7272 ; AVX512F-NEXT:    je .LBB16_14
7273 ; AVX512F-NEXT:  .LBB16_13: # %cond.store11
7274 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7275 ; AVX512F-NEXT:    testb $-128, %al
7276 ; AVX512F-NEXT:    je .LBB16_16
7277 ; AVX512F-NEXT:  .LBB16_15: # %cond.store13
7278 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7279 ; AVX512F-NEXT:    testl $256, %eax # imm = 0x100
7280 ; AVX512F-NEXT:    je .LBB16_18
7281 ; AVX512F-NEXT:  .LBB16_17: # %cond.store15
7282 ; AVX512F-NEXT:    vpextrb $8, %xmm0, 8(%rdi)
7283 ; AVX512F-NEXT:    testl $512, %eax # imm = 0x200
7284 ; AVX512F-NEXT:    je .LBB16_20
7285 ; AVX512F-NEXT:  .LBB16_19: # %cond.store17
7286 ; AVX512F-NEXT:    vpextrb $9, %xmm0, 9(%rdi)
7287 ; AVX512F-NEXT:    testl $1024, %eax # imm = 0x400
7288 ; AVX512F-NEXT:    je .LBB16_22
7289 ; AVX512F-NEXT:  .LBB16_21: # %cond.store19
7290 ; AVX512F-NEXT:    vpextrb $10, %xmm0, 10(%rdi)
7291 ; AVX512F-NEXT:    testl $2048, %eax # imm = 0x800
7292 ; AVX512F-NEXT:    je .LBB16_24
7293 ; AVX512F-NEXT:  .LBB16_23: # %cond.store21
7294 ; AVX512F-NEXT:    vpextrb $11, %xmm0, 11(%rdi)
7295 ; AVX512F-NEXT:    testl $4096, %eax # imm = 0x1000
7296 ; AVX512F-NEXT:    je .LBB16_26
7297 ; AVX512F-NEXT:  .LBB16_25: # %cond.store23
7298 ; AVX512F-NEXT:    vpextrb $12, %xmm0, 12(%rdi)
7299 ; AVX512F-NEXT:    testl $8192, %eax # imm = 0x2000
7300 ; AVX512F-NEXT:    je .LBB16_28
7301 ; AVX512F-NEXT:  .LBB16_27: # %cond.store25
7302 ; AVX512F-NEXT:    vpextrb $13, %xmm0, 13(%rdi)
7303 ; AVX512F-NEXT:    testl $16384, %eax # imm = 0x4000
7304 ; AVX512F-NEXT:    je .LBB16_30
7305 ; AVX512F-NEXT:  .LBB16_29: # %cond.store27
7306 ; AVX512F-NEXT:    vpextrb $14, %xmm0, 14(%rdi)
7307 ; AVX512F-NEXT:    testl $32768, %eax # imm = 0x8000
7308 ; AVX512F-NEXT:    je .LBB16_32
7309 ; AVX512F-NEXT:  .LBB16_31: # %cond.store29
7310 ; AVX512F-NEXT:    vpextrb $15, %xmm0, 15(%rdi)
7311 ; AVX512F-NEXT:    vzeroupper
7312 ; AVX512F-NEXT:    retq
7314 ; AVX512BW-LABEL: truncstore_v16i16_v16i8:
7315 ; AVX512BW:       # %bb.0:
7316 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
7317 ; AVX512BW-NEXT:    vptestmb %zmm1, %zmm1, %k0
7318 ; AVX512BW-NEXT:    kmovw %k0, %k1
7319 ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
7320 ; AVX512BW-NEXT:    vpmaxsw {{.*}}(%rip), %ymm0, %ymm0
7321 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
7322 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
7323 ; AVX512BW-NEXT:    vzeroupper
7324 ; AVX512BW-NEXT:    retq
7326 ; AVX512BWVL-LABEL: truncstore_v16i16_v16i8:
7327 ; AVX512BWVL:       # %bb.0:
7328 ; AVX512BWVL-NEXT:    vptestmb %xmm1, %xmm1, %k1
7329 ; AVX512BWVL-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
7330 ; AVX512BWVL-NEXT:    vpmaxsw {{.*}}(%rip), %ymm0, %ymm0
7331 ; AVX512BWVL-NEXT:    vpmovwb %ymm0, (%rdi) {%k1}
7332 ; AVX512BWVL-NEXT:    vzeroupper
7333 ; AVX512BWVL-NEXT:    retq
7334   %a = icmp ne <16 x i8> %mask, zeroinitializer
7335   %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>
7336   %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>
7337   %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>
7338   %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>
7339   %f = trunc <16 x i16> %e to <16 x i8>
7340   call void @llvm.masked.store.v16i8.p0v16i8(<16 x i8> %f, <16 x i8>* %p, i32 1, <16 x i1> %a)
7341   ret void
7344 define void @truncstore_v8i16_v8i8(<8 x i16> %x, <8 x i8>* %p, <8 x i16> %mask) {
7345 ; SSE2-LABEL: truncstore_v8i16_v8i8:
7346 ; SSE2:       # %bb.0:
7347 ; SSE2-NEXT:    pxor %xmm2, %xmm2
7348 ; SSE2-NEXT:    packsswb %xmm0, %xmm0
7349 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm2
7350 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
7351 ; SSE2-NEXT:    pxor %xmm2, %xmm1
7352 ; SSE2-NEXT:    packsswb %xmm0, %xmm1
7353 ; SSE2-NEXT:    pmovmskb %xmm1, %eax
7354 ; SSE2-NEXT:    testb $1, %al
7355 ; SSE2-NEXT:    movd %xmm0, %ecx
7356 ; SSE2-NEXT:    jne .LBB17_1
7357 ; SSE2-NEXT:  # %bb.2: # %else
7358 ; SSE2-NEXT:    testb $2, %al
7359 ; SSE2-NEXT:    jne .LBB17_3
7360 ; SSE2-NEXT:  .LBB17_4: # %else2
7361 ; SSE2-NEXT:    testb $4, %al
7362 ; SSE2-NEXT:    jne .LBB17_5
7363 ; SSE2-NEXT:  .LBB17_6: # %else4
7364 ; SSE2-NEXT:    testb $8, %al
7365 ; SSE2-NEXT:    je .LBB17_8
7366 ; SSE2-NEXT:  .LBB17_7: # %cond.store5
7367 ; SSE2-NEXT:    shrl $24, %ecx
7368 ; SSE2-NEXT:    movb %cl, 3(%rdi)
7369 ; SSE2-NEXT:  .LBB17_8: # %else6
7370 ; SSE2-NEXT:    testb $16, %al
7371 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
7372 ; SSE2-NEXT:    je .LBB17_10
7373 ; SSE2-NEXT:  # %bb.9: # %cond.store7
7374 ; SSE2-NEXT:    movb %cl, 4(%rdi)
7375 ; SSE2-NEXT:  .LBB17_10: # %else8
7376 ; SSE2-NEXT:    testb $32, %al
7377 ; SSE2-NEXT:    je .LBB17_12
7378 ; SSE2-NEXT:  # %bb.11: # %cond.store9
7379 ; SSE2-NEXT:    movb %ch, 5(%rdi)
7380 ; SSE2-NEXT:  .LBB17_12: # %else10
7381 ; SSE2-NEXT:    testb $64, %al
7382 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
7383 ; SSE2-NEXT:    jne .LBB17_13
7384 ; SSE2-NEXT:  # %bb.14: # %else12
7385 ; SSE2-NEXT:    testb $-128, %al
7386 ; SSE2-NEXT:    jne .LBB17_15
7387 ; SSE2-NEXT:  .LBB17_16: # %else14
7388 ; SSE2-NEXT:    retq
7389 ; SSE2-NEXT:  .LBB17_1: # %cond.store
7390 ; SSE2-NEXT:    movb %cl, (%rdi)
7391 ; SSE2-NEXT:    testb $2, %al
7392 ; SSE2-NEXT:    je .LBB17_4
7393 ; SSE2-NEXT:  .LBB17_3: # %cond.store1
7394 ; SSE2-NEXT:    movb %ch, 1(%rdi)
7395 ; SSE2-NEXT:    testb $4, %al
7396 ; SSE2-NEXT:    je .LBB17_6
7397 ; SSE2-NEXT:  .LBB17_5: # %cond.store3
7398 ; SSE2-NEXT:    movl %ecx, %edx
7399 ; SSE2-NEXT:    shrl $16, %edx
7400 ; SSE2-NEXT:    movb %dl, 2(%rdi)
7401 ; SSE2-NEXT:    testb $8, %al
7402 ; SSE2-NEXT:    jne .LBB17_7
7403 ; SSE2-NEXT:    jmp .LBB17_8
7404 ; SSE2-NEXT:  .LBB17_13: # %cond.store11
7405 ; SSE2-NEXT:    movb %cl, 6(%rdi)
7406 ; SSE2-NEXT:    testb $-128, %al
7407 ; SSE2-NEXT:    je .LBB17_16
7408 ; SSE2-NEXT:  .LBB17_15: # %cond.store13
7409 ; SSE2-NEXT:    movb %ch, 7(%rdi)
7410 ; SSE2-NEXT:    retq
7412 ; SSE4-LABEL: truncstore_v8i16_v8i8:
7413 ; SSE4:       # %bb.0:
7414 ; SSE4-NEXT:    pxor %xmm2, %xmm2
7415 ; SSE4-NEXT:    packsswb %xmm0, %xmm0
7416 ; SSE4-NEXT:    pcmpeqw %xmm1, %xmm2
7417 ; SSE4-NEXT:    pcmpeqd %xmm1, %xmm1
7418 ; SSE4-NEXT:    pxor %xmm2, %xmm1
7419 ; SSE4-NEXT:    packsswb %xmm0, %xmm1
7420 ; SSE4-NEXT:    pmovmskb %xmm1, %eax
7421 ; SSE4-NEXT:    testb $1, %al
7422 ; SSE4-NEXT:    jne .LBB17_1
7423 ; SSE4-NEXT:  # %bb.2: # %else
7424 ; SSE4-NEXT:    testb $2, %al
7425 ; SSE4-NEXT:    jne .LBB17_3
7426 ; SSE4-NEXT:  .LBB17_4: # %else2
7427 ; SSE4-NEXT:    testb $4, %al
7428 ; SSE4-NEXT:    jne .LBB17_5
7429 ; SSE4-NEXT:  .LBB17_6: # %else4
7430 ; SSE4-NEXT:    testb $8, %al
7431 ; SSE4-NEXT:    jne .LBB17_7
7432 ; SSE4-NEXT:  .LBB17_8: # %else6
7433 ; SSE4-NEXT:    testb $16, %al
7434 ; SSE4-NEXT:    jne .LBB17_9
7435 ; SSE4-NEXT:  .LBB17_10: # %else8
7436 ; SSE4-NEXT:    testb $32, %al
7437 ; SSE4-NEXT:    jne .LBB17_11
7438 ; SSE4-NEXT:  .LBB17_12: # %else10
7439 ; SSE4-NEXT:    testb $64, %al
7440 ; SSE4-NEXT:    jne .LBB17_13
7441 ; SSE4-NEXT:  .LBB17_14: # %else12
7442 ; SSE4-NEXT:    testb $-128, %al
7443 ; SSE4-NEXT:    jne .LBB17_15
7444 ; SSE4-NEXT:  .LBB17_16: # %else14
7445 ; SSE4-NEXT:    retq
7446 ; SSE4-NEXT:  .LBB17_1: # %cond.store
7447 ; SSE4-NEXT:    pextrb $0, %xmm0, (%rdi)
7448 ; SSE4-NEXT:    testb $2, %al
7449 ; SSE4-NEXT:    je .LBB17_4
7450 ; SSE4-NEXT:  .LBB17_3: # %cond.store1
7451 ; SSE4-NEXT:    pextrb $1, %xmm0, 1(%rdi)
7452 ; SSE4-NEXT:    testb $4, %al
7453 ; SSE4-NEXT:    je .LBB17_6
7454 ; SSE4-NEXT:  .LBB17_5: # %cond.store3
7455 ; SSE4-NEXT:    pextrb $2, %xmm0, 2(%rdi)
7456 ; SSE4-NEXT:    testb $8, %al
7457 ; SSE4-NEXT:    je .LBB17_8
7458 ; SSE4-NEXT:  .LBB17_7: # %cond.store5
7459 ; SSE4-NEXT:    pextrb $3, %xmm0, 3(%rdi)
7460 ; SSE4-NEXT:    testb $16, %al
7461 ; SSE4-NEXT:    je .LBB17_10
7462 ; SSE4-NEXT:  .LBB17_9: # %cond.store7
7463 ; SSE4-NEXT:    pextrb $4, %xmm0, 4(%rdi)
7464 ; SSE4-NEXT:    testb $32, %al
7465 ; SSE4-NEXT:    je .LBB17_12
7466 ; SSE4-NEXT:  .LBB17_11: # %cond.store9
7467 ; SSE4-NEXT:    pextrb $5, %xmm0, 5(%rdi)
7468 ; SSE4-NEXT:    testb $64, %al
7469 ; SSE4-NEXT:    je .LBB17_14
7470 ; SSE4-NEXT:  .LBB17_13: # %cond.store11
7471 ; SSE4-NEXT:    pextrb $6, %xmm0, 6(%rdi)
7472 ; SSE4-NEXT:    testb $-128, %al
7473 ; SSE4-NEXT:    je .LBB17_16
7474 ; SSE4-NEXT:  .LBB17_15: # %cond.store13
7475 ; SSE4-NEXT:    pextrb $7, %xmm0, 7(%rdi)
7476 ; SSE4-NEXT:    retq
7478 ; AVX-LABEL: truncstore_v8i16_v8i8:
7479 ; AVX:       # %bb.0:
7480 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7481 ; AVX-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
7482 ; AVX-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
7483 ; AVX-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
7484 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
7485 ; AVX-NEXT:    vpacksswb %xmm0, %xmm1, %xmm1
7486 ; AVX-NEXT:    vpmovmskb %xmm1, %eax
7487 ; AVX-NEXT:    testb $1, %al
7488 ; AVX-NEXT:    jne .LBB17_1
7489 ; AVX-NEXT:  # %bb.2: # %else
7490 ; AVX-NEXT:    testb $2, %al
7491 ; AVX-NEXT:    jne .LBB17_3
7492 ; AVX-NEXT:  .LBB17_4: # %else2
7493 ; AVX-NEXT:    testb $4, %al
7494 ; AVX-NEXT:    jne .LBB17_5
7495 ; AVX-NEXT:  .LBB17_6: # %else4
7496 ; AVX-NEXT:    testb $8, %al
7497 ; AVX-NEXT:    jne .LBB17_7
7498 ; AVX-NEXT:  .LBB17_8: # %else6
7499 ; AVX-NEXT:    testb $16, %al
7500 ; AVX-NEXT:    jne .LBB17_9
7501 ; AVX-NEXT:  .LBB17_10: # %else8
7502 ; AVX-NEXT:    testb $32, %al
7503 ; AVX-NEXT:    jne .LBB17_11
7504 ; AVX-NEXT:  .LBB17_12: # %else10
7505 ; AVX-NEXT:    testb $64, %al
7506 ; AVX-NEXT:    jne .LBB17_13
7507 ; AVX-NEXT:  .LBB17_14: # %else12
7508 ; AVX-NEXT:    testb $-128, %al
7509 ; AVX-NEXT:    jne .LBB17_15
7510 ; AVX-NEXT:  .LBB17_16: # %else14
7511 ; AVX-NEXT:    retq
7512 ; AVX-NEXT:  .LBB17_1: # %cond.store
7513 ; AVX-NEXT:    vpextrb $0, %xmm0, (%rdi)
7514 ; AVX-NEXT:    testb $2, %al
7515 ; AVX-NEXT:    je .LBB17_4
7516 ; AVX-NEXT:  .LBB17_3: # %cond.store1
7517 ; AVX-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7518 ; AVX-NEXT:    testb $4, %al
7519 ; AVX-NEXT:    je .LBB17_6
7520 ; AVX-NEXT:  .LBB17_5: # %cond.store3
7521 ; AVX-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7522 ; AVX-NEXT:    testb $8, %al
7523 ; AVX-NEXT:    je .LBB17_8
7524 ; AVX-NEXT:  .LBB17_7: # %cond.store5
7525 ; AVX-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7526 ; AVX-NEXT:    testb $16, %al
7527 ; AVX-NEXT:    je .LBB17_10
7528 ; AVX-NEXT:  .LBB17_9: # %cond.store7
7529 ; AVX-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7530 ; AVX-NEXT:    testb $32, %al
7531 ; AVX-NEXT:    je .LBB17_12
7532 ; AVX-NEXT:  .LBB17_11: # %cond.store9
7533 ; AVX-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7534 ; AVX-NEXT:    testb $64, %al
7535 ; AVX-NEXT:    je .LBB17_14
7536 ; AVX-NEXT:  .LBB17_13: # %cond.store11
7537 ; AVX-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7538 ; AVX-NEXT:    testb $-128, %al
7539 ; AVX-NEXT:    je .LBB17_16
7540 ; AVX-NEXT:  .LBB17_15: # %cond.store13
7541 ; AVX-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7542 ; AVX-NEXT:    retq
7544 ; AVX512F-LABEL: truncstore_v8i16_v8i8:
7545 ; AVX512F:       # %bb.0:
7546 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
7547 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
7548 ; AVX512F-NEXT:    vpternlogq $15, %zmm1, %zmm1, %zmm1
7549 ; AVX512F-NEXT:    vpmovsxwq %xmm1, %zmm1
7550 ; AVX512F-NEXT:    vptestmq %zmm1, %zmm1, %k0
7551 ; AVX512F-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
7552 ; AVX512F-NEXT:    kmovw %k0, %eax
7553 ; AVX512F-NEXT:    testb $1, %al
7554 ; AVX512F-NEXT:    jne .LBB17_1
7555 ; AVX512F-NEXT:  # %bb.2: # %else
7556 ; AVX512F-NEXT:    testb $2, %al
7557 ; AVX512F-NEXT:    jne .LBB17_3
7558 ; AVX512F-NEXT:  .LBB17_4: # %else2
7559 ; AVX512F-NEXT:    testb $4, %al
7560 ; AVX512F-NEXT:    jne .LBB17_5
7561 ; AVX512F-NEXT:  .LBB17_6: # %else4
7562 ; AVX512F-NEXT:    testb $8, %al
7563 ; AVX512F-NEXT:    jne .LBB17_7
7564 ; AVX512F-NEXT:  .LBB17_8: # %else6
7565 ; AVX512F-NEXT:    testb $16, %al
7566 ; AVX512F-NEXT:    jne .LBB17_9
7567 ; AVX512F-NEXT:  .LBB17_10: # %else8
7568 ; AVX512F-NEXT:    testb $32, %al
7569 ; AVX512F-NEXT:    jne .LBB17_11
7570 ; AVX512F-NEXT:  .LBB17_12: # %else10
7571 ; AVX512F-NEXT:    testb $64, %al
7572 ; AVX512F-NEXT:    jne .LBB17_13
7573 ; AVX512F-NEXT:  .LBB17_14: # %else12
7574 ; AVX512F-NEXT:    testb $-128, %al
7575 ; AVX512F-NEXT:    jne .LBB17_15
7576 ; AVX512F-NEXT:  .LBB17_16: # %else14
7577 ; AVX512F-NEXT:    vzeroupper
7578 ; AVX512F-NEXT:    retq
7579 ; AVX512F-NEXT:  .LBB17_1: # %cond.store
7580 ; AVX512F-NEXT:    vpextrb $0, %xmm0, (%rdi)
7581 ; AVX512F-NEXT:    testb $2, %al
7582 ; AVX512F-NEXT:    je .LBB17_4
7583 ; AVX512F-NEXT:  .LBB17_3: # %cond.store1
7584 ; AVX512F-NEXT:    vpextrb $1, %xmm0, 1(%rdi)
7585 ; AVX512F-NEXT:    testb $4, %al
7586 ; AVX512F-NEXT:    je .LBB17_6
7587 ; AVX512F-NEXT:  .LBB17_5: # %cond.store3
7588 ; AVX512F-NEXT:    vpextrb $2, %xmm0, 2(%rdi)
7589 ; AVX512F-NEXT:    testb $8, %al
7590 ; AVX512F-NEXT:    je .LBB17_8
7591 ; AVX512F-NEXT:  .LBB17_7: # %cond.store5
7592 ; AVX512F-NEXT:    vpextrb $3, %xmm0, 3(%rdi)
7593 ; AVX512F-NEXT:    testb $16, %al
7594 ; AVX512F-NEXT:    je .LBB17_10
7595 ; AVX512F-NEXT:  .LBB17_9: # %cond.store7
7596 ; AVX512F-NEXT:    vpextrb $4, %xmm0, 4(%rdi)
7597 ; AVX512F-NEXT:    testb $32, %al
7598 ; AVX512F-NEXT:    je .LBB17_12
7599 ; AVX512F-NEXT:  .LBB17_11: # %cond.store9
7600 ; AVX512F-NEXT:    vpextrb $5, %xmm0, 5(%rdi)
7601 ; AVX512F-NEXT:    testb $64, %al
7602 ; AVX512F-NEXT:    je .LBB17_14
7603 ; AVX512F-NEXT:  .LBB17_13: # %cond.store11
7604 ; AVX512F-NEXT:    vpextrb $6, %xmm0, 6(%rdi)
7605 ; AVX512F-NEXT:    testb $-128, %al
7606 ; AVX512F-NEXT:    je .LBB17_16
7607 ; AVX512F-NEXT:  .LBB17_15: # %cond.store13
7608 ; AVX512F-NEXT:    vpextrb $7, %xmm0, 7(%rdi)
7609 ; AVX512F-NEXT:    vzeroupper
7610 ; AVX512F-NEXT:    retq
7612 ; AVX512BW-LABEL: truncstore_v8i16_v8i8:
7613 ; AVX512BW:       # %bb.0:
7614 ; AVX512BW-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
7615 ; AVX512BW-NEXT:    vptestmw %zmm1, %zmm1, %k0
7616 ; AVX512BW-NEXT:    kshiftlq $56, %k0, %k0
7617 ; AVX512BW-NEXT:    kshiftrq $56, %k0, %k1
7618 ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %xmm0, %xmm0
7619 ; AVX512BW-NEXT:    vpmaxsw {{.*}}(%rip), %xmm0, %xmm0
7620 ; AVX512BW-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0
7621 ; AVX512BW-NEXT:    vmovdqu8 %zmm0, (%rdi) {%k1}
7622 ; AVX512BW-NEXT:    vzeroupper
7623 ; AVX512BW-NEXT:    retq
7625 ; AVX512BWVL-LABEL: truncstore_v8i16_v8i8:
7626 ; AVX512BWVL:       # %bb.0:
7627 ; AVX512BWVL-NEXT:    vptestmw %xmm1, %xmm1, %k1
7628 ; AVX512BWVL-NEXT:    vpminsw {{.*}}(%rip), %xmm0, %xmm0
7629 ; AVX512BWVL-NEXT:    vpmaxsw {{.*}}(%rip), %xmm0, %xmm0
7630 ; AVX512BWVL-NEXT:    vpmovwb %xmm0, (%rdi) {%k1}
7631 ; AVX512BWVL-NEXT:    retq
7632   %a = icmp ne <8 x i16> %mask, zeroinitializer
7633   %b = icmp slt <8 x i16> %x, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
7634   %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>
7635   %d = icmp sgt <8 x i16> %c, <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128>
7636   %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>
7637   %f = trunc <8 x i16> %e to <8 x i8>
7638   call void @llvm.masked.store.v8i8.p0v8i8(<8 x i8> %f, <8 x i8>* %p, i32 1, <8 x i1> %a)
7639   ret void
7642 declare void @llvm.masked.store.v8i32.p0v8i32(<8 x i32>, <8 x i32>*, i32, <8 x i1>)
7643 declare void @llvm.masked.store.v8i16.p0v8i16(<8 x i16>, <8 x i16>*, i32, <8 x i1>)
7644 declare void @llvm.masked.store.v8i8.p0v8i8(<8 x i8>, <8 x i8>*, i32, <8 x i1>)
7645 declare void @llvm.masked.store.v4i32.p0v4i32(<4 x i32>, <4 x i32>*, i32, <4 x i1>)
7646 declare void @llvm.masked.store.v4i16.p0v4i16(<4 x i16>, <4 x i16>*, i32, <4 x i1>)
7647 declare void @llvm.masked.store.v4i8.p0v4i8(<4 x i8>, <4 x i8>*, i32, <4 x i1>)
7648 declare void @llvm.masked.store.v2i32.p0v2i32(<2 x i32>, <2 x i32>*, i32, <2 x i1>)
7649 declare void @llvm.masked.store.v2i16.p0v2i16(<2 x i16>, <2 x i16>*, i32, <2 x i1>)
7650 declare void @llvm.masked.store.v2i8.p0v2i8(<2 x i8>, <2 x i8>*, i32, <2 x i1>)
7651 declare void @llvm.masked.store.v16i16.p0v16i16(<16 x i16>, <16 x i16>*, i32, <16 x i1>)
7652 declare void @llvm.masked.store.v16i8.p0v16i8(<16 x i8>, <16 x i8>*, i32, <16 x i1>)
7653 declare void @llvm.masked.store.v32i8.p0v32i8(<32 x i8>, <32 x i8>*, i32, <32 x i1>)