[Alignment][NFC] Use Align with TargetLowering::setMinFunctionAlignment
[llvm-core.git] / test / CodeGen / X86 / sadd_sat_vec.ll
blob4d185153810145a56f0feec0bc10860a80e74e44
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-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX512
9 declare <1 x i8> @llvm.sadd.sat.v1i8(<1 x i8>, <1 x i8>)
10 declare <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8>, <2 x i8>)
11 declare <4 x i8> @llvm.sadd.sat.v4i8(<4 x i8>, <4 x i8>)
12 declare <8 x i8> @llvm.sadd.sat.v8i8(<8 x i8>, <8 x i8>)
13 declare <12 x i8> @llvm.sadd.sat.v12i8(<12 x i8>, <12 x i8>)
14 declare <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8>, <16 x i8>)
15 declare <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8>, <32 x i8>)
16 declare <64 x i8> @llvm.sadd.sat.v64i8(<64 x i8>, <64 x i8>)
18 declare <1 x i16> @llvm.sadd.sat.v1i16(<1 x i16>, <1 x i16>)
19 declare <2 x i16> @llvm.sadd.sat.v2i16(<2 x i16>, <2 x i16>)
20 declare <4 x i16> @llvm.sadd.sat.v4i16(<4 x i16>, <4 x i16>)
21 declare <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16>, <8 x i16>)
22 declare <12 x i16> @llvm.sadd.sat.v12i16(<12 x i16>, <12 x i16>)
23 declare <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16>, <16 x i16>)
24 declare <32 x i16> @llvm.sadd.sat.v32i16(<32 x i16>, <32 x i16>)
26 declare <16 x i1> @llvm.sadd.sat.v16i1(<16 x i1>, <16 x i1>)
27 declare <16 x i4> @llvm.sadd.sat.v16i4(<16 x i4>, <16 x i4>)
29 declare <2 x i32> @llvm.sadd.sat.v2i32(<2 x i32>, <2 x i32>)
30 declare <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32>, <4 x i32>)
31 declare <8 x i32> @llvm.sadd.sat.v8i32(<8 x i32>, <8 x i32>)
32 declare <16 x i32> @llvm.sadd.sat.v16i32(<16 x i32>, <16 x i32>)
33 declare <2 x i64> @llvm.sadd.sat.v2i64(<2 x i64>, <2 x i64>)
34 declare <4 x i64> @llvm.sadd.sat.v4i64(<4 x i64>, <4 x i64>)
35 declare <8 x i64> @llvm.sadd.sat.v8i64(<8 x i64>, <8 x i64>)
37 declare <4 x i24> @llvm.sadd.sat.v4i24(<4 x i24>, <4 x i24>)
38 declare <2 x i128> @llvm.sadd.sat.v2i128(<2 x i128>, <2 x i128>)
40 ; Legal types, depending on architecture.
42 define <16 x i8> @v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {
43 ; SSE-LABEL: v16i8:
44 ; SSE:       # %bb.0:
45 ; SSE-NEXT:    paddsb %xmm1, %xmm0
46 ; SSE-NEXT:    retq
48 ; AVX-LABEL: v16i8:
49 ; AVX:       # %bb.0:
50 ; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
51 ; AVX-NEXT:    retq
52   %z = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)
53   ret <16 x i8> %z
56 define <32 x i8> @v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {
57 ; SSE-LABEL: v32i8:
58 ; SSE:       # %bb.0:
59 ; SSE-NEXT:    paddsb %xmm2, %xmm0
60 ; SSE-NEXT:    paddsb %xmm3, %xmm1
61 ; SSE-NEXT:    retq
63 ; AVX1-LABEL: v32i8:
64 ; AVX1:       # %bb.0:
65 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
66 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
67 ; AVX1-NEXT:    vpaddsb %xmm2, %xmm3, %xmm2
68 ; AVX1-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
69 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
70 ; AVX1-NEXT:    retq
72 ; AVX2-LABEL: v32i8:
73 ; AVX2:       # %bb.0:
74 ; AVX2-NEXT:    vpaddsb %ymm1, %ymm0, %ymm0
75 ; AVX2-NEXT:    retq
77 ; AVX512-LABEL: v32i8:
78 ; AVX512:       # %bb.0:
79 ; AVX512-NEXT:    vpaddsb %ymm1, %ymm0, %ymm0
80 ; AVX512-NEXT:    retq
81   %z = call <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8> %x, <32 x i8> %y)
82   ret <32 x i8> %z
85 define <64 x i8> @v64i8(<64 x i8> %x, <64 x i8> %y) nounwind {
86 ; SSE-LABEL: v64i8:
87 ; SSE:       # %bb.0:
88 ; SSE-NEXT:    paddsb %xmm4, %xmm0
89 ; SSE-NEXT:    paddsb %xmm5, %xmm1
90 ; SSE-NEXT:    paddsb %xmm6, %xmm2
91 ; SSE-NEXT:    paddsb %xmm7, %xmm3
92 ; SSE-NEXT:    retq
94 ; AVX1-LABEL: v64i8:
95 ; AVX1:       # %bb.0:
96 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
97 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
98 ; AVX1-NEXT:    vpaddsb %xmm4, %xmm5, %xmm4
99 ; AVX1-NEXT:    vpaddsb %xmm2, %xmm0, %xmm0
100 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
101 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
102 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
103 ; AVX1-NEXT:    vpaddsb %xmm2, %xmm4, %xmm2
104 ; AVX1-NEXT:    vpaddsb %xmm3, %xmm1, %xmm1
105 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
106 ; AVX1-NEXT:    retq
108 ; AVX2-LABEL: v64i8:
109 ; AVX2:       # %bb.0:
110 ; AVX2-NEXT:    vpaddsb %ymm2, %ymm0, %ymm0
111 ; AVX2-NEXT:    vpaddsb %ymm3, %ymm1, %ymm1
112 ; AVX2-NEXT:    retq
114 ; AVX512-LABEL: v64i8:
115 ; AVX512:       # %bb.0:
116 ; AVX512-NEXT:    vpaddsb %zmm1, %zmm0, %zmm0
117 ; AVX512-NEXT:    retq
118   %z = call <64 x i8> @llvm.sadd.sat.v64i8(<64 x i8> %x, <64 x i8> %y)
119   ret <64 x i8> %z
122 define <8 x i16> @v8i16(<8 x i16> %x, <8 x i16> %y) nounwind {
123 ; SSE-LABEL: v8i16:
124 ; SSE:       # %bb.0:
125 ; SSE-NEXT:    paddsw %xmm1, %xmm0
126 ; SSE-NEXT:    retq
128 ; AVX-LABEL: v8i16:
129 ; AVX:       # %bb.0:
130 ; AVX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0
131 ; AVX-NEXT:    retq
132   %z = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)
133   ret <8 x i16> %z
136 define <16 x i16> @v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {
137 ; SSE-LABEL: v16i16:
138 ; SSE:       # %bb.0:
139 ; SSE-NEXT:    paddsw %xmm2, %xmm0
140 ; SSE-NEXT:    paddsw %xmm3, %xmm1
141 ; SSE-NEXT:    retq
143 ; AVX1-LABEL: v16i16:
144 ; AVX1:       # %bb.0:
145 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
146 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
147 ; AVX1-NEXT:    vpaddsw %xmm2, %xmm3, %xmm2
148 ; AVX1-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0
149 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
150 ; AVX1-NEXT:    retq
152 ; AVX2-LABEL: v16i16:
153 ; AVX2:       # %bb.0:
154 ; AVX2-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0
155 ; AVX2-NEXT:    retq
157 ; AVX512-LABEL: v16i16:
158 ; AVX512:       # %bb.0:
159 ; AVX512-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0
160 ; AVX512-NEXT:    retq
161   %z = call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> %x, <16 x i16> %y)
162   ret <16 x i16> %z
165 define <32 x i16> @v32i16(<32 x i16> %x, <32 x i16> %y) nounwind {
166 ; SSE-LABEL: v32i16:
167 ; SSE:       # %bb.0:
168 ; SSE-NEXT:    paddsw %xmm4, %xmm0
169 ; SSE-NEXT:    paddsw %xmm5, %xmm1
170 ; SSE-NEXT:    paddsw %xmm6, %xmm2
171 ; SSE-NEXT:    paddsw %xmm7, %xmm3
172 ; SSE-NEXT:    retq
174 ; AVX1-LABEL: v32i16:
175 ; AVX1:       # %bb.0:
176 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
177 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
178 ; AVX1-NEXT:    vpaddsw %xmm4, %xmm5, %xmm4
179 ; AVX1-NEXT:    vpaddsw %xmm2, %xmm0, %xmm0
180 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
181 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
182 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
183 ; AVX1-NEXT:    vpaddsw %xmm2, %xmm4, %xmm2
184 ; AVX1-NEXT:    vpaddsw %xmm3, %xmm1, %xmm1
185 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
186 ; AVX1-NEXT:    retq
188 ; AVX2-LABEL: v32i16:
189 ; AVX2:       # %bb.0:
190 ; AVX2-NEXT:    vpaddsw %ymm2, %ymm0, %ymm0
191 ; AVX2-NEXT:    vpaddsw %ymm3, %ymm1, %ymm1
192 ; AVX2-NEXT:    retq
194 ; AVX512-LABEL: v32i16:
195 ; AVX512:       # %bb.0:
196 ; AVX512-NEXT:    vpaddsw %zmm1, %zmm0, %zmm0
197 ; AVX512-NEXT:    retq
198   %z = call <32 x i16> @llvm.sadd.sat.v32i16(<32 x i16> %x, <32 x i16> %y)
199   ret <32 x i16> %z
202 ; Too narrow vectors, legalized by widening.
204 define void @v8i8(<8 x i8>* %px, <8 x i8>* %py, <8 x i8>* %pz) nounwind {
205 ; SSE-LABEL: v8i8:
206 ; SSE:       # %bb.0:
207 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
208 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
209 ; SSE-NEXT:    paddsb %xmm0, %xmm1
210 ; SSE-NEXT:    movq %xmm1, (%rdx)
211 ; SSE-NEXT:    retq
213 ; AVX-LABEL: v8i8:
214 ; AVX:       # %bb.0:
215 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
216 ; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
217 ; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
218 ; AVX-NEXT:    vmovq %xmm0, (%rdx)
219 ; AVX-NEXT:    retq
220   %x = load <8 x i8>, <8 x i8>* %px
221   %y = load <8 x i8>, <8 x i8>* %py
222   %z = call <8 x i8> @llvm.sadd.sat.v8i8(<8 x i8> %x, <8 x i8> %y)
223   store <8 x i8> %z, <8 x i8>* %pz
224   ret void
227 define void @v4i8(<4 x i8>* %px, <4 x i8>* %py, <4 x i8>* %pz) nounwind {
228 ; SSE-LABEL: v4i8:
229 ; SSE:       # %bb.0:
230 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
231 ; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
232 ; SSE-NEXT:    paddsb %xmm0, %xmm1
233 ; SSE-NEXT:    movd %xmm1, (%rdx)
234 ; SSE-NEXT:    retq
236 ; AVX-LABEL: v4i8:
237 ; AVX:       # %bb.0:
238 ; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
239 ; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
240 ; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
241 ; AVX-NEXT:    vmovd %xmm0, (%rdx)
242 ; AVX-NEXT:    retq
243   %x = load <4 x i8>, <4 x i8>* %px
244   %y = load <4 x i8>, <4 x i8>* %py
245   %z = call <4 x i8> @llvm.sadd.sat.v4i8(<4 x i8> %x, <4 x i8> %y)
246   store <4 x i8> %z, <4 x i8>* %pz
247   ret void
250 define void @v2i8(<2 x i8>* %px, <2 x i8>* %py, <2 x i8>* %pz) nounwind {
251 ; SSE2-LABEL: v2i8:
252 ; SSE2:       # %bb.0:
253 ; SSE2-NEXT:    movzwl (%rdi), %eax
254 ; SSE2-NEXT:    movd %eax, %xmm0
255 ; SSE2-NEXT:    movzwl (%rsi), %eax
256 ; SSE2-NEXT:    movd %eax, %xmm1
257 ; SSE2-NEXT:    paddsb %xmm0, %xmm1
258 ; SSE2-NEXT:    movd %xmm1, %eax
259 ; SSE2-NEXT:    movw %ax, (%rdx)
260 ; SSE2-NEXT:    retq
262 ; SSSE3-LABEL: v2i8:
263 ; SSSE3:       # %bb.0:
264 ; SSSE3-NEXT:    movzwl (%rdi), %eax
265 ; SSSE3-NEXT:    movd %eax, %xmm0
266 ; SSSE3-NEXT:    movzwl (%rsi), %eax
267 ; SSSE3-NEXT:    movd %eax, %xmm1
268 ; SSSE3-NEXT:    paddsb %xmm0, %xmm1
269 ; SSSE3-NEXT:    movd %xmm1, %eax
270 ; SSSE3-NEXT:    movw %ax, (%rdx)
271 ; SSSE3-NEXT:    retq
273 ; SSE41-LABEL: v2i8:
274 ; SSE41:       # %bb.0:
275 ; SSE41-NEXT:    movzwl (%rdi), %eax
276 ; SSE41-NEXT:    movd %eax, %xmm0
277 ; SSE41-NEXT:    movzwl (%rsi), %eax
278 ; SSE41-NEXT:    movd %eax, %xmm1
279 ; SSE41-NEXT:    paddsb %xmm0, %xmm1
280 ; SSE41-NEXT:    pextrw $0, %xmm1, (%rdx)
281 ; SSE41-NEXT:    retq
283 ; AVX-LABEL: v2i8:
284 ; AVX:       # %bb.0:
285 ; AVX-NEXT:    movzwl (%rdi), %eax
286 ; AVX-NEXT:    vmovd %eax, %xmm0
287 ; AVX-NEXT:    movzwl (%rsi), %eax
288 ; AVX-NEXT:    vmovd %eax, %xmm1
289 ; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
290 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdx)
291 ; AVX-NEXT:    retq
292   %x = load <2 x i8>, <2 x i8>* %px
293   %y = load <2 x i8>, <2 x i8>* %py
294   %z = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> %x, <2 x i8> %y)
295   store <2 x i8> %z, <2 x i8>* %pz
296   ret void
299 define void @v4i16(<4 x i16>* %px, <4 x i16>* %py, <4 x i16>* %pz) nounwind {
300 ; SSE-LABEL: v4i16:
301 ; SSE:       # %bb.0:
302 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
303 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
304 ; SSE-NEXT:    paddsw %xmm0, %xmm1
305 ; SSE-NEXT:    movq %xmm1, (%rdx)
306 ; SSE-NEXT:    retq
308 ; AVX-LABEL: v4i16:
309 ; AVX:       # %bb.0:
310 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
311 ; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
312 ; AVX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0
313 ; AVX-NEXT:    vmovq %xmm0, (%rdx)
314 ; AVX-NEXT:    retq
315   %x = load <4 x i16>, <4 x i16>* %px
316   %y = load <4 x i16>, <4 x i16>* %py
317   %z = call <4 x i16> @llvm.sadd.sat.v4i16(<4 x i16> %x, <4 x i16> %y)
318   store <4 x i16> %z, <4 x i16>* %pz
319   ret void
322 define void @v2i16(<2 x i16>* %px, <2 x i16>* %py, <2 x i16>* %pz) nounwind {
323 ; SSE-LABEL: v2i16:
324 ; SSE:       # %bb.0:
325 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
326 ; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
327 ; SSE-NEXT:    paddsw %xmm0, %xmm1
328 ; SSE-NEXT:    movd %xmm1, (%rdx)
329 ; SSE-NEXT:    retq
331 ; AVX-LABEL: v2i16:
332 ; AVX:       # %bb.0:
333 ; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
334 ; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
335 ; AVX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0
336 ; AVX-NEXT:    vmovd %xmm0, (%rdx)
337 ; AVX-NEXT:    retq
338   %x = load <2 x i16>, <2 x i16>* %px
339   %y = load <2 x i16>, <2 x i16>* %py
340   %z = call <2 x i16> @llvm.sadd.sat.v2i16(<2 x i16> %x, <2 x i16> %y)
341   store <2 x i16> %z, <2 x i16>* %pz
342   ret void
345 define <12 x i8> @v12i8(<12 x i8> %x, <12 x i8> %y) nounwind {
346 ; SSE-LABEL: v12i8:
347 ; SSE:       # %bb.0:
348 ; SSE-NEXT:    paddsb %xmm1, %xmm0
349 ; SSE-NEXT:    retq
351 ; AVX-LABEL: v12i8:
352 ; AVX:       # %bb.0:
353 ; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
354 ; AVX-NEXT:    retq
355   %z = call <12 x i8> @llvm.sadd.sat.v12i8(<12 x i8> %x, <12 x i8> %y)
356   ret <12 x i8> %z
359 define void @v12i16(<12 x i16>* %px, <12 x i16>* %py, <12 x i16>* %pz) nounwind {
360 ; SSE-LABEL: v12i16:
361 ; SSE:       # %bb.0:
362 ; SSE-NEXT:    movdqa (%rdi), %xmm0
363 ; SSE-NEXT:    movdqa 16(%rdi), %xmm1
364 ; SSE-NEXT:    paddsw (%rsi), %xmm0
365 ; SSE-NEXT:    paddsw 16(%rsi), %xmm1
366 ; SSE-NEXT:    movq %xmm1, 16(%rdx)
367 ; SSE-NEXT:    movdqa %xmm0, (%rdx)
368 ; SSE-NEXT:    retq
370 ; AVX1-LABEL: v12i16:
371 ; AVX1:       # %bb.0:
372 ; AVX1-NEXT:    vmovdqa (%rdi), %xmm0
373 ; AVX1-NEXT:    vmovdqa 16(%rdi), %xmm1
374 ; AVX1-NEXT:    vpaddsw 16(%rsi), %xmm1, %xmm1
375 ; AVX1-NEXT:    vpaddsw (%rsi), %xmm0, %xmm0
376 ; AVX1-NEXT:    vmovdqa %xmm0, (%rdx)
377 ; AVX1-NEXT:    vmovq %xmm1, 16(%rdx)
378 ; AVX1-NEXT:    retq
380 ; AVX2-LABEL: v12i16:
381 ; AVX2:       # %bb.0:
382 ; AVX2-NEXT:    vmovdqa (%rdi), %ymm0
383 ; AVX2-NEXT:    vpaddsw (%rsi), %ymm0, %ymm0
384 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
385 ; AVX2-NEXT:    vmovq %xmm1, 16(%rdx)
386 ; AVX2-NEXT:    vmovdqa %xmm0, (%rdx)
387 ; AVX2-NEXT:    vzeroupper
388 ; AVX2-NEXT:    retq
390 ; AVX512-LABEL: v12i16:
391 ; AVX512:       # %bb.0:
392 ; AVX512-NEXT:    vmovdqa (%rdi), %ymm0
393 ; AVX512-NEXT:    vpaddsw (%rsi), %ymm0, %ymm0
394 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
395 ; AVX512-NEXT:    vmovq %xmm1, 16(%rdx)
396 ; AVX512-NEXT:    vmovdqa %xmm0, (%rdx)
397 ; AVX512-NEXT:    vzeroupper
398 ; AVX512-NEXT:    retq
399   %x = load <12 x i16>, <12 x i16>* %px
400   %y = load <12 x i16>, <12 x i16>* %py
401   %z = call <12 x i16> @llvm.sadd.sat.v12i16(<12 x i16> %x, <12 x i16> %y)
402   store <12 x i16> %z, <12 x i16>* %pz
403   ret void
406 ; Scalarization
408 define void @v1i8(<1 x i8>* %px, <1 x i8>* %py, <1 x i8>* %pz) nounwind {
409 ; SSE-LABEL: v1i8:
410 ; SSE:       # %bb.0:
411 ; SSE-NEXT:    movb (%rdi), %cl
412 ; SSE-NEXT:    movb (%rsi), %dil
413 ; SSE-NEXT:    xorl %esi, %esi
414 ; SSE-NEXT:    movl %ecx, %eax
415 ; SSE-NEXT:    addb %dil, %al
416 ; SSE-NEXT:    setns %sil
417 ; SSE-NEXT:    addl $127, %esi
418 ; SSE-NEXT:    addb %dil, %cl
419 ; SSE-NEXT:    movzbl %cl, %eax
420 ; SSE-NEXT:    cmovol %esi, %eax
421 ; SSE-NEXT:    movb %al, (%rdx)
422 ; SSE-NEXT:    retq
424 ; AVX-LABEL: v1i8:
425 ; AVX:       # %bb.0:
426 ; AVX-NEXT:    movb (%rdi), %cl
427 ; AVX-NEXT:    movb (%rsi), %dil
428 ; AVX-NEXT:    xorl %esi, %esi
429 ; AVX-NEXT:    movl %ecx, %eax
430 ; AVX-NEXT:    addb %dil, %al
431 ; AVX-NEXT:    setns %sil
432 ; AVX-NEXT:    addl $127, %esi
433 ; AVX-NEXT:    addb %dil, %cl
434 ; AVX-NEXT:    movzbl %cl, %eax
435 ; AVX-NEXT:    cmovol %esi, %eax
436 ; AVX-NEXT:    movb %al, (%rdx)
437 ; AVX-NEXT:    retq
438   %x = load <1 x i8>, <1 x i8>* %px
439   %y = load <1 x i8>, <1 x i8>* %py
440   %z = call <1 x i8> @llvm.sadd.sat.v1i8(<1 x i8> %x, <1 x i8> %y)
441   store <1 x i8> %z, <1 x i8>* %pz
442   ret void
445 define void @v1i16(<1 x i16>* %px, <1 x i16>* %py, <1 x i16>* %pz) nounwind {
446 ; SSE-LABEL: v1i16:
447 ; SSE:       # %bb.0:
448 ; SSE-NEXT:    movzwl (%rdi), %eax
449 ; SSE-NEXT:    movzwl (%rsi), %ecx
450 ; SSE-NEXT:    xorl %esi, %esi
451 ; SSE-NEXT:    movl %eax, %edi
452 ; SSE-NEXT:    addw %cx, %di
453 ; SSE-NEXT:    setns %sil
454 ; SSE-NEXT:    addl $32767, %esi # imm = 0x7FFF
455 ; SSE-NEXT:    addw %cx, %ax
456 ; SSE-NEXT:    cmovol %esi, %eax
457 ; SSE-NEXT:    movw %ax, (%rdx)
458 ; SSE-NEXT:    retq
460 ; AVX-LABEL: v1i16:
461 ; AVX:       # %bb.0:
462 ; AVX-NEXT:    movzwl (%rdi), %eax
463 ; AVX-NEXT:    movzwl (%rsi), %ecx
464 ; AVX-NEXT:    xorl %esi, %esi
465 ; AVX-NEXT:    movl %eax, %edi
466 ; AVX-NEXT:    addw %cx, %di
467 ; AVX-NEXT:    setns %sil
468 ; AVX-NEXT:    addl $32767, %esi # imm = 0x7FFF
469 ; AVX-NEXT:    addw %cx, %ax
470 ; AVX-NEXT:    cmovol %esi, %eax
471 ; AVX-NEXT:    movw %ax, (%rdx)
472 ; AVX-NEXT:    retq
473   %x = load <1 x i16>, <1 x i16>* %px
474   %y = load <1 x i16>, <1 x i16>* %py
475   %z = call <1 x i16> @llvm.sadd.sat.v1i16(<1 x i16> %x, <1 x i16> %y)
476   store <1 x i16> %z, <1 x i16>* %pz
477   ret void
480 ; Promotion
482 define <16 x i4> @v16i4(<16 x i4> %x, <16 x i4> %y) nounwind {
483 ; SSE-LABEL: v16i4:
484 ; SSE:       # %bb.0:
485 ; SSE-NEXT:    psllw $4, %xmm1
486 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
487 ; SSE-NEXT:    pand %xmm2, %xmm1
488 ; SSE-NEXT:    psllw $4, %xmm0
489 ; SSE-NEXT:    pand %xmm2, %xmm0
490 ; SSE-NEXT:    paddsb %xmm1, %xmm0
491 ; SSE-NEXT:    psrlw $4, %xmm0
492 ; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
493 ; SSE-NEXT:    movdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
494 ; SSE-NEXT:    pxor %xmm1, %xmm0
495 ; SSE-NEXT:    psubb %xmm1, %xmm0
496 ; SSE-NEXT:    retq
498 ; AVX-LABEL: v16i4:
499 ; AVX:       # %bb.0:
500 ; AVX-NEXT:    vpsllw $4, %xmm1, %xmm1
501 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240]
502 ; AVX-NEXT:    vpand %xmm2, %xmm1, %xmm1
503 ; AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
504 ; AVX-NEXT:    vpand %xmm2, %xmm0, %xmm0
505 ; AVX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
506 ; AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
507 ; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
508 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
509 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
510 ; AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
511 ; AVX-NEXT:    retq
512   %z = call <16 x i4> @llvm.sadd.sat.v16i4(<16 x i4> %x, <16 x i4> %y)
513   ret <16 x i4> %z
516 define <16 x i1> @v16i1(<16 x i1> %x, <16 x i1> %y) nounwind {
517 ; SSE-LABEL: v16i1:
518 ; SSE:       # %bb.0:
519 ; SSE-NEXT:    psllw $7, %xmm1
520 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
521 ; SSE-NEXT:    pand %xmm2, %xmm1
522 ; SSE-NEXT:    psllw $7, %xmm0
523 ; SSE-NEXT:    pand %xmm2, %xmm0
524 ; SSE-NEXT:    paddsb %xmm1, %xmm0
525 ; SSE-NEXT:    pxor %xmm1, %xmm1
526 ; SSE-NEXT:    pcmpgtb %xmm0, %xmm1
527 ; SSE-NEXT:    movdqa %xmm1, %xmm0
528 ; SSE-NEXT:    retq
530 ; AVX1-LABEL: v16i1:
531 ; AVX1:       # %bb.0:
532 ; AVX1-NEXT:    vpsllw $7, %xmm1, %xmm1
533 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
534 ; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1
535 ; AVX1-NEXT:    vpsllw $7, %xmm0, %xmm0
536 ; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
537 ; AVX1-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
538 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
539 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
540 ; AVX1-NEXT:    retq
542 ; AVX2-LABEL: v16i1:
543 ; AVX2:       # %bb.0:
544 ; AVX2-NEXT:    vpsllw $7, %xmm1, %xmm1
545 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
546 ; AVX2-NEXT:    vpand %xmm2, %xmm1, %xmm1
547 ; AVX2-NEXT:    vpsllw $7, %xmm0, %xmm0
548 ; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0
549 ; AVX2-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0
550 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
551 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
552 ; AVX2-NEXT:    retq
554 ; AVX512-LABEL: v16i1:
555 ; AVX512:       # %bb.0:
556 ; AVX512-NEXT:    vpsllw $7, %xmm1, %xmm1
557 ; AVX512-NEXT:    vpmovb2m %xmm1, %k0
558 ; AVX512-NEXT:    vpsllw $7, %xmm0, %xmm0
559 ; AVX512-NEXT:    vpmovb2m %xmm0, %k1
560 ; AVX512-NEXT:    korw %k0, %k1, %k0
561 ; AVX512-NEXT:    vpmovm2b %k0, %xmm0
562 ; AVX512-NEXT:    retq
563   %z = call <16 x i1> @llvm.sadd.sat.v16i1(<16 x i1> %x, <16 x i1> %y)
564   ret <16 x i1> %z
567 ; Expanded
569 define <2 x i32> @v2i32(<2 x i32> %x, <2 x i32> %y) nounwind {
570 ; SSE2-LABEL: v2i32:
571 ; SSE2:       # %bb.0:
572 ; SSE2-NEXT:    pxor %xmm3, %xmm3
573 ; SSE2-NEXT:    pxor %xmm4, %xmm4
574 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
575 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
576 ; SSE2-NEXT:    pxor %xmm2, %xmm4
577 ; SSE2-NEXT:    pxor %xmm5, %xmm5
578 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
579 ; SSE2-NEXT:    pxor %xmm2, %xmm5
580 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
581 ; SSE2-NEXT:    paddd %xmm1, %xmm0
582 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
583 ; SSE2-NEXT:    pxor %xmm3, %xmm2
584 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm2
585 ; SSE2-NEXT:    pandn %xmm4, %xmm2
586 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
587 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm1
588 ; SSE2-NEXT:    psrld $1, %xmm3
589 ; SSE2-NEXT:    por %xmm1, %xmm3
590 ; SSE2-NEXT:    pand %xmm2, %xmm3
591 ; SSE2-NEXT:    pandn %xmm0, %xmm2
592 ; SSE2-NEXT:    por %xmm3, %xmm2
593 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
594 ; SSE2-NEXT:    retq
596 ; SSSE3-LABEL: v2i32:
597 ; SSSE3:       # %bb.0:
598 ; SSSE3-NEXT:    pxor %xmm3, %xmm3
599 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
600 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
601 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm2
602 ; SSSE3-NEXT:    pxor %xmm2, %xmm4
603 ; SSSE3-NEXT:    pxor %xmm5, %xmm5
604 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm5
605 ; SSSE3-NEXT:    pxor %xmm2, %xmm5
606 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm4
607 ; SSSE3-NEXT:    paddd %xmm1, %xmm0
608 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm3
609 ; SSSE3-NEXT:    pxor %xmm3, %xmm2
610 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm2
611 ; SSSE3-NEXT:    pandn %xmm4, %xmm2
612 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
613 ; SSSE3-NEXT:    pandn {{.*}}(%rip), %xmm1
614 ; SSSE3-NEXT:    psrld $1, %xmm3
615 ; SSSE3-NEXT:    por %xmm1, %xmm3
616 ; SSSE3-NEXT:    pand %xmm2, %xmm3
617 ; SSSE3-NEXT:    pandn %xmm0, %xmm2
618 ; SSSE3-NEXT:    por %xmm3, %xmm2
619 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
620 ; SSSE3-NEXT:    retq
622 ; SSE41-LABEL: v2i32:
623 ; SSE41:       # %bb.0:
624 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
625 ; SSE41-NEXT:    pxor %xmm0, %xmm0
626 ; SSE41-NEXT:    pxor %xmm4, %xmm4
627 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm4
628 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm3
629 ; SSE41-NEXT:    pxor %xmm3, %xmm4
630 ; SSE41-NEXT:    pxor %xmm5, %xmm5
631 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm5
632 ; SSE41-NEXT:    pxor %xmm3, %xmm5
633 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm4
634 ; SSE41-NEXT:    paddd %xmm1, %xmm2
635 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm0
636 ; SSE41-NEXT:    pxor %xmm0, %xmm3
637 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm3
638 ; SSE41-NEXT:    pandn %xmm4, %xmm3
639 ; SSE41-NEXT:    movaps {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
640 ; SSE41-NEXT:    blendvps %xmm0, {{.*}}(%rip), %xmm1
641 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
642 ; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm2
643 ; SSE41-NEXT:    movaps %xmm2, %xmm0
644 ; SSE41-NEXT:    retq
646 ; AVX1-LABEL: v2i32:
647 ; AVX1:       # %bb.0:
648 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
649 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm3
650 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
651 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
652 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm5
653 ; AVX1-NEXT:    vpxor %xmm4, %xmm5, %xmm5
654 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm5, %xmm3
655 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
656 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm1
657 ; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm2
658 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm5, %xmm2
659 ; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2
660 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
661 ; AVX1-NEXT:    vblendvps %xmm1, {{.*}}(%rip), %xmm3, %xmm1
662 ; AVX1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0
663 ; AVX1-NEXT:    retq
665 ; AVX2-LABEL: v2i32:
666 ; AVX2:       # %bb.0:
667 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
668 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm3
669 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
670 ; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm3
671 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm5
672 ; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
673 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm5, %xmm3
674 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
675 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm1
676 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm2
677 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm5, %xmm2
678 ; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2
679 ; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [2147483647,2147483647,2147483647,2147483647]
680 ; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
681 ; AVX2-NEXT:    vblendvps %xmm1, %xmm3, %xmm4, %xmm1
682 ; AVX2-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0
683 ; AVX2-NEXT:    retq
685 ; AVX512-LABEL: v2i32:
686 ; AVX512:       # %bb.0:
687 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
688 ; AVX512-NEXT:    vpcmpnltd %xmm2, %xmm1, %k0
689 ; AVX512-NEXT:    vpcmpnltd %xmm2, %xmm0, %k1
690 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
691 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
692 ; AVX512-NEXT:    vpcmpnltd %xmm2, %xmm0, %k2
693 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
694 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
695 ; AVX512-NEXT:    vpcmpgtd %xmm0, %xmm2, %k2
696 ; AVX512-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
697 ; AVX512-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm1 {%k2}
698 ; AVX512-NEXT:    vmovdqa32 %xmm1, %xmm0 {%k1}
699 ; AVX512-NEXT:    retq
700   %z = call <2 x i32> @llvm.sadd.sat.v2i32(<2 x i32> %x, <2 x i32> %y)
701   ret <2 x i32> %z
704 define <4 x i32> @v4i32(<4 x i32> %x, <4 x i32> %y) nounwind {
705 ; SSE2-LABEL: v4i32:
706 ; SSE2:       # %bb.0:
707 ; SSE2-NEXT:    pxor %xmm3, %xmm3
708 ; SSE2-NEXT:    pxor %xmm4, %xmm4
709 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
710 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
711 ; SSE2-NEXT:    pxor %xmm2, %xmm4
712 ; SSE2-NEXT:    pxor %xmm5, %xmm5
713 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
714 ; SSE2-NEXT:    pxor %xmm2, %xmm5
715 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
716 ; SSE2-NEXT:    paddd %xmm1, %xmm0
717 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
718 ; SSE2-NEXT:    pxor %xmm3, %xmm2
719 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm2
720 ; SSE2-NEXT:    pandn %xmm4, %xmm2
721 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
722 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm1
723 ; SSE2-NEXT:    psrld $1, %xmm3
724 ; SSE2-NEXT:    por %xmm1, %xmm3
725 ; SSE2-NEXT:    pand %xmm2, %xmm3
726 ; SSE2-NEXT:    pandn %xmm0, %xmm2
727 ; SSE2-NEXT:    por %xmm3, %xmm2
728 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
729 ; SSE2-NEXT:    retq
731 ; SSSE3-LABEL: v4i32:
732 ; SSSE3:       # %bb.0:
733 ; SSSE3-NEXT:    pxor %xmm3, %xmm3
734 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
735 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
736 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm2
737 ; SSSE3-NEXT:    pxor %xmm2, %xmm4
738 ; SSSE3-NEXT:    pxor %xmm5, %xmm5
739 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm5
740 ; SSSE3-NEXT:    pxor %xmm2, %xmm5
741 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm4
742 ; SSSE3-NEXT:    paddd %xmm1, %xmm0
743 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm3
744 ; SSSE3-NEXT:    pxor %xmm3, %xmm2
745 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm2
746 ; SSSE3-NEXT:    pandn %xmm4, %xmm2
747 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
748 ; SSSE3-NEXT:    pandn {{.*}}(%rip), %xmm1
749 ; SSSE3-NEXT:    psrld $1, %xmm3
750 ; SSSE3-NEXT:    por %xmm1, %xmm3
751 ; SSSE3-NEXT:    pand %xmm2, %xmm3
752 ; SSSE3-NEXT:    pandn %xmm0, %xmm2
753 ; SSSE3-NEXT:    por %xmm3, %xmm2
754 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
755 ; SSSE3-NEXT:    retq
757 ; SSE41-LABEL: v4i32:
758 ; SSE41:       # %bb.0:
759 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
760 ; SSE41-NEXT:    pxor %xmm0, %xmm0
761 ; SSE41-NEXT:    pxor %xmm4, %xmm4
762 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm4
763 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm3
764 ; SSE41-NEXT:    pxor %xmm3, %xmm4
765 ; SSE41-NEXT:    pxor %xmm5, %xmm5
766 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm5
767 ; SSE41-NEXT:    pxor %xmm3, %xmm5
768 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm4
769 ; SSE41-NEXT:    paddd %xmm1, %xmm2
770 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm0
771 ; SSE41-NEXT:    pxor %xmm0, %xmm3
772 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm3
773 ; SSE41-NEXT:    pandn %xmm4, %xmm3
774 ; SSE41-NEXT:    movaps {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
775 ; SSE41-NEXT:    blendvps %xmm0, {{.*}}(%rip), %xmm1
776 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
777 ; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm2
778 ; SSE41-NEXT:    movaps %xmm2, %xmm0
779 ; SSE41-NEXT:    retq
781 ; AVX1-LABEL: v4i32:
782 ; AVX1:       # %bb.0:
783 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
784 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm3
785 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
786 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
787 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm5
788 ; AVX1-NEXT:    vpxor %xmm4, %xmm5, %xmm5
789 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm5, %xmm3
790 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
791 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm1
792 ; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm2
793 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm5, %xmm2
794 ; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2
795 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
796 ; AVX1-NEXT:    vblendvps %xmm1, {{.*}}(%rip), %xmm3, %xmm1
797 ; AVX1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0
798 ; AVX1-NEXT:    retq
800 ; AVX2-LABEL: v4i32:
801 ; AVX2:       # %bb.0:
802 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
803 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm2, %xmm3
804 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
805 ; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm3
806 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm5
807 ; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
808 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm5, %xmm3
809 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
810 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm2, %xmm1
811 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm2
812 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm5, %xmm2
813 ; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2
814 ; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm3 = [2147483647,2147483647,2147483647,2147483647]
815 ; AVX2-NEXT:    vbroadcastss {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
816 ; AVX2-NEXT:    vblendvps %xmm1, %xmm3, %xmm4, %xmm1
817 ; AVX2-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0
818 ; AVX2-NEXT:    retq
820 ; AVX512-LABEL: v4i32:
821 ; AVX512:       # %bb.0:
822 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
823 ; AVX512-NEXT:    vpcmpnltd %xmm2, %xmm1, %k0
824 ; AVX512-NEXT:    vpcmpnltd %xmm2, %xmm0, %k1
825 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
826 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
827 ; AVX512-NEXT:    vpcmpnltd %xmm2, %xmm0, %k2
828 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
829 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
830 ; AVX512-NEXT:    vpcmpgtd %xmm0, %xmm2, %k2
831 ; AVX512-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
832 ; AVX512-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm1 {%k2}
833 ; AVX512-NEXT:    vmovdqa32 %xmm1, %xmm0 {%k1}
834 ; AVX512-NEXT:    retq
835   %z = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)
836   ret <4 x i32> %z
839 define <8 x i32> @v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {
840 ; SSE2-LABEL: v8i32:
841 ; SSE2:       # %bb.0:
842 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
843 ; SSE2-NEXT:    pxor %xmm6, %xmm6
844 ; SSE2-NEXT:    pxor %xmm7, %xmm7
845 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm7
846 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm5
847 ; SSE2-NEXT:    pxor %xmm5, %xmm7
848 ; SSE2-NEXT:    pxor %xmm4, %xmm4
849 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
850 ; SSE2-NEXT:    pxor %xmm5, %xmm4
851 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm7
852 ; SSE2-NEXT:    paddd %xmm2, %xmm8
853 ; SSE2-NEXT:    pxor %xmm2, %xmm2
854 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm2
855 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
856 ; SSE2-NEXT:    pxor %xmm5, %xmm0
857 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
858 ; SSE2-NEXT:    pandn %xmm7, %xmm0
859 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
860 ; SSE2-NEXT:    movdqa %xmm2, %xmm7
861 ; SSE2-NEXT:    pandn %xmm4, %xmm7
862 ; SSE2-NEXT:    psrld $1, %xmm2
863 ; SSE2-NEXT:    por %xmm7, %xmm2
864 ; SSE2-NEXT:    pand %xmm0, %xmm2
865 ; SSE2-NEXT:    pandn %xmm8, %xmm0
866 ; SSE2-NEXT:    por %xmm2, %xmm0
867 ; SSE2-NEXT:    pxor %xmm2, %xmm2
868 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
869 ; SSE2-NEXT:    pxor %xmm5, %xmm2
870 ; SSE2-NEXT:    pxor %xmm7, %xmm7
871 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm7
872 ; SSE2-NEXT:    pxor %xmm5, %xmm7
873 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm2
874 ; SSE2-NEXT:    paddd %xmm3, %xmm1
875 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
876 ; SSE2-NEXT:    pxor %xmm6, %xmm5
877 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm5
878 ; SSE2-NEXT:    pandn %xmm2, %xmm5
879 ; SSE2-NEXT:    movdqa %xmm6, %xmm2
880 ; SSE2-NEXT:    pandn %xmm4, %xmm2
881 ; SSE2-NEXT:    psrld $1, %xmm6
882 ; SSE2-NEXT:    por %xmm2, %xmm6
883 ; SSE2-NEXT:    pand %xmm5, %xmm6
884 ; SSE2-NEXT:    pandn %xmm1, %xmm5
885 ; SSE2-NEXT:    por %xmm6, %xmm5
886 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
887 ; SSE2-NEXT:    retq
889 ; SSSE3-LABEL: v8i32:
890 ; SSSE3:       # %bb.0:
891 ; SSSE3-NEXT:    movdqa %xmm0, %xmm8
892 ; SSSE3-NEXT:    pxor %xmm6, %xmm6
893 ; SSSE3-NEXT:    pxor %xmm7, %xmm7
894 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm7
895 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm5
896 ; SSSE3-NEXT:    pxor %xmm5, %xmm7
897 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
898 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
899 ; SSSE3-NEXT:    pxor %xmm5, %xmm4
900 ; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm7
901 ; SSSE3-NEXT:    paddd %xmm2, %xmm8
902 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
903 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm2
904 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
905 ; SSSE3-NEXT:    pxor %xmm5, %xmm0
906 ; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm0
907 ; SSSE3-NEXT:    pandn %xmm7, %xmm0
908 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
909 ; SSSE3-NEXT:    movdqa %xmm2, %xmm7
910 ; SSSE3-NEXT:    pandn %xmm4, %xmm7
911 ; SSSE3-NEXT:    psrld $1, %xmm2
912 ; SSSE3-NEXT:    por %xmm7, %xmm2
913 ; SSSE3-NEXT:    pand %xmm0, %xmm2
914 ; SSSE3-NEXT:    pandn %xmm8, %xmm0
915 ; SSSE3-NEXT:    por %xmm2, %xmm0
916 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
917 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2
918 ; SSSE3-NEXT:    pxor %xmm5, %xmm2
919 ; SSSE3-NEXT:    pxor %xmm7, %xmm7
920 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm7
921 ; SSSE3-NEXT:    pxor %xmm5, %xmm7
922 ; SSSE3-NEXT:    pcmpeqd %xmm7, %xmm2
923 ; SSSE3-NEXT:    paddd %xmm3, %xmm1
924 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm6
925 ; SSSE3-NEXT:    pxor %xmm6, %xmm5
926 ; SSSE3-NEXT:    pcmpeqd %xmm7, %xmm5
927 ; SSSE3-NEXT:    pandn %xmm2, %xmm5
928 ; SSSE3-NEXT:    movdqa %xmm6, %xmm2
929 ; SSSE3-NEXT:    pandn %xmm4, %xmm2
930 ; SSSE3-NEXT:    psrld $1, %xmm6
931 ; SSSE3-NEXT:    por %xmm2, %xmm6
932 ; SSSE3-NEXT:    pand %xmm5, %xmm6
933 ; SSSE3-NEXT:    pandn %xmm1, %xmm5
934 ; SSSE3-NEXT:    por %xmm6, %xmm5
935 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
936 ; SSSE3-NEXT:    retq
938 ; SSE41-LABEL: v8i32:
939 ; SSE41:       # %bb.0:
940 ; SSE41-NEXT:    movdqa %xmm0, %xmm6
941 ; SSE41-NEXT:    pxor %xmm8, %xmm8
942 ; SSE41-NEXT:    pxor %xmm7, %xmm7
943 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm7
944 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm4
945 ; SSE41-NEXT:    pxor %xmm4, %xmm7
946 ; SSE41-NEXT:    pxor %xmm5, %xmm5
947 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
948 ; SSE41-NEXT:    pxor %xmm4, %xmm5
949 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm7
950 ; SSE41-NEXT:    paddd %xmm2, %xmm6
951 ; SSE41-NEXT:    pxor %xmm0, %xmm0
952 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm0
953 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
954 ; SSE41-NEXT:    pxor %xmm4, %xmm2
955 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm2
956 ; SSE41-NEXT:    pandn %xmm7, %xmm2
957 ; SSE41-NEXT:    movaps {{.*#+}} xmm9 = [2147483647,2147483647,2147483647,2147483647]
958 ; SSE41-NEXT:    movaps {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
959 ; SSE41-NEXT:    movaps %xmm5, %xmm7
960 ; SSE41-NEXT:    blendvps %xmm0, %xmm9, %xmm7
961 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
962 ; SSE41-NEXT:    blendvps %xmm0, %xmm7, %xmm6
963 ; SSE41-NEXT:    pxor %xmm0, %xmm0
964 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm0
965 ; SSE41-NEXT:    pxor %xmm4, %xmm0
966 ; SSE41-NEXT:    pxor %xmm2, %xmm2
967 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
968 ; SSE41-NEXT:    pxor %xmm4, %xmm2
969 ; SSE41-NEXT:    pcmpeqd %xmm2, %xmm0
970 ; SSE41-NEXT:    paddd %xmm3, %xmm1
971 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm8
972 ; SSE41-NEXT:    pxor %xmm8, %xmm4
973 ; SSE41-NEXT:    pcmpeqd %xmm2, %xmm4
974 ; SSE41-NEXT:    pandn %xmm0, %xmm4
975 ; SSE41-NEXT:    movdqa %xmm8, %xmm0
976 ; SSE41-NEXT:    blendvps %xmm0, %xmm9, %xmm5
977 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
978 ; SSE41-NEXT:    blendvps %xmm0, %xmm5, %xmm1
979 ; SSE41-NEXT:    movaps %xmm6, %xmm0
980 ; SSE41-NEXT:    retq
982 ; AVX1-LABEL: v8i32:
983 ; AVX1:       # %bb.0:
984 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
985 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
986 ; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm3, %xmm4
987 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
988 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
989 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
990 ; AVX1-NEXT:    vpcmpgtd %xmm6, %xmm3, %xmm7
991 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm7
992 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm7, %xmm8
993 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm3, %xmm4
994 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm9
995 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm3, %xmm4
996 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
997 ; AVX1-NEXT:    vpcmpeqd %xmm9, %xmm4, %xmm9
998 ; AVX1-NEXT:    vinsertf128 $1, %xmm8, %ymm9, %ymm8
999 ; AVX1-NEXT:    vpaddd %xmm2, %xmm6, %xmm9
1000 ; AVX1-NEXT:    vpcmpgtd %xmm9, %xmm3, %xmm6
1001 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm2
1002 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm7, %xmm2
1003 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
1004 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm3, %xmm1
1005 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm3
1006 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm3
1007 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
1008 ; AVX1-NEXT:    vandnps %ymm8, %ymm2, %ymm2
1009 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm1, %ymm1
1010 ; AVX1-NEXT:    vmovaps {{.*#+}} ymm3 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]
1011 ; AVX1-NEXT:    vblendvps %ymm1, {{.*}}(%rip), %ymm3, %ymm1
1012 ; AVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm0
1013 ; AVX1-NEXT:    vblendvps %ymm2, %ymm1, %ymm0, %ymm0
1014 ; AVX1-NEXT:    retq
1016 ; AVX2-LABEL: v8i32:
1017 ; AVX2:       # %bb.0:
1018 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1019 ; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm2, %ymm3
1020 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm4, %ymm4
1021 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm3
1022 ; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm2, %ymm5
1023 ; AVX2-NEXT:    vpxor %ymm4, %ymm5, %ymm5
1024 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm5, %ymm3
1025 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
1026 ; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm2, %ymm1
1027 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
1028 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm5, %ymm2
1029 ; AVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2
1030 ; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm3 = [2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647]
1031 ; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm4 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]
1032 ; AVX2-NEXT:    vblendvps %ymm1, %ymm3, %ymm4, %ymm1
1033 ; AVX2-NEXT:    vblendvps %ymm2, %ymm1, %ymm0, %ymm0
1034 ; AVX2-NEXT:    retq
1036 ; AVX512-LABEL: v8i32:
1037 ; AVX512:       # %bb.0:
1038 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1039 ; AVX512-NEXT:    vpcmpnltd %ymm2, %ymm1, %k0
1040 ; AVX512-NEXT:    vpcmpnltd %ymm2, %ymm0, %k1
1041 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
1042 ; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
1043 ; AVX512-NEXT:    vpcmpnltd %ymm2, %ymm0, %k2
1044 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
1045 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
1046 ; AVX512-NEXT:    vpcmpgtd %ymm0, %ymm2, %k2
1047 ; AVX512-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]
1048 ; AVX512-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm1 {%k2}
1049 ; AVX512-NEXT:    vmovdqa32 %ymm1, %ymm0 {%k1}
1050 ; AVX512-NEXT:    retq
1051   %z = call <8 x i32> @llvm.sadd.sat.v8i32(<8 x i32> %x, <8 x i32> %y)
1052   ret <8 x i32> %z
1055 define <16 x i32> @v16i32(<16 x i32> %x, <16 x i32> %y) nounwind {
1056 ; SSE2-LABEL: v16i32:
1057 ; SSE2:       # %bb.0:
1058 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
1059 ; SSE2-NEXT:    movdqa %xmm0, %xmm11
1060 ; SSE2-NEXT:    pxor %xmm10, %xmm10
1061 ; SSE2-NEXT:    pxor %xmm12, %xmm12
1062 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm12
1063 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm9
1064 ; SSE2-NEXT:    pxor %xmm9, %xmm12
1065 ; SSE2-NEXT:    pxor %xmm1, %xmm1
1066 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
1067 ; SSE2-NEXT:    pxor %xmm9, %xmm1
1068 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm12
1069 ; SSE2-NEXT:    paddd %xmm4, %xmm11
1070 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1071 ; SSE2-NEXT:    pcmpgtd %xmm11, %xmm4
1072 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1073 ; SSE2-NEXT:    pxor %xmm9, %xmm0
1074 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
1075 ; SSE2-NEXT:    pandn %xmm12, %xmm0
1076 ; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [2147483648,2147483648,2147483648,2147483648]
1077 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
1078 ; SSE2-NEXT:    pandn %xmm12, %xmm1
1079 ; SSE2-NEXT:    psrld $1, %xmm4
1080 ; SSE2-NEXT:    por %xmm1, %xmm4
1081 ; SSE2-NEXT:    pand %xmm0, %xmm4
1082 ; SSE2-NEXT:    pandn %xmm11, %xmm0
1083 ; SSE2-NEXT:    por %xmm4, %xmm0
1084 ; SSE2-NEXT:    pxor %xmm11, %xmm11
1085 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm11
1086 ; SSE2-NEXT:    pxor %xmm9, %xmm11
1087 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1088 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm4
1089 ; SSE2-NEXT:    pxor %xmm9, %xmm4
1090 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm11
1091 ; SSE2-NEXT:    paddd %xmm5, %xmm8
1092 ; SSE2-NEXT:    pxor %xmm5, %xmm5
1093 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm5
1094 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
1095 ; SSE2-NEXT:    pxor %xmm9, %xmm1
1096 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm1
1097 ; SSE2-NEXT:    pandn %xmm11, %xmm1
1098 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
1099 ; SSE2-NEXT:    pandn %xmm12, %xmm4
1100 ; SSE2-NEXT:    psrld $1, %xmm5
1101 ; SSE2-NEXT:    por %xmm4, %xmm5
1102 ; SSE2-NEXT:    pand %xmm1, %xmm5
1103 ; SSE2-NEXT:    pandn %xmm8, %xmm1
1104 ; SSE2-NEXT:    por %xmm5, %xmm1
1105 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1106 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1107 ; SSE2-NEXT:    pxor %xmm9, %xmm4
1108 ; SSE2-NEXT:    pxor %xmm5, %xmm5
1109 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
1110 ; SSE2-NEXT:    pxor %xmm9, %xmm5
1111 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
1112 ; SSE2-NEXT:    paddd %xmm6, %xmm2
1113 ; SSE2-NEXT:    pxor %xmm6, %xmm6
1114 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6
1115 ; SSE2-NEXT:    movdqa %xmm6, %xmm8
1116 ; SSE2-NEXT:    pxor %xmm9, %xmm8
1117 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm8
1118 ; SSE2-NEXT:    pandn %xmm4, %xmm8
1119 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
1120 ; SSE2-NEXT:    pandn %xmm12, %xmm4
1121 ; SSE2-NEXT:    psrld $1, %xmm6
1122 ; SSE2-NEXT:    por %xmm4, %xmm6
1123 ; SSE2-NEXT:    pand %xmm8, %xmm6
1124 ; SSE2-NEXT:    pandn %xmm2, %xmm8
1125 ; SSE2-NEXT:    por %xmm6, %xmm8
1126 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1127 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm2
1128 ; SSE2-NEXT:    pxor %xmm9, %xmm2
1129 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1130 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
1131 ; SSE2-NEXT:    pxor %xmm9, %xmm4
1132 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm2
1133 ; SSE2-NEXT:    paddd %xmm7, %xmm3
1134 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm10
1135 ; SSE2-NEXT:    pxor %xmm10, %xmm9
1136 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
1137 ; SSE2-NEXT:    pandn %xmm2, %xmm9
1138 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
1139 ; SSE2-NEXT:    pandn %xmm12, %xmm2
1140 ; SSE2-NEXT:    psrld $1, %xmm10
1141 ; SSE2-NEXT:    por %xmm2, %xmm10
1142 ; SSE2-NEXT:    pand %xmm9, %xmm10
1143 ; SSE2-NEXT:    pandn %xmm3, %xmm9
1144 ; SSE2-NEXT:    por %xmm10, %xmm9
1145 ; SSE2-NEXT:    movdqa %xmm8, %xmm2
1146 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
1147 ; SSE2-NEXT:    retq
1149 ; SSSE3-LABEL: v16i32:
1150 ; SSSE3:       # %bb.0:
1151 ; SSSE3-NEXT:    movdqa %xmm1, %xmm8
1152 ; SSSE3-NEXT:    movdqa %xmm0, %xmm11
1153 ; SSSE3-NEXT:    pxor %xmm10, %xmm10
1154 ; SSSE3-NEXT:    pxor %xmm12, %xmm12
1155 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm12
1156 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm9
1157 ; SSSE3-NEXT:    pxor %xmm9, %xmm12
1158 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
1159 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm1
1160 ; SSSE3-NEXT:    pxor %xmm9, %xmm1
1161 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm12
1162 ; SSSE3-NEXT:    paddd %xmm4, %xmm11
1163 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
1164 ; SSSE3-NEXT:    pcmpgtd %xmm11, %xmm4
1165 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
1166 ; SSSE3-NEXT:    pxor %xmm9, %xmm0
1167 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm0
1168 ; SSSE3-NEXT:    pandn %xmm12, %xmm0
1169 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm12 = [2147483648,2147483648,2147483648,2147483648]
1170 ; SSSE3-NEXT:    movdqa %xmm4, %xmm1
1171 ; SSSE3-NEXT:    pandn %xmm12, %xmm1
1172 ; SSSE3-NEXT:    psrld $1, %xmm4
1173 ; SSSE3-NEXT:    por %xmm1, %xmm4
1174 ; SSSE3-NEXT:    pand %xmm0, %xmm4
1175 ; SSSE3-NEXT:    pandn %xmm11, %xmm0
1176 ; SSSE3-NEXT:    por %xmm4, %xmm0
1177 ; SSSE3-NEXT:    pxor %xmm11, %xmm11
1178 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm11
1179 ; SSSE3-NEXT:    pxor %xmm9, %xmm11
1180 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
1181 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm4
1182 ; SSSE3-NEXT:    pxor %xmm9, %xmm4
1183 ; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm11
1184 ; SSSE3-NEXT:    paddd %xmm5, %xmm8
1185 ; SSSE3-NEXT:    pxor %xmm5, %xmm5
1186 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm5
1187 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
1188 ; SSSE3-NEXT:    pxor %xmm9, %xmm1
1189 ; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm1
1190 ; SSSE3-NEXT:    pandn %xmm11, %xmm1
1191 ; SSSE3-NEXT:    movdqa %xmm5, %xmm4
1192 ; SSSE3-NEXT:    pandn %xmm12, %xmm4
1193 ; SSSE3-NEXT:    psrld $1, %xmm5
1194 ; SSSE3-NEXT:    por %xmm4, %xmm5
1195 ; SSSE3-NEXT:    pand %xmm1, %xmm5
1196 ; SSSE3-NEXT:    pandn %xmm8, %xmm1
1197 ; SSSE3-NEXT:    por %xmm5, %xmm1
1198 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
1199 ; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm4
1200 ; SSSE3-NEXT:    pxor %xmm9, %xmm4
1201 ; SSSE3-NEXT:    pxor %xmm5, %xmm5
1202 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm5
1203 ; SSSE3-NEXT:    pxor %xmm9, %xmm5
1204 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm4
1205 ; SSSE3-NEXT:    paddd %xmm6, %xmm2
1206 ; SSSE3-NEXT:    pxor %xmm6, %xmm6
1207 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm6
1208 ; SSSE3-NEXT:    movdqa %xmm6, %xmm8
1209 ; SSSE3-NEXT:    pxor %xmm9, %xmm8
1210 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm8
1211 ; SSSE3-NEXT:    pandn %xmm4, %xmm8
1212 ; SSSE3-NEXT:    movdqa %xmm6, %xmm4
1213 ; SSSE3-NEXT:    pandn %xmm12, %xmm4
1214 ; SSSE3-NEXT:    psrld $1, %xmm6
1215 ; SSSE3-NEXT:    por %xmm4, %xmm6
1216 ; SSSE3-NEXT:    pand %xmm8, %xmm6
1217 ; SSSE3-NEXT:    pandn %xmm2, %xmm8
1218 ; SSSE3-NEXT:    por %xmm6, %xmm8
1219 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
1220 ; SSSE3-NEXT:    pcmpgtd %xmm7, %xmm2
1221 ; SSSE3-NEXT:    pxor %xmm9, %xmm2
1222 ; SSSE3-NEXT:    pxor %xmm4, %xmm4
1223 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
1224 ; SSSE3-NEXT:    pxor %xmm9, %xmm4
1225 ; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm2
1226 ; SSSE3-NEXT:    paddd %xmm7, %xmm3
1227 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm10
1228 ; SSSE3-NEXT:    pxor %xmm10, %xmm9
1229 ; SSSE3-NEXT:    pcmpeqd %xmm4, %xmm9
1230 ; SSSE3-NEXT:    pandn %xmm2, %xmm9
1231 ; SSSE3-NEXT:    movdqa %xmm10, %xmm2
1232 ; SSSE3-NEXT:    pandn %xmm12, %xmm2
1233 ; SSSE3-NEXT:    psrld $1, %xmm10
1234 ; SSSE3-NEXT:    por %xmm2, %xmm10
1235 ; SSSE3-NEXT:    pand %xmm9, %xmm10
1236 ; SSSE3-NEXT:    pandn %xmm3, %xmm9
1237 ; SSSE3-NEXT:    por %xmm10, %xmm9
1238 ; SSSE3-NEXT:    movdqa %xmm8, %xmm2
1239 ; SSSE3-NEXT:    movdqa %xmm9, %xmm3
1240 ; SSSE3-NEXT:    retq
1242 ; SSE41-LABEL: v16i32:
1243 ; SSE41:       # %bb.0:
1244 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
1245 ; SSE41-NEXT:    pxor %xmm8, %xmm8
1246 ; SSE41-NEXT:    pxor %xmm11, %xmm11
1247 ; SSE41-NEXT:    pcmpgtd %xmm4, %xmm11
1248 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm10
1249 ; SSE41-NEXT:    pxor %xmm10, %xmm11
1250 ; SSE41-NEXT:    pxor %xmm12, %xmm12
1251 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm12
1252 ; SSE41-NEXT:    pxor %xmm10, %xmm12
1253 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm11
1254 ; SSE41-NEXT:    paddd %xmm4, %xmm9
1255 ; SSE41-NEXT:    pxor %xmm0, %xmm0
1256 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm0
1257 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
1258 ; SSE41-NEXT:    pxor %xmm10, %xmm4
1259 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm4
1260 ; SSE41-NEXT:    pandn %xmm11, %xmm4
1261 ; SSE41-NEXT:    movaps {{.*#+}} xmm12 = [2147483647,2147483647,2147483647,2147483647]
1262 ; SSE41-NEXT:    movaps {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
1263 ; SSE41-NEXT:    movaps %xmm11, %xmm13
1264 ; SSE41-NEXT:    blendvps %xmm0, %xmm12, %xmm13
1265 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
1266 ; SSE41-NEXT:    blendvps %xmm0, %xmm13, %xmm9
1267 ; SSE41-NEXT:    xorps %xmm13, %xmm13
1268 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm13
1269 ; SSE41-NEXT:    pxor %xmm10, %xmm13
1270 ; SSE41-NEXT:    pxor %xmm14, %xmm14
1271 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm14
1272 ; SSE41-NEXT:    pxor %xmm10, %xmm14
1273 ; SSE41-NEXT:    pcmpeqd %xmm14, %xmm13
1274 ; SSE41-NEXT:    paddd %xmm5, %xmm1
1275 ; SSE41-NEXT:    pxor %xmm0, %xmm0
1276 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
1277 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
1278 ; SSE41-NEXT:    pxor %xmm10, %xmm4
1279 ; SSE41-NEXT:    pcmpeqd %xmm14, %xmm4
1280 ; SSE41-NEXT:    pandn %xmm13, %xmm4
1281 ; SSE41-NEXT:    movaps %xmm11, %xmm5
1282 ; SSE41-NEXT:    blendvps %xmm0, %xmm12, %xmm5
1283 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
1284 ; SSE41-NEXT:    blendvps %xmm0, %xmm5, %xmm1
1285 ; SSE41-NEXT:    pxor %xmm13, %xmm13
1286 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm13
1287 ; SSE41-NEXT:    pxor %xmm10, %xmm13
1288 ; SSE41-NEXT:    xorps %xmm5, %xmm5
1289 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm5
1290 ; SSE41-NEXT:    pxor %xmm10, %xmm5
1291 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm13
1292 ; SSE41-NEXT:    paddd %xmm6, %xmm2
1293 ; SSE41-NEXT:    pxor %xmm0, %xmm0
1294 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm0
1295 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
1296 ; SSE41-NEXT:    pxor %xmm10, %xmm4
1297 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm4
1298 ; SSE41-NEXT:    pandn %xmm13, %xmm4
1299 ; SSE41-NEXT:    movaps %xmm11, %xmm5
1300 ; SSE41-NEXT:    blendvps %xmm0, %xmm12, %xmm5
1301 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
1302 ; SSE41-NEXT:    blendvps %xmm0, %xmm5, %xmm2
1303 ; SSE41-NEXT:    pxor %xmm0, %xmm0
1304 ; SSE41-NEXT:    pcmpgtd %xmm7, %xmm0
1305 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1306 ; SSE41-NEXT:    pxor %xmm4, %xmm4
1307 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
1308 ; SSE41-NEXT:    pxor %xmm10, %xmm4
1309 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1310 ; SSE41-NEXT:    paddd %xmm7, %xmm3
1311 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm8
1312 ; SSE41-NEXT:    pxor %xmm8, %xmm10
1313 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm10
1314 ; SSE41-NEXT:    pandn %xmm0, %xmm10
1315 ; SSE41-NEXT:    movdqa %xmm8, %xmm0
1316 ; SSE41-NEXT:    blendvps %xmm0, %xmm12, %xmm11
1317 ; SSE41-NEXT:    movdqa %xmm10, %xmm0
1318 ; SSE41-NEXT:    blendvps %xmm0, %xmm11, %xmm3
1319 ; SSE41-NEXT:    movaps %xmm9, %xmm0
1320 ; SSE41-NEXT:    retq
1322 ; AVX1-LABEL: v16i32:
1323 ; AVX1:       # %bb.0:
1324 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm9
1325 ; AVX1-NEXT:    vpxor %xmm12, %xmm12, %xmm12
1326 ; AVX1-NEXT:    vpcmpgtd %xmm9, %xmm12, %xmm7
1327 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
1328 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm8
1329 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
1330 ; AVX1-NEXT:    vpcmpgtd %xmm7, %xmm12, %xmm6
1331 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm10
1332 ; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm10, %xmm8
1333 ; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm12, %xmm6
1334 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm11
1335 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm12, %xmm6
1336 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
1337 ; AVX1-NEXT:    vpcmpeqd %xmm11, %xmm6, %xmm11
1338 ; AVX1-NEXT:    vinsertf128 $1, %xmm8, %ymm11, %ymm8
1339 ; AVX1-NEXT:    vpaddd %xmm9, %xmm7, %xmm9
1340 ; AVX1-NEXT:    vpcmpgtd %xmm9, %xmm12, %xmm7
1341 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm4
1342 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm10, %xmm10
1343 ; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
1344 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm12, %xmm2
1345 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm4
1346 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm6, %xmm4
1347 ; AVX1-NEXT:    vinsertf128 $1, %xmm10, %ymm4, %ymm4
1348 ; AVX1-NEXT:    vandnps %ymm8, %ymm4, %ymm4
1349 ; AVX1-NEXT:    vinsertf128 $1, %xmm7, %ymm2, %ymm7
1350 ; AVX1-NEXT:    vmovaps {{.*#+}} ymm8 = [2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647]
1351 ; AVX1-NEXT:    vmovaps {{.*#+}} ymm10 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]
1352 ; AVX1-NEXT:    vblendvps %ymm7, %ymm8, %ymm10, %ymm7
1353 ; AVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm0
1354 ; AVX1-NEXT:    vblendvps %ymm4, %ymm7, %ymm0, %ymm0
1355 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1356 ; AVX1-NEXT:    vpcmpgtd %xmm4, %xmm12, %xmm7
1357 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm7
1358 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1359 ; AVX1-NEXT:    vpcmpgtd %xmm2, %xmm12, %xmm6
1360 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
1361 ; AVX1-NEXT:    vpcmpeqd %xmm7, %xmm6, %xmm9
1362 ; AVX1-NEXT:    vpcmpgtd %xmm3, %xmm12, %xmm7
1363 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm11
1364 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm12, %xmm7
1365 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm7
1366 ; AVX1-NEXT:    vpcmpeqd %xmm11, %xmm7, %xmm11
1367 ; AVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm11, %ymm9
1368 ; AVX1-NEXT:    vpaddd %xmm4, %xmm2, %xmm11
1369 ; AVX1-NEXT:    vpcmpgtd %xmm11, %xmm12, %xmm4
1370 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm2
1371 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm6, %xmm2
1372 ; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1
1373 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm12, %xmm3
1374 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
1375 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm7, %xmm5
1376 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm5, %ymm2
1377 ; AVX1-NEXT:    vandnps %ymm9, %ymm2, %ymm2
1378 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
1379 ; AVX1-NEXT:    vblendvps %ymm3, %ymm8, %ymm10, %ymm3
1380 ; AVX1-NEXT:    vinsertf128 $1, %xmm11, %ymm1, %ymm1
1381 ; AVX1-NEXT:    vblendvps %ymm2, %ymm3, %ymm1, %ymm1
1382 ; AVX1-NEXT:    retq
1384 ; AVX2-LABEL: v16i32:
1385 ; AVX2:       # %bb.0:
1386 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
1387 ; AVX2-NEXT:    vpcmpgtd %ymm2, %ymm4, %ymm5
1388 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
1389 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
1390 ; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm4, %ymm7
1391 ; AVX2-NEXT:    vpxor %ymm6, %ymm7, %ymm7
1392 ; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm7, %ymm5
1393 ; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm0
1394 ; AVX2-NEXT:    vpcmpgtd %ymm0, %ymm4, %ymm2
1395 ; AVX2-NEXT:    vpxor %ymm6, %ymm2, %ymm8
1396 ; AVX2-NEXT:    vpcmpeqd %ymm8, %ymm7, %ymm7
1397 ; AVX2-NEXT:    vpandn %ymm5, %ymm7, %ymm5
1398 ; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm7 = [2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647]
1399 ; AVX2-NEXT:    vbroadcastss {{.*#+}} ymm8 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]
1400 ; AVX2-NEXT:    vblendvps %ymm2, %ymm7, %ymm8, %ymm2
1401 ; AVX2-NEXT:    vblendvps %ymm5, %ymm2, %ymm0, %ymm0
1402 ; AVX2-NEXT:    vpcmpgtd %ymm3, %ymm4, %ymm2
1403 ; AVX2-NEXT:    vpxor %ymm6, %ymm2, %ymm2
1404 ; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm4, %ymm5
1405 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
1406 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm5, %ymm2
1407 ; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm1
1408 ; AVX2-NEXT:    vpcmpgtd %ymm1, %ymm4, %ymm3
1409 ; AVX2-NEXT:    vpxor %ymm6, %ymm3, %ymm4
1410 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm5, %ymm4
1411 ; AVX2-NEXT:    vpandn %ymm2, %ymm4, %ymm2
1412 ; AVX2-NEXT:    vblendvps %ymm3, %ymm7, %ymm8, %ymm3
1413 ; AVX2-NEXT:    vblendvps %ymm2, %ymm3, %ymm1, %ymm1
1414 ; AVX2-NEXT:    retq
1416 ; AVX512-LABEL: v16i32:
1417 ; AVX512:       # %bb.0:
1418 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1419 ; AVX512-NEXT:    vpcmpnltd %zmm2, %zmm1, %k0
1420 ; AVX512-NEXT:    vpcmpnltd %zmm2, %zmm0, %k1
1421 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
1422 ; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
1423 ; AVX512-NEXT:    vpcmpnltd %zmm2, %zmm0, %k2
1424 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
1425 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
1426 ; AVX512-NEXT:    vpcmpgtd %zmm0, %zmm2, %k2
1427 ; AVX512-NEXT:    vpbroadcastd {{.*#+}} zmm1 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648]
1428 ; AVX512-NEXT:    vpbroadcastd {{.*}}(%rip), %zmm1 {%k2}
1429 ; AVX512-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}
1430 ; AVX512-NEXT:    retq
1431   %z = call <16 x i32> @llvm.sadd.sat.v16i32(<16 x i32> %x, <16 x i32> %y)
1432   ret <16 x i32> %z
1435 define <2 x i64> @v2i64(<2 x i64> %x, <2 x i64> %y) nounwind {
1436 ; SSE2-LABEL: v2i64:
1437 ; SSE2:       # %bb.0:
1438 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
1439 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
1440 ; SSE2-NEXT:    paddq %xmm1, %xmm0
1441 ; SSE2-NEXT:    pxor %xmm2, %xmm1
1442 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1443 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
1444 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1445 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm1
1446 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1447 ; SSE2-NEXT:    pand %xmm5, %xmm1
1448 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1449 ; SSE2-NEXT:    por %xmm1, %xmm4
1450 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm5
1451 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1452 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1453 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1454 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm1
1455 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1456 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
1457 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1458 ; SSE2-NEXT:    pand %xmm6, %xmm3
1459 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1460 ; SSE2-NEXT:    por %xmm3, %xmm1
1461 ; SSE2-NEXT:    pxor %xmm5, %xmm1
1462 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm4
1463 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,0,3,2]
1464 ; SSE2-NEXT:    pand %xmm4, %xmm3
1465 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1466 ; SSE2-NEXT:    pxor %xmm2, %xmm4
1467 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1468 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
1469 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1470 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
1471 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1472 ; SSE2-NEXT:    pand %xmm7, %xmm2
1473 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]
1474 ; SSE2-NEXT:    por %xmm2, %xmm4
1475 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1476 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm5
1477 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,0,3,2]
1478 ; SSE2-NEXT:    pand %xmm5, %xmm1
1479 ; SSE2-NEXT:    pandn %xmm3, %xmm1
1480 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
1481 ; SSE2-NEXT:    pandn {{.*}}(%rip), %xmm2
1482 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm4
1483 ; SSE2-NEXT:    por %xmm2, %xmm4
1484 ; SSE2-NEXT:    pand %xmm1, %xmm4
1485 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1486 ; SSE2-NEXT:    por %xmm4, %xmm1
1487 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1488 ; SSE2-NEXT:    retq
1490 ; SSSE3-LABEL: v2i64:
1491 ; SSSE3:       # %bb.0:
1492 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
1493 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
1494 ; SSSE3-NEXT:    paddq %xmm1, %xmm0
1495 ; SSSE3-NEXT:    pxor %xmm2, %xmm1
1496 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
1497 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
1498 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1499 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm1
1500 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1501 ; SSSE3-NEXT:    pand %xmm5, %xmm1
1502 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1503 ; SSSE3-NEXT:    por %xmm1, %xmm4
1504 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm5
1505 ; SSSE3-NEXT:    pxor %xmm5, %xmm4
1506 ; SSSE3-NEXT:    pxor %xmm2, %xmm3
1507 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1508 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm1
1509 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
1510 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm3
1511 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1512 ; SSSE3-NEXT:    pand %xmm6, %xmm3
1513 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1514 ; SSSE3-NEXT:    por %xmm3, %xmm1
1515 ; SSSE3-NEXT:    pxor %xmm5, %xmm1
1516 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm4
1517 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,0,3,2]
1518 ; SSSE3-NEXT:    pand %xmm4, %xmm3
1519 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
1520 ; SSSE3-NEXT:    pxor %xmm2, %xmm4
1521 ; SSSE3-NEXT:    movdqa %xmm2, %xmm6
1522 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6
1523 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1524 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm4
1525 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
1526 ; SSSE3-NEXT:    pand %xmm7, %xmm2
1527 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]
1528 ; SSSE3-NEXT:    por %xmm2, %xmm4
1529 ; SSSE3-NEXT:    pxor %xmm4, %xmm5
1530 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm5
1531 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,0,3,2]
1532 ; SSSE3-NEXT:    pand %xmm5, %xmm1
1533 ; SSSE3-NEXT:    pandn %xmm3, %xmm1
1534 ; SSSE3-NEXT:    movdqa %xmm4, %xmm2
1535 ; SSSE3-NEXT:    pandn {{.*}}(%rip), %xmm2
1536 ; SSSE3-NEXT:    pand {{.*}}(%rip), %xmm4
1537 ; SSSE3-NEXT:    por %xmm2, %xmm4
1538 ; SSSE3-NEXT:    pand %xmm1, %xmm4
1539 ; SSSE3-NEXT:    pandn %xmm0, %xmm1
1540 ; SSSE3-NEXT:    por %xmm4, %xmm1
1541 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1542 ; SSSE3-NEXT:    retq
1544 ; SSE41-LABEL: v2i64:
1545 ; SSE41:       # %bb.0:
1546 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1547 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648]
1548 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
1549 ; SSE41-NEXT:    paddq %xmm1, %xmm2
1550 ; SSE41-NEXT:    pxor %xmm0, %xmm1
1551 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
1552 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm4
1553 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1554 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
1555 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
1556 ; SSE41-NEXT:    pand %xmm5, %xmm1
1557 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1558 ; SSE41-NEXT:    por %xmm1, %xmm4
1559 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
1560 ; SSE41-NEXT:    pxor %xmm1, %xmm4
1561 ; SSE41-NEXT:    pxor %xmm0, %xmm3
1562 ; SSE41-NEXT:    movdqa %xmm0, %xmm5
1563 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm5
1564 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
1565 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm3
1566 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1567 ; SSE41-NEXT:    pand %xmm6, %xmm3
1568 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
1569 ; SSE41-NEXT:    por %xmm3, %xmm5
1570 ; SSE41-NEXT:    pxor %xmm1, %xmm5
1571 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm4
1572 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
1573 ; SSE41-NEXT:    pxor %xmm0, %xmm3
1574 ; SSE41-NEXT:    movdqa %xmm0, %xmm6
1575 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm6
1576 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1577 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm3
1578 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1579 ; SSE41-NEXT:    pand %xmm7, %xmm3
1580 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
1581 ; SSE41-NEXT:    por %xmm3, %xmm0
1582 ; SSE41-NEXT:    pxor %xmm0, %xmm1
1583 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm1
1584 ; SSE41-NEXT:    pandn %xmm4, %xmm1
1585 ; SSE41-NEXT:    movapd {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1586 ; SSE41-NEXT:    blendvpd %xmm0, {{.*}}(%rip), %xmm3
1587 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1588 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
1589 ; SSE41-NEXT:    movapd %xmm2, %xmm0
1590 ; SSE41-NEXT:    retq
1592 ; AVX1-LABEL: v2i64:
1593 ; AVX1:       # %bb.0:
1594 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1595 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm3
1596 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
1597 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
1598 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
1599 ; AVX1-NEXT:    vpxor %xmm4, %xmm5, %xmm5
1600 ; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm5, %xmm3
1601 ; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
1602 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm1
1603 ; AVX1-NEXT:    vpxor %xmm4, %xmm1, %xmm2
1604 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm5, %xmm2
1605 ; AVX1-NEXT:    vpandn %xmm3, %xmm2, %xmm2
1606 ; AVX1-NEXT:    vmovapd {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1607 ; AVX1-NEXT:    vblendvpd %xmm1, {{.*}}(%rip), %xmm3, %xmm1
1608 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
1609 ; AVX1-NEXT:    retq
1611 ; AVX2-LABEL: v2i64:
1612 ; AVX2:       # %bb.0:
1613 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1614 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm2, %xmm3
1615 ; AVX2-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
1616 ; AVX2-NEXT:    vpxor %xmm4, %xmm3, %xmm3
1617 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
1618 ; AVX2-NEXT:    vpxor %xmm4, %xmm5, %xmm5
1619 ; AVX2-NEXT:    vpcmpeqq %xmm3, %xmm5, %xmm3
1620 ; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
1621 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm1
1622 ; AVX2-NEXT:    vpxor %xmm4, %xmm1, %xmm2
1623 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm5, %xmm2
1624 ; AVX2-NEXT:    vpandn %xmm3, %xmm2, %xmm2
1625 ; AVX2-NEXT:    vmovapd {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1626 ; AVX2-NEXT:    vblendvpd %xmm1, {{.*}}(%rip), %xmm3, %xmm1
1627 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
1628 ; AVX2-NEXT:    retq
1630 ; AVX512-LABEL: v2i64:
1631 ; AVX512:       # %bb.0:
1632 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1633 ; AVX512-NEXT:    vpcmpnltq %xmm2, %xmm1, %k0
1634 ; AVX512-NEXT:    vpcmpnltq %xmm2, %xmm0, %k1
1635 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
1636 ; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
1637 ; AVX512-NEXT:    vpcmpnltq %xmm2, %xmm0, %k2
1638 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
1639 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
1640 ; AVX512-NEXT:    vpcmpgtq %xmm0, %xmm2, %k2
1641 ; AVX512-NEXT:    vmovdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
1642 ; AVX512-NEXT:    vmovdqa64 {{.*}}(%rip), %xmm1 {%k2}
1643 ; AVX512-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1}
1644 ; AVX512-NEXT:    retq
1645   %z = call <2 x i64> @llvm.sadd.sat.v2i64(<2 x i64> %x, <2 x i64> %y)
1646   ret <2 x i64> %z
1649 define <4 x i64> @v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {
1650 ; SSE2-LABEL: v4i64:
1651 ; SSE2:       # %bb.0:
1652 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
1653 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1654 ; SSE2-NEXT:    paddq %xmm2, %xmm9
1655 ; SSE2-NEXT:    pxor %xmm10, %xmm2
1656 ; SSE2-NEXT:    movdqa %xmm10, %xmm6
1657 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm6
1658 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1659 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
1660 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1661 ; SSE2-NEXT:    pand %xmm7, %xmm2
1662 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1663 ; SSE2-NEXT:    por %xmm2, %xmm7
1664 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm6
1665 ; SSE2-NEXT:    pxor %xmm6, %xmm7
1666 ; SSE2-NEXT:    pxor %xmm10, %xmm0
1667 ; SSE2-NEXT:    movdqa %xmm10, %xmm2
1668 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1669 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1670 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1671 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1672 ; SSE2-NEXT:    pand %xmm4, %xmm0
1673 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1674 ; SSE2-NEXT:    por %xmm0, %xmm2
1675 ; SSE2-NEXT:    pxor %xmm6, %xmm2
1676 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm7
1677 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,0,3,2]
1678 ; SSE2-NEXT:    pand %xmm7, %xmm4
1679 ; SSE2-NEXT:    movdqa %xmm9, %xmm0
1680 ; SSE2-NEXT:    pxor %xmm10, %xmm0
1681 ; SSE2-NEXT:    movdqa %xmm10, %xmm7
1682 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
1683 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]
1684 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
1685 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1686 ; SSE2-NEXT:    pand %xmm5, %xmm0
1687 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1688 ; SSE2-NEXT:    por %xmm0, %xmm5
1689 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
1690 ; SSE2-NEXT:    pxor %xmm6, %xmm7
1691 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm7
1692 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,0,3,2]
1693 ; SSE2-NEXT:    pand %xmm7, %xmm0
1694 ; SSE2-NEXT:    pandn %xmm4, %xmm0
1695 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]
1696 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
1697 ; SSE2-NEXT:    pandn %xmm11, %xmm2
1698 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775807,9223372036854775807]
1699 ; SSE2-NEXT:    pand %xmm8, %xmm5
1700 ; SSE2-NEXT:    por %xmm2, %xmm5
1701 ; SSE2-NEXT:    pand %xmm0, %xmm5
1702 ; SSE2-NEXT:    pandn %xmm9, %xmm0
1703 ; SSE2-NEXT:    por %xmm5, %xmm0
1704 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1705 ; SSE2-NEXT:    paddq %xmm3, %xmm1
1706 ; SSE2-NEXT:    pxor %xmm10, %xmm3
1707 ; SSE2-NEXT:    movdqa %xmm10, %xmm4
1708 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
1709 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1710 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm3
1711 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1712 ; SSE2-NEXT:    pand %xmm5, %xmm3
1713 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1714 ; SSE2-NEXT:    por %xmm3, %xmm4
1715 ; SSE2-NEXT:    pxor %xmm6, %xmm4
1716 ; SSE2-NEXT:    pxor %xmm10, %xmm2
1717 ; SSE2-NEXT:    movdqa %xmm10, %xmm3
1718 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
1719 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
1720 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
1721 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1722 ; SSE2-NEXT:    pand %xmm5, %xmm2
1723 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1724 ; SSE2-NEXT:    por %xmm2, %xmm3
1725 ; SSE2-NEXT:    pxor %xmm6, %xmm3
1726 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
1727 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,0,3,2]
1728 ; SSE2-NEXT:    pand %xmm4, %xmm5
1729 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1730 ; SSE2-NEXT:    pxor %xmm10, %xmm2
1731 ; SSE2-NEXT:    movdqa %xmm10, %xmm4
1732 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1733 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
1734 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
1735 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1736 ; SSE2-NEXT:    pand %xmm7, %xmm2
1737 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1738 ; SSE2-NEXT:    por %xmm2, %xmm4
1739 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1740 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm6
1741 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,0,3,2]
1742 ; SSE2-NEXT:    pand %xmm6, %xmm2
1743 ; SSE2-NEXT:    pandn %xmm5, %xmm2
1744 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
1745 ; SSE2-NEXT:    pandn %xmm11, %xmm3
1746 ; SSE2-NEXT:    pand %xmm8, %xmm4
1747 ; SSE2-NEXT:    por %xmm3, %xmm4
1748 ; SSE2-NEXT:    pand %xmm2, %xmm4
1749 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1750 ; SSE2-NEXT:    por %xmm4, %xmm2
1751 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1752 ; SSE2-NEXT:    retq
1754 ; SSSE3-LABEL: v4i64:
1755 ; SSSE3:       # %bb.0:
1756 ; SSSE3-NEXT:    movdqa %xmm0, %xmm9
1757 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1758 ; SSSE3-NEXT:    paddq %xmm2, %xmm9
1759 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
1760 ; SSSE3-NEXT:    movdqa %xmm10, %xmm6
1761 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm6
1762 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1763 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm2
1764 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1765 ; SSSE3-NEXT:    pand %xmm7, %xmm2
1766 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3]
1767 ; SSSE3-NEXT:    por %xmm2, %xmm7
1768 ; SSSE3-NEXT:    pcmpeqd %xmm6, %xmm6
1769 ; SSSE3-NEXT:    pxor %xmm6, %xmm7
1770 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1771 ; SSSE3-NEXT:    movdqa %xmm10, %xmm2
1772 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm2
1773 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
1774 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
1775 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1776 ; SSSE3-NEXT:    pand %xmm4, %xmm0
1777 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1778 ; SSSE3-NEXT:    por %xmm0, %xmm2
1779 ; SSSE3-NEXT:    pxor %xmm6, %xmm2
1780 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm7
1781 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,0,3,2]
1782 ; SSSE3-NEXT:    pand %xmm7, %xmm4
1783 ; SSSE3-NEXT:    movdqa %xmm9, %xmm0
1784 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
1785 ; SSSE3-NEXT:    movdqa %xmm10, %xmm7
1786 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm7
1787 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[0,0,2,2]
1788 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
1789 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1790 ; SSSE3-NEXT:    pand %xmm5, %xmm0
1791 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1792 ; SSSE3-NEXT:    por %xmm0, %xmm5
1793 ; SSSE3-NEXT:    movdqa %xmm5, %xmm7
1794 ; SSSE3-NEXT:    pxor %xmm6, %xmm7
1795 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm7
1796 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,0,3,2]
1797 ; SSSE3-NEXT:    pand %xmm7, %xmm0
1798 ; SSSE3-NEXT:    pandn %xmm4, %xmm0
1799 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]
1800 ; SSSE3-NEXT:    movdqa %xmm5, %xmm2
1801 ; SSSE3-NEXT:    pandn %xmm11, %xmm2
1802 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775807,9223372036854775807]
1803 ; SSSE3-NEXT:    pand %xmm8, %xmm5
1804 ; SSSE3-NEXT:    por %xmm2, %xmm5
1805 ; SSSE3-NEXT:    pand %xmm0, %xmm5
1806 ; SSSE3-NEXT:    pandn %xmm9, %xmm0
1807 ; SSSE3-NEXT:    por %xmm5, %xmm0
1808 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
1809 ; SSSE3-NEXT:    paddq %xmm3, %xmm1
1810 ; SSSE3-NEXT:    pxor %xmm10, %xmm3
1811 ; SSSE3-NEXT:    movdqa %xmm10, %xmm4
1812 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
1813 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1814 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm3
1815 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1816 ; SSSE3-NEXT:    pand %xmm5, %xmm3
1817 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1818 ; SSSE3-NEXT:    por %xmm3, %xmm4
1819 ; SSSE3-NEXT:    pxor %xmm6, %xmm4
1820 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
1821 ; SSSE3-NEXT:    movdqa %xmm10, %xmm3
1822 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm3
1823 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
1824 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm2
1825 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1826 ; SSSE3-NEXT:    pand %xmm5, %xmm2
1827 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1828 ; SSSE3-NEXT:    por %xmm2, %xmm3
1829 ; SSSE3-NEXT:    pxor %xmm6, %xmm3
1830 ; SSSE3-NEXT:    pcmpeqd %xmm3, %xmm4
1831 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,0,3,2]
1832 ; SSSE3-NEXT:    pand %xmm4, %xmm5
1833 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
1834 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
1835 ; SSSE3-NEXT:    movdqa %xmm10, %xmm4
1836 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
1837 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
1838 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm2
1839 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1840 ; SSSE3-NEXT:    pand %xmm7, %xmm2
1841 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1842 ; SSSE3-NEXT:    por %xmm2, %xmm4
1843 ; SSSE3-NEXT:    pxor %xmm4, %xmm6
1844 ; SSSE3-NEXT:    pcmpeqd %xmm3, %xmm6
1845 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm6[1,0,3,2]
1846 ; SSSE3-NEXT:    pand %xmm6, %xmm2
1847 ; SSSE3-NEXT:    pandn %xmm5, %xmm2
1848 ; SSSE3-NEXT:    movdqa %xmm4, %xmm3
1849 ; SSSE3-NEXT:    pandn %xmm11, %xmm3
1850 ; SSSE3-NEXT:    pand %xmm8, %xmm4
1851 ; SSSE3-NEXT:    por %xmm3, %xmm4
1852 ; SSSE3-NEXT:    pand %xmm2, %xmm4
1853 ; SSSE3-NEXT:    pandn %xmm1, %xmm2
1854 ; SSSE3-NEXT:    por %xmm4, %xmm2
1855 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1856 ; SSSE3-NEXT:    retq
1858 ; SSE41-LABEL: v4i64:
1859 ; SSE41:       # %bb.0:
1860 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
1861 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
1862 ; SSE41-NEXT:    paddq %xmm2, %xmm9
1863 ; SSE41-NEXT:    pxor %xmm10, %xmm2
1864 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
1865 ; SSE41-NEXT:    pcmpgtd %xmm2, %xmm4
1866 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
1867 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm2
1868 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1869 ; SSE41-NEXT:    pand %xmm7, %xmm2
1870 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[1,1,3,3]
1871 ; SSE41-NEXT:    por %xmm2, %xmm7
1872 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm4
1873 ; SSE41-NEXT:    pxor %xmm4, %xmm7
1874 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1875 ; SSE41-NEXT:    movdqa %xmm10, %xmm2
1876 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
1877 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
1878 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1879 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1880 ; SSE41-NEXT:    pand %xmm5, %xmm0
1881 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[1,1,3,3]
1882 ; SSE41-NEXT:    por %xmm0, %xmm5
1883 ; SSE41-NEXT:    pxor %xmm4, %xmm5
1884 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm7
1885 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
1886 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1887 ; SSE41-NEXT:    movdqa %xmm10, %xmm2
1888 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
1889 ; SSE41-NEXT:    pshufd {{.*#+}} xmm8 = xmm2[0,0,2,2]
1890 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1891 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1892 ; SSE41-NEXT:    pand %xmm8, %xmm6
1893 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
1894 ; SSE41-NEXT:    por %xmm6, %xmm0
1895 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1896 ; SSE41-NEXT:    pxor %xmm4, %xmm2
1897 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm2
1898 ; SSE41-NEXT:    pandn %xmm7, %xmm2
1899 ; SSE41-NEXT:    movapd {{.*#+}} xmm8 = [9223372036854775807,9223372036854775807]
1900 ; SSE41-NEXT:    movapd {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]
1901 ; SSE41-NEXT:    movapd %xmm11, %xmm5
1902 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm5
1903 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
1904 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm9
1905 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1906 ; SSE41-NEXT:    paddq %xmm3, %xmm1
1907 ; SSE41-NEXT:    pxor %xmm10, %xmm3
1908 ; SSE41-NEXT:    movdqa %xmm10, %xmm2
1909 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm2
1910 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
1911 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm3
1912 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1913 ; SSE41-NEXT:    pand %xmm5, %xmm3
1914 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1915 ; SSE41-NEXT:    por %xmm3, %xmm2
1916 ; SSE41-NEXT:    pxor %xmm4, %xmm2
1917 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1918 ; SSE41-NEXT:    movdqa %xmm10, %xmm3
1919 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
1920 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
1921 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1922 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1923 ; SSE41-NEXT:    pand %xmm5, %xmm0
1924 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1925 ; SSE41-NEXT:    por %xmm0, %xmm3
1926 ; SSE41-NEXT:    pxor %xmm4, %xmm3
1927 ; SSE41-NEXT:    pcmpeqq %xmm3, %xmm2
1928 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1929 ; SSE41-NEXT:    pxor %xmm10, %xmm0
1930 ; SSE41-NEXT:    movdqa %xmm10, %xmm5
1931 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
1932 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
1933 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
1934 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
1935 ; SSE41-NEXT:    pand %xmm6, %xmm7
1936 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
1937 ; SSE41-NEXT:    por %xmm7, %xmm0
1938 ; SSE41-NEXT:    pxor %xmm0, %xmm4
1939 ; SSE41-NEXT:    pcmpeqq %xmm3, %xmm4
1940 ; SSE41-NEXT:    pandn %xmm2, %xmm4
1941 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm11
1942 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
1943 ; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm1
1944 ; SSE41-NEXT:    movapd %xmm9, %xmm0
1945 ; SSE41-NEXT:    retq
1947 ; AVX1-LABEL: v4i64:
1948 ; AVX1:       # %bb.0:
1949 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1950 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1951 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm4
1952 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
1953 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
1954 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
1955 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm3, %xmm7
1956 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm7
1957 ; AVX1-NEXT:    vpcmpeqq %xmm4, %xmm7, %xmm8
1958 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
1959 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm9
1960 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm4
1961 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
1962 ; AVX1-NEXT:    vpcmpeqq %xmm9, %xmm4, %xmm9
1963 ; AVX1-NEXT:    vinsertf128 $1, %xmm8, %ymm9, %ymm8
1964 ; AVX1-NEXT:    vpaddq %xmm2, %xmm6, %xmm9
1965 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm3, %xmm6
1966 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm2
1967 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm7, %xmm2
1968 ; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
1969 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm1
1970 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm3
1971 ; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm4, %xmm3
1972 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
1973 ; AVX1-NEXT:    vandnpd %ymm8, %ymm2, %ymm2
1974 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm1, %ymm1
1975 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
1976 ; AVX1-NEXT:    vblendvpd %ymm1, {{.*}}(%rip), %ymm3, %ymm1
1977 ; AVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm0
1978 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
1979 ; AVX1-NEXT:    retq
1981 ; AVX2-LABEL: v4i64:
1982 ; AVX2:       # %bb.0:
1983 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1984 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
1985 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm4, %ymm4
1986 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm3
1987 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
1988 ; AVX2-NEXT:    vpxor %ymm4, %ymm5, %ymm5
1989 ; AVX2-NEXT:    vpcmpeqq %ymm3, %ymm5, %ymm3
1990 ; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
1991 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm1
1992 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
1993 ; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm5, %ymm2
1994 ; AVX2-NEXT:    vpandn %ymm3, %ymm2, %ymm2
1995 ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm3 = [9223372036854775807,9223372036854775807,9223372036854775807,9223372036854775807]
1996 ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
1997 ; AVX2-NEXT:    vblendvpd %ymm1, %ymm3, %ymm4, %ymm1
1998 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
1999 ; AVX2-NEXT:    retq
2001 ; AVX512-LABEL: v4i64:
2002 ; AVX512:       # %bb.0:
2003 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2004 ; AVX512-NEXT:    vpcmpnltq %ymm2, %ymm1, %k0
2005 ; AVX512-NEXT:    vpcmpnltq %ymm2, %ymm0, %k1
2006 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
2007 ; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
2008 ; AVX512-NEXT:    vpcmpnltq %ymm2, %ymm0, %k2
2009 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
2010 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
2011 ; AVX512-NEXT:    vpcmpgtq %ymm0, %ymm2, %k2
2012 ; AVX512-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
2013 ; AVX512-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm1 {%k2}
2014 ; AVX512-NEXT:    vmovdqa64 %ymm1, %ymm0 {%k1}
2015 ; AVX512-NEXT:    retq
2016   %z = call <4 x i64> @llvm.sadd.sat.v4i64(<4 x i64> %x, <4 x i64> %y)
2017   ret <4 x i64> %z
2020 define <8 x i64> @v8i64(<8 x i64> %x, <8 x i64> %y) nounwind {
2021 ; SSE2-LABEL: v8i64:
2022 ; SSE2:       # %bb.0:
2023 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
2024 ; SSE2-NEXT:    movdqa %xmm0, %xmm13
2025 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648]
2026 ; SSE2-NEXT:    paddq %xmm4, %xmm13
2027 ; SSE2-NEXT:    pxor %xmm9, %xmm4
2028 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
2029 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
2030 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2]
2031 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
2032 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2033 ; SSE2-NEXT:    pand %xmm10, %xmm4
2034 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2035 ; SSE2-NEXT:    por %xmm4, %xmm1
2036 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm10
2037 ; SSE2-NEXT:    pxor %xmm10, %xmm1
2038 ; SSE2-NEXT:    pxor %xmm9, %xmm0
2039 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
2040 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2041 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm4[0,0,2,2]
2042 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
2043 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2044 ; SSE2-NEXT:    pand %xmm11, %xmm0
2045 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm4[1,1,3,3]
2046 ; SSE2-NEXT:    por %xmm0, %xmm14
2047 ; SSE2-NEXT:    pxor %xmm10, %xmm14
2048 ; SSE2-NEXT:    pcmpeqd %xmm14, %xmm1
2049 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm1[1,0,3,2]
2050 ; SSE2-NEXT:    pand %xmm1, %xmm11
2051 ; SSE2-NEXT:    movdqa %xmm13, %xmm0
2052 ; SSE2-NEXT:    pxor %xmm9, %xmm0
2053 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
2054 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
2055 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm1[0,0,2,2]
2056 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
2057 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2058 ; SSE2-NEXT:    pand %xmm12, %xmm0
2059 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2060 ; SSE2-NEXT:    por %xmm0, %xmm1
2061 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
2062 ; SSE2-NEXT:    pxor %xmm10, %xmm4
2063 ; SSE2-NEXT:    pcmpeqd %xmm14, %xmm4
2064 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,0,3,2]
2065 ; SSE2-NEXT:    pand %xmm4, %xmm0
2066 ; SSE2-NEXT:    pandn %xmm11, %xmm0
2067 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]
2068 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
2069 ; SSE2-NEXT:    pandn %xmm11, %xmm4
2070 ; SSE2-NEXT:    movdqa {{.*#+}} xmm12 = [9223372036854775807,9223372036854775807]
2071 ; SSE2-NEXT:    pand %xmm12, %xmm1
2072 ; SSE2-NEXT:    por %xmm4, %xmm1
2073 ; SSE2-NEXT:    pand %xmm0, %xmm1
2074 ; SSE2-NEXT:    pandn %xmm13, %xmm0
2075 ; SSE2-NEXT:    por %xmm1, %xmm0
2076 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
2077 ; SSE2-NEXT:    paddq %xmm5, %xmm8
2078 ; SSE2-NEXT:    pxor %xmm9, %xmm5
2079 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
2080 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
2081 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2082 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5
2083 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2084 ; SSE2-NEXT:    pand %xmm13, %xmm5
2085 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2086 ; SSE2-NEXT:    por %xmm5, %xmm4
2087 ; SSE2-NEXT:    pxor %xmm10, %xmm4
2088 ; SSE2-NEXT:    pxor %xmm9, %xmm1
2089 ; SSE2-NEXT:    movdqa %xmm9, %xmm5
2090 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
2091 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm5[0,0,2,2]
2092 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm1
2093 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2094 ; SSE2-NEXT:    pand %xmm13, %xmm1
2095 ; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm5[1,1,3,3]
2096 ; SSE2-NEXT:    por %xmm1, %xmm15
2097 ; SSE2-NEXT:    pxor %xmm10, %xmm15
2098 ; SSE2-NEXT:    pcmpeqd %xmm15, %xmm4
2099 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[1,0,3,2]
2100 ; SSE2-NEXT:    pand %xmm4, %xmm13
2101 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
2102 ; SSE2-NEXT:    pxor %xmm9, %xmm1
2103 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
2104 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
2105 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm4[0,0,2,2]
2106 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm1
2107 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2108 ; SSE2-NEXT:    pand %xmm14, %xmm1
2109 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2110 ; SSE2-NEXT:    por %xmm1, %xmm4
2111 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
2112 ; SSE2-NEXT:    pxor %xmm10, %xmm5
2113 ; SSE2-NEXT:    pcmpeqd %xmm15, %xmm5
2114 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,0,3,2]
2115 ; SSE2-NEXT:    pand %xmm5, %xmm1
2116 ; SSE2-NEXT:    pandn %xmm13, %xmm1
2117 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
2118 ; SSE2-NEXT:    pandn %xmm11, %xmm5
2119 ; SSE2-NEXT:    pand %xmm12, %xmm4
2120 ; SSE2-NEXT:    por %xmm5, %xmm4
2121 ; SSE2-NEXT:    pand %xmm1, %xmm4
2122 ; SSE2-NEXT:    pandn %xmm8, %xmm1
2123 ; SSE2-NEXT:    por %xmm4, %xmm1
2124 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2125 ; SSE2-NEXT:    paddq %xmm6, %xmm2
2126 ; SSE2-NEXT:    pxor %xmm9, %xmm6
2127 ; SSE2-NEXT:    movdqa %xmm9, %xmm5
2128 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
2129 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm5[0,0,2,2]
2130 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm6
2131 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2132 ; SSE2-NEXT:    pand %xmm8, %xmm6
2133 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2134 ; SSE2-NEXT:    por %xmm6, %xmm5
2135 ; SSE2-NEXT:    pxor %xmm10, %xmm5
2136 ; SSE2-NEXT:    pxor %xmm9, %xmm4
2137 ; SSE2-NEXT:    movdqa %xmm9, %xmm6
2138 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
2139 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
2140 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
2141 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2142 ; SSE2-NEXT:    pand %xmm8, %xmm4
2143 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2144 ; SSE2-NEXT:    por %xmm4, %xmm6
2145 ; SSE2-NEXT:    pxor %xmm10, %xmm6
2146 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
2147 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm5[1,0,3,2]
2148 ; SSE2-NEXT:    pand %xmm5, %xmm8
2149 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
2150 ; SSE2-NEXT:    pxor %xmm9, %xmm5
2151 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
2152 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
2153 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2154 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5
2155 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2156 ; SSE2-NEXT:    pand %xmm13, %xmm5
2157 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2158 ; SSE2-NEXT:    por %xmm5, %xmm4
2159 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
2160 ; SSE2-NEXT:    pxor %xmm10, %xmm5
2161 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
2162 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,0,3,2]
2163 ; SSE2-NEXT:    pand %xmm5, %xmm6
2164 ; SSE2-NEXT:    pandn %xmm8, %xmm6
2165 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
2166 ; SSE2-NEXT:    pandn %xmm11, %xmm5
2167 ; SSE2-NEXT:    pand %xmm12, %xmm4
2168 ; SSE2-NEXT:    por %xmm5, %xmm4
2169 ; SSE2-NEXT:    pand %xmm6, %xmm4
2170 ; SSE2-NEXT:    pandn %xmm2, %xmm6
2171 ; SSE2-NEXT:    por %xmm4, %xmm6
2172 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2173 ; SSE2-NEXT:    paddq %xmm7, %xmm3
2174 ; SSE2-NEXT:    pxor %xmm9, %xmm7
2175 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
2176 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
2177 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2178 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm7
2179 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2180 ; SSE2-NEXT:    pand %xmm5, %xmm7
2181 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2182 ; SSE2-NEXT:    por %xmm7, %xmm4
2183 ; SSE2-NEXT:    pxor %xmm10, %xmm4
2184 ; SSE2-NEXT:    pxor %xmm9, %xmm2
2185 ; SSE2-NEXT:    movdqa %xmm9, %xmm5
2186 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
2187 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
2188 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm2
2189 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2190 ; SSE2-NEXT:    pand %xmm7, %xmm2
2191 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2192 ; SSE2-NEXT:    por %xmm2, %xmm5
2193 ; SSE2-NEXT:    pxor %xmm10, %xmm5
2194 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
2195 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,0,3,2]
2196 ; SSE2-NEXT:    pand %xmm4, %xmm2
2197 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
2198 ; SSE2-NEXT:    pxor %xmm9, %xmm4
2199 ; SSE2-NEXT:    movdqa %xmm9, %xmm7
2200 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
2201 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
2202 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
2203 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2204 ; SSE2-NEXT:    pand %xmm8, %xmm4
2205 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2206 ; SSE2-NEXT:    por %xmm4, %xmm7
2207 ; SSE2-NEXT:    pxor %xmm7, %xmm10
2208 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm10
2209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[1,0,3,2]
2210 ; SSE2-NEXT:    pand %xmm10, %xmm5
2211 ; SSE2-NEXT:    pandn %xmm2, %xmm5
2212 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
2213 ; SSE2-NEXT:    pandn %xmm11, %xmm2
2214 ; SSE2-NEXT:    pand %xmm12, %xmm7
2215 ; SSE2-NEXT:    por %xmm2, %xmm7
2216 ; SSE2-NEXT:    pand %xmm5, %xmm7
2217 ; SSE2-NEXT:    pandn %xmm3, %xmm5
2218 ; SSE2-NEXT:    por %xmm7, %xmm5
2219 ; SSE2-NEXT:    movdqa %xmm6, %xmm2
2220 ; SSE2-NEXT:    movdqa %xmm5, %xmm3
2221 ; SSE2-NEXT:    retq
2223 ; SSSE3-LABEL: v8i64:
2224 ; SSSE3:       # %bb.0:
2225 ; SSSE3-NEXT:    movdqa %xmm1, %xmm8
2226 ; SSSE3-NEXT:    movdqa %xmm0, %xmm13
2227 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648]
2228 ; SSSE3-NEXT:    paddq %xmm4, %xmm13
2229 ; SSSE3-NEXT:    pxor %xmm9, %xmm4
2230 ; SSSE3-NEXT:    movdqa %xmm9, %xmm1
2231 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm1
2232 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2]
2233 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm4
2234 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2235 ; SSSE3-NEXT:    pand %xmm10, %xmm4
2236 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2237 ; SSSE3-NEXT:    por %xmm4, %xmm1
2238 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm10
2239 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
2240 ; SSSE3-NEXT:    pxor %xmm9, %xmm0
2241 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
2242 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
2243 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm4[0,0,2,2]
2244 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
2245 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2246 ; SSSE3-NEXT:    pand %xmm11, %xmm0
2247 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm14 = xmm4[1,1,3,3]
2248 ; SSSE3-NEXT:    por %xmm0, %xmm14
2249 ; SSSE3-NEXT:    pxor %xmm10, %xmm14
2250 ; SSSE3-NEXT:    pcmpeqd %xmm14, %xmm1
2251 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm1[1,0,3,2]
2252 ; SSSE3-NEXT:    pand %xmm1, %xmm11
2253 ; SSSE3-NEXT:    movdqa %xmm13, %xmm0
2254 ; SSSE3-NEXT:    pxor %xmm9, %xmm0
2255 ; SSSE3-NEXT:    movdqa %xmm9, %xmm1
2256 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm1
2257 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm1[0,0,2,2]
2258 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
2259 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2260 ; SSSE3-NEXT:    pand %xmm12, %xmm0
2261 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2262 ; SSSE3-NEXT:    por %xmm0, %xmm1
2263 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
2264 ; SSSE3-NEXT:    pxor %xmm10, %xmm4
2265 ; SSSE3-NEXT:    pcmpeqd %xmm14, %xmm4
2266 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,0,3,2]
2267 ; SSSE3-NEXT:    pand %xmm4, %xmm0
2268 ; SSSE3-NEXT:    pandn %xmm11, %xmm0
2269 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]
2270 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
2271 ; SSSE3-NEXT:    pandn %xmm11, %xmm4
2272 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm12 = [9223372036854775807,9223372036854775807]
2273 ; SSSE3-NEXT:    pand %xmm12, %xmm1
2274 ; SSSE3-NEXT:    por %xmm4, %xmm1
2275 ; SSSE3-NEXT:    pand %xmm0, %xmm1
2276 ; SSSE3-NEXT:    pandn %xmm13, %xmm0
2277 ; SSSE3-NEXT:    por %xmm1, %xmm0
2278 ; SSSE3-NEXT:    movdqa %xmm8, %xmm1
2279 ; SSSE3-NEXT:    paddq %xmm5, %xmm8
2280 ; SSSE3-NEXT:    pxor %xmm9, %xmm5
2281 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
2282 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm4
2283 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2284 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
2285 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2286 ; SSSE3-NEXT:    pand %xmm13, %xmm5
2287 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2288 ; SSSE3-NEXT:    por %xmm5, %xmm4
2289 ; SSSE3-NEXT:    pxor %xmm10, %xmm4
2290 ; SSSE3-NEXT:    pxor %xmm9, %xmm1
2291 ; SSSE3-NEXT:    movdqa %xmm9, %xmm5
2292 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm5
2293 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm5[0,0,2,2]
2294 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm1
2295 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2296 ; SSSE3-NEXT:    pand %xmm13, %xmm1
2297 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm15 = xmm5[1,1,3,3]
2298 ; SSSE3-NEXT:    por %xmm1, %xmm15
2299 ; SSSE3-NEXT:    pxor %xmm10, %xmm15
2300 ; SSSE3-NEXT:    pcmpeqd %xmm15, %xmm4
2301 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[1,0,3,2]
2302 ; SSSE3-NEXT:    pand %xmm4, %xmm13
2303 ; SSSE3-NEXT:    movdqa %xmm8, %xmm1
2304 ; SSSE3-NEXT:    pxor %xmm9, %xmm1
2305 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
2306 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
2307 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm14 = xmm4[0,0,2,2]
2308 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm1
2309 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
2310 ; SSSE3-NEXT:    pand %xmm14, %xmm1
2311 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2312 ; SSSE3-NEXT:    por %xmm1, %xmm4
2313 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
2314 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
2315 ; SSSE3-NEXT:    pcmpeqd %xmm15, %xmm5
2316 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,0,3,2]
2317 ; SSSE3-NEXT:    pand %xmm5, %xmm1
2318 ; SSSE3-NEXT:    pandn %xmm13, %xmm1
2319 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
2320 ; SSSE3-NEXT:    pandn %xmm11, %xmm5
2321 ; SSSE3-NEXT:    pand %xmm12, %xmm4
2322 ; SSSE3-NEXT:    por %xmm5, %xmm4
2323 ; SSSE3-NEXT:    pand %xmm1, %xmm4
2324 ; SSSE3-NEXT:    pandn %xmm8, %xmm1
2325 ; SSSE3-NEXT:    por %xmm4, %xmm1
2326 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
2327 ; SSSE3-NEXT:    paddq %xmm6, %xmm2
2328 ; SSSE3-NEXT:    pxor %xmm9, %xmm6
2329 ; SSSE3-NEXT:    movdqa %xmm9, %xmm5
2330 ; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm5
2331 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm5[0,0,2,2]
2332 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm6
2333 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2334 ; SSSE3-NEXT:    pand %xmm8, %xmm6
2335 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2336 ; SSSE3-NEXT:    por %xmm6, %xmm5
2337 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
2338 ; SSSE3-NEXT:    pxor %xmm9, %xmm4
2339 ; SSSE3-NEXT:    movdqa %xmm9, %xmm6
2340 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6
2341 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
2342 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm4
2343 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2344 ; SSSE3-NEXT:    pand %xmm8, %xmm4
2345 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2346 ; SSSE3-NEXT:    por %xmm4, %xmm6
2347 ; SSSE3-NEXT:    pxor %xmm10, %xmm6
2348 ; SSSE3-NEXT:    pcmpeqd %xmm6, %xmm5
2349 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm5[1,0,3,2]
2350 ; SSSE3-NEXT:    pand %xmm5, %xmm8
2351 ; SSSE3-NEXT:    movdqa %xmm2, %xmm5
2352 ; SSSE3-NEXT:    pxor %xmm9, %xmm5
2353 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
2354 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm4
2355 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2356 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
2357 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2358 ; SSSE3-NEXT:    pand %xmm13, %xmm5
2359 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2360 ; SSSE3-NEXT:    por %xmm5, %xmm4
2361 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
2362 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
2363 ; SSSE3-NEXT:    pcmpeqd %xmm6, %xmm5
2364 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,0,3,2]
2365 ; SSSE3-NEXT:    pand %xmm5, %xmm6
2366 ; SSSE3-NEXT:    pandn %xmm8, %xmm6
2367 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
2368 ; SSSE3-NEXT:    pandn %xmm11, %xmm5
2369 ; SSSE3-NEXT:    pand %xmm12, %xmm4
2370 ; SSSE3-NEXT:    por %xmm5, %xmm4
2371 ; SSSE3-NEXT:    pand %xmm6, %xmm4
2372 ; SSSE3-NEXT:    pandn %xmm2, %xmm6
2373 ; SSSE3-NEXT:    por %xmm4, %xmm6
2374 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
2375 ; SSSE3-NEXT:    paddq %xmm7, %xmm3
2376 ; SSSE3-NEXT:    pxor %xmm9, %xmm7
2377 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
2378 ; SSSE3-NEXT:    pcmpgtd %xmm7, %xmm4
2379 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2380 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm7
2381 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2382 ; SSSE3-NEXT:    pand %xmm5, %xmm7
2383 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2384 ; SSSE3-NEXT:    por %xmm7, %xmm4
2385 ; SSSE3-NEXT:    pxor %xmm10, %xmm4
2386 ; SSSE3-NEXT:    pxor %xmm9, %xmm2
2387 ; SSSE3-NEXT:    movdqa %xmm9, %xmm5
2388 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm5
2389 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
2390 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm2
2391 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2392 ; SSSE3-NEXT:    pand %xmm7, %xmm2
2393 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2394 ; SSSE3-NEXT:    por %xmm2, %xmm5
2395 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
2396 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm4
2397 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,0,3,2]
2398 ; SSSE3-NEXT:    pand %xmm4, %xmm2
2399 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2400 ; SSSE3-NEXT:    pxor %xmm9, %xmm4
2401 ; SSSE3-NEXT:    movdqa %xmm9, %xmm7
2402 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm7
2403 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
2404 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm4
2405 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2406 ; SSSE3-NEXT:    pand %xmm8, %xmm4
2407 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
2408 ; SSSE3-NEXT:    por %xmm4, %xmm7
2409 ; SSSE3-NEXT:    pxor %xmm7, %xmm10
2410 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm10
2411 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm10[1,0,3,2]
2412 ; SSSE3-NEXT:    pand %xmm10, %xmm5
2413 ; SSSE3-NEXT:    pandn %xmm2, %xmm5
2414 ; SSSE3-NEXT:    movdqa %xmm7, %xmm2
2415 ; SSSE3-NEXT:    pandn %xmm11, %xmm2
2416 ; SSSE3-NEXT:    pand %xmm12, %xmm7
2417 ; SSSE3-NEXT:    por %xmm2, %xmm7
2418 ; SSSE3-NEXT:    pand %xmm5, %xmm7
2419 ; SSSE3-NEXT:    pandn %xmm3, %xmm5
2420 ; SSSE3-NEXT:    por %xmm7, %xmm5
2421 ; SSSE3-NEXT:    movdqa %xmm6, %xmm2
2422 ; SSSE3-NEXT:    movdqa %xmm5, %xmm3
2423 ; SSSE3-NEXT:    retq
2425 ; SSE41-LABEL: v8i64:
2426 ; SSE41:       # %bb.0:
2427 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
2428 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648]
2429 ; SSE41-NEXT:    movdqa %xmm0, %xmm11
2430 ; SSE41-NEXT:    paddq %xmm4, %xmm8
2431 ; SSE41-NEXT:    pxor %xmm10, %xmm4
2432 ; SSE41-NEXT:    movdqa %xmm10, %xmm0
2433 ; SSE41-NEXT:    pcmpgtd %xmm4, %xmm0
2434 ; SSE41-NEXT:    pshufd {{.*#+}} xmm9 = xmm0[0,0,2,2]
2435 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm4
2436 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2437 ; SSE41-NEXT:    pand %xmm9, %xmm4
2438 ; SSE41-NEXT:    pshufd {{.*#+}} xmm12 = xmm0[1,1,3,3]
2439 ; SSE41-NEXT:    por %xmm4, %xmm12
2440 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm9
2441 ; SSE41-NEXT:    pxor %xmm9, %xmm12
2442 ; SSE41-NEXT:    pxor %xmm10, %xmm11
2443 ; SSE41-NEXT:    movdqa %xmm10, %xmm0
2444 ; SSE41-NEXT:    pcmpgtd %xmm11, %xmm0
2445 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm0[0,0,2,2]
2446 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm11
2447 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm11[1,1,3,3]
2448 ; SSE41-NEXT:    pand %xmm13, %xmm4
2449 ; SSE41-NEXT:    pshufd {{.*#+}} xmm11 = xmm0[1,1,3,3]
2450 ; SSE41-NEXT:    por %xmm4, %xmm11
2451 ; SSE41-NEXT:    pxor %xmm9, %xmm11
2452 ; SSE41-NEXT:    pcmpeqq %xmm11, %xmm12
2453 ; SSE41-NEXT:    movdqa %xmm8, %xmm0
2454 ; SSE41-NEXT:    pxor %xmm10, %xmm0
2455 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2456 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
2457 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2458 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
2459 ; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3]
2460 ; SSE41-NEXT:    pand %xmm13, %xmm14
2461 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2462 ; SSE41-NEXT:    por %xmm14, %xmm0
2463 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
2464 ; SSE41-NEXT:    pxor %xmm9, %xmm4
2465 ; SSE41-NEXT:    pcmpeqq %xmm11, %xmm4
2466 ; SSE41-NEXT:    pandn %xmm12, %xmm4
2467 ; SSE41-NEXT:    movapd {{.*#+}} xmm12 = [9223372036854775807,9223372036854775807]
2468 ; SSE41-NEXT:    movapd {{.*#+}} xmm11 = [9223372036854775808,9223372036854775808]
2469 ; SSE41-NEXT:    movapd %xmm11, %xmm13
2470 ; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm13
2471 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
2472 ; SSE41-NEXT:    blendvpd %xmm0, %xmm13, %xmm8
2473 ; SSE41-NEXT:    movdqa %xmm1, %xmm14
2474 ; SSE41-NEXT:    paddq %xmm5, %xmm1
2475 ; SSE41-NEXT:    pxor %xmm10, %xmm5
2476 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2477 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm4
2478 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2479 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm5
2480 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
2481 ; SSE41-NEXT:    pand %xmm13, %xmm0
2482 ; SSE41-NEXT:    pshufd {{.*#+}} xmm15 = xmm4[1,1,3,3]
2483 ; SSE41-NEXT:    por %xmm0, %xmm15
2484 ; SSE41-NEXT:    pxor %xmm9, %xmm15
2485 ; SSE41-NEXT:    pxor %xmm10, %xmm14
2486 ; SSE41-NEXT:    movdqa %xmm10, %xmm0
2487 ; SSE41-NEXT:    pcmpgtd %xmm14, %xmm0
2488 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm0[0,0,2,2]
2489 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm14
2490 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm14[1,1,3,3]
2491 ; SSE41-NEXT:    pand %xmm13, %xmm4
2492 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
2493 ; SSE41-NEXT:    por %xmm4, %xmm5
2494 ; SSE41-NEXT:    pxor %xmm9, %xmm5
2495 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm15
2496 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
2497 ; SSE41-NEXT:    pxor %xmm10, %xmm0
2498 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2499 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
2500 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2501 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
2502 ; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3]
2503 ; SSE41-NEXT:    pand %xmm13, %xmm14
2504 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2505 ; SSE41-NEXT:    por %xmm14, %xmm0
2506 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
2507 ; SSE41-NEXT:    pxor %xmm9, %xmm4
2508 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm4
2509 ; SSE41-NEXT:    pandn %xmm15, %xmm4
2510 ; SSE41-NEXT:    movapd %xmm11, %xmm5
2511 ; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm5
2512 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
2513 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm1
2514 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
2515 ; SSE41-NEXT:    paddq %xmm6, %xmm2
2516 ; SSE41-NEXT:    pxor %xmm10, %xmm6
2517 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2518 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm4
2519 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2520 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm6
2521 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
2522 ; SSE41-NEXT:    pand %xmm5, %xmm6
2523 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,1,3,3]
2524 ; SSE41-NEXT:    por %xmm6, %xmm5
2525 ; SSE41-NEXT:    pxor %xmm9, %xmm5
2526 ; SSE41-NEXT:    pxor %xmm10, %xmm0
2527 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2528 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
2529 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
2530 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
2531 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2532 ; SSE41-NEXT:    pand %xmm6, %xmm0
2533 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
2534 ; SSE41-NEXT:    por %xmm0, %xmm6
2535 ; SSE41-NEXT:    pxor %xmm9, %xmm6
2536 ; SSE41-NEXT:    pcmpeqq %xmm6, %xmm5
2537 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
2538 ; SSE41-NEXT:    pxor %xmm10, %xmm0
2539 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2540 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
2541 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm4[0,0,2,2]
2542 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
2543 ; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3]
2544 ; SSE41-NEXT:    pand %xmm13, %xmm14
2545 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
2546 ; SSE41-NEXT:    por %xmm14, %xmm0
2547 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
2548 ; SSE41-NEXT:    pxor %xmm9, %xmm4
2549 ; SSE41-NEXT:    pcmpeqq %xmm6, %xmm4
2550 ; SSE41-NEXT:    pandn %xmm5, %xmm4
2551 ; SSE41-NEXT:    movapd %xmm11, %xmm5
2552 ; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm5
2553 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
2554 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm2
2555 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2556 ; SSE41-NEXT:    paddq %xmm7, %xmm3
2557 ; SSE41-NEXT:    pxor %xmm10, %xmm7
2558 ; SSE41-NEXT:    movdqa %xmm10, %xmm4
2559 ; SSE41-NEXT:    pcmpgtd %xmm7, %xmm4
2560 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
2561 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm7
2562 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
2563 ; SSE41-NEXT:    pand %xmm5, %xmm6
2564 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2565 ; SSE41-NEXT:    por %xmm6, %xmm4
2566 ; SSE41-NEXT:    pxor %xmm9, %xmm4
2567 ; SSE41-NEXT:    pxor %xmm10, %xmm0
2568 ; SSE41-NEXT:    movdqa %xmm10, %xmm5
2569 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
2570 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
2571 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
2572 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
2573 ; SSE41-NEXT:    pand %xmm6, %xmm0
2574 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2575 ; SSE41-NEXT:    por %xmm0, %xmm5
2576 ; SSE41-NEXT:    pxor %xmm9, %xmm5
2577 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm4
2578 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2579 ; SSE41-NEXT:    pxor %xmm10, %xmm0
2580 ; SSE41-NEXT:    movdqa %xmm10, %xmm6
2581 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
2582 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm6[0,0,2,2]
2583 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
2584 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
2585 ; SSE41-NEXT:    pand %xmm13, %xmm7
2586 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
2587 ; SSE41-NEXT:    por %xmm7, %xmm0
2588 ; SSE41-NEXT:    pxor %xmm0, %xmm9
2589 ; SSE41-NEXT:    pcmpeqq %xmm5, %xmm9
2590 ; SSE41-NEXT:    pandn %xmm4, %xmm9
2591 ; SSE41-NEXT:    blendvpd %xmm0, %xmm12, %xmm11
2592 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
2593 ; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm3
2594 ; SSE41-NEXT:    movapd %xmm8, %xmm0
2595 ; SSE41-NEXT:    retq
2597 ; AVX1-LABEL: v8i64:
2598 ; AVX1:       # %bb.0:
2599 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm9
2600 ; AVX1-NEXT:    vpxor %xmm12, %xmm12, %xmm12
2601 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm12, %xmm7
2602 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
2603 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm8
2604 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
2605 ; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm12, %xmm6
2606 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm10
2607 ; AVX1-NEXT:    vpcmpeqq %xmm8, %xmm10, %xmm8
2608 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm12, %xmm6
2609 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm11
2610 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm12, %xmm6
2611 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
2612 ; AVX1-NEXT:    vpcmpeqq %xmm11, %xmm6, %xmm11
2613 ; AVX1-NEXT:    vinsertf128 $1, %xmm8, %ymm11, %ymm8
2614 ; AVX1-NEXT:    vpaddq %xmm9, %xmm7, %xmm9
2615 ; AVX1-NEXT:    vpcmpgtq %xmm9, %xmm12, %xmm7
2616 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm4
2617 ; AVX1-NEXT:    vpcmpeqq %xmm4, %xmm10, %xmm10
2618 ; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0
2619 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm12, %xmm2
2620 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm4
2621 ; AVX1-NEXT:    vpcmpeqq %xmm4, %xmm6, %xmm4
2622 ; AVX1-NEXT:    vinsertf128 $1, %xmm10, %ymm4, %ymm4
2623 ; AVX1-NEXT:    vandnpd %ymm8, %ymm4, %ymm4
2624 ; AVX1-NEXT:    vinsertf128 $1, %xmm7, %ymm2, %ymm7
2625 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm8 = [9223372036854775807,9223372036854775807,9223372036854775807,9223372036854775807]
2626 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm10 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
2627 ; AVX1-NEXT:    vblendvpd %ymm7, %ymm8, %ymm10, %ymm7
2628 ; AVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm0, %ymm0
2629 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm7, %ymm0, %ymm0
2630 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
2631 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm12, %xmm7
2632 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm7
2633 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2634 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm12, %xmm6
2635 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
2636 ; AVX1-NEXT:    vpcmpeqq %xmm7, %xmm6, %xmm9
2637 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm12, %xmm7
2638 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm11
2639 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm12, %xmm7
2640 ; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm7
2641 ; AVX1-NEXT:    vpcmpeqq %xmm11, %xmm7, %xmm11
2642 ; AVX1-NEXT:    vinsertf128 $1, %xmm9, %ymm11, %ymm9
2643 ; AVX1-NEXT:    vpaddq %xmm4, %xmm2, %xmm11
2644 ; AVX1-NEXT:    vpcmpgtq %xmm11, %xmm12, %xmm4
2645 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm2
2646 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm6, %xmm2
2647 ; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm1
2648 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm12, %xmm3
2649 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
2650 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm7, %xmm5
2651 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm5, %ymm2
2652 ; AVX1-NEXT:    vandnpd %ymm9, %ymm2, %ymm2
2653 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm3
2654 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm8, %ymm10, %ymm3
2655 ; AVX1-NEXT:    vinsertf128 $1, %xmm11, %ymm1, %ymm1
2656 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm3, %ymm1, %ymm1
2657 ; AVX1-NEXT:    retq
2659 ; AVX2-LABEL: v8i64:
2660 ; AVX2:       # %bb.0:
2661 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2662 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm5
2663 ; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
2664 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
2665 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm7
2666 ; AVX2-NEXT:    vpxor %ymm6, %ymm7, %ymm7
2667 ; AVX2-NEXT:    vpcmpeqq %ymm5, %ymm7, %ymm5
2668 ; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm0
2669 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm2
2670 ; AVX2-NEXT:    vpxor %ymm6, %ymm2, %ymm8
2671 ; AVX2-NEXT:    vpcmpeqq %ymm8, %ymm7, %ymm7
2672 ; AVX2-NEXT:    vpandn %ymm5, %ymm7, %ymm5
2673 ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm7 = [9223372036854775807,9223372036854775807,9223372036854775807,9223372036854775807]
2674 ; AVX2-NEXT:    vbroadcastsd {{.*#+}} ymm8 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
2675 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm7, %ymm8, %ymm2
2676 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
2677 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm4, %ymm2
2678 ; AVX2-NEXT:    vpxor %ymm6, %ymm2, %ymm2
2679 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm5
2680 ; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
2681 ; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm5, %ymm2
2682 ; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm1
2683 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm3
2684 ; AVX2-NEXT:    vpxor %ymm6, %ymm3, %ymm4
2685 ; AVX2-NEXT:    vpcmpeqq %ymm4, %ymm5, %ymm4
2686 ; AVX2-NEXT:    vpandn %ymm2, %ymm4, %ymm2
2687 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm7, %ymm8, %ymm3
2688 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm3, %ymm1, %ymm1
2689 ; AVX2-NEXT:    retq
2691 ; AVX512-LABEL: v8i64:
2692 ; AVX512:       # %bb.0:
2693 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2694 ; AVX512-NEXT:    vpcmpnltq %zmm2, %zmm1, %k0
2695 ; AVX512-NEXT:    vpcmpnltq %zmm2, %zmm0, %k1
2696 ; AVX512-NEXT:    kxorw %k0, %k1, %k0
2697 ; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
2698 ; AVX512-NEXT:    vpcmpnltq %zmm2, %zmm0, %k2
2699 ; AVX512-NEXT:    kxorw %k2, %k1, %k1
2700 ; AVX512-NEXT:    kandnw %k1, %k0, %k1
2701 ; AVX512-NEXT:    vpcmpgtq %zmm0, %zmm2, %k2
2702 ; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
2703 ; AVX512-NEXT:    vpbroadcastq {{.*}}(%rip), %zmm1 {%k2}
2704 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0 {%k1}
2705 ; AVX512-NEXT:    retq
2706   %z = call <8 x i64> @llvm.sadd.sat.v8i64(<8 x i64> %x, <8 x i64> %y)
2707   ret <8 x i64> %z
2710 define <2 x i128> @v2i128(<2 x i128> %x, <2 x i128> %y) nounwind {
2711 ; SSE-LABEL: v2i128:
2712 ; SSE:       # %bb.0:
2713 ; SSE-NEXT:    pushq %r15
2714 ; SSE-NEXT:    pushq %r14
2715 ; SSE-NEXT:    pushq %r13
2716 ; SSE-NEXT:    pushq %r12
2717 ; SSE-NEXT:    pushq %rbx
2718 ; SSE-NEXT:    movq %rdi, %rax
2719 ; SSE-NEXT:    movq {{[0-9]+}}(%rsp), %r11
2720 ; SSE-NEXT:    movq {{[0-9]+}}(%rsp), %r14
2721 ; SSE-NEXT:    addq {{[0-9]+}}(%rsp), %rcx
2722 ; SSE-NEXT:    movq %r8, %r13
2723 ; SSE-NEXT:    adcq %r14, %r13
2724 ; SSE-NEXT:    movq %r13, %r10
2725 ; SSE-NEXT:    sarq $63, %r10
2726 ; SSE-NEXT:    xorl %edi, %edi
2727 ; SSE-NEXT:    testq %r13, %r13
2728 ; SSE-NEXT:    setns %dil
2729 ; SSE-NEXT:    movabsq $9223372036854775807, %r12 # imm = 0x7FFFFFFFFFFFFFFF
2730 ; SSE-NEXT:    leaq (%rdi,%r12), %r15
2731 ; SSE-NEXT:    testq %r8, %r8
2732 ; SSE-NEXT:    setns %r8b
2733 ; SSE-NEXT:    cmpb %dil, %r8b
2734 ; SSE-NEXT:    setne %dil
2735 ; SSE-NEXT:    testq %r14, %r14
2736 ; SSE-NEXT:    setns %bl
2737 ; SSE-NEXT:    cmpb %bl, %r8b
2738 ; SSE-NEXT:    sete %bl
2739 ; SSE-NEXT:    testb %dil, %bl
2740 ; SSE-NEXT:    cmoveq %r13, %r15
2741 ; SSE-NEXT:    cmoveq %rcx, %r10
2742 ; SSE-NEXT:    addq %r9, %rsi
2743 ; SSE-NEXT:    movq %rdx, %rdi
2744 ; SSE-NEXT:    adcq %r11, %rdi
2745 ; SSE-NEXT:    setns %bl
2746 ; SSE-NEXT:    movzbl %bl, %ebx
2747 ; SSE-NEXT:    addq %rbx, %r12
2748 ; SSE-NEXT:    movq %rdi, %rcx
2749 ; SSE-NEXT:    sarq $63, %rcx
2750 ; SSE-NEXT:    testq %r11, %r11
2751 ; SSE-NEXT:    setns %r8b
2752 ; SSE-NEXT:    testq %rdx, %rdx
2753 ; SSE-NEXT:    setns %dl
2754 ; SSE-NEXT:    cmpb %r8b, %dl
2755 ; SSE-NEXT:    sete %r8b
2756 ; SSE-NEXT:    cmpb %bl, %dl
2757 ; SSE-NEXT:    setne %dl
2758 ; SSE-NEXT:    testb %dl, %r8b
2759 ; SSE-NEXT:    cmoveq %rsi, %rcx
2760 ; SSE-NEXT:    cmoveq %rdi, %r12
2761 ; SSE-NEXT:    movq %r15, 24(%rax)
2762 ; SSE-NEXT:    movq %r10, 16(%rax)
2763 ; SSE-NEXT:    movq %r12, 8(%rax)
2764 ; SSE-NEXT:    movq %rcx, (%rax)
2765 ; SSE-NEXT:    popq %rbx
2766 ; SSE-NEXT:    popq %r12
2767 ; SSE-NEXT:    popq %r13
2768 ; SSE-NEXT:    popq %r14
2769 ; SSE-NEXT:    popq %r15
2770 ; SSE-NEXT:    retq
2772 ; AVX-LABEL: v2i128:
2773 ; AVX:       # %bb.0:
2774 ; AVX-NEXT:    pushq %r15
2775 ; AVX-NEXT:    pushq %r14
2776 ; AVX-NEXT:    pushq %r13
2777 ; AVX-NEXT:    pushq %r12
2778 ; AVX-NEXT:    pushq %rbx
2779 ; AVX-NEXT:    movq %rdi, %rax
2780 ; AVX-NEXT:    movq {{[0-9]+}}(%rsp), %r11
2781 ; AVX-NEXT:    movq {{[0-9]+}}(%rsp), %r14
2782 ; AVX-NEXT:    addq {{[0-9]+}}(%rsp), %rcx
2783 ; AVX-NEXT:    movq %r8, %r13
2784 ; AVX-NEXT:    adcq %r14, %r13
2785 ; AVX-NEXT:    movq %r13, %r10
2786 ; AVX-NEXT:    sarq $63, %r10
2787 ; AVX-NEXT:    xorl %edi, %edi
2788 ; AVX-NEXT:    testq %r13, %r13
2789 ; AVX-NEXT:    setns %dil
2790 ; AVX-NEXT:    movabsq $9223372036854775807, %r12 # imm = 0x7FFFFFFFFFFFFFFF
2791 ; AVX-NEXT:    leaq (%rdi,%r12), %r15
2792 ; AVX-NEXT:    testq %r8, %r8
2793 ; AVX-NEXT:    setns %r8b
2794 ; AVX-NEXT:    cmpb %dil, %r8b
2795 ; AVX-NEXT:    setne %dil
2796 ; AVX-NEXT:    testq %r14, %r14
2797 ; AVX-NEXT:    setns %bl
2798 ; AVX-NEXT:    cmpb %bl, %r8b
2799 ; AVX-NEXT:    sete %bl
2800 ; AVX-NEXT:    testb %dil, %bl
2801 ; AVX-NEXT:    cmoveq %r13, %r15
2802 ; AVX-NEXT:    cmoveq %rcx, %r10
2803 ; AVX-NEXT:    addq %r9, %rsi
2804 ; AVX-NEXT:    movq %rdx, %rdi
2805 ; AVX-NEXT:    adcq %r11, %rdi
2806 ; AVX-NEXT:    setns %bl
2807 ; AVX-NEXT:    movzbl %bl, %ebx
2808 ; AVX-NEXT:    addq %rbx, %r12
2809 ; AVX-NEXT:    movq %rdi, %rcx
2810 ; AVX-NEXT:    sarq $63, %rcx
2811 ; AVX-NEXT:    testq %r11, %r11
2812 ; AVX-NEXT:    setns %r8b
2813 ; AVX-NEXT:    testq %rdx, %rdx
2814 ; AVX-NEXT:    setns %dl
2815 ; AVX-NEXT:    cmpb %r8b, %dl
2816 ; AVX-NEXT:    sete %r8b
2817 ; AVX-NEXT:    cmpb %bl, %dl
2818 ; AVX-NEXT:    setne %dl
2819 ; AVX-NEXT:    testb %dl, %r8b
2820 ; AVX-NEXT:    cmoveq %rsi, %rcx
2821 ; AVX-NEXT:    cmoveq %rdi, %r12
2822 ; AVX-NEXT:    movq %r15, 24(%rax)
2823 ; AVX-NEXT:    movq %r10, 16(%rax)
2824 ; AVX-NEXT:    movq %r12, 8(%rax)
2825 ; AVX-NEXT:    movq %rcx, (%rax)
2826 ; AVX-NEXT:    popq %rbx
2827 ; AVX-NEXT:    popq %r12
2828 ; AVX-NEXT:    popq %r13
2829 ; AVX-NEXT:    popq %r14
2830 ; AVX-NEXT:    popq %r15
2831 ; AVX-NEXT:    retq
2832   %z = call <2 x i128> @llvm.sadd.sat.v2i128(<2 x i128> %x, <2 x i128> %y)
2833   ret <2 x i128> %z