@@ -5082,3 +5082,59 @@ define i1 @disjoint_or_ugt_3(i8 %a, i8 %b) {
5082
5082
%icmp_ = icmp ugt i8 %a1 , %b1
5083
5083
ret i1 %icmp_
5084
5084
}
5085
+
5086
+ define i1 @deduce_nuw_flag_1 (i8 %a , i8 %b ) {
5087
+ ; CHECK-LABEL: @deduce_nuw_flag_1(
5088
+ ; CHECK-NEXT: entry:
5089
+ ; CHECK-NEXT: [[TMP0:%.*]] = add nuw i8 [[B:%.*]], 1
5090
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP0]], [[A:%.*]]
5091
+ ; CHECK-NEXT: ret i1 [[CMP]]
5092
+ ;
5093
+ entry:
5094
+ %add1 = add nuw i8 %b , 2
5095
+ %add2 = add i8 %a , 1
5096
+ %cmp = icmp eq i8 %add1 , %add2
5097
+ ret i1 %cmp
5098
+ }
5099
+
5100
+ define i1 @deduce_nuw_flag_2 (i8 %a , i8 %b ) {
5101
+ ; CHECK-LABEL: @deduce_nuw_flag_2(
5102
+ ; CHECK-NEXT: entry:
5103
+ ; CHECK-NEXT: [[TMP0:%.*]] = add nuw i8 [[B:%.*]], 1
5104
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP0]], [[A:%.*]]
5105
+ ; CHECK-NEXT: ret i1 [[CMP]]
5106
+ ;
5107
+ entry:
5108
+ %add1 = add nuw i8 %b , 2
5109
+ %add2 = add i8 %a , 1
5110
+ %cmp = icmp eq i8 %add2 , %add1
5111
+ ret i1 %cmp
5112
+ }
5113
+
5114
+ define i1 @dont_deduce_nuw_flag_1 (i8 %a , i8 %b ) {
5115
+ ; CHECK-LABEL: @dont_deduce_nuw_flag_1(
5116
+ ; CHECK-NEXT: entry:
5117
+ ; CHECK-NEXT: [[TMP0:%.*]] = add i8 [[B:%.*]], -1
5118
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP0]], [[A:%.*]]
5119
+ ; CHECK-NEXT: ret i1 [[CMP]]
5120
+ ;
5121
+ entry:
5122
+ %add1 = add nuw i8 %b , -2
5123
+ %add2 = add i8 %a , -1
5124
+ %cmp = icmp eq i8 %add1 , %add2
5125
+ ret i1 %cmp
5126
+ }
5127
+
5128
+ define i1 @dont_deduce_nuw_flag_2 (i8 %a , i8 %b ) {
5129
+ ; CHECK-LABEL: @dont_deduce_nuw_flag_2(
5130
+ ; CHECK-NEXT: entry:
5131
+ ; CHECK-NEXT: [[TMP0:%.*]] = add i8 [[B:%.*]], -1
5132
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP0]], [[A:%.*]]
5133
+ ; CHECK-NEXT: ret i1 [[CMP]]
5134
+ ;
5135
+ entry:
5136
+ %add1 = add nuw i8 %b , -2
5137
+ %add2 = add i8 %a , -1
5138
+ %cmp = icmp eq i8 %add2 , %add1
5139
+ ret i1 %cmp
5140
+ }
0 commit comments