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