1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
4 ; Test cases where both the true and false successors reach the same block,
5 ; dominated by one of them.
9 define i1 @test1(i8 %x) {
10 ; CHECK-LABEL: @test1(
12 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
13 ; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2:%.*]]
15 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 10
16 ; CHECK-NEXT: call void @use(i1 true)
17 ; CHECK-NEXT: br label [[BB2]]
19 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 10
20 ; CHECK-NEXT: ret i1 [[C_3]]
23 %c.1 = icmp ule i8 %x, 10
24 br i1 %c.1, label %bb1, label %bb2
27 %c.2 = icmp ule i8 %x, 10
28 call void @use(i1 %c.2)
32 %c.3 = icmp ugt i8 %x, 10
37 define i1 @test2(i8 %x) {
38 ; CHECK-LABEL: @test2(
40 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
41 ; CHECK-NEXT: br i1 [[C_1]], label [[BB2:%.*]], label [[BB1:%.*]]
43 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 10
44 ; CHECK-NEXT: ret i1 [[C_2]]
46 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i8 [[X]], 10
47 ; CHECK-NEXT: call void @use(i1 true)
48 ; CHECK-NEXT: br label [[BB1]]
51 %c.1 = icmp ule i8 %x, 10
52 br i1 %c.1, label %bb2, label %bb1
55 %c.2 = icmp ugt i8 %x, 10
59 %c.3 = icmp ule i8 %x, 10
60 call void @use(i1 %c.3)
65 ; Test cases where the true/false successors are not domianted by the conditional branching block.
66 define i1 @test3(i8 %x, i1 %c) {
67 ; CHECK-LABEL: @test3(
69 ; CHECK-NEXT: br i1 [[C:%.*]], label [[BB_COND:%.*]], label [[BB1:%.*]]
71 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
72 ; CHECK-NEXT: br i1 [[C_1]], label [[BB1]], label [[BB2:%.*]]
74 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 10
75 ; CHECK-NEXT: ret i1 [[C_2]]
77 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 10
78 ; CHECK-NEXT: ret i1 true
81 br i1 %c, label %bb.cond, label %bb1
84 %c.1 = icmp ule i8 %x, 10
85 br i1 %c.1, label %bb1, label %bb2
88 %c.2 = icmp ule i8 %x, 10
92 %c.3 = icmp ugt i8 %x, 10
96 define i1 @test4(i8 %x, i1 %c) {
97 ; CHECK-LABEL: @test4(
99 ; CHECK-NEXT: br i1 [[C:%.*]], label [[BB_COND:%.*]], label [[BB2:%.*]]
101 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
102 ; CHECK-NEXT: br i1 [[C_1]], label [[BB1:%.*]], label [[BB2]]
104 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 10
105 ; CHECK-NEXT: ret i1 true
107 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 10
108 ; CHECK-NEXT: ret i1 [[C_3]]
111 br i1 %c, label %bb.cond, label %bb2
114 %c.1 = icmp ule i8 %x, 10
115 br i1 %c.1, label %bb1, label %bb2
118 %c.2 = icmp ule i8 %x, 10
122 %c.3 = icmp ugt i8 %x, 10
127 define i1 @test_cond_from_preheader(i8 %x, i1 %c) {
128 ; CHECK-LABEL: @test_cond_from_preheader(
130 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[BB2:%.*]]
132 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
133 ; CHECK-NEXT: br i1 [[C_1]], label [[LOOP:%.*]], label [[BB2]]
135 ; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[X]], 10
136 ; CHECK-NEXT: call void @use(i1 true)
137 ; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[X]], 10
138 ; CHECK-NEXT: call void @use(i1 false)
139 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 9
140 ; CHECK-NEXT: call void @use(i1 [[C_2]])
141 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 9
142 ; CHECK-NEXT: call void @use(i1 [[C_3]])
143 ; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
145 ; CHECK-NEXT: [[C_4:%.*]] = icmp ule i8 [[X]], 10
146 ; CHECK-NEXT: ret i1 true
148 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[X]], 10
149 ; CHECK-NEXT: ret i1 [[C_5]]
152 br i1 %c, label %pre, label %bb2
155 %c.1 = icmp ule i8 %x, 10
156 br i1 %c.1, label %loop, label %bb2
159 %t.1 = icmp ule i8 %x, 10
160 call void @use(i1 %t.1)
161 %f.1 = icmp ugt i8 %x, 10
162 call void @use(i1 %f.1)
164 %c.2 = icmp ule i8 %x, 9
165 call void @use(i1 %c.2)
166 %c.3 = icmp ugt i8 %x, 9
167 call void @use(i1 %c.3)
169 br i1 true, label %exit, label %loop
172 %c.4 = icmp ule i8 %x, 10
176 %c.5 = icmp ugt i8 %x, 10
180 define i1 @test_cond_from_preheader_successors_flipped(i8 %x, i1 %c) {
181 ; CHECK-LABEL: @test_cond_from_preheader_successors_flipped(
183 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[BB2:%.*]]
185 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
186 ; CHECK-NEXT: br i1 [[C_1]], label [[BB2]], label [[LOOP:%.*]]
188 ; CHECK-NEXT: [[F_1:%.*]] = icmp ule i8 [[X]], 10
189 ; CHECK-NEXT: call void @use(i1 false)
190 ; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 10
191 ; CHECK-NEXT: call void @use(i1 true)
192 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 11
193 ; CHECK-NEXT: call void @use(i1 [[C_2]])
194 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 11
195 ; CHECK-NEXT: call void @use(i1 [[C_3]])
196 ; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[LOOP]]
198 ; CHECK-NEXT: [[F_2:%.*]] = icmp ule i8 [[X]], 10
199 ; CHECK-NEXT: ret i1 false
201 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[X]], 10
202 ; CHECK-NEXT: ret i1 [[C_5]]
205 br i1 %c, label %pre, label %bb2
208 %c.1 = icmp ule i8 %x, 10
209 br i1 %c.1, label %bb2, label %loop
212 %f.1 = icmp ule i8 %x, 10
213 call void @use(i1 %f.1)
214 %t.1 = icmp ugt i8 %x, 10
215 call void @use(i1 %t.1)
217 %c.2 = icmp ule i8 %x, 11
218 call void @use(i1 %c.2)
219 %c.3 = icmp ugt i8 %x, 11
220 call void @use(i1 %c.3)
222 br i1 true, label %exit, label %loop
225 %f.2 = icmp ule i8 %x, 10
229 %c.5 = icmp ugt i8 %x, 10
233 define i1 @test_cond_from_preheader_and(i8 %x, i8 %y, i1 %c) {
234 ; CHECK-LABEL: @test_cond_from_preheader_and(
236 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
238 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[Y:%.*]], 10
239 ; CHECK-NEXT: ret i1 [[C_5]]
241 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i8 [[X:%.*]], 10
242 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i8 [[Y]], 99
243 ; CHECK-NEXT: [[AND:%.*]] = and i1 [[X_1]], [[Y_1]]
244 ; CHECK-NEXT: br i1 [[AND]], label [[LOOP:%.*]], label [[EXIT_1:%.*]]
246 ; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[X]], 10
247 ; CHECK-NEXT: [[F_1:%.*]] = icmp ugt i8 [[X]], 10
248 ; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, false
249 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X]], 9
250 ; CHECK-NEXT: [[R_2:%.*]] = xor i1 [[R_1]], [[C_1]]
251 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 9
252 ; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_2]]
253 ; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i8 [[Y]], 99
254 ; CHECK-NEXT: [[R_4:%.*]] = xor i1 [[R_3]], true
255 ; CHECK-NEXT: [[F_2:%.*]] = icmp ule i8 [[Y]], 99
256 ; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], false
257 ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[Y]], 100
258 ; CHECK-NEXT: [[R_6:%.*]] = xor i1 [[R_5]], [[C_3]]
259 ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i8 [[Y]], 100
260 ; CHECK-NEXT: [[R_7:%.*]] = xor i1 [[R_6]], [[C_4]]
261 ; CHECK-NEXT: call void @use(i1 [[R_7]])
262 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
264 ; CHECK-NEXT: [[C_6:%.*]] = icmp ugt i8 [[Y]], 10
265 ; CHECK-NEXT: ret i1 [[C_6]]
268 br i1 %c, label %pre, label %exit
271 %c.5 = icmp ugt i8 %y, 10
275 %x.1 = icmp ule i8 %x, 10
276 %y.1 = icmp ugt i8 %y, 99
277 %and = and i1 %x.1, %y.1
278 br i1 %and, label %loop, label %exit.1
281 %t.1 = icmp ule i8 %x, 10
282 %f.1 = icmp ugt i8 %x, 10
283 %r.1 = xor i1 %t.1, %f.1
285 %c.1 = icmp ule i8 %x, 9
286 %r.2 = xor i1 %r.1, %c.1
288 %c.2 = icmp ugt i8 %x, 9
289 %r.3 = xor i1 %r.2, %c.2
291 %t.2 = icmp ugt i8 %y, 99
292 %r.4 = xor i1 %r.3, %t.2
294 %f.2 = icmp ule i8 %y, 99
295 %r.5 = xor i1 %r.4, %f.2
297 %c.3 = icmp ugt i8 %y, 100
298 %r.6 = xor i1 %r.5, %c.3
300 %c.4 = icmp ugt i8 %y, 100
301 %r.7 = xor i1 %r.6, %c.4
302 call void @use(i1 %r.7)
304 br i1 true, label %exit, label %loop
307 %c.6 = icmp ugt i8 %y, 10
312 define i1 @test_cond_from_preheader_and_successors_flipped(i8 %x, i8 %y, i1 %c) {
313 ; CHECK-LABEL: @test_cond_from_preheader_and_successors_flipped(
315 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
317 ; CHECK-NEXT: [[C_9:%.*]] = icmp ugt i8 [[Y:%.*]], 10
318 ; CHECK-NEXT: ret i1 [[C_9]]
320 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i8 [[X:%.*]], 10
321 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i8 [[Y]], 99
322 ; CHECK-NEXT: [[AND:%.*]] = and i1 [[X_1]], [[Y_1]]
323 ; CHECK-NEXT: br i1 [[AND]], label [[EXIT_1:%.*]], label [[LOOP:%.*]]
325 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X]], 10
326 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 10
327 ; CHECK-NEXT: [[R_1:%.*]] = xor i1 [[C_1]], [[C_2]]
328 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i8 [[X]], 9
329 ; CHECK-NEXT: [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
330 ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i8 [[X]], 9
331 ; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
332 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[Y]], 99
333 ; CHECK-NEXT: [[R_4:%.*]] = xor i1 [[R_3]], [[C_5]]
334 ; CHECK-NEXT: [[C_6:%.*]] = icmp ule i8 [[Y]], 99
335 ; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], [[C_6]]
336 ; CHECK-NEXT: [[C_7:%.*]] = icmp ugt i8 [[Y]], 100
337 ; CHECK-NEXT: [[R_6:%.*]] = xor i1 [[R_5]], [[C_7]]
338 ; CHECK-NEXT: [[C_8:%.*]] = icmp ugt i8 [[Y]], 100
339 ; CHECK-NEXT: [[R_7:%.*]] = xor i1 [[R_6]], [[C_8]]
340 ; CHECK-NEXT: call void @use(i1 [[R_7]])
341 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
343 ; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[Y]], 10
344 ; CHECK-NEXT: ret i1 true
347 br i1 %c, label %pre, label %exit
350 %c.9 = icmp ugt i8 %y, 10
354 %x.1 = icmp ule i8 %x, 10
355 %y.1 = icmp ugt i8 %y, 99
356 %and = and i1 %x.1, %y.1
357 br i1 %and, label %exit.1, label %loop
360 %c.1 = icmp ule i8 %x, 10
361 %c.2 = icmp ugt i8 %x, 10
362 %r.1 = xor i1 %c.1, %c.2
363 %c.3 = icmp ule i8 %x, 9
364 %r.2 = xor i1 %r.1, %c.3
365 %c.4 = icmp ugt i8 %x, 9
366 %r.3 = xor i1 %r.2, %c.4
368 %c.5 = icmp ugt i8 %y, 99
369 %r.4 = xor i1 %r.3, %c.5
370 %c.6 = icmp ule i8 %y, 99
371 %r.5 = xor i1 %r.4, %c.6
373 %c.7 = icmp ugt i8 %y, 100
374 %r.6 = xor i1 %r.5, %c.7
375 %c.8 = icmp ugt i8 %y, 100
376 %r.7 = xor i1 %r.6, %c.8
377 call void @use(i1 %r.7)
379 br i1 true, label %exit, label %loop
382 %t.1 = icmp ugt i8 %y, 10
386 define i1 @test_cond_from_preheader_or(i8 %x, i8 %y, i1 %c) {
387 ; CHECK-LABEL: @test_cond_from_preheader_or(
389 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
391 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[Y:%.*]], 10
392 ; CHECK-NEXT: ret i1 [[C_5]]
394 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i8 [[X:%.*]], 10
395 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i8 [[Y]], 99
396 ; CHECK-NEXT: [[OR:%.*]] = or i1 [[X_1]], [[Y_1]]
397 ; CHECK-NEXT: br i1 [[OR]], label [[EXIT_1:%.*]], label [[LOOP:%.*]]
399 ; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[X]], 10
400 ; CHECK-NEXT: [[F_1:%.*]] = icmp ule i8 [[X]], 10
401 ; CHECK-NEXT: [[R_1:%.*]] = xor i1 true, false
402 ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X]], 11
403 ; CHECK-NEXT: [[R_2:%.*]] = xor i1 [[R_1]], [[C_1]]
404 ; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 11
405 ; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_2]]
406 ; CHECK-NEXT: [[T_2:%.*]] = icmp ule i8 [[Y]], 99
407 ; CHECK-NEXT: [[R_4:%.*]] = xor i1 [[R_3]], true
408 ; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[Y]], 99
409 ; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], false
410 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i8 [[Y]], 98
411 ; CHECK-NEXT: [[R_6:%.*]] = xor i1 [[R_5]], [[C_3]]
412 ; CHECK-NEXT: [[C_4:%.*]] = icmp ule i8 [[Y]], 98
413 ; CHECK-NEXT: [[R_7:%.*]] = xor i1 [[R_6]], [[C_4]]
414 ; CHECK-NEXT: call void @use(i1 [[R_7]])
415 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
417 ; CHECK-NEXT: [[C_6:%.*]] = icmp ule i8 [[Y]], 100
418 ; CHECK-NEXT: ret i1 [[C_6]]
421 br i1 %c, label %pre, label %exit
424 %c.5 = icmp ugt i8 %y, 10
428 %x.1 = icmp ule i8 %x, 10
429 %y.1 = icmp ugt i8 %y, 99
430 %or = or i1 %x.1, %y.1
431 br i1 %or, label %exit.1, label %loop
434 %t.1 = icmp ugt i8 %x, 10
435 %f.1 = icmp ule i8 %x, 10
436 %r.1 = xor i1 %t.1, %f.1
437 %c.1 = icmp ugt i8 %x, 11
438 %r.2 = xor i1 %r.1, %c.1
439 %c.2 = icmp ule i8 %x, 11
440 %r.3 = xor i1 %r.2, %c.2
442 %t.2 = icmp ule i8 %y, 99
443 %r.4 = xor i1 %r.3, %t.2
444 %f.2 = icmp ugt i8 %y, 99
445 %r.5 = xor i1 %r.4, %f.2
447 %c.3 = icmp ule i8 %y, 98
448 %r.6 = xor i1 %r.5, %c.3
449 %c.4 = icmp ule i8 %y, 98
450 %r.7 = xor i1 %r.6, %c.4
451 call void @use(i1 %r.7)
453 br i1 true, label %exit, label %loop
456 %c.6 = icmp ule i8 %y, 100
460 define i1 @test_cond_from_preheader_or_successor_flipped(i8 %x, i8 %y, i1 %c) {
461 ; CHECK-LABEL: @test_cond_from_preheader_or_successor_flipped(
463 ; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[EXIT:%.*]]
465 ; CHECK-NEXT: [[C_9:%.*]] = icmp ugt i8 [[Y:%.*]], 10
466 ; CHECK-NEXT: ret i1 [[C_9]]
468 ; CHECK-NEXT: [[X_1:%.*]] = icmp ule i8 [[X:%.*]], 10
469 ; CHECK-NEXT: [[Y_1:%.*]] = icmp ugt i8 [[Y]], 99
470 ; CHECK-NEXT: [[OR:%.*]] = or i1 [[X_1]], [[Y_1]]
471 ; CHECK-NEXT: br i1 [[OR]], label [[LOOP:%.*]], label [[EXIT_1:%.*]]
473 ; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X]], 10
474 ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 10
475 ; CHECK-NEXT: [[R_1:%.*]] = xor i1 [[C_1]], [[C_2]]
476 ; CHECK-NEXT: [[C_3:%.*]] = icmp ule i8 [[X]], 9
477 ; CHECK-NEXT: [[R_2:%.*]] = xor i1 [[R_1]], [[C_3]]
478 ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i8 [[X]], 9
479 ; CHECK-NEXT: [[R_3:%.*]] = xor i1 [[R_2]], [[C_4]]
480 ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[Y]], 99
481 ; CHECK-NEXT: [[R_4:%.*]] = xor i1 [[R_3]], [[C_5]]
482 ; CHECK-NEXT: [[C_6:%.*]] = icmp ule i8 [[Y]], 99
483 ; CHECK-NEXT: [[R_5:%.*]] = xor i1 [[R_4]], [[C_6]]
484 ; CHECK-NEXT: [[C_7:%.*]] = icmp ugt i8 [[Y]], 100
485 ; CHECK-NEXT: [[R_6:%.*]] = xor i1 [[R_5]], [[C_7]]
486 ; CHECK-NEXT: [[C_8:%.*]] = icmp ugt i8 [[Y]], 100
487 ; CHECK-NEXT: [[R_7:%.*]] = xor i1 [[R_6]], [[C_8]]
488 ; CHECK-NEXT: call void @use(i1 [[R_7]])
489 ; CHECK-NEXT: br i1 true, label [[EXIT]], label [[LOOP]]
491 ; CHECK-NEXT: [[T_1:%.*]] = icmp ule i8 [[Y]], 100
492 ; CHECK-NEXT: ret i1 true
495 br i1 %c, label %pre, label %exit
498 %c.9 = icmp ugt i8 %y, 10
502 %x.1 = icmp ule i8 %x, 10
503 %y.1 = icmp ugt i8 %y, 99
504 %or = or i1 %x.1, %y.1
505 br i1 %or, label %loop, label %exit.1
508 %c.1 = icmp ule i8 %x, 10
509 %c.2 = icmp ugt i8 %x, 10
510 %r.1 = xor i1 %c.1, %c.2
511 %c.3 = icmp ule i8 %x, 9
512 %r.2 = xor i1 %r.1, %c.3
513 %c.4 = icmp ugt i8 %x, 9
514 %r.3 = xor i1 %r.2, %c.4
516 %c.5 = icmp ugt i8 %y, 99
517 %r.4 = xor i1 %r.3, %c.5
518 %c.6 = icmp ule i8 %y, 99
519 %r.5 = xor i1 %r.4, %c.6
521 %c.7 = icmp ugt i8 %y, 100
522 %r.6 = xor i1 %r.5, %c.7
523 %c.8 = icmp ugt i8 %y, 100
524 %r.7 = xor i1 %r.6, %c.8
525 call void @use(i1 %r.7)
527 br i1 true, label %exit, label %loop
530 %t.1 = icmp ule i8 %y, 100