Chris Lattner | 4f68e0c | 2009-10-11 03:54:21 +0000 | [diff] [blame^] | 1 | ; RUN: opt < %s -jump-threading -S | FileCheck %s |
Chris Lattner | d57b6b8 | 2008-04-22 06:35:14 +0000 | [diff] [blame] | 2 | ; There should be no uncond branches left. |
Chris Lattner | 4f68e0c | 2009-10-11 03:54:21 +0000 | [diff] [blame^] | 3 | ; RUN: opt < %s -jump-threading -S | not grep {br label} |
Chris Lattner | d57b6b8 | 2008-04-22 06:35:14 +0000 | [diff] [blame] | 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: |
Chris Lattner | 4f68e0c | 2009-10-11 03:54:21 +0000 | [diff] [blame^] | 26 | ; CHECK: T2: |
| 27 | ; CHECK: ret i32 %v1 |
Chris Lattner | d57b6b8 | 2008-04-22 06:35:14 +0000 | [diff] [blame] | 28 | call void @f3() |
| 29 | ret i32 %B |
| 30 | |
| 31 | F2: |
Chris Lattner | 4f68e0c | 2009-10-11 03:54:21 +0000 | [diff] [blame^] | 32 | ; CHECK: F2: |
| 33 | ; CHECK: ret i32 %v2 |
Chris Lattner | d57b6b8 | 2008-04-22 06:35:14 +0000 | [diff] [blame] | 34 | ret i32 %B |
| 35 | } |
Chris Lattner | f4b9ed2 | 2008-12-03 07:48:08 +0000 | [diff] [blame] | 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: |
Chris Lattner | 4f68e0c | 2009-10-11 03:54:21 +0000 | [diff] [blame^] | 44 | ; CHECK: %v1 = call i32 @f1() |
| 45 | ; CHECK: ret i32 47 |
Chris Lattner | f4b9ed2 | 2008-12-03 07:48:08 +0000 | [diff] [blame] | 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 | } |