Add ExtractValue instruction to SimplifyCFG's ComputeSpeculationCost
[oota-llvm.git] / test / Transforms / SimplifyCFG / 2005-06-16-PHICrash.ll
1 ; RUN: opt < %s -simplifycfg -disable-output
2 ; PR584
3 @g_38098584 = external global i32               ; <i32*> [#uses=1]
4 @g_60187400 = external global i32               ; <i32*> [#uses=1]
5 @g_59182229 = external global i32               ; <i32*> [#uses=2]
6
7 define i32 @_Z13func_26556482h(i8 %l_88173906) {
8 entry:
9         %tmp.1 = bitcast i8 %l_88173906 to i8           ; <i8> [#uses=2]
10         %tmp.3 = icmp eq i8 %l_88173906, 0              ; <i1> [#uses=1]
11         br i1 %tmp.3, label %else.0, label %then.0
12 then.0:         ; preds = %entry
13         %tmp.5 = icmp eq i8 %l_88173906, 0              ; <i1> [#uses=1]
14         br i1 %tmp.5, label %else.1, label %then.1
15 then.1:         ; preds = %then.0
16         br label %return
17 else.1:         ; preds = %then.0
18         br label %loopentry.0
19 loopentry.0:            ; preds = %no_exit.0, %else.1
20         %i.0.1 = phi i32 [ 0, %else.1 ], [ %inc.0, %no_exit.0 ]         ; <i32> [#uses=2]
21         %tmp.9 = icmp sgt i32 %i.0.1, 99                ; <i1> [#uses=1]
22         br i1 %tmp.9, label %endif.0, label %no_exit.0
23 no_exit.0:              ; preds = %loopentry.0
24         %inc.0 = add i32 %i.0.1, 1              ; <i32> [#uses=1]
25         br label %loopentry.0
26 else.0:         ; preds = %entry
27         %tmp.12 = sext i8 %tmp.1 to i32         ; <i32> [#uses=1]
28         br label %return
29 endif.0:                ; preds = %loopentry.0
30         %tmp.14 = sext i8 %tmp.1 to i32         ; <i32> [#uses=1]
31         %tmp.16 = zext i8 %l_88173906 to i32            ; <i32> [#uses=1]
32         %tmp.17 = icmp sgt i32 %tmp.14, %tmp.16         ; <i1> [#uses=1]
33         %tmp.19 = load i32* @g_59182229         ; <i32> [#uses=2]
34         br i1 %tmp.17, label %cond_true, label %cond_false
35 cond_true:              ; preds = %endif.0
36         %tmp.20 = icmp ne i32 %tmp.19, 1                ; <i1> [#uses=1]
37         br label %cond_continue
38 cond_false:             ; preds = %endif.0
39         %tmp.22 = icmp ne i32 %tmp.19, 0                ; <i1> [#uses=1]
40         br label %cond_continue
41 cond_continue:          ; preds = %cond_false, %cond_true
42         %mem_tmp.0 = phi i1 [ %tmp.20, %cond_true ], [ %tmp.22, %cond_false ]           ; <i1> [#uses=1]
43         br i1 %mem_tmp.0, label %then.2, label %else.2
44 then.2:         ; preds = %cond_continue
45         %tmp.25 = zext i8 %l_88173906 to i32            ; <i32> [#uses=1]
46         br label %return
47 else.2:         ; preds = %cond_continue
48         br label %loopentry.1
49 loopentry.1:            ; preds = %endif.3, %else.2
50         %i.1.1 = phi i32 [ 0, %else.2 ], [ %inc.3, %endif.3 ]           ; <i32> [#uses=2]
51         %i.3.2 = phi i32 [ undef, %else.2 ], [ %i.3.0, %endif.3 ]               ; <i32> [#uses=2]
52         %l_88173906_addr.1 = phi i8 [ %l_88173906, %else.2 ], [ %l_88173906_addr.0, %endif.3 ]          ; <i8> [#uses=3]
53         %tmp.29 = icmp sgt i32 %i.1.1, 99               ; <i1> [#uses=1]
54         br i1 %tmp.29, label %endif.2, label %no_exit.1
55 no_exit.1:              ; preds = %loopentry.1
56         %tmp.30 = load i32* @g_38098584         ; <i32> [#uses=1]
57         %tmp.31 = icmp eq i32 %tmp.30, 0                ; <i1> [#uses=1]
58         br i1 %tmp.31, label %else.3, label %then.3
59 then.3:         ; preds = %no_exit.1
60         br label %endif.3
61 else.3:         ; preds = %no_exit.1
62         br i1 false, label %else.4, label %then.4
63 then.4:         ; preds = %else.3
64         br label %endif.3
65 else.4:         ; preds = %else.3
66         br i1 false, label %else.5, label %then.5
67 then.5:         ; preds = %else.4
68         store i32 -1004318825, i32* @g_59182229
69         br label %return
70 else.5:         ; preds = %else.4
71         br label %loopentry.3
72 loopentry.3:            ; preds = %then.7, %else.5
73         %i.3.3 = phi i32 [ 0, %else.5 ], [ %inc.2, %then.7 ]            ; <i32> [#uses=3]
74         %tmp.55 = icmp sgt i32 %i.3.3, 99               ; <i1> [#uses=1]
75         br i1 %tmp.55, label %endif.3, label %no_exit.3
76 no_exit.3:              ; preds = %loopentry.3
77         %tmp.57 = icmp eq i8 %l_88173906_addr.1, 0              ; <i1> [#uses=1]
78         br i1 %tmp.57, label %else.7, label %then.7
79 then.7:         ; preds = %no_exit.3
80         store i32 16239, i32* @g_60187400
81         %inc.2 = add i32 %i.3.3, 1              ; <i32> [#uses=1]
82         br label %loopentry.3
83 else.7:         ; preds = %no_exit.3
84         br label %return
85 endif.3:                ; preds = %loopentry.3, %then.4, %then.3
86         %i.3.0 = phi i32 [ %i.3.2, %then.3 ], [ %i.3.2, %then.4 ], [ %i.3.3, %loopentry.3 ]             ; <i32> [#uses=1]
87         %l_88173906_addr.0 = phi i8 [ 100, %then.3 ], [ %l_88173906_addr.1, %then.4 ], [ %l_88173906_addr.1, %loopentry.3 ]             ; <i8> [#uses=1]
88         %inc.3 = add i32 %i.1.1, 1              ; <i32> [#uses=1]
89         br label %loopentry.1
90 endif.2:                ; preds = %loopentry.1
91         br label %return
92 return:         ; preds = %endif.2, %else.7, %then.5, %then.2, %else.0, %then.1
93         %result.0 = phi i32 [ 1624650671, %then.1 ], [ %tmp.25, %then.2 ], [ 3379, %then.5 ], [ 52410, %else.7 ], [ -1526438411, %endif.2 ], [ %tmp.12, %else.0 ]               ; <i32> [#uses=1]
94         ret i32 %result.0
95 }