blob: a509d8aa81e645f2fae1adb287e16c1bc7c6286c [file] [log] [blame]
Benjamin Kramerd56ffc72013-04-26 09:19:19 +00001; RUN: llc < %s -march=x86-64 -mcpu=x86-64 | FileCheck %s -check-prefix=SSE2
2
3define <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
16define <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
29define <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
42define <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
55define <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}