Remove llvm-upgrade and update test cases.
[oota-llvm.git] / test / Transforms / InstCombine / phi.ll
1 ; This test makes sure that these instructions are properly eliminated.
2 ;
3 ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep phi
4 ; END.
5
6 define i32 @test1(i32 %A, i1 %b) {
7 BB0:
8         br i1 %b, label %BB1, label %BB2
9
10 BB1:            ; preds = %BB0
11         ; Combine away one argument PHI nodes
12         %B = phi i32 [ %A, %BB0 ]               ; <i32> [#uses=1]
13         ret i32 %B
14
15 BB2:            ; preds = %BB0
16         ret i32 %A
17 }
18
19 define i32 @test2(i32 %A, i1 %b) {
20 BB0:
21         br i1 %b, label %BB1, label %BB2
22
23 BB1:            ; preds = %BB0
24         br label %BB2
25
26 BB2:            ; preds = %BB1, %BB0
27         ; Combine away PHI nodes with same values
28         %B = phi i32 [ %A, %BB0 ], [ %A, %BB1 ]         ; <i32> [#uses=1]
29         ret i32 %B
30 }
31
32 define i32 @test3(i32 %A, i1 %b) {
33 BB0:
34         br label %Loop
35
36 Loop:           ; preds = %Loop, %BB0
37         ; PHI has same value always.
38         %B = phi i32 [ %A, %BB0 ], [ %B, %Loop ]                ; <i32> [#uses=2]
39         br i1 %b, label %Loop, label %Exit
40
41 Exit:           ; preds = %Loop
42         ret i32 %B
43 }
44
45 define i32 @test4(i1 %b) {
46 BB0:
47         ; Loop is unreachable
48         ret i32 7
49
50 Loop:           ; preds = %L2, %Loop
51         ; PHI has same value always.
52         %B = phi i32 [ %B, %L2 ], [ %B, %Loop ]         ; <i32> [#uses=2]
53         br i1 %b, label %L2, label %Loop
54
55 L2:             ; preds = %Loop
56         br label %Loop
57 }
58
59 define i32 @test5(i32 %A, i1 %b) {
60 BB0:
61         br label %Loop
62
63 Loop:           ; preds = %Loop, %BB0
64         ; PHI has same value always.
65         %B = phi i32 [ %A, %BB0 ], [ undef, %Loop ]             ; <i32> [#uses=1]
66         br i1 %b, label %Loop, label %Exit
67
68 Exit:           ; preds = %Loop
69         ret i32 %B
70 }
71
72 define i32 @test6(i32 %A, i1 %b) {
73 BB0:
74         %X = bitcast i32 %A to i32              ; <i32> [#uses=1]
75         br i1 %b, label %BB1, label %BB2
76
77 BB1:            ; preds = %BB0
78         %Y = bitcast i32 %A to i32              ; <i32> [#uses=1]
79         br label %BB2
80
81 BB2:            ; preds = %BB1, %BB0
82         ;; Suck casts into phi
83         %B = phi i32 [ %X, %BB0 ], [ %Y, %BB1 ]         ; <i32> [#uses=1]
84         ret i32 %B
85 }
86
87 define i32 @test7(i32 %A, i1 %b) {
88 BB0:
89         br label %Loop
90
91 Loop:           ; preds = %Loop, %BB0
92         ; PHI is dead.
93         %B = phi i32 [ %A, %BB0 ], [ %C, %Loop ]                ; <i32> [#uses=1]
94         %C = add i32 %B, 123            ; <i32> [#uses=1]
95         br i1 %b, label %Loop, label %Exit
96
97 Exit:           ; preds = %Loop
98         ret i32 0
99 }
100
101