@@ -630,5 +630,230 @@ define i8 @or_ne_bits_must_be_unset2_fail(i8 %x, i8 %y) {
630
630
ret i8 %r
631
631
}
632
632
633
+ define i8 @test_icmp_add (i8 %n , i8 %n2 , i8 %other ) {
634
+ ; CHECK-LABEL: @test_icmp_add(
635
+ ; CHECK-NEXT: entry:
636
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
637
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 32
638
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
639
+ ; CHECK: if.then:
640
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
641
+ ; CHECK-NEXT: ret i8 [[R]]
642
+ ; CHECK: if.else:
643
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
644
+ ;
645
+ entry:
646
+ %n_add = add nuw i8 %n , %n2
647
+ %cmp = icmp ult i8 %n_add , 32
648
+ br i1 %cmp , label %if.then , label %if.else
649
+
650
+ if.then:
651
+ %r = and i8 %n , 32
652
+ ret i8 %r
653
+
654
+ if.else:
655
+ ret i8 %other
656
+ }
657
+
658
+ define i8 @test_icmp_add2 (i8 %n , i8 %n2 , i8 %other ) {
659
+ ; CHECK-LABEL: @test_icmp_add2(
660
+ ; CHECK-NEXT: entry:
661
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
662
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 14
663
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
664
+ ; CHECK: if.then:
665
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
666
+ ; CHECK: if.else:
667
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
668
+ ; CHECK-NEXT: ret i8 [[R]]
669
+ ;
670
+ entry:
671
+ %n_add = add nuw i8 %n , %n2
672
+ %cmp = icmp uge i8 %n_add , 15
673
+ br i1 %cmp , label %if.then , label %if.else
674
+
675
+ if.then:
676
+ ret i8 %other
677
+ if.else:
678
+ %r = and i8 %n , 32
679
+ ret i8 %r
680
+
681
+ }
682
+
683
+ define i8 @test_icmp_add_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
684
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_range(
685
+ ; CHECK-NEXT: entry:
686
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
687
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 33
688
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
689
+ ; CHECK: if.then:
690
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
691
+ ; CHECK-NEXT: ret i8 [[R]]
692
+ ; CHECK: if.else:
693
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
694
+ ;
695
+ entry:
696
+ %n_add = add nuw i8 %n , %n2
697
+ %cmp = icmp ule i8 %n_add , 32
698
+ br i1 %cmp , label %if.then , label %if.else
699
+
700
+ if.then:
701
+ %r = and i8 %n , 32
702
+ ret i8 %r
703
+
704
+ if.else:
705
+ ret i8 %other
706
+ }
707
+
708
+ define i8 @test_icmp_add_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
709
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_pred(
710
+ ; CHECK-NEXT: entry:
711
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
712
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 32
713
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
714
+ ; CHECK: if.then:
715
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
716
+ ; CHECK-NEXT: ret i8 [[R]]
717
+ ; CHECK: if.else:
718
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
719
+ ;
720
+ entry:
721
+ %n_add = add nuw i8 %n , %n2
722
+ %cmp = icmp ugt i8 %n_add , 32
723
+ br i1 %cmp , label %if.then , label %if.else
724
+
725
+ if.then:
726
+ %r = and i8 %n , 32
727
+ ret i8 %r
728
+
729
+ if.else:
730
+ ret i8 %other
731
+ }
732
+
733
+ define i8 @test_icmp_sub (i8 %n , i8 %n2 , i8 %other ) {
734
+ ; CHECK-LABEL: @test_icmp_sub(
735
+ ; CHECK-NEXT: entry:
736
+ ; CHECK-NEXT: [[N_AND:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
737
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_AND]], -33
738
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
739
+ ; CHECK: if.then:
740
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
741
+ ; CHECK-NEXT: ret i8 [[R]]
742
+ ; CHECK: if.else:
743
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
744
+ ;
745
+ entry:
746
+ %n_sub = sub nuw i8 %n , %n2
747
+ %cmp = icmp ugt i8 %n_sub , 223
748
+ br i1 %cmp , label %if.then , label %if.else
749
+
750
+ if.then:
751
+ %r = and i8 %n , 32
752
+ ret i8 %r
753
+
754
+ if.else:
755
+ ret i8 %other
756
+ }
757
+
758
+ define i8 @test_icmp_sub_fail_wrong_arg (i8 %n , i8 %n2 , i8 %other ) {
759
+ ; CHECK-LABEL: @test_icmp_sub_fail_wrong_arg(
760
+ ; CHECK-NEXT: entry:
761
+ ; CHECK-NEXT: [[N_AND:%.*]] = sub nuw i8 [[N1:%.*]], [[N:%.*]]
762
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_AND]], -33
763
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
764
+ ; CHECK: if.then:
765
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
766
+ ; CHECK-NEXT: ret i8 [[R]]
767
+ ; CHECK: if.else:
768
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
769
+ ;
770
+ entry:
771
+ %n_sub = sub nuw i8 %n , %n2
772
+ %cmp = icmp ugt i8 %n_sub , 223
773
+ br i1 %cmp , label %if.then , label %if.else
774
+
775
+ if.then:
776
+ %r = and i8 %n2 , 32
777
+ ret i8 %r
778
+
779
+ if.else:
780
+ ret i8 %other
781
+ }
782
+
783
+ define i8 @test_icmp_sub2 (i8 %n , i8 %n2 , i8 %other ) {
784
+ ; CHECK-LABEL: @test_icmp_sub2(
785
+ ; CHECK-NEXT: entry:
786
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
787
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_SUB]], -31
788
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
789
+ ; CHECK: if.then:
790
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
791
+ ; CHECK: if.else:
792
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
793
+ ; CHECK-NEXT: ret i8 [[R]]
794
+ ;
795
+ entry:
796
+ %n_sub = sub nuw i8 %n , %n2
797
+ %cmp = icmp ule i8 %n_sub , 224
798
+ br i1 %cmp , label %if.then , label %if.else
799
+
800
+ if.then:
801
+ ret i8 %other
802
+ if.else:
803
+ %r = and i8 %n , 32
804
+ ret i8 %r
805
+
806
+ }
807
+
808
+ define i8 @test_icmp_sub_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
809
+ ; CHECK-LABEL: @test_icmp_sub_fail_bad_range(
810
+ ; CHECK-NEXT: entry:
811
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
812
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_SUB]], -34
813
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
814
+ ; CHECK: if.then:
815
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
816
+ ; CHECK-NEXT: ret i8 [[R]]
817
+ ; CHECK: if.else:
818
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
819
+ ;
820
+ entry:
821
+ %n_sub = sub nuw i8 %n , %n2
822
+ %cmp = icmp uge i8 %n_sub , 223
823
+ br i1 %cmp , label %if.then , label %if.else
824
+
825
+ if.then:
826
+ %r = and i8 %n , 32
827
+ ret i8 %r
828
+
829
+ if.else:
830
+ ret i8 %other
831
+ }
832
+
833
+ define i8 @test_icmp_sub_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
834
+ ; CHECK-LABEL: @test_icmp_sub_fail_bad_pred(
835
+ ; CHECK-NEXT: entry:
836
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
837
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[N_SUB]], 31
838
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
839
+ ; CHECK: if.then:
840
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
841
+ ; CHECK-NEXT: ret i8 [[R]]
842
+ ; CHECK: if.else:
843
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
844
+ ;
845
+ entry:
846
+ %n_sub = sub nuw i8 %n , %n2
847
+ %cmp = icmp sge i8 %n_sub , 32
848
+ br i1 %cmp , label %if.then , label %if.else
849
+
850
+ if.then:
851
+ %r = and i8 %n , 32
852
+ ret i8 %r
853
+
854
+ if.else:
855
+ ret i8 %other
856
+ }
857
+
633
858
declare void @use (i1 )
634
859
declare void @sink (i8 )
0 commit comments