@@ -839,3 +839,95 @@ define i1 @ult_wrong_offset(i8 %a) {
839
839
%ov = icmp ult i8 %t , 123
840
840
ret i1 %ov
841
841
}
842
+
843
+ define i1 @sgt_offset (i8 %a ) {
844
+ ; CHECK-LABEL: @sgt_offset(
845
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6
846
+ ; CHECK-NEXT: [[OV:%.*]] = icmp sgt i8 [[T]], -7
847
+ ; CHECK-NEXT: ret i1 [[OV]]
848
+ ;
849
+ %t = add i8 %a , -6
850
+ %ov = icmp sgt i8 %t , -7
851
+ ret i1 %ov
852
+ }
853
+
854
+ define i1 @sgt_offset_use (i32 %a ) {
855
+ ; CHECK-LABEL: @sgt_offset_use(
856
+ ; CHECK-NEXT: [[T:%.*]] = add i32 [[A:%.*]], 42
857
+ ; CHECK-NEXT: call void @use(i32 [[T]])
858
+ ; CHECK-NEXT: [[OV:%.*]] = icmp sgt i32 [[T]], 41
859
+ ; CHECK-NEXT: ret i1 [[OV]]
860
+ ;
861
+ %t = add i32 %a , 42
862
+ call void @use (i32 %t )
863
+ %ov = icmp sgt i32 %t , 41
864
+ ret i1 %ov
865
+ }
866
+
867
+ define <2 x i1 > @sgt_offset_splat (<2 x i5 > %a ) {
868
+ ; CHECK-LABEL: @sgt_offset_splat(
869
+ ; CHECK-NEXT: [[T:%.*]] = add <2 x i5> [[A:%.*]], <i5 9, i5 9>
870
+ ; CHECK-NEXT: [[OV:%.*]] = icmp sgt <2 x i5> [[T]], <i5 8, i5 8>
871
+ ; CHECK-NEXT: ret <2 x i1> [[OV]]
872
+ ;
873
+ %t = add <2 x i5 > %a , <i5 9 , i5 9 >
874
+ %ov = icmp sgt <2 x i5 > %t , <i5 8 , i5 8 >
875
+ ret <2 x i1 > %ov
876
+ }
877
+
878
+ define i1 @sgt_wrong_offset (i8 %a ) {
879
+ ; CHECK-LABEL: @sgt_wrong_offset(
880
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -7
881
+ ; CHECK-NEXT: [[OV:%.*]] = icmp sgt i8 [[T]], -7
882
+ ; CHECK-NEXT: ret i1 [[OV]]
883
+ ;
884
+ %t = add i8 %a , -7
885
+ %ov = icmp sgt i8 %t , -7
886
+ ret i1 %ov
887
+ }
888
+
889
+ define i1 @slt_offset (i8 %a ) {
890
+ ; CHECK-LABEL: @slt_offset(
891
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6
892
+ ; CHECK-NEXT: [[OV:%.*]] = icmp slt i8 [[T]], -6
893
+ ; CHECK-NEXT: ret i1 [[OV]]
894
+ ;
895
+ %t = add i8 %a , -6
896
+ %ov = icmp slt i8 %t , -6
897
+ ret i1 %ov
898
+ }
899
+
900
+ define i1 @slt_offset_use (i32 %a ) {
901
+ ; CHECK-LABEL: @slt_offset_use(
902
+ ; CHECK-NEXT: [[T:%.*]] = add i32 [[A:%.*]], 42
903
+ ; CHECK-NEXT: call void @use(i32 [[T]])
904
+ ; CHECK-NEXT: [[OV:%.*]] = icmp slt i32 [[T]], 42
905
+ ; CHECK-NEXT: ret i1 [[OV]]
906
+ ;
907
+ %t = add i32 %a , 42
908
+ call void @use (i32 %t )
909
+ %ov = icmp slt i32 %t , 42
910
+ ret i1 %ov
911
+ }
912
+
913
+ define <2 x i1 > @slt_offset_splat (<2 x i5 > %a ) {
914
+ ; CHECK-LABEL: @slt_offset_splat(
915
+ ; CHECK-NEXT: [[T:%.*]] = add <2 x i5> [[A:%.*]], <i5 9, i5 9>
916
+ ; CHECK-NEXT: [[OV:%.*]] = icmp slt <2 x i5> [[T]], <i5 9, i5 9>
917
+ ; CHECK-NEXT: ret <2 x i1> [[OV]]
918
+ ;
919
+ %t = add <2 x i5 > %a , <i5 9 , i5 9 >
920
+ %ov = icmp slt <2 x i5 > %t , <i5 9 , i5 9 >
921
+ ret <2 x i1 > %ov
922
+ }
923
+
924
+ define i1 @slt_wrong_offset (i8 %a ) {
925
+ ; CHECK-LABEL: @slt_wrong_offset(
926
+ ; CHECK-NEXT: [[T:%.*]] = add i8 [[A:%.*]], -6
927
+ ; CHECK-NEXT: [[OV:%.*]] = icmp slt i8 [[T]], -7
928
+ ; CHECK-NEXT: ret i1 [[OV]]
929
+ ;
930
+ %t = add i8 %a , -6
931
+ %ov = icmp slt i8 %t , -7
932
+ ret i1 %ov
933
+ }
0 commit comments