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