1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512vl --show-mc-encoding | FileCheck %s --check-prefixes=AVX512,AVX512F
8 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512vl,+avx512bw --show-mc-encoding | FileCheck %s --check-prefixes=AVX512,AVX512BW
10 define <4 x i32> @test_abs_gt_v4i32(<4 x i32> %a) nounwind {
11 ; SSE2-LABEL: test_abs_gt_v4i32:
13 ; SSE2-NEXT: movdqa %xmm0, %xmm1
14 ; SSE2-NEXT: psrad $31, %xmm1
15 ; SSE2-NEXT: pxor %xmm1, %xmm0
16 ; SSE2-NEXT: psubd %xmm1, %xmm0
19 ; SSSE3-LABEL: test_abs_gt_v4i32:
21 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
24 ; SSE41-LABEL: test_abs_gt_v4i32:
26 ; SSE41-NEXT: pabsd %xmm0, %xmm0
29 ; AVX1-LABEL: test_abs_gt_v4i32:
31 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
34 ; AVX2-LABEL: test_abs_gt_v4i32:
36 ; AVX2-NEXT: vpabsd %xmm0, %xmm0
39 ; AVX512-LABEL: test_abs_gt_v4i32:
41 ; AVX512-NEXT: vpabsd %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x1e,0xc0]
42 ; AVX512-NEXT: retq # encoding: [0xc3]
43 %tmp1neg = sub <4 x i32> zeroinitializer, %a
44 %b = icmp sgt <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
45 %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
49 define <4 x i32> @test_abs_ge_v4i32(<4 x i32> %a) nounwind {
50 ; SSE2-LABEL: test_abs_ge_v4i32:
52 ; SSE2-NEXT: movdqa %xmm0, %xmm1
53 ; SSE2-NEXT: psrad $31, %xmm1
54 ; SSE2-NEXT: pxor %xmm1, %xmm0
55 ; SSE2-NEXT: psubd %xmm1, %xmm0
58 ; SSSE3-LABEL: test_abs_ge_v4i32:
60 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
63 ; SSE41-LABEL: test_abs_ge_v4i32:
65 ; SSE41-NEXT: pabsd %xmm0, %xmm0
68 ; AVX1-LABEL: test_abs_ge_v4i32:
70 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
73 ; AVX2-LABEL: test_abs_ge_v4i32:
75 ; AVX2-NEXT: vpabsd %xmm0, %xmm0
78 ; AVX512-LABEL: test_abs_ge_v4i32:
80 ; AVX512-NEXT: vpabsd %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x1e,0xc0]
81 ; AVX512-NEXT: retq # encoding: [0xc3]
82 %tmp1neg = sub <4 x i32> zeroinitializer, %a
83 %b = icmp sge <4 x i32> %a, zeroinitializer
84 %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
88 define <8 x i16> @test_abs_gt_v8i16(<8 x i16> %a) nounwind {
89 ; SSE2-LABEL: test_abs_gt_v8i16:
91 ; SSE2-NEXT: pxor %xmm1, %xmm1
92 ; SSE2-NEXT: psubw %xmm0, %xmm1
93 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0
96 ; SSSE3-LABEL: test_abs_gt_v8i16:
98 ; SSSE3-NEXT: pabsw %xmm0, %xmm0
101 ; SSE41-LABEL: test_abs_gt_v8i16:
103 ; SSE41-NEXT: pabsw %xmm0, %xmm0
106 ; AVX1-LABEL: test_abs_gt_v8i16:
108 ; AVX1-NEXT: vpabsw %xmm0, %xmm0
111 ; AVX2-LABEL: test_abs_gt_v8i16:
113 ; AVX2-NEXT: vpabsw %xmm0, %xmm0
116 ; AVX512F-LABEL: test_abs_gt_v8i16:
118 ; AVX512F-NEXT: vpabsw %xmm0, %xmm0 # encoding: [0xc4,0xe2,0x79,0x1d,0xc0]
119 ; AVX512F-NEXT: retq # encoding: [0xc3]
121 ; AVX512BW-LABEL: test_abs_gt_v8i16:
123 ; AVX512BW-NEXT: vpabsw %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x1d,0xc0]
124 ; AVX512BW-NEXT: retq # encoding: [0xc3]
125 %tmp1neg = sub <8 x i16> zeroinitializer, %a
126 %b = icmp sgt <8 x i16> %a, zeroinitializer
127 %abs = select <8 x i1> %b, <8 x i16> %a, <8 x i16> %tmp1neg
131 define <16 x i8> @test_abs_lt_v16i8(<16 x i8> %a) nounwind {
132 ; SSE2-LABEL: test_abs_lt_v16i8:
134 ; SSE2-NEXT: pxor %xmm1, %xmm1
135 ; SSE2-NEXT: psubb %xmm0, %xmm1
136 ; SSE2-NEXT: pminub %xmm1, %xmm0
139 ; SSSE3-LABEL: test_abs_lt_v16i8:
141 ; SSSE3-NEXT: pabsb %xmm0, %xmm0
144 ; SSE41-LABEL: test_abs_lt_v16i8:
146 ; SSE41-NEXT: pabsb %xmm0, %xmm0
149 ; AVX1-LABEL: test_abs_lt_v16i8:
151 ; AVX1-NEXT: vpabsb %xmm0, %xmm0
154 ; AVX2-LABEL: test_abs_lt_v16i8:
156 ; AVX2-NEXT: vpabsb %xmm0, %xmm0
159 ; AVX512F-LABEL: test_abs_lt_v16i8:
161 ; AVX512F-NEXT: vpabsb %xmm0, %xmm0 # encoding: [0xc4,0xe2,0x79,0x1c,0xc0]
162 ; AVX512F-NEXT: retq # encoding: [0xc3]
164 ; AVX512BW-LABEL: test_abs_lt_v16i8:
166 ; AVX512BW-NEXT: vpabsb %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x1c,0xc0]
167 ; AVX512BW-NEXT: retq # encoding: [0xc3]
168 %tmp1neg = sub <16 x i8> zeroinitializer, %a
169 %b = icmp slt <16 x i8> %a, zeroinitializer
170 %abs = select <16 x i1> %b, <16 x i8> %tmp1neg, <16 x i8> %a
174 define <4 x i32> @test_abs_le_v4i32(<4 x i32> %a) nounwind {
175 ; SSE2-LABEL: test_abs_le_v4i32:
177 ; SSE2-NEXT: movdqa %xmm0, %xmm1
178 ; SSE2-NEXT: psrad $31, %xmm1
179 ; SSE2-NEXT: pxor %xmm1, %xmm0
180 ; SSE2-NEXT: psubd %xmm1, %xmm0
183 ; SSSE3-LABEL: test_abs_le_v4i32:
185 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
188 ; SSE41-LABEL: test_abs_le_v4i32:
190 ; SSE41-NEXT: pabsd %xmm0, %xmm0
193 ; AVX1-LABEL: test_abs_le_v4i32:
195 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
198 ; AVX2-LABEL: test_abs_le_v4i32:
200 ; AVX2-NEXT: vpabsd %xmm0, %xmm0
203 ; AVX512-LABEL: test_abs_le_v4i32:
205 ; AVX512-NEXT: vpabsd %xmm0, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0x1e,0xc0]
206 ; AVX512-NEXT: retq # encoding: [0xc3]
207 %tmp1neg = sub <4 x i32> zeroinitializer, %a
208 %b = icmp sle <4 x i32> %a, zeroinitializer
209 %abs = select <4 x i1> %b, <4 x i32> %tmp1neg, <4 x i32> %a
213 define <8 x i32> @test_abs_gt_v8i32(<8 x i32> %a) nounwind {
214 ; SSE2-LABEL: test_abs_gt_v8i32:
216 ; SSE2-NEXT: movdqa %xmm0, %xmm2
217 ; SSE2-NEXT: psrad $31, %xmm2
218 ; SSE2-NEXT: pxor %xmm2, %xmm0
219 ; SSE2-NEXT: psubd %xmm2, %xmm0
220 ; SSE2-NEXT: movdqa %xmm1, %xmm2
221 ; SSE2-NEXT: psrad $31, %xmm2
222 ; SSE2-NEXT: pxor %xmm2, %xmm1
223 ; SSE2-NEXT: psubd %xmm2, %xmm1
226 ; SSSE3-LABEL: test_abs_gt_v8i32:
228 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
229 ; SSSE3-NEXT: pabsd %xmm1, %xmm1
232 ; SSE41-LABEL: test_abs_gt_v8i32:
234 ; SSE41-NEXT: pabsd %xmm0, %xmm0
235 ; SSE41-NEXT: pabsd %xmm1, %xmm1
238 ; AVX1-LABEL: test_abs_gt_v8i32:
240 ; AVX1-NEXT: vpabsd %xmm0, %xmm1
241 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
242 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
243 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
246 ; AVX2-LABEL: test_abs_gt_v8i32:
248 ; AVX2-NEXT: vpabsd %ymm0, %ymm0
251 ; AVX512-LABEL: test_abs_gt_v8i32:
253 ; AVX512-NEXT: vpabsd %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0x1e,0xc0]
254 ; AVX512-NEXT: retq # encoding: [0xc3]
255 %tmp1neg = sub <8 x i32> zeroinitializer, %a
256 %b = icmp sgt <8 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
257 %abs = select <8 x i1> %b, <8 x i32> %a, <8 x i32> %tmp1neg
261 define <8 x i32> @test_abs_ge_v8i32(<8 x i32> %a) nounwind {
262 ; SSE2-LABEL: test_abs_ge_v8i32:
264 ; SSE2-NEXT: movdqa %xmm0, %xmm2
265 ; SSE2-NEXT: psrad $31, %xmm2
266 ; SSE2-NEXT: pxor %xmm2, %xmm0
267 ; SSE2-NEXT: psubd %xmm2, %xmm0
268 ; SSE2-NEXT: movdqa %xmm1, %xmm2
269 ; SSE2-NEXT: psrad $31, %xmm2
270 ; SSE2-NEXT: pxor %xmm2, %xmm1
271 ; SSE2-NEXT: psubd %xmm2, %xmm1
274 ; SSSE3-LABEL: test_abs_ge_v8i32:
276 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
277 ; SSSE3-NEXT: pabsd %xmm1, %xmm1
280 ; SSE41-LABEL: test_abs_ge_v8i32:
282 ; SSE41-NEXT: pabsd %xmm0, %xmm0
283 ; SSE41-NEXT: pabsd %xmm1, %xmm1
286 ; AVX1-LABEL: test_abs_ge_v8i32:
288 ; AVX1-NEXT: vpabsd %xmm0, %xmm1
289 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
290 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
291 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
294 ; AVX2-LABEL: test_abs_ge_v8i32:
296 ; AVX2-NEXT: vpabsd %ymm0, %ymm0
299 ; AVX512-LABEL: test_abs_ge_v8i32:
301 ; AVX512-NEXT: vpabsd %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0x1e,0xc0]
302 ; AVX512-NEXT: retq # encoding: [0xc3]
303 %tmp1neg = sub <8 x i32> zeroinitializer, %a
304 %b = icmp sge <8 x i32> %a, zeroinitializer
305 %abs = select <8 x i1> %b, <8 x i32> %a, <8 x i32> %tmp1neg
309 define <16 x i16> @test_abs_gt_v16i16(<16 x i16> %a) nounwind {
310 ; SSE2-LABEL: test_abs_gt_v16i16:
312 ; SSE2-NEXT: pxor %xmm2, %xmm2
313 ; SSE2-NEXT: pxor %xmm3, %xmm3
314 ; SSE2-NEXT: psubw %xmm0, %xmm3
315 ; SSE2-NEXT: pmaxsw %xmm3, %xmm0
316 ; SSE2-NEXT: psubw %xmm1, %xmm2
317 ; SSE2-NEXT: pmaxsw %xmm2, %xmm1
320 ; SSSE3-LABEL: test_abs_gt_v16i16:
322 ; SSSE3-NEXT: pabsw %xmm0, %xmm0
323 ; SSSE3-NEXT: pabsw %xmm1, %xmm1
326 ; SSE41-LABEL: test_abs_gt_v16i16:
328 ; SSE41-NEXT: pabsw %xmm0, %xmm0
329 ; SSE41-NEXT: pabsw %xmm1, %xmm1
332 ; AVX1-LABEL: test_abs_gt_v16i16:
334 ; AVX1-NEXT: vpabsw %xmm0, %xmm1
335 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
336 ; AVX1-NEXT: vpabsw %xmm0, %xmm0
337 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
340 ; AVX2-LABEL: test_abs_gt_v16i16:
342 ; AVX2-NEXT: vpabsw %ymm0, %ymm0
345 ; AVX512F-LABEL: test_abs_gt_v16i16:
347 ; AVX512F-NEXT: vpabsw %ymm0, %ymm0 # encoding: [0xc4,0xe2,0x7d,0x1d,0xc0]
348 ; AVX512F-NEXT: retq # encoding: [0xc3]
350 ; AVX512BW-LABEL: test_abs_gt_v16i16:
352 ; AVX512BW-NEXT: vpabsw %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0x1d,0xc0]
353 ; AVX512BW-NEXT: retq # encoding: [0xc3]
354 %tmp1neg = sub <16 x i16> zeroinitializer, %a
355 %b = icmp sgt <16 x i16> %a, zeroinitializer
356 %abs = select <16 x i1> %b, <16 x i16> %a, <16 x i16> %tmp1neg
360 define <32 x i8> @test_abs_lt_v32i8(<32 x i8> %a) nounwind {
361 ; SSE2-LABEL: test_abs_lt_v32i8:
363 ; SSE2-NEXT: pxor %xmm2, %xmm2
364 ; SSE2-NEXT: pxor %xmm3, %xmm3
365 ; SSE2-NEXT: psubb %xmm0, %xmm3
366 ; SSE2-NEXT: pminub %xmm3, %xmm0
367 ; SSE2-NEXT: psubb %xmm1, %xmm2
368 ; SSE2-NEXT: pminub %xmm2, %xmm1
371 ; SSSE3-LABEL: test_abs_lt_v32i8:
373 ; SSSE3-NEXT: pabsb %xmm0, %xmm0
374 ; SSSE3-NEXT: pabsb %xmm1, %xmm1
377 ; SSE41-LABEL: test_abs_lt_v32i8:
379 ; SSE41-NEXT: pabsb %xmm0, %xmm0
380 ; SSE41-NEXT: pabsb %xmm1, %xmm1
383 ; AVX1-LABEL: test_abs_lt_v32i8:
385 ; AVX1-NEXT: vpabsb %xmm0, %xmm1
386 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
387 ; AVX1-NEXT: vpabsb %xmm0, %xmm0
388 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
391 ; AVX2-LABEL: test_abs_lt_v32i8:
393 ; AVX2-NEXT: vpabsb %ymm0, %ymm0
396 ; AVX512F-LABEL: test_abs_lt_v32i8:
398 ; AVX512F-NEXT: vpabsb %ymm0, %ymm0 # encoding: [0xc4,0xe2,0x7d,0x1c,0xc0]
399 ; AVX512F-NEXT: retq # encoding: [0xc3]
401 ; AVX512BW-LABEL: test_abs_lt_v32i8:
403 ; AVX512BW-NEXT: vpabsb %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0x1c,0xc0]
404 ; AVX512BW-NEXT: retq # encoding: [0xc3]
405 %tmp1neg = sub <32 x i8> zeroinitializer, %a
406 %b = icmp slt <32 x i8> %a, zeroinitializer
407 %abs = select <32 x i1> %b, <32 x i8> %tmp1neg, <32 x i8> %a
411 define <8 x i32> @test_abs_le_v8i32(<8 x i32> %a) nounwind {
412 ; SSE2-LABEL: test_abs_le_v8i32:
414 ; SSE2-NEXT: movdqa %xmm0, %xmm2
415 ; SSE2-NEXT: psrad $31, %xmm2
416 ; SSE2-NEXT: pxor %xmm2, %xmm0
417 ; SSE2-NEXT: psubd %xmm2, %xmm0
418 ; SSE2-NEXT: movdqa %xmm1, %xmm2
419 ; SSE2-NEXT: psrad $31, %xmm2
420 ; SSE2-NEXT: pxor %xmm2, %xmm1
421 ; SSE2-NEXT: psubd %xmm2, %xmm1
424 ; SSSE3-LABEL: test_abs_le_v8i32:
426 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
427 ; SSSE3-NEXT: pabsd %xmm1, %xmm1
430 ; SSE41-LABEL: test_abs_le_v8i32:
432 ; SSE41-NEXT: pabsd %xmm0, %xmm0
433 ; SSE41-NEXT: pabsd %xmm1, %xmm1
436 ; AVX1-LABEL: test_abs_le_v8i32:
438 ; AVX1-NEXT: vpabsd %xmm0, %xmm1
439 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
440 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
441 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
444 ; AVX2-LABEL: test_abs_le_v8i32:
446 ; AVX2-NEXT: vpabsd %ymm0, %ymm0
449 ; AVX512-LABEL: test_abs_le_v8i32:
451 ; AVX512-NEXT: vpabsd %ymm0, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7d,0x1e,0xc0]
452 ; AVX512-NEXT: retq # encoding: [0xc3]
453 %tmp1neg = sub <8 x i32> zeroinitializer, %a
454 %b = icmp sle <8 x i32> %a, zeroinitializer
455 %abs = select <8 x i1> %b, <8 x i32> %tmp1neg, <8 x i32> %a
459 define <16 x i32> @test_abs_le_16i32(<16 x i32> %a) nounwind {
460 ; SSE2-LABEL: test_abs_le_16i32:
462 ; SSE2-NEXT: movdqa %xmm0, %xmm4
463 ; SSE2-NEXT: psrad $31, %xmm4
464 ; SSE2-NEXT: pxor %xmm4, %xmm0
465 ; SSE2-NEXT: psubd %xmm4, %xmm0
466 ; SSE2-NEXT: movdqa %xmm1, %xmm4
467 ; SSE2-NEXT: psrad $31, %xmm4
468 ; SSE2-NEXT: pxor %xmm4, %xmm1
469 ; SSE2-NEXT: psubd %xmm4, %xmm1
470 ; SSE2-NEXT: movdqa %xmm2, %xmm4
471 ; SSE2-NEXT: psrad $31, %xmm4
472 ; SSE2-NEXT: pxor %xmm4, %xmm2
473 ; SSE2-NEXT: psubd %xmm4, %xmm2
474 ; SSE2-NEXT: movdqa %xmm3, %xmm4
475 ; SSE2-NEXT: psrad $31, %xmm4
476 ; SSE2-NEXT: pxor %xmm4, %xmm3
477 ; SSE2-NEXT: psubd %xmm4, %xmm3
480 ; SSSE3-LABEL: test_abs_le_16i32:
482 ; SSSE3-NEXT: pabsd %xmm0, %xmm0
483 ; SSSE3-NEXT: pabsd %xmm1, %xmm1
484 ; SSSE3-NEXT: pabsd %xmm2, %xmm2
485 ; SSSE3-NEXT: pabsd %xmm3, %xmm3
488 ; SSE41-LABEL: test_abs_le_16i32:
490 ; SSE41-NEXT: pabsd %xmm0, %xmm0
491 ; SSE41-NEXT: pabsd %xmm1, %xmm1
492 ; SSE41-NEXT: pabsd %xmm2, %xmm2
493 ; SSE41-NEXT: pabsd %xmm3, %xmm3
496 ; AVX1-LABEL: test_abs_le_16i32:
498 ; AVX1-NEXT: vpabsd %xmm0, %xmm2
499 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
500 ; AVX1-NEXT: vpabsd %xmm0, %xmm0
501 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
502 ; AVX1-NEXT: vpabsd %xmm1, %xmm2
503 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
504 ; AVX1-NEXT: vpabsd %xmm1, %xmm1
505 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
508 ; AVX2-LABEL: test_abs_le_16i32:
510 ; AVX2-NEXT: vpabsd %ymm0, %ymm0
511 ; AVX2-NEXT: vpabsd %ymm1, %ymm1
514 ; AVX512-LABEL: test_abs_le_16i32:
516 ; AVX512-NEXT: vpabsd %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x1e,0xc0]
517 ; AVX512-NEXT: retq # encoding: [0xc3]
518 %tmp1neg = sub <16 x i32> zeroinitializer, %a
519 %b = icmp sle <16 x i32> %a, zeroinitializer
520 %abs = select <16 x i1> %b, <16 x i32> %tmp1neg, <16 x i32> %a
524 define <2 x i64> @test_abs_ge_v2i64(<2 x i64> %a) nounwind {
525 ; SSE2-LABEL: test_abs_ge_v2i64:
527 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
528 ; SSE2-NEXT: psrad $31, %xmm1
529 ; SSE2-NEXT: pxor %xmm1, %xmm0
530 ; SSE2-NEXT: psubq %xmm1, %xmm0
533 ; SSSE3-LABEL: test_abs_ge_v2i64:
535 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
536 ; SSSE3-NEXT: psrad $31, %xmm1
537 ; SSSE3-NEXT: pxor %xmm1, %xmm0
538 ; SSSE3-NEXT: psubq %xmm1, %xmm0
541 ; SSE41-LABEL: test_abs_ge_v2i64:
543 ; SSE41-NEXT: pxor %xmm1, %xmm1
544 ; SSE41-NEXT: psubq %xmm0, %xmm1
545 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm0
548 ; AVX1-LABEL: test_abs_ge_v2i64:
550 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
551 ; AVX1-NEXT: vpsubq %xmm0, %xmm1, %xmm1
552 ; AVX1-NEXT: vblendvpd %xmm0, %xmm1, %xmm0, %xmm0
555 ; AVX2-LABEL: test_abs_ge_v2i64:
557 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
558 ; AVX2-NEXT: vpsubq %xmm0, %xmm1, %xmm1
559 ; AVX2-NEXT: vblendvpd %xmm0, %xmm1, %xmm0, %xmm0
562 ; AVX512-LABEL: test_abs_ge_v2i64:
564 ; AVX512-NEXT: vpabsq %xmm0, %xmm0 # encoding: [0x62,0xf2,0xfd,0x08,0x1f,0xc0]
565 ; AVX512-NEXT: retq # encoding: [0xc3]
566 %tmp1neg = sub <2 x i64> zeroinitializer, %a
567 %b = icmp sge <2 x i64> %a, zeroinitializer
568 %abs = select <2 x i1> %b, <2 x i64> %a, <2 x i64> %tmp1neg
572 define <4 x i64> @test_abs_gt_v4i64(<4 x i64> %a) nounwind {
573 ; SSE2-LABEL: test_abs_gt_v4i64:
575 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
576 ; SSE2-NEXT: psrad $31, %xmm2
577 ; SSE2-NEXT: pxor %xmm2, %xmm0
578 ; SSE2-NEXT: psubq %xmm2, %xmm0
579 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
580 ; SSE2-NEXT: psrad $31, %xmm2
581 ; SSE2-NEXT: pxor %xmm2, %xmm1
582 ; SSE2-NEXT: psubq %xmm2, %xmm1
585 ; SSSE3-LABEL: test_abs_gt_v4i64:
587 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
588 ; SSSE3-NEXT: psrad $31, %xmm2
589 ; SSSE3-NEXT: pxor %xmm2, %xmm0
590 ; SSSE3-NEXT: psubq %xmm2, %xmm0
591 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
592 ; SSSE3-NEXT: psrad $31, %xmm2
593 ; SSSE3-NEXT: pxor %xmm2, %xmm1
594 ; SSSE3-NEXT: psubq %xmm2, %xmm1
597 ; SSE41-LABEL: test_abs_gt_v4i64:
599 ; SSE41-NEXT: movdqa %xmm0, %xmm2
600 ; SSE41-NEXT: pxor %xmm3, %xmm3
601 ; SSE41-NEXT: pxor %xmm4, %xmm4
602 ; SSE41-NEXT: psubq %xmm0, %xmm4
603 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2
604 ; SSE41-NEXT: psubq %xmm1, %xmm3
605 ; SSE41-NEXT: movdqa %xmm1, %xmm0
606 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm1
607 ; SSE41-NEXT: movapd %xmm2, %xmm0
610 ; AVX1-LABEL: test_abs_gt_v4i64:
612 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
613 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
614 ; AVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm1
615 ; AVX1-NEXT: vpsubq %xmm0, %xmm2, %xmm2
616 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
617 ; AVX1-NEXT: vblendvpd %ymm0, %ymm1, %ymm0, %ymm0
620 ; AVX2-LABEL: test_abs_gt_v4i64:
622 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
623 ; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm1
624 ; AVX2-NEXT: vblendvpd %ymm0, %ymm1, %ymm0, %ymm0
627 ; AVX512-LABEL: test_abs_gt_v4i64:
629 ; AVX512-NEXT: vpabsq %ymm0, %ymm0 # encoding: [0x62,0xf2,0xfd,0x28,0x1f,0xc0]
630 ; AVX512-NEXT: retq # encoding: [0xc3]
631 %tmp1neg = sub <4 x i64> zeroinitializer, %a
632 %b = icmp sgt <4 x i64> %a, <i64 -1, i64 -1, i64 -1, i64 -1>
633 %abs = select <4 x i1> %b, <4 x i64> %a, <4 x i64> %tmp1neg
637 define <8 x i64> @test_abs_le_v8i64(<8 x i64> %a) nounwind {
638 ; SSE2-LABEL: test_abs_le_v8i64:
640 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
641 ; SSE2-NEXT: psrad $31, %xmm4
642 ; SSE2-NEXT: pxor %xmm4, %xmm0
643 ; SSE2-NEXT: psubq %xmm4, %xmm0
644 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
645 ; SSE2-NEXT: psrad $31, %xmm4
646 ; SSE2-NEXT: pxor %xmm4, %xmm1
647 ; SSE2-NEXT: psubq %xmm4, %xmm1
648 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
649 ; SSE2-NEXT: psrad $31, %xmm4
650 ; SSE2-NEXT: pxor %xmm4, %xmm2
651 ; SSE2-NEXT: psubq %xmm4, %xmm2
652 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
653 ; SSE2-NEXT: psrad $31, %xmm4
654 ; SSE2-NEXT: pxor %xmm4, %xmm3
655 ; SSE2-NEXT: psubq %xmm4, %xmm3
658 ; SSSE3-LABEL: test_abs_le_v8i64:
660 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
661 ; SSSE3-NEXT: psrad $31, %xmm4
662 ; SSSE3-NEXT: pxor %xmm4, %xmm0
663 ; SSSE3-NEXT: psubq %xmm4, %xmm0
664 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
665 ; SSSE3-NEXT: psrad $31, %xmm4
666 ; SSSE3-NEXT: pxor %xmm4, %xmm1
667 ; SSSE3-NEXT: psubq %xmm4, %xmm1
668 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
669 ; SSSE3-NEXT: psrad $31, %xmm4
670 ; SSSE3-NEXT: pxor %xmm4, %xmm2
671 ; SSSE3-NEXT: psubq %xmm4, %xmm2
672 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
673 ; SSSE3-NEXT: psrad $31, %xmm4
674 ; SSSE3-NEXT: pxor %xmm4, %xmm3
675 ; SSSE3-NEXT: psubq %xmm4, %xmm3
678 ; SSE41-LABEL: test_abs_le_v8i64:
680 ; SSE41-NEXT: movdqa %xmm0, %xmm4
681 ; SSE41-NEXT: pxor %xmm5, %xmm5
682 ; SSE41-NEXT: pxor %xmm6, %xmm6
683 ; SSE41-NEXT: psubq %xmm0, %xmm6
684 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm4
685 ; SSE41-NEXT: pxor %xmm6, %xmm6
686 ; SSE41-NEXT: psubq %xmm1, %xmm6
687 ; SSE41-NEXT: movdqa %xmm1, %xmm0
688 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm1
689 ; SSE41-NEXT: pxor %xmm6, %xmm6
690 ; SSE41-NEXT: psubq %xmm2, %xmm6
691 ; SSE41-NEXT: movdqa %xmm2, %xmm0
692 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm2
693 ; SSE41-NEXT: psubq %xmm3, %xmm5
694 ; SSE41-NEXT: movdqa %xmm3, %xmm0
695 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm3
696 ; SSE41-NEXT: movapd %xmm4, %xmm0
699 ; AVX1-LABEL: test_abs_le_v8i64:
701 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
702 ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
703 ; AVX1-NEXT: vpsubq %xmm2, %xmm3, %xmm2
704 ; AVX1-NEXT: vpsubq %xmm0, %xmm3, %xmm4
705 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
706 ; AVX1-NEXT: vblendvpd %ymm0, %ymm2, %ymm0, %ymm0
707 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
708 ; AVX1-NEXT: vpsubq %xmm2, %xmm3, %xmm2
709 ; AVX1-NEXT: vpsubq %xmm1, %xmm3, %xmm3
710 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
711 ; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm1, %ymm1
714 ; AVX2-LABEL: test_abs_le_v8i64:
716 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
717 ; AVX2-NEXT: vpsubq %ymm0, %ymm2, %ymm3
718 ; AVX2-NEXT: vblendvpd %ymm0, %ymm3, %ymm0, %ymm0
719 ; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm2
720 ; AVX2-NEXT: vblendvpd %ymm1, %ymm2, %ymm1, %ymm1
723 ; AVX512-LABEL: test_abs_le_v8i64:
725 ; AVX512-NEXT: vpabsq %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x1f,0xc0]
726 ; AVX512-NEXT: retq # encoding: [0xc3]
727 %tmp1neg = sub <8 x i64> zeroinitializer, %a
728 %b = icmp sle <8 x i64> %a, zeroinitializer
729 %abs = select <8 x i1> %b, <8 x i64> %tmp1neg, <8 x i64> %a
733 define <8 x i64> @test_abs_le_v8i64_fold(ptr %a.ptr) nounwind {
734 ; SSE2-LABEL: test_abs_le_v8i64_fold:
736 ; SSE2-NEXT: movdqu (%rdi), %xmm0
737 ; SSE2-NEXT: movdqu 16(%rdi), %xmm1
738 ; SSE2-NEXT: movdqu 32(%rdi), %xmm2
739 ; SSE2-NEXT: movdqu 48(%rdi), %xmm3
740 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
741 ; SSE2-NEXT: psrad $31, %xmm4
742 ; SSE2-NEXT: pxor %xmm4, %xmm0
743 ; SSE2-NEXT: psubq %xmm4, %xmm0
744 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
745 ; SSE2-NEXT: psrad $31, %xmm4
746 ; SSE2-NEXT: pxor %xmm4, %xmm1
747 ; SSE2-NEXT: psubq %xmm4, %xmm1
748 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
749 ; SSE2-NEXT: psrad $31, %xmm4
750 ; SSE2-NEXT: pxor %xmm4, %xmm2
751 ; SSE2-NEXT: psubq %xmm4, %xmm2
752 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
753 ; SSE2-NEXT: psrad $31, %xmm4
754 ; SSE2-NEXT: pxor %xmm4, %xmm3
755 ; SSE2-NEXT: psubq %xmm4, %xmm3
758 ; SSSE3-LABEL: test_abs_le_v8i64_fold:
760 ; SSSE3-NEXT: movdqu (%rdi), %xmm0
761 ; SSSE3-NEXT: movdqu 16(%rdi), %xmm1
762 ; SSSE3-NEXT: movdqu 32(%rdi), %xmm2
763 ; SSSE3-NEXT: movdqu 48(%rdi), %xmm3
764 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
765 ; SSSE3-NEXT: psrad $31, %xmm4
766 ; SSSE3-NEXT: pxor %xmm4, %xmm0
767 ; SSSE3-NEXT: psubq %xmm4, %xmm0
768 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
769 ; SSSE3-NEXT: psrad $31, %xmm4
770 ; SSSE3-NEXT: pxor %xmm4, %xmm1
771 ; SSSE3-NEXT: psubq %xmm4, %xmm1
772 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
773 ; SSSE3-NEXT: psrad $31, %xmm4
774 ; SSSE3-NEXT: pxor %xmm4, %xmm2
775 ; SSSE3-NEXT: psubq %xmm4, %xmm2
776 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
777 ; SSSE3-NEXT: psrad $31, %xmm4
778 ; SSSE3-NEXT: pxor %xmm4, %xmm3
779 ; SSSE3-NEXT: psubq %xmm4, %xmm3
782 ; SSE41-LABEL: test_abs_le_v8i64_fold:
784 ; SSE41-NEXT: movdqu (%rdi), %xmm1
785 ; SSE41-NEXT: movdqu 16(%rdi), %xmm2
786 ; SSE41-NEXT: movdqu 32(%rdi), %xmm3
787 ; SSE41-NEXT: movdqu 48(%rdi), %xmm4
788 ; SSE41-NEXT: pxor %xmm5, %xmm5
789 ; SSE41-NEXT: pxor %xmm6, %xmm6
790 ; SSE41-NEXT: psubq %xmm1, %xmm6
791 ; SSE41-NEXT: movdqa %xmm1, %xmm0
792 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm1
793 ; SSE41-NEXT: pxor %xmm6, %xmm6
794 ; SSE41-NEXT: psubq %xmm2, %xmm6
795 ; SSE41-NEXT: movdqa %xmm2, %xmm0
796 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm2
797 ; SSE41-NEXT: pxor %xmm6, %xmm6
798 ; SSE41-NEXT: psubq %xmm3, %xmm6
799 ; SSE41-NEXT: movdqa %xmm3, %xmm0
800 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm3
801 ; SSE41-NEXT: psubq %xmm4, %xmm5
802 ; SSE41-NEXT: movdqa %xmm4, %xmm0
803 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm4
804 ; SSE41-NEXT: movapd %xmm1, %xmm0
805 ; SSE41-NEXT: movapd %xmm2, %xmm1
806 ; SSE41-NEXT: movapd %xmm3, %xmm2
807 ; SSE41-NEXT: movapd %xmm4, %xmm3
810 ; AVX1-LABEL: test_abs_le_v8i64_fold:
812 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
813 ; AVX1-NEXT: vmovdqu 32(%rdi), %ymm1
814 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
815 ; AVX1-NEXT: vpsubq 16(%rdi), %xmm2, %xmm3
816 ; AVX1-NEXT: vpsubq %xmm0, %xmm2, %xmm4
817 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
818 ; AVX1-NEXT: vblendvpd %ymm0, %ymm3, %ymm0, %ymm0
819 ; AVX1-NEXT: vpsubq 48(%rdi), %xmm2, %xmm3
820 ; AVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm2
821 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
822 ; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm1, %ymm1
825 ; AVX2-LABEL: test_abs_le_v8i64_fold:
827 ; AVX2-NEXT: vmovdqu (%rdi), %ymm0
828 ; AVX2-NEXT: vmovdqu 32(%rdi), %ymm1
829 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
830 ; AVX2-NEXT: vpsubq %ymm0, %ymm2, %ymm3
831 ; AVX2-NEXT: vblendvpd %ymm0, %ymm3, %ymm0, %ymm0
832 ; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm2
833 ; AVX2-NEXT: vblendvpd %ymm1, %ymm2, %ymm1, %ymm1
836 ; AVX512-LABEL: test_abs_le_v8i64_fold:
838 ; AVX512-NEXT: vpabsq (%rdi), %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x1f,0x07]
839 ; AVX512-NEXT: retq # encoding: [0xc3]
840 %a = load <8 x i64>, ptr %a.ptr, align 8
841 %tmp1neg = sub <8 x i64> zeroinitializer, %a
842 %b = icmp sle <8 x i64> %a, zeroinitializer
843 %abs = select <8 x i1> %b, <8 x i64> %tmp1neg, <8 x i64> %a
847 define <64 x i8> @test_abs_lt_v64i8(<64 x i8> %a) nounwind {
848 ; SSE2-LABEL: test_abs_lt_v64i8:
850 ; SSE2-NEXT: pxor %xmm4, %xmm4
851 ; SSE2-NEXT: pxor %xmm5, %xmm5
852 ; SSE2-NEXT: psubb %xmm0, %xmm5
853 ; SSE2-NEXT: pminub %xmm5, %xmm0
854 ; SSE2-NEXT: pxor %xmm5, %xmm5
855 ; SSE2-NEXT: psubb %xmm1, %xmm5
856 ; SSE2-NEXT: pminub %xmm5, %xmm1
857 ; SSE2-NEXT: pxor %xmm5, %xmm5
858 ; SSE2-NEXT: psubb %xmm2, %xmm5
859 ; SSE2-NEXT: pminub %xmm5, %xmm2
860 ; SSE2-NEXT: psubb %xmm3, %xmm4
861 ; SSE2-NEXT: pminub %xmm4, %xmm3
864 ; SSSE3-LABEL: test_abs_lt_v64i8:
866 ; SSSE3-NEXT: pabsb %xmm0, %xmm0
867 ; SSSE3-NEXT: pabsb %xmm1, %xmm1
868 ; SSSE3-NEXT: pabsb %xmm2, %xmm2
869 ; SSSE3-NEXT: pabsb %xmm3, %xmm3
872 ; SSE41-LABEL: test_abs_lt_v64i8:
874 ; SSE41-NEXT: pabsb %xmm0, %xmm0
875 ; SSE41-NEXT: pabsb %xmm1, %xmm1
876 ; SSE41-NEXT: pabsb %xmm2, %xmm2
877 ; SSE41-NEXT: pabsb %xmm3, %xmm3
880 ; AVX1-LABEL: test_abs_lt_v64i8:
882 ; AVX1-NEXT: vpabsb %xmm0, %xmm2
883 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
884 ; AVX1-NEXT: vpabsb %xmm0, %xmm0
885 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
886 ; AVX1-NEXT: vpabsb %xmm1, %xmm2
887 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
888 ; AVX1-NEXT: vpabsb %xmm1, %xmm1
889 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
892 ; AVX2-LABEL: test_abs_lt_v64i8:
894 ; AVX2-NEXT: vpabsb %ymm0, %ymm0
895 ; AVX2-NEXT: vpabsb %ymm1, %ymm1
898 ; AVX512F-LABEL: test_abs_lt_v64i8:
900 ; AVX512F-NEXT: vpabsb %ymm0, %ymm1 # encoding: [0xc4,0xe2,0x7d,0x1c,0xc8]
901 ; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm0 # encoding: [0x62,0xf3,0xfd,0x48,0x3b,0xc0,0x01]
902 ; AVX512F-NEXT: vpabsb %ymm0, %ymm0 # encoding: [0xc4,0xe2,0x7d,0x1c,0xc0]
903 ; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0 # encoding: [0x62,0xf3,0xf5,0x48,0x3a,0xc0,0x01]
904 ; AVX512F-NEXT: retq # encoding: [0xc3]
906 ; AVX512BW-LABEL: test_abs_lt_v64i8:
908 ; AVX512BW-NEXT: vpabsb %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x1c,0xc0]
909 ; AVX512BW-NEXT: retq # encoding: [0xc3]
910 %tmp1neg = sub <64 x i8> zeroinitializer, %a
911 %b = icmp slt <64 x i8> %a, zeroinitializer
912 %abs = select <64 x i1> %b, <64 x i8> %tmp1neg, <64 x i8> %a
916 define <32 x i16> @test_abs_gt_v32i16(<32 x i16> %a) nounwind {
917 ; SSE2-LABEL: test_abs_gt_v32i16:
919 ; SSE2-NEXT: pxor %xmm4, %xmm4
920 ; SSE2-NEXT: pxor %xmm5, %xmm5
921 ; SSE2-NEXT: psubw %xmm0, %xmm5
922 ; SSE2-NEXT: pmaxsw %xmm5, %xmm0
923 ; SSE2-NEXT: pxor %xmm5, %xmm5
924 ; SSE2-NEXT: psubw %xmm1, %xmm5
925 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1
926 ; SSE2-NEXT: pxor %xmm5, %xmm5
927 ; SSE2-NEXT: psubw %xmm2, %xmm5
928 ; SSE2-NEXT: pmaxsw %xmm5, %xmm2
929 ; SSE2-NEXT: psubw %xmm3, %xmm4
930 ; SSE2-NEXT: pmaxsw %xmm4, %xmm3
933 ; SSSE3-LABEL: test_abs_gt_v32i16:
935 ; SSSE3-NEXT: pabsw %xmm0, %xmm0
936 ; SSSE3-NEXT: pabsw %xmm1, %xmm1
937 ; SSSE3-NEXT: pabsw %xmm2, %xmm2
938 ; SSSE3-NEXT: pabsw %xmm3, %xmm3
941 ; SSE41-LABEL: test_abs_gt_v32i16:
943 ; SSE41-NEXT: pabsw %xmm0, %xmm0
944 ; SSE41-NEXT: pabsw %xmm1, %xmm1
945 ; SSE41-NEXT: pabsw %xmm2, %xmm2
946 ; SSE41-NEXT: pabsw %xmm3, %xmm3
949 ; AVX1-LABEL: test_abs_gt_v32i16:
951 ; AVX1-NEXT: vpabsw %xmm0, %xmm2
952 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
953 ; AVX1-NEXT: vpabsw %xmm0, %xmm0
954 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
955 ; AVX1-NEXT: vpabsw %xmm1, %xmm2
956 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
957 ; AVX1-NEXT: vpabsw %xmm1, %xmm1
958 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
961 ; AVX2-LABEL: test_abs_gt_v32i16:
963 ; AVX2-NEXT: vpabsw %ymm0, %ymm0
964 ; AVX2-NEXT: vpabsw %ymm1, %ymm1
967 ; AVX512F-LABEL: test_abs_gt_v32i16:
969 ; AVX512F-NEXT: vpabsw %ymm0, %ymm1 # encoding: [0xc4,0xe2,0x7d,0x1d,0xc8]
970 ; AVX512F-NEXT: vextracti64x4 $1, %zmm0, %ymm0 # encoding: [0x62,0xf3,0xfd,0x48,0x3b,0xc0,0x01]
971 ; AVX512F-NEXT: vpabsw %ymm0, %ymm0 # encoding: [0xc4,0xe2,0x7d,0x1d,0xc0]
972 ; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0 # encoding: [0x62,0xf3,0xf5,0x48,0x3a,0xc0,0x01]
973 ; AVX512F-NEXT: retq # encoding: [0xc3]
975 ; AVX512BW-LABEL: test_abs_gt_v32i16:
977 ; AVX512BW-NEXT: vpabsw %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x1d,0xc0]
978 ; AVX512BW-NEXT: retq # encoding: [0xc3]
979 %tmp1neg = sub <32 x i16> zeroinitializer, %a
980 %b = icmp sgt <32 x i16> %a, zeroinitializer
981 %abs = select <32 x i1> %b, <32 x i16> %a, <32 x i16> %tmp1neg