1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -constraint-elimination -S %s | FileCheck %s
3 ; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
5 ; Test cases where both the true and false successors reach the same block,
6 ; dominated by one of them.
10 define i32 @test1(i32 %x) {
11 ; CHECK-LABEL: @test1(
13 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 10
14 ; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
16 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 10
17 ; CHECK-NEXT: call void @use(i1 true)
18 ; CHECK-NEXT: br label [[BB2]]
20 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[X]], 10
21 ; CHECK-NEXT: call void @use(i1 [[C_3]])
22 ; CHECK-NEXT: ret i32 20
25 %c.1 = icmp ule i32 %x, 10
26 br i1 %c.1, label %bb1, label %bb2
29 %c.2 = icmp ule i32 %x, 10
30 call void @use(i1 %c.2)
34 %c.3 = icmp ugt i32 %x, 10
35 call void @use(i1 %c.3)
40 define i32 @test2(i32 %x) {
41 ; CHECK-LABEL: @test2(
43 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 10
44 ; CHECK-NEXT: br i1 [[C_1]], label [[BB2:%.*]], label [[BB1:%.*]]
46 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i32 [[X]], 10
47 ; CHECK-NEXT: call void @use(i1 [[C_2]])
48 ; CHECK-NEXT: ret i32 20
50 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i32 [[X]], 10
51 ; CHECK-NEXT: call void @use(i1 true)
52 ; CHECK-NEXT: br label [[BB1]]
55 %c.1 = icmp ule i32 %x, 10
56 br i1 %c.1, label %bb2, label %bb1
59 %c.2 = icmp ugt i32 %x, 10
60 call void @use(i1 %c.2)
64 %c.3 = icmp ule i32 %x, 10
65 call void @use(i1 %c.3)
70 ; Test cases where the true/false successors are not domianted by the conditional branching block.
71 define i32 @test3(i32 %x, i1 %c) {
72 ; CHECK-LABEL: @test3(
74 ; CHECK-NEXT: br i1 [[C:%.*]], label [[BB_COND:%.*]], label [[BB1:%.*]]
76 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 10
77 ; CHECK-NEXT: br i1 [[C_1]], label [[BB1]], label [[BB2:%.*]]
79 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 10
80 ; CHECK-NEXT: call void @use(i1 [[C_2]])
81 ; CHECK-NEXT: ret i32 10
83 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[X]], 10
84 ; CHECK-NEXT: call void @use(i1 true)
85 ; CHECK-NEXT: ret i32 20
88 br i1 %c, label %bb.cond, label %bb1
91 %c.1 = icmp ule i32 %x, 10
92 br i1 %c.1, label %bb1, label %bb2
95 %c.2 = icmp ule i32 %x, 10
96 call void @use(i1 %c.2)
100 %c.3 = icmp ugt i32 %x, 10
101 call void @use(i1 %c.3)
105 define i32 @test4(i32 %x, i1 %c) {
106 ; CHECK-LABEL: @test4(
108 ; CHECK-NEXT: br i1 [[C:%.*]], label [[BB_COND:%.*]], label [[BB2:%.*]]
110 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 10
111 ; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2]]
113 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 10
114 ; CHECK-NEXT: call void @use(i1 true)
115 ; CHECK-NEXT: ret i32 10
117 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[X]], 10
118 ; CHECK-NEXT: call void @use(i1 [[C_3]])
119 ; CHECK-NEXT: ret i32 20
122 br i1 %c, label %bb.cond, label %bb2
125 %c.1 = icmp ule i32 %x, 10
126 br i1 %c.1, label %bb1, label %bb2
129 %c.2 = icmp ule i32 %x, 10
130 call void @use(i1 %c.2)
134 %c.3 = icmp ugt i32 %x, 10
135 call void @use(i1 %c.3)
140 define void @test_cond_from_preheader(i32 %x, i1 %c) {
141 ; CHECK-LABEL: @test_cond_from_preheader(
143 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[BB2:%.*]]
145 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 10
146 ; CHECK-NEXT: br i1 [[C_1]], label [[LOOP:%.*]], label [[BB2]]
148 ; CHECK-NEXT: [[T_1:%.*]] = icmp ule i32 [[X]], 10
149 ; CHECK-NEXT: call void @use(i1 true)
150 ; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i32 [[X]], 10
151 ; CHECK-NEXT: call void @use(i1 false)
152 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 9
153 ; CHECK-NEXT: call void @use(i1 [[C_2]])
154 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[X]], 9
155 ; CHECK-NEXT: call void @use(i1 [[C_3]])
156 ; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
158 ; CHECK-NEXT: [[C_4:%.*]] = icmp ule i32 [[X]], 10
159 ; CHECK-NEXT: call void @use(i1 true)
160 ; CHECK-NEXT: ret void
162 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[X]], 10
163 ; CHECK-NEXT: call void @use(i1 [[C_5]])
164 ; CHECK-NEXT: ret void
167 br i1 %c, label %pre, label %bb2
170 %c.1 = icmp ule i32 %x, 10
171 br i1 %c.1, label %loop, label %bb2
174 %t.1 = icmp ule i32 %x, 10
175 call void @use(i1 %t.1)
176 %f.1 = icmp ugt i32 %x, 10
177 call void @use(i1 %f.1)
179 %c.2 = icmp ule i32 %x, 9
180 call void @use(i1 %c.2)
181 %c.3 = icmp ugt i32 %x, 9
182 call void @use(i1 %c.3)
184 br i1 true, label %exit, label %loop
187 %c.4 = icmp ule i32 %x, 10
188 call void @use(i1 %c.4)
192 %c.5 = icmp ugt i32 %x, 10
193 call void @use(i1 %c.5)
197 define void @test_cond_from_preheader_successors_flipped(i32 %x, i1 %c) {
198 ; CHECK-LABEL: @test_cond_from_preheader_successors_flipped(
200 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[BB2:%.*]]
202 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 10
203 ; CHECK-NEXT: br i1 [[C_1]], label [[BB2]], label [[LOOP:%.*]]
205 ; CHECK-NEXT: [[F_1:%.*]] = icmp ule i32 [[X]], 10
206 ; CHECK-NEXT: call void @use(i1 false)
207 ; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i32 [[X]], 10
208 ; CHECK-NEXT: call void @use(i1 true)
209 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 11
210 ; CHECK-NEXT: call void @use(i1 [[C_2]])
211 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[X]], 11
212 ; CHECK-NEXT: call void @use(i1 [[C_3]])
213 ; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
215 ; CHECK-NEXT: [[F_2:%.*]] = icmp ule i32 [[X]], 10
216 ; CHECK-NEXT: call void @use(i1 false)
217 ; CHECK-NEXT: ret void
219 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[X]], 10
220 ; CHECK-NEXT: call void @use(i1 [[C_5]])
221 ; CHECK-NEXT: ret void
224 br i1 %c, label %pre, label %bb2
227 %c.1 = icmp ule i32 %x, 10
228 br i1 %c.1, label %bb2, label %loop
231 %f.1 = icmp ule i32 %x, 10
232 call void @use(i1 %f.1)
233 %t.1 = icmp ugt i32 %x, 10
234 call void @use(i1 %t.1)
236 %c.2 = icmp ule i32 %x, 11
237 call void @use(i1 %c.2)
238 %c.3 = icmp ugt i32 %x, 11
239 call void @use(i1 %c.3)
241 br i1 true, label %exit, label %loop
244 %f.2 = icmp ule i32 %x, 10
245 call void @use(i1 %f.2)
249 %c.5 = icmp ugt i32 %x, 10
250 call void @use(i1 %c.5)
254 define void @test_cond_from_preheader_and(i32 %x, i32 %y, i1 %c) {
255 ; CHECK-LABEL: @test_cond_from_preheader_and(
257 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
259 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[Y:%.*]], 10
260 ; CHECK-NEXT: call void @use(i1 [[C_5]])
261 ; CHECK-NEXT: ret void
263 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i32 [[X:%.*]], 10
264 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i32 [[Y]], 99
265 ; CHECK-NEXT: [[AND:%.*]] = and i1 [[X_1]], [[Y_1]]
266 ; CHECK-NEXT: br i1 [[AND]], label [[LOOP:%.*]], label [[EXIT_1:%.*]]
268 ; CHECK-NEXT: [[T_1:%.*]] = icmp ule i32 [[X]], 10
269 ; CHECK-NEXT: call void @use(i1 true)
270 ; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i32 [[X]], 10
271 ; CHECK-NEXT: call void @use(i1 false)
272 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X]], 9
273 ; CHECK-NEXT: call void @use(i1 [[C_1]])
274 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i32 [[X]], 9
275 ; CHECK-NEXT: call void @use(i1 [[C_2]])
276 ; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i32 [[Y]], 99
277 ; CHECK-NEXT: call void @use(i1 true)
278 ; CHECK-NEXT: [[F_2:%.*]] = icmp ule i32 [[Y]], 99
279 ; CHECK-NEXT: call void @use(i1 false)
280 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[Y]], 100
281 ; CHECK-NEXT: call void @use(i1 [[C_3]])
282 ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i32 [[Y]], 100
283 ; CHECK-NEXT: call void @use(i1 [[C_4]])
284 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
286 ; CHECK-NEXT: [[C_6:%.*]] = icmp ugt i32 [[Y]], 10
287 ; CHECK-NEXT: call void @use(i1 [[C_6]])
288 ; CHECK-NEXT: ret void
291 br i1 %c, label %pre, label %exit
294 %c.5 = icmp ugt i32 %y, 10
295 call void @use(i1 %c.5)
299 %x.1 = icmp ule i32 %x, 10
300 %y.1 = icmp ugt i32 %y, 99
301 %and = and i1 %x.1, %y.1
302 br i1 %and, label %loop, label %exit.1
305 %t.1 = icmp ule i32 %x, 10
306 call void @use(i1 %t.1)
307 %f.1 = icmp ugt i32 %x, 10
308 call void @use(i1 %f.1)
309 %c.1 = icmp ule i32 %x, 9
310 call void @use(i1 %c.1)
311 %c.2 = icmp ugt i32 %x, 9
312 call void @use(i1 %c.2)
315 %t.2 = icmp ugt i32 %y, 99
316 call void @use(i1 %t.2)
317 %f.2 = icmp ule i32 %y, 99
318 call void @use(i1 %f.2)
320 %c.3 = icmp ugt i32 %y, 100
321 call void @use(i1 %c.3)
322 %c.4 = icmp ugt i32 %y, 100
323 call void @use(i1 %c.4)
325 br i1 true, label %exit, label %loop
328 %c.6 = icmp ugt i32 %y, 10
329 call void @use(i1 %c.6)
334 define void @test_cond_from_preheader_and_successors_flipped(i32 %x, i32 %y, i1 %c) {
335 ; CHECK-LABEL: @test_cond_from_preheader_and_successors_flipped(
337 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
339 ; CHECK-NEXT: [[C_9:%.*]] = icmp ugt i32 [[Y:%.*]], 10
340 ; CHECK-NEXT: call void @use(i1 [[C_9]])
341 ; CHECK-NEXT: ret void
343 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i32 [[X:%.*]], 10
344 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i32 [[Y]], 99
345 ; CHECK-NEXT: [[AND:%.*]] = and i1 [[X_1]], [[Y_1]]
346 ; CHECK-NEXT: br i1 [[AND]], label [[EXIT_1:%.*]], label [[LOOP:%.*]]
348 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X]], 10
349 ; CHECK-NEXT: call void @use(i1 [[C_1]])
350 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i32 [[X]], 10
351 ; CHECK-NEXT: call void @use(i1 [[C_2]])
352 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i32 [[X]], 9
353 ; CHECK-NEXT: call void @use(i1 [[C_3]])
354 ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i32 [[X]], 9
355 ; CHECK-NEXT: call void @use(i1 [[C_4]])
356 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[Y]], 99
357 ; CHECK-NEXT: call void @use(i1 [[C_5]])
358 ; CHECK-NEXT: [[C_6:%.*]] = icmp ule i32 [[Y]], 99
359 ; CHECK-NEXT: call void @use(i1 [[C_6]])
360 ; CHECK-NEXT: [[C_7:%.*]] = icmp ugt i32 [[Y]], 100
361 ; CHECK-NEXT: call void @use(i1 [[C_7]])
362 ; CHECK-NEXT: [[C_8:%.*]] = icmp ugt i32 [[Y]], 100
363 ; CHECK-NEXT: call void @use(i1 [[C_8]])
364 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
366 ; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i32 [[Y]], 10
367 ; CHECK-NEXT: call void @use(i1 true)
368 ; CHECK-NEXT: ret void
371 br i1 %c, label %pre, label %exit
374 %c.9 = icmp ugt i32 %y, 10
375 call void @use(i1 %c.9)
379 %x.1 = icmp ule i32 %x, 10
380 %y.1 = icmp ugt i32 %y, 99
381 %and = and i1 %x.1, %y.1
382 br i1 %and, label %exit.1, label %loop
385 %c.1 = icmp ule i32 %x, 10
386 call void @use(i1 %c.1)
387 %c.2 = icmp ugt i32 %x, 10
388 call void @use(i1 %c.2)
389 %c.3 = icmp ule i32 %x, 9
390 call void @use(i1 %c.3)
391 %c.4 = icmp ugt i32 %x, 9
392 call void @use(i1 %c.4)
395 %c.5 = icmp ugt i32 %y, 99
396 call void @use(i1 %c.5)
397 %c.6 = icmp ule i32 %y, 99
398 call void @use(i1 %c.6)
400 %c.7 = icmp ugt i32 %y, 100
401 call void @use(i1 %c.7)
402 %c.8 = icmp ugt i32 %y, 100
403 call void @use(i1 %c.8)
405 br i1 true, label %exit, label %loop
408 %t.1 = icmp ugt i32 %y, 10
409 call void @use(i1 %t.1)
413 define void @test_cond_from_preheader_or(i32 %x, i32 %y, i1 %c) {
414 ; CHECK-LABEL: @test_cond_from_preheader_or(
416 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
418 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[Y:%.*]], 10
419 ; CHECK-NEXT: call void @use(i1 [[C_5]])
420 ; CHECK-NEXT: ret void
422 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i32 [[X:%.*]], 10
423 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i32 [[Y]], 99
424 ; CHECK-NEXT: [[OR:%.*]] = or i1 [[X_1]], [[Y_1]]
425 ; CHECK-NEXT: br i1 [[OR]], label [[EXIT_1:%.*]], label [[LOOP:%.*]]
427 ; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i32 [[X]], 10
428 ; CHECK-NEXT: call void @use(i1 true)
429 ; CHECK-NEXT: [[F_1:%.*]] = icmp ule i32 [[X]], 10
430 ; CHECK-NEXT: call void @use(i1 false)
431 ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i32 [[X]], 11
432 ; CHECK-NEXT: call void @use(i1 [[C_1]])
433 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 11
434 ; CHECK-NEXT: call void @use(i1 [[C_2]])
435 ; CHECK-NEXT: [[T_2:%.*]] = icmp ule i32 [[Y]], 99
436 ; CHECK-NEXT: call void @use(i1 true)
437 ; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i32 [[Y]], 99
438 ; CHECK-NEXT: call void @use(i1 false)
439 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i32 [[Y]], 98
440 ; CHECK-NEXT: call void @use(i1 [[C_3]])
441 ; CHECK-NEXT: [[C_4:%.*]] = icmp ule i32 [[Y]], 98
442 ; CHECK-NEXT: call void @use(i1 [[C_4]])
443 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
445 ; CHECK-NEXT: [[C_6:%.*]] = icmp ule i32 [[Y]], 100
446 ; CHECK-NEXT: call void @use(i1 [[C_6]])
447 ; CHECK-NEXT: ret void
450 br i1 %c, label %pre, label %exit
453 %c.5 = icmp ugt i32 %y, 10
454 call void @use(i1 %c.5)
458 %x.1 = icmp ule i32 %x, 10
459 %y.1 = icmp ugt i32 %y, 99
460 %or = or i1 %x.1, %y.1
461 br i1 %or, label %exit.1, label %loop
464 %t.1 = icmp ugt i32 %x, 10
465 call void @use(i1 %t.1)
466 %f.1 = icmp ule i32 %x, 10
467 call void @use(i1 %f.1)
468 %c.1 = icmp ugt i32 %x, 11
469 call void @use(i1 %c.1)
470 %c.2 = icmp ule i32 %x, 11
471 call void @use(i1 %c.2)
474 %t.2 = icmp ule i32 %y, 99
475 call void @use(i1 %t.2)
476 %f.2 = icmp ugt i32 %y, 99
477 call void @use(i1 %f.2)
479 %c.3 = icmp ule i32 %y, 98
480 call void @use(i1 %c.3)
481 %c.4 = icmp ule i32 %y, 98
482 call void @use(i1 %c.4)
484 br i1 true, label %exit, label %loop
487 %c.6 = icmp ule i32 %y, 100
488 call void @use(i1 %c.6)
492 define void @test_cond_from_preheader_or_successor_flipped(i32 %x, i32 %y, i1 %c) {
493 ; CHECK-LABEL: @test_cond_from_preheader_or_successor_flipped(
495 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
497 ; CHECK-NEXT: [[C_9:%.*]] = icmp ugt i32 [[Y:%.*]], 10
498 ; CHECK-NEXT: call void @use(i1 [[C_9]])
499 ; CHECK-NEXT: ret void
501 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i32 [[X:%.*]], 10
502 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i32 [[Y]], 99
503 ; CHECK-NEXT: [[OR:%.*]] = or i1 [[X_1]], [[Y_1]]
504 ; CHECK-NEXT: br i1 [[OR]], label [[LOOP:%.*]], label [[EXIT_1:%.*]]
506 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X]], 10
507 ; CHECK-NEXT: call void @use(i1 [[C_1]])
508 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i32 [[X]], 10
509 ; CHECK-NEXT: call void @use(i1 [[C_2]])
510 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i32 [[X]], 9
511 ; CHECK-NEXT: call void @use(i1 [[C_3]])
512 ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i32 [[X]], 9
513 ; CHECK-NEXT: call void @use(i1 [[C_4]])
514 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[Y]], 99
515 ; CHECK-NEXT: call void @use(i1 [[C_5]])
516 ; CHECK-NEXT: [[C_6:%.*]] = icmp ule i32 [[Y]], 99
517 ; CHECK-NEXT: call void @use(i1 [[C_6]])
518 ; CHECK-NEXT: [[C_7:%.*]] = icmp ugt i32 [[Y]], 100
519 ; CHECK-NEXT: call void @use(i1 [[C_7]])
520 ; CHECK-NEXT: [[C_8:%.*]] = icmp ugt i32 [[Y]], 100
521 ; CHECK-NEXT: call void @use(i1 [[C_8]])
522 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
524 ; CHECK-NEXT: [[T_1:%.*]] = icmp ule i32 [[Y]], 100
525 ; CHECK-NEXT: call void @use(i1 true)
526 ; CHECK-NEXT: ret void
529 br i1 %c, label %pre, label %exit
532 %c.9 = icmp ugt i32 %y, 10
533 call void @use(i1 %c.9)
537 %x.1 = icmp ule i32 %x, 10
538 %y.1 = icmp ugt i32 %y, 99
539 %or = or i1 %x.1, %y.1
540 br i1 %or, label %loop, label %exit.1
543 %c.1 = icmp ule i32 %x, 10
544 call void @use(i1 %c.1)
545 %c.2 = icmp ugt i32 %x, 10
546 call void @use(i1 %c.2)
547 %c.3 = icmp ule i32 %x, 9
548 call void @use(i1 %c.3)
549 %c.4 = icmp ugt i32 %x, 9
550 call void @use(i1 %c.4)
552 %c.5 = icmp ugt i32 %y, 99
553 call void @use(i1 %c.5)
554 %c.6 = icmp ule i32 %y, 99
555 call void @use(i1 %c.6)
557 %c.7 = icmp ugt i32 %y, 100
558 call void @use(i1 %c.7)
559 %c.8 = icmp ugt i32 %y, 100
560 call void @use(i1 %c.8)
562 br i1 true, label %exit, label %loop
565 %t.1 = icmp ule i32 %y, 100
566 call void @use(i1 %t.1)