1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW
7 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST
8 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
9 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL
10 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW
11 ; RUN: llc < %s -x86-experimental-vector-widening-legalization -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL
14 ; 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:
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]
79 ; SSSE3-LABEL: trunc_ssat_v4i64_v4i32:
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]
140 ; SSE41-LABEL: trunc_ssat_v4i64_v4i32:
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
192 ; AVX1-LABEL: trunc_ssat_v4i64_v4i32:
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
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:
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
253 ; AVX512VL-LABEL: trunc_ssat_v4i64_v4i32:
255 ; AVX512VL-NEXT: vpmovsqd %ymm0, %xmm0
256 ; AVX512VL-NEXT: vzeroupper
257 ; AVX512VL-NEXT: retq
259 ; AVX512BW-LABEL: trunc_ssat_v4i64_v4i32:
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>
285 define <8 x i32> @trunc_ssat_v8i64_v8i32(<8 x i64> %a0) {
286 ; SSE2-LABEL: trunc_ssat_v8i64_v8i32:
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]
400 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i32:
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]
514 ; SSE41-LABEL: trunc_ssat_v8i64_v8i32:
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
611 ; AVX1-LABEL: trunc_ssat_v8i64_v8i32:
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
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:
683 ; AVX512-NEXT: vpmovsqd %zmm0, %ymm0
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>
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:
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
813 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i16:
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
928 ; SSE41-LABEL: trunc_ssat_v8i64_v8i16:
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
1027 ; AVX1-LABEL: trunc_ssat_v8i64_v8i16:
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
1061 ; AVX2-LABEL: trunc_ssat_v8i64_v8i16:
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
1080 ; AVX512-LABEL: trunc_ssat_v8i64_v8i16:
1082 ; AVX512-NEXT: vpmovsqw %zmm0, %xmm0
1083 ; AVX512-NEXT: vzeroupper
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>
1093 define <8 x i16> @trunc_ssat_v8i32_v8i16(<8 x i32> %a0) {
1094 ; SSE-LABEL: trunc_ssat_v8i32_v8i16:
1096 ; SSE-NEXT: packssdw %xmm1, %xmm0
1099 ; AVX1-LABEL: trunc_ssat_v8i32_v8i16:
1101 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1102 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1103 ; AVX1-NEXT: vzeroupper
1106 ; AVX2-LABEL: trunc_ssat_v8i32_v8i16:
1108 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1109 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1110 ; AVX2-NEXT: vzeroupper
1113 ; AVX512F-LABEL: trunc_ssat_v8i32_v8i16:
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>
1154 define <16 x i16> @trunc_ssat_v16i32_v16i16(<16 x i32> %a0) {
1155 ; SSE-LABEL: trunc_ssat_v16i32_v16i16:
1157 ; SSE-NEXT: packssdw %xmm1, %xmm0
1158 ; SSE-NEXT: packssdw %xmm3, %xmm2
1159 ; SSE-NEXT: movdqa %xmm2, %xmm1
1162 ; AVX1-LABEL: trunc_ssat_v16i32_v16i16:
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
1171 ; AVX2-LABEL: trunc_ssat_v16i32_v16i16:
1173 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
1174 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1177 ; AVX512-LABEL: trunc_ssat_v16i32_v16i16:
1179 ; AVX512-NEXT: vpmovsdw %zmm0, %ymm0
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>
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:
1196 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [127,127]
1197 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1198 ; SSE2-NEXT: movdqa %xmm3, %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, %xmm3
1210 ; SSE2-NEXT: pandn %xmm8, %xmm5
1211 ; SSE2-NEXT: por %xmm3, %xmm5
1212 ; SSE2-NEXT: movdqa %xmm2, %xmm3
1213 ; SSE2-NEXT: pxor %xmm4, %xmm3
1214 ; SSE2-NEXT: movdqa %xmm9, %xmm6
1215 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
1216 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1217 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3
1218 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1219 ; SSE2-NEXT: pand %xmm10, %xmm7
1220 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
1221 ; SSE2-NEXT: por %xmm7, %xmm3
1222 ; SSE2-NEXT: pand %xmm3, %xmm2
1223 ; SSE2-NEXT: pandn %xmm8, %xmm3
1224 ; SSE2-NEXT: por %xmm2, %xmm3
1225 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1226 ; SSE2-NEXT: pxor %xmm4, %xmm2
1227 ; SSE2-NEXT: movdqa %xmm9, %xmm6
1228 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm6
1229 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1230 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2
1231 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1232 ; SSE2-NEXT: pand %xmm10, %xmm7
1233 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
1234 ; SSE2-NEXT: por %xmm7, %xmm2
1235 ; SSE2-NEXT: pand %xmm2, %xmm1
1236 ; SSE2-NEXT: pandn %xmm8, %xmm2
1237 ; SSE2-NEXT: por %xmm1, %xmm2
1238 ; SSE2-NEXT: movdqa %xmm0, %xmm1
1239 ; SSE2-NEXT: pxor %xmm4, %xmm1
1240 ; SSE2-NEXT: movdqa %xmm9, %xmm6
1241 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6
1242 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1243 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
1244 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1245 ; SSE2-NEXT: pand %xmm7, %xmm1
1246 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1247 ; SSE2-NEXT: por %xmm1, %xmm7
1248 ; SSE2-NEXT: pand %xmm7, %xmm0
1249 ; SSE2-NEXT: pandn %xmm8, %xmm7
1250 ; SSE2-NEXT: por %xmm0, %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 {{.*#+}} xmm10 = xmm1[0,0,2,2]
1258 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
1259 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1260 ; SSE2-NEXT: pand %xmm10, %xmm6
1261 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
1262 ; SSE2-NEXT: por %xmm6, %xmm0
1263 ; SSE2-NEXT: pand %xmm0, %xmm7
1264 ; SSE2-NEXT: pandn %xmm8, %xmm0
1265 ; SSE2-NEXT: por %xmm7, %xmm0
1266 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1267 ; SSE2-NEXT: pxor %xmm4, %xmm1
1268 ; SSE2-NEXT: movdqa %xmm1, %xmm6
1269 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm6
1270 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1271 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
1272 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1273 ; SSE2-NEXT: pand %xmm7, %xmm1
1274 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1275 ; SSE2-NEXT: por %xmm1, %xmm7
1276 ; SSE2-NEXT: pand %xmm7, %xmm2
1277 ; SSE2-NEXT: pandn %xmm8, %xmm7
1278 ; SSE2-NEXT: por %xmm2, %xmm7
1279 ; SSE2-NEXT: movdqa %xmm3, %xmm1
1280 ; SSE2-NEXT: pxor %xmm4, %xmm1
1281 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1282 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm2
1283 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
1284 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
1285 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1286 ; SSE2-NEXT: pand %xmm6, %xmm1
1287 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1288 ; SSE2-NEXT: por %xmm1, %xmm2
1289 ; SSE2-NEXT: pand %xmm2, %xmm3
1290 ; SSE2-NEXT: pandn %xmm8, %xmm2
1291 ; SSE2-NEXT: por %xmm3, %xmm2
1292 ; SSE2-NEXT: pxor %xmm5, %xmm4
1293 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1294 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1
1295 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1296 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
1297 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1298 ; SSE2-NEXT: pand %xmm3, %xmm4
1299 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1300 ; SSE2-NEXT: por %xmm4, %xmm1
1301 ; SSE2-NEXT: pand %xmm1, %xmm5
1302 ; SSE2-NEXT: pandn %xmm8, %xmm1
1303 ; SSE2-NEXT: por %xmm5, %xmm1
1304 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1305 ; SSE2-NEXT: pand %xmm3, %xmm1
1306 ; SSE2-NEXT: pand %xmm3, %xmm2
1307 ; SSE2-NEXT: packuswb %xmm1, %xmm2
1308 ; SSE2-NEXT: pand %xmm3, %xmm7
1309 ; SSE2-NEXT: pand %xmm3, %xmm0
1310 ; SSE2-NEXT: packuswb %xmm7, %xmm0
1311 ; SSE2-NEXT: packuswb %xmm2, %xmm0
1312 ; SSE2-NEXT: packuswb %xmm0, %xmm0
1315 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i8:
1317 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [127,127]
1318 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1319 ; SSSE3-NEXT: movdqa %xmm3, %xmm5
1320 ; SSSE3-NEXT: pxor %xmm4, %xmm5
1321 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775]
1322 ; SSSE3-NEXT: movdqa %xmm9, %xmm7
1323 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7
1324 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2]
1325 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5
1326 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1327 ; SSSE3-NEXT: pand %xmm10, %xmm6
1328 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1329 ; SSSE3-NEXT: por %xmm6, %xmm5
1330 ; SSSE3-NEXT: pand %xmm5, %xmm3
1331 ; SSSE3-NEXT: pandn %xmm8, %xmm5
1332 ; SSSE3-NEXT: por %xmm3, %xmm5
1333 ; SSSE3-NEXT: movdqa %xmm2, %xmm3
1334 ; SSSE3-NEXT: pxor %xmm4, %xmm3
1335 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
1336 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6
1337 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1338 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3
1339 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1340 ; SSSE3-NEXT: pand %xmm10, %xmm7
1341 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
1342 ; SSSE3-NEXT: por %xmm7, %xmm3
1343 ; SSSE3-NEXT: pand %xmm3, %xmm2
1344 ; SSSE3-NEXT: pandn %xmm8, %xmm3
1345 ; SSSE3-NEXT: por %xmm2, %xmm3
1346 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
1347 ; SSSE3-NEXT: pxor %xmm4, %xmm2
1348 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
1349 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm6
1350 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1351 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2
1352 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1353 ; SSSE3-NEXT: pand %xmm10, %xmm7
1354 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
1355 ; SSSE3-NEXT: por %xmm7, %xmm2
1356 ; SSSE3-NEXT: pand %xmm2, %xmm1
1357 ; SSSE3-NEXT: pandn %xmm8, %xmm2
1358 ; SSSE3-NEXT: por %xmm1, %xmm2
1359 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
1360 ; SSSE3-NEXT: pxor %xmm4, %xmm1
1361 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
1362 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm6
1363 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1364 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
1365 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1366 ; SSSE3-NEXT: pand %xmm7, %xmm1
1367 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1368 ; SSSE3-NEXT: por %xmm1, %xmm7
1369 ; SSSE3-NEXT: pand %xmm7, %xmm0
1370 ; SSSE3-NEXT: pandn %xmm8, %xmm7
1371 ; SSSE3-NEXT: por %xmm0, %xmm7
1372 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488]
1373 ; SSSE3-NEXT: movdqa %xmm7, %xmm0
1374 ; SSSE3-NEXT: pxor %xmm4, %xmm0
1375 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840]
1376 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
1377 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1
1378 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2]
1379 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
1380 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1381 ; SSSE3-NEXT: pand %xmm10, %xmm6
1382 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
1383 ; SSSE3-NEXT: por %xmm6, %xmm0
1384 ; SSSE3-NEXT: pand %xmm0, %xmm7
1385 ; SSSE3-NEXT: pandn %xmm8, %xmm0
1386 ; SSSE3-NEXT: por %xmm7, %xmm0
1387 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1388 ; SSSE3-NEXT: pxor %xmm4, %xmm1
1389 ; SSSE3-NEXT: movdqa %xmm1, %xmm6
1390 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm6
1391 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1392 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
1393 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1394 ; SSSE3-NEXT: pand %xmm7, %xmm1
1395 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1396 ; SSSE3-NEXT: por %xmm1, %xmm7
1397 ; SSSE3-NEXT: pand %xmm7, %xmm2
1398 ; SSSE3-NEXT: pandn %xmm8, %xmm7
1399 ; SSSE3-NEXT: por %xmm2, %xmm7
1400 ; SSSE3-NEXT: movdqa %xmm3, %xmm1
1401 ; SSSE3-NEXT: pxor %xmm4, %xmm1
1402 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
1403 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm2
1404 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
1405 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
1406 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1407 ; SSSE3-NEXT: pand %xmm6, %xmm1
1408 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1409 ; SSSE3-NEXT: por %xmm1, %xmm2
1410 ; SSSE3-NEXT: pand %xmm2, %xmm3
1411 ; SSSE3-NEXT: pandn %xmm8, %xmm2
1412 ; SSSE3-NEXT: por %xmm3, %xmm2
1413 ; SSSE3-NEXT: pxor %xmm5, %xmm4
1414 ; SSSE3-NEXT: movdqa %xmm4, %xmm1
1415 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1
1416 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1417 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4
1418 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1419 ; SSSE3-NEXT: pand %xmm3, %xmm4
1420 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1421 ; SSSE3-NEXT: por %xmm4, %xmm1
1422 ; SSSE3-NEXT: pand %xmm1, %xmm5
1423 ; SSSE3-NEXT: pandn %xmm8, %xmm1
1424 ; SSSE3-NEXT: por %xmm5, %xmm1
1425 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1426 ; SSSE3-NEXT: pand %xmm3, %xmm1
1427 ; SSSE3-NEXT: pand %xmm3, %xmm2
1428 ; SSSE3-NEXT: packuswb %xmm1, %xmm2
1429 ; SSSE3-NEXT: pand %xmm3, %xmm7
1430 ; SSSE3-NEXT: pand %xmm3, %xmm0
1431 ; SSSE3-NEXT: packuswb %xmm7, %xmm0
1432 ; SSSE3-NEXT: packuswb %xmm2, %xmm0
1433 ; SSSE3-NEXT: packuswb %xmm0, %xmm0
1436 ; SSE41-LABEL: trunc_ssat_v8i64_v8i8:
1438 ; SSE41-NEXT: movdqa %xmm0, %xmm8
1439 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [127,127]
1440 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648]
1441 ; SSE41-NEXT: movdqa %xmm3, %xmm0
1442 ; SSE41-NEXT: pxor %xmm5, %xmm0
1443 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483775,2147483775]
1444 ; SSE41-NEXT: movdqa %xmm10, %xmm6
1445 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
1446 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm6[0,0,2,2]
1447 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1448 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1449 ; SSE41-NEXT: pand %xmm4, %xmm0
1450 ; SSE41-NEXT: por %xmm6, %xmm0
1451 ; SSE41-NEXT: movapd %xmm7, %xmm9
1452 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm9
1453 ; SSE41-NEXT: movdqa %xmm2, %xmm0
1454 ; SSE41-NEXT: pxor %xmm5, %xmm0
1455 ; SSE41-NEXT: movdqa %xmm10, %xmm3
1456 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm3
1457 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1458 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1459 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1460 ; SSE41-NEXT: pand %xmm4, %xmm0
1461 ; SSE41-NEXT: por %xmm3, %xmm0
1462 ; SSE41-NEXT: movapd %xmm7, %xmm11
1463 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm11
1464 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1465 ; SSE41-NEXT: pxor %xmm5, %xmm0
1466 ; SSE41-NEXT: movdqa %xmm10, %xmm2
1467 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
1468 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1469 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1470 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1471 ; SSE41-NEXT: pand %xmm4, %xmm0
1472 ; SSE41-NEXT: por %xmm2, %xmm0
1473 ; SSE41-NEXT: movapd %xmm7, %xmm6
1474 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm6
1475 ; SSE41-NEXT: movdqa %xmm8, %xmm0
1476 ; SSE41-NEXT: pxor %xmm5, %xmm0
1477 ; SSE41-NEXT: movdqa %xmm10, %xmm1
1478 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm1
1479 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
1480 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1481 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1482 ; SSE41-NEXT: pand %xmm2, %xmm0
1483 ; SSE41-NEXT: por %xmm1, %xmm0
1484 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm7
1485 ; SSE41-NEXT: movapd {{.*#+}} xmm2 = [18446744073709551488,18446744073709551488]
1486 ; SSE41-NEXT: movapd %xmm7, %xmm0
1487 ; SSE41-NEXT: xorpd %xmm5, %xmm0
1488 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067840,18446744071562067840]
1489 ; SSE41-NEXT: movapd %xmm0, %xmm1
1490 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm1
1491 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1492 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
1493 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1494 ; SSE41-NEXT: pand %xmm3, %xmm0
1495 ; SSE41-NEXT: por %xmm1, %xmm0
1496 ; SSE41-NEXT: movapd %xmm2, %xmm1
1497 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm1
1498 ; SSE41-NEXT: movapd %xmm6, %xmm0
1499 ; SSE41-NEXT: xorpd %xmm5, %xmm0
1500 ; SSE41-NEXT: movapd %xmm0, %xmm3
1501 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
1502 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm3[0,0,2,2]
1503 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
1504 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1505 ; SSE41-NEXT: pand %xmm7, %xmm0
1506 ; SSE41-NEXT: por %xmm3, %xmm0
1507 ; SSE41-NEXT: movapd %xmm2, %xmm7
1508 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm7
1509 ; SSE41-NEXT: movapd %xmm11, %xmm0
1510 ; SSE41-NEXT: xorpd %xmm5, %xmm0
1511 ; SSE41-NEXT: movapd %xmm0, %xmm3
1512 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
1513 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1514 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
1515 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1516 ; SSE41-NEXT: pand %xmm6, %xmm0
1517 ; SSE41-NEXT: por %xmm3, %xmm0
1518 ; SSE41-NEXT: movapd %xmm2, %xmm3
1519 ; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm3
1520 ; SSE41-NEXT: xorpd %xmm9, %xmm5
1521 ; SSE41-NEXT: movapd %xmm5, %xmm6
1522 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm6
1523 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm6[0,0,2,2]
1524 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm5
1525 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
1526 ; SSE41-NEXT: pand %xmm4, %xmm0
1527 ; SSE41-NEXT: por %xmm6, %xmm0
1528 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm2
1529 ; SSE41-NEXT: movapd {{.*#+}} xmm0 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1530 ; SSE41-NEXT: andpd %xmm0, %xmm2
1531 ; SSE41-NEXT: andpd %xmm0, %xmm3
1532 ; SSE41-NEXT: packusdw %xmm2, %xmm3
1533 ; SSE41-NEXT: andpd %xmm0, %xmm7
1534 ; SSE41-NEXT: andpd %xmm0, %xmm1
1535 ; SSE41-NEXT: packusdw %xmm7, %xmm1
1536 ; SSE41-NEXT: packusdw %xmm3, %xmm1
1537 ; SSE41-NEXT: packuswb %xmm1, %xmm1
1538 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1541 ; AVX1-LABEL: trunc_ssat_v8i64_v8i8:
1543 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [127,127,127,127]
1544 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1545 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127]
1546 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1547 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5
1548 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3
1549 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1550 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1551 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1552 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4
1553 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1554 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1555 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
1556 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1557 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488]
1558 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1559 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5
1560 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3
1561 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1562 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1563 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1564 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm4
1565 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1566 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1567 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1568 ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [1.2598673968951787E-321,1.2598673968951787E-321]
1569 ; AVX1-NEXT: # xmm3 = mem[0,0]
1570 ; AVX1-NEXT: vandpd %xmm3, %xmm2, %xmm2
1571 ; AVX1-NEXT: vandpd %xmm3, %xmm1, %xmm1
1572 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
1573 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1574 ; AVX1-NEXT: vandpd %xmm3, %xmm2, %xmm2
1575 ; AVX1-NEXT: vandpd %xmm3, %xmm0, %xmm0
1576 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0
1577 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1578 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
1579 ; AVX1-NEXT: vzeroupper
1582 ; AVX2-LABEL: trunc_ssat_v8i64_v8i8:
1584 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [127,127,127,127]
1585 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
1586 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1587 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
1588 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1589 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
1590 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3
1591 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1592 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3
1593 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1594 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm2
1595 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u>
1596 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1597 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
1598 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
1599 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm2
1600 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
1601 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1602 ; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0
1603 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1604 ; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]
1605 ; AVX2-NEXT: vzeroupper
1608 ; AVX512-LABEL: trunc_ssat_v8i64_v8i8:
1610 ; AVX512-NEXT: vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1611 ; AVX512-NEXT: vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
1612 ; AVX512-NEXT: vpmovqb %zmm0, %xmm0
1613 ; AVX512-NEXT: vzeroupper
1615 %1 = icmp slt <8 x i64> %a0, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127>
1616 %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>
1617 %3 = icmp sgt <8 x i64> %2, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128>
1618 %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>
1619 %5 = trunc <8 x i64> %4 to <8 x i8>
1623 define void @trunc_ssat_v8i64_v8i8_store(<8 x i64> %a0, <8 x i8> *%p1) {
1624 ; SSE2-LABEL: trunc_ssat_v8i64_v8i8_store:
1626 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [127,127]
1627 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1628 ; SSE2-NEXT: movdqa %xmm3, %xmm5
1629 ; SSE2-NEXT: pxor %xmm4, %xmm5
1630 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775]
1631 ; SSE2-NEXT: movdqa %xmm9, %xmm7
1632 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
1633 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2]
1634 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5
1635 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1636 ; SSE2-NEXT: pand %xmm10, %xmm6
1637 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1638 ; SSE2-NEXT: por %xmm6, %xmm5
1639 ; SSE2-NEXT: pand %xmm5, %xmm3
1640 ; SSE2-NEXT: pandn %xmm8, %xmm5
1641 ; SSE2-NEXT: por %xmm3, %xmm5
1642 ; SSE2-NEXT: movdqa %xmm2, %xmm3
1643 ; SSE2-NEXT: pxor %xmm4, %xmm3
1644 ; SSE2-NEXT: movdqa %xmm9, %xmm6
1645 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
1646 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1647 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3
1648 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1649 ; SSE2-NEXT: pand %xmm10, %xmm7
1650 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
1651 ; SSE2-NEXT: por %xmm7, %xmm3
1652 ; SSE2-NEXT: pand %xmm3, %xmm2
1653 ; SSE2-NEXT: pandn %xmm8, %xmm3
1654 ; SSE2-NEXT: por %xmm2, %xmm3
1655 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1656 ; SSE2-NEXT: pxor %xmm4, %xmm2
1657 ; SSE2-NEXT: movdqa %xmm9, %xmm6
1658 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm6
1659 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1660 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2
1661 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1662 ; SSE2-NEXT: pand %xmm10, %xmm7
1663 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
1664 ; SSE2-NEXT: por %xmm7, %xmm2
1665 ; SSE2-NEXT: pand %xmm2, %xmm1
1666 ; SSE2-NEXT: pandn %xmm8, %xmm2
1667 ; SSE2-NEXT: por %xmm1, %xmm2
1668 ; SSE2-NEXT: movdqa %xmm0, %xmm1
1669 ; SSE2-NEXT: pxor %xmm4, %xmm1
1670 ; SSE2-NEXT: movdqa %xmm9, %xmm6
1671 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6
1672 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1673 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
1674 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1675 ; SSE2-NEXT: pand %xmm7, %xmm1
1676 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1677 ; SSE2-NEXT: por %xmm1, %xmm7
1678 ; SSE2-NEXT: pand %xmm7, %xmm0
1679 ; SSE2-NEXT: pandn %xmm8, %xmm7
1680 ; SSE2-NEXT: por %xmm0, %xmm7
1681 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488]
1682 ; SSE2-NEXT: movdqa %xmm7, %xmm0
1683 ; SSE2-NEXT: pxor %xmm4, %xmm0
1684 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840]
1685 ; SSE2-NEXT: movdqa %xmm0, %xmm1
1686 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1
1687 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2]
1688 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0
1689 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1690 ; SSE2-NEXT: pand %xmm10, %xmm6
1691 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
1692 ; SSE2-NEXT: por %xmm6, %xmm0
1693 ; SSE2-NEXT: pand %xmm0, %xmm7
1694 ; SSE2-NEXT: pandn %xmm8, %xmm0
1695 ; SSE2-NEXT: por %xmm7, %xmm0
1696 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1697 ; SSE2-NEXT: pxor %xmm4, %xmm1
1698 ; SSE2-NEXT: movdqa %xmm1, %xmm6
1699 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm6
1700 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1701 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
1702 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1703 ; SSE2-NEXT: pand %xmm7, %xmm1
1704 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1705 ; SSE2-NEXT: por %xmm1, %xmm7
1706 ; SSE2-NEXT: pand %xmm7, %xmm2
1707 ; SSE2-NEXT: pandn %xmm8, %xmm7
1708 ; SSE2-NEXT: por %xmm2, %xmm7
1709 ; SSE2-NEXT: movdqa %xmm3, %xmm1
1710 ; SSE2-NEXT: pxor %xmm4, %xmm1
1711 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1712 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm2
1713 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
1714 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1
1715 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1716 ; SSE2-NEXT: pand %xmm6, %xmm1
1717 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1718 ; SSE2-NEXT: por %xmm1, %xmm2
1719 ; SSE2-NEXT: pand %xmm2, %xmm3
1720 ; SSE2-NEXT: pandn %xmm8, %xmm2
1721 ; SSE2-NEXT: por %xmm3, %xmm2
1722 ; SSE2-NEXT: pxor %xmm5, %xmm4
1723 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1724 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1
1725 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1726 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
1727 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1728 ; SSE2-NEXT: pand %xmm3, %xmm4
1729 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1730 ; SSE2-NEXT: por %xmm4, %xmm1
1731 ; SSE2-NEXT: pand %xmm1, %xmm5
1732 ; SSE2-NEXT: pandn %xmm8, %xmm1
1733 ; SSE2-NEXT: por %xmm5, %xmm1
1734 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1735 ; SSE2-NEXT: pand %xmm3, %xmm1
1736 ; SSE2-NEXT: pand %xmm3, %xmm2
1737 ; SSE2-NEXT: packuswb %xmm1, %xmm2
1738 ; SSE2-NEXT: pand %xmm3, %xmm7
1739 ; SSE2-NEXT: pand %xmm3, %xmm0
1740 ; SSE2-NEXT: packuswb %xmm7, %xmm0
1741 ; SSE2-NEXT: packuswb %xmm2, %xmm0
1742 ; SSE2-NEXT: packuswb %xmm0, %xmm0
1743 ; SSE2-NEXT: movq %xmm0, (%rdi)
1746 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i8_store:
1748 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [127,127]
1749 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
1750 ; SSSE3-NEXT: movdqa %xmm3, %xmm5
1751 ; SSSE3-NEXT: pxor %xmm4, %xmm5
1752 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775]
1753 ; SSSE3-NEXT: movdqa %xmm9, %xmm7
1754 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7
1755 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2]
1756 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5
1757 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
1758 ; SSSE3-NEXT: pand %xmm10, %xmm6
1759 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1760 ; SSSE3-NEXT: por %xmm6, %xmm5
1761 ; SSSE3-NEXT: pand %xmm5, %xmm3
1762 ; SSSE3-NEXT: pandn %xmm8, %xmm5
1763 ; SSSE3-NEXT: por %xmm3, %xmm5
1764 ; SSSE3-NEXT: movdqa %xmm2, %xmm3
1765 ; SSSE3-NEXT: pxor %xmm4, %xmm3
1766 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
1767 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6
1768 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1769 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3
1770 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
1771 ; SSSE3-NEXT: pand %xmm10, %xmm7
1772 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
1773 ; SSSE3-NEXT: por %xmm7, %xmm3
1774 ; SSSE3-NEXT: pand %xmm3, %xmm2
1775 ; SSSE3-NEXT: pandn %xmm8, %xmm3
1776 ; SSSE3-NEXT: por %xmm2, %xmm3
1777 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
1778 ; SSSE3-NEXT: pxor %xmm4, %xmm2
1779 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
1780 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm6
1781 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
1782 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2
1783 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
1784 ; SSSE3-NEXT: pand %xmm10, %xmm7
1785 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
1786 ; SSSE3-NEXT: por %xmm7, %xmm2
1787 ; SSSE3-NEXT: pand %xmm2, %xmm1
1788 ; SSSE3-NEXT: pandn %xmm8, %xmm2
1789 ; SSSE3-NEXT: por %xmm1, %xmm2
1790 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
1791 ; SSSE3-NEXT: pxor %xmm4, %xmm1
1792 ; SSSE3-NEXT: movdqa %xmm9, %xmm6
1793 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm6
1794 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1795 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
1796 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1797 ; SSSE3-NEXT: pand %xmm7, %xmm1
1798 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1799 ; SSSE3-NEXT: por %xmm1, %xmm7
1800 ; SSSE3-NEXT: pand %xmm7, %xmm0
1801 ; SSSE3-NEXT: pandn %xmm8, %xmm7
1802 ; SSSE3-NEXT: por %xmm0, %xmm7
1803 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488]
1804 ; SSSE3-NEXT: movdqa %xmm7, %xmm0
1805 ; SSSE3-NEXT: pxor %xmm4, %xmm0
1806 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840]
1807 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
1808 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1
1809 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2]
1810 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0
1811 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1812 ; SSSE3-NEXT: pand %xmm10, %xmm6
1813 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
1814 ; SSSE3-NEXT: por %xmm6, %xmm0
1815 ; SSSE3-NEXT: pand %xmm0, %xmm7
1816 ; SSSE3-NEXT: pandn %xmm8, %xmm0
1817 ; SSSE3-NEXT: por %xmm7, %xmm0
1818 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1819 ; SSSE3-NEXT: pxor %xmm4, %xmm1
1820 ; SSSE3-NEXT: movdqa %xmm1, %xmm6
1821 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm6
1822 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1823 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
1824 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1825 ; SSSE3-NEXT: pand %xmm7, %xmm1
1826 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1827 ; SSSE3-NEXT: por %xmm1, %xmm7
1828 ; SSSE3-NEXT: pand %xmm7, %xmm2
1829 ; SSSE3-NEXT: pandn %xmm8, %xmm7
1830 ; SSSE3-NEXT: por %xmm2, %xmm7
1831 ; SSSE3-NEXT: movdqa %xmm3, %xmm1
1832 ; SSSE3-NEXT: pxor %xmm4, %xmm1
1833 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
1834 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm2
1835 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
1836 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1
1837 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1838 ; SSSE3-NEXT: pand %xmm6, %xmm1
1839 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1840 ; SSSE3-NEXT: por %xmm1, %xmm2
1841 ; SSSE3-NEXT: pand %xmm2, %xmm3
1842 ; SSSE3-NEXT: pandn %xmm8, %xmm2
1843 ; SSSE3-NEXT: por %xmm3, %xmm2
1844 ; SSSE3-NEXT: pxor %xmm5, %xmm4
1845 ; SSSE3-NEXT: movdqa %xmm4, %xmm1
1846 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1
1847 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
1848 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4
1849 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1850 ; SSSE3-NEXT: pand %xmm3, %xmm4
1851 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1852 ; SSSE3-NEXT: por %xmm4, %xmm1
1853 ; SSSE3-NEXT: pand %xmm1, %xmm5
1854 ; SSSE3-NEXT: pandn %xmm8, %xmm1
1855 ; SSSE3-NEXT: por %xmm5, %xmm1
1856 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1857 ; SSSE3-NEXT: pand %xmm3, %xmm1
1858 ; SSSE3-NEXT: pand %xmm3, %xmm2
1859 ; SSSE3-NEXT: packuswb %xmm1, %xmm2
1860 ; SSSE3-NEXT: pand %xmm3, %xmm7
1861 ; SSSE3-NEXT: pand %xmm3, %xmm0
1862 ; SSSE3-NEXT: packuswb %xmm7, %xmm0
1863 ; SSSE3-NEXT: packuswb %xmm2, %xmm0
1864 ; SSSE3-NEXT: packuswb %xmm0, %xmm0
1865 ; SSSE3-NEXT: movq %xmm0, (%rdi)
1868 ; SSE41-LABEL: trunc_ssat_v8i64_v8i8_store:
1870 ; SSE41-NEXT: movdqa %xmm0, %xmm8
1871 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [127,127]
1872 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648]
1873 ; SSE41-NEXT: movdqa %xmm3, %xmm0
1874 ; SSE41-NEXT: pxor %xmm5, %xmm0
1875 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483775,2147483775]
1876 ; SSE41-NEXT: movdqa %xmm10, %xmm6
1877 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
1878 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm6[0,0,2,2]
1879 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1880 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1881 ; SSE41-NEXT: pand %xmm4, %xmm0
1882 ; SSE41-NEXT: por %xmm6, %xmm0
1883 ; SSE41-NEXT: movapd %xmm7, %xmm9
1884 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm9
1885 ; SSE41-NEXT: movdqa %xmm2, %xmm0
1886 ; SSE41-NEXT: pxor %xmm5, %xmm0
1887 ; SSE41-NEXT: movdqa %xmm10, %xmm3
1888 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm3
1889 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
1890 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1891 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1892 ; SSE41-NEXT: pand %xmm4, %xmm0
1893 ; SSE41-NEXT: por %xmm3, %xmm0
1894 ; SSE41-NEXT: movapd %xmm7, %xmm11
1895 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm11
1896 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1897 ; SSE41-NEXT: pxor %xmm5, %xmm0
1898 ; SSE41-NEXT: movdqa %xmm10, %xmm2
1899 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
1900 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1901 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1902 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1903 ; SSE41-NEXT: pand %xmm4, %xmm0
1904 ; SSE41-NEXT: por %xmm2, %xmm0
1905 ; SSE41-NEXT: movapd %xmm7, %xmm6
1906 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm6
1907 ; SSE41-NEXT: movdqa %xmm8, %xmm0
1908 ; SSE41-NEXT: pxor %xmm5, %xmm0
1909 ; SSE41-NEXT: movdqa %xmm10, %xmm1
1910 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm1
1911 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
1912 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0
1913 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1914 ; SSE41-NEXT: pand %xmm2, %xmm0
1915 ; SSE41-NEXT: por %xmm1, %xmm0
1916 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm7
1917 ; SSE41-NEXT: movapd {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488]
1918 ; SSE41-NEXT: movapd %xmm7, %xmm0
1919 ; SSE41-NEXT: xorpd %xmm5, %xmm0
1920 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067840,18446744071562067840]
1921 ; SSE41-NEXT: movapd %xmm0, %xmm2
1922 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm2
1923 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
1924 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
1925 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1926 ; SSE41-NEXT: pand %xmm3, %xmm0
1927 ; SSE41-NEXT: por %xmm2, %xmm0
1928 ; SSE41-NEXT: movapd %xmm1, %xmm2
1929 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm2
1930 ; SSE41-NEXT: movapd %xmm6, %xmm0
1931 ; SSE41-NEXT: xorpd %xmm5, %xmm0
1932 ; SSE41-NEXT: movapd %xmm0, %xmm3
1933 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
1934 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm3[0,0,2,2]
1935 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
1936 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1937 ; SSE41-NEXT: pand %xmm7, %xmm0
1938 ; SSE41-NEXT: por %xmm3, %xmm0
1939 ; SSE41-NEXT: movapd %xmm1, %xmm7
1940 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm7
1941 ; SSE41-NEXT: movapd %xmm11, %xmm0
1942 ; SSE41-NEXT: xorpd %xmm5, %xmm0
1943 ; SSE41-NEXT: movapd %xmm0, %xmm3
1944 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
1945 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
1946 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
1947 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1948 ; SSE41-NEXT: pand %xmm6, %xmm0
1949 ; SSE41-NEXT: por %xmm3, %xmm0
1950 ; SSE41-NEXT: movapd %xmm1, %xmm3
1951 ; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm3
1952 ; SSE41-NEXT: xorpd %xmm9, %xmm5
1953 ; SSE41-NEXT: movapd %xmm5, %xmm6
1954 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm6
1955 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm6[0,0,2,2]
1956 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm5
1957 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
1958 ; SSE41-NEXT: pand %xmm4, %xmm0
1959 ; SSE41-NEXT: por %xmm6, %xmm0
1960 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm1
1961 ; SSE41-NEXT: movapd {{.*#+}} xmm0 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1962 ; SSE41-NEXT: andpd %xmm0, %xmm1
1963 ; SSE41-NEXT: andpd %xmm0, %xmm3
1964 ; SSE41-NEXT: packusdw %xmm1, %xmm3
1965 ; SSE41-NEXT: andpd %xmm0, %xmm7
1966 ; SSE41-NEXT: andpd %xmm0, %xmm2
1967 ; SSE41-NEXT: packusdw %xmm7, %xmm2
1968 ; SSE41-NEXT: packusdw %xmm3, %xmm2
1969 ; SSE41-NEXT: packuswb %xmm2, %xmm2
1970 ; SSE41-NEXT: movq %xmm2, (%rdi)
1973 ; AVX1-LABEL: trunc_ssat_v8i64_v8i8_store:
1975 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [127,127,127,127]
1976 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1977 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127]
1978 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1979 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5
1980 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3
1981 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1982 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1983 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1984 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4
1985 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1986 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1987 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
1988 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1989 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488]
1990 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1991 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5
1992 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3
1993 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1994 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1995 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1996 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm4
1997 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1998 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
1999 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2000 ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [1.2598673968951787E-321,1.2598673968951787E-321]
2001 ; AVX1-NEXT: # xmm3 = mem[0,0]
2002 ; AVX1-NEXT: vandpd %xmm3, %xmm2, %xmm2
2003 ; AVX1-NEXT: vandpd %xmm3, %xmm1, %xmm1
2004 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
2005 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
2006 ; AVX1-NEXT: vandpd %xmm3, %xmm2, %xmm2
2007 ; AVX1-NEXT: vandpd %xmm3, %xmm0, %xmm0
2008 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0
2009 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
2010 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
2011 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
2012 ; AVX1-NEXT: vzeroupper
2015 ; AVX2-LABEL: trunc_ssat_v8i64_v8i8_store:
2017 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [127,127,127,127]
2018 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3
2019 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
2020 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3
2021 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
2022 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2023 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3
2024 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
2025 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3
2026 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
2027 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm2
2028 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,0,8,u,u,u,u,u,u,u,u,u,u,u,u>
2029 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
2030 ; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1
2031 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
2032 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm2
2033 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
2034 ; AVX2-NEXT: vpshufb %xmm3, %xmm2, %xmm2
2035 ; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0
2036 ; AVX2-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
2037 ; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2,3]
2038 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
2039 ; AVX2-NEXT: vzeroupper
2042 ; AVX512-LABEL: trunc_ssat_v8i64_v8i8_store:
2044 ; AVX512-NEXT: vpmovsqb %zmm0, (%rdi)
2045 ; AVX512-NEXT: vzeroupper
2047 %1 = icmp slt <8 x i64> %a0, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127>
2048 %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>
2049 %3 = icmp sgt <8 x i64> %2, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128>
2050 %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>
2051 %5 = trunc <8 x i64> %4 to <8 x i8>
2052 store <8 x i8> %5, <8 x i8> *%p1
2056 define <16 x i8> @trunc_ssat_v16i64_v16i8(<16 x i64> %a0) {
2057 ; SSE2-LABEL: trunc_ssat_v16i64_v16i8:
2059 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [127,127]
2060 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
2061 ; SSE2-NEXT: movdqa %xmm6, %xmm9
2062 ; SSE2-NEXT: pxor %xmm8, %xmm9
2063 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483775,2147483775]
2064 ; SSE2-NEXT: movdqa %xmm11, %xmm12
2065 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12
2066 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2067 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9
2068 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
2069 ; SSE2-NEXT: pand %xmm13, %xmm14
2070 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
2071 ; SSE2-NEXT: por %xmm14, %xmm9
2072 ; SSE2-NEXT: pand %xmm9, %xmm6
2073 ; SSE2-NEXT: pandn %xmm10, %xmm9
2074 ; SSE2-NEXT: por %xmm6, %xmm9
2075 ; SSE2-NEXT: movdqa %xmm7, %xmm6
2076 ; SSE2-NEXT: pxor %xmm8, %xmm6
2077 ; SSE2-NEXT: movdqa %xmm11, %xmm12
2078 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm12
2079 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2080 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm6
2081 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2082 ; SSE2-NEXT: pand %xmm13, %xmm6
2083 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
2084 ; SSE2-NEXT: por %xmm6, %xmm12
2085 ; SSE2-NEXT: pand %xmm12, %xmm7
2086 ; SSE2-NEXT: pandn %xmm10, %xmm12
2087 ; SSE2-NEXT: por %xmm7, %xmm12
2088 ; SSE2-NEXT: movdqa %xmm4, %xmm6
2089 ; SSE2-NEXT: pxor %xmm8, %xmm6
2090 ; SSE2-NEXT: movdqa %xmm11, %xmm7
2091 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
2092 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2]
2093 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm6
2094 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2095 ; SSE2-NEXT: pand %xmm13, %xmm6
2096 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
2097 ; SSE2-NEXT: por %xmm6, %xmm13
2098 ; SSE2-NEXT: pand %xmm13, %xmm4
2099 ; SSE2-NEXT: pandn %xmm10, %xmm13
2100 ; SSE2-NEXT: por %xmm4, %xmm13
2101 ; SSE2-NEXT: movdqa %xmm5, %xmm4
2102 ; SSE2-NEXT: pxor %xmm8, %xmm4
2103 ; SSE2-NEXT: movdqa %xmm11, %xmm6
2104 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
2105 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2106 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm4
2107 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2108 ; SSE2-NEXT: pand %xmm7, %xmm4
2109 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
2110 ; SSE2-NEXT: por %xmm4, %xmm14
2111 ; SSE2-NEXT: pand %xmm14, %xmm5
2112 ; SSE2-NEXT: pandn %xmm10, %xmm14
2113 ; SSE2-NEXT: por %xmm5, %xmm14
2114 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2115 ; SSE2-NEXT: pxor %xmm8, %xmm4
2116 ; SSE2-NEXT: movdqa %xmm11, %xmm5
2117 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
2118 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2119 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm4
2120 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2121 ; SSE2-NEXT: pand %xmm6, %xmm4
2122 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2123 ; SSE2-NEXT: por %xmm4, %xmm5
2124 ; SSE2-NEXT: pand %xmm5, %xmm2
2125 ; SSE2-NEXT: pandn %xmm10, %xmm5
2126 ; SSE2-NEXT: por %xmm2, %xmm5
2127 ; SSE2-NEXT: movdqa %xmm3, %xmm2
2128 ; SSE2-NEXT: pxor %xmm8, %xmm2
2129 ; SSE2-NEXT: movdqa %xmm11, %xmm4
2130 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
2131 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2132 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm2
2133 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2134 ; SSE2-NEXT: pand %xmm6, %xmm2
2135 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
2136 ; SSE2-NEXT: por %xmm2, %xmm6
2137 ; SSE2-NEXT: pand %xmm6, %xmm3
2138 ; SSE2-NEXT: pandn %xmm10, %xmm6
2139 ; SSE2-NEXT: por %xmm3, %xmm6
2140 ; SSE2-NEXT: movdqa %xmm0, %xmm2
2141 ; SSE2-NEXT: pxor %xmm8, %xmm2
2142 ; SSE2-NEXT: movdqa %xmm11, %xmm3
2143 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
2144 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2145 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm2
2146 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2147 ; SSE2-NEXT: pand %xmm4, %xmm2
2148 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2149 ; SSE2-NEXT: por %xmm2, %xmm3
2150 ; SSE2-NEXT: pand %xmm3, %xmm0
2151 ; SSE2-NEXT: pandn %xmm10, %xmm3
2152 ; SSE2-NEXT: por %xmm0, %xmm3
2153 ; SSE2-NEXT: movdqa %xmm1, %xmm0
2154 ; SSE2-NEXT: pxor %xmm8, %xmm0
2155 ; SSE2-NEXT: movdqa %xmm11, %xmm2
2156 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
2157 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2158 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0
2159 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2160 ; SSE2-NEXT: pand %xmm4, %xmm0
2161 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
2162 ; SSE2-NEXT: por %xmm0, %xmm4
2163 ; SSE2-NEXT: pand %xmm4, %xmm1
2164 ; SSE2-NEXT: pandn %xmm10, %xmm4
2165 ; SSE2-NEXT: por %xmm1, %xmm4
2166 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [18446744073709551488,18446744073709551488]
2167 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2168 ; SSE2-NEXT: pxor %xmm8, %xmm0
2169 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [18446744071562067840,18446744071562067840]
2170 ; SSE2-NEXT: movdqa %xmm0, %xmm1
2171 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm1
2172 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
2173 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0
2174 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2175 ; SSE2-NEXT: pand %xmm2, %xmm0
2176 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2177 ; SSE2-NEXT: por %xmm0, %xmm1
2178 ; SSE2-NEXT: pand %xmm1, %xmm4
2179 ; SSE2-NEXT: pandn %xmm10, %xmm1
2180 ; SSE2-NEXT: por %xmm4, %xmm1
2181 ; SSE2-NEXT: movdqa %xmm3, %xmm0
2182 ; SSE2-NEXT: pxor %xmm8, %xmm0
2183 ; SSE2-NEXT: movdqa %xmm0, %xmm2
2184 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2
2185 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2186 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0
2187 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2188 ; SSE2-NEXT: pand %xmm4, %xmm7
2189 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
2190 ; SSE2-NEXT: por %xmm7, %xmm0
2191 ; SSE2-NEXT: pand %xmm0, %xmm3
2192 ; SSE2-NEXT: pandn %xmm10, %xmm0
2193 ; SSE2-NEXT: por %xmm3, %xmm0
2194 ; SSE2-NEXT: packssdw %xmm1, %xmm0
2195 ; SSE2-NEXT: movdqa %xmm6, %xmm1
2196 ; SSE2-NEXT: pxor %xmm8, %xmm1
2197 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2198 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2
2199 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2200 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1
2201 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2202 ; SSE2-NEXT: pand %xmm3, %xmm1
2203 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2204 ; SSE2-NEXT: por %xmm1, %xmm2
2205 ; SSE2-NEXT: pand %xmm2, %xmm6
2206 ; SSE2-NEXT: pandn %xmm10, %xmm2
2207 ; SSE2-NEXT: por %xmm6, %xmm2
2208 ; SSE2-NEXT: movdqa %xmm5, %xmm1
2209 ; SSE2-NEXT: pxor %xmm8, %xmm1
2210 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2211 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm3
2212 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2213 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1
2214 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2215 ; SSE2-NEXT: pand %xmm4, %xmm1
2216 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2217 ; SSE2-NEXT: por %xmm1, %xmm3
2218 ; SSE2-NEXT: pand %xmm3, %xmm5
2219 ; SSE2-NEXT: pandn %xmm10, %xmm3
2220 ; SSE2-NEXT: por %xmm5, %xmm3
2221 ; SSE2-NEXT: packssdw %xmm2, %xmm3
2222 ; SSE2-NEXT: packssdw %xmm3, %xmm0
2223 ; SSE2-NEXT: movdqa %xmm14, %xmm1
2224 ; SSE2-NEXT: pxor %xmm8, %xmm1
2225 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2226 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2
2227 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2228 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1
2229 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2230 ; SSE2-NEXT: pand %xmm3, %xmm1
2231 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2232 ; SSE2-NEXT: por %xmm1, %xmm2
2233 ; SSE2-NEXT: pand %xmm2, %xmm14
2234 ; SSE2-NEXT: pandn %xmm10, %xmm2
2235 ; SSE2-NEXT: por %xmm14, %xmm2
2236 ; SSE2-NEXT: movdqa %xmm13, %xmm1
2237 ; SSE2-NEXT: pxor %xmm8, %xmm1
2238 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2239 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm3
2240 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2241 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1
2242 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2243 ; SSE2-NEXT: pand %xmm4, %xmm1
2244 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2245 ; SSE2-NEXT: por %xmm1, %xmm3
2246 ; SSE2-NEXT: pand %xmm3, %xmm13
2247 ; SSE2-NEXT: pandn %xmm10, %xmm3
2248 ; SSE2-NEXT: por %xmm13, %xmm3
2249 ; SSE2-NEXT: packssdw %xmm2, %xmm3
2250 ; SSE2-NEXT: movdqa %xmm12, %xmm1
2251 ; SSE2-NEXT: pxor %xmm8, %xmm1
2252 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2253 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2
2254 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2255 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1
2256 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2257 ; SSE2-NEXT: pand %xmm4, %xmm1
2258 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2259 ; SSE2-NEXT: por %xmm1, %xmm2
2260 ; SSE2-NEXT: pand %xmm2, %xmm12
2261 ; SSE2-NEXT: pandn %xmm10, %xmm2
2262 ; SSE2-NEXT: por %xmm12, %xmm2
2263 ; SSE2-NEXT: pxor %xmm9, %xmm8
2264 ; SSE2-NEXT: movdqa %xmm8, %xmm1
2265 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm1
2266 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
2267 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm8
2268 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]
2269 ; SSE2-NEXT: pand %xmm4, %xmm5
2270 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2271 ; SSE2-NEXT: por %xmm5, %xmm1
2272 ; SSE2-NEXT: pand %xmm1, %xmm9
2273 ; SSE2-NEXT: pandn %xmm10, %xmm1
2274 ; SSE2-NEXT: por %xmm9, %xmm1
2275 ; SSE2-NEXT: packssdw %xmm2, %xmm1
2276 ; SSE2-NEXT: packssdw %xmm1, %xmm3
2277 ; SSE2-NEXT: packsswb %xmm3, %xmm0
2280 ; SSSE3-LABEL: trunc_ssat_v16i64_v16i8:
2282 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [127,127]
2283 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
2284 ; SSSE3-NEXT: movdqa %xmm6, %xmm9
2285 ; SSSE3-NEXT: pxor %xmm8, %xmm9
2286 ; SSSE3-NEXT: movdqa {{.*#+}} xmm11 = [2147483775,2147483775]
2287 ; SSSE3-NEXT: movdqa %xmm11, %xmm12
2288 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm12
2289 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2290 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm9
2291 ; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
2292 ; SSSE3-NEXT: pand %xmm13, %xmm14
2293 ; SSSE3-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
2294 ; SSSE3-NEXT: por %xmm14, %xmm9
2295 ; SSSE3-NEXT: pand %xmm9, %xmm6
2296 ; SSSE3-NEXT: pandn %xmm10, %xmm9
2297 ; SSSE3-NEXT: por %xmm6, %xmm9
2298 ; SSSE3-NEXT: movdqa %xmm7, %xmm6
2299 ; SSSE3-NEXT: pxor %xmm8, %xmm6
2300 ; SSSE3-NEXT: movdqa %xmm11, %xmm12
2301 ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm12
2302 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
2303 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6
2304 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2305 ; SSSE3-NEXT: pand %xmm13, %xmm6
2306 ; SSSE3-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
2307 ; SSSE3-NEXT: por %xmm6, %xmm12
2308 ; SSSE3-NEXT: pand %xmm12, %xmm7
2309 ; SSSE3-NEXT: pandn %xmm10, %xmm12
2310 ; SSSE3-NEXT: por %xmm7, %xmm12
2311 ; SSSE3-NEXT: movdqa %xmm4, %xmm6
2312 ; SSSE3-NEXT: pxor %xmm8, %xmm6
2313 ; SSSE3-NEXT: movdqa %xmm11, %xmm7
2314 ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm7
2315 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2]
2316 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6
2317 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2318 ; SSSE3-NEXT: pand %xmm13, %xmm6
2319 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
2320 ; SSSE3-NEXT: por %xmm6, %xmm13
2321 ; SSSE3-NEXT: pand %xmm13, %xmm4
2322 ; SSSE3-NEXT: pandn %xmm10, %xmm13
2323 ; SSSE3-NEXT: por %xmm4, %xmm13
2324 ; SSSE3-NEXT: movdqa %xmm5, %xmm4
2325 ; SSSE3-NEXT: pxor %xmm8, %xmm4
2326 ; SSSE3-NEXT: movdqa %xmm11, %xmm6
2327 ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6
2328 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2329 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4
2330 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2331 ; SSSE3-NEXT: pand %xmm7, %xmm4
2332 ; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
2333 ; SSSE3-NEXT: por %xmm4, %xmm14
2334 ; SSSE3-NEXT: pand %xmm14, %xmm5
2335 ; SSSE3-NEXT: pandn %xmm10, %xmm14
2336 ; SSSE3-NEXT: por %xmm5, %xmm14
2337 ; SSSE3-NEXT: movdqa %xmm2, %xmm4
2338 ; SSSE3-NEXT: pxor %xmm8, %xmm4
2339 ; SSSE3-NEXT: movdqa %xmm11, %xmm5
2340 ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm5
2341 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2342 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4
2343 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2344 ; SSSE3-NEXT: pand %xmm6, %xmm4
2345 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2346 ; SSSE3-NEXT: por %xmm4, %xmm5
2347 ; SSSE3-NEXT: pand %xmm5, %xmm2
2348 ; SSSE3-NEXT: pandn %xmm10, %xmm5
2349 ; SSSE3-NEXT: por %xmm2, %xmm5
2350 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
2351 ; SSSE3-NEXT: pxor %xmm8, %xmm2
2352 ; SSSE3-NEXT: movdqa %xmm11, %xmm4
2353 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4
2354 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2355 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm2
2356 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2357 ; SSSE3-NEXT: pand %xmm6, %xmm2
2358 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
2359 ; SSSE3-NEXT: por %xmm2, %xmm6
2360 ; SSSE3-NEXT: pand %xmm6, %xmm3
2361 ; SSSE3-NEXT: pandn %xmm10, %xmm6
2362 ; SSSE3-NEXT: por %xmm3, %xmm6
2363 ; SSSE3-NEXT: movdqa %xmm0, %xmm2
2364 ; SSSE3-NEXT: pxor %xmm8, %xmm2
2365 ; SSSE3-NEXT: movdqa %xmm11, %xmm3
2366 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm3
2367 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2368 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm2
2369 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2370 ; SSSE3-NEXT: pand %xmm4, %xmm2
2371 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2372 ; SSSE3-NEXT: por %xmm2, %xmm3
2373 ; SSSE3-NEXT: pand %xmm3, %xmm0
2374 ; SSSE3-NEXT: pandn %xmm10, %xmm3
2375 ; SSSE3-NEXT: por %xmm0, %xmm3
2376 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
2377 ; SSSE3-NEXT: pxor %xmm8, %xmm0
2378 ; SSSE3-NEXT: movdqa %xmm11, %xmm2
2379 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm2
2380 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2381 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0
2382 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2383 ; SSSE3-NEXT: pand %xmm4, %xmm0
2384 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
2385 ; SSSE3-NEXT: por %xmm0, %xmm4
2386 ; SSSE3-NEXT: pand %xmm4, %xmm1
2387 ; SSSE3-NEXT: pandn %xmm10, %xmm4
2388 ; SSSE3-NEXT: por %xmm1, %xmm4
2389 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [18446744073709551488,18446744073709551488]
2390 ; SSSE3-NEXT: movdqa %xmm4, %xmm0
2391 ; SSSE3-NEXT: pxor %xmm8, %xmm0
2392 ; SSSE3-NEXT: movdqa {{.*#+}} xmm11 = [18446744071562067840,18446744071562067840]
2393 ; SSSE3-NEXT: movdqa %xmm0, %xmm1
2394 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm1
2395 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
2396 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0
2397 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2398 ; SSSE3-NEXT: pand %xmm2, %xmm0
2399 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2400 ; SSSE3-NEXT: por %xmm0, %xmm1
2401 ; SSSE3-NEXT: pand %xmm1, %xmm4
2402 ; SSSE3-NEXT: pandn %xmm10, %xmm1
2403 ; SSSE3-NEXT: por %xmm4, %xmm1
2404 ; SSSE3-NEXT: movdqa %xmm3, %xmm0
2405 ; SSSE3-NEXT: pxor %xmm8, %xmm0
2406 ; SSSE3-NEXT: movdqa %xmm0, %xmm2
2407 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2
2408 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2409 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0
2410 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2411 ; SSSE3-NEXT: pand %xmm4, %xmm7
2412 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
2413 ; SSSE3-NEXT: por %xmm7, %xmm0
2414 ; SSSE3-NEXT: pand %xmm0, %xmm3
2415 ; SSSE3-NEXT: pandn %xmm10, %xmm0
2416 ; SSSE3-NEXT: por %xmm3, %xmm0
2417 ; SSSE3-NEXT: packssdw %xmm1, %xmm0
2418 ; SSSE3-NEXT: movdqa %xmm6, %xmm1
2419 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2420 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
2421 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2
2422 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2423 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1
2424 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2425 ; SSSE3-NEXT: pand %xmm3, %xmm1
2426 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2427 ; SSSE3-NEXT: por %xmm1, %xmm2
2428 ; SSSE3-NEXT: pand %xmm2, %xmm6
2429 ; SSSE3-NEXT: pandn %xmm10, %xmm2
2430 ; SSSE3-NEXT: por %xmm6, %xmm2
2431 ; SSSE3-NEXT: movdqa %xmm5, %xmm1
2432 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2433 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
2434 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm3
2435 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2436 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1
2437 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2438 ; SSSE3-NEXT: pand %xmm4, %xmm1
2439 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2440 ; SSSE3-NEXT: por %xmm1, %xmm3
2441 ; SSSE3-NEXT: pand %xmm3, %xmm5
2442 ; SSSE3-NEXT: pandn %xmm10, %xmm3
2443 ; SSSE3-NEXT: por %xmm5, %xmm3
2444 ; SSSE3-NEXT: packssdw %xmm2, %xmm3
2445 ; SSSE3-NEXT: packssdw %xmm3, %xmm0
2446 ; SSSE3-NEXT: movdqa %xmm14, %xmm1
2447 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2448 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
2449 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2
2450 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2451 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1
2452 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2453 ; SSSE3-NEXT: pand %xmm3, %xmm1
2454 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2455 ; SSSE3-NEXT: por %xmm1, %xmm2
2456 ; SSSE3-NEXT: pand %xmm2, %xmm14
2457 ; SSSE3-NEXT: pandn %xmm10, %xmm2
2458 ; SSSE3-NEXT: por %xmm14, %xmm2
2459 ; SSSE3-NEXT: movdqa %xmm13, %xmm1
2460 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2461 ; SSSE3-NEXT: movdqa %xmm1, %xmm3
2462 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm3
2463 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2464 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1
2465 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2466 ; SSSE3-NEXT: pand %xmm4, %xmm1
2467 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
2468 ; SSSE3-NEXT: por %xmm1, %xmm3
2469 ; SSSE3-NEXT: pand %xmm3, %xmm13
2470 ; SSSE3-NEXT: pandn %xmm10, %xmm3
2471 ; SSSE3-NEXT: por %xmm13, %xmm3
2472 ; SSSE3-NEXT: packssdw %xmm2, %xmm3
2473 ; SSSE3-NEXT: movdqa %xmm12, %xmm1
2474 ; SSSE3-NEXT: pxor %xmm8, %xmm1
2475 ; SSSE3-NEXT: movdqa %xmm1, %xmm2
2476 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2
2477 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
2478 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1
2479 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2480 ; SSSE3-NEXT: pand %xmm4, %xmm1
2481 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2482 ; SSSE3-NEXT: por %xmm1, %xmm2
2483 ; SSSE3-NEXT: pand %xmm2, %xmm12
2484 ; SSSE3-NEXT: pandn %xmm10, %xmm2
2485 ; SSSE3-NEXT: por %xmm12, %xmm2
2486 ; SSSE3-NEXT: pxor %xmm9, %xmm8
2487 ; SSSE3-NEXT: movdqa %xmm8, %xmm1
2488 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm1
2489 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
2490 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm8
2491 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3]
2492 ; SSSE3-NEXT: pand %xmm4, %xmm5
2493 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2494 ; SSSE3-NEXT: por %xmm5, %xmm1
2495 ; SSSE3-NEXT: pand %xmm1, %xmm9
2496 ; SSSE3-NEXT: pandn %xmm10, %xmm1
2497 ; SSSE3-NEXT: por %xmm9, %xmm1
2498 ; SSSE3-NEXT: packssdw %xmm2, %xmm1
2499 ; SSSE3-NEXT: packssdw %xmm1, %xmm3
2500 ; SSSE3-NEXT: packsswb %xmm3, %xmm0
2503 ; SSE41-LABEL: trunc_ssat_v16i64_v16i8:
2505 ; SSE41-NEXT: movdqa %xmm0, %xmm8
2506 ; SSE41-NEXT: movapd {{.*#+}} xmm11 = [127,127]
2507 ; SSE41-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648]
2508 ; SSE41-NEXT: movdqa %xmm6, %xmm0
2509 ; SSE41-NEXT: pxor %xmm9, %xmm0
2510 ; SSE41-NEXT: movdqa {{.*#+}} xmm12 = [2147483775,2147483775]
2511 ; SSE41-NEXT: movdqa %xmm12, %xmm10
2512 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm10
2513 ; SSE41-NEXT: pshufd {{.*#+}} xmm13 = xmm10[0,0,2,2]
2514 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2515 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2516 ; SSE41-NEXT: pand %xmm13, %xmm0
2517 ; SSE41-NEXT: por %xmm10, %xmm0
2518 ; SSE41-NEXT: movapd %xmm11, %xmm10
2519 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm10
2520 ; SSE41-NEXT: movdqa %xmm7, %xmm0
2521 ; SSE41-NEXT: pxor %xmm9, %xmm0
2522 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2523 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
2524 ; SSE41-NEXT: pshufd {{.*#+}} xmm13 = xmm6[0,0,2,2]
2525 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2526 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2527 ; SSE41-NEXT: pand %xmm13, %xmm0
2528 ; SSE41-NEXT: por %xmm6, %xmm0
2529 ; SSE41-NEXT: movapd %xmm11, %xmm13
2530 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm13
2531 ; SSE41-NEXT: movdqa %xmm4, %xmm0
2532 ; SSE41-NEXT: pxor %xmm9, %xmm0
2533 ; SSE41-NEXT: movdqa %xmm12, %xmm6
2534 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6
2535 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
2536 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2537 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2538 ; SSE41-NEXT: pand %xmm7, %xmm0
2539 ; SSE41-NEXT: por %xmm6, %xmm0
2540 ; SSE41-NEXT: movapd %xmm11, %xmm14
2541 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm14
2542 ; SSE41-NEXT: movdqa %xmm5, %xmm0
2543 ; SSE41-NEXT: pxor %xmm9, %xmm0
2544 ; SSE41-NEXT: movdqa %xmm12, %xmm4
2545 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4
2546 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2547 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2548 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2549 ; SSE41-NEXT: pand %xmm6, %xmm0
2550 ; SSE41-NEXT: por %xmm4, %xmm0
2551 ; SSE41-NEXT: movapd %xmm11, %xmm15
2552 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm15
2553 ; SSE41-NEXT: movdqa %xmm2, %xmm0
2554 ; SSE41-NEXT: pxor %xmm9, %xmm0
2555 ; SSE41-NEXT: movdqa %xmm12, %xmm5
2556 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5
2557 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2558 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2559 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2560 ; SSE41-NEXT: pand %xmm6, %xmm0
2561 ; SSE41-NEXT: por %xmm5, %xmm0
2562 ; SSE41-NEXT: movapd %xmm11, %xmm5
2563 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5
2564 ; SSE41-NEXT: movdqa %xmm3, %xmm0
2565 ; SSE41-NEXT: pxor %xmm9, %xmm0
2566 ; SSE41-NEXT: movdqa %xmm12, %xmm2
2567 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
2568 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
2569 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2570 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2571 ; SSE41-NEXT: pand %xmm6, %xmm0
2572 ; SSE41-NEXT: por %xmm2, %xmm0
2573 ; SSE41-NEXT: movapd %xmm11, %xmm6
2574 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm6
2575 ; SSE41-NEXT: movdqa %xmm8, %xmm0
2576 ; SSE41-NEXT: pxor %xmm9, %xmm0
2577 ; SSE41-NEXT: movdqa %xmm12, %xmm2
2578 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
2579 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2580 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2581 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2582 ; SSE41-NEXT: pand %xmm3, %xmm0
2583 ; SSE41-NEXT: por %xmm2, %xmm0
2584 ; SSE41-NEXT: movapd %xmm11, %xmm7
2585 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm7
2586 ; SSE41-NEXT: movdqa %xmm1, %xmm0
2587 ; SSE41-NEXT: pxor %xmm9, %xmm0
2588 ; SSE41-NEXT: movdqa %xmm12, %xmm2
2589 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
2590 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
2591 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0
2592 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2593 ; SSE41-NEXT: pand %xmm3, %xmm0
2594 ; SSE41-NEXT: por %xmm2, %xmm0
2595 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm11
2596 ; SSE41-NEXT: movapd {{.*#+}} xmm2 = [18446744073709551488,18446744073709551488]
2597 ; SSE41-NEXT: movapd %xmm11, %xmm0
2598 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2599 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067840,18446744071562067840]
2600 ; SSE41-NEXT: movapd %xmm0, %xmm1
2601 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm1
2602 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
2603 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2604 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2605 ; SSE41-NEXT: pand %xmm4, %xmm0
2606 ; SSE41-NEXT: por %xmm1, %xmm0
2607 ; SSE41-NEXT: movapd %xmm2, %xmm4
2608 ; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm4
2609 ; SSE41-NEXT: movapd %xmm7, %xmm0
2610 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2611 ; SSE41-NEXT: movapd %xmm0, %xmm1
2612 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm1
2613 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
2614 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2615 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2616 ; SSE41-NEXT: pand %xmm3, %xmm0
2617 ; SSE41-NEXT: por %xmm1, %xmm0
2618 ; SSE41-NEXT: movapd %xmm2, %xmm1
2619 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm1
2620 ; SSE41-NEXT: packssdw %xmm4, %xmm1
2621 ; SSE41-NEXT: movapd %xmm6, %xmm0
2622 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2623 ; SSE41-NEXT: movapd %xmm0, %xmm3
2624 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
2625 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2626 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2627 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2628 ; SSE41-NEXT: pand %xmm4, %xmm0
2629 ; SSE41-NEXT: por %xmm3, %xmm0
2630 ; SSE41-NEXT: movapd %xmm2, %xmm3
2631 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm3
2632 ; SSE41-NEXT: movapd %xmm5, %xmm0
2633 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2634 ; SSE41-NEXT: movapd %xmm0, %xmm4
2635 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm4
2636 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2637 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2638 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2639 ; SSE41-NEXT: pand %xmm6, %xmm0
2640 ; SSE41-NEXT: por %xmm4, %xmm0
2641 ; SSE41-NEXT: movapd %xmm2, %xmm4
2642 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm4
2643 ; SSE41-NEXT: packssdw %xmm3, %xmm4
2644 ; SSE41-NEXT: packssdw %xmm4, %xmm1
2645 ; SSE41-NEXT: movapd %xmm15, %xmm0
2646 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2647 ; SSE41-NEXT: movapd %xmm0, %xmm3
2648 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
2649 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
2650 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2651 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2652 ; SSE41-NEXT: pand %xmm4, %xmm0
2653 ; SSE41-NEXT: por %xmm3, %xmm0
2654 ; SSE41-NEXT: movapd %xmm2, %xmm3
2655 ; SSE41-NEXT: blendvpd %xmm0, %xmm15, %xmm3
2656 ; SSE41-NEXT: movapd %xmm14, %xmm0
2657 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2658 ; SSE41-NEXT: movapd %xmm0, %xmm4
2659 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm4
2660 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2661 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2662 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2663 ; SSE41-NEXT: pand %xmm5, %xmm0
2664 ; SSE41-NEXT: por %xmm4, %xmm0
2665 ; SSE41-NEXT: movapd %xmm2, %xmm4
2666 ; SSE41-NEXT: blendvpd %xmm0, %xmm14, %xmm4
2667 ; SSE41-NEXT: packssdw %xmm3, %xmm4
2668 ; SSE41-NEXT: movapd %xmm13, %xmm0
2669 ; SSE41-NEXT: xorpd %xmm9, %xmm0
2670 ; SSE41-NEXT: movapd %xmm0, %xmm3
2671 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3
2672 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
2673 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0
2674 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2675 ; SSE41-NEXT: pand %xmm5, %xmm0
2676 ; SSE41-NEXT: por %xmm3, %xmm0
2677 ; SSE41-NEXT: movapd %xmm2, %xmm3
2678 ; SSE41-NEXT: blendvpd %xmm0, %xmm13, %xmm3
2679 ; SSE41-NEXT: xorpd %xmm10, %xmm9
2680 ; SSE41-NEXT: movapd %xmm9, %xmm5
2681 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm5
2682 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2683 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm9
2684 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm9[1,1,3,3]
2685 ; SSE41-NEXT: pand %xmm6, %xmm0
2686 ; SSE41-NEXT: por %xmm5, %xmm0
2687 ; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2
2688 ; SSE41-NEXT: packssdw %xmm3, %xmm2
2689 ; SSE41-NEXT: packssdw %xmm2, %xmm4
2690 ; SSE41-NEXT: packsswb %xmm4, %xmm1
2691 ; SSE41-NEXT: movdqa %xmm1, %xmm0
2694 ; AVX1-LABEL: trunc_ssat_v16i64_v16i8:
2696 ; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [127,127,127,127]
2697 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
2698 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [127,127]
2699 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
2700 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm6, %xmm7
2701 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5
2702 ; AVX1-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3
2703 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
2704 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
2705 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm6, %xmm7
2706 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5
2707 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
2708 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
2709 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
2710 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm6, %xmm7
2711 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5
2712 ; AVX1-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
2713 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
2714 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
2715 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm6, %xmm6
2716 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
2717 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
2718 ; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2719 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
2720 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [18446744073709551488,18446744073709551488]
2721 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
2722 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm0, %xmm7
2723 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5
2724 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
2725 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
2726 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
2727 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm1, %xmm7
2728 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5
2729 ; AVX1-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
2730 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
2731 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
2732 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm2, %xmm7
2733 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5
2734 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
2735 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
2736 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
2737 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm6
2738 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
2739 ; AVX1-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3
2740 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
2741 ; AVX1-NEXT: vpackssdw %xmm4, %xmm3, %xmm3
2742 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
2743 ; AVX1-NEXT: vpackssdw %xmm4, %xmm2, %xmm2
2744 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2
2745 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
2746 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
2747 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2748 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0
2749 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2750 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
2751 ; AVX1-NEXT: vzeroupper
2754 ; AVX2-LABEL: trunc_ssat_v16i64_v16i8:
2756 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [127,127,127,127]
2757 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm5
2758 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
2759 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm4, %ymm5
2760 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3
2761 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm4, %ymm5
2762 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
2763 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm4, %ymm5
2764 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
2765 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2766 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm1, %ymm5
2767 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
2768 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm5
2769 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
2770 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
2771 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm1
2772 ; AVX2-NEXT: vblendvpd %ymm1, %ymm3, %ymm4, %ymm1
2773 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm2, %ymm3
2774 ; AVX2-NEXT: vblendvpd %ymm3, %ymm2, %ymm4, %ymm2
2775 ; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
2776 ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
2777 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2778 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
2779 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2780 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2781 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
2782 ; AVX2-NEXT: vzeroupper
2785 ; AVX512-LABEL: trunc_ssat_v16i64_v16i8:
2787 ; AVX512-NEXT: vpbroadcastq {{.*#+}} zmm2 = [127,127,127,127,127,127,127,127]
2788 ; AVX512-NEXT: vpminsq %zmm2, %zmm0, %zmm0
2789 ; AVX512-NEXT: vpminsq %zmm2, %zmm1, %zmm1
2790 ; AVX512-NEXT: vpbroadcastq {{.*#+}} zmm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2791 ; AVX512-NEXT: vpmaxsq %zmm2, %zmm1, %zmm1
2792 ; AVX512-NEXT: vpmaxsq %zmm2, %zmm0, %zmm0
2793 ; AVX512-NEXT: vpmovqd %zmm0, %ymm0
2794 ; AVX512-NEXT: vpmovqd %zmm1, %ymm1
2795 ; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2796 ; AVX512-NEXT: vpmovdb %zmm0, %xmm0
2797 ; AVX512-NEXT: vzeroupper
2799 %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>
2800 %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>
2801 %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>
2802 %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>
2803 %5 = trunc <16 x i64> %4 to <16 x i8>
2807 define <8 x i8> @trunc_ssat_v8i32_v8i8(<8 x i32> %a0) {
2808 ; SSE-LABEL: trunc_ssat_v8i32_v8i8:
2810 ; SSE-NEXT: packssdw %xmm1, %xmm0
2811 ; SSE-NEXT: packsswb %xmm0, %xmm0
2814 ; AVX1-LABEL: trunc_ssat_v8i32_v8i8:
2816 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
2817 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2818 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2819 ; AVX1-NEXT: vzeroupper
2822 ; AVX2-LABEL: trunc_ssat_v8i32_v8i8:
2824 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2825 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2826 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2827 ; AVX2-NEXT: vzeroupper
2830 ; AVX512F-LABEL: trunc_ssat_v8i32_v8i8:
2832 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]
2833 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2834 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
2835 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2836 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
2837 ; AVX512F-NEXT: vzeroupper
2838 ; AVX512F-NEXT: retq
2840 ; AVX512VL-LABEL: trunc_ssat_v8i32_v8i8:
2841 ; AVX512VL: # %bb.0:
2842 ; AVX512VL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2843 ; AVX512VL-NEXT: vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2844 ; AVX512VL-NEXT: vpmovdb %ymm0, %xmm0
2845 ; AVX512VL-NEXT: vzeroupper
2846 ; AVX512VL-NEXT: retq
2848 ; AVX512BW-LABEL: trunc_ssat_v8i32_v8i8:
2849 ; AVX512BW: # %bb.0:
2850 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]
2851 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2852 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
2853 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2854 ; AVX512BW-NEXT: vpmovdb %zmm0, %xmm0
2855 ; AVX512BW-NEXT: vzeroupper
2856 ; AVX512BW-NEXT: retq
2858 ; AVX512BWVL-LABEL: trunc_ssat_v8i32_v8i8:
2859 ; AVX512BWVL: # %bb.0:
2860 ; AVX512BWVL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2861 ; AVX512BWVL-NEXT: vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
2862 ; AVX512BWVL-NEXT: vpmovdb %ymm0, %xmm0
2863 ; AVX512BWVL-NEXT: vzeroupper
2864 ; AVX512BWVL-NEXT: retq
2865 %1 = icmp slt <8 x i32> %a0, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
2866 %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>
2867 %3 = icmp sgt <8 x i32> %2, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
2868 %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>
2869 %5 = trunc <8 x i32> %4 to <8 x i8>
2873 define void @trunc_ssat_v8i32_v8i8_store(<8 x i32> %a0, <8 x i8> *%p1) {
2874 ; SSE-LABEL: trunc_ssat_v8i32_v8i8_store:
2876 ; SSE-NEXT: packssdw %xmm1, %xmm0
2877 ; SSE-NEXT: packsswb %xmm0, %xmm0
2878 ; SSE-NEXT: movq %xmm0, (%rdi)
2881 ; AVX1-LABEL: trunc_ssat_v8i32_v8i8_store:
2883 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
2884 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2885 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2886 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
2887 ; AVX1-NEXT: vzeroupper
2890 ; AVX2-LABEL: trunc_ssat_v8i32_v8i8_store:
2892 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2893 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2894 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2895 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
2896 ; AVX2-NEXT: vzeroupper
2899 ; AVX512F-LABEL: trunc_ssat_v8i32_v8i8_store:
2901 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]
2902 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2903 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
2904 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2905 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
2906 ; AVX512F-NEXT: vmovq %xmm0, (%rdi)
2907 ; AVX512F-NEXT: vzeroupper
2908 ; AVX512F-NEXT: retq
2910 ; AVX512VL-LABEL: trunc_ssat_v8i32_v8i8_store:
2911 ; AVX512VL: # %bb.0:
2912 ; AVX512VL-NEXT: vpmovsdb %ymm0, (%rdi)
2913 ; AVX512VL-NEXT: vzeroupper
2914 ; AVX512VL-NEXT: retq
2916 ; AVX512BW-LABEL: trunc_ssat_v8i32_v8i8_store:
2917 ; AVX512BW: # %bb.0:
2918 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127]
2919 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2920 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168]
2921 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2922 ; AVX512BW-NEXT: vpmovdb %zmm0, %xmm0
2923 ; AVX512BW-NEXT: vmovq %xmm0, (%rdi)
2924 ; AVX512BW-NEXT: vzeroupper
2925 ; AVX512BW-NEXT: retq
2927 ; AVX512BWVL-LABEL: trunc_ssat_v8i32_v8i8_store:
2928 ; AVX512BWVL: # %bb.0:
2929 ; AVX512BWVL-NEXT: vpmovsdb %ymm0, (%rdi)
2930 ; AVX512BWVL-NEXT: vzeroupper
2931 ; AVX512BWVL-NEXT: retq
2932 %1 = icmp slt <8 x i32> %a0, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127>
2933 %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>
2934 %3 = icmp sgt <8 x i32> %2, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
2935 %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>
2936 %5 = trunc <8 x i32> %4 to <8 x i8>
2937 store <8 x i8> %5, <8 x i8> *%p1
2941 define <16 x i8> @trunc_ssat_v16i32_v16i8(<16 x i32> %a0) {
2942 ; SSE-LABEL: trunc_ssat_v16i32_v16i8:
2944 ; SSE-NEXT: packssdw %xmm3, %xmm2
2945 ; SSE-NEXT: packssdw %xmm1, %xmm0
2946 ; SSE-NEXT: packsswb %xmm2, %xmm0
2949 ; AVX1-LABEL: trunc_ssat_v16i32_v16i8:
2951 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2952 ; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1
2953 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
2954 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
2955 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
2956 ; AVX1-NEXT: vzeroupper
2959 ; AVX2-LABEL: trunc_ssat_v16i32_v16i8:
2961 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
2962 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2963 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2964 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
2965 ; AVX2-NEXT: vzeroupper
2968 ; AVX512-LABEL: trunc_ssat_v16i32_v16i8:
2970 ; AVX512-NEXT: vpmovsdb %zmm0, %xmm0
2971 ; AVX512-NEXT: vzeroupper
2973 %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>
2974 %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>
2975 %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>
2976 %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>
2977 %5 = trunc <16 x i32> %4 to <16 x i8>
2981 define <16 x i8> @trunc_ssat_v16i16_v16i8(<16 x i16> %a0) {
2982 ; SSE-LABEL: trunc_ssat_v16i16_v16i8:
2984 ; SSE-NEXT: packsswb %xmm1, %xmm0
2987 ; AVX1-LABEL: trunc_ssat_v16i16_v16i8:
2989 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
2990 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
2991 ; AVX1-NEXT: vzeroupper
2994 ; AVX2-LABEL: trunc_ssat_v16i16_v16i8:
2996 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2997 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
2998 ; AVX2-NEXT: vzeroupper
3001 ; AVX512F-LABEL: trunc_ssat_v16i16_v16i8:
3003 ; AVX512F-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0
3004 ; AVX512F-NEXT: vpmaxsw {{.*}}(%rip), %ymm0, %ymm0
3005 ; 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
3006 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
3007 ; AVX512F-NEXT: vzeroupper
3008 ; AVX512F-NEXT: retq
3010 ; AVX512VL-LABEL: trunc_ssat_v16i16_v16i8:
3011 ; AVX512VL: # %bb.0:
3012 ; AVX512VL-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0
3013 ; AVX512VL-NEXT: vpmaxsw {{.*}}(%rip), %ymm0, %ymm0
3014 ; 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
3015 ; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0
3016 ; AVX512VL-NEXT: vzeroupper
3017 ; AVX512VL-NEXT: retq
3019 ; AVX512BW-LABEL: trunc_ssat_v16i16_v16i8:
3020 ; AVX512BW: # %bb.0:
3021 ; AVX512BW-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0
3022 ; AVX512BW-NEXT: vpmaxsw {{.*}}(%rip), %ymm0, %ymm0
3023 ; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0
3024 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
3025 ; AVX512BW-NEXT: vzeroupper
3026 ; AVX512BW-NEXT: retq
3028 ; AVX512BWVL-LABEL: trunc_ssat_v16i16_v16i8:
3029 ; AVX512BWVL: # %bb.0:
3030 ; AVX512BWVL-NEXT: vpmovswb %ymm0, %xmm0
3031 ; AVX512BWVL-NEXT: vzeroupper
3032 ; AVX512BWVL-NEXT: retq
3033 %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>
3034 %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>
3035 %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>
3036 %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>
3037 %5 = trunc <16 x i16> %4 to <16 x i8>
3041 define <32 x i8> @trunc_ssat_v32i16_v32i8(<32 x i16> %a0) {
3042 ; SSE-LABEL: trunc_ssat_v32i16_v32i8:
3044 ; SSE-NEXT: packsswb %xmm1, %xmm0
3045 ; SSE-NEXT: packsswb %xmm3, %xmm2
3046 ; SSE-NEXT: movdqa %xmm2, %xmm1
3049 ; AVX1-LABEL: trunc_ssat_v32i16_v32i8:
3051 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3052 ; AVX1-NEXT: vpacksswb %xmm2, %xmm1, %xmm1
3053 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
3054 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0
3055 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
3058 ; AVX2-LABEL: trunc_ssat_v32i16_v32i8:
3060 ; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
3061 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3064 ; AVX512F-LABEL: trunc_ssat_v32i16_v32i8:
3066 ; AVX512F-NEXT: vmovdqa {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
3067 ; AVX512F-NEXT: vpminsw %ymm2, %ymm0, %ymm0
3068 ; AVX512F-NEXT: vpminsw %ymm2, %ymm1, %ymm1
3069 ; AVX512F-NEXT: vmovdqa {{.*#+}} ymm2 = [65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408]
3070 ; AVX512F-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1
3071 ; AVX512F-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
3072 ; 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
3073 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0
3074 ; 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
3075 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1
3076 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
3077 ; AVX512F-NEXT: retq
3079 ; AVX512VL-LABEL: trunc_ssat_v32i16_v32i8:
3080 ; AVX512VL: # %bb.0:
3081 ; AVX512VL-NEXT: vmovdqa {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
3082 ; AVX512VL-NEXT: vpminsw %ymm2, %ymm0, %ymm0
3083 ; AVX512VL-NEXT: vpminsw %ymm2, %ymm1, %ymm1
3084 ; AVX512VL-NEXT: vmovdqa {{.*#+}} ymm2 = [65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408]
3085 ; AVX512VL-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1
3086 ; AVX512VL-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
3087 ; 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
3088 ; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0
3089 ; 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
3090 ; AVX512VL-NEXT: vpmovdb %zmm1, %xmm1
3091 ; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
3092 ; AVX512VL-NEXT: retq
3094 ; AVX512BW-LABEL: trunc_ssat_v32i16_v32i8:
3095 ; AVX512BW: # %bb.0:
3096 ; AVX512BW-NEXT: vpmovswb %zmm0, %ymm0
3097 ; AVX512BW-NEXT: retq
3099 ; AVX512BWVL-LABEL: trunc_ssat_v32i16_v32i8:
3100 ; AVX512BWVL: # %bb.0:
3101 ; AVX512BWVL-NEXT: vpmovswb %zmm0, %ymm0
3102 ; AVX512BWVL-NEXT: retq
3103 %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>
3104 %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>
3105 %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>
3106 %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>
3107 %5 = trunc <32 x i16> %4 to <32 x i8>