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