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