DAGCombiner: Canonicalize vector integer abs in the same way we do it for scalars.
[oota-llvm.git] / test / CodeGen / X86 / viabs.ll
1 ; RUN: llc < %s -march=x86-64 -mcpu=x86-64 | FileCheck %s -check-prefix=SSE2
2
3 define <4 x i32> @test1(<4 x i32> %a) nounwind {
4 ; SSE2: test1:
5 ; SSE2: movdqa
6 ; SSE2-NEXT: psrad $31
7 ; SSE2-NEXT: padd
8 ; SSE2-NEXT: pxor
9 ; SSE2-NEXT: ret
10         %tmp1neg = sub <4 x i32> zeroinitializer, %a
11         %b = icmp sgt <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
12         %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
13         ret <4 x i32> %abs
14 }
15
16 define <4 x i32> @test2(<4 x i32> %a) nounwind {
17 ; SSE2: test2:
18 ; SSE2: movdqa
19 ; SSE2-NEXT: psrad $31
20 ; SSE2-NEXT: padd
21 ; SSE2-NEXT: pxor
22 ; SSE2-NEXT: ret
23         %tmp1neg = sub <4 x i32> zeroinitializer, %a
24         %b = icmp sge <4 x i32> %a, zeroinitializer
25         %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
26         ret <4 x i32> %abs
27 }
28
29 define <4 x i32> @test3(<4 x i32> %a) nounwind {
30 ; SSE2: test3:
31 ; SSE2: movdqa
32 ; SSE2-NEXT: psrad $31
33 ; SSE2-NEXT: padd
34 ; SSE2-NEXT: pxor
35 ; SSE2-NEXT: ret
36         %tmp1neg = sub <4 x i32> zeroinitializer, %a
37         %b = icmp sgt <4 x i32> %a, zeroinitializer
38         %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
39         ret <4 x i32> %abs
40 }
41
42 define <4 x i32> @test4(<4 x i32> %a) nounwind {
43 ; SSE2: test4:
44 ; SSE2: movdqa
45 ; SSE2-NEXT: psrad $31
46 ; SSE2-NEXT: padd
47 ; SSE2-NEXT: pxor
48 ; SSE2-NEXT: ret
49         %tmp1neg = sub <4 x i32> zeroinitializer, %a
50         %b = icmp slt <4 x i32> %a, zeroinitializer
51         %abs = select <4 x i1> %b, <4 x i32> %tmp1neg, <4 x i32> %a
52         ret <4 x i32> %abs
53 }
54
55 define <4 x i32> @test5(<4 x i32> %a) nounwind {
56 ; SSE2: test5:
57 ; SSE2: movdqa
58 ; SSE2-NEXT: psrad $31
59 ; SSE2-NEXT: padd
60 ; SSE2-NEXT: pxor
61 ; SSE2-NEXT: ret
62         %tmp1neg = sub <4 x i32> zeroinitializer, %a
63         %b = icmp sle <4 x i32> %a, zeroinitializer
64         %abs = select <4 x i1> %b, <4 x i32> %tmp1neg, <4 x i32> %a
65         ret <4 x i32> %abs
66 }