35f69c95683891689a42f7ecf68bd2243fda10a3
[oota-llvm.git] / test / CodeGen / X86 / jump_sign.ll
1 ; RUN: llc < %s -march=x86 -mcpu=pentiumpro | FileCheck %s
2
3 define i32 @f(i32 %X) {
4 entry:
5 ; CHECK: f:
6 ; CHECK: jns
7         %tmp1 = add i32 %X, 1           ; <i32> [#uses=1]
8         %tmp = icmp slt i32 %tmp1, 0            ; <i1> [#uses=1]
9         br i1 %tmp, label %cond_true, label %cond_next
10
11 cond_true:              ; preds = %entry
12         %tmp2 = tail call i32 (...)* @bar( )            ; <i32> [#uses=0]
13         br label %cond_next
14
15 cond_next:              ; preds = %cond_true, %entry
16         %tmp3 = tail call i32 (...)* @baz( )            ; <i32> [#uses=0]
17         ret i32 undef
18 }
19
20 declare i32 @bar(...)
21
22 declare i32 @baz(...)
23
24 ; rdar://10633221
25 define i32 @g(i32 %a, i32 %b) nounwind {
26 entry:
27 ; CHECK: g:
28 ; CHECK-NOT: test
29 ; CHECK: cmovs
30   %sub = sub nsw i32 %a, %b
31   %cmp = icmp sgt i32 %sub, 0
32   %cond = select i1 %cmp, i32 %sub, i32 0
33   ret i32 %cond
34 }
35
36 ; rdar://10734411
37 define i32 @h(i32 %a, i32 %b) nounwind {
38 entry:
39 ; CHECK: h:
40 ; CHECK-NOT: cmp
41 ; CHECK: cmov
42   %cmp = icmp slt i32 %b, %a
43   %sub = sub nsw i32 %a, %b
44   %cond = select i1 %cmp, i32 %sub, i32 0
45   ret i32 %cond
46 }
47 define i32 @i(i32 %a, i32 %b) nounwind {
48 entry:
49 ; CHECK: i:
50 ; CHECK-NOT: cmp
51 ; CHECK: cmov
52   %cmp = icmp sgt i32 %a, %b
53   %sub = sub nsw i32 %a, %b
54   %cond = select i1 %cmp, i32 %sub, i32 0
55   ret i32 %cond
56 }
57 define i32 @j(i32 %a, i32 %b) nounwind {
58 entry:
59 ; CHECK: j:
60 ; CHECK-NOT: cmp
61 ; CHECK: cmov
62   %cmp = icmp ugt i32 %a, %b
63   %sub = sub i32 %a, %b
64   %cond = select i1 %cmp, i32 %sub, i32 0
65   ret i32 %cond
66 }
67 define i32 @k(i32 %a, i32 %b) nounwind {
68 entry:
69 ; CHECK: k:
70 ; CHECK-NOT: cmp
71 ; CHECK: cmov
72   %cmp = icmp ult i32 %b, %a
73   %sub = sub i32 %a, %b
74   %cond = select i1 %cmp, i32 %sub, i32 0
75   ret i32 %cond
76 }