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