1 ; RUN: opt %s -S -simplifycfg | FileCheck %s
7 ; Test same condition with swapped operands.
8 ; void test_swapped_ops(unsigned a, unsigned b) {
10 ; if (b > a) <- always false
16 ; CHECK-LABEL: @test_swapped_ops
17 ; CHECK-NOT: call void @dead()
18 ; CHECK: call void @alive()
20 define void @test_swapped_ops(i32 %a, i32 %b) {
22 %cmp = icmp ugt i32 %a, %b
23 br i1 %cmp, label %if.then, label %if.end3
26 %cmp1 = icmp ugt i32 %b, %a
27 br i1 %cmp1, label %if.then2, label %if.end
41 ; void test_swapped_pred(unsigned a, unsigned b) {
44 ; if (b < a) <- always true; remove branch
49 ; CHECK-LABEL: @test_swapped_pred
50 ; CHECK: call void @alive()
51 ; CHECK-NEXT: call void @alive()
53 define void @test_swapped_pred(i32 %a, i32 %b) {
55 %cmp = icmp ugt i32 %a, %b
56 br i1 %cmp, label %if.then, label %if.end3
60 %cmp1 = icmp ult i32 %b, %a
61 br i1 %cmp1, label %if.then2, label %if.end3
71 ; A == B implies A == B is true.
72 ; CHECK-LABEL: @test_eq_eq
73 ; CHECK: call void @is(i1 true)
74 ; CHECK-NOT: call void @is(i1 false)
75 define void @test_eq_eq(i32 %a, i32 %b) {
76 %cmp1 = icmp eq i32 %a, %b
77 br i1 %cmp1, label %taken, label %untaken
80 %cmp2 = icmp eq i32 %a, %b
81 br i1 %cmp2, label %eq_eq_istrue, label %eq_eq_isfalse
84 call void @is(i1 true)
88 call void @is(i1 false)
95 ; A == B implies A != B is false.
96 ; CHECK-LABEL: @test_eq_ne
97 ; CHECK-NOT: call void @is(i1 true)
98 ; CHECK: call void @is(i1 false)
99 define void @test_eq_ne(i32 %a, i32 %b) {
100 %cmp1 = icmp eq i32 %a, %b
101 br i1 %cmp1, label %taken, label %untaken
104 %cmp2 = icmp ne i32 %a, %b
105 br i1 %cmp2, label %eq_ne_istrue, label %eq_ne_isfalse
108 call void @is(i1 true)
112 call void @is(i1 false)
119 ; A == B implies A >u B is false.
120 ; CHECK-LABEL: @test_eq_ugt
121 ; CHECK-NOT: call void @is(i1 true)
122 ; CHECK: call void @is(i1 false)
123 define void @test_eq_ugt(i32 %a, i32 %b) {
124 %cmp1 = icmp eq i32 %a, %b
125 br i1 %cmp1, label %taken, label %untaken
128 %cmp2 = icmp ugt i32 %a, %b
129 br i1 %cmp2, label %eq_ugt_istrue, label %eq_ugt_isfalse
132 call void @is(i1 true)
136 call void @is(i1 false)
143 ; A == B implies A >=u B is true.
144 ; CHECK-LABEL: @test_eq_uge
145 ; CHECK: call void @is(i1 true)
146 ; CHECK-NOT: call void @is(i1 false)
147 define void @test_eq_uge(i32 %a, i32 %b) {
148 %cmp1 = icmp eq i32 %a, %b
149 br i1 %cmp1, label %taken, label %untaken
152 %cmp2 = icmp uge i32 %a, %b
153 br i1 %cmp2, label %eq_uge_istrue, label %eq_uge_isfalse
156 call void @is(i1 true)
160 call void @is(i1 false)
167 ; A == B implies A <u B is false.
168 ; CHECK-LABEL: @test_eq_ult
169 ; CHECK-NOT: call void @is(i1 true)
170 ; CHECK: call void @is(i1 false)
171 define void @test_eq_ult(i32 %a, i32 %b) {
172 %cmp1 = icmp eq i32 %a, %b
173 br i1 %cmp1, label %taken, label %untaken
176 %cmp2 = icmp ult i32 %a, %b
177 br i1 %cmp2, label %eq_ult_istrue, label %eq_ult_isfalse
180 call void @is(i1 true)
184 call void @is(i1 false)
191 ; A == B implies A <=u B is true.
192 ; CHECK-LABEL: @test_eq_ule
193 ; CHECK: call void @is(i1 true)
194 ; CHECK-NOT: call void @is(i1 false)
195 define void @test_eq_ule(i32 %a, i32 %b) {
196 %cmp1 = icmp eq i32 %a, %b
197 br i1 %cmp1, label %taken, label %untaken
200 %cmp2 = icmp ule i32 %a, %b
201 br i1 %cmp2, label %eq_ule_istrue, label %eq_ule_isfalse
204 call void @is(i1 true)
208 call void @is(i1 false)
215 ; A == B implies A >s B is false.
216 ; CHECK-LABEL: @test_eq_sgt
217 ; CHECK-NOT: call void @is(i1 true)
218 ; CHECK: call void @is(i1 false)
219 define void @test_eq_sgt(i32 %a, i32 %b) {
220 %cmp1 = icmp eq i32 %a, %b
221 br i1 %cmp1, label %taken, label %untaken
224 %cmp2 = icmp sgt i32 %a, %b
225 br i1 %cmp2, label %eq_sgt_istrue, label %eq_sgt_isfalse
228 call void @is(i1 true)
232 call void @is(i1 false)
239 ; A == B implies A >=s B is true.
240 ; CHECK-LABEL: @test_eq_sge
241 ; CHECK: call void @is(i1 true)
242 ; CHECK-NOT: call void @is(i1 false)
243 define void @test_eq_sge(i32 %a, i32 %b) {
244 %cmp1 = icmp eq i32 %a, %b
245 br i1 %cmp1, label %taken, label %untaken
248 %cmp2 = icmp sge i32 %a, %b
249 br i1 %cmp2, label %eq_sge_istrue, label %eq_sge_isfalse
252 call void @is(i1 true)
256 call void @is(i1 false)
263 ; A == B implies A <s B is false.
264 ; CHECK-LABEL: @test_eq_slt
265 ; CHECK-NOT: call void @is(i1 true)
266 ; CHECK: call void @is(i1 false)
267 define void @test_eq_slt(i32 %a, i32 %b) {
268 %cmp1 = icmp eq i32 %a, %b
269 br i1 %cmp1, label %taken, label %untaken
272 %cmp2 = icmp slt i32 %a, %b
273 br i1 %cmp2, label %eq_slt_istrue, label %eq_slt_isfalse
276 call void @is(i1 true)
280 call void @is(i1 false)
287 ; A == B implies A <=s B is true.
288 ; CHECK-LABEL: @test_eq_sle
289 ; CHECK: call void @is(i1 true)
290 ; CHECK-NOT: call void @is(i1 false)
291 define void @test_eq_sle(i32 %a, i32 %b) {
292 %cmp1 = icmp eq i32 %a, %b
293 br i1 %cmp1, label %taken, label %untaken
296 %cmp2 = icmp sle i32 %a, %b
297 br i1 %cmp2, label %eq_sle_istrue, label %eq_sle_isfalse
300 call void @is(i1 true)
304 call void @is(i1 false)
311 ; A != B implies A != B is true.
312 ; CHECK-LABEL: @test_ne_ne
313 ; CHECK: call void @is(i1 true)
314 ; CHECK-NOT: call void @is(i1 false)
315 define void @test_ne_ne(i32 %a, i32 %b) {
316 %cmp1 = icmp ne i32 %a, %b
317 br i1 %cmp1, label %taken, label %untaken
320 %cmp2 = icmp ne i32 %a, %b
321 br i1 %cmp2, label %ne_ne_istrue, label %ne_ne_isfalse
324 call void @is(i1 true)
328 call void @is(i1 false)
335 ; A != B implies A >u B is unknown to be true or false.
336 ; CHECK-LABEL: @test_ne_ugt
337 ; CHECK: call void @is(i1 true)
338 ; CHECK: call void @is(i1 false)
339 define void @test_ne_ugt(i32 %a, i32 %b) {
340 %cmp1 = icmp ne i32 %a, %b
341 br i1 %cmp1, label %taken, label %untaken
344 %cmp2 = icmp ugt i32 %a, %b
345 br i1 %cmp2, label %ne_ugt_istrue, label %ne_ugt_isfalse
348 call void @is(i1 true)
352 call void @is(i1 false)
359 ; A != B implies A >=u B is unknown to be true or false.
360 ; CHECK-LABEL: @test_ne_uge
361 ; CHECK: call void @is(i1 true)
362 ; CHECK: call void @is(i1 false)
363 define void @test_ne_uge(i32 %a, i32 %b) {
364 %cmp1 = icmp ne i32 %a, %b
365 br i1 %cmp1, label %taken, label %untaken
368 %cmp2 = icmp uge i32 %a, %b
369 br i1 %cmp2, label %ne_uge_istrue, label %ne_uge_isfalse
372 call void @is(i1 true)
376 call void @is(i1 false)
383 ; A != B implies A <u B is unknown to be true or false.
384 ; CHECK-LABEL: @test_ne_ult
385 ; CHECK: call void @is(i1 true)
386 ; CHECK: call void @is(i1 false)
387 define void @test_ne_ult(i32 %a, i32 %b) {
388 %cmp1 = icmp ne i32 %a, %b
389 br i1 %cmp1, label %taken, label %untaken
392 %cmp2 = icmp ult i32 %a, %b
393 br i1 %cmp2, label %ne_ult_istrue, label %ne_ult_isfalse
396 call void @is(i1 true)
400 call void @is(i1 false)
407 ; A != B implies A <=u B is unknown to be true or false.
408 ; CHECK-LABEL: @test_ne_ule
409 ; CHECK: call void @is(i1 true)
410 ; CHECK: call void @is(i1 false)
411 define void @test_ne_ule(i32 %a, i32 %b) {
412 %cmp1 = icmp ne i32 %a, %b
413 br i1 %cmp1, label %taken, label %untaken
416 %cmp2 = icmp ule i32 %a, %b
417 br i1 %cmp2, label %ne_ule_istrue, label %ne_ule_isfalse
420 call void @is(i1 true)
424 call void @is(i1 false)
431 ; A != B implies A >s B is unknown to be true or false.
432 ; CHECK-LABEL: @test_ne_sgt
433 ; CHECK: call void @is(i1 true)
434 ; CHECK: call void @is(i1 false)
435 define void @test_ne_sgt(i32 %a, i32 %b) {
436 %cmp1 = icmp ne i32 %a, %b
437 br i1 %cmp1, label %taken, label %untaken
440 %cmp2 = icmp sgt i32 %a, %b
441 br i1 %cmp2, label %ne_sgt_istrue, label %ne_sgt_isfalse
444 call void @is(i1 true)
448 call void @is(i1 false)
455 ; A != B implies A >=s B is unknown to be true or false.
456 ; CHECK-LABEL: @test_ne_sge
457 ; CHECK: call void @is(i1 true)
458 ; CHECK: call void @is(i1 false)
459 define void @test_ne_sge(i32 %a, i32 %b) {
460 %cmp1 = icmp ne i32 %a, %b
461 br i1 %cmp1, label %taken, label %untaken
464 %cmp2 = icmp sge i32 %a, %b
465 br i1 %cmp2, label %ne_sge_istrue, label %ne_sge_isfalse
468 call void @is(i1 true)
472 call void @is(i1 false)
479 ; A != B implies A <s B is unknown to be true or false.
480 ; CHECK-LABEL: @test_ne_slt
481 ; CHECK: call void @is(i1 true)
482 ; CHECK: call void @is(i1 false)
483 define void @test_ne_slt(i32 %a, i32 %b) {
484 %cmp1 = icmp ne i32 %a, %b
485 br i1 %cmp1, label %taken, label %untaken
488 %cmp2 = icmp slt i32 %a, %b
489 br i1 %cmp2, label %ne_slt_istrue, label %ne_slt_isfalse
492 call void @is(i1 true)
496 call void @is(i1 false)
503 ; A != B implies A <=s B is unknown to be true or false.
504 ; CHECK-LABEL: @test_ne_sle
505 ; CHECK: call void @is(i1 true)
506 ; CHECK: call void @is(i1 false)
507 define void @test_ne_sle(i32 %a, i32 %b) {
508 %cmp1 = icmp ne i32 %a, %b
509 br i1 %cmp1, label %taken, label %untaken
512 %cmp2 = icmp sle i32 %a, %b
513 br i1 %cmp2, label %ne_sle_istrue, label %ne_sle_isfalse
516 call void @is(i1 true)
520 call void @is(i1 false)
527 ; A >u B implies A >u B is true.
528 ; CHECK-LABEL: @test_ugt_ugt
529 ; CHECK: call void @is(i1 true)
530 ; CHECK-NOT: call void @is(i1 false)
531 define void @test_ugt_ugt(i32 %a, i32 %b) {
532 %cmp1 = icmp ugt i32 %a, %b
533 br i1 %cmp1, label %taken, label %untaken
536 %cmp2 = icmp ugt i32 %a, %b
537 br i1 %cmp2, label %ugt_ugt_istrue, label %ugt_ugt_isfalse
540 call void @is(i1 true)
544 call void @is(i1 false)
551 ; A >u B implies A >=u B is true.
552 ; CHECK-LABEL: @test_ugt_uge
553 ; CHECK: call void @is(i1 true)
554 ; CHECK-NOT: call void @is(i1 false)
555 define void @test_ugt_uge(i32 %a, i32 %b) {
556 %cmp1 = icmp ugt i32 %a, %b
557 br i1 %cmp1, label %taken, label %untaken
560 %cmp2 = icmp uge i32 %a, %b
561 br i1 %cmp2, label %ugt_uge_istrue, label %ugt_uge_isfalse
564 call void @is(i1 true)
568 call void @is(i1 false)
575 ; A >u B implies A <u B is false.
576 ; CHECK-LABEL: @test_ugt_ult
577 ; CHECK-NOT: call void @is(i1 true)
578 ; CHECK: call void @is(i1 false)
579 define void @test_ugt_ult(i32 %a, i32 %b) {
580 %cmp1 = icmp ugt i32 %a, %b
581 br i1 %cmp1, label %taken, label %untaken
584 %cmp2 = icmp ult i32 %a, %b
585 br i1 %cmp2, label %ugt_ult_istrue, label %ugt_ult_isfalse
588 call void @is(i1 true)
592 call void @is(i1 false)
599 ; A >u B implies A <=u B is false.
600 ; CHECK-LABEL: @test_ugt_ule
601 ; CHECK-NOT: call void @is(i1 true)
602 ; CHECK: call void @is(i1 false)
603 define void @test_ugt_ule(i32 %a, i32 %b) {
604 %cmp1 = icmp ugt i32 %a, %b
605 br i1 %cmp1, label %taken, label %untaken
608 %cmp2 = icmp ule i32 %a, %b
609 br i1 %cmp2, label %ugt_ule_istrue, label %ugt_ule_isfalse
612 call void @is(i1 true)
616 call void @is(i1 false)
623 ; A >=u B implies A >=u B is true.
624 ; CHECK-LABEL: @test_uge_uge
625 ; CHECK: call void @is(i1 true)
626 ; CHECK-NOT: call void @is(i1 false)
627 define void @test_uge_uge(i32 %a, i32 %b) {
628 %cmp1 = icmp uge i32 %a, %b
629 br i1 %cmp1, label %taken, label %untaken
632 %cmp2 = icmp uge i32 %a, %b
633 br i1 %cmp2, label %uge_uge_istrue, label %uge_uge_isfalse
636 call void @is(i1 true)
640 call void @is(i1 false)
647 ; A >=u B implies A <u B is false.
648 ; CHECK-LABEL: @test_uge_ult
649 ; CHECK-NOT: call void @is(i1 true)
650 ; CHECK: call void @is(i1 false)
651 define void @test_uge_ult(i32 %a, i32 %b) {
652 %cmp1 = icmp uge i32 %a, %b
653 br i1 %cmp1, label %taken, label %untaken
656 %cmp2 = icmp ult i32 %a, %b
657 br i1 %cmp2, label %uge_ult_istrue, label %uge_ult_isfalse
660 call void @is(i1 true)
664 call void @is(i1 false)
671 ; A >=u B implies A <=u B is unknown to be true or false.
672 ; CHECK-LABEL: @test_uge_ule
673 ; CHECK: call void @is(i1 true)
674 ; CHECK: call void @is(i1 false)
675 define void @test_uge_ule(i32 %a, i32 %b) {
676 %cmp1 = icmp uge i32 %a, %b
677 br i1 %cmp1, label %taken, label %untaken
680 %cmp2 = icmp ule i32 %a, %b
681 br i1 %cmp2, label %uge_ule_istrue, label %uge_ule_isfalse
684 call void @is(i1 true)
688 call void @is(i1 false)
695 ; A <u B implies A <u B is true.
696 ; CHECK-LABEL: @test_ult_ult
697 ; CHECK: call void @is(i1 true)
698 ; CHECK-NOT: call void @is(i1 false)
699 define void @test_ult_ult(i32 %a, i32 %b) {
700 %cmp1 = icmp ult i32 %a, %b
701 br i1 %cmp1, label %taken, label %untaken
704 %cmp2 = icmp ult i32 %a, %b
705 br i1 %cmp2, label %ult_ult_istrue, label %ult_ult_isfalse
708 call void @is(i1 true)
712 call void @is(i1 false)
719 ; A <u B implies A <=u B is true.
720 ; CHECK-LABEL: @test_ult_ule
721 ; CHECK: call void @is(i1 true)
722 ; CHECK-NOT: call void @is(i1 false)
723 define void @test_ult_ule(i32 %a, i32 %b) {
724 %cmp1 = icmp ult i32 %a, %b
725 br i1 %cmp1, label %taken, label %untaken
728 %cmp2 = icmp ule i32 %a, %b
729 br i1 %cmp2, label %ult_ule_istrue, label %ult_ule_isfalse
732 call void @is(i1 true)
736 call void @is(i1 false)
743 ; A <=u B implies A <=u B is true.
744 ; CHECK-LABEL: @test_ule_ule
745 ; CHECK: call void @is(i1 true)
746 ; CHECK-NOT: call void @is(i1 false)
747 define void @test_ule_ule(i32 %a, i32 %b) {
748 %cmp1 = icmp ule i32 %a, %b
749 br i1 %cmp1, label %taken, label %untaken
752 %cmp2 = icmp ule i32 %a, %b
753 br i1 %cmp2, label %ule_ule_istrue, label %ule_ule_isfalse
756 call void @is(i1 true)
760 call void @is(i1 false)
767 ; A >s B implies A >s B is true.
768 ; CHECK-LABEL: @test_sgt_sgt
769 ; CHECK: call void @is(i1 true)
770 ; CHECK-NOT: call void @is(i1 false)
771 define void @test_sgt_sgt(i32 %a, i32 %b) {
772 %cmp1 = icmp sgt i32 %a, %b
773 br i1 %cmp1, label %taken, label %untaken
776 %cmp2 = icmp sgt i32 %a, %b
777 br i1 %cmp2, label %sgt_sgt_istrue, label %sgt_sgt_isfalse
780 call void @is(i1 true)
784 call void @is(i1 false)
791 ; A >s B implies A >=s B is true.
792 ; CHECK-LABEL: @test_sgt_sge
793 ; CHECK: call void @is(i1 true)
794 ; CHECK-NOT: call void @is(i1 false)
795 define void @test_sgt_sge(i32 %a, i32 %b) {
796 %cmp1 = icmp sgt i32 %a, %b
797 br i1 %cmp1, label %taken, label %untaken
800 %cmp2 = icmp sge i32 %a, %b
801 br i1 %cmp2, label %sgt_sge_istrue, label %sgt_sge_isfalse
804 call void @is(i1 true)
808 call void @is(i1 false)
815 ; A >s B implies A <s B is false.
816 ; CHECK-LABEL: @test_sgt_slt
817 ; CHECK-NOT: call void @is(i1 true)
818 ; CHECK: call void @is(i1 false)
819 define void @test_sgt_slt(i32 %a, i32 %b) {
820 %cmp1 = icmp sgt i32 %a, %b
821 br i1 %cmp1, label %taken, label %untaken
824 %cmp2 = icmp slt i32 %a, %b
825 br i1 %cmp2, label %sgt_slt_istrue, label %sgt_slt_isfalse
828 call void @is(i1 true)
832 call void @is(i1 false)
839 ; A >s B implies A <=s B is false.
840 ; CHECK-LABEL: @test_sgt_sle
841 ; CHECK-NOT: call void @is(i1 true)
842 ; CHECK: call void @is(i1 false)
843 define void @test_sgt_sle(i32 %a, i32 %b) {
844 %cmp1 = icmp sgt i32 %a, %b
845 br i1 %cmp1, label %taken, label %untaken
848 %cmp2 = icmp sle i32 %a, %b
849 br i1 %cmp2, label %sgt_sle_istrue, label %sgt_sle_isfalse
852 call void @is(i1 true)
856 call void @is(i1 false)
863 ; A >=s B implies A >=s B is true.
864 ; CHECK-LABEL: @test_sge_sge
865 ; CHECK: call void @is(i1 true)
866 ; CHECK-NOT: call void @is(i1 false)
867 define void @test_sge_sge(i32 %a, i32 %b) {
868 %cmp1 = icmp sge i32 %a, %b
869 br i1 %cmp1, label %taken, label %untaken
872 %cmp2 = icmp sge i32 %a, %b
873 br i1 %cmp2, label %sge_sge_istrue, label %sge_sge_isfalse
876 call void @is(i1 true)
880 call void @is(i1 false)
887 ; A >=s B implies A <s B is false.
888 ; CHECK-LABEL: @test_sge_slt
889 ; CHECK-NOT: call void @is(i1 true)
890 ; CHECK: call void @is(i1 false)
891 define void @test_sge_slt(i32 %a, i32 %b) {
892 %cmp1 = icmp sge i32 %a, %b
893 br i1 %cmp1, label %taken, label %untaken
896 %cmp2 = icmp slt i32 %a, %b
897 br i1 %cmp2, label %sge_slt_istrue, label %sge_slt_isfalse
900 call void @is(i1 true)
904 call void @is(i1 false)
911 ; A >=s B implies A <=s B is unknown to be true or false.
912 ; CHECK-LABEL: @test_sge_sle
913 ; CHECK: call void @is(i1 true)
914 ; CHECK: call void @is(i1 false)
915 define void @test_sge_sle(i32 %a, i32 %b) {
916 %cmp1 = icmp sge i32 %a, %b
917 br i1 %cmp1, label %taken, label %untaken
920 %cmp2 = icmp sle i32 %a, %b
921 br i1 %cmp2, label %sge_sle_istrue, label %sge_sle_isfalse
924 call void @is(i1 true)
928 call void @is(i1 false)
935 ; A <s B implies A <s B is true.
936 ; CHECK-LABEL: @test_slt_slt
937 ; CHECK: call void @is(i1 true)
938 ; CHECK-NOT: call void @is(i1 false)
939 define void @test_slt_slt(i32 %a, i32 %b) {
940 %cmp1 = icmp slt i32 %a, %b
941 br i1 %cmp1, label %taken, label %untaken
944 %cmp2 = icmp slt i32 %a, %b
945 br i1 %cmp2, label %slt_slt_istrue, label %slt_slt_isfalse
948 call void @is(i1 true)
952 call void @is(i1 false)
959 ; A <s B implies A <=s B is true.
960 ; CHECK-LABEL: @test_slt_sle
961 ; CHECK: call void @is(i1 true)
962 ; CHECK-NOT: call void @is(i1 false)
963 define void @test_slt_sle(i32 %a, i32 %b) {
964 %cmp1 = icmp slt i32 %a, %b
965 br i1 %cmp1, label %taken, label %untaken
968 %cmp2 = icmp sle i32 %a, %b
969 br i1 %cmp2, label %slt_sle_istrue, label %slt_sle_isfalse
972 call void @is(i1 true)
976 call void @is(i1 false)
983 ; A <=s B implies A <=s B is true.
984 ; CHECK-LABEL: @test_sle_sle
985 ; CHECK: call void @is(i1 true)
986 ; CHECK-NOT: call void @is(i1 false)
987 define void @test_sle_sle(i32 %a, i32 %b) {
988 %cmp1 = icmp sle i32 %a, %b
989 br i1 %cmp1, label %taken, label %untaken
992 %cmp2 = icmp sle i32 %a, %b
993 br i1 %cmp2, label %sle_sle_istrue, label %sle_sle_isfalse
996 call void @is(i1 true)
1000 call void @is(i1 false)
1007 ; A >=u 5 implies A <u 5 is false.
1008 ; CHECK-LABEL: @test_uge_ult_const
1009 ; CHECK-NOT: call void @is(i1 true)
1010 ; CHECK: call void @is(i1 false)
1011 define void @test_uge_ult_const(i32 %a, i32 %b) {
1012 %cmp1 = icmp uge i32 %a, 5
1013 br i1 %cmp1, label %taken, label %untaken
1016 %cmp2 = icmp ult i32 %a, 5
1017 br i1 %cmp2, label %istrue, label %isfalse
1020 call void @is(i1 true)
1024 call void @is(i1 false)