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