@@ -5005,3 +5005,80 @@ define i1 @or_positive_sgt_zero_multi_use(i8 %a) {
5005
5005
%cmp = icmp sgt i8 %b , 0
5006
5006
ret i1 %cmp
5007
5007
}
5008
+
5009
+
5010
+ define i1 @disjoint_or_sgt_1 (i8 %a , i8 %b ) {
5011
+ ; CHECK-LABEL: @disjoint_or_sgt_1(
5012
+ ; CHECK-NEXT: [[B1:%.*]] = add nsw i8 [[B:%.*]], 2
5013
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp sle i8 [[B1]], [[A:%.*]]
5014
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
5015
+ ;
5016
+ %a1 = or disjoint i8 %a , 1
5017
+ %b1 = add nsw i8 %b , 2
5018
+ %icmp_ = icmp sgt i8 %a1 , %b1
5019
+ ret i1 %icmp_
5020
+ }
5021
+
5022
+ define i1 @disjoint_or_sgt_2 (i8 %a , i8 %b ) {
5023
+ ; CHECK-LABEL: @disjoint_or_sgt_2(
5024
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
5025
+ ; CHECK-NEXT: [[B1:%.*]] = add i8 [[B:%.*]], 1
5026
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp sgt i8 [[A1]], [[B1]]
5027
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
5028
+ ;
5029
+ %a1 = or disjoint i8 %a , 2
5030
+ %b1 = add i8 %b , 1
5031
+ %icmp_ = icmp sgt i8 %a1 , %b1
5032
+ ret i1 %icmp_
5033
+ }
5034
+
5035
+ define i1 @disjoint_or_sgt_3 (i8 %a , i8 %b ) {
5036
+ ; CHECK-LABEL: @disjoint_or_sgt_3(
5037
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
5038
+ ; CHECK-NEXT: [[B1:%.*]] = add nuw i8 [[B:%.*]], 1
5039
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp sgt i8 [[A1]], [[B1]]
5040
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
5041
+ ;
5042
+ %a1 = or disjoint i8 %a , 2
5043
+ %b1 = add nuw i8 %b , 1
5044
+ %icmp_ = icmp sgt i8 %a1 , %b1
5045
+ ret i1 %icmp_
5046
+ }
5047
+
5048
+ define i1 @disjoint_or_ugt_1 (i8 %a , i8 %b ) {
5049
+ ; CHECK-LABEL: @disjoint_or_ugt_1(
5050
+ ; CHECK-NEXT: [[B1:%.*]] = add nsw i8 [[B:%.*]], 2
5051
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp ule i8 [[B1]], [[A:%.*]]
5052
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
5053
+ ;
5054
+ %a1 = or disjoint i8 %a , 1
5055
+ %b1 = add nsw i8 %b , 2
5056
+ %icmp_ = icmp ugt i8 %a1 , %b1
5057
+ ret i1 %icmp_
5058
+ }
5059
+
5060
+ define i1 @disjoint_or_ugt_2 (i8 %a , i8 %b ) {
5061
+ ; CHECK-LABEL: @disjoint_or_ugt_2(
5062
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
5063
+ ; CHECK-NEXT: [[B1:%.*]] = add i8 [[B:%.*]], 1
5064
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp ugt i8 [[A1]], [[B1]]
5065
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
5066
+ ;
5067
+ %a1 = or disjoint i8 %a , 2
5068
+ %b1 = add i8 %b , 1
5069
+ %icmp_ = icmp ugt i8 %a1 , %b1
5070
+ ret i1 %icmp_
5071
+ }
5072
+
5073
+ define i1 @disjoint_or_ugt_3 (i8 %a , i8 %b ) {
5074
+ ; CHECK-LABEL: @disjoint_or_ugt_3(
5075
+ ; CHECK-NEXT: [[A1:%.*]] = or disjoint i8 [[A:%.*]], 2
5076
+ ; CHECK-NEXT: [[B1:%.*]] = add nuw i8 [[B:%.*]], 1
5077
+ ; CHECK-NEXT: [[ICMP_:%.*]] = icmp ugt i8 [[A1]], [[B1]]
5078
+ ; CHECK-NEXT: ret i1 [[ICMP_]]
5079
+ ;
5080
+ %a1 = or disjoint i8 %a , 2
5081
+ %b1 = add nuw i8 %b , 1
5082
+ %icmp_ = icmp ugt i8 %a1 , %b1
5083
+ ret i1 %icmp_
5084
+ }
0 commit comments