new testcase
[oota-llvm.git] / test / Transforms / CorrelatedExprs / 2002-10-03-PHIPropogate.ll
1 ; This test checks to see if the CEE pass is applying jump-bypassing for values
2 ; determined by PHI nodes.  Because we are coming from a particular block, we
3 ; know what value a PHI node will take on this edge and should exploit it.
4 ;
5 ; This testcase comes from the following C code:
6 ; void bar(void);
7 ; void foo(int c) {
8 ;   int i = c ? 2 : 8;
9 ;   while (i < 20) {
10 ;     bar ();
11 ;     i++;
12 ;   }
13 ; }
14 ;
15 ; RUN: llvm-as < %s | opt -cee -simplifycfg | llvm-dis | not grep bb3
16
17 implementation
18 declare void %bar()
19
20 void %foo(int %c) {
21 bb0:            ; No predecessors!
22         %cond215 = seteq int %c, 0              ; <bool> [#uses=1]
23         br bool %cond215, label %bb3, label %bb4
24
25 bb3:            ; preds = %bb0
26         br label %bb4
27
28 bb4:            ; preds = %bb3, %bb0
29         %reg110 = phi int [ 8, %bb3 ], [ 2, %bb0 ]              ; <int> [#uses=2]
30         %cond217 = setgt int %reg110, 19                ; <bool> [#uses=1]
31         br bool %cond217, label %bb6, label %bb5
32
33 bb5:            ; preds = %bb5, %bb4
34         %cann-indvar = phi int [ 0, %bb4 ], [ %add1-indvar, %bb5 ]              ; <int> [#uses=2]
35         %add1-indvar = add int %cann-indvar, 1          ; <int> [#uses=1]
36         %reg111 = add int %cann-indvar, %reg110         ; <int> [#uses=1]
37         call void %bar( )
38         %reg112 = add int %reg111, 1            ; <int> [#uses=1]
39         %cond222 = setle int %reg112, 19                ; <bool> [#uses=1]
40         br bool %cond222, label %bb5, label %bb6
41
42 bb6:            ; preds = %bb5, %bb4
43         ret void
44 }
45