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=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL
14 ; PACKUS saturation truncation to vXi32
17 define <4 x i32> @trunc_packus_v4i64_v4i32(<4 x i64> %a0) {
18 ; SSE2-LABEL: trunc_packus_v4i64_v4i32:
20 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
21 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
22 ; SSE2-NEXT: movdqa %xmm0, %xmm3
23 ; SSE2-NEXT: pxor %xmm2, %xmm3
24 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
25 ; SSE2-NEXT: movdqa %xmm5, %xmm6
26 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
27 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
28 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm3
29 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
30 ; SSE2-NEXT: pand %xmm7, %xmm4
31 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
32 ; SSE2-NEXT: por %xmm4, %xmm3
33 ; SSE2-NEXT: pand %xmm3, %xmm0
34 ; SSE2-NEXT: pandn %xmm8, %xmm3
35 ; SSE2-NEXT: por %xmm0, %xmm3
36 ; SSE2-NEXT: movdqa %xmm1, %xmm0
37 ; SSE2-NEXT: pxor %xmm2, %xmm0
38 ; SSE2-NEXT: movdqa %xmm5, %xmm4
39 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
40 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
41 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm0
42 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
43 ; SSE2-NEXT: pand %xmm6, %xmm0
44 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
45 ; SSE2-NEXT: por %xmm0, %xmm4
46 ; SSE2-NEXT: pand %xmm4, %xmm1
47 ; SSE2-NEXT: pandn %xmm8, %xmm4
48 ; SSE2-NEXT: por %xmm1, %xmm4
49 ; SSE2-NEXT: movdqa %xmm4, %xmm0
50 ; SSE2-NEXT: pxor %xmm2, %xmm0
51 ; SSE2-NEXT: movdqa %xmm0, %xmm1
52 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm1
53 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
54 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm0
55 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
56 ; SSE2-NEXT: pand %xmm5, %xmm0
57 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
58 ; SSE2-NEXT: por %xmm0, %xmm1
59 ; SSE2-NEXT: pand %xmm4, %xmm1
60 ; SSE2-NEXT: movdqa %xmm3, %xmm0
61 ; SSE2-NEXT: pxor %xmm2, %xmm0
62 ; SSE2-NEXT: movdqa %xmm0, %xmm4
63 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
64 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
65 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm0
66 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
67 ; SSE2-NEXT: pand %xmm5, %xmm2
68 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
69 ; SSE2-NEXT: por %xmm2, %xmm0
70 ; SSE2-NEXT: pand %xmm3, %xmm0
71 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
74 ; SSSE3-LABEL: trunc_packus_v4i64_v4i32:
76 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
77 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
78 ; SSSE3-NEXT: movdqa %xmm0, %xmm3
79 ; SSSE3-NEXT: pxor %xmm2, %xmm3
80 ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
81 ; SSSE3-NEXT: movdqa %xmm5, %xmm6
82 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6
83 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
84 ; SSSE3-NEXT: pcmpeqd %xmm5, %xmm3
85 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
86 ; SSSE3-NEXT: pand %xmm7, %xmm4
87 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
88 ; SSSE3-NEXT: por %xmm4, %xmm3
89 ; SSSE3-NEXT: pand %xmm3, %xmm0
90 ; SSSE3-NEXT: pandn %xmm8, %xmm3
91 ; SSSE3-NEXT: por %xmm0, %xmm3
92 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
93 ; SSSE3-NEXT: pxor %xmm2, %xmm0
94 ; SSSE3-NEXT: movdqa %xmm5, %xmm4
95 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4
96 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
97 ; SSSE3-NEXT: pcmpeqd %xmm5, %xmm0
98 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
99 ; SSSE3-NEXT: pand %xmm6, %xmm0
100 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
101 ; SSSE3-NEXT: por %xmm0, %xmm4
102 ; SSSE3-NEXT: pand %xmm4, %xmm1
103 ; SSSE3-NEXT: pandn %xmm8, %xmm4
104 ; SSSE3-NEXT: por %xmm1, %xmm4
105 ; SSSE3-NEXT: movdqa %xmm4, %xmm0
106 ; SSSE3-NEXT: pxor %xmm2, %xmm0
107 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
108 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm1
109 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
110 ; SSSE3-NEXT: pcmpeqd %xmm2, %xmm0
111 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
112 ; SSSE3-NEXT: pand %xmm5, %xmm0
113 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
114 ; SSSE3-NEXT: por %xmm0, %xmm1
115 ; SSSE3-NEXT: pand %xmm4, %xmm1
116 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
117 ; SSSE3-NEXT: pxor %xmm2, %xmm0
118 ; SSSE3-NEXT: movdqa %xmm0, %xmm4
119 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4
120 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
121 ; SSSE3-NEXT: pcmpeqd %xmm2, %xmm0
122 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
123 ; SSSE3-NEXT: pand %xmm5, %xmm2
124 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
125 ; SSSE3-NEXT: por %xmm2, %xmm0
126 ; SSSE3-NEXT: pand %xmm3, %xmm0
127 ; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
130 ; SSE41-LABEL: trunc_packus_v4i64_v4i32:
132 ; SSE41-NEXT: movdqa %xmm0, %xmm2
133 ; SSE41-NEXT: movapd {{.*#+}} xmm4 = [4294967295,4294967295]
134 ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
135 ; SSE41-NEXT: pxor %xmm3, %xmm0
136 ; SSE41-NEXT: movdqa {{.*#+}} xmm6 = [2147483647,2147483647]
137 ; SSE41-NEXT: movdqa %xmm6, %xmm5
138 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm5
139 ; SSE41-NEXT: movdqa %xmm6, %xmm7
140 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm7
141 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]
142 ; SSE41-NEXT: pand %xmm5, %xmm0
143 ; SSE41-NEXT: por %xmm7, %xmm0
144 ; SSE41-NEXT: movapd %xmm4, %xmm5
145 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5
146 ; SSE41-NEXT: movdqa %xmm1, %xmm0
147 ; SSE41-NEXT: pxor %xmm3, %xmm0
148 ; SSE41-NEXT: movdqa %xmm6, %xmm2
149 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
150 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
151 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
152 ; SSE41-NEXT: pand %xmm2, %xmm0
153 ; SSE41-NEXT: por %xmm6, %xmm0
154 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm4
155 ; SSE41-NEXT: xorpd %xmm1, %xmm1
156 ; SSE41-NEXT: movapd %xmm4, %xmm2
157 ; SSE41-NEXT: xorpd %xmm3, %xmm2
158 ; SSE41-NEXT: movapd %xmm2, %xmm6
159 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm6
160 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm2
161 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
162 ; SSE41-NEXT: pand %xmm6, %xmm0
163 ; SSE41-NEXT: por %xmm2, %xmm0
164 ; SSE41-NEXT: pxor %xmm2, %xmm2
165 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2
166 ; SSE41-NEXT: movapd %xmm5, %xmm4
167 ; SSE41-NEXT: xorpd %xmm3, %xmm4
168 ; SSE41-NEXT: movapd %xmm4, %xmm6
169 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm6
170 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4
171 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
172 ; SSE41-NEXT: pand %xmm6, %xmm0
173 ; SSE41-NEXT: por %xmm4, %xmm0
174 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm1
175 ; SSE41-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
176 ; SSE41-NEXT: movaps %xmm1, %xmm0
179 ; AVX1-LABEL: trunc_packus_v4i64_v4i32:
181 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
182 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [4294967295,4294967295]
183 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm3
184 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm4
185 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm2, %xmm0
186 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
187 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5
188 ; AVX1-NEXT: vblendvpd %xmm3, %xmm1, %xmm2, %xmm1
189 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm2
190 ; AVX1-NEXT: vpand %xmm1, %xmm2, %xmm1
191 ; AVX1-NEXT: vpand %xmm0, %xmm5, %xmm0
192 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
193 ; AVX1-NEXT: vzeroupper
196 ; AVX2-SLOW-LABEL: trunc_packus_v4i64_v4i32:
197 ; AVX2-SLOW: # %bb.0:
198 ; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
199 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
200 ; AVX2-SLOW-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
201 ; AVX2-SLOW-NEXT: vpxor %xmm1, %xmm1, %xmm1
202 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm1
203 ; AVX2-SLOW-NEXT: vpand %ymm0, %ymm1, %ymm0
204 ; AVX2-SLOW-NEXT: vextracti128 $1, %ymm0, %xmm1
205 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
206 ; AVX2-SLOW-NEXT: vzeroupper
207 ; AVX2-SLOW-NEXT: retq
209 ; AVX2-FAST-LABEL: trunc_packus_v4i64_v4i32:
210 ; AVX2-FAST: # %bb.0:
211 ; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
212 ; AVX2-FAST-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
213 ; AVX2-FAST-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
214 ; AVX2-FAST-NEXT: vpxor %xmm1, %xmm1, %xmm1
215 ; AVX2-FAST-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm1
216 ; AVX2-FAST-NEXT: vpand %ymm0, %ymm1, %ymm0
217 ; AVX2-FAST-NEXT: vmovdqa {{.*#+}} ymm1 = [0,2,4,6,4,6,6,7]
218 ; AVX2-FAST-NEXT: vpermd %ymm0, %ymm1, %ymm0
219 ; AVX2-FAST-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
220 ; AVX2-FAST-NEXT: vzeroupper
221 ; AVX2-FAST-NEXT: retq
223 ; AVX512F-LABEL: trunc_packus_v4i64_v4i32:
225 ; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
226 ; AVX512F-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
227 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
228 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
229 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
230 ; AVX512F-NEXT: vpmovqd %zmm0, %ymm0
231 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
232 ; AVX512F-NEXT: vzeroupper
235 ; AVX512VL-LABEL: trunc_packus_v4i64_v4i32:
237 ; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1
238 ; AVX512VL-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
239 ; AVX512VL-NEXT: vpmovusqd %ymm0, %xmm0
240 ; AVX512VL-NEXT: vzeroupper
241 ; AVX512VL-NEXT: retq
243 ; AVX512BW-LABEL: trunc_packus_v4i64_v4i32:
245 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
246 ; AVX512BW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
247 ; AVX512BW-NEXT: vpminsq %zmm1, %zmm0, %zmm0
248 ; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1
249 ; AVX512BW-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
250 ; AVX512BW-NEXT: vpmovqd %zmm0, %ymm0
251 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
252 ; AVX512BW-NEXT: vzeroupper
253 ; AVX512BW-NEXT: retq
255 ; AVX512BWVL-LABEL: trunc_packus_v4i64_v4i32:
256 ; AVX512BWVL: # %bb.0:
257 ; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1
258 ; AVX512BWVL-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
259 ; AVX512BWVL-NEXT: vpmovusqd %ymm0, %xmm0
260 ; AVX512BWVL-NEXT: vzeroupper
261 ; AVX512BWVL-NEXT: retq
262 %1 = icmp slt <4 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
263 %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
264 %3 = icmp sgt <4 x i64> %2, zeroinitializer
265 %4 = select <4 x i1> %3, <4 x i64> %2, <4 x i64> zeroinitializer
266 %5 = trunc <4 x i64> %4 to <4 x i32>
271 define <8 x i32> @trunc_packus_v8i64_v8i32(<8 x i64> %a0) {
272 ; SSE2-LABEL: trunc_packus_v8i64_v8i32:
274 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
275 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
276 ; SSE2-NEXT: movdqa %xmm0, %xmm5
277 ; SSE2-NEXT: pxor %xmm10, %xmm5
278 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483647,2147483647]
279 ; SSE2-NEXT: movdqa %xmm9, %xmm6
280 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
281 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
282 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5
283 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
284 ; SSE2-NEXT: pand %xmm7, %xmm4
285 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
286 ; SSE2-NEXT: por %xmm4, %xmm5
287 ; SSE2-NEXT: pand %xmm5, %xmm0
288 ; SSE2-NEXT: pandn %xmm8, %xmm5
289 ; SSE2-NEXT: por %xmm0, %xmm5
290 ; SSE2-NEXT: movdqa %xmm1, %xmm0
291 ; SSE2-NEXT: pxor %xmm10, %xmm0
292 ; SSE2-NEXT: movdqa %xmm9, %xmm4
293 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
294 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
295 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
296 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
297 ; SSE2-NEXT: pand %xmm6, %xmm7
298 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
299 ; SSE2-NEXT: por %xmm7, %xmm0
300 ; SSE2-NEXT: pand %xmm0, %xmm1
301 ; SSE2-NEXT: pandn %xmm8, %xmm0
302 ; SSE2-NEXT: por %xmm1, %xmm0
303 ; SSE2-NEXT: movdqa %xmm2, %xmm1
304 ; SSE2-NEXT: pxor %xmm10, %xmm1
305 ; SSE2-NEXT: movdqa %xmm9, %xmm4
306 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
307 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
308 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
309 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
310 ; SSE2-NEXT: pand %xmm6, %xmm1
311 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
312 ; SSE2-NEXT: por %xmm1, %xmm6
313 ; SSE2-NEXT: pand %xmm6, %xmm2
314 ; SSE2-NEXT: pandn %xmm8, %xmm6
315 ; SSE2-NEXT: por %xmm2, %xmm6
316 ; SSE2-NEXT: movdqa %xmm3, %xmm1
317 ; SSE2-NEXT: pxor %xmm10, %xmm1
318 ; SSE2-NEXT: movdqa %xmm9, %xmm2
319 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
320 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
321 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
322 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
323 ; SSE2-NEXT: pand %xmm4, %xmm1
324 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
325 ; SSE2-NEXT: por %xmm1, %xmm2
326 ; SSE2-NEXT: pand %xmm2, %xmm3
327 ; SSE2-NEXT: pandn %xmm8, %xmm2
328 ; SSE2-NEXT: por %xmm3, %xmm2
329 ; SSE2-NEXT: movdqa %xmm2, %xmm1
330 ; SSE2-NEXT: pxor %xmm10, %xmm1
331 ; SSE2-NEXT: movdqa %xmm1, %xmm3
332 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm3
333 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
334 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
335 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
336 ; SSE2-NEXT: pand %xmm4, %xmm1
337 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
338 ; SSE2-NEXT: por %xmm1, %xmm3
339 ; SSE2-NEXT: pand %xmm2, %xmm3
340 ; SSE2-NEXT: movdqa %xmm6, %xmm1
341 ; SSE2-NEXT: pxor %xmm10, %xmm1
342 ; SSE2-NEXT: movdqa %xmm1, %xmm2
343 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm2
344 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
345 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
346 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
347 ; SSE2-NEXT: pand %xmm4, %xmm7
348 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
349 ; SSE2-NEXT: por %xmm7, %xmm1
350 ; SSE2-NEXT: pand %xmm6, %xmm1
351 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
352 ; SSE2-NEXT: movdqa %xmm0, %xmm2
353 ; SSE2-NEXT: pxor %xmm10, %xmm2
354 ; SSE2-NEXT: movdqa %xmm2, %xmm3
355 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm3
356 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
357 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm2
358 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
359 ; SSE2-NEXT: pand %xmm4, %xmm2
360 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
361 ; SSE2-NEXT: por %xmm2, %xmm3
362 ; SSE2-NEXT: pand %xmm0, %xmm3
363 ; SSE2-NEXT: movdqa %xmm5, %xmm0
364 ; SSE2-NEXT: pxor %xmm10, %xmm0
365 ; SSE2-NEXT: movdqa %xmm0, %xmm2
366 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm2
367 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
368 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm0
369 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
370 ; SSE2-NEXT: pand %xmm4, %xmm6
371 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
372 ; SSE2-NEXT: por %xmm6, %xmm0
373 ; SSE2-NEXT: pand %xmm5, %xmm0
374 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
377 ; SSSE3-LABEL: trunc_packus_v8i64_v8i32:
379 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
380 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
381 ; SSSE3-NEXT: movdqa %xmm0, %xmm5
382 ; SSSE3-NEXT: pxor %xmm10, %xmm5
383 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483647,2147483647]
384 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
385 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm6
386 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
387 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5
388 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
389 ; SSSE3-NEXT: pand %xmm7, %xmm4
390 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
391 ; SSSE3-NEXT: por %xmm4, %xmm5
392 ; SSSE3-NEXT: pand %xmm5, %xmm0
393 ; SSSE3-NEXT: pandn %xmm8, %xmm5
394 ; SSSE3-NEXT: por %xmm0, %xmm5
395 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
396 ; SSSE3-NEXT: pxor %xmm10, %xmm0
397 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
398 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4
399 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
400 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
401 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
402 ; SSSE3-NEXT: pand %xmm6, %xmm7
403 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
404 ; SSSE3-NEXT: por %xmm7, %xmm0
405 ; SSSE3-NEXT: pand %xmm0, %xmm1
406 ; SSSE3-NEXT: pandn %xmm8, %xmm0
407 ; SSSE3-NEXT: por %xmm1, %xmm0
408 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
409 ; SSSE3-NEXT: pxor %xmm10, %xmm1
410 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
411 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4
412 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
413 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
414 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
415 ; SSSE3-NEXT: pand %xmm6, %xmm1
416 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
417 ; SSSE3-NEXT: por %xmm1, %xmm6
418 ; SSSE3-NEXT: pand %xmm6, %xmm2
419 ; SSSE3-NEXT: pandn %xmm8, %xmm6
420 ; SSSE3-NEXT: por %xmm2, %xmm6
421 ; SSSE3-NEXT: movdqa %xmm3, %xmm1
422 ; SSSE3-NEXT: pxor %xmm10, %xmm1
423 ; SSSE3-NEXT: movdqa %xmm9, %xmm2
424 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm2
425 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
426 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
427 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
428 ; SSSE3-NEXT: pand %xmm4, %xmm1
429 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
430 ; SSSE3-NEXT: por %xmm1, %xmm2
431 ; SSSE3-NEXT: pand %xmm2, %xmm3
432 ; SSSE3-NEXT: pandn %xmm8, %xmm2
433 ; SSSE3-NEXT: por %xmm3, %xmm2
434 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
435 ; SSSE3-NEXT: pxor %xmm10, %xmm1
436 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
437 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3
438 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
439 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
440 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
441 ; SSSE3-NEXT: pand %xmm4, %xmm1
442 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
443 ; SSSE3-NEXT: por %xmm1, %xmm3
444 ; SSSE3-NEXT: pand %xmm2, %xmm3
445 ; SSSE3-NEXT: movdqa %xmm6, %xmm1
446 ; SSSE3-NEXT: pxor %xmm10, %xmm1
447 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
448 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2
449 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
450 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
451 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
452 ; SSSE3-NEXT: pand %xmm4, %xmm7
453 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
454 ; SSSE3-NEXT: por %xmm7, %xmm1
455 ; SSSE3-NEXT: pand %xmm6, %xmm1
456 ; SSSE3-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
457 ; SSSE3-NEXT: movdqa %xmm0, %xmm2
458 ; SSSE3-NEXT: pxor %xmm10, %xmm2
459 ; SSSE3-NEXT: movdqa %xmm2, %xmm3
460 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3
461 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
462 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm2
463 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
464 ; SSSE3-NEXT: pand %xmm4, %xmm2
465 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
466 ; SSSE3-NEXT: por %xmm2, %xmm3
467 ; SSSE3-NEXT: pand %xmm0, %xmm3
468 ; SSSE3-NEXT: movdqa %xmm5, %xmm0
469 ; SSSE3-NEXT: pxor %xmm10, %xmm0
470 ; SSSE3-NEXT: movdqa %xmm0, %xmm2
471 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2
472 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
473 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0
474 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
475 ; SSSE3-NEXT: pand %xmm4, %xmm6
476 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
477 ; SSSE3-NEXT: por %xmm6, %xmm0
478 ; SSSE3-NEXT: pand %xmm5, %xmm0
479 ; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
482 ; SSE41-LABEL: trunc_packus_v8i64_v8i32:
484 ; SSE41-NEXT: movdqa %xmm0, %xmm9
485 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [4294967295,4294967295]
486 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
487 ; SSE41-NEXT: pxor %xmm10, %xmm0
488 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
489 ; SSE41-NEXT: movdqa %xmm5, %xmm4
490 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm4
491 ; SSE41-NEXT: movdqa %xmm5, %xmm6
492 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
493 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
494 ; SSE41-NEXT: pand %xmm4, %xmm0
495 ; SSE41-NEXT: por %xmm6, %xmm0
496 ; SSE41-NEXT: movapd %xmm7, %xmm8
497 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm8
498 ; SSE41-NEXT: movdqa %xmm1, %xmm0
499 ; SSE41-NEXT: pxor %xmm10, %xmm0
500 ; SSE41-NEXT: movdqa %xmm5, %xmm4
501 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm4
502 ; SSE41-NEXT: movdqa %xmm5, %xmm6
503 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
504 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
505 ; SSE41-NEXT: pand %xmm4, %xmm0
506 ; SSE41-NEXT: por %xmm6, %xmm0
507 ; SSE41-NEXT: movapd %xmm7, %xmm9
508 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm9
509 ; SSE41-NEXT: movdqa %xmm2, %xmm0
510 ; SSE41-NEXT: pxor %xmm10, %xmm0
511 ; SSE41-NEXT: movdqa %xmm5, %xmm1
512 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
513 ; SSE41-NEXT: movdqa %xmm5, %xmm4
514 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4
515 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
516 ; SSE41-NEXT: pand %xmm1, %xmm0
517 ; SSE41-NEXT: por %xmm4, %xmm0
518 ; SSE41-NEXT: movapd %xmm7, %xmm4
519 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4
520 ; SSE41-NEXT: movdqa %xmm3, %xmm0
521 ; SSE41-NEXT: pxor %xmm10, %xmm0
522 ; SSE41-NEXT: movdqa %xmm5, %xmm1
523 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
524 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
525 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
526 ; SSE41-NEXT: pand %xmm1, %xmm0
527 ; SSE41-NEXT: por %xmm5, %xmm0
528 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm7
529 ; SSE41-NEXT: xorpd %xmm2, %xmm2
530 ; SSE41-NEXT: movapd %xmm7, %xmm1
531 ; SSE41-NEXT: xorpd %xmm10, %xmm1
532 ; SSE41-NEXT: movapd %xmm1, %xmm3
533 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm3
534 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1
535 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
536 ; SSE41-NEXT: pand %xmm3, %xmm0
537 ; SSE41-NEXT: por %xmm1, %xmm0
538 ; SSE41-NEXT: pxor %xmm3, %xmm3
539 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm3
540 ; SSE41-NEXT: movapd %xmm4, %xmm1
541 ; SSE41-NEXT: xorpd %xmm10, %xmm1
542 ; SSE41-NEXT: movapd %xmm1, %xmm5
543 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
544 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1
545 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
546 ; SSE41-NEXT: pand %xmm5, %xmm0
547 ; SSE41-NEXT: por %xmm1, %xmm0
548 ; SSE41-NEXT: pxor %xmm1, %xmm1
549 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1
550 ; SSE41-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
551 ; SSE41-NEXT: movapd %xmm9, %xmm3
552 ; SSE41-NEXT: xorpd %xmm10, %xmm3
553 ; SSE41-NEXT: movapd %xmm3, %xmm4
554 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm4
555 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm3
556 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
557 ; SSE41-NEXT: pand %xmm4, %xmm0
558 ; SSE41-NEXT: por %xmm3, %xmm0
559 ; SSE41-NEXT: pxor %xmm3, %xmm3
560 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm3
561 ; SSE41-NEXT: movapd %xmm8, %xmm4
562 ; SSE41-NEXT: xorpd %xmm10, %xmm4
563 ; SSE41-NEXT: movapd %xmm4, %xmm5
564 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
565 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm4
566 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
567 ; SSE41-NEXT: pand %xmm5, %xmm0
568 ; SSE41-NEXT: por %xmm4, %xmm0
569 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm2
570 ; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
571 ; SSE41-NEXT: movaps %xmm2, %xmm0
574 ; AVX1-LABEL: trunc_packus_v8i64_v8i32:
576 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
577 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [4294967295,4294967295]
578 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm8
579 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
580 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
581 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm7
582 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm4
583 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
584 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
585 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm9
586 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm3, %xmm6
587 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm7
588 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
589 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
590 ; AVX1-NEXT: vblendvpd %xmm8, %xmm2, %xmm3, %xmm2
591 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm2, %xmm3
592 ; AVX1-NEXT: vpand %xmm2, %xmm3, %xmm2
593 ; AVX1-NEXT: vpand %xmm1, %xmm5, %xmm1
594 ; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
595 ; AVX1-NEXT: vpand %xmm6, %xmm7, %xmm2
596 ; AVX1-NEXT: vpand %xmm0, %xmm9, %xmm0
597 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
598 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
601 ; AVX2-SLOW-LABEL: trunc_packus_v8i64_v8i32:
602 ; AVX2-SLOW: # %bb.0:
603 ; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]
604 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
605 ; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
606 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
607 ; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
608 ; AVX2-SLOW-NEXT: vpxor %xmm2, %xmm2, %xmm2
609 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3
610 ; AVX2-SLOW-NEXT: vpand %ymm0, %ymm3, %ymm0
611 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm2
612 ; AVX2-SLOW-NEXT: vpand %ymm1, %ymm2, %ymm1
613 ; AVX2-SLOW-NEXT: vextracti128 $1, %ymm1, %xmm2
614 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
615 ; AVX2-SLOW-NEXT: vextracti128 $1, %ymm0, %xmm2
616 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
617 ; AVX2-SLOW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
618 ; AVX2-SLOW-NEXT: retq
620 ; AVX2-FAST-LABEL: trunc_packus_v8i64_v8i32:
621 ; AVX2-FAST: # %bb.0:
622 ; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]
623 ; AVX2-FAST-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
624 ; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
625 ; AVX2-FAST-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
626 ; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
627 ; AVX2-FAST-NEXT: vpxor %xmm2, %xmm2, %xmm2
628 ; AVX2-FAST-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3
629 ; AVX2-FAST-NEXT: vpand %ymm1, %ymm3, %ymm1
630 ; AVX2-FAST-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm2
631 ; AVX2-FAST-NEXT: vpand %ymm0, %ymm2, %ymm0
632 ; AVX2-FAST-NEXT: vmovdqa {{.*#+}} ymm2 = [0,2,4,6,4,6,6,7]
633 ; AVX2-FAST-NEXT: vpermd %ymm0, %ymm2, %ymm0
634 ; AVX2-FAST-NEXT: vpermd %ymm1, %ymm2, %ymm1
635 ; AVX2-FAST-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
636 ; AVX2-FAST-NEXT: retq
638 ; AVX512-LABEL: trunc_packus_v8i64_v8i32:
640 ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
641 ; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
642 ; AVX512-NEXT: vpmovusqd %zmm0, %ymm0
644 %1 = icmp slt <8 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
645 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
646 %3 = icmp sgt <8 x i64> %2, zeroinitializer
647 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
648 %5 = trunc <8 x i64> %4 to <8 x i32>
653 ; PACKUS saturation truncation to vXi16
656 define <8 x i16> @trunc_packus_v8i64_v8i16(<8 x i64> %a0) {
657 ; SSE2-LABEL: trunc_packus_v8i64_v8i16:
659 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [65535,65535]
660 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
661 ; SSE2-NEXT: movdqa %xmm1, %xmm5
662 ; SSE2-NEXT: pxor %xmm10, %xmm5
663 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147549183,2147549183]
664 ; SSE2-NEXT: movdqa %xmm9, %xmm6
665 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
666 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
667 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5
668 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
669 ; SSE2-NEXT: pand %xmm7, %xmm4
670 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
671 ; SSE2-NEXT: por %xmm4, %xmm5
672 ; SSE2-NEXT: pand %xmm5, %xmm1
673 ; SSE2-NEXT: pandn %xmm8, %xmm5
674 ; SSE2-NEXT: por %xmm1, %xmm5
675 ; SSE2-NEXT: movdqa %xmm0, %xmm1
676 ; SSE2-NEXT: pxor %xmm10, %xmm1
677 ; SSE2-NEXT: movdqa %xmm9, %xmm4
678 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
679 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
680 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
681 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
682 ; SSE2-NEXT: pand %xmm6, %xmm7
683 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
684 ; SSE2-NEXT: por %xmm7, %xmm1
685 ; SSE2-NEXT: pand %xmm1, %xmm0
686 ; SSE2-NEXT: pandn %xmm8, %xmm1
687 ; SSE2-NEXT: por %xmm0, %xmm1
688 ; SSE2-NEXT: movdqa %xmm3, %xmm0
689 ; SSE2-NEXT: pxor %xmm10, %xmm0
690 ; SSE2-NEXT: movdqa %xmm9, %xmm4
691 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
692 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
693 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
694 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
695 ; SSE2-NEXT: pand %xmm6, %xmm0
696 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
697 ; SSE2-NEXT: por %xmm0, %xmm6
698 ; SSE2-NEXT: pand %xmm6, %xmm3
699 ; SSE2-NEXT: pandn %xmm8, %xmm6
700 ; SSE2-NEXT: por %xmm3, %xmm6
701 ; SSE2-NEXT: movdqa %xmm2, %xmm0
702 ; SSE2-NEXT: pxor %xmm10, %xmm0
703 ; SSE2-NEXT: movdqa %xmm9, %xmm3
704 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3
705 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
706 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
707 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
708 ; SSE2-NEXT: pand %xmm4, %xmm0
709 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
710 ; SSE2-NEXT: por %xmm0, %xmm3
711 ; SSE2-NEXT: pand %xmm3, %xmm2
712 ; SSE2-NEXT: pandn %xmm8, %xmm3
713 ; SSE2-NEXT: por %xmm2, %xmm3
714 ; SSE2-NEXT: movdqa %xmm3, %xmm0
715 ; SSE2-NEXT: pxor %xmm10, %xmm0
716 ; SSE2-NEXT: movdqa %xmm0, %xmm2
717 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm2
718 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
719 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm0
720 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
721 ; SSE2-NEXT: pand %xmm4, %xmm7
722 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
723 ; SSE2-NEXT: por %xmm7, %xmm0
724 ; SSE2-NEXT: pand %xmm3, %xmm0
725 ; SSE2-NEXT: movdqa %xmm6, %xmm2
726 ; SSE2-NEXT: pxor %xmm10, %xmm2
727 ; SSE2-NEXT: movdqa %xmm2, %xmm3
728 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm3
729 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
730 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm2
731 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
732 ; SSE2-NEXT: pand %xmm4, %xmm7
733 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
734 ; SSE2-NEXT: por %xmm7, %xmm2
735 ; SSE2-NEXT: pand %xmm6, %xmm2
736 ; SSE2-NEXT: movdqa %xmm1, %xmm3
737 ; SSE2-NEXT: pxor %xmm10, %xmm3
738 ; SSE2-NEXT: movdqa %xmm3, %xmm4
739 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm4
740 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
741 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm3
742 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
743 ; SSE2-NEXT: pand %xmm6, %xmm3
744 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
745 ; SSE2-NEXT: por %xmm3, %xmm4
746 ; SSE2-NEXT: pand %xmm1, %xmm4
747 ; SSE2-NEXT: movdqa %xmm5, %xmm1
748 ; SSE2-NEXT: pxor %xmm10, %xmm1
749 ; SSE2-NEXT: movdqa %xmm1, %xmm3
750 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm3
751 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
752 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
753 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
754 ; SSE2-NEXT: pand %xmm6, %xmm1
755 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
756 ; SSE2-NEXT: por %xmm1, %xmm3
757 ; SSE2-NEXT: pand %xmm5, %xmm3
758 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
759 ; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
760 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
761 ; SSE2-NEXT: pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
762 ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
763 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
764 ; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,1,0,2,4,5,6,7]
765 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
766 ; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7]
767 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
768 ; SSE2-NEXT: movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]
771 ; SSSE3-LABEL: trunc_packus_v8i64_v8i16:
773 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [65535,65535]
774 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
775 ; SSSE3-NEXT: movdqa %xmm1, %xmm5
776 ; SSSE3-NEXT: pxor %xmm10, %xmm5
777 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147549183,2147549183]
778 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
779 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm6
780 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
781 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5
782 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
783 ; SSSE3-NEXT: pand %xmm7, %xmm4
784 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
785 ; SSSE3-NEXT: por %xmm4, %xmm5
786 ; SSSE3-NEXT: pand %xmm5, %xmm1
787 ; SSSE3-NEXT: pandn %xmm8, %xmm5
788 ; SSSE3-NEXT: por %xmm1, %xmm5
789 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
790 ; SSSE3-NEXT: pxor %xmm10, %xmm1
791 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
792 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4
793 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
794 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
795 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
796 ; SSSE3-NEXT: pand %xmm6, %xmm7
797 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
798 ; SSSE3-NEXT: por %xmm7, %xmm1
799 ; SSSE3-NEXT: pand %xmm1, %xmm0
800 ; SSSE3-NEXT: pandn %xmm8, %xmm1
801 ; SSSE3-NEXT: por %xmm0, %xmm1
802 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
803 ; SSSE3-NEXT: pxor %xmm10, %xmm0
804 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
805 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4
806 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
807 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
808 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
809 ; SSSE3-NEXT: pand %xmm6, %xmm0
810 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
811 ; SSSE3-NEXT: por %xmm0, %xmm6
812 ; SSSE3-NEXT: pand %xmm6, %xmm3
813 ; SSSE3-NEXT: pandn %xmm8, %xmm6
814 ; SSSE3-NEXT: por %xmm3, %xmm6
815 ; SSSE3-NEXT: movdqa %xmm2, %xmm0
816 ; SSSE3-NEXT: pxor %xmm10, %xmm0
817 ; SSSE3-NEXT: movdqa %xmm9, %xmm3
818 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm3
819 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
820 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
821 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
822 ; SSSE3-NEXT: pand %xmm4, %xmm0
823 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
824 ; SSSE3-NEXT: por %xmm0, %xmm3
825 ; SSSE3-NEXT: pand %xmm3, %xmm2
826 ; SSSE3-NEXT: pandn %xmm8, %xmm3
827 ; SSSE3-NEXT: por %xmm2, %xmm3
828 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
829 ; SSSE3-NEXT: pxor %xmm10, %xmm0
830 ; SSSE3-NEXT: movdqa %xmm0, %xmm2
831 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2
832 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
833 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0
834 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
835 ; SSSE3-NEXT: pand %xmm4, %xmm7
836 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
837 ; SSSE3-NEXT: por %xmm7, %xmm0
838 ; SSSE3-NEXT: pand %xmm3, %xmm0
839 ; SSSE3-NEXT: movdqa %xmm6, %xmm2
840 ; SSSE3-NEXT: pxor %xmm10, %xmm2
841 ; SSSE3-NEXT: movdqa %xmm2, %xmm3
842 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3
843 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
844 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm2
845 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
846 ; SSSE3-NEXT: pand %xmm4, %xmm7
847 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
848 ; SSSE3-NEXT: por %xmm7, %xmm2
849 ; SSSE3-NEXT: pand %xmm6, %xmm2
850 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
851 ; SSSE3-NEXT: pxor %xmm10, %xmm3
852 ; SSSE3-NEXT: movdqa %xmm3, %xmm4
853 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm4
854 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
855 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm3
856 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
857 ; SSSE3-NEXT: pand %xmm6, %xmm3
858 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
859 ; SSSE3-NEXT: por %xmm3, %xmm4
860 ; SSSE3-NEXT: pand %xmm1, %xmm4
861 ; SSSE3-NEXT: movdqa %xmm5, %xmm1
862 ; SSSE3-NEXT: pxor %xmm10, %xmm1
863 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
864 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3
865 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
866 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
867 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
868 ; SSSE3-NEXT: pand %xmm6, %xmm1
869 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
870 ; SSSE3-NEXT: por %xmm1, %xmm3
871 ; SSSE3-NEXT: pand %xmm5, %xmm3
872 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
873 ; SSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
874 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
875 ; SSSE3-NEXT: pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
876 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
877 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
878 ; SSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,1,0,2,4,5,6,7]
879 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
880 ; SSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7]
881 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
882 ; SSSE3-NEXT: movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]
885 ; SSE41-LABEL: trunc_packus_v8i64_v8i16:
887 ; SSE41-NEXT: movdqa %xmm0, %xmm9
888 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [65535,65535]
889 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
890 ; SSE41-NEXT: movdqa %xmm2, %xmm0
891 ; SSE41-NEXT: pxor %xmm10, %xmm0
892 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [2147549183,2147549183]
893 ; SSE41-NEXT: movdqa %xmm4, %xmm5
894 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm5
895 ; SSE41-NEXT: movdqa %xmm4, %xmm6
896 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
897 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
898 ; SSE41-NEXT: pand %xmm5, %xmm0
899 ; SSE41-NEXT: por %xmm6, %xmm0
900 ; SSE41-NEXT: movapd %xmm7, %xmm8
901 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8
902 ; SSE41-NEXT: movdqa %xmm3, %xmm0
903 ; SSE41-NEXT: pxor %xmm10, %xmm0
904 ; SSE41-NEXT: movdqa %xmm4, %xmm2
905 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
906 ; SSE41-NEXT: movdqa %xmm4, %xmm5
907 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
908 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
909 ; SSE41-NEXT: pand %xmm2, %xmm0
910 ; SSE41-NEXT: por %xmm5, %xmm0
911 ; SSE41-NEXT: movapd %xmm7, %xmm2
912 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2
913 ; SSE41-NEXT: movdqa %xmm9, %xmm0
914 ; SSE41-NEXT: pxor %xmm10, %xmm0
915 ; SSE41-NEXT: movdqa %xmm4, %xmm3
916 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm3
917 ; SSE41-NEXT: movdqa %xmm4, %xmm5
918 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
919 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
920 ; SSE41-NEXT: pand %xmm3, %xmm0
921 ; SSE41-NEXT: por %xmm5, %xmm0
922 ; SSE41-NEXT: movapd %xmm7, %xmm6
923 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm6
924 ; SSE41-NEXT: movdqa %xmm1, %xmm0
925 ; SSE41-NEXT: pxor %xmm10, %xmm0
926 ; SSE41-NEXT: movdqa %xmm4, %xmm3
927 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm3
928 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4
929 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
930 ; SSE41-NEXT: pand %xmm3, %xmm0
931 ; SSE41-NEXT: por %xmm4, %xmm0
932 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7
933 ; SSE41-NEXT: pxor %xmm3, %xmm3
934 ; SSE41-NEXT: movapd %xmm7, %xmm1
935 ; SSE41-NEXT: xorpd %xmm10, %xmm1
936 ; SSE41-NEXT: movapd %xmm1, %xmm4
937 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm4
938 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1
939 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
940 ; SSE41-NEXT: pand %xmm4, %xmm0
941 ; SSE41-NEXT: por %xmm1, %xmm0
942 ; SSE41-NEXT: pxor %xmm4, %xmm4
943 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm4
944 ; SSE41-NEXT: movapd %xmm6, %xmm1
945 ; SSE41-NEXT: xorpd %xmm10, %xmm1
946 ; SSE41-NEXT: movapd %xmm1, %xmm5
947 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
948 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1
949 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
950 ; SSE41-NEXT: pand %xmm5, %xmm0
951 ; SSE41-NEXT: por %xmm1, %xmm0
952 ; SSE41-NEXT: pxor %xmm1, %xmm1
953 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm1
954 ; SSE41-NEXT: packusdw %xmm4, %xmm1
955 ; SSE41-NEXT: movapd %xmm2, %xmm4
956 ; SSE41-NEXT: xorpd %xmm10, %xmm4
957 ; SSE41-NEXT: movapd %xmm4, %xmm5
958 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
959 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm4
960 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
961 ; SSE41-NEXT: pand %xmm5, %xmm0
962 ; SSE41-NEXT: por %xmm4, %xmm0
963 ; SSE41-NEXT: pxor %xmm4, %xmm4
964 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4
965 ; SSE41-NEXT: movapd %xmm8, %xmm2
966 ; SSE41-NEXT: xorpd %xmm10, %xmm2
967 ; SSE41-NEXT: movapd %xmm2, %xmm5
968 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
969 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm2
970 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
971 ; SSE41-NEXT: pand %xmm5, %xmm0
972 ; SSE41-NEXT: por %xmm2, %xmm0
973 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3
974 ; SSE41-NEXT: packusdw %xmm4, %xmm3
975 ; SSE41-NEXT: packusdw %xmm3, %xmm1
976 ; SSE41-NEXT: movdqa %xmm1, %xmm0
979 ; AVX1-LABEL: trunc_packus_v8i64_v8i16:
981 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
982 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [65535,65535]
983 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm8
984 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
985 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
986 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm7
987 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm4
988 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
989 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
990 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm9
991 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm3, %xmm6
992 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm7
993 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
994 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
995 ; AVX1-NEXT: vblendvpd %xmm8, %xmm2, %xmm3, %xmm2
996 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm2, %xmm3
997 ; AVX1-NEXT: vpand %xmm2, %xmm3, %xmm2
998 ; AVX1-NEXT: vpand %xmm1, %xmm5, %xmm1
999 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
1000 ; AVX1-NEXT: vpand %xmm6, %xmm7, %xmm2
1001 ; AVX1-NEXT: vpand %xmm0, %xmm9, %xmm0
1002 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0
1003 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1004 ; AVX1-NEXT: vzeroupper
1007 ; AVX2-LABEL: trunc_packus_v8i64_v8i16:
1009 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [65535,65535,65535,65535]
1010 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
1011 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1012 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
1013 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1014 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1015 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3
1016 ; AVX2-NEXT: vpand %ymm1, %ymm3, %ymm1
1017 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm2
1018 ; AVX2-NEXT: vpand %ymm0, %ymm2, %ymm0
1019 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1020 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1021 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1022 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1023 ; AVX2-NEXT: vzeroupper
1026 ; AVX512-LABEL: trunc_packus_v8i64_v8i16:
1028 ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
1029 ; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
1030 ; AVX512-NEXT: vpmovusqw %zmm0, %xmm0
1031 ; AVX512-NEXT: vzeroupper
1033 %1 = icmp slt <8 x i64> %a0, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>
1034 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>
1035 %3 = icmp sgt <8 x i64> %2, zeroinitializer
1036 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
1037 %5 = trunc <8 x i64> %4 to <8 x i16>
1041 define <8 x i16> @trunc_packus_v8i32_v8i16(<8 x i32> %a0) {
1042 ; SSE2-LABEL: trunc_packus_v8i32_v8i16:
1044 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535]
1045 ; SSE2-NEXT: movdqa %xmm2, %xmm3
1046 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm3
1047 ; SSE2-NEXT: pand %xmm3, %xmm1
1048 ; SSE2-NEXT: pandn %xmm2, %xmm3
1049 ; SSE2-NEXT: por %xmm1, %xmm3
1050 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1051 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm1
1052 ; SSE2-NEXT: pand %xmm1, %xmm0
1053 ; SSE2-NEXT: pandn %xmm2, %xmm1
1054 ; SSE2-NEXT: por %xmm0, %xmm1
1055 ; SSE2-NEXT: pxor %xmm2, %xmm2
1056 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1057 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm0
1058 ; SSE2-NEXT: pand %xmm1, %xmm0
1059 ; SSE2-NEXT: movdqa %xmm3, %xmm1
1060 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm1
1061 ; SSE2-NEXT: pand %xmm3, %xmm1
1062 ; SSE2-NEXT: pslld $16, %xmm1
1063 ; SSE2-NEXT: psrad $16, %xmm1
1064 ; SSE2-NEXT: pslld $16, %xmm0
1065 ; SSE2-NEXT: psrad $16, %xmm0
1066 ; SSE2-NEXT: packssdw %xmm1, %xmm0
1069 ; SSSE3-LABEL: trunc_packus_v8i32_v8i16:
1071 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535]
1072 ; SSSE3-NEXT: movdqa %xmm2, %xmm3
1073 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm3
1074 ; SSSE3-NEXT: pand %xmm3, %xmm1
1075 ; SSSE3-NEXT: pandn %xmm2, %xmm3
1076 ; SSSE3-NEXT: por %xmm1, %xmm3
1077 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1078 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm1
1079 ; SSSE3-NEXT: pand %xmm1, %xmm0
1080 ; SSSE3-NEXT: pandn %xmm2, %xmm1
1081 ; SSSE3-NEXT: por %xmm0, %xmm1
1082 ; SSSE3-NEXT: pxor %xmm2, %xmm2
1083 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1084 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm0
1085 ; SSSE3-NEXT: pand %xmm1, %xmm0
1086 ; SSSE3-NEXT: movdqa %xmm3, %xmm1
1087 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm1
1088 ; SSSE3-NEXT: pand %xmm3, %xmm1
1089 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
1090 ; SSSE3-NEXT: pshufb %xmm2, %xmm1
1091 ; SSSE3-NEXT: pshufb %xmm2, %xmm0
1092 ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1095 ; SSE41-LABEL: trunc_packus_v8i32_v8i16:
1097 ; SSE41-NEXT: packusdw %xmm1, %xmm0
1100 ; AVX1-LABEL: trunc_packus_v8i32_v8i16:
1102 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1103 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1104 ; AVX1-NEXT: vzeroupper
1107 ; AVX2-LABEL: trunc_packus_v8i32_v8i16:
1109 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1110 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1111 ; AVX2-NEXT: vzeroupper
1114 ; AVX512F-LABEL: trunc_packus_v8i32_v8i16:
1116 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]
1117 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1118 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
1119 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1120 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0
1121 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
1122 ; AVX512F-NEXT: vzeroupper
1123 ; AVX512F-NEXT: retq
1125 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i16:
1126 ; AVX512VL: # %bb.0:
1127 ; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1
1128 ; AVX512VL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1129 ; AVX512VL-NEXT: vpmovusdw %ymm0, %xmm0
1130 ; AVX512VL-NEXT: vzeroupper
1131 ; AVX512VL-NEXT: retq
1133 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i16:
1134 ; AVX512BW: # %bb.0:
1135 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]
1136 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1137 ; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1
1138 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1139 ; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0
1140 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
1141 ; AVX512BW-NEXT: vzeroupper
1142 ; AVX512BW-NEXT: retq
1144 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i16:
1145 ; AVX512BWVL: # %bb.0:
1146 ; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1
1147 ; AVX512BWVL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1148 ; AVX512BWVL-NEXT: vpmovusdw %ymm0, %xmm0
1149 ; AVX512BWVL-NEXT: vzeroupper
1150 ; AVX512BWVL-NEXT: retq
1151 %1 = icmp slt <8 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
1152 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
1153 %3 = icmp sgt <8 x i32> %2, zeroinitializer
1154 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
1155 %5 = trunc <8 x i32> %4 to <8 x i16>
1159 define <16 x i16> @trunc_packus_v16i32_v16i16(<16 x i32> %a0) {
1160 ; SSE2-LABEL: trunc_packus_v16i32_v16i16:
1162 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [65535,65535,65535,65535]
1163 ; SSE2-NEXT: movdqa %xmm6, %xmm4
1164 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
1165 ; SSE2-NEXT: pand %xmm4, %xmm1
1166 ; SSE2-NEXT: pandn %xmm6, %xmm4
1167 ; SSE2-NEXT: por %xmm1, %xmm4
1168 ; SSE2-NEXT: movdqa %xmm6, %xmm5
1169 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
1170 ; SSE2-NEXT: pand %xmm5, %xmm0
1171 ; SSE2-NEXT: pandn %xmm6, %xmm5
1172 ; SSE2-NEXT: por %xmm0, %xmm5
1173 ; SSE2-NEXT: movdqa %xmm6, %xmm0
1174 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm0
1175 ; SSE2-NEXT: pand %xmm0, %xmm3
1176 ; SSE2-NEXT: pandn %xmm6, %xmm0
1177 ; SSE2-NEXT: por %xmm3, %xmm0
1178 ; SSE2-NEXT: movdqa %xmm6, %xmm3
1179 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
1180 ; SSE2-NEXT: pand %xmm3, %xmm2
1181 ; SSE2-NEXT: pandn %xmm6, %xmm3
1182 ; SSE2-NEXT: por %xmm2, %xmm3
1183 ; SSE2-NEXT: pxor %xmm2, %xmm2
1184 ; SSE2-NEXT: movdqa %xmm3, %xmm1
1185 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm1
1186 ; SSE2-NEXT: pand %xmm3, %xmm1
1187 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1188 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
1189 ; SSE2-NEXT: pand %xmm0, %xmm3
1190 ; SSE2-NEXT: movdqa %xmm5, %xmm0
1191 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm0
1192 ; SSE2-NEXT: pand %xmm5, %xmm0
1193 ; SSE2-NEXT: movdqa %xmm4, %xmm5
1194 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
1195 ; SSE2-NEXT: pand %xmm4, %xmm5
1196 ; SSE2-NEXT: pslld $16, %xmm5
1197 ; SSE2-NEXT: psrad $16, %xmm5
1198 ; SSE2-NEXT: pslld $16, %xmm0
1199 ; SSE2-NEXT: psrad $16, %xmm0
1200 ; SSE2-NEXT: packssdw %xmm5, %xmm0
1201 ; SSE2-NEXT: pslld $16, %xmm3
1202 ; SSE2-NEXT: psrad $16, %xmm3
1203 ; SSE2-NEXT: pslld $16, %xmm1
1204 ; SSE2-NEXT: psrad $16, %xmm1
1205 ; SSE2-NEXT: packssdw %xmm3, %xmm1
1208 ; SSSE3-LABEL: trunc_packus_v16i32_v16i16:
1210 ; SSSE3-NEXT: movdqa {{.*#+}} xmm6 = [65535,65535,65535,65535]
1211 ; SSSE3-NEXT: movdqa %xmm6, %xmm4
1212 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm4
1213 ; SSSE3-NEXT: pand %xmm4, %xmm1
1214 ; SSSE3-NEXT: pandn %xmm6, %xmm4
1215 ; SSSE3-NEXT: por %xmm1, %xmm4
1216 ; SSSE3-NEXT: movdqa %xmm6, %xmm5
1217 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm5
1218 ; SSSE3-NEXT: pand %xmm5, %xmm0
1219 ; SSSE3-NEXT: pandn %xmm6, %xmm5
1220 ; SSSE3-NEXT: por %xmm0, %xmm5
1221 ; SSSE3-NEXT: movdqa %xmm6, %xmm0
1222 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm0
1223 ; SSSE3-NEXT: pand %xmm0, %xmm3
1224 ; SSSE3-NEXT: pandn %xmm6, %xmm0
1225 ; SSSE3-NEXT: por %xmm3, %xmm0
1226 ; SSSE3-NEXT: movdqa %xmm6, %xmm3
1227 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm3
1228 ; SSSE3-NEXT: pand %xmm3, %xmm2
1229 ; SSSE3-NEXT: pandn %xmm6, %xmm3
1230 ; SSSE3-NEXT: por %xmm2, %xmm3
1231 ; SSSE3-NEXT: pxor %xmm2, %xmm2
1232 ; SSSE3-NEXT: movdqa %xmm3, %xmm1
1233 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm1
1234 ; SSSE3-NEXT: pand %xmm3, %xmm1
1235 ; SSSE3-NEXT: movdqa %xmm0, %xmm3
1236 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm3
1237 ; SSSE3-NEXT: pand %xmm0, %xmm3
1238 ; SSSE3-NEXT: movdqa %xmm5, %xmm0
1239 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm0
1240 ; SSSE3-NEXT: pand %xmm5, %xmm0
1241 ; SSSE3-NEXT: movdqa %xmm4, %xmm5
1242 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm5
1243 ; SSSE3-NEXT: pand %xmm4, %xmm5
1244 ; SSSE3-NEXT: pslld $16, %xmm5
1245 ; SSSE3-NEXT: psrad $16, %xmm5
1246 ; SSSE3-NEXT: pslld $16, %xmm0
1247 ; SSSE3-NEXT: psrad $16, %xmm0
1248 ; SSSE3-NEXT: packssdw %xmm5, %xmm0
1249 ; SSSE3-NEXT: pslld $16, %xmm3
1250 ; SSSE3-NEXT: psrad $16, %xmm3
1251 ; SSSE3-NEXT: pslld $16, %xmm1
1252 ; SSSE3-NEXT: psrad $16, %xmm1
1253 ; SSSE3-NEXT: packssdw %xmm3, %xmm1
1256 ; SSE41-LABEL: trunc_packus_v16i32_v16i16:
1258 ; SSE41-NEXT: packusdw %xmm1, %xmm0
1259 ; SSE41-NEXT: packusdw %xmm3, %xmm2
1260 ; SSE41-NEXT: movdqa %xmm2, %xmm1
1263 ; AVX1-LABEL: trunc_packus_v16i32_v16i16:
1265 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1266 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
1267 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1268 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0
1269 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1272 ; AVX2-LABEL: trunc_packus_v16i32_v16i16:
1274 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1275 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1278 ; AVX512-LABEL: trunc_packus_v16i32_v16i16:
1280 ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
1281 ; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
1282 ; AVX512-NEXT: vpmovusdw %zmm0, %ymm0
1284 %1 = icmp slt <16 x i32> %a0, <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>
1285 %2 = select <16 x i1> %1, <16 x i32> %a0, <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>
1286 %3 = icmp sgt <16 x i32> %2, zeroinitializer
1287 %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer
1288 %5 = trunc <16 x i32> %4 to <16 x i16>
1293 ; PACKUS saturation truncation to v16i8
1296 define <8 x i8> @trunc_packus_v8i64_v8i8(<8 x i64> %a0) {
1297 ; SSE2-LABEL: trunc_packus_v8i64_v8i8:
1299 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [255,255]
1300 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1301 ; SSE2-NEXT: movdqa %xmm2, %xmm5
1302 ; SSE2-NEXT: pxor %xmm10, %xmm5
1303 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1304 ; SSE2-NEXT: movdqa %xmm9, %xmm7
1305 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
1306 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1307 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5
1308 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1309 ; SSE2-NEXT: pand %xmm6, %xmm4
1310 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1311 ; SSE2-NEXT: por %xmm4, %xmm5
1312 ; SSE2-NEXT: pand %xmm5, %xmm2
1313 ; SSE2-NEXT: pandn %xmm8, %xmm5
1314 ; SSE2-NEXT: por %xmm2, %xmm5
1315 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1316 ; SSE2-NEXT: pxor %xmm10, %xmm2
1317 ; SSE2-NEXT: movdqa %xmm9, %xmm4
1318 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
1319 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1320 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2
1321 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1322 ; SSE2-NEXT: pand %xmm6, %xmm7
1323 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1324 ; SSE2-NEXT: por %xmm7, %xmm2
1325 ; SSE2-NEXT: pand %xmm2, %xmm3
1326 ; SSE2-NEXT: pandn %xmm8, %xmm2
1327 ; SSE2-NEXT: por %xmm3, %xmm2
1328 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1329 ; SSE2-NEXT: pxor %xmm10, %xmm3
1330 ; SSE2-NEXT: movdqa %xmm9, %xmm4
1331 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
1332 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1333 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3
1334 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1335 ; SSE2-NEXT: pand %xmm6, %xmm7
1336 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1337 ; SSE2-NEXT: por %xmm7, %xmm3
1338 ; SSE2-NEXT: pand %xmm3, %xmm0
1339 ; SSE2-NEXT: pandn %xmm8, %xmm3
1340 ; SSE2-NEXT: por %xmm0, %xmm3
1341 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1342 ; SSE2-NEXT: pxor %xmm10, %xmm0
1343 ; SSE2-NEXT: movdqa %xmm9, %xmm4
1344 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
1345 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1346 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
1347 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1348 ; SSE2-NEXT: pand %xmm6, %xmm0
1349 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1350 ; SSE2-NEXT: por %xmm0, %xmm4
1351 ; SSE2-NEXT: pand %xmm4, %xmm1
1352 ; SSE2-NEXT: pandn %xmm8, %xmm4
1353 ; SSE2-NEXT: por %xmm1, %xmm4
1354 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1355 ; SSE2-NEXT: pxor %xmm10, %xmm0
1356 ; SSE2-NEXT: movdqa %xmm0, %xmm1
1357 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm1
1358 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1359 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm0
1360 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1361 ; SSE2-NEXT: pand %xmm6, %xmm0
1362 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1363 ; SSE2-NEXT: por %xmm0, %xmm1
1364 ; SSE2-NEXT: pand %xmm4, %xmm1
1365 ; SSE2-NEXT: movdqa %xmm3, %xmm0
1366 ; SSE2-NEXT: pxor %xmm10, %xmm0
1367 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1368 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm4
1369 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1370 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm0
1371 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1372 ; SSE2-NEXT: pand %xmm6, %xmm7
1373 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1374 ; SSE2-NEXT: por %xmm7, %xmm0
1375 ; SSE2-NEXT: pand %xmm3, %xmm0
1376 ; SSE2-NEXT: packuswb %xmm1, %xmm0
1377 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1378 ; SSE2-NEXT: pxor %xmm10, %xmm1
1379 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1380 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm3
1381 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1382 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
1383 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1384 ; SSE2-NEXT: pand %xmm4, %xmm1
1385 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1386 ; SSE2-NEXT: por %xmm1, %xmm3
1387 ; SSE2-NEXT: pand %xmm2, %xmm3
1388 ; SSE2-NEXT: movdqa %xmm5, %xmm1
1389 ; SSE2-NEXT: pxor %xmm10, %xmm1
1390 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1391 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm2
1392 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1393 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
1394 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1395 ; SSE2-NEXT: pand %xmm4, %xmm1
1396 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1397 ; SSE2-NEXT: por %xmm1, %xmm2
1398 ; SSE2-NEXT: pand %xmm5, %xmm2
1399 ; SSE2-NEXT: packuswb %xmm3, %xmm2
1400 ; SSE2-NEXT: packuswb %xmm2, %xmm0
1401 ; SSE2-NEXT: packuswb %xmm0, %xmm0
1404 ; SSSE3-LABEL: trunc_packus_v8i64_v8i8:
1406 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [255,255]
1407 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1408 ; SSSE3-NEXT: movdqa %xmm2, %xmm5
1409 ; SSSE3-NEXT: pxor %xmm10, %xmm5
1410 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1411 ; SSSE3-NEXT: movdqa %xmm9, %xmm7
1412 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7
1413 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1414 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5
1415 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1416 ; SSSE3-NEXT: pand %xmm6, %xmm4
1417 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1418 ; SSSE3-NEXT: por %xmm4, %xmm5
1419 ; SSSE3-NEXT: pand %xmm5, %xmm2
1420 ; SSSE3-NEXT: pandn %xmm8, %xmm5
1421 ; SSSE3-NEXT: por %xmm2, %xmm5
1422 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1423 ; SSSE3-NEXT: pxor %xmm10, %xmm2
1424 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
1425 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4
1426 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1427 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2
1428 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1429 ; SSSE3-NEXT: pand %xmm6, %xmm7
1430 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1431 ; SSSE3-NEXT: por %xmm7, %xmm2
1432 ; SSSE3-NEXT: pand %xmm2, %xmm3
1433 ; SSSE3-NEXT: pandn %xmm8, %xmm2
1434 ; SSSE3-NEXT: por %xmm3, %xmm2
1435 ; SSSE3-NEXT: movdqa %xmm0, %xmm3
1436 ; SSSE3-NEXT: pxor %xmm10, %xmm3
1437 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
1438 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm4
1439 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1440 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3
1441 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1442 ; SSSE3-NEXT: pand %xmm6, %xmm7
1443 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1444 ; SSSE3-NEXT: por %xmm7, %xmm3
1445 ; SSSE3-NEXT: pand %xmm3, %xmm0
1446 ; SSSE3-NEXT: pandn %xmm8, %xmm3
1447 ; SSSE3-NEXT: por %xmm0, %xmm3
1448 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1449 ; SSSE3-NEXT: pxor %xmm10, %xmm0
1450 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
1451 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4
1452 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1453 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
1454 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1455 ; SSSE3-NEXT: pand %xmm6, %xmm0
1456 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1457 ; SSSE3-NEXT: por %xmm0, %xmm4
1458 ; SSSE3-NEXT: pand %xmm4, %xmm1
1459 ; SSSE3-NEXT: pandn %xmm8, %xmm4
1460 ; SSSE3-NEXT: por %xmm1, %xmm4
1461 ; SSSE3-NEXT: movdqa %xmm4, %xmm0
1462 ; SSSE3-NEXT: pxor %xmm10, %xmm0
1463 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
1464 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm1
1465 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1466 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0
1467 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1468 ; SSSE3-NEXT: pand %xmm6, %xmm0
1469 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1470 ; SSSE3-NEXT: por %xmm0, %xmm1
1471 ; SSSE3-NEXT: pand %xmm4, %xmm1
1472 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
1473 ; SSSE3-NEXT: pxor %xmm10, %xmm0
1474 ; SSSE3-NEXT: movdqa %xmm0, %xmm4
1475 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm4
1476 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1477 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0
1478 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1479 ; SSSE3-NEXT: pand %xmm6, %xmm7
1480 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1481 ; SSSE3-NEXT: por %xmm7, %xmm0
1482 ; SSSE3-NEXT: pand %xmm3, %xmm0
1483 ; SSSE3-NEXT: packuswb %xmm1, %xmm0
1484 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1485 ; SSSE3-NEXT: pxor %xmm10, %xmm1
1486 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
1487 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3
1488 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1489 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
1490 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1491 ; SSSE3-NEXT: pand %xmm4, %xmm1
1492 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1493 ; SSSE3-NEXT: por %xmm1, %xmm3
1494 ; SSSE3-NEXT: pand %xmm2, %xmm3
1495 ; SSSE3-NEXT: movdqa %xmm5, %xmm1
1496 ; SSSE3-NEXT: pxor %xmm10, %xmm1
1497 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
1498 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2
1499 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1500 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
1501 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1502 ; SSSE3-NEXT: pand %xmm4, %xmm1
1503 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1504 ; SSSE3-NEXT: por %xmm1, %xmm2
1505 ; SSSE3-NEXT: pand %xmm5, %xmm2
1506 ; SSSE3-NEXT: packuswb %xmm3, %xmm2
1507 ; SSSE3-NEXT: packuswb %xmm2, %xmm0
1508 ; SSSE3-NEXT: packuswb %xmm0, %xmm0
1511 ; SSE41-LABEL: trunc_packus_v8i64_v8i8:
1513 ; SSE41-NEXT: movdqa %xmm0, %xmm9
1514 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [255,255]
1515 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1516 ; SSE41-NEXT: movdqa %xmm2, %xmm0
1517 ; SSE41-NEXT: pxor %xmm10, %xmm0
1518 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [2147483903,2147483903]
1519 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1520 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm5
1521 ; SSE41-NEXT: movdqa %xmm4, %xmm6
1522 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
1523 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
1524 ; SSE41-NEXT: pand %xmm5, %xmm0
1525 ; SSE41-NEXT: por %xmm6, %xmm0
1526 ; SSE41-NEXT: movapd %xmm7, %xmm8
1527 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8
1528 ; SSE41-NEXT: movdqa %xmm3, %xmm0
1529 ; SSE41-NEXT: pxor %xmm10, %xmm0
1530 ; SSE41-NEXT: movdqa %xmm4, %xmm2
1531 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
1532 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1533 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
1534 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
1535 ; SSE41-NEXT: pand %xmm2, %xmm0
1536 ; SSE41-NEXT: por %xmm5, %xmm0
1537 ; SSE41-NEXT: movapd %xmm7, %xmm2
1538 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2
1539 ; SSE41-NEXT: movdqa %xmm9, %xmm0
1540 ; SSE41-NEXT: pxor %xmm10, %xmm0
1541 ; SSE41-NEXT: movdqa %xmm4, %xmm3
1542 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm3
1543 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1544 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
1545 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
1546 ; SSE41-NEXT: pand %xmm3, %xmm0
1547 ; SSE41-NEXT: por %xmm5, %xmm0
1548 ; SSE41-NEXT: movapd %xmm7, %xmm6
1549 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm6
1550 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1551 ; SSE41-NEXT: pxor %xmm10, %xmm0
1552 ; SSE41-NEXT: movdqa %xmm4, %xmm3
1553 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm3
1554 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4
1555 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
1556 ; SSE41-NEXT: pand %xmm3, %xmm0
1557 ; SSE41-NEXT: por %xmm4, %xmm0
1558 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7
1559 ; SSE41-NEXT: pxor %xmm3, %xmm3
1560 ; SSE41-NEXT: movapd %xmm7, %xmm1
1561 ; SSE41-NEXT: xorpd %xmm10, %xmm1
1562 ; SSE41-NEXT: movapd %xmm1, %xmm4
1563 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm4
1564 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1
1565 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
1566 ; SSE41-NEXT: pand %xmm4, %xmm0
1567 ; SSE41-NEXT: por %xmm1, %xmm0
1568 ; SSE41-NEXT: pxor %xmm4, %xmm4
1569 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm4
1570 ; SSE41-NEXT: movapd %xmm6, %xmm1
1571 ; SSE41-NEXT: xorpd %xmm10, %xmm1
1572 ; SSE41-NEXT: movapd %xmm1, %xmm5
1573 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
1574 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1
1575 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
1576 ; SSE41-NEXT: pand %xmm5, %xmm0
1577 ; SSE41-NEXT: por %xmm1, %xmm0
1578 ; SSE41-NEXT: pxor %xmm1, %xmm1
1579 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm1
1580 ; SSE41-NEXT: packusdw %xmm4, %xmm1
1581 ; SSE41-NEXT: movapd %xmm2, %xmm4
1582 ; SSE41-NEXT: xorpd %xmm10, %xmm4
1583 ; SSE41-NEXT: movapd %xmm4, %xmm5
1584 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
1585 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm4
1586 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
1587 ; SSE41-NEXT: pand %xmm5, %xmm0
1588 ; SSE41-NEXT: por %xmm4, %xmm0
1589 ; SSE41-NEXT: pxor %xmm4, %xmm4
1590 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4
1591 ; SSE41-NEXT: movapd %xmm8, %xmm2
1592 ; SSE41-NEXT: xorpd %xmm10, %xmm2
1593 ; SSE41-NEXT: movapd %xmm2, %xmm5
1594 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
1595 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm2
1596 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
1597 ; SSE41-NEXT: pand %xmm5, %xmm0
1598 ; SSE41-NEXT: por %xmm2, %xmm0
1599 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3
1600 ; SSE41-NEXT: packusdw %xmm4, %xmm3
1601 ; SSE41-NEXT: packusdw %xmm3, %xmm1
1602 ; SSE41-NEXT: packuswb %xmm1, %xmm1
1603 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1606 ; AVX1-LABEL: trunc_packus_v8i64_v8i8:
1608 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1609 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,255]
1610 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm8
1611 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
1612 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1613 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm7
1614 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm4
1615 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
1616 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
1617 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm9
1618 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm3, %xmm6
1619 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm7
1620 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
1621 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
1622 ; AVX1-NEXT: vblendvpd %xmm8, %xmm2, %xmm3, %xmm2
1623 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm2, %xmm3
1624 ; AVX1-NEXT: vpand %xmm2, %xmm3, %xmm2
1625 ; AVX1-NEXT: vpand %xmm1, %xmm5, %xmm1
1626 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
1627 ; AVX1-NEXT: vpand %xmm6, %xmm7, %xmm2
1628 ; AVX1-NEXT: vpand %xmm0, %xmm9, %xmm0
1629 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0
1630 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1631 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
1632 ; AVX1-NEXT: vzeroupper
1635 ; AVX2-LABEL: trunc_packus_v8i64_v8i8:
1637 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255]
1638 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
1639 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1640 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
1641 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1642 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1643 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3
1644 ; AVX2-NEXT: vpand %ymm0, %ymm3, %ymm0
1645 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm2
1646 ; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1
1647 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
1648 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u>
1649 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1650 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
1651 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
1652 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
1653 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
1654 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1655 ; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0
1656 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1657 ; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]
1658 ; AVX2-NEXT: vzeroupper
1661 ; AVX512-LABEL: trunc_packus_v8i64_v8i8:
1663 ; AVX512-NEXT: vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1664 ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
1665 ; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
1666 ; AVX512-NEXT: vpmovqb %zmm0, %xmm0
1667 ; AVX512-NEXT: vzeroupper
1669 %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
1670 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
1671 %3 = icmp sgt <8 x i64> %2, zeroinitializer
1672 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
1673 %5 = trunc <8 x i64> %4 to <8 x i8>
1677 define void @trunc_packus_v8i64_v8i8_store(<8 x i64> %a0, <8 x i8> *%p1) {
1678 ; SSE2-LABEL: trunc_packus_v8i64_v8i8_store:
1680 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [255,255]
1681 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1682 ; SSE2-NEXT: movdqa %xmm2, %xmm5
1683 ; SSE2-NEXT: pxor %xmm10, %xmm5
1684 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1685 ; SSE2-NEXT: movdqa %xmm9, %xmm7
1686 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
1687 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1688 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5
1689 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1690 ; SSE2-NEXT: pand %xmm6, %xmm4
1691 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1692 ; SSE2-NEXT: por %xmm4, %xmm5
1693 ; SSE2-NEXT: pand %xmm5, %xmm2
1694 ; SSE2-NEXT: pandn %xmm8, %xmm5
1695 ; SSE2-NEXT: por %xmm2, %xmm5
1696 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1697 ; SSE2-NEXT: pxor %xmm10, %xmm2
1698 ; SSE2-NEXT: movdqa %xmm9, %xmm4
1699 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
1700 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1701 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2
1702 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1703 ; SSE2-NEXT: pand %xmm6, %xmm7
1704 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1705 ; SSE2-NEXT: por %xmm7, %xmm2
1706 ; SSE2-NEXT: pand %xmm2, %xmm3
1707 ; SSE2-NEXT: pandn %xmm8, %xmm2
1708 ; SSE2-NEXT: por %xmm3, %xmm2
1709 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1710 ; SSE2-NEXT: pxor %xmm10, %xmm3
1711 ; SSE2-NEXT: movdqa %xmm9, %xmm4
1712 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
1713 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1714 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3
1715 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1716 ; SSE2-NEXT: pand %xmm6, %xmm7
1717 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1718 ; SSE2-NEXT: por %xmm7, %xmm3
1719 ; SSE2-NEXT: pand %xmm3, %xmm0
1720 ; SSE2-NEXT: pandn %xmm8, %xmm3
1721 ; SSE2-NEXT: por %xmm0, %xmm3
1722 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1723 ; SSE2-NEXT: pxor %xmm10, %xmm0
1724 ; SSE2-NEXT: movdqa %xmm9, %xmm4
1725 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
1726 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1727 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
1728 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1729 ; SSE2-NEXT: pand %xmm6, %xmm0
1730 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1731 ; SSE2-NEXT: por %xmm0, %xmm4
1732 ; SSE2-NEXT: pand %xmm4, %xmm1
1733 ; SSE2-NEXT: pandn %xmm8, %xmm4
1734 ; SSE2-NEXT: por %xmm1, %xmm4
1735 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1736 ; SSE2-NEXT: pxor %xmm10, %xmm0
1737 ; SSE2-NEXT: movdqa %xmm0, %xmm1
1738 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm1
1739 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1740 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm0
1741 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1742 ; SSE2-NEXT: pand %xmm6, %xmm0
1743 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1744 ; SSE2-NEXT: por %xmm0, %xmm1
1745 ; SSE2-NEXT: pand %xmm4, %xmm1
1746 ; SSE2-NEXT: movdqa %xmm3, %xmm0
1747 ; SSE2-NEXT: pxor %xmm10, %xmm0
1748 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1749 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm4
1750 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1751 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm0
1752 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1753 ; SSE2-NEXT: pand %xmm6, %xmm7
1754 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1755 ; SSE2-NEXT: por %xmm7, %xmm0
1756 ; SSE2-NEXT: pand %xmm3, %xmm0
1757 ; SSE2-NEXT: packuswb %xmm1, %xmm0
1758 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1759 ; SSE2-NEXT: pxor %xmm10, %xmm1
1760 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1761 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm3
1762 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1763 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
1764 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1765 ; SSE2-NEXT: pand %xmm4, %xmm1
1766 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1767 ; SSE2-NEXT: por %xmm1, %xmm3
1768 ; SSE2-NEXT: pand %xmm2, %xmm3
1769 ; SSE2-NEXT: movdqa %xmm5, %xmm1
1770 ; SSE2-NEXT: pxor %xmm10, %xmm1
1771 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1772 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm2
1773 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1774 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm1
1775 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1776 ; SSE2-NEXT: pand %xmm4, %xmm1
1777 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1778 ; SSE2-NEXT: por %xmm1, %xmm2
1779 ; SSE2-NEXT: pand %xmm5, %xmm2
1780 ; SSE2-NEXT: packuswb %xmm3, %xmm2
1781 ; SSE2-NEXT: packuswb %xmm2, %xmm0
1782 ; SSE2-NEXT: packuswb %xmm0, %xmm0
1783 ; SSE2-NEXT: movq %xmm0, (%rdi)
1786 ; SSSE3-LABEL: trunc_packus_v8i64_v8i8_store:
1788 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [255,255]
1789 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1790 ; SSSE3-NEXT: movdqa %xmm2, %xmm5
1791 ; SSSE3-NEXT: pxor %xmm10, %xmm5
1792 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1793 ; SSSE3-NEXT: movdqa %xmm9, %xmm7
1794 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7
1795 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1796 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5
1797 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1798 ; SSSE3-NEXT: pand %xmm6, %xmm4
1799 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1800 ; SSSE3-NEXT: por %xmm4, %xmm5
1801 ; SSSE3-NEXT: pand %xmm5, %xmm2
1802 ; SSSE3-NEXT: pandn %xmm8, %xmm5
1803 ; SSSE3-NEXT: por %xmm2, %xmm5
1804 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1805 ; SSSE3-NEXT: pxor %xmm10, %xmm2
1806 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
1807 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4
1808 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1809 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2
1810 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1811 ; SSSE3-NEXT: pand %xmm6, %xmm7
1812 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1813 ; SSSE3-NEXT: por %xmm7, %xmm2
1814 ; SSSE3-NEXT: pand %xmm2, %xmm3
1815 ; SSSE3-NEXT: pandn %xmm8, %xmm2
1816 ; SSSE3-NEXT: por %xmm3, %xmm2
1817 ; SSSE3-NEXT: movdqa %xmm0, %xmm3
1818 ; SSSE3-NEXT: pxor %xmm10, %xmm3
1819 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
1820 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm4
1821 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1822 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3
1823 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1824 ; SSSE3-NEXT: pand %xmm6, %xmm7
1825 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1826 ; SSSE3-NEXT: por %xmm7, %xmm3
1827 ; SSSE3-NEXT: pand %xmm3, %xmm0
1828 ; SSSE3-NEXT: pandn %xmm8, %xmm3
1829 ; SSSE3-NEXT: por %xmm0, %xmm3
1830 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1831 ; SSSE3-NEXT: pxor %xmm10, %xmm0
1832 ; SSSE3-NEXT: movdqa %xmm9, %xmm4
1833 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4
1834 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1835 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
1836 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1837 ; SSSE3-NEXT: pand %xmm6, %xmm0
1838 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1839 ; SSSE3-NEXT: por %xmm0, %xmm4
1840 ; SSSE3-NEXT: pand %xmm4, %xmm1
1841 ; SSSE3-NEXT: pandn %xmm8, %xmm4
1842 ; SSSE3-NEXT: por %xmm1, %xmm4
1843 ; SSSE3-NEXT: movdqa %xmm4, %xmm0
1844 ; SSSE3-NEXT: pxor %xmm10, %xmm0
1845 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
1846 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm1
1847 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1848 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0
1849 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1850 ; SSSE3-NEXT: pand %xmm6, %xmm0
1851 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1852 ; SSSE3-NEXT: por %xmm0, %xmm1
1853 ; SSSE3-NEXT: pand %xmm4, %xmm1
1854 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
1855 ; SSSE3-NEXT: pxor %xmm10, %xmm0
1856 ; SSSE3-NEXT: movdqa %xmm0, %xmm4
1857 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm4
1858 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1859 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm0
1860 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1861 ; SSSE3-NEXT: pand %xmm6, %xmm7
1862 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1863 ; SSSE3-NEXT: por %xmm7, %xmm0
1864 ; SSSE3-NEXT: pand %xmm3, %xmm0
1865 ; SSSE3-NEXT: packuswb %xmm1, %xmm0
1866 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1867 ; SSSE3-NEXT: pxor %xmm10, %xmm1
1868 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
1869 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm3
1870 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1871 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
1872 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1873 ; SSSE3-NEXT: pand %xmm4, %xmm1
1874 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1875 ; SSSE3-NEXT: por %xmm1, %xmm3
1876 ; SSSE3-NEXT: pand %xmm2, %xmm3
1877 ; SSSE3-NEXT: movdqa %xmm5, %xmm1
1878 ; SSSE3-NEXT: pxor %xmm10, %xmm1
1879 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
1880 ; SSSE3-NEXT: pcmpgtd %xmm10, %xmm2
1881 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1882 ; SSSE3-NEXT: pcmpeqd %xmm10, %xmm1
1883 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1884 ; SSSE3-NEXT: pand %xmm4, %xmm1
1885 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1886 ; SSSE3-NEXT: por %xmm1, %xmm2
1887 ; SSSE3-NEXT: pand %xmm5, %xmm2
1888 ; SSSE3-NEXT: packuswb %xmm3, %xmm2
1889 ; SSSE3-NEXT: packuswb %xmm2, %xmm0
1890 ; SSSE3-NEXT: packuswb %xmm0, %xmm0
1891 ; SSSE3-NEXT: movq %xmm0, (%rdi)
1894 ; SSE41-LABEL: trunc_packus_v8i64_v8i8_store:
1896 ; SSE41-NEXT: movdqa %xmm0, %xmm9
1897 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [255,255]
1898 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1899 ; SSE41-NEXT: movdqa %xmm2, %xmm0
1900 ; SSE41-NEXT: pxor %xmm10, %xmm0
1901 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [2147483903,2147483903]
1902 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1903 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm5
1904 ; SSE41-NEXT: movdqa %xmm4, %xmm6
1905 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
1906 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
1907 ; SSE41-NEXT: pand %xmm5, %xmm0
1908 ; SSE41-NEXT: por %xmm6, %xmm0
1909 ; SSE41-NEXT: movapd %xmm7, %xmm8
1910 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8
1911 ; SSE41-NEXT: movdqa %xmm3, %xmm0
1912 ; SSE41-NEXT: pxor %xmm10, %xmm0
1913 ; SSE41-NEXT: movdqa %xmm4, %xmm2
1914 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
1915 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1916 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
1917 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
1918 ; SSE41-NEXT: pand %xmm2, %xmm0
1919 ; SSE41-NEXT: por %xmm5, %xmm0
1920 ; SSE41-NEXT: movapd %xmm7, %xmm2
1921 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm2
1922 ; SSE41-NEXT: movdqa %xmm9, %xmm0
1923 ; SSE41-NEXT: pxor %xmm10, %xmm0
1924 ; SSE41-NEXT: movdqa %xmm4, %xmm3
1925 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm3
1926 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1927 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
1928 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
1929 ; SSE41-NEXT: pand %xmm3, %xmm0
1930 ; SSE41-NEXT: por %xmm5, %xmm0
1931 ; SSE41-NEXT: movapd %xmm7, %xmm3
1932 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm3
1933 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1934 ; SSE41-NEXT: pxor %xmm10, %xmm0
1935 ; SSE41-NEXT: movdqa %xmm4, %xmm5
1936 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm5
1937 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4
1938 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
1939 ; SSE41-NEXT: pand %xmm5, %xmm0
1940 ; SSE41-NEXT: por %xmm4, %xmm0
1941 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7
1942 ; SSE41-NEXT: xorpd %xmm1, %xmm1
1943 ; SSE41-NEXT: movapd %xmm7, %xmm4
1944 ; SSE41-NEXT: xorpd %xmm10, %xmm4
1945 ; SSE41-NEXT: movapd %xmm4, %xmm5
1946 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
1947 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm4
1948 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
1949 ; SSE41-NEXT: pand %xmm5, %xmm0
1950 ; SSE41-NEXT: por %xmm4, %xmm0
1951 ; SSE41-NEXT: pxor %xmm5, %xmm5
1952 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm5
1953 ; SSE41-NEXT: movapd %xmm3, %xmm4
1954 ; SSE41-NEXT: xorpd %xmm10, %xmm4
1955 ; SSE41-NEXT: movapd %xmm4, %xmm6
1956 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm6
1957 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm4
1958 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
1959 ; SSE41-NEXT: pand %xmm6, %xmm0
1960 ; SSE41-NEXT: por %xmm4, %xmm0
1961 ; SSE41-NEXT: pxor %xmm4, %xmm4
1962 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm4
1963 ; SSE41-NEXT: packusdw %xmm5, %xmm4
1964 ; SSE41-NEXT: movapd %xmm2, %xmm3
1965 ; SSE41-NEXT: xorpd %xmm10, %xmm3
1966 ; SSE41-NEXT: movapd %xmm3, %xmm5
1967 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
1968 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm3
1969 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
1970 ; SSE41-NEXT: pand %xmm5, %xmm0
1971 ; SSE41-NEXT: por %xmm3, %xmm0
1972 ; SSE41-NEXT: pxor %xmm3, %xmm3
1973 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm3
1974 ; SSE41-NEXT: movapd %xmm8, %xmm2
1975 ; SSE41-NEXT: xorpd %xmm10, %xmm2
1976 ; SSE41-NEXT: movapd %xmm2, %xmm5
1977 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5
1978 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm2
1979 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
1980 ; SSE41-NEXT: pand %xmm5, %xmm0
1981 ; SSE41-NEXT: por %xmm2, %xmm0
1982 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm1
1983 ; SSE41-NEXT: packusdw %xmm3, %xmm1
1984 ; SSE41-NEXT: packusdw %xmm1, %xmm4
1985 ; SSE41-NEXT: packuswb %xmm0, %xmm4
1986 ; SSE41-NEXT: movq %xmm4, (%rdi)
1989 ; AVX1-LABEL: trunc_packus_v8i64_v8i8_store:
1991 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1992 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,255]
1993 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm8
1994 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
1995 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1996 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm7
1997 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm4
1998 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
1999 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
2000 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm9
2001 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm3, %xmm6
2002 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm7
2003 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
2004 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
2005 ; AVX1-NEXT: vblendvpd %xmm8, %xmm2, %xmm3, %xmm2
2006 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm2, %xmm3
2007 ; AVX1-NEXT: vpand %xmm2, %xmm3, %xmm2
2008 ; AVX1-NEXT: vpand %xmm1, %xmm5, %xmm1
2009 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
2010 ; AVX1-NEXT: vpand %xmm6, %xmm7, %xmm2
2011 ; AVX1-NEXT: vpand %xmm0, %xmm9, %xmm0
2012 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0
2013 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
2014 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
2015 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
2016 ; AVX1-NEXT: vzeroupper
2019 ; AVX2-LABEL: trunc_packus_v8i64_v8i8_store:
2021 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255]
2022 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
2023 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
2024 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
2025 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
2026 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
2027 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3
2028 ; AVX2-NEXT: vpand %ymm0, %ymm3, %ymm0
2029 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm2
2030 ; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1
2031 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
2032 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u>
2033 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
2034 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
2035 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
2036 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
2037 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2038 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
2039 ; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0
2040 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
2041 ; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]
2042 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
2043 ; AVX2-NEXT: vzeroupper
2046 ; AVX512-LABEL: trunc_packus_v8i64_v8i8_store:
2048 ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
2049 ; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
2050 ; AVX512-NEXT: vpmovusqb %zmm0, (%rdi)
2051 ; AVX512-NEXT: vzeroupper
2053 %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
2054 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
2055 %3 = icmp sgt <8 x i64> %2, zeroinitializer
2056 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
2057 %5 = trunc <8 x i64> %4 to <8 x i8>
2058 store <8 x i8> %5, <8 x i8> *%p1
2062 define <16 x i8> @trunc_packus_v16i64_v16i8(<16 x i64> %a0) {
2063 ; SSE2-LABEL: trunc_packus_v16i64_v16i8:
2065 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [255,255]
2066 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
2067 ; SSE2-NEXT: movdqa %xmm6, %xmm9
2068 ; SSE2-NEXT: pxor %xmm8, %xmm9
2069 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
2070 ; SSE2-NEXT: movdqa %xmm11, %xmm12
2071 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12
2072 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2073 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9
2074 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
2075 ; SSE2-NEXT: pand %xmm13, %xmm14
2076 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
2077 ; SSE2-NEXT: por %xmm14, %xmm9
2078 ; SSE2-NEXT: pand %xmm9, %xmm6
2079 ; SSE2-NEXT: pandn %xmm10, %xmm9
2080 ; SSE2-NEXT: por %xmm6, %xmm9
2081 ; SSE2-NEXT: movdqa %xmm7, %xmm6
2082 ; SSE2-NEXT: pxor %xmm8, %xmm6
2083 ; SSE2-NEXT: movdqa %xmm11, %xmm12
2084 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm12
2085 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2086 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm6
2087 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2088 ; SSE2-NEXT: pand %xmm13, %xmm6
2089 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
2090 ; SSE2-NEXT: por %xmm6, %xmm12
2091 ; SSE2-NEXT: pand %xmm12, %xmm7
2092 ; SSE2-NEXT: pandn %xmm10, %xmm12
2093 ; SSE2-NEXT: por %xmm7, %xmm12
2094 ; SSE2-NEXT: movdqa %xmm4, %xmm6
2095 ; SSE2-NEXT: pxor %xmm8, %xmm6
2096 ; SSE2-NEXT: movdqa %xmm11, %xmm7
2097 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
2098 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2]
2099 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm6
2100 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2101 ; SSE2-NEXT: pand %xmm13, %xmm6
2102 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
2103 ; SSE2-NEXT: por %xmm6, %xmm13
2104 ; SSE2-NEXT: pand %xmm13, %xmm4
2105 ; SSE2-NEXT: pandn %xmm10, %xmm13
2106 ; SSE2-NEXT: por %xmm4, %xmm13
2107 ; SSE2-NEXT: movdqa %xmm5, %xmm4
2108 ; SSE2-NEXT: pxor %xmm8, %xmm4
2109 ; SSE2-NEXT: movdqa %xmm11, %xmm6
2110 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
2111 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2112 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm4
2113 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2114 ; SSE2-NEXT: pand %xmm7, %xmm4
2115 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
2116 ; SSE2-NEXT: por %xmm4, %xmm14
2117 ; SSE2-NEXT: pand %xmm14, %xmm5
2118 ; SSE2-NEXT: pandn %xmm10, %xmm14
2119 ; SSE2-NEXT: por %xmm5, %xmm14
2120 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2121 ; SSE2-NEXT: pxor %xmm8, %xmm4
2122 ; SSE2-NEXT: movdqa %xmm11, %xmm5
2123 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
2124 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
2125 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm4
2126 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2127 ; SSE2-NEXT: pand %xmm7, %xmm4
2128 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2129 ; SSE2-NEXT: por %xmm4, %xmm5
2130 ; SSE2-NEXT: pand %xmm5, %xmm2
2131 ; SSE2-NEXT: pandn %xmm10, %xmm5
2132 ; SSE2-NEXT: por %xmm2, %xmm5
2133 ; SSE2-NEXT: movdqa %xmm3, %xmm2
2134 ; SSE2-NEXT: pxor %xmm8, %xmm2
2135 ; SSE2-NEXT: movdqa %xmm11, %xmm4
2136 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
2137 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
2138 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm2
2139 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
2140 ; SSE2-NEXT: pand %xmm7, %xmm6
2141 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
2142 ; SSE2-NEXT: por %xmm6, %xmm2
2143 ; SSE2-NEXT: pand %xmm2, %xmm3
2144 ; SSE2-NEXT: pandn %xmm10, %xmm2
2145 ; SSE2-NEXT: por %xmm3, %xmm2
2146 ; SSE2-NEXT: movdqa %xmm0, %xmm3
2147 ; SSE2-NEXT: pxor %xmm8, %xmm3
2148 ; SSE2-NEXT: movdqa %xmm11, %xmm4
2149 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
2150 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2151 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm3
2152 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
2153 ; SSE2-NEXT: pand %xmm6, %xmm7
2154 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2155 ; SSE2-NEXT: por %xmm7, %xmm3
2156 ; SSE2-NEXT: pand %xmm3, %xmm0
2157 ; SSE2-NEXT: pandn %xmm10, %xmm3
2158 ; SSE2-NEXT: por %xmm0, %xmm3
2159 ; SSE2-NEXT: movdqa %xmm1, %xmm0
2160 ; SSE2-NEXT: pxor %xmm8, %xmm0
2161 ; SSE2-NEXT: movdqa %xmm11, %xmm4
2162 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
2163 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2164 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0
2165 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2166 ; SSE2-NEXT: pand %xmm6, %xmm0
2167 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2168 ; SSE2-NEXT: por %xmm0, %xmm4
2169 ; SSE2-NEXT: pand %xmm4, %xmm1
2170 ; SSE2-NEXT: pandn %xmm10, %xmm4
2171 ; SSE2-NEXT: por %xmm1, %xmm4
2172 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2173 ; SSE2-NEXT: pxor %xmm8, %xmm0
2174 ; SSE2-NEXT: movdqa %xmm0, %xmm1
2175 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm1
2176 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
2177 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
2178 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2179 ; SSE2-NEXT: pand %xmm6, %xmm0
2180 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2181 ; SSE2-NEXT: por %xmm0, %xmm1
2182 ; SSE2-NEXT: pand %xmm4, %xmm1
2183 ; SSE2-NEXT: movdqa %xmm3, %xmm0
2184 ; SSE2-NEXT: pxor %xmm8, %xmm0
2185 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2186 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm4
2187 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2188 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
2189 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2190 ; SSE2-NEXT: pand %xmm6, %xmm7
2191 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2192 ; SSE2-NEXT: por %xmm7, %xmm0
2193 ; SSE2-NEXT: pand %xmm3, %xmm0
2194 ; SSE2-NEXT: packuswb %xmm1, %xmm0
2195 ; SSE2-NEXT: movdqa %xmm2, %xmm1
2196 ; SSE2-NEXT: pxor %xmm8, %xmm1
2197 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2198 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm3
2199 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2200 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm1
2201 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2202 ; SSE2-NEXT: pand %xmm4, %xmm1
2203 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2204 ; SSE2-NEXT: por %xmm1, %xmm3
2205 ; SSE2-NEXT: pand %xmm2, %xmm3
2206 ; SSE2-NEXT: movdqa %xmm5, %xmm1
2207 ; SSE2-NEXT: pxor %xmm8, %xmm1
2208 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2209 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm2
2210 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2211 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm1
2212 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2213 ; SSE2-NEXT: pand %xmm4, %xmm1
2214 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2215 ; SSE2-NEXT: por %xmm1, %xmm2
2216 ; SSE2-NEXT: pand %xmm5, %xmm2
2217 ; SSE2-NEXT: packuswb %xmm3, %xmm2
2218 ; SSE2-NEXT: packuswb %xmm2, %xmm0
2219 ; SSE2-NEXT: movdqa %xmm14, %xmm1
2220 ; SSE2-NEXT: pxor %xmm8, %xmm1
2221 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2222 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm2
2223 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2224 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm1
2225 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2226 ; SSE2-NEXT: pand %xmm3, %xmm1
2227 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2228 ; SSE2-NEXT: por %xmm1, %xmm2
2229 ; SSE2-NEXT: pand %xmm14, %xmm2
2230 ; SSE2-NEXT: movdqa %xmm13, %xmm1
2231 ; SSE2-NEXT: pxor %xmm8, %xmm1
2232 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2233 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm3
2234 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2235 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm1
2236 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
2237 ; SSE2-NEXT: pand %xmm4, %xmm5
2238 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2239 ; SSE2-NEXT: por %xmm5, %xmm1
2240 ; SSE2-NEXT: pand %xmm13, %xmm1
2241 ; SSE2-NEXT: packuswb %xmm2, %xmm1
2242 ; SSE2-NEXT: movdqa %xmm12, %xmm2
2243 ; SSE2-NEXT: pxor %xmm8, %xmm2
2244 ; SSE2-NEXT: movdqa %xmm2, %xmm3
2245 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm3
2246 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2247 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm2
2248 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2249 ; SSE2-NEXT: pand %xmm4, %xmm2
2250 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2251 ; SSE2-NEXT: por %xmm2, %xmm3
2252 ; SSE2-NEXT: pand %xmm12, %xmm3
2253 ; SSE2-NEXT: movdqa %xmm9, %xmm2
2254 ; SSE2-NEXT: pxor %xmm8, %xmm2
2255 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2256 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm4
2257 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2258 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm2
2259 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2260 ; SSE2-NEXT: pand %xmm5, %xmm2
2261 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2262 ; SSE2-NEXT: por %xmm2, %xmm4
2263 ; SSE2-NEXT: pand %xmm9, %xmm4
2264 ; SSE2-NEXT: packuswb %xmm3, %xmm4
2265 ; SSE2-NEXT: packuswb %xmm4, %xmm1
2266 ; SSE2-NEXT: packuswb %xmm1, %xmm0
2269 ; SSSE3-LABEL: trunc_packus_v16i64_v16i8:
2271 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [255,255]
2272 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
2273 ; SSSE3-NEXT: movdqa %xmm6, %xmm9
2274 ; SSSE3-NEXT: pxor %xmm8, %xmm9
2275 ; SSSE3-NEXT: movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
2276 ; SSSE3-NEXT: movdqa %xmm11, %xmm12
2277 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm12
2278 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2279 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm9
2280 ; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
2281 ; SSSE3-NEXT: pand %xmm13, %xmm14
2282 ; SSSE3-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
2283 ; SSSE3-NEXT: por %xmm14, %xmm9
2284 ; SSSE3-NEXT: pand %xmm9, %xmm6
2285 ; SSSE3-NEXT: pandn %xmm10, %xmm9
2286 ; SSSE3-NEXT: por %xmm6, %xmm9
2287 ; SSSE3-NEXT: movdqa %xmm7, %xmm6
2288 ; SSSE3-NEXT: pxor %xmm8, %xmm6
2289 ; SSSE3-NEXT: movdqa %xmm11, %xmm12
2290 ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm12
2291 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2292 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6
2293 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2294 ; SSSE3-NEXT: pand %xmm13, %xmm6
2295 ; SSSE3-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
2296 ; SSSE3-NEXT: por %xmm6, %xmm12
2297 ; SSSE3-NEXT: pand %xmm12, %xmm7
2298 ; SSSE3-NEXT: pandn %xmm10, %xmm12
2299 ; SSSE3-NEXT: por %xmm7, %xmm12
2300 ; SSSE3-NEXT: movdqa %xmm4, %xmm6
2301 ; SSSE3-NEXT: pxor %xmm8, %xmm6
2302 ; SSSE3-NEXT: movdqa %xmm11, %xmm7
2303 ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm7
2304 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2]
2305 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6
2306 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2307 ; SSSE3-NEXT: pand %xmm13, %xmm6
2308 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
2309 ; SSSE3-NEXT: por %xmm6, %xmm13
2310 ; SSSE3-NEXT: pand %xmm13, %xmm4
2311 ; SSSE3-NEXT: pandn %xmm10, %xmm13
2312 ; SSSE3-NEXT: por %xmm4, %xmm13
2313 ; SSSE3-NEXT: movdqa %xmm5, %xmm4
2314 ; SSSE3-NEXT: pxor %xmm8, %xmm4
2315 ; SSSE3-NEXT: movdqa %xmm11, %xmm6
2316 ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6
2317 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2318 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4
2319 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2320 ; SSSE3-NEXT: pand %xmm7, %xmm4
2321 ; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
2322 ; SSSE3-NEXT: por %xmm4, %xmm14
2323 ; SSSE3-NEXT: pand %xmm14, %xmm5
2324 ; SSSE3-NEXT: pandn %xmm10, %xmm14
2325 ; SSSE3-NEXT: por %xmm5, %xmm14
2326 ; SSSE3-NEXT: movdqa %xmm2, %xmm4
2327 ; SSSE3-NEXT: pxor %xmm8, %xmm4
2328 ; SSSE3-NEXT: movdqa %xmm11, %xmm5
2329 ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm5
2330 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
2331 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4
2332 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2333 ; SSSE3-NEXT: pand %xmm7, %xmm4
2334 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2335 ; SSSE3-NEXT: por %xmm4, %xmm5
2336 ; SSSE3-NEXT: pand %xmm5, %xmm2
2337 ; SSSE3-NEXT: pandn %xmm10, %xmm5
2338 ; SSSE3-NEXT: por %xmm2, %xmm5
2339 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
2340 ; SSSE3-NEXT: pxor %xmm8, %xmm2
2341 ; SSSE3-NEXT: movdqa %xmm11, %xmm4
2342 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4
2343 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
2344 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm2
2345 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
2346 ; SSSE3-NEXT: pand %xmm7, %xmm6
2347 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
2348 ; SSSE3-NEXT: por %xmm6, %xmm2
2349 ; SSSE3-NEXT: pand %xmm2, %xmm3
2350 ; SSSE3-NEXT: pandn %xmm10, %xmm2
2351 ; SSSE3-NEXT: por %xmm3, %xmm2
2352 ; SSSE3-NEXT: movdqa %xmm0, %xmm3
2353 ; SSSE3-NEXT: pxor %xmm8, %xmm3
2354 ; SSSE3-NEXT: movdqa %xmm11, %xmm4
2355 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm4
2356 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2357 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm3
2358 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
2359 ; SSSE3-NEXT: pand %xmm6, %xmm7
2360 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2361 ; SSSE3-NEXT: por %xmm7, %xmm3
2362 ; SSSE3-NEXT: pand %xmm3, %xmm0
2363 ; SSSE3-NEXT: pandn %xmm10, %xmm3
2364 ; SSSE3-NEXT: por %xmm0, %xmm3
2365 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
2366 ; SSSE3-NEXT: pxor %xmm8, %xmm0
2367 ; SSSE3-NEXT: movdqa %xmm11, %xmm4
2368 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4
2369 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2370 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0
2371 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2372 ; SSSE3-NEXT: pand %xmm6, %xmm0
2373 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2374 ; SSSE3-NEXT: por %xmm0, %xmm4
2375 ; SSSE3-NEXT: pand %xmm4, %xmm1
2376 ; SSSE3-NEXT: pandn %xmm10, %xmm4
2377 ; SSSE3-NEXT: por %xmm1, %xmm4
2378 ; SSSE3-NEXT: movdqa %xmm4, %xmm0
2379 ; SSSE3-NEXT: pxor %xmm8, %xmm0
2380 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
2381 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm1
2382 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
2383 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm0
2384 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2385 ; SSSE3-NEXT: pand %xmm6, %xmm0
2386 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2387 ; SSSE3-NEXT: por %xmm0, %xmm1
2388 ; SSSE3-NEXT: pand %xmm4, %xmm1
2389 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
2390 ; SSSE3-NEXT: pxor %xmm8, %xmm0
2391 ; SSSE3-NEXT: movdqa %xmm0, %xmm4
2392 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm4
2393 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2394 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm0
2395 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2396 ; SSSE3-NEXT: pand %xmm6, %xmm7
2397 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2398 ; SSSE3-NEXT: por %xmm7, %xmm0
2399 ; SSSE3-NEXT: pand %xmm3, %xmm0
2400 ; SSSE3-NEXT: packuswb %xmm1, %xmm0
2401 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
2402 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2403 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
2404 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm3
2405 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2406 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1
2407 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2408 ; SSSE3-NEXT: pand %xmm4, %xmm1
2409 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2410 ; SSSE3-NEXT: por %xmm1, %xmm3
2411 ; SSSE3-NEXT: pand %xmm2, %xmm3
2412 ; SSSE3-NEXT: movdqa %xmm5, %xmm1
2413 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2414 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
2415 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm2
2416 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2417 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1
2418 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2419 ; SSSE3-NEXT: pand %xmm4, %xmm1
2420 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2421 ; SSSE3-NEXT: por %xmm1, %xmm2
2422 ; SSSE3-NEXT: pand %xmm5, %xmm2
2423 ; SSSE3-NEXT: packuswb %xmm3, %xmm2
2424 ; SSSE3-NEXT: packuswb %xmm2, %xmm0
2425 ; SSSE3-NEXT: movdqa %xmm14, %xmm1
2426 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2427 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
2428 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm2
2429 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2430 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1
2431 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2432 ; SSSE3-NEXT: pand %xmm3, %xmm1
2433 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2434 ; SSSE3-NEXT: por %xmm1, %xmm2
2435 ; SSSE3-NEXT: pand %xmm14, %xmm2
2436 ; SSSE3-NEXT: movdqa %xmm13, %xmm1
2437 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2438 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
2439 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm3
2440 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2441 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm1
2442 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
2443 ; SSSE3-NEXT: pand %xmm4, %xmm5
2444 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2445 ; SSSE3-NEXT: por %xmm5, %xmm1
2446 ; SSSE3-NEXT: pand %xmm13, %xmm1
2447 ; SSSE3-NEXT: packuswb %xmm2, %xmm1
2448 ; SSSE3-NEXT: movdqa %xmm12, %xmm2
2449 ; SSSE3-NEXT: pxor %xmm8, %xmm2
2450 ; SSSE3-NEXT: movdqa %xmm2, %xmm3
2451 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm3
2452 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2453 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm2
2454 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2455 ; SSSE3-NEXT: pand %xmm4, %xmm2
2456 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2457 ; SSSE3-NEXT: por %xmm2, %xmm3
2458 ; SSSE3-NEXT: pand %xmm12, %xmm3
2459 ; SSSE3-NEXT: movdqa %xmm9, %xmm2
2460 ; SSSE3-NEXT: pxor %xmm8, %xmm2
2461 ; SSSE3-NEXT: movdqa %xmm2, %xmm4
2462 ; SSSE3-NEXT: pcmpgtd %xmm8, %xmm4
2463 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2464 ; SSSE3-NEXT: pcmpeqd %xmm8, %xmm2
2465 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2466 ; SSSE3-NEXT: pand %xmm5, %xmm2
2467 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2468 ; SSSE3-NEXT: por %xmm2, %xmm4
2469 ; SSSE3-NEXT: pand %xmm9, %xmm4
2470 ; SSSE3-NEXT: packuswb %xmm3, %xmm4
2471 ; SSSE3-NEXT: packuswb %xmm4, %xmm1
2472 ; SSSE3-NEXT: packuswb %xmm1, %xmm0
2475 ; SSE41-LABEL: trunc_packus_v16i64_v16i8:
2477 ; SSE41-NEXT: movdqa %xmm0, %xmm8
2478 ; SSE41-NEXT: movapd {{.*#+}} xmm11 = [255,255]
2479 ; SSE41-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648]
2480 ; SSE41-NEXT: movdqa %xmm6, %xmm0
2481 ; SSE41-NEXT: pxor %xmm9, %xmm0
2482 ; SSE41-NEXT: movdqa {{.*#+}} xmm12 = [2147483903,2147483903]
2483 ; SSE41-NEXT: movdqa %xmm12, %xmm10
2484 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm10
2485 ; SSE41-NEXT: movdqa %xmm12, %xmm13
2486 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm13
2487 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm13[0,0,2,2]
2488 ; SSE41-NEXT: pand %xmm10, %xmm0
2489 ; SSE41-NEXT: por %xmm13, %xmm0
2490 ; SSE41-NEXT: movapd %xmm11, %xmm10
2491 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm10
2492 ; SSE41-NEXT: movdqa %xmm7, %xmm0
2493 ; SSE41-NEXT: pxor %xmm9, %xmm0
2494 ; SSE41-NEXT: movdqa %xmm12, %xmm13
2495 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm13
2496 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2497 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
2498 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
2499 ; SSE41-NEXT: pand %xmm13, %xmm0
2500 ; SSE41-NEXT: por %xmm6, %xmm0
2501 ; SSE41-NEXT: movapd %xmm11, %xmm13
2502 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm13
2503 ; SSE41-NEXT: movdqa %xmm4, %xmm0
2504 ; SSE41-NEXT: pxor %xmm9, %xmm0
2505 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2506 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm6
2507 ; SSE41-NEXT: movdqa %xmm12, %xmm7
2508 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm7
2509 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[0,0,2,2]
2510 ; SSE41-NEXT: pand %xmm6, %xmm0
2511 ; SSE41-NEXT: por %xmm7, %xmm0
2512 ; SSE41-NEXT: movapd %xmm11, %xmm14
2513 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm14
2514 ; SSE41-NEXT: movdqa %xmm5, %xmm0
2515 ; SSE41-NEXT: pxor %xmm9, %xmm0
2516 ; SSE41-NEXT: movdqa %xmm12, %xmm4
2517 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm4
2518 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2519 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
2520 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
2521 ; SSE41-NEXT: pand %xmm4, %xmm0
2522 ; SSE41-NEXT: por %xmm6, %xmm0
2523 ; SSE41-NEXT: movapd %xmm11, %xmm15
2524 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm15
2525 ; SSE41-NEXT: movdqa %xmm2, %xmm0
2526 ; SSE41-NEXT: pxor %xmm9, %xmm0
2527 ; SSE41-NEXT: movdqa %xmm12, %xmm5
2528 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm5
2529 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2530 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
2531 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
2532 ; SSE41-NEXT: pand %xmm5, %xmm0
2533 ; SSE41-NEXT: por %xmm6, %xmm0
2534 ; SSE41-NEXT: movapd %xmm11, %xmm5
2535 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5
2536 ; SSE41-NEXT: movdqa %xmm3, %xmm0
2537 ; SSE41-NEXT: pxor %xmm9, %xmm0
2538 ; SSE41-NEXT: movdqa %xmm12, %xmm2
2539 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
2540 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2541 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
2542 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
2543 ; SSE41-NEXT: pand %xmm2, %xmm0
2544 ; SSE41-NEXT: por %xmm6, %xmm0
2545 ; SSE41-NEXT: movapd %xmm11, %xmm6
2546 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm6
2547 ; SSE41-NEXT: movdqa %xmm8, %xmm0
2548 ; SSE41-NEXT: pxor %xmm9, %xmm0
2549 ; SSE41-NEXT: movdqa %xmm12, %xmm2
2550 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
2551 ; SSE41-NEXT: movdqa %xmm12, %xmm3
2552 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm3
2553 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
2554 ; SSE41-NEXT: pand %xmm2, %xmm0
2555 ; SSE41-NEXT: por %xmm3, %xmm0
2556 ; SSE41-NEXT: movapd %xmm11, %xmm3
2557 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3
2558 ; SSE41-NEXT: movdqa %xmm1, %xmm0
2559 ; SSE41-NEXT: pxor %xmm9, %xmm0
2560 ; SSE41-NEXT: movdqa %xmm12, %xmm2
2561 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
2562 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm12
2563 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm12[0,0,2,2]
2564 ; SSE41-NEXT: pand %xmm2, %xmm0
2565 ; SSE41-NEXT: por %xmm12, %xmm0
2566 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm11
2567 ; SSE41-NEXT: pxor %xmm2, %xmm2
2568 ; SSE41-NEXT: movapd %xmm11, %xmm1
2569 ; SSE41-NEXT: xorpd %xmm9, %xmm1
2570 ; SSE41-NEXT: movapd %xmm1, %xmm7
2571 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm7
2572 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm1
2573 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
2574 ; SSE41-NEXT: pand %xmm7, %xmm0
2575 ; SSE41-NEXT: por %xmm1, %xmm0
2576 ; SSE41-NEXT: pxor %xmm7, %xmm7
2577 ; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm7
2578 ; SSE41-NEXT: movapd %xmm3, %xmm1
2579 ; SSE41-NEXT: xorpd %xmm9, %xmm1
2580 ; SSE41-NEXT: movapd %xmm1, %xmm4
2581 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm4
2582 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm1
2583 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
2584 ; SSE41-NEXT: pand %xmm4, %xmm0
2585 ; SSE41-NEXT: por %xmm1, %xmm0
2586 ; SSE41-NEXT: pxor %xmm1, %xmm1
2587 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm1
2588 ; SSE41-NEXT: packusdw %xmm7, %xmm1
2589 ; SSE41-NEXT: movapd %xmm6, %xmm3
2590 ; SSE41-NEXT: xorpd %xmm9, %xmm3
2591 ; SSE41-NEXT: movapd %xmm3, %xmm4
2592 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm4
2593 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm3
2594 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
2595 ; SSE41-NEXT: pand %xmm4, %xmm0
2596 ; SSE41-NEXT: por %xmm3, %xmm0
2597 ; SSE41-NEXT: pxor %xmm3, %xmm3
2598 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm3
2599 ; SSE41-NEXT: movapd %xmm5, %xmm4
2600 ; SSE41-NEXT: xorpd %xmm9, %xmm4
2601 ; SSE41-NEXT: movapd %xmm4, %xmm6
2602 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm6
2603 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm4
2604 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
2605 ; SSE41-NEXT: pand %xmm6, %xmm0
2606 ; SSE41-NEXT: por %xmm4, %xmm0
2607 ; SSE41-NEXT: pxor %xmm4, %xmm4
2608 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm4
2609 ; SSE41-NEXT: packusdw %xmm3, %xmm4
2610 ; SSE41-NEXT: packusdw %xmm4, %xmm1
2611 ; SSE41-NEXT: movapd %xmm15, %xmm3
2612 ; SSE41-NEXT: xorpd %xmm9, %xmm3
2613 ; SSE41-NEXT: movapd %xmm3, %xmm4
2614 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm4
2615 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm3
2616 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
2617 ; SSE41-NEXT: pand %xmm4, %xmm0
2618 ; SSE41-NEXT: por %xmm3, %xmm0
2619 ; SSE41-NEXT: pxor %xmm4, %xmm4
2620 ; SSE41-NEXT: blendvpd %xmm0, %xmm15, %xmm4
2621 ; SSE41-NEXT: movapd %xmm14, %xmm3
2622 ; SSE41-NEXT: xorpd %xmm9, %xmm3
2623 ; SSE41-NEXT: movapd %xmm3, %xmm5
2624 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm5
2625 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm3
2626 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
2627 ; SSE41-NEXT: pand %xmm5, %xmm0
2628 ; SSE41-NEXT: por %xmm3, %xmm0
2629 ; SSE41-NEXT: pxor %xmm3, %xmm3
2630 ; SSE41-NEXT: blendvpd %xmm0, %xmm14, %xmm3
2631 ; SSE41-NEXT: packusdw %xmm4, %xmm3
2632 ; SSE41-NEXT: movapd %xmm13, %xmm4
2633 ; SSE41-NEXT: xorpd %xmm9, %xmm4
2634 ; SSE41-NEXT: movapd %xmm4, %xmm5
2635 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm5
2636 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm4
2637 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
2638 ; SSE41-NEXT: pand %xmm5, %xmm0
2639 ; SSE41-NEXT: por %xmm4, %xmm0
2640 ; SSE41-NEXT: pxor %xmm4, %xmm4
2641 ; SSE41-NEXT: blendvpd %xmm0, %xmm13, %xmm4
2642 ; SSE41-NEXT: movapd %xmm10, %xmm5
2643 ; SSE41-NEXT: xorpd %xmm9, %xmm5
2644 ; SSE41-NEXT: movapd %xmm5, %xmm6
2645 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm6
2646 ; SSE41-NEXT: pcmpgtd %xmm9, %xmm5
2647 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
2648 ; SSE41-NEXT: pand %xmm6, %xmm0
2649 ; SSE41-NEXT: por %xmm5, %xmm0
2650 ; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2
2651 ; SSE41-NEXT: packusdw %xmm4, %xmm2
2652 ; SSE41-NEXT: packusdw %xmm2, %xmm3
2653 ; SSE41-NEXT: packuswb %xmm3, %xmm1
2654 ; SSE41-NEXT: movdqa %xmm1, %xmm0
2657 ; AVX1-LABEL: trunc_packus_v16i64_v16i8:
2659 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm8
2660 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [255,255]
2661 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm9
2662 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7
2663 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
2664 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm5, %xmm6
2665 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm5, %xmm10
2666 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm6
2667 ; AVX1-NEXT: vblendvpd %xmm6, %xmm4, %xmm5, %xmm11
2668 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm5, %xmm6
2669 ; AVX1-NEXT: vblendvpd %xmm6, %xmm1, %xmm5, %xmm1
2670 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm6
2671 ; AVX1-NEXT: vblendvpd %xmm6, %xmm7, %xmm5, %xmm6
2672 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm5, %xmm7
2673 ; AVX1-NEXT: vblendvpd %xmm7, %xmm2, %xmm5, %xmm2
2674 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm5, %xmm7
2675 ; AVX1-NEXT: vblendvpd %xmm7, %xmm9, %xmm5, %xmm7
2676 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm0
2677 ; AVX1-NEXT: vblendvpd %xmm0, %xmm3, %xmm5, %xmm0
2678 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm5, %xmm3
2679 ; AVX1-NEXT: vblendvpd %xmm3, %xmm8, %xmm5, %xmm3
2680 ; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5
2681 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm4
2682 ; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm3
2683 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm4
2684 ; AVX1-NEXT: vpand %xmm0, %xmm4, %xmm0
2685 ; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0
2686 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm3
2687 ; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3
2688 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm2, %xmm4
2689 ; AVX1-NEXT: vpand %xmm2, %xmm4, %xmm2
2690 ; AVX1-NEXT: vpackusdw %xmm3, %xmm2, %xmm2
2691 ; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0
2692 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm2
2693 ; AVX1-NEXT: vpand %xmm6, %xmm2, %xmm2
2694 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm3
2695 ; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm1
2696 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
2697 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm11, %xmm2
2698 ; AVX1-NEXT: vpand %xmm11, %xmm2, %xmm2
2699 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm10, %xmm3
2700 ; AVX1-NEXT: vpand %xmm10, %xmm3, %xmm3
2701 ; AVX1-NEXT: vpackusdw %xmm2, %xmm3, %xmm2
2702 ; AVX1-NEXT: vpackusdw %xmm1, %xmm2, %xmm1
2703 ; AVX1-NEXT: vpackuswb %xmm0, %xmm1, %xmm0
2704 ; AVX1-NEXT: vzeroupper
2707 ; AVX2-LABEL: trunc_packus_v16i64_v16i8:
2709 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
2710 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm5
2711 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
2712 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm4, %ymm5
2713 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3
2714 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm4, %ymm5
2715 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
2716 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm4, %ymm5
2717 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
2718 ; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4
2719 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm1, %ymm5
2720 ; AVX2-NEXT: vpand %ymm1, %ymm5, %ymm1
2721 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm5
2722 ; AVX2-NEXT: vpand %ymm0, %ymm5, %ymm0
2723 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2724 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm1
2725 ; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1
2726 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm2, %ymm3
2727 ; AVX2-NEXT: vpand %ymm2, %ymm3, %ymm2
2728 ; AVX2-NEXT: vpackusdw %ymm1, %ymm2, %ymm1
2729 ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
2730 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2731 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2732 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2733 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2734 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2735 ; AVX2-NEXT: vzeroupper
2738 ; AVX512-LABEL: trunc_packus_v16i64_v16i8:
2740 ; AVX512-NEXT: vpbroadcastq {{.*#+}} zmm2 = [255,255,255,255,255,255,255,255]
2741 ; AVX512-NEXT: vpminsq %zmm2, %zmm0, %zmm0
2742 ; AVX512-NEXT: vpminsq %zmm2, %zmm1, %zmm1
2743 ; AVX512-NEXT: vpxor %xmm2, %xmm2, %xmm2
2744 ; AVX512-NEXT: vpmaxsq %zmm2, %zmm1, %zmm1
2745 ; AVX512-NEXT: vpmaxsq %zmm2, %zmm0, %zmm0
2746 ; AVX512-NEXT: vpmovqd %zmm0, %ymm0
2747 ; AVX512-NEXT: vpmovqd %zmm1, %ymm1
2748 ; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2749 ; AVX512-NEXT: vpmovdb %zmm0, %xmm0
2750 ; AVX512-NEXT: vzeroupper
2752 %1 = icmp slt <16 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
2753 %2 = select <16 x i1> %1, <16 x i64> %a0, <16 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
2754 %3 = icmp sgt <16 x i64> %2, zeroinitializer
2755 %4 = select <16 x i1> %3, <16 x i64> %2, <16 x i64> zeroinitializer
2756 %5 = trunc <16 x i64> %4 to <16 x i8>
2760 define <8 x i8> @trunc_packus_v8i32_v8i8(<8 x i32> %a0) {
2761 ; SSE-LABEL: trunc_packus_v8i32_v8i8:
2763 ; SSE-NEXT: packssdw %xmm1, %xmm0
2764 ; SSE-NEXT: packuswb %xmm0, %xmm0
2767 ; AVX1-LABEL: trunc_packus_v8i32_v8i8:
2769 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
2770 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2771 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
2772 ; AVX1-NEXT: vzeroupper
2775 ; AVX2-LABEL: trunc_packus_v8i32_v8i8:
2777 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2778 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2779 ; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
2780 ; AVX2-NEXT: vzeroupper
2783 ; AVX512F-LABEL: trunc_packus_v8i32_v8i8:
2785 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2786 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2787 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
2788 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2789 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
2790 ; AVX512F-NEXT: vzeroupper
2791 ; AVX512F-NEXT: retq
2793 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i8:
2794 ; AVX512VL: # %bb.0:
2795 ; AVX512VL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2796 ; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1
2797 ; AVX512VL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2798 ; AVX512VL-NEXT: vpmovdb %ymm0, %xmm0
2799 ; AVX512VL-NEXT: vzeroupper
2800 ; AVX512VL-NEXT: retq
2802 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i8:
2803 ; AVX512BW: # %bb.0:
2804 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2805 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2806 ; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1
2807 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2808 ; AVX512BW-NEXT: vpmovdb %zmm0, %xmm0
2809 ; AVX512BW-NEXT: vzeroupper
2810 ; AVX512BW-NEXT: retq
2812 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8:
2813 ; AVX512BWVL: # %bb.0:
2814 ; AVX512BWVL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2815 ; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1
2816 ; AVX512BWVL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2817 ; AVX512BWVL-NEXT: vpmovdb %ymm0, %xmm0
2818 ; AVX512BWVL-NEXT: vzeroupper
2819 ; AVX512BWVL-NEXT: retq
2820 %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
2821 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
2822 %3 = icmp sgt <8 x i32> %2, zeroinitializer
2823 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
2824 %5 = trunc <8 x i32> %4 to <8 x i8>
2828 define void @trunc_packus_v8i32_v8i8_store(<8 x i32> %a0, <8 x i8> *%p1) {
2829 ; SSE-LABEL: trunc_packus_v8i32_v8i8_store:
2831 ; SSE-NEXT: packssdw %xmm1, %xmm0
2832 ; SSE-NEXT: packuswb %xmm0, %xmm0
2833 ; SSE-NEXT: movq %xmm0, (%rdi)
2836 ; AVX1-LABEL: trunc_packus_v8i32_v8i8_store:
2838 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
2839 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2840 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
2841 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
2842 ; AVX1-NEXT: vzeroupper
2845 ; AVX2-LABEL: trunc_packus_v8i32_v8i8_store:
2847 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2848 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2849 ; AVX2-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
2850 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
2851 ; AVX2-NEXT: vzeroupper
2854 ; AVX512F-LABEL: trunc_packus_v8i32_v8i8_store:
2856 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2857 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2858 ; AVX512F-NEXT: vpxor %xmm1, %xmm1, %xmm1
2859 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2860 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
2861 ; AVX512F-NEXT: vmovq %xmm0, (%rdi)
2862 ; AVX512F-NEXT: vzeroupper
2863 ; AVX512F-NEXT: retq
2865 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i8_store:
2866 ; AVX512VL: # %bb.0:
2867 ; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1
2868 ; AVX512VL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2869 ; AVX512VL-NEXT: vpmovusdb %ymm0, (%rdi)
2870 ; AVX512VL-NEXT: vzeroupper
2871 ; AVX512VL-NEXT: retq
2873 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i8_store:
2874 ; AVX512BW: # %bb.0:
2875 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2876 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2877 ; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1
2878 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2879 ; AVX512BW-NEXT: vpmovdb %zmm0, %xmm0
2880 ; AVX512BW-NEXT: vmovq %xmm0, (%rdi)
2881 ; AVX512BW-NEXT: vzeroupper
2882 ; AVX512BW-NEXT: retq
2884 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8_store:
2885 ; AVX512BWVL: # %bb.0:
2886 ; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1
2887 ; AVX512BWVL-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2888 ; AVX512BWVL-NEXT: vpmovusdb %ymm0, (%rdi)
2889 ; AVX512BWVL-NEXT: vzeroupper
2890 ; AVX512BWVL-NEXT: retq
2891 %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
2892 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
2893 %3 = icmp sgt <8 x i32> %2, zeroinitializer
2894 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
2895 %5 = trunc <8 x i32> %4 to <8 x i8>
2896 store <8 x i8> %5, <8 x i8> *%p1
2900 define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32> %a0) {
2901 ; SSE-LABEL: trunc_packus_v16i32_v16i8:
2903 ; SSE-NEXT: packssdw %xmm3, %xmm2
2904 ; SSE-NEXT: packssdw %xmm1, %xmm0
2905 ; SSE-NEXT: packuswb %xmm2, %xmm0
2908 ; AVX1-LABEL: trunc_packus_v16i32_v16i8:
2910 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2911 ; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
2912 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
2913 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
2914 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2915 ; AVX1-NEXT: vzeroupper
2918 ; AVX2-LABEL: trunc_packus_v16i32_v16i8:
2920 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
2921 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2922 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2923 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2924 ; AVX2-NEXT: vzeroupper
2927 ; AVX512-LABEL: trunc_packus_v16i32_v16i8:
2929 ; AVX512-NEXT: vpxor %xmm1, %xmm1, %xmm1
2930 ; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
2931 ; AVX512-NEXT: vpmovusdb %zmm0, %xmm0
2932 ; AVX512-NEXT: vzeroupper
2934 %1 = icmp slt <16 x i32> %a0, <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>
2935 %2 = select <16 x i1> %1, <16 x i32> %a0, <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>
2936 %3 = icmp sgt <16 x i32> %2, zeroinitializer
2937 %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer
2938 %5 = trunc <16 x i32> %4 to <16 x i8>
2942 define <16 x i8> @trunc_packus_v16i16_v16i8(<16 x i16> %a0) {
2943 ; SSE-LABEL: trunc_packus_v16i16_v16i8:
2945 ; SSE-NEXT: packuswb %xmm1, %xmm0
2948 ; AVX1-LABEL: trunc_packus_v16i16_v16i8:
2950 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
2951 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2952 ; AVX1-NEXT: vzeroupper
2955 ; AVX2-LABEL: trunc_packus_v16i16_v16i8:
2957 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2958 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2959 ; AVX2-NEXT: vzeroupper
2962 ; AVX512F-LABEL: trunc_packus_v16i16_v16i8:
2964 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1
2965 ; AVX512F-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2966 ; AVX512F-NEXT: vzeroupper
2967 ; AVX512F-NEXT: retq
2969 ; AVX512VL-LABEL: trunc_packus_v16i16_v16i8:
2970 ; AVX512VL: # %bb.0:
2971 ; AVX512VL-NEXT: vextracti128 $1, %ymm0, %xmm1
2972 ; AVX512VL-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2973 ; AVX512VL-NEXT: vzeroupper
2974 ; AVX512VL-NEXT: retq
2976 ; AVX512BW-LABEL: trunc_packus_v16i16_v16i8:
2977 ; AVX512BW: # %bb.0:
2978 ; AVX512BW-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0
2979 ; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1
2980 ; AVX512BW-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2981 ; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0
2982 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
2983 ; AVX512BW-NEXT: vzeroupper
2984 ; AVX512BW-NEXT: retq
2986 ; AVX512BWVL-LABEL: trunc_packus_v16i16_v16i8:
2987 ; AVX512BWVL: # %bb.0:
2988 ; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1
2989 ; AVX512BWVL-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2990 ; AVX512BWVL-NEXT: vpmovuswb %ymm0, %xmm0
2991 ; AVX512BWVL-NEXT: vzeroupper
2992 ; AVX512BWVL-NEXT: retq
2993 %1 = icmp slt <16 x i16> %a0, <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>
2994 %2 = select <16 x i1> %1, <16 x i16> %a0, <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>
2995 %3 = icmp sgt <16 x i16> %2, zeroinitializer
2996 %4 = select <16 x i1> %3, <16 x i16> %2, <16 x i16> zeroinitializer
2997 %5 = trunc <16 x i16> %4 to <16 x i8>
3001 define <32 x i8> @trunc_packus_v32i16_v32i8(<32 x i16> %a0) {
3002 ; SSE-LABEL: trunc_packus_v32i16_v32i8:
3004 ; SSE-NEXT: packuswb %xmm1, %xmm0
3005 ; SSE-NEXT: packuswb %xmm3, %xmm2
3006 ; SSE-NEXT: movdqa %xmm2, %xmm1
3009 ; AVX1-LABEL: trunc_packus_v32i16_v32i8:
3011 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3012 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
3013 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
3014 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
3015 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
3018 ; AVX2-LABEL: trunc_packus_v32i16_v32i8:
3020 ; AVX2-NEXT: vpackuswb %ymm1, %ymm0, %ymm0
3021 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3024 ; AVX512F-LABEL: trunc_packus_v32i16_v32i8:
3026 ; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm1
3027 ; AVX512F-NEXT: vpackuswb %ymm1, %ymm0, %ymm0
3028 ; AVX512F-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3029 ; AVX512F-NEXT: retq
3031 ; AVX512VL-LABEL: trunc_packus_v32i16_v32i8:
3032 ; AVX512VL: # %bb.0:
3033 ; AVX512VL-NEXT: vextracti64x4 $1, %zmm0, %ymm1
3034 ; AVX512VL-NEXT: vpackuswb %ymm1, %ymm0, %ymm0
3035 ; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3036 ; AVX512VL-NEXT: retq
3038 ; AVX512BW-LABEL: trunc_packus_v32i16_v32i8:
3039 ; AVX512BW: # %bb.0:
3040 ; AVX512BW-NEXT: vpxor %xmm1, %xmm1, %xmm1
3041 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
3042 ; AVX512BW-NEXT: vpmovuswb %zmm0, %ymm0
3043 ; AVX512BW-NEXT: retq
3045 ; AVX512BWVL-LABEL: trunc_packus_v32i16_v32i8:
3046 ; AVX512BWVL: # %bb.0:
3047 ; AVX512BWVL-NEXT: vpxor %xmm1, %xmm1, %xmm1
3048 ; AVX512BWVL-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
3049 ; AVX512BWVL-NEXT: vpmovuswb %zmm0, %ymm0
3050 ; AVX512BWVL-NEXT: retq
3051 %1 = icmp slt <32 x i16> %a0, <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>
3052 %2 = select <32 x i1> %1, <32 x i16> %a0, <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>
3053 %3 = icmp sgt <32 x i16> %2, zeroinitializer
3054 %4 = select <32 x i1> %3, <32 x i16> %2, <32 x i16> zeroinitializer
3055 %5 = trunc <32 x i16> %4 to <32 x i8>