@@ -532,6 +532,205 @@ if.else:
532
532
ret i1 %other
533
533
}
534
534
535
+ define i8 @test_icmp_or (i8 %n , i8 %n2 , i8 %other ) {
536
+ ; CHECK-LABEL: @test_icmp_or(
537
+ ; CHECK-NEXT: entry:
538
+ ; CHECK-NEXT: [[N_OR:%.*]] = or i8 [[N:%.*]], [[N2:%.*]]
539
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_OR]], 32
540
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
541
+ ; CHECK: if.then:
542
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
543
+ ; CHECK-NEXT: ret i8 [[R]]
544
+ ; CHECK: if.else:
545
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
546
+ ;
547
+ entry:
548
+ %n_or = or i8 %n , %n2
549
+ %cmp = icmp ult i8 %n_or , 32
550
+ br i1 %cmp , label %if.then , label %if.else
551
+
552
+ if.then:
553
+ %r = and i8 %n , 32
554
+ ret i8 %r
555
+
556
+ if.else:
557
+ ret i8 %other
558
+ }
559
+
560
+ define i8 @test_icmp_or2 (i8 %n , i8 %n2 , i8 %other ) {
561
+ ; CHECK-LABEL: @test_icmp_or2(
562
+ ; CHECK-NEXT: entry:
563
+ ; CHECK-NEXT: [[N_OR:%.*]] = or i8 [[N:%.*]], [[N2:%.*]]
564
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_OR]], 14
565
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
566
+ ; CHECK: if.then:
567
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
568
+ ; CHECK: if.else:
569
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
570
+ ; CHECK-NEXT: ret i8 [[R]]
571
+ ;
572
+ entry:
573
+ %n_or = or i8 %n , %n2
574
+ %cmp = icmp uge i8 %n_or , 15
575
+ br i1 %cmp , label %if.then , label %if.else
576
+
577
+ if.then:
578
+ ret i8 %other
579
+ if.else:
580
+ %r = and i8 %n , 32
581
+ ret i8 %r
582
+
583
+ }
584
+
585
+ define i8 @test_icmp_or_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
586
+ ; CHECK-LABEL: @test_icmp_or_fail_bad_range(
587
+ ; CHECK-NEXT: entry:
588
+ ; CHECK-NEXT: [[N_OR:%.*]] = or i8 [[N:%.*]], [[N2:%.*]]
589
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_OR]], 33
590
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
591
+ ; CHECK: if.then:
592
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
593
+ ; CHECK-NEXT: ret i8 [[R]]
594
+ ; CHECK: if.else:
595
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
596
+ ;
597
+ entry:
598
+ %n_or = or i8 %n , %n2
599
+ %cmp = icmp ule i8 %n_or , 32
600
+ br i1 %cmp , label %if.then , label %if.else
601
+
602
+ if.then:
603
+ %r = and i8 %n , 32
604
+ ret i8 %r
605
+
606
+ if.else:
607
+ ret i8 %other
608
+ }
609
+
610
+ define i8 @test_icmp_or_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
611
+ ; CHECK-LABEL: @test_icmp_or_fail_bad_pred(
612
+ ; CHECK-NEXT: entry:
613
+ ; CHECK-NEXT: [[N_OR:%.*]] = or i8 [[N:%.*]], [[N2:%.*]]
614
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_OR]], 32
615
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
616
+ ; CHECK: if.then:
617
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
618
+ ; CHECK-NEXT: ret i8 [[R]]
619
+ ; CHECK: if.else:
620
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
621
+ ;
622
+ entry:
623
+ %n_or = or i8 %n , %n2
624
+ %cmp = icmp ugt i8 %n_or , 32
625
+ br i1 %cmp , label %if.then , label %if.else
626
+
627
+ if.then:
628
+ %r = and i8 %n , 32
629
+ ret i8 %r
630
+
631
+ if.else:
632
+ ret i8 %other
633
+ }
634
+
635
+ define i8 @test_icmp_and (i8 %n , i8 %n2 , i8 %other ) {
636
+ ; CHECK-LABEL: @test_icmp_and(
637
+ ; CHECK-NEXT: entry:
638
+ ; CHECK-NEXT: [[N_AND:%.*]] = and i8 [[N:%.*]], [[N2:%.*]]
639
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_AND]], -33
640
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
641
+ ; CHECK: if.then:
642
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
643
+ ; CHECK-NEXT: ret i8 [[R]]
644
+ ; CHECK: if.else:
645
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
646
+ ;
647
+ entry:
648
+ %n_and = and i8 %n , %n2
649
+ %cmp = icmp ugt i8 %n_and , 223
650
+ br i1 %cmp , label %if.then , label %if.else
651
+
652
+ if.then:
653
+ %r = and i8 %n , 32
654
+ ret i8 %r
655
+
656
+ if.else:
657
+ ret i8 %other
658
+ }
659
+
660
+ define i8 @test_icmp_and2 (i8 %n , i8 %n2 , i8 %other ) {
661
+ ; CHECK-LABEL: @test_icmp_and2(
662
+ ; CHECK-NEXT: entry:
663
+ ; CHECK-NEXT: [[N_AND:%.*]] = and i8 [[N:%.*]], [[N2:%.*]]
664
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_AND]], -31
665
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
666
+ ; CHECK: if.then:
667
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
668
+ ; CHECK: if.else:
669
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
670
+ ; CHECK-NEXT: ret i8 [[R]]
671
+ ;
672
+ entry:
673
+ %n_and = and i8 %n , %n2
674
+ %cmp = icmp ule i8 %n_and , 224
675
+ br i1 %cmp , label %if.then , label %if.else
676
+
677
+ if.then:
678
+ ret i8 %other
679
+ if.else:
680
+ %r = and i8 %n , 32
681
+ ret i8 %r
682
+
683
+ }
684
+
685
+ define i8 @test_icmp_and_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
686
+ ; CHECK-LABEL: @test_icmp_and_fail_bad_range(
687
+ ; CHECK-NEXT: entry:
688
+ ; CHECK-NEXT: [[N_AND:%.*]] = and i8 [[N:%.*]], [[N2:%.*]]
689
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_AND]], -34
690
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
691
+ ; CHECK: if.then:
692
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
693
+ ; CHECK-NEXT: ret i8 [[R]]
694
+ ; CHECK: if.else:
695
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
696
+ ;
697
+ entry:
698
+ %n_and = and i8 %n , %n2
699
+ %cmp = icmp uge i8 %n_and , 223
700
+ br i1 %cmp , label %if.then , label %if.else
701
+
702
+ if.then:
703
+ %r = and i8 %n , 32
704
+ ret i8 %r
705
+
706
+ if.else:
707
+ ret i8 %other
708
+ }
709
+
710
+ define i8 @test_icmp_and_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
711
+ ; CHECK-LABEL: @test_icmp_and_fail_bad_pred(
712
+ ; CHECK-NEXT: entry:
713
+ ; CHECK-NEXT: [[N_AND:%.*]] = and i8 [[N:%.*]], [[N2:%.*]]
714
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[N_AND]], 32
715
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
716
+ ; CHECK: if.then:
717
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
718
+ ; CHECK-NEXT: ret i8 [[R]]
719
+ ; CHECK: if.else:
720
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
721
+ ;
722
+ entry:
723
+ %n_and = and i8 %n , %n2
724
+ %cmp = icmp eq i8 %n_and , 32
725
+ br i1 %cmp , label %if.then , label %if.else
726
+
727
+ if.then:
728
+ %r = and i8 %n , 32
729
+ ret i8 %r
730
+
731
+ if.else:
732
+ ret i8 %other
733
+ }
535
734
536
735
537
736
declare void @use (i1 )
0 commit comments