simplify some run lines, convert a test to filecheck.
[oota-llvm.git] / test / Transforms / JumpThreading / basic.ll
1 ; RUN: opt < %s -jump-threading -S | FileCheck %s
2 ; There should be no uncond branches left.
3 ; RUN: opt < %s -jump-threading -S | not grep {br label}
4
5 declare i32 @f1()
6 declare i32 @f2()
7 declare void @f3()
8
9 define i32 @test(i1 %cond) {
10         br i1 %cond, label %T1, label %F1
11
12 T1:
13         %v1 = call i32 @f1()
14         br label %Merge
15
16 F1:
17         %v2 = call i32 @f2()
18         br label %Merge
19
20 Merge:
21         %A = phi i1 [true, %T1], [false, %F1]
22         %B = phi i32 [%v1, %T1], [%v2, %F1]
23         br i1 %A, label %T2, label %F2
24
25 T2:
26 ; CHECK: T2:
27 ; CHECK: ret i32 %v1
28         call void @f3()
29         ret i32 %B
30
31 F2:
32 ; CHECK: F2:
33 ; CHECK: ret i32 %v2
34         ret i32 %B
35 }
36
37
38 ;; cond is known false on Entry -> F1 edge!
39 define i32 @test2(i1 %cond) {
40 Entry:
41         br i1 %cond, label %T1, label %F1
42
43 T1:
44 ; CHECK: %v1 = call i32 @f1()
45 ; CHECK: ret i32 47
46         %v1 = call i32 @f1()
47         br label %Merge
48
49 F1:
50         br i1 %cond, label %Merge, label %F2
51
52 Merge:
53         %B = phi i32 [47, %T1], [192, %F1]
54         ret i32 %B
55
56 F2:
57         call void @f3()
58         ret i32 12
59 }