[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / vector-trunc-packus.ll
blob18917cf96ce5d2036b1b15582601881ec06c17c4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL
14 ; PACKUS saturation truncation to vXi32
17 define <4 x i32> @trunc_packus_v4i64_v4i32(<4 x i64> %a0) {
18 ; SSE2-LABEL: trunc_packus_v4i64_v4i32:
19 ; SSE2:       # %bb.0:
20 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
21 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
22 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
23 ; SSE2-NEXT:    pxor %xmm2, %xmm3
24 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
25 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
26 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
27 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
28 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm3
29 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
30 ; SSE2-NEXT:    pand %xmm7, %xmm4
31 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
32 ; SSE2-NEXT:    por %xmm4, %xmm3
33 ; SSE2-NEXT:    pand %xmm3, %xmm0
34 ; SSE2-NEXT:    pandn %xmm8, %xmm3
35 ; SSE2-NEXT:    por %xmm0, %xmm3
36 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
37 ; SSE2-NEXT:    pxor %xmm2, %xmm0
38 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
39 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
40 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
41 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm0
42 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
43 ; SSE2-NEXT:    pand %xmm6, %xmm0
44 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
45 ; SSE2-NEXT:    por %xmm0, %xmm4
46 ; SSE2-NEXT:    pand %xmm4, %xmm1
47 ; SSE2-NEXT:    pandn %xmm8, %xmm4
48 ; SSE2-NEXT:    por %xmm1, %xmm4
49 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
50 ; SSE2-NEXT:    pxor %xmm2, %xmm0
51 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
52 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
53 ; SSE2-NEXT:    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:    retq
1416 ; SSSE3-LABEL: trunc_packus_v8i64_v8i8:
1417 ; SSSE3:       # %bb.0:
1418 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
1419 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1420 ; SSSE3-NEXT:    movdqa %xmm2, %xmm5
1421 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
1422 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1423 ; SSSE3-NEXT:    movdqa %xmm9, %xmm7
1424 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm7
1425 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1426 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
1427 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1428 ; SSSE3-NEXT:    pand %xmm6, %xmm4
1429 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1430 ; SSSE3-NEXT:    por %xmm4, %xmm5
1431 ; SSSE3-NEXT:    pand %xmm5, %xmm2
1432 ; SSSE3-NEXT:    pandn %xmm8, %xmm5
1433 ; SSSE3-NEXT:    por %xmm2, %xmm5
1434 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
1435 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
1436 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
1437 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
1438 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1439 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm2
1440 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1441 ; SSSE3-NEXT:    pand %xmm6, %xmm7
1442 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1443 ; SSSE3-NEXT:    por %xmm7, %xmm2
1444 ; SSSE3-NEXT:    pand %xmm2, %xmm3
1445 ; SSSE3-NEXT:    pandn %xmm8, %xmm2
1446 ; SSSE3-NEXT:    por %xmm3, %xmm2
1447 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
1448 ; SSSE3-NEXT:    pxor %xmm10, %xmm3
1449 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
1450 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
1451 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1452 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm3
1453 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1454 ; SSSE3-NEXT:    pand %xmm6, %xmm7
1455 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1456 ; SSSE3-NEXT:    por %xmm7, %xmm3
1457 ; SSSE3-NEXT:    pand %xmm3, %xmm0
1458 ; SSSE3-NEXT:    pandn %xmm8, %xmm3
1459 ; SSSE3-NEXT:    por %xmm0, %xmm3
1460 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1461 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1462 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
1463 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
1464 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1465 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
1466 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1467 ; SSSE3-NEXT:    pand %xmm6, %xmm0
1468 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1469 ; SSSE3-NEXT:    por %xmm0, %xmm4
1470 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1471 ; SSSE3-NEXT:    pandn %xmm8, %xmm4
1472 ; SSSE3-NEXT:    por %xmm1, %xmm4
1473 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
1474 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1475 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
1476 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm1
1477 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1478 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
1479 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1480 ; SSSE3-NEXT:    pand %xmm6, %xmm0
1481 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1482 ; SSSE3-NEXT:    por %xmm0, %xmm1
1483 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1484 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1485 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1486 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
1487 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm4
1488 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1489 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
1490 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1491 ; SSSE3-NEXT:    pand %xmm6, %xmm7
1492 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1493 ; SSSE3-NEXT:    por %xmm7, %xmm0
1494 ; SSSE3-NEXT:    pand %xmm3, %xmm0
1495 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
1496 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1497 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
1498 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
1499 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
1500 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1501 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
1502 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1503 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1504 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1505 ; SSSE3-NEXT:    por %xmm1, %xmm3
1506 ; SSSE3-NEXT:    pand %xmm2, %xmm3
1507 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
1508 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
1509 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
1510 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm2
1511 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1512 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
1513 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1514 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1515 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1516 ; SSSE3-NEXT:    por %xmm1, %xmm2
1517 ; SSSE3-NEXT:    pand %xmm5, %xmm2
1518 ; SSSE3-NEXT:    packuswb %xmm3, %xmm2
1519 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
1520 ; SSSE3-NEXT:    retq
1522 ; SSE41-LABEL: trunc_packus_v8i64_v8i8:
1523 ; SSE41:       # %bb.0:
1524 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
1525 ; SSE41-NEXT:    movapd {{.*#+}} xmm7 = [255,255]
1526 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1527 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
1528 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1529 ; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [2147483903,2147483903]
1530 ; SSE41-NEXT:    movdqa %xmm6, %xmm4
1531 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
1532 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1533 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
1534 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1535 ; SSE41-NEXT:    pand %xmm5, %xmm0
1536 ; SSE41-NEXT:    por %xmm4, %xmm0
1537 ; SSE41-NEXT:    movapd %xmm7, %xmm8
1538 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm8
1539 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
1540 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1541 ; SSE41-NEXT:    movdqa %xmm6, %xmm2
1542 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
1543 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1544 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
1545 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1546 ; SSE41-NEXT:    pand %xmm4, %xmm0
1547 ; SSE41-NEXT:    por %xmm2, %xmm0
1548 ; SSE41-NEXT:    movapd %xmm7, %xmm2
1549 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
1550 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
1551 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1552 ; SSE41-NEXT:    movdqa %xmm6, %xmm3
1553 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
1554 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1555 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
1556 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1557 ; SSE41-NEXT:    pand %xmm4, %xmm0
1558 ; SSE41-NEXT:    por %xmm3, %xmm0
1559 ; SSE41-NEXT:    movapd %xmm7, %xmm4
1560 ; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
1561 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1562 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1563 ; SSE41-NEXT:    movdqa %xmm6, %xmm3
1564 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
1565 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
1566 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
1567 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1568 ; SSE41-NEXT:    pand %xmm5, %xmm0
1569 ; SSE41-NEXT:    por %xmm3, %xmm0
1570 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm7
1571 ; SSE41-NEXT:    pxor %xmm3, %xmm3
1572 ; SSE41-NEXT:    movapd %xmm7, %xmm0
1573 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1574 ; SSE41-NEXT:    movapd %xmm0, %xmm1
1575 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
1576 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
1577 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1578 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1579 ; SSE41-NEXT:    pand %xmm5, %xmm0
1580 ; SSE41-NEXT:    por %xmm1, %xmm0
1581 ; SSE41-NEXT:    pxor %xmm5, %xmm5
1582 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm5
1583 ; SSE41-NEXT:    movapd %xmm4, %xmm0
1584 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1585 ; SSE41-NEXT:    movapd %xmm0, %xmm1
1586 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
1587 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1588 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1589 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1590 ; SSE41-NEXT:    pand %xmm6, %xmm0
1591 ; SSE41-NEXT:    por %xmm1, %xmm0
1592 ; SSE41-NEXT:    pxor %xmm1, %xmm1
1593 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm1
1594 ; SSE41-NEXT:    packusdw %xmm5, %xmm1
1595 ; SSE41-NEXT:    movapd %xmm2, %xmm0
1596 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1597 ; SSE41-NEXT:    movapd %xmm0, %xmm4
1598 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
1599 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1600 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1601 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1602 ; SSE41-NEXT:    pand %xmm5, %xmm0
1603 ; SSE41-NEXT:    por %xmm4, %xmm0
1604 ; SSE41-NEXT:    pxor %xmm4, %xmm4
1605 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
1606 ; SSE41-NEXT:    movapd %xmm8, %xmm0
1607 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1608 ; SSE41-NEXT:    movapd %xmm0, %xmm2
1609 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm2
1610 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
1611 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1612 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1613 ; SSE41-NEXT:    pand %xmm5, %xmm0
1614 ; SSE41-NEXT:    por %xmm2, %xmm0
1615 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm3
1616 ; SSE41-NEXT:    packusdw %xmm4, %xmm3
1617 ; SSE41-NEXT:    packusdw %xmm3, %xmm1
1618 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1619 ; SSE41-NEXT:    retq
1621 ; AVX1-LABEL: trunc_packus_v8i64_v8i8:
1622 ; AVX1:       # %bb.0:
1623 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1624 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [255,255]
1625 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm8
1626 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
1627 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
1628 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm7
1629 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
1630 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
1631 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
1632 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm9
1633 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm6, %xmm3, %xmm6
1634 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm7
1635 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
1636 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm1, %xmm5
1637 ; AVX1-NEXT:    vblendvpd %xmm8, %xmm2, %xmm3, %xmm2
1638 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm2, %xmm3
1639 ; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm2
1640 ; AVX1-NEXT:    vpand %xmm1, %xmm5, %xmm1
1641 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
1642 ; AVX1-NEXT:    vpand %xmm6, %xmm7, %xmm2
1643 ; AVX1-NEXT:    vpand %xmm0, %xmm9, %xmm0
1644 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
1645 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
1646 ; AVX1-NEXT:    vzeroupper
1647 ; AVX1-NEXT:    retq
1649 ; AVX2-LABEL: trunc_packus_v8i64_v8i8:
1650 ; AVX2:       # %bb.0:
1651 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255]
1652 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
1653 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1654 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
1655 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1656 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1657 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm3
1658 ; AVX2-NEXT:    vpand %ymm1, %ymm3, %ymm1
1659 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm2
1660 ; AVX2-NEXT:    vpand %ymm0, %ymm2, %ymm0
1661 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
1662 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1663 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1664 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
1665 ; AVX2-NEXT:    vzeroupper
1666 ; AVX2-NEXT:    retq
1668 ; AVX512-LABEL: trunc_packus_v8i64_v8i8:
1669 ; AVX512:       # %bb.0:
1670 ; AVX512-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1671 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1672 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
1673 ; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
1674 ; AVX512-NEXT:    vzeroupper
1675 ; AVX512-NEXT:    retq
1676   %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
1677   %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>
1678   %3 = icmp sgt <8 x i64> %2, zeroinitializer
1679   %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
1680   %5 = trunc <8 x i64> %4 to <8 x i8>
1681   ret <8 x i8> %5
1684 define void @trunc_packus_v8i64_v8i8_store(<8 x i64> %a0, <8 x i8> *%p1) {
1685 ; SSE2-LABEL: trunc_packus_v8i64_v8i8_store:
1686 ; SSE2:       # %bb.0:
1687 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
1688 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1689 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
1690 ; SSE2-NEXT:    pxor %xmm10, %xmm5
1691 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1692 ; SSE2-NEXT:    movdqa %xmm9, %xmm7
1693 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1694 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1695 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5
1696 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1697 ; SSE2-NEXT:    pand %xmm6, %xmm4
1698 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1699 ; SSE2-NEXT:    por %xmm4, %xmm5
1700 ; SSE2-NEXT:    pand %xmm5, %xmm2
1701 ; SSE2-NEXT:    pandn %xmm8, %xmm5
1702 ; SSE2-NEXT:    por %xmm2, %xmm5
1703 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1704 ; SSE2-NEXT:    pxor %xmm10, %xmm2
1705 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
1706 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1707 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1708 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm2
1709 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1710 ; SSE2-NEXT:    pand %xmm6, %xmm7
1711 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1712 ; SSE2-NEXT:    por %xmm7, %xmm2
1713 ; SSE2-NEXT:    pand %xmm2, %xmm3
1714 ; SSE2-NEXT:    pandn %xmm8, %xmm2
1715 ; SSE2-NEXT:    por %xmm3, %xmm2
1716 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
1717 ; SSE2-NEXT:    pxor %xmm10, %xmm3
1718 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
1719 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
1720 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1721 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm3
1722 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1723 ; SSE2-NEXT:    pand %xmm6, %xmm7
1724 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1725 ; SSE2-NEXT:    por %xmm7, %xmm3
1726 ; SSE2-NEXT:    pand %xmm3, %xmm0
1727 ; SSE2-NEXT:    pandn %xmm8, %xmm3
1728 ; SSE2-NEXT:    por %xmm0, %xmm3
1729 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1730 ; SSE2-NEXT:    pxor %xmm10, %xmm0
1731 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
1732 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1733 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1734 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
1735 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1736 ; SSE2-NEXT:    pand %xmm6, %xmm0
1737 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1738 ; SSE2-NEXT:    por %xmm0, %xmm4
1739 ; SSE2-NEXT:    pand %xmm4, %xmm1
1740 ; SSE2-NEXT:    pandn %xmm8, %xmm4
1741 ; SSE2-NEXT:    por %xmm1, %xmm4
1742 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1743 ; SSE2-NEXT:    pxor %xmm10, %xmm0
1744 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1745 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1
1746 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1747 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1748 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1749 ; SSE2-NEXT:    pand %xmm6, %xmm0
1750 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1751 ; SSE2-NEXT:    por %xmm0, %xmm1
1752 ; SSE2-NEXT:    pand %xmm4, %xmm1
1753 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
1754 ; SSE2-NEXT:    pxor %xmm10, %xmm0
1755 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1756 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm4
1757 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1758 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1759 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1760 ; SSE2-NEXT:    pand %xmm6, %xmm7
1761 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1762 ; SSE2-NEXT:    por %xmm7, %xmm0
1763 ; SSE2-NEXT:    pand %xmm3, %xmm0
1764 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
1765 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1766 ; SSE2-NEXT:    pxor %xmm10, %xmm1
1767 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
1768 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
1769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1770 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
1771 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1772 ; SSE2-NEXT:    pand %xmm4, %xmm1
1773 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1774 ; SSE2-NEXT:    por %xmm1, %xmm3
1775 ; SSE2-NEXT:    pand %xmm2, %xmm3
1776 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
1777 ; SSE2-NEXT:    pxor %xmm10, %xmm1
1778 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1779 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm2
1780 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[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 {{.*#+}} xmm2 = xmm2[1,1,3,3]
1785 ; SSE2-NEXT:    por %xmm1, %xmm2
1786 ; SSE2-NEXT:    pand %xmm5, %xmm2
1787 ; SSE2-NEXT:    packuswb %xmm3, %xmm2
1788 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
1789 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
1790 ; SSE2-NEXT:    movq %xmm0, (%rdi)
1791 ; SSE2-NEXT:    retq
1793 ; SSSE3-LABEL: trunc_packus_v8i64_v8i8_store:
1794 ; SSSE3:       # %bb.0:
1795 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
1796 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1797 ; SSSE3-NEXT:    movdqa %xmm2, %xmm5
1798 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
1799 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
1800 ; SSSE3-NEXT:    movdqa %xmm9, %xmm7
1801 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm7
1802 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
1803 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
1804 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1805 ; SSSE3-NEXT:    pand %xmm6, %xmm4
1806 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1807 ; SSSE3-NEXT:    por %xmm4, %xmm5
1808 ; SSSE3-NEXT:    pand %xmm5, %xmm2
1809 ; SSSE3-NEXT:    pandn %xmm8, %xmm5
1810 ; SSSE3-NEXT:    por %xmm2, %xmm5
1811 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
1812 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
1813 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
1814 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
1815 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1816 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm2
1817 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1818 ; SSSE3-NEXT:    pand %xmm6, %xmm7
1819 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1820 ; SSSE3-NEXT:    por %xmm7, %xmm2
1821 ; SSSE3-NEXT:    pand %xmm2, %xmm3
1822 ; SSSE3-NEXT:    pandn %xmm8, %xmm2
1823 ; SSSE3-NEXT:    por %xmm3, %xmm2
1824 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
1825 ; SSSE3-NEXT:    pxor %xmm10, %xmm3
1826 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
1827 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
1828 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1829 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm3
1830 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1831 ; SSSE3-NEXT:    pand %xmm6, %xmm7
1832 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1833 ; SSSE3-NEXT:    por %xmm7, %xmm3
1834 ; SSSE3-NEXT:    pand %xmm3, %xmm0
1835 ; SSSE3-NEXT:    pandn %xmm8, %xmm3
1836 ; SSSE3-NEXT:    por %xmm0, %xmm3
1837 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1838 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1839 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
1840 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
1841 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1842 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
1843 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1844 ; SSSE3-NEXT:    pand %xmm6, %xmm0
1845 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1846 ; SSSE3-NEXT:    por %xmm0, %xmm4
1847 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1848 ; SSSE3-NEXT:    pandn %xmm8, %xmm4
1849 ; SSSE3-NEXT:    por %xmm1, %xmm4
1850 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
1851 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1852 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
1853 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm1
1854 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1855 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
1856 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1857 ; SSSE3-NEXT:    pand %xmm6, %xmm0
1858 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1859 ; SSSE3-NEXT:    por %xmm0, %xmm1
1860 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1861 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1862 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1863 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
1864 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm4
1865 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
1866 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
1867 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1868 ; SSSE3-NEXT:    pand %xmm6, %xmm7
1869 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
1870 ; SSSE3-NEXT:    por %xmm7, %xmm0
1871 ; SSSE3-NEXT:    pand %xmm3, %xmm0
1872 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
1873 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1874 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
1875 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
1876 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
1877 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1878 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
1879 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1880 ; SSSE3-NEXT:    pand %xmm4, %xmm1
1881 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1882 ; SSSE3-NEXT:    por %xmm1, %xmm3
1883 ; SSSE3-NEXT:    pand %xmm2, %xmm3
1884 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
1885 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
1886 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
1887 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm2
1888 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[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 {{.*#+}} xmm2 = xmm2[1,1,3,3]
1893 ; SSSE3-NEXT:    por %xmm1, %xmm2
1894 ; SSSE3-NEXT:    pand %xmm5, %xmm2
1895 ; SSSE3-NEXT:    packuswb %xmm3, %xmm2
1896 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
1897 ; SSSE3-NEXT:    packuswb %xmm0, %xmm0
1898 ; SSSE3-NEXT:    movq %xmm0, (%rdi)
1899 ; SSSE3-NEXT:    retq
1901 ; SSE41-LABEL: trunc_packus_v8i64_v8i8_store:
1902 ; SSE41:       # %bb.0:
1903 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
1904 ; SSE41-NEXT:    movapd {{.*#+}} xmm7 = [255,255]
1905 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1906 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
1907 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1908 ; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [2147483903,2147483903]
1909 ; SSE41-NEXT:    movdqa %xmm4, %xmm6
1910 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
1911 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[0,0,2,2]
1912 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1913 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1914 ; SSE41-NEXT:    pand %xmm5, %xmm0
1915 ; SSE41-NEXT:    por %xmm6, %xmm0
1916 ; SSE41-NEXT:    movapd %xmm7, %xmm8
1917 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm8
1918 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
1919 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1920 ; SSE41-NEXT:    movdqa %xmm4, %xmm2
1921 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
1922 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[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 %xmm2, %xmm0
1927 ; SSE41-NEXT:    movapd %xmm7, %xmm2
1928 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
1929 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
1930 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1931 ; SSE41-NEXT:    movdqa %xmm4, %xmm3
1932 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
1933 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[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 %xmm3, %xmm0
1938 ; SSE41-NEXT:    movapd %xmm7, %xmm3
1939 ; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm3
1940 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1941 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1942 ; SSE41-NEXT:    movdqa %xmm4, %xmm5
1943 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
1944 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
1945 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1946 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1947 ; SSE41-NEXT:    pand %xmm6, %xmm0
1948 ; SSE41-NEXT:    por %xmm5, %xmm0
1949 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm7
1950 ; SSE41-NEXT:    xorpd %xmm1, %xmm1
1951 ; SSE41-NEXT:    movapd %xmm7, %xmm0
1952 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1953 ; SSE41-NEXT:    movapd %xmm0, %xmm4
1954 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
1955 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1956 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1957 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1958 ; SSE41-NEXT:    pand %xmm5, %xmm0
1959 ; SSE41-NEXT:    por %xmm4, %xmm0
1960 ; SSE41-NEXT:    pxor %xmm5, %xmm5
1961 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm5
1962 ; SSE41-NEXT:    movapd %xmm3, %xmm0
1963 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1964 ; SSE41-NEXT:    movapd %xmm0, %xmm4
1965 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
1966 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = 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 %xmm6, %xmm0
1970 ; SSE41-NEXT:    por %xmm4, %xmm0
1971 ; SSE41-NEXT:    pxor %xmm4, %xmm4
1972 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm4
1973 ; SSE41-NEXT:    packusdw %xmm5, %xmm4
1974 ; SSE41-NEXT:    movapd %xmm2, %xmm0
1975 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1976 ; SSE41-NEXT:    movapd %xmm0, %xmm3
1977 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm3
1978 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
1979 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1980 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1981 ; SSE41-NEXT:    pand %xmm5, %xmm0
1982 ; SSE41-NEXT:    por %xmm3, %xmm0
1983 ; SSE41-NEXT:    pxor %xmm3, %xmm3
1984 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm3
1985 ; SSE41-NEXT:    movapd %xmm8, %xmm0
1986 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
1987 ; SSE41-NEXT:    movapd %xmm0, %xmm2
1988 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm2
1989 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[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 %xmm2, %xmm0
1994 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm1
1995 ; SSE41-NEXT:    packusdw %xmm3, %xmm1
1996 ; SSE41-NEXT:    packusdw %xmm1, %xmm4
1997 ; SSE41-NEXT:    packuswb %xmm4, %xmm4
1998 ; SSE41-NEXT:    movq %xmm4, (%rdi)
1999 ; SSE41-NEXT:    retq
2001 ; AVX1-LABEL: trunc_packus_v8i64_v8i8_store:
2002 ; AVX1:       # %bb.0:
2003 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2004 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [255,255]
2005 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm8
2006 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
2007 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
2008 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm7
2009 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
2010 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm0, %xmm3, %xmm0
2011 ; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2012 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm9
2013 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm6, %xmm3, %xmm6
2014 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm7
2015 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
2016 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm1, %xmm5
2017 ; AVX1-NEXT:    vblendvpd %xmm8, %xmm2, %xmm3, %xmm2
2018 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm2, %xmm3
2019 ; AVX1-NEXT:    vpand %xmm2, %xmm3, %xmm2
2020 ; AVX1-NEXT:    vpand %xmm1, %xmm5, %xmm1
2021 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
2022 ; AVX1-NEXT:    vpand %xmm6, %xmm7, %xmm2
2023 ; AVX1-NEXT:    vpand %xmm0, %xmm9, %xmm0
2024 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
2025 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2026 ; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
2027 ; AVX1-NEXT:    vmovq %xmm0, (%rdi)
2028 ; AVX1-NEXT:    vzeroupper
2029 ; AVX1-NEXT:    retq
2031 ; AVX2-LABEL: trunc_packus_v8i64_v8i8_store:
2032 ; AVX2:       # %bb.0:
2033 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255]
2034 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
2035 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
2036 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
2037 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
2038 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2039 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm3
2040 ; AVX2-NEXT:    vpand %ymm0, %ymm3, %ymm0
2041 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm2
2042 ; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm1
2043 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
2044 ; AVX2-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
2045 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2046 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
2047 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
2048 ; AVX2-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
2049 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
2050 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2051 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
2052 ; AVX2-NEXT:    vmovq %xmm0, (%rdi)
2053 ; AVX2-NEXT:    vzeroupper
2054 ; AVX2-NEXT:    retq
2056 ; AVX512-LABEL: trunc_packus_v8i64_v8i8_store:
2057 ; AVX512:       # %bb.0:
2058 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2059 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
2060 ; AVX512-NEXT:    vpmovusqb %zmm0, (%rdi)
2061 ; AVX512-NEXT:    vzeroupper
2062 ; AVX512-NEXT:    retq
2063   %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
2064   %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>
2065   %3 = icmp sgt <8 x i64> %2, zeroinitializer
2066   %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
2067   %5 = trunc <8 x i64> %4 to <8 x i8>
2068   store <8 x i8> %5, <8 x i8> *%p1
2069   ret void
2072 define <16 x i8> @trunc_packus_v16i64_v16i8(<16 x i64> %a0) {
2073 ; SSE2-LABEL: trunc_packus_v16i64_v16i8:
2074 ; SSE2:       # %bb.0:
2075 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [255,255]
2076 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
2077 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
2078 ; SSE2-NEXT:    pxor %xmm8, %xmm9
2079 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
2080 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
2081 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
2082 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2083 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
2084 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
2085 ; SSE2-NEXT:    pand %xmm13, %xmm14
2086 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
2087 ; SSE2-NEXT:    por %xmm14, %xmm9
2088 ; SSE2-NEXT:    pand %xmm9, %xmm6
2089 ; SSE2-NEXT:    pandn %xmm10, %xmm9
2090 ; SSE2-NEXT:    por %xmm6, %xmm9
2091 ; SSE2-NEXT:    movdqa %xmm7, %xmm6
2092 ; SSE2-NEXT:    pxor %xmm8, %xmm6
2093 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
2094 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm12
2095 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2096 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm6
2097 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2098 ; SSE2-NEXT:    pand %xmm13, %xmm6
2099 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
2100 ; SSE2-NEXT:    por %xmm6, %xmm12
2101 ; SSE2-NEXT:    pand %xmm12, %xmm7
2102 ; SSE2-NEXT:    pandn %xmm10, %xmm12
2103 ; SSE2-NEXT:    por %xmm7, %xmm12
2104 ; SSE2-NEXT:    movdqa %xmm4, %xmm6
2105 ; SSE2-NEXT:    pxor %xmm8, %xmm6
2106 ; SSE2-NEXT:    movdqa %xmm11, %xmm7
2107 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
2108 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[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 {{.*#+}} xmm13 = xmm7[1,1,3,3]
2113 ; SSE2-NEXT:    por %xmm6, %xmm13
2114 ; SSE2-NEXT:    pand %xmm13, %xmm4
2115 ; SSE2-NEXT:    pandn %xmm10, %xmm13
2116 ; SSE2-NEXT:    por %xmm4, %xmm13
2117 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
2118 ; SSE2-NEXT:    pxor %xmm8, %xmm4
2119 ; SSE2-NEXT:    movdqa %xmm11, %xmm6
2120 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2121 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2122 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm4
2123 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2124 ; SSE2-NEXT:    pand %xmm7, %xmm4
2125 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
2126 ; SSE2-NEXT:    por %xmm4, %xmm14
2127 ; SSE2-NEXT:    pand %xmm14, %xmm5
2128 ; SSE2-NEXT:    pandn %xmm10, %xmm14
2129 ; SSE2-NEXT:    por %xmm5, %xmm14
2130 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2131 ; SSE2-NEXT:    pxor %xmm8, %xmm4
2132 ; SSE2-NEXT:    movdqa %xmm11, %xmm5
2133 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
2134 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[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 {{.*#+}} xmm5 = xmm5[1,1,3,3]
2139 ; SSE2-NEXT:    por %xmm4, %xmm5
2140 ; SSE2-NEXT:    pand %xmm5, %xmm2
2141 ; SSE2-NEXT:    pandn %xmm10, %xmm5
2142 ; SSE2-NEXT:    por %xmm2, %xmm5
2143 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2144 ; SSE2-NEXT:    pxor %xmm8, %xmm2
2145 ; SSE2-NEXT:    movdqa %xmm11, %xmm4
2146 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2147 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
2148 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm2
2149 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
2150 ; SSE2-NEXT:    pand %xmm7, %xmm6
2151 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
2152 ; SSE2-NEXT:    por %xmm6, %xmm2
2153 ; SSE2-NEXT:    pand %xmm2, %xmm3
2154 ; SSE2-NEXT:    pandn %xmm10, %xmm2
2155 ; SSE2-NEXT:    por %xmm3, %xmm2
2156 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
2157 ; SSE2-NEXT:    pxor %xmm8, %xmm3
2158 ; SSE2-NEXT:    movdqa %xmm11, %xmm4
2159 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
2160 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2161 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm3
2162 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
2163 ; SSE2-NEXT:    pand %xmm6, %xmm7
2164 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2165 ; SSE2-NEXT:    por %xmm7, %xmm3
2166 ; SSE2-NEXT:    pand %xmm3, %xmm0
2167 ; SSE2-NEXT:    pandn %xmm10, %xmm3
2168 ; SSE2-NEXT:    por %xmm0, %xmm3
2169 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
2170 ; SSE2-NEXT:    pxor %xmm8, %xmm0
2171 ; SSE2-NEXT:    movdqa %xmm11, %xmm4
2172 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2173 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2174 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm0
2175 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2176 ; SSE2-NEXT:    pand %xmm6, %xmm0
2177 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2178 ; SSE2-NEXT:    por %xmm0, %xmm4
2179 ; SSE2-NEXT:    pand %xmm4, %xmm1
2180 ; SSE2-NEXT:    pandn %xmm10, %xmm4
2181 ; SSE2-NEXT:    por %xmm1, %xmm4
2182 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2183 ; SSE2-NEXT:    pxor %xmm8, %xmm0
2184 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2185 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
2186 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
2187 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
2188 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2189 ; SSE2-NEXT:    pand %xmm6, %xmm0
2190 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2191 ; SSE2-NEXT:    por %xmm0, %xmm1
2192 ; SSE2-NEXT:    pand %xmm4, %xmm1
2193 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
2194 ; SSE2-NEXT:    pxor %xmm8, %xmm0
2195 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2196 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm4
2197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2198 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
2199 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2200 ; SSE2-NEXT:    pand %xmm6, %xmm7
2201 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2202 ; SSE2-NEXT:    por %xmm7, %xmm0
2203 ; SSE2-NEXT:    pand %xmm3, %xmm0
2204 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
2205 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
2206 ; SSE2-NEXT:    pxor %xmm8, %xmm1
2207 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
2208 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
2209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2210 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
2211 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2212 ; SSE2-NEXT:    pand %xmm4, %xmm1
2213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2214 ; SSE2-NEXT:    por %xmm1, %xmm3
2215 ; SSE2-NEXT:    pand %xmm2, %xmm3
2216 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
2217 ; SSE2-NEXT:    pxor %xmm8, %xmm1
2218 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2219 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm2
2220 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2221 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
2222 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2223 ; SSE2-NEXT:    pand %xmm4, %xmm1
2224 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2225 ; SSE2-NEXT:    por %xmm1, %xmm2
2226 ; SSE2-NEXT:    pand %xmm5, %xmm2
2227 ; SSE2-NEXT:    packuswb %xmm3, %xmm2
2228 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
2229 ; SSE2-NEXT:    movdqa %xmm14, %xmm1
2230 ; SSE2-NEXT:    pxor %xmm8, %xmm1
2231 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2232 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm2
2233 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = 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 %xmm3, %xmm1
2237 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2238 ; SSE2-NEXT:    por %xmm1, %xmm2
2239 ; SSE2-NEXT:    pand %xmm14, %xmm2
2240 ; SSE2-NEXT:    movdqa %xmm13, %xmm1
2241 ; SSE2-NEXT:    pxor %xmm8, %xmm1
2242 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
2243 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
2244 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2245 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
2246 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
2247 ; SSE2-NEXT:    pand %xmm4, %xmm5
2248 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2249 ; SSE2-NEXT:    por %xmm5, %xmm1
2250 ; SSE2-NEXT:    pand %xmm13, %xmm1
2251 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
2252 ; SSE2-NEXT:    movdqa %xmm12, %xmm2
2253 ; SSE2-NEXT:    pxor %xmm8, %xmm2
2254 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
2255 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
2256 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2257 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm2
2258 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2259 ; SSE2-NEXT:    pand %xmm4, %xmm2
2260 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2261 ; SSE2-NEXT:    por %xmm2, %xmm3
2262 ; SSE2-NEXT:    pand %xmm12, %xmm3
2263 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
2264 ; SSE2-NEXT:    pxor %xmm8, %xmm2
2265 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2266 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm4
2267 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2268 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm2
2269 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2270 ; SSE2-NEXT:    pand %xmm5, %xmm2
2271 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2272 ; SSE2-NEXT:    por %xmm2, %xmm4
2273 ; SSE2-NEXT:    pand %xmm9, %xmm4
2274 ; SSE2-NEXT:    packuswb %xmm3, %xmm4
2275 ; SSE2-NEXT:    packuswb %xmm4, %xmm1
2276 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
2277 ; SSE2-NEXT:    retq
2279 ; SSSE3-LABEL: trunc_packus_v16i64_v16i8:
2280 ; SSSE3:       # %bb.0:
2281 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [255,255]
2282 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
2283 ; SSSE3-NEXT:    movdqa %xmm6, %xmm9
2284 ; SSSE3-NEXT:    pxor %xmm8, %xmm9
2285 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
2286 ; SSSE3-NEXT:    movdqa %xmm11, %xmm12
2287 ; SSSE3-NEXT:    pcmpgtd %xmm9, %xmm12
2288 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2289 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm9
2290 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
2291 ; SSSE3-NEXT:    pand %xmm13, %xmm14
2292 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
2293 ; SSSE3-NEXT:    por %xmm14, %xmm9
2294 ; SSSE3-NEXT:    pand %xmm9, %xmm6
2295 ; SSSE3-NEXT:    pandn %xmm10, %xmm9
2296 ; SSSE3-NEXT:    por %xmm6, %xmm9
2297 ; SSSE3-NEXT:    movdqa %xmm7, %xmm6
2298 ; SSSE3-NEXT:    pxor %xmm8, %xmm6
2299 ; SSSE3-NEXT:    movdqa %xmm11, %xmm12
2300 ; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm12
2301 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2302 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm6
2303 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2304 ; SSSE3-NEXT:    pand %xmm13, %xmm6
2305 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
2306 ; SSSE3-NEXT:    por %xmm6, %xmm12
2307 ; SSSE3-NEXT:    pand %xmm12, %xmm7
2308 ; SSSE3-NEXT:    pandn %xmm10, %xmm12
2309 ; SSSE3-NEXT:    por %xmm7, %xmm12
2310 ; SSSE3-NEXT:    movdqa %xmm4, %xmm6
2311 ; SSSE3-NEXT:    pxor %xmm8, %xmm6
2312 ; SSSE3-NEXT:    movdqa %xmm11, %xmm7
2313 ; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm7
2314 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[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 {{.*#+}} xmm13 = xmm7[1,1,3,3]
2319 ; SSSE3-NEXT:    por %xmm6, %xmm13
2320 ; SSSE3-NEXT:    pand %xmm13, %xmm4
2321 ; SSSE3-NEXT:    pandn %xmm10, %xmm13
2322 ; SSSE3-NEXT:    por %xmm4, %xmm13
2323 ; SSSE3-NEXT:    movdqa %xmm5, %xmm4
2324 ; SSSE3-NEXT:    pxor %xmm8, %xmm4
2325 ; SSSE3-NEXT:    movdqa %xmm11, %xmm6
2326 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6
2327 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2328 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm4
2329 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2330 ; SSSE3-NEXT:    pand %xmm7, %xmm4
2331 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
2332 ; SSSE3-NEXT:    por %xmm4, %xmm14
2333 ; SSSE3-NEXT:    pand %xmm14, %xmm5
2334 ; SSSE3-NEXT:    pandn %xmm10, %xmm14
2335 ; SSSE3-NEXT:    por %xmm5, %xmm14
2336 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
2337 ; SSSE3-NEXT:    pxor %xmm8, %xmm4
2338 ; SSSE3-NEXT:    movdqa %xmm11, %xmm5
2339 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm5
2340 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[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 {{.*#+}} xmm5 = xmm5[1,1,3,3]
2345 ; SSSE3-NEXT:    por %xmm4, %xmm5
2346 ; SSSE3-NEXT:    pand %xmm5, %xmm2
2347 ; SSSE3-NEXT:    pandn %xmm10, %xmm5
2348 ; SSSE3-NEXT:    por %xmm2, %xmm5
2349 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
2350 ; SSSE3-NEXT:    pxor %xmm8, %xmm2
2351 ; SSSE3-NEXT:    movdqa %xmm11, %xmm4
2352 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
2353 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
2354 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm2
2355 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
2356 ; SSSE3-NEXT:    pand %xmm7, %xmm6
2357 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
2358 ; SSSE3-NEXT:    por %xmm6, %xmm2
2359 ; SSSE3-NEXT:    pand %xmm2, %xmm3
2360 ; SSSE3-NEXT:    pandn %xmm10, %xmm2
2361 ; SSSE3-NEXT:    por %xmm3, %xmm2
2362 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
2363 ; SSSE3-NEXT:    pxor %xmm8, %xmm3
2364 ; SSSE3-NEXT:    movdqa %xmm11, %xmm4
2365 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
2366 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2367 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm3
2368 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
2369 ; SSSE3-NEXT:    pand %xmm6, %xmm7
2370 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
2371 ; SSSE3-NEXT:    por %xmm7, %xmm3
2372 ; SSSE3-NEXT:    pand %xmm3, %xmm0
2373 ; SSSE3-NEXT:    pandn %xmm10, %xmm3
2374 ; SSSE3-NEXT:    por %xmm0, %xmm3
2375 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
2376 ; SSSE3-NEXT:    pxor %xmm8, %xmm0
2377 ; SSSE3-NEXT:    movdqa %xmm11, %xmm4
2378 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
2379 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2380 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm0
2381 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2382 ; SSSE3-NEXT:    pand %xmm6, %xmm0
2383 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2384 ; SSSE3-NEXT:    por %xmm0, %xmm4
2385 ; SSSE3-NEXT:    pand %xmm4, %xmm1
2386 ; SSSE3-NEXT:    pandn %xmm10, %xmm4
2387 ; SSSE3-NEXT:    por %xmm1, %xmm4
2388 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
2389 ; SSSE3-NEXT:    pxor %xmm8, %xmm0
2390 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
2391 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm1
2392 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
2393 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm0
2394 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2395 ; SSSE3-NEXT:    pand %xmm6, %xmm0
2396 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2397 ; SSSE3-NEXT:    por %xmm0, %xmm1
2398 ; SSSE3-NEXT:    pand %xmm4, %xmm1
2399 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
2400 ; SSSE3-NEXT:    pxor %xmm8, %xmm0
2401 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
2402 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm4
2403 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2404 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm0
2405 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2406 ; SSSE3-NEXT:    pand %xmm6, %xmm7
2407 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2408 ; SSSE3-NEXT:    por %xmm7, %xmm0
2409 ; SSSE3-NEXT:    pand %xmm3, %xmm0
2410 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
2411 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
2412 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
2413 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
2414 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm3
2415 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2416 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
2417 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2418 ; SSSE3-NEXT:    pand %xmm4, %xmm1
2419 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2420 ; SSSE3-NEXT:    por %xmm1, %xmm3
2421 ; SSSE3-NEXT:    pand %xmm2, %xmm3
2422 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
2423 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
2424 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
2425 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm2
2426 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2427 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
2428 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2429 ; SSSE3-NEXT:    pand %xmm4, %xmm1
2430 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2431 ; SSSE3-NEXT:    por %xmm1, %xmm2
2432 ; SSSE3-NEXT:    pand %xmm5, %xmm2
2433 ; SSSE3-NEXT:    packuswb %xmm3, %xmm2
2434 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
2435 ; SSSE3-NEXT:    movdqa %xmm14, %xmm1
2436 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
2437 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
2438 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm2
2439 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = 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 %xmm3, %xmm1
2443 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2444 ; SSSE3-NEXT:    por %xmm1, %xmm2
2445 ; SSSE3-NEXT:    pand %xmm14, %xmm2
2446 ; SSSE3-NEXT:    movdqa %xmm13, %xmm1
2447 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
2448 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
2449 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm3
2450 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2451 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
2452 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
2453 ; SSSE3-NEXT:    pand %xmm4, %xmm5
2454 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
2455 ; SSSE3-NEXT:    por %xmm5, %xmm1
2456 ; SSSE3-NEXT:    pand %xmm13, %xmm1
2457 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
2458 ; SSSE3-NEXT:    movdqa %xmm12, %xmm2
2459 ; SSSE3-NEXT:    pxor %xmm8, %xmm2
2460 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
2461 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm3
2462 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2463 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm2
2464 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2465 ; SSSE3-NEXT:    pand %xmm4, %xmm2
2466 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2467 ; SSSE3-NEXT:    por %xmm2, %xmm3
2468 ; SSSE3-NEXT:    pand %xmm12, %xmm3
2469 ; SSSE3-NEXT:    movdqa %xmm9, %xmm2
2470 ; SSSE3-NEXT:    pxor %xmm8, %xmm2
2471 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
2472 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm4
2473 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2474 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm2
2475 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2476 ; SSSE3-NEXT:    pand %xmm5, %xmm2
2477 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2478 ; SSSE3-NEXT:    por %xmm2, %xmm4
2479 ; SSSE3-NEXT:    pand %xmm9, %xmm4
2480 ; SSSE3-NEXT:    packuswb %xmm3, %xmm4
2481 ; SSSE3-NEXT:    packuswb %xmm4, %xmm1
2482 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
2483 ; SSSE3-NEXT:    retq
2485 ; SSE41-LABEL: trunc_packus_v16i64_v16i8:
2486 ; SSE41:       # %bb.0:
2487 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
2488 ; SSE41-NEXT:    movapd {{.*#+}} xmm11 = [255,255]
2489 ; SSE41-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648]
2490 ; SSE41-NEXT:    movdqa %xmm6, %xmm0
2491 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2492 ; SSE41-NEXT:    movdqa {{.*#+}} xmm12 = [2147483903,2147483903]
2493 ; SSE41-NEXT:    movdqa %xmm12, %xmm10
2494 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm10
2495 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm10[0,0,2,2]
2496 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2497 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2498 ; SSE41-NEXT:    pand %xmm13, %xmm0
2499 ; SSE41-NEXT:    por %xmm10, %xmm0
2500 ; SSE41-NEXT:    movapd %xmm11, %xmm10
2501 ; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm10
2502 ; SSE41-NEXT:    movdqa %xmm7, %xmm0
2503 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2504 ; SSE41-NEXT:    movdqa %xmm12, %xmm6
2505 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
2506 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm6[0,0,2,2]
2507 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2508 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2509 ; SSE41-NEXT:    pand %xmm13, %xmm0
2510 ; SSE41-NEXT:    por %xmm6, %xmm0
2511 ; SSE41-NEXT:    movapd %xmm11, %xmm13
2512 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm13
2513 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
2514 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2515 ; SSE41-NEXT:    movdqa %xmm12, %xmm6
2516 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
2517 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2518 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2519 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2520 ; SSE41-NEXT:    pand %xmm7, %xmm0
2521 ; SSE41-NEXT:    por %xmm6, %xmm0
2522 ; SSE41-NEXT:    movapd %xmm11, %xmm14
2523 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm14
2524 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
2525 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2526 ; SSE41-NEXT:    movdqa %xmm12, %xmm4
2527 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
2528 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2529 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2530 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2531 ; SSE41-NEXT:    pand %xmm6, %xmm0
2532 ; SSE41-NEXT:    por %xmm4, %xmm0
2533 ; SSE41-NEXT:    movapd %xmm11, %xmm15
2534 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm15
2535 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
2536 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2537 ; SSE41-NEXT:    movdqa %xmm12, %xmm5
2538 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
2539 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2540 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2541 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2542 ; SSE41-NEXT:    pand %xmm6, %xmm0
2543 ; SSE41-NEXT:    por %xmm5, %xmm0
2544 ; SSE41-NEXT:    movapd %xmm11, %xmm5
2545 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm5
2546 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2547 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2548 ; SSE41-NEXT:    movdqa %xmm12, %xmm2
2549 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
2550 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
2551 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2552 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2553 ; SSE41-NEXT:    pand %xmm6, %xmm0
2554 ; SSE41-NEXT:    por %xmm2, %xmm0
2555 ; SSE41-NEXT:    movapd %xmm11, %xmm6
2556 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm6
2557 ; SSE41-NEXT:    movdqa %xmm8, %xmm0
2558 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2559 ; SSE41-NEXT:    movdqa %xmm12, %xmm2
2560 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
2561 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2562 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2563 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2564 ; SSE41-NEXT:    pand %xmm3, %xmm0
2565 ; SSE41-NEXT:    por %xmm2, %xmm0
2566 ; SSE41-NEXT:    movapd %xmm11, %xmm3
2567 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm3
2568 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2569 ; SSE41-NEXT:    pxor %xmm9, %xmm0
2570 ; SSE41-NEXT:    movdqa %xmm12, %xmm2
2571 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
2572 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[0,0,2,2]
2573 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
2574 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2575 ; SSE41-NEXT:    pand %xmm7, %xmm0
2576 ; SSE41-NEXT:    por %xmm2, %xmm0
2577 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm11
2578 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2579 ; SSE41-NEXT:    movapd %xmm11, %xmm0
2580 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2581 ; SSE41-NEXT:    movapd %xmm0, %xmm1
2582 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm1
2583 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,0,2,2]
2584 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2585 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2586 ; SSE41-NEXT:    pand %xmm7, %xmm0
2587 ; SSE41-NEXT:    por %xmm1, %xmm0
2588 ; SSE41-NEXT:    pxor %xmm7, %xmm7
2589 ; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm7
2590 ; SSE41-NEXT:    movapd %xmm3, %xmm0
2591 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2592 ; SSE41-NEXT:    movapd %xmm0, %xmm1
2593 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm1
2594 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
2595 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2596 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2597 ; SSE41-NEXT:    pand %xmm4, %xmm0
2598 ; SSE41-NEXT:    por %xmm1, %xmm0
2599 ; SSE41-NEXT:    pxor %xmm1, %xmm1
2600 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm1
2601 ; SSE41-NEXT:    packusdw %xmm7, %xmm1
2602 ; SSE41-NEXT:    movapd %xmm6, %xmm0
2603 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2604 ; SSE41-NEXT:    movapd %xmm0, %xmm3
2605 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm3
2606 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2607 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2608 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2609 ; SSE41-NEXT:    pand %xmm4, %xmm0
2610 ; SSE41-NEXT:    por %xmm3, %xmm0
2611 ; SSE41-NEXT:    pxor %xmm3, %xmm3
2612 ; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm3
2613 ; SSE41-NEXT:    movapd %xmm5, %xmm0
2614 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2615 ; SSE41-NEXT:    movapd %xmm0, %xmm4
2616 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm4
2617 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2618 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2619 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2620 ; SSE41-NEXT:    pand %xmm6, %xmm0
2621 ; SSE41-NEXT:    por %xmm4, %xmm0
2622 ; SSE41-NEXT:    pxor %xmm4, %xmm4
2623 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
2624 ; SSE41-NEXT:    packusdw %xmm3, %xmm4
2625 ; SSE41-NEXT:    packusdw %xmm4, %xmm1
2626 ; SSE41-NEXT:    movapd %xmm15, %xmm0
2627 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2628 ; SSE41-NEXT:    movapd %xmm0, %xmm3
2629 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm3
2630 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2631 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2632 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2633 ; SSE41-NEXT:    pand %xmm4, %xmm0
2634 ; SSE41-NEXT:    por %xmm3, %xmm0
2635 ; SSE41-NEXT:    pxor %xmm4, %xmm4
2636 ; SSE41-NEXT:    blendvpd %xmm0, %xmm15, %xmm4
2637 ; SSE41-NEXT:    movapd %xmm14, %xmm0
2638 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2639 ; SSE41-NEXT:    movapd %xmm0, %xmm3
2640 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm3
2641 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
2642 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2643 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2644 ; SSE41-NEXT:    pand %xmm5, %xmm0
2645 ; SSE41-NEXT:    por %xmm3, %xmm0
2646 ; SSE41-NEXT:    pxor %xmm3, %xmm3
2647 ; SSE41-NEXT:    blendvpd %xmm0, %xmm14, %xmm3
2648 ; SSE41-NEXT:    packusdw %xmm4, %xmm3
2649 ; SSE41-NEXT:    movapd %xmm13, %xmm0
2650 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2651 ; SSE41-NEXT:    movapd %xmm0, %xmm4
2652 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm4
2653 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2654 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2655 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2656 ; SSE41-NEXT:    pand %xmm5, %xmm0
2657 ; SSE41-NEXT:    por %xmm4, %xmm0
2658 ; SSE41-NEXT:    pxor %xmm4, %xmm4
2659 ; SSE41-NEXT:    blendvpd %xmm0, %xmm13, %xmm4
2660 ; SSE41-NEXT:    movapd %xmm10, %xmm0
2661 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
2662 ; SSE41-NEXT:    movapd %xmm0, %xmm5
2663 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm5
2664 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2665 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
2666 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2667 ; SSE41-NEXT:    pand %xmm6, %xmm0
2668 ; SSE41-NEXT:    por %xmm5, %xmm0
2669 ; SSE41-NEXT:    blendvpd %xmm0, %xmm10, %xmm2
2670 ; SSE41-NEXT:    packusdw %xmm4, %xmm2
2671 ; SSE41-NEXT:    packusdw %xmm2, %xmm3
2672 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
2673 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2674 ; SSE41-NEXT:    retq
2676 ; AVX1-LABEL: trunc_packus_v16i64_v16i8:
2677 ; AVX1:       # %bb.0:
2678 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm8
2679 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [255,255]
2680 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm9
2681 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7
2682 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2683 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm5, %xmm6
2684 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm0, %xmm5, %xmm10
2685 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm6
2686 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm4, %xmm5, %xmm11
2687 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm5, %xmm6
2688 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm1, %xmm5, %xmm1
2689 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm6
2690 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm7, %xmm5, %xmm6
2691 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm5, %xmm7
2692 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm2, %xmm5, %xmm2
2693 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm5, %xmm7
2694 ; AVX1-NEXT:    vblendvpd %xmm7, %xmm9, %xmm5, %xmm7
2695 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm5, %xmm0
2696 ; AVX1-NEXT:    vblendvpd %xmm0, %xmm3, %xmm5, %xmm0
2697 ; AVX1-NEXT:    vpcmpgtq %xmm8, %xmm5, %xmm3
2698 ; AVX1-NEXT:    vblendvpd %xmm3, %xmm8, %xmm5, %xmm3
2699 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
2700 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm4
2701 ; AVX1-NEXT:    vpand %xmm3, %xmm4, %xmm3
2702 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm0, %xmm4
2703 ; AVX1-NEXT:    vpand %xmm0, %xmm4, %xmm0
2704 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
2705 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm7, %xmm3
2706 ; AVX1-NEXT:    vpand %xmm7, %xmm3, %xmm3
2707 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm2, %xmm4
2708 ; AVX1-NEXT:    vpand %xmm2, %xmm4, %xmm2
2709 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm2
2710 ; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
2711 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm2
2712 ; AVX1-NEXT:    vpand %xmm6, %xmm2, %xmm2
2713 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm1, %xmm3
2714 ; AVX1-NEXT:    vpand %xmm1, %xmm3, %xmm1
2715 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
2716 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm11, %xmm2
2717 ; AVX1-NEXT:    vpand %xmm11, %xmm2, %xmm2
2718 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm10, %xmm3
2719 ; AVX1-NEXT:    vpand %xmm10, %xmm3, %xmm3
2720 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm3, %xmm2
2721 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm1
2722 ; AVX1-NEXT:    vpackuswb %xmm0, %xmm1, %xmm0
2723 ; AVX1-NEXT:    vzeroupper
2724 ; AVX1-NEXT:    retq
2726 ; AVX2-LABEL: trunc_packus_v16i64_v16i8:
2727 ; AVX2:       # %bb.0:
2728 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
2729 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm5
2730 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
2731 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm4, %ymm5
2732 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm4, %ymm3
2733 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm5
2734 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
2735 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm5
2736 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
2737 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2738 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm5
2739 ; AVX2-NEXT:    vpand %ymm1, %ymm5, %ymm1
2740 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm5
2741 ; AVX2-NEXT:    vpand %ymm0, %ymm5, %ymm0
2742 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
2743 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm3, %ymm1
2744 ; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
2745 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm2, %ymm3
2746 ; AVX2-NEXT:    vpand %ymm2, %ymm3, %ymm2
2747 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm2, %ymm1
2748 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
2749 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2750 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
2751 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2752 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2753 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2754 ; AVX2-NEXT:    vzeroupper
2755 ; AVX2-NEXT:    retq
2757 ; AVX512-LABEL: trunc_packus_v16i64_v16i8:
2758 ; AVX512:       # %bb.0:
2759 ; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm2 = [255,255,255,255,255,255,255,255]
2760 ; AVX512-NEXT:    vpminsq %zmm2, %zmm0, %zmm0
2761 ; AVX512-NEXT:    vpminsq %zmm2, %zmm1, %zmm1
2762 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2763 ; AVX512-NEXT:    vpmaxsq %zmm2, %zmm1, %zmm1
2764 ; AVX512-NEXT:    vpmaxsq %zmm2, %zmm0, %zmm0
2765 ; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2766 ; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
2767 ; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2768 ; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2769 ; AVX512-NEXT:    vzeroupper
2770 ; AVX512-NEXT:    retq
2771   %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>
2772   %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>
2773   %3 = icmp sgt <16 x i64> %2, zeroinitializer
2774   %4 = select <16 x i1> %3, <16 x i64> %2, <16 x i64> zeroinitializer
2775   %5 = trunc <16 x i64> %4 to <16 x i8>
2776   ret <16 x i8> %5
2779 define <8 x i8> @trunc_packus_v8i32_v8i8(<8 x i32> %a0) {
2780 ; SSE2-LABEL: trunc_packus_v8i32_v8i8:
2781 ; SSE2:       # %bb.0:
2782 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]
2783 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
2784 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
2785 ; SSE2-NEXT:    pand %xmm3, %xmm0
2786 ; SSE2-NEXT:    pandn %xmm2, %xmm3
2787 ; SSE2-NEXT:    por %xmm0, %xmm3
2788 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
2789 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
2790 ; SSE2-NEXT:    pand %xmm0, %xmm1
2791 ; SSE2-NEXT:    pandn %xmm2, %xmm0
2792 ; SSE2-NEXT:    por %xmm1, %xmm0
2793 ; SSE2-NEXT:    pxor %xmm1, %xmm1
2794 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2795 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2796 ; SSE2-NEXT:    pand %xmm0, %xmm2
2797 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
2798 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
2799 ; SSE2-NEXT:    pand %xmm3, %xmm0
2800 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
2801 ; SSE2-NEXT:    retq
2803 ; SSSE3-LABEL: trunc_packus_v8i32_v8i8:
2804 ; SSSE3:       # %bb.0:
2805 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]
2806 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
2807 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm3
2808 ; SSSE3-NEXT:    pand %xmm3, %xmm0
2809 ; SSSE3-NEXT:    pandn %xmm2, %xmm3
2810 ; SSSE3-NEXT:    por %xmm0, %xmm3
2811 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
2812 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
2813 ; SSSE3-NEXT:    pand %xmm0, %xmm1
2814 ; SSSE3-NEXT:    pandn %xmm2, %xmm0
2815 ; SSSE3-NEXT:    por %xmm1, %xmm0
2816 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
2817 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2818 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm2
2819 ; SSSE3-NEXT:    pand %xmm0, %xmm2
2820 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
2821 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
2822 ; SSSE3-NEXT:    pand %xmm3, %xmm0
2823 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
2824 ; SSSE3-NEXT:    retq
2826 ; SSE41-LABEL: trunc_packus_v8i32_v8i8:
2827 ; SSE41:       # %bb.0:
2828 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]
2829 ; SSE41-NEXT:    pminsd %xmm2, %xmm0
2830 ; SSE41-NEXT:    pminsd %xmm2, %xmm1
2831 ; SSE41-NEXT:    pxor %xmm2, %xmm2
2832 ; SSE41-NEXT:    pmaxsd %xmm2, %xmm1
2833 ; SSE41-NEXT:    pmaxsd %xmm2, %xmm0
2834 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
2835 ; SSE41-NEXT:    retq
2837 ; AVX1-LABEL: trunc_packus_v8i32_v8i8:
2838 ; AVX1:       # %bb.0:
2839 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [255,255,255,255]
2840 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm2
2841 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2842 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2843 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2844 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2845 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm2, %xmm1
2846 ; AVX1-NEXT:    vpackusdw %xmm0, %xmm1, %xmm0
2847 ; AVX1-NEXT:    vzeroupper
2848 ; AVX1-NEXT:    retq
2850 ; AVX2-LABEL: trunc_packus_v8i32_v8i8:
2851 ; AVX2:       # %bb.0:
2852 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2853 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2854 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2855 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2856 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2857 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2858 ; AVX2-NEXT:    vzeroupper
2859 ; AVX2-NEXT:    retq
2861 ; AVX512F-LABEL: trunc_packus_v8i32_v8i8:
2862 ; AVX512F:       # %bb.0:
2863 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2864 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2865 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2866 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2867 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
2868 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
2869 ; AVX512F-NEXT:    vzeroupper
2870 ; AVX512F-NEXT:    retq
2872 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i8:
2873 ; AVX512VL:       # %bb.0:
2874 ; AVX512VL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2875 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2876 ; AVX512VL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2877 ; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0
2878 ; AVX512VL-NEXT:    vzeroupper
2879 ; AVX512VL-NEXT:    retq
2881 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i8:
2882 ; AVX512BW:       # %bb.0:
2883 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2884 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2885 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2886 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2887 ; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
2888 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
2889 ; AVX512BW-NEXT:    vzeroupper
2890 ; AVX512BW-NEXT:    retq
2892 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8:
2893 ; AVX512BWVL:       # %bb.0:
2894 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2895 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2896 ; AVX512BWVL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2897 ; AVX512BWVL-NEXT:    vpmovdw %ymm0, %xmm0
2898 ; AVX512BWVL-NEXT:    vzeroupper
2899 ; AVX512BWVL-NEXT:    retq
2900   %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
2901   %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>
2902   %3 = icmp sgt <8 x i32> %2, zeroinitializer
2903   %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
2904   %5 = trunc <8 x i32> %4 to <8 x i8>
2905   ret <8 x i8> %5
2908 define void @trunc_packus_v8i32_v8i8_store(<8 x i32> %a0, <8 x i8> *%p1) {
2909 ; SSE-LABEL: trunc_packus_v8i32_v8i8_store:
2910 ; SSE:       # %bb.0:
2911 ; SSE-NEXT:    packssdw %xmm1, %xmm0
2912 ; SSE-NEXT:    packuswb %xmm0, %xmm0
2913 ; SSE-NEXT:    movq %xmm0, (%rdi)
2914 ; SSE-NEXT:    retq
2916 ; AVX1-LABEL: trunc_packus_v8i32_v8i8_store:
2917 ; AVX1:       # %bb.0:
2918 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
2919 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
2920 ; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
2921 ; AVX1-NEXT:    vmovq %xmm0, (%rdi)
2922 ; AVX1-NEXT:    vzeroupper
2923 ; AVX1-NEXT:    retq
2925 ; AVX2-LABEL: trunc_packus_v8i32_v8i8_store:
2926 ; AVX2:       # %bb.0:
2927 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2928 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
2929 ; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
2930 ; AVX2-NEXT:    vmovq %xmm0, (%rdi)
2931 ; AVX2-NEXT:    vzeroupper
2932 ; AVX2-NEXT:    retq
2934 ; AVX512F-LABEL: trunc_packus_v8i32_v8i8_store:
2935 ; AVX512F:       # %bb.0:
2936 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2937 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2938 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2939 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2940 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
2941 ; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
2942 ; AVX512F-NEXT:    vmovq %xmm0, (%rdi)
2943 ; AVX512F-NEXT:    vzeroupper
2944 ; AVX512F-NEXT:    retq
2946 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i8_store:
2947 ; AVX512VL:       # %bb.0:
2948 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2949 ; AVX512VL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2950 ; AVX512VL-NEXT:    vpmovusdb %ymm0, (%rdi)
2951 ; AVX512VL-NEXT:    vzeroupper
2952 ; AVX512VL-NEXT:    retq
2954 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i8_store:
2955 ; AVX512BW:       # %bb.0:
2956 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
2957 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2958 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2959 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2960 ; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
2961 ; AVX512BW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
2962 ; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)
2963 ; AVX512BW-NEXT:    vzeroupper
2964 ; AVX512BW-NEXT:    retq
2966 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8_store:
2967 ; AVX512BWVL:       # %bb.0:
2968 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
2969 ; AVX512BWVL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2970 ; AVX512BWVL-NEXT:    vpmovusdb %ymm0, (%rdi)
2971 ; AVX512BWVL-NEXT:    vzeroupper
2972 ; AVX512BWVL-NEXT:    retq
2973   %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
2974   %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>
2975   %3 = icmp sgt <8 x i32> %2, zeroinitializer
2976   %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
2977   %5 = trunc <8 x i32> %4 to <8 x i8>
2978   store <8 x i8> %5, <8 x i8> *%p1
2979   ret void
2982 define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32> %a0) {
2983 ; SSE-LABEL: trunc_packus_v16i32_v16i8:
2984 ; SSE:       # %bb.0:
2985 ; SSE-NEXT:    packssdw %xmm3, %xmm2
2986 ; SSE-NEXT:    packssdw %xmm1, %xmm0
2987 ; SSE-NEXT:    packuswb %xmm2, %xmm0
2988 ; SSE-NEXT:    retq
2990 ; AVX1-LABEL: trunc_packus_v16i32_v16i8:
2991 ; AVX1:       # %bb.0:
2992 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2993 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1
2994 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
2995 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
2996 ; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2997 ; AVX1-NEXT:    vzeroupper
2998 ; AVX1-NEXT:    retq
3000 ; AVX2-LABEL: trunc_packus_v16i32_v16i8:
3001 ; AVX2:       # %bb.0:
3002 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
3003 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3004 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3005 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3006 ; AVX2-NEXT:    vzeroupper
3007 ; AVX2-NEXT:    retq
3009 ; AVX512-LABEL: trunc_packus_v16i32_v16i8:
3010 ; AVX512:       # %bb.0:
3011 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3012 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
3013 ; AVX512-NEXT:    vpmovusdb %zmm0, %xmm0
3014 ; AVX512-NEXT:    vzeroupper
3015 ; AVX512-NEXT:    retq
3016   %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>
3017   %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>
3018   %3 = icmp sgt <16 x i32> %2, zeroinitializer
3019   %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer
3020   %5 = trunc <16 x i32> %4 to <16 x i8>
3021   ret <16 x i8> %5
3024 define <16 x i8> @trunc_packus_v16i16_v16i8(<16 x i16> %a0) {
3025 ; SSE-LABEL: trunc_packus_v16i16_v16i8:
3026 ; SSE:       # %bb.0:
3027 ; SSE-NEXT:    packuswb %xmm1, %xmm0
3028 ; SSE-NEXT:    retq
3030 ; AVX1-LABEL: trunc_packus_v16i16_v16i8:
3031 ; AVX1:       # %bb.0:
3032 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3033 ; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3034 ; AVX1-NEXT:    vzeroupper
3035 ; AVX1-NEXT:    retq
3037 ; AVX2-LABEL: trunc_packus_v16i16_v16i8:
3038 ; AVX2:       # %bb.0:
3039 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3040 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3041 ; AVX2-NEXT:    vzeroupper
3042 ; AVX2-NEXT:    retq
3044 ; AVX512F-LABEL: trunc_packus_v16i16_v16i8:
3045 ; AVX512F:       # %bb.0:
3046 ; AVX512F-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
3047 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3048 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3049 ; 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
3050 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3051 ; AVX512F-NEXT:    vzeroupper
3052 ; AVX512F-NEXT:    retq
3054 ; AVX512VL-LABEL: trunc_packus_v16i16_v16i8:
3055 ; AVX512VL:       # %bb.0:
3056 ; AVX512VL-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
3057 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3058 ; AVX512VL-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3059 ; 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
3060 ; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0
3061 ; AVX512VL-NEXT:    vzeroupper
3062 ; AVX512VL-NEXT:    retq
3064 ; AVX512BW-LABEL: trunc_packus_v16i16_v16i8:
3065 ; AVX512BW:       # %bb.0:
3066 ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
3067 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3068 ; AVX512BW-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3069 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
3070 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
3071 ; AVX512BW-NEXT:    vzeroupper
3072 ; AVX512BW-NEXT:    retq
3074 ; AVX512BWVL-LABEL: trunc_packus_v16i16_v16i8:
3075 ; AVX512BWVL:       # %bb.0:
3076 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3077 ; AVX512BWVL-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3078 ; AVX512BWVL-NEXT:    vpmovuswb %ymm0, %xmm0
3079 ; AVX512BWVL-NEXT:    vzeroupper
3080 ; AVX512BWVL-NEXT:    retq
3081   %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>
3082   %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>
3083   %3 = icmp sgt <16 x i16> %2, zeroinitializer
3084   %4 = select <16 x i1> %3, <16 x i16> %2, <16 x i16> zeroinitializer
3085   %5 = trunc <16 x i16> %4 to <16 x i8>
3086   ret <16 x i8> %5
3089 define <32 x i8> @trunc_packus_v32i16_v32i8(<32 x i16> %a0) {
3090 ; SSE-LABEL: trunc_packus_v32i16_v32i8:
3091 ; SSE:       # %bb.0:
3092 ; SSE-NEXT:    packuswb %xmm1, %xmm0
3093 ; SSE-NEXT:    packuswb %xmm3, %xmm2
3094 ; SSE-NEXT:    movdqa %xmm2, %xmm1
3095 ; SSE-NEXT:    retq
3097 ; AVX1-LABEL: trunc_packus_v32i16_v32i8:
3098 ; AVX1:       # %bb.0:
3099 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3100 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
3101 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3102 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3103 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
3104 ; AVX1-NEXT:    retq
3106 ; AVX2-LABEL: trunc_packus_v32i16_v32i8:
3107 ; AVX2:       # %bb.0:
3108 ; AVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0
3109 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3110 ; AVX2-NEXT:    retq
3112 ; AVX512F-LABEL: trunc_packus_v32i16_v32i8:
3113 ; AVX512F:       # %bb.0:
3114 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3115 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3116 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm1, %ymm1
3117 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3118 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm1, %ymm1
3119 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3120 ; 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
3121 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3122 ; 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
3123 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
3124 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3125 ; AVX512F-NEXT:    retq
3127 ; AVX512VL-LABEL: trunc_packus_v32i16_v32i8:
3128 ; AVX512VL:       # %bb.0:
3129 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3130 ; AVX512VL-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3131 ; AVX512VL-NEXT:    vpminsw %ymm2, %ymm1, %ymm1
3132 ; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3133 ; AVX512VL-NEXT:    vpmaxsw %ymm2, %ymm1, %ymm1
3134 ; AVX512VL-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3135 ; 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
3136 ; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0
3137 ; 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
3138 ; AVX512VL-NEXT:    vpmovdb %zmm1, %xmm1
3139 ; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3140 ; AVX512VL-NEXT:    retq
3142 ; AVX512BW-LABEL: trunc_packus_v32i16_v32i8:
3143 ; AVX512BW:       # %bb.0:
3144 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3145 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3146 ; AVX512BW-NEXT:    vpmovuswb %zmm0, %ymm0
3147 ; AVX512BW-NEXT:    retq
3149 ; AVX512BWVL-LABEL: trunc_packus_v32i16_v32i8:
3150 ; AVX512BWVL:       # %bb.0:
3151 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3152 ; AVX512BWVL-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3153 ; AVX512BWVL-NEXT:    vpmovuswb %zmm0, %ymm0
3154 ; AVX512BWVL-NEXT:    retq
3155   %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>
3156   %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>
3157   %3 = icmp sgt <32 x i16> %2, zeroinitializer
3158   %4 = select <32 x i1> %3, <32 x i16> %2, <32 x i16> zeroinitializer
3159   %5 = trunc <32 x i16> %4 to <32 x i8>
3160   ret <32 x i8> %5