@@ -793,3 +793,49 @@ define i1 @ugt_wrong_offset(i8 %a) {
793
793
%ov = icmp ugt i8 %t , 251
794
794
ret i1 %ov
795
795
}
796
+
797
+ define i1 @ult_offset (i8 %a ) {
798
+ ; CHECK-LABEL: @ult_offset(
799
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6
800
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ult i8 [[T]], 122
801
+ ; CHECK-NEXT: ret i1 [[OV]]
802
+ ;
803
+ %t = add i8 %a , 250
804
+ %ov = icmp ult i8 %t , 122
805
+ ret i1 %ov
806
+ }
807
+
808
+ define i1 @ult_offset_use (i32 %a ) {
809
+ ; CHECK-LABEL: @ult_offset_use(
810
+ ; CHECK-NEXT: [[T:%.*]] = add i32 [[A:%.*]], 42
811
+ ; CHECK-NEXT: call void @use(i32 [[T]])
812
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ult i32 [[T]], -2147483606
813
+ ; CHECK-NEXT: ret i1 [[OV]]
814
+ ;
815
+ %t = add i32 %a , 42
816
+ call void @use (i32 %t )
817
+ %ov = icmp ult i32 %t , 2147483690
818
+ ret i1 %ov
819
+ }
820
+
821
+ define <2 x i1 > @ult_offset_splat (<2 x i5 > %a ) {
822
+ ; CHECK-LABEL: @ult_offset_splat(
823
+ ; CHECK-NEXT: [[T:%.*]] = add <2 x i5> [[A:%.*]], <i5 9, i5 9>
824
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ult <2 x i5> [[T]], <i5 -7, i5 -7>
825
+ ; CHECK-NEXT: ret <2 x i1> [[OV]]
826
+ ;
827
+ %t = add <2 x i5 > %a , <i5 9 , i5 9 >
828
+ %ov = icmp ult <2 x i5 > %t , <i5 25 , i5 25 >
829
+ ret <2 x i1 > %ov
830
+ }
831
+
832
+ define i1 @ult_wrong_offset (i8 %a ) {
833
+ ; CHECK-LABEL: @ult_wrong_offset(
834
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6
835
+ ; CHECK-NEXT: [[OV:%.*]] = icmp ult i8 [[T]], 123
836
+ ; CHECK-NEXT: ret i1 [[OV]]
837
+ ;
838
+ %t = add i8 %a , 250
839
+ %ov = icmp ult i8 %t , 123
840
+ ret i1 %ov
841
+ }
0 commit comments