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