Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 1 | ; This test makes sure that these instructions are properly eliminated. |
| 2 | ; |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 3 | ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep phi |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 4 | |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 5 | define i32 @test1(i32 %A, i1 %b) { |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 6 | BB0: |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 7 | br i1 %b, label %BB1, label %BB2 |
| 8 | |
| 9 | BB1: ; preds = %BB0 |
| 10 | ; Combine away one argument PHI nodes |
| 11 | %B = phi i32 [ %A, %BB0 ] ; <i32> [#uses=1] |
| 12 | ret i32 %B |
| 13 | |
| 14 | BB2: ; preds = %BB0 |
| 15 | ret i32 %A |
| 16 | } |
| 17 | |
| 18 | define i32 @test2(i32 %A, i1 %b) { |
| 19 | BB0: |
| 20 | br i1 %b, label %BB1, label %BB2 |
| 21 | |
| 22 | BB1: ; preds = %BB0 |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 23 | br label %BB2 |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 24 | |
| 25 | BB2: ; preds = %BB1, %BB0 |
| 26 | ; Combine away PHI nodes with same values |
| 27 | %B = phi i32 [ %A, %BB0 ], [ %A, %BB1 ] ; <i32> [#uses=1] |
| 28 | ret i32 %B |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 29 | } |
| 30 | |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 31 | define i32 @test3(i32 %A, i1 %b) { |
| 32 | BB0: |
| 33 | br label %Loop |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 34 | |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 35 | Loop: ; preds = %Loop, %BB0 |
| 36 | ; PHI has same value always. |
| 37 | %B = phi i32 [ %A, %BB0 ], [ %B, %Loop ] ; <i32> [#uses=2] |
| 38 | br i1 %b, label %Loop, label %Exit |
| 39 | |
| 40 | Exit: ; preds = %Loop |
| 41 | ret i32 %B |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 42 | } |
| 43 | |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 44 | define i32 @test4(i1 %b) { |
| 45 | BB0: |
| 46 | ; Loop is unreachable |
| 47 | ret i32 7 |
| 48 | |
| 49 | Loop: ; preds = %L2, %Loop |
| 50 | ; PHI has same value always. |
| 51 | %B = phi i32 [ %B, %L2 ], [ %B, %Loop ] ; <i32> [#uses=2] |
| 52 | br i1 %b, label %L2, label %Loop |
| 53 | |
| 54 | L2: ; preds = %Loop |
| 55 | br label %Loop |
| 56 | } |
| 57 | |
| 58 | define i32 @test5(i32 %A, i1 %b) { |
| 59 | BB0: |
| 60 | br label %Loop |
| 61 | |
| 62 | Loop: ; preds = %Loop, %BB0 |
| 63 | ; PHI has same value always. |
| 64 | %B = phi i32 [ %A, %BB0 ], [ undef, %Loop ] ; <i32> [#uses=1] |
| 65 | br i1 %b, label %Loop, label %Exit |
| 66 | |
| 67 | Exit: ; preds = %Loop |
| 68 | ret i32 %B |
| 69 | } |
| 70 | |
| 71 | define i32 @test6(i32 %A, i1 %b) { |
| 72 | BB0: |
| 73 | %X = bitcast i32 %A to i32 ; <i32> [#uses=1] |
| 74 | br i1 %b, label %BB1, label %BB2 |
| 75 | |
| 76 | BB1: ; preds = %BB0 |
| 77 | %Y = bitcast i32 %A to i32 ; <i32> [#uses=1] |
| 78 | br label %BB2 |
| 79 | |
| 80 | BB2: ; preds = %BB1, %BB0 |
| 81 | ;; Suck casts into phi |
| 82 | %B = phi i32 [ %X, %BB0 ], [ %Y, %BB1 ] ; <i32> [#uses=1] |
| 83 | ret i32 %B |
| 84 | } |
| 85 | |
| 86 | define i32 @test7(i32 %A, i1 %b) { |
| 87 | BB0: |
| 88 | br label %Loop |
| 89 | |
| 90 | Loop: ; preds = %Loop, %BB0 |
| 91 | ; PHI is dead. |
| 92 | %B = phi i32 [ %A, %BB0 ], [ %C, %Loop ] ; <i32> [#uses=1] |
| 93 | %C = add i32 %B, 123 ; <i32> [#uses=1] |
| 94 | br i1 %b, label %Loop, label %Exit |
| 95 | |
| 96 | Exit: ; preds = %Loop |
| 97 | ret i32 0 |
| 98 | } |
| 99 | |
Chris Lattner | 9e1916e | 2008-12-01 02:34:36 +0000 | [diff] [blame] | 100 | define i32* @test8({ i32, i32 } *%A, i1 %b) { |
| 101 | BB0: |
| 102 | %X = getelementptr { i32, i32 } *%A, i32 0, i32 1 |
| 103 | br i1 %b, label %BB1, label %BB2 |
| 104 | |
| 105 | BB1: |
| 106 | %Y = getelementptr { i32, i32 } *%A, i32 0, i32 1 |
| 107 | br label %BB2 |
| 108 | |
| 109 | BB2: |
| 110 | ;; Suck GEPs into phi |
| 111 | %B = phi i32* [ %X, %BB0 ], [ %Y, %BB1 ] |
| 112 | ret i32* %B |
| 113 | } |
| 114 | |
Tanya Lattner | 4c4d0b8 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 115 | |