summaryrefslogtreecommitdiff
path: root/test/Transforms/CorrelatedExprs/2002-10-03-PHIPropogate.ll
blob: a9d5f0c0167cb7c470c591aa6a22fe25c216a682 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
; This test checks to see if the CEE pass is applying jump-bypassing for values
; determined by PHI nodes.  Because we are coming from a particular block, we
; know what value a PHI node will take on this edge and should exploit it.
;
; This testcase comes from the following C code:
; void bar(void);
; void foo(int c) {
;   int i = c ? 2 : 8;
;   while (i < 20) {
;     bar ();
;     i++;
;   }
; }
;
; RUN: llvm-upgrade < %s | llvm-as | opt -cee -simplifycfg | llvm-dis | not grep bb3

implementation
declare void %bar()

void %foo(int %c) {
bb0:            ; No predecessors!
        %cond215 = seteq int %c, 0              ; <bool> [#uses=1]
        br bool %cond215, label %bb3, label %bb4

bb3:            ; preds = %bb0
        br label %bb4

bb4:            ; preds = %bb3, %bb0
        %reg110 = phi int [ 8, %bb3 ], [ 2, %bb0 ]              ; <int> [#uses=2]
        %cond217 = setgt int %reg110, 19                ; <bool> [#uses=1]
        br bool %cond217, label %bb6, label %bb5

bb5:            ; preds = %bb5, %bb4
        %cann-indvar = phi int [ 0, %bb4 ], [ %add1-indvar, %bb5 ]              ; <int> [#uses=2]
        %add1-indvar = add int %cann-indvar, 1          ; <int> [#uses=1]
        %reg111 = add int %cann-indvar, %reg110         ; <int> [#uses=1]
        call void %bar( )
        %reg112 = add int %reg111, 1            ; <int> [#uses=1]
        %cond222 = setle int %reg112, 19                ; <bool> [#uses=1]
        br bool %cond222, label %bb5, label %bb6

bb6:            ; preds = %bb5, %bb4
        ret void
}