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