Andrew Trick | f143b79 | 2011-10-04 03:50:44 +0000 | [diff] [blame] | 1 | ; RUN: opt -loop-reduce -S < %s | FileCheck %s |
| 2 | ; |
| 3 | ; Test LSR's use of SplitCriticalEdge during phi rewriting. |
| 4 | ; Verify that identical edges are merged. rdar://problem/6453893 |
| 5 | |
| 6 | target triple = "x86-apple-darwin" |
| 7 | |
| 8 | ; CHECK: @test |
| 9 | ; CHECK: bb89: |
| 10 | ; CHECK: phi i8* [ %lsr.iv.next1, %bbA.bb89_crit_edge ], [ %lsr.iv.next1, %bbB.bb89_crit_edge ]{{$}} |
| 11 | |
| 12 | define i8* @test() { |
| 13 | entry: |
| 14 | br label %loop |
| 15 | |
| 16 | loop: |
| 17 | %rec = phi i32 [ %next, %loop ], [ 0, %entry ] |
| 18 | %next = add i32 %rec, 1 |
| 19 | %tmp75 = getelementptr i8* null, i32 %next |
| 20 | br i1 false, label %loop, label %loopexit |
| 21 | |
| 22 | loopexit: |
| 23 | br i1 false, label %bbA, label %bbB |
| 24 | |
| 25 | bbA: |
| 26 | switch i32 0, label %bb89 [ |
| 27 | i32 47, label %bb89 |
| 28 | i32 58, label %bb89 |
| 29 | ] |
| 30 | |
| 31 | bbB: |
| 32 | switch i8 0, label %bb89 [ |
| 33 | i8 47, label %bb89 |
| 34 | i8 58, label %bb89 |
| 35 | ] |
| 36 | |
| 37 | bb89: |
| 38 | %tmp75phi = phi i8* [ %tmp75, %bbA ], [ %tmp75, %bbA ], [ %tmp75, %bbA ], [ %tmp75, %bbB ], [ %tmp75, %bbB ], [ %tmp75, %bbB ] |
| 39 | br label %exit |
| 40 | |
| 41 | exit: |
| 42 | ret i8* %tmp75phi |
| 43 | } |