blob: 89d5d4ce4982b4c00b00367826f7512e3c5763d8 [file] [log] [blame]
Nick Lewycky8e559932006-09-02 19:40:38 +00001; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail &&
2; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep pass | wc -l | grep 3
Nick Lewyckyb2e8ae12006-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 Lewycky8e559932006-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
152void %switch1(int %x) {
153entry:
154 %A = seteq int %x, 10
155 br bool %A, label %return, label %cond_false
156
157cond_false:
158 switch int %x, label %return [
159 int 9, label %then1
160 int 10, label %then2
161 ]
162
163then1:
164 call void (...)* %pass( )
165 ret void
166
167then2:
168 call void (...)* %fail( )
169 ret void
170
171return:
172 ret void
173}
174
175void %switch2(int %x) {
176entry:
177 %A = seteq int %x, 10
178 br bool %A, label %return, label %cond_false
179
180cond_false:
181 switch int %x, label %return [
182 int 8, label %then1
183 int 9, label %then1
184 int 10, label %then1
185 ]
186
187then1:
188 %B = setne int %x, 8
189 br bool %B, label %then2, label %return
190
191then2:
192 call void (...)* %pass( )
193 ret void
194
195return:
196 ret void
197}
198
199void %switch3(int %x) {
200entry:
201 %A = seteq int %x, 10
202 br bool %A, label %return, label %cond_false
203
204cond_false:
205 switch int %x, label %return [
206 int 9, label %then1
207 int 10, label %then1
208 ]
209
210then1:
211 %B = seteq int %x, 9
212 br bool %B, label %return, label %oops
213
214oops:
215 call void (...)* %fail( )
216 ret void
217
218return:
219 ret void
220}
221
222void %switch4(int %x) {
223entry:
224 %A = seteq int %x, 10
225 br bool %A, label %then1, label %cond_false
226
227cond_false:
228 switch int %x, label %default [
229 int 9, label %then1
230 int 10, label %then2
231 ]
232
233then1:
234 ret void
235
236then2:
237 ret void
238
239default:
240 %B = seteq int %x, 9
241 br bool %B, label %oops, label %then1
242
243oops:
244 call void (...)* %fail( )
245 ret void
246}
247
248void %select1(int %x) {
249entry:
250 %A = seteq int %x, 10
251 %B = select bool %A, int 1, int 2
252 %C = seteq int %B, 1
253 br bool %C, label %then, label %else
254
255then:
256 br bool %A, label %return, label %oops
257
258else:
259 br bool %A, label %oops, label %return
260
261oops:
262 call void (...)* %fail( )
263 ret void
264
265return:
266 ret void
267}
268
269void %select2(int %x) {
270entry:
271 %A = seteq int %x, 10
272 %B = select bool %A, int 1, int 2
273 %C = seteq int %B, 1
274 br bool %A, label %then, label %else
275
276then:
277 br bool %C, label %return, label %oops
278
279else:
280 br bool %C, label %oops, label %return
281
282oops:
283 call void (...)* %fail( )
284 ret void
285
286return:
287 ret void
288}
Nick Lewyckyb2e8ae12006-08-28 22:44:55 +0000289
290declare void %fail(...)
291
292declare void %pass(...)