Avoid extra vreg copies for arguments passed in registers. Specifically, this can...
[oota-llvm.git] / test / CodeGen / X86 / cmp-redundant.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s
2
3 define i32 @cmp(i32* %aa, i32* %bb) nounwind readnone ssp {
4 entry:
5   %a = load i32* %aa
6   %b = load i32* %bb
7   %cmp = icmp sgt i32 %a, %b
8   br i1 %cmp, label %return, label %if.end
9 ; CHECK: cmp:
10 ; CHECK: cmpl
11 ; CHECK: jg
12
13 if.end:                                           ; preds = %entry
14 ; CHECK-NOT: cmpl
15 ; CHECK: cmov
16   %cmp4 = icmp slt i32 %a, %b
17   %. = select i1 %cmp4, i32 2, i32 111
18   br label %return
19
20 return:                                           ; preds = %if.end, %entry
21   %retval.0 = phi i32 [ 1, %entry ], [ %., %if.end ]
22   ret i32 %retval.0
23 }
24
25 define i32 @cmp2(i32 %a, i32 %b) nounwind readnone ssp {
26 entry:
27   %cmp = icmp sgt i32 %a, %b
28   br i1 %cmp, label %return, label %if.end
29 ; CHECK: cmp2:
30 ; CHECK: cmpl
31 ; CHECK: jg
32
33 if.end:                                           ; preds = %entry
34 ; CHECK-NOT: cmpl
35 ; CHECK: cmov
36   %cmp4 = icmp slt i32 %a, %b
37   %. = select i1 %cmp4, i32 2, i32 111
38   br label %return
39
40 return:                                           ; preds = %if.end, %entry
41   %retval.0 = phi i32 [ 1, %entry ], [ %., %if.end ]
42   ret i32 %retval.0
43 }