@@ -747,3 +747,49 @@ define i1 @with_nuw_large_negative(i8 %x, i8 %y) {
747
747
%tobool = icmp eq i8 %t2 , %t1
748
748
ret i1 %tobool
749
749
}
750
+
751
+ define i1 @ugt_offset (i8 %a ) {
752
+ ; CHECK-LABEL: @ugt_offset(
753
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], 124
754
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ugt i8 [[T]], -5
755
+ ; CHECK-NEXT: ret i1 [[OV]]
756
+ ;
757
+ %t = add i8 %a , 124
758
+ %ov = icmp ugt i8 %t , 251
759
+ ret i1 %ov
760
+ }
761
+
762
+ define i1 @ugt_offset_use (i32 %a ) {
763
+ ; CHECK-LABEL: @ugt_offset_use(
764
+ ; CHECK-NEXT: [[T:%.*]] = add i32 [[A:%.*]], 42
765
+ ; CHECK-NEXT: call void @use(i32 [[T]])
766
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ugt i32 [[T]], -2147483607
767
+ ; CHECK-NEXT: ret i1 [[OV]]
768
+ ;
769
+ %t = add i32 %a , 42
770
+ call void @use (i32 %t )
771
+ %ov = icmp ugt i32 %t , 2147483689
772
+ ret i1 %ov
773
+ }
774
+
775
+ define <2 x i1 > @ugt_offset_splat (<2 x i5 > %a ) {
776
+ ; CHECK-LABEL: @ugt_offset_splat(
777
+ ; CHECK-NEXT: [[T:%.*]] = add <2 x i5> [[A:%.*]], <i5 9, i5 9>
778
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ugt <2 x i5> [[T]], <i5 -8, i5 -8>
779
+ ; CHECK-NEXT: ret <2 x i1> [[OV]]
780
+ ;
781
+ %t = add <2 x i5 > %a , <i5 9 , i5 9 >
782
+ %ov = icmp ugt <2 x i5 > %t , <i5 24 , i5 24 >
783
+ ret <2 x i1 > %ov
784
+ }
785
+
786
+ define i1 @ugt_wrong_offset (i8 %a ) {
787
+ ; CHECK-LABEL: @ugt_wrong_offset(
788
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], 123
789
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ugt i8 [[T]], -5
790
+ ; CHECK-NEXT: ret i1 [[OV]]
791
+ ;
792
+ %t = add i8 %a , 123
793
+ %ov = icmp ugt i8 %t , 251
794
+ ret i1 %ov
795
+ }
0 commit comments