Use the llvm-upgrade program to upgrade llvm assembly.
[oota-llvm.git] / test / Transforms / LCSSA / 2006-10-31-UnreachableBlock-2.ll
1 ; RUN: llvm-upgrade < %s | llvm-as | opt -lcssa -disable-output
2 ; PR977
3
4 declare int %opost_block()
5
6 void %write_chan() {
7 entry:
8         br bool false, label %shortcirc_next.0, label %shortcirc_done.0
9
10 shortcirc_next.0:               ; preds = %entry
11         br label %shortcirc_done.0
12
13 shortcirc_done.0:               ; preds = %shortcirc_next.0, %entry
14         br bool false, label %shortcirc_next.1, label %shortcirc_done.1
15
16 shortcirc_next.1:               ; preds = %shortcirc_done.0
17         br label %shortcirc_done.1
18
19 shortcirc_done.1:               ; preds = %shortcirc_next.1, %shortcirc_done.0
20         br bool false, label %then.0, label %endif.0
21
22 then.0:         ; preds = %shortcirc_done.1
23         br bool false, label %then.1, label %endif.1
24
25 then.1:         ; preds = %then.0
26         br label %return
27
28 after_ret.0:            ; No predecessors!
29         br label %endif.1
30
31 endif.1:                ; preds = %after_ret.0, %then.0
32         br label %endif.0
33
34 endif.0:                ; preds = %endif.1, %shortcirc_done.1
35         br label %loopentry.0
36
37 loopentry.0:            ; preds = %endif.12, %endif.0
38         br bool false, label %then.2, label %endif.2
39
40 then.2:         ; preds = %loopentry.0
41         br label %loopexit.0
42
43 dead_block_after_break.0:               ; No predecessors!
44         br label %endif.2
45
46 endif.2:                ; preds = %dead_block_after_break.0, %loopentry.0
47         br bool false, label %shortcirc_done.2, label %shortcirc_next.2
48
49 shortcirc_next.2:               ; preds = %endif.2
50         br bool false, label %shortcirc_next.3, label %shortcirc_done.3
51
52 shortcirc_next.3:               ; preds = %shortcirc_next.2
53         br label %shortcirc_done.3
54
55 shortcirc_done.3:               ; preds = %shortcirc_next.3, %shortcirc_next.2
56         br label %shortcirc_done.2
57
58 shortcirc_done.2:               ; preds = %shortcirc_done.3, %endif.2
59         br bool false, label %then.3, label %endif.3
60
61 then.3:         ; preds = %shortcirc_done.2
62         br label %loopexit.0
63
64 dead_block_after_break.1:               ; No predecessors!
65         br label %endif.3
66
67 endif.3:                ; preds = %dead_block_after_break.1, %shortcirc_done.2
68         br bool false, label %shortcirc_next.4, label %shortcirc_done.4
69
70 shortcirc_next.4:               ; preds = %endif.3
71         br label %shortcirc_done.4
72
73 shortcirc_done.4:               ; preds = %shortcirc_next.4, %endif.3
74         br bool false, label %then.4, label %else
75
76 then.4:         ; preds = %shortcirc_done.4
77         br label %loopentry.1
78
79 loopentry.1:            ; preds = %endif.8, %then.4
80         br bool false, label %no_exit, label %loopexit.1
81
82 no_exit:                ; preds = %loopentry.1
83         %tmp.94 = call int %opost_block( )              ; <int> [#uses=1]
84         br bool false, label %then.5, label %endif.5
85
86 then.5:         ; preds = %no_exit
87         br bool false, label %then.6, label %endif.6
88
89 then.6:         ; preds = %then.5
90         br label %loopexit.1
91
92 dead_block_after_break.2:               ; No predecessors!
93         br label %endif.6
94
95 endif.6:                ; preds = %dead_block_after_break.2, %then.5
96         br label %break_out
97
98 dead_block_after_goto.0:                ; No predecessors!
99         br label %endif.5
100
101 endif.5:                ; preds = %dead_block_after_goto.0, %no_exit
102         br bool false, label %then.7, label %endif.7
103
104 then.7:         ; preds = %endif.5
105         br label %loopexit.1
106
107 dead_block_after_break.3:               ; No predecessors!
108         br label %endif.7
109
110 endif.7:                ; preds = %dead_block_after_break.3, %endif.5
111         switch uint 1, label %switchexit [
112                  uint 4, label %label.2
113                  uint 2, label %label.1
114                  uint 1, label %label.0
115         ]
116
117 label.0:                ; preds = %endif.7
118         br label %switchexit
119
120 dead_block_after_break.4:               ; No predecessors!
121         br label %label.1
122
123 label.1:                ; preds = %dead_block_after_break.4, %endif.7
124         br label %switchexit
125
126 dead_block_after_break.5:               ; No predecessors!
127         br label %label.2
128
129 label.2:                ; preds = %dead_block_after_break.5, %endif.7
130         br label %switchexit
131
132 dead_block_after_break.6:               ; No predecessors!
133         br label %switchexit
134
135 switchexit:             ; preds = %dead_block_after_break.6, %label.2, %label.1, %label.0, %endif.7
136         br bool false, label %then.8, label %endif.8
137
138 then.8:         ; preds = %switchexit
139         br label %loopexit.1
140
141 dead_block_after_break.7:               ; No predecessors!
142         br label %endif.8
143
144 endif.8:                ; preds = %dead_block_after_break.7, %switchexit
145         br label %loopentry.1
146
147 loopexit.1:             ; preds = %then.8, %then.7, %then.6, %loopentry.1
148         br bool false, label %then.9, label %endif.9
149
150 then.9:         ; preds = %loopexit.1
151         br label %endif.9
152
153 endif.9:                ; preds = %then.9, %loopexit.1
154         br label %endif.4
155
156 else:           ; preds = %shortcirc_done.4
157         br bool false, label %then.10, label %endif.10
158
159 then.10:                ; preds = %else
160         br label %break_out
161
162 dead_block_after_goto.1:                ; No predecessors!
163         br label %endif.10
164
165 endif.10:               ; preds = %dead_block_after_goto.1, %else
166         br label %endif.4
167
168 endif.4:                ; preds = %endif.10, %endif.9
169         br bool false, label %then.11, label %endif.11
170
171 then.11:                ; preds = %endif.4
172         br label %loopexit.0
173
174 dead_block_after_break.8:               ; No predecessors!
175         br label %endif.11
176
177 endif.11:               ; preds = %dead_block_after_break.8, %endif.4
178         br bool false, label %then.12, label %endif.12
179
180 then.12:                ; preds = %endif.11
181         br label %loopexit.0
182
183 dead_block_after_break.9:               ; No predecessors!
184         br label %endif.12
185
186 endif.12:               ; preds = %dead_block_after_break.9, %endif.11
187         br label %loopentry.0
188
189 loopexit.0:             ; preds = %then.12, %then.11, %then.3, %then.2
190         br label %break_out
191
192 break_out:              ; preds = %loopexit.0, %then.10, %endif.6
193         %retval.3 = phi int [ 0, %loopexit.0 ], [ %tmp.94, %endif.6 ], [ 0, %then.10 ]          ; <int> [#uses=0]
194         br bool false, label %cond_true, label %cond_false
195
196 cond_true:              ; preds = %break_out
197         br label %cond_continue
198
199 cond_false:             ; preds = %break_out
200         br label %cond_continue
201
202 cond_continue:          ; preds = %cond_false, %cond_true
203         br label %return
204
205 after_ret.1:            ; No predecessors!
206         br label %return
207
208 return:         ; preds = %after_ret.1, %cond_continue, %then.1
209         ret void
210 }