blob: b88122f57c0cab95d55c3a6814f5ee66e8560eb2 [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001; RUN: llvm-upgrade < %s | llvm-as | \
2; RUN: opt -predsimplify -instcombine -simplifycfg | llvm-dis > %t
3; RUN: grep -v declare %t | not grep fail
4; RUN: grep -v declare %t | grep -c pass | grep 4
5
6void %test1(int %x) {
7entry:
8 %A = seteq int %x, 0
9 br bool %A, label %then.1, label %else.1
10then.1:
11 %B = seteq int %x, 1
12 br bool %B, label %then.2, label %else.1
13then.2:
14 call void (...)* %fail( )
15 ret void
16else.1:
17 ret void
18}
19
20void %test2(int %x) {
21entry:
22 %A = seteq int %x, 0
23 %B = seteq int %x, 1
24 br bool %A, label %then.1, label %else.1
25then.1:
26 br bool %B, label %then.2, label %else.1
27then.2:
28 call void (...)* %fail( )
29 ret void
30else.1:
31 ret void
32}
33
34void %test3(int %x) {
35entry:
36 %A = seteq int %x, 0
37 %B = seteq int %x, 1
38 br bool %A, label %then.1, label %else.1
39then.1:
40 br bool %B, label %then.2, label %else.1
41then.2:
42 call void (...)* %fail( )
43 ret void
44else.1:
45 ret void
46}
47
48void %test4(int %x, int %y) {
49entry:
50 %A = seteq int %x, 0
51 %B = seteq int %y, 0
52 %C = and bool %A, %B
53 br bool %C, label %then.1, label %else.1
54then.1:
55 %D = seteq int %x, 0
56 br bool %D, label %then.2, label %else.2
57then.2:
58 %E = seteq int %y, 0
59 br bool %E, label %else.1, label %else.2
60else.1:
61 ret void
62else.2:
63 call void (...)* %fail( )
64 ret void
65}
66
67void %test5(int %x) {
68entry:
69 %A = seteq int %x, 0
70 br bool %A, label %then.1, label %else.1
71then.1:
72 ret void
73then.2:
74 call void (...)* %fail( )
75 ret void
76else.1:
77 %B = seteq int %x, 0
78 br bool %B, label %then.2, label %then.1
79}
80
81void %test6(int %x, int %y) {
82entry:
83 %A = seteq int %x, 0
84 %B = seteq int %y, 0
85 %C = or bool %A, %B
86 br bool %C, label %then.1, label %else.1
87then.1:
88 ret void
89then.2:
90 call void (...)* %fail( )
91 ret void
92else.1:
93 %D = seteq int %x, 0
94 br bool %D, label %then.2, label %else.2
95else.2:
96 %E = setne int %y, 0
97 br bool %E, label %then.1, label %then.2
98}
99
100void %test7(int %x) {
101entry:
102 %A = setne int %x, 0
103 %B = xor bool %A, true
104 br bool %B, label %then.1, label %else.1
105then.1:
106 %C = seteq int %x, 1
107 br bool %C, label %then.2, label %else.1
108then.2:
109 call void (...)* %fail( )
110 ret void
111else.1:
112 ret void
113}
114
115void %test8(int %x) {
116entry:
117 %A = add int %x, 1
118 %B = seteq int %x, 0
119 br bool %B, label %then.1, label %then.2
120then.1:
121 %C = seteq int %A, 1
122 br bool %C, label %then.2, label %else.2
123then.2:
124 ret void
125else.2:
126 call void (...)* %fail( )
127 ret void
128}
129
130void %test9(int %y, int %z) {
131entry:
132 %x = add int %y, %z
133 %A = seteq int %y, 3
134 %B = seteq int %z, 5
135 %C = and bool %A, %B
136 br bool %C, label %cond_true, label %return
137
138cond_true:
139 %D = seteq int %x, 8
140 br bool %D, label %then, label %oops
141
142then:
143 call void (...)* %pass( )
144 ret void
145
146oops:
147 call void (...)* %fail( )
148 ret void
149
150return:
151 ret void
152}
153
154void %test10() {
155entry:
156 %A = alloca int
157 %B = seteq int* %A, null
158 br bool %B, label %cond_true, label %cond_false
159
160cond_true:
161 call void (...)* %fail ( )
162 ret void
163
164cond_false:
165 call void (...)* %pass ( )
166 ret void
167}
168
169void %switch1(int %x) {
170entry:
171 %A = seteq int %x, 10
172 br bool %A, label %return, label %cond_false
173
174cond_false:
175 switch int %x, label %return [
176 int 9, label %then1
177 int 10, label %then2
178 ]
179
180then1:
181 call void (...)* %pass( )
182 ret void
183
184then2:
185 call void (...)* %fail( )
186 ret void
187
188return:
189 ret void
190}
191
192void %switch2(int %x) {
193entry:
194 %A = seteq int %x, 10
195 br bool %A, label %return, label %cond_false
196
197cond_false:
198 switch int %x, label %return [
199 int 8, label %then1
200 int 9, label %then1
201 int 10, label %then1
202 ]
203
204then1:
205 %B = setne int %x, 8
206 br bool %B, label %then2, label %return
207
208then2:
209 call void (...)* %pass( )
210 ret void
211
212return:
213 ret void
214}
215
216void %switch3(int %x) {
217entry:
218 %A = seteq int %x, 10
219 br bool %A, label %return, label %cond_false
220
221cond_false:
222 switch int %x, label %return [
223 int 9, label %then1
224 int 10, label %then1
225 ]
226
227then1:
228 %B = seteq int %x, 9
229 br bool %B, label %return, label %oops
230
231oops:
232 call void (...)* %fail( )
233 ret void
234
235return:
236 ret void
237}
238
239void %switch4(int %x) {
240entry:
241 %A = seteq int %x, 10
242 br bool %A, label %then1, label %cond_false
243
244cond_false:
245 switch int %x, label %default [
246 int 9, label %then1
247 int 10, label %then2
248 ]
249
250then1:
251 ret void
252
253then2:
254 ret void
255
256default:
257 %B = seteq int %x, 9
258 br bool %B, label %oops, label %then1
259
260oops:
261 call void (...)* %fail( )
262 ret void
263}
264
265void %select1(int %x) {
266entry:
267 %A = seteq int %x, 10
268 %B = select bool %A, int 1, int 2
269 %C = seteq int %B, 1
270 br bool %C, label %then, label %else
271
272then:
273 br bool %A, label %return, label %oops
274
275else:
276 br bool %A, label %oops, label %return
277
278oops:
279 call void (...)* %fail( )
280 ret void
281
282return:
283 ret void
284}
285
286void %select2(int %x) {
287entry:
288 %A = seteq int %x, 10
289 %B = select bool %A, int 1, int 2
290 %C = seteq int %B, 1
291 br bool %A, label %then, label %else
292
293then:
294 br bool %C, label %return, label %oops
295
296else:
297 br bool %C, label %oops, label %return
298
299oops:
300 call void (...)* %fail( )
301 ret void
302
303return:
304 ret void
305}
306
307declare void %fail(...)
308
309declare void %pass(...)