@@ -126,3 +126,123 @@ define i1 @and_not_implied(i8 %x, i1 %c) {
126
126
%and = and i1 %or , %cmp2
127
127
ret i1 %and
128
128
}
129
+
130
+ define i1 @uaddo_and (i64 %a , i64 %b ){
131
+ ; CHECK-LABEL: @uaddo_and(
132
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
133
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp uge i64 [[S]], [[A]]
134
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp uge i64 [[S]], [[B]]
135
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[COND_A]], [[COND_B]]
136
+ ; CHECK-NEXT: ret i1 [[COND]]
137
+ ;
138
+ %s = add i64 %a , %b
139
+ %cond_a = icmp uge i64 %s , %a
140
+ %cond_b = icmp uge i64 %s , %b
141
+ %cond = and i1 %cond_a , %cond_b
142
+ ret i1 %cond
143
+ }
144
+
145
+ define i1 @uaddo_and_commuted1 (i64 %a , i64 %b ){
146
+ ; CHECK-LABEL: @uaddo_and_commuted1(
147
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
148
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp ule i64 [[A]], [[S]]
149
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp uge i64 [[S]], [[B]]
150
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[COND_A]], [[COND_B]]
151
+ ; CHECK-NEXT: ret i1 [[COND]]
152
+ ;
153
+ %s = add i64 %a , %b
154
+ %cond_a = icmp ule i64 %a , %s
155
+ %cond_b = icmp uge i64 %s , %b
156
+ %cond = and i1 %cond_a , %cond_b
157
+ ret i1 %cond
158
+ }
159
+
160
+ define i1 @uaddo_and_commuted2 (i64 %a , i64 %b ){
161
+ ; CHECK-LABEL: @uaddo_and_commuted2(
162
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
163
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp uge i64 [[S]], [[A]]
164
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp ule i64 [[B]], [[S]]
165
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[COND_A]], [[COND_B]]
166
+ ; CHECK-NEXT: ret i1 [[COND]]
167
+ ;
168
+ %s = add i64 %a , %b
169
+ %cond_a = icmp uge i64 %s , %a
170
+ %cond_b = icmp ule i64 %b , %s
171
+ %cond = and i1 %cond_a , %cond_b
172
+ ret i1 %cond
173
+ }
174
+
175
+ define i1 @uaddo_and_commuted3 (i64 %a , i64 %b ){
176
+ ; CHECK-LABEL: @uaddo_and_commuted3(
177
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
178
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp ule i64 [[A]], [[S]]
179
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp ule i64 [[B]], [[S]]
180
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[COND_A]], [[COND_B]]
181
+ ; CHECK-NEXT: ret i1 [[COND]]
182
+ ;
183
+ %s = add i64 %a , %b
184
+ %cond_a = icmp ule i64 %a , %s
185
+ %cond_b = icmp ule i64 %b , %s
186
+ %cond = and i1 %cond_a , %cond_b
187
+ ret i1 %cond
188
+ }
189
+
190
+ define i1 @uaddo_or (i64 %a , i64 %b ){
191
+ ; CHECK-LABEL: @uaddo_or(
192
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
193
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp ult i64 [[S]], [[A]]
194
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp ult i64 [[S]], [[B]]
195
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[COND_A]], [[COND_B]]
196
+ ; CHECK-NEXT: ret i1 [[COND]]
197
+ ;
198
+ %s = add i64 %a , %b
199
+ %cond_a = icmp ult i64 %s , %a
200
+ %cond_b = icmp ult i64 %s , %b
201
+ %cond = or i1 %cond_a , %cond_b
202
+ ret i1 %cond
203
+ }
204
+
205
+ define i1 @uaddo_or_commuted1 (i64 %a , i64 %b ){
206
+ ; CHECK-LABEL: @uaddo_or_commuted1(
207
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
208
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp ugt i64 [[A]], [[S]]
209
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp ult i64 [[S]], [[B]]
210
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[COND_A]], [[COND_B]]
211
+ ; CHECK-NEXT: ret i1 [[COND]]
212
+ ;
213
+ %s = add i64 %a , %b
214
+ %cond_a = icmp ugt i64 %a , %s
215
+ %cond_b = icmp ult i64 %s , %b
216
+ %cond = or i1 %cond_a , %cond_b
217
+ ret i1 %cond
218
+ }
219
+
220
+ define i1 @uaddo_or_commuted2 (i64 %a , i64 %b ){
221
+ ; CHECK-LABEL: @uaddo_or_commuted2(
222
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
223
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp ult i64 [[S]], [[A]]
224
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp ugt i64 [[B]], [[S]]
225
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[COND_A]], [[COND_B]]
226
+ ; CHECK-NEXT: ret i1 [[COND]]
227
+ ;
228
+ %s = add i64 %a , %b
229
+ %cond_a = icmp ult i64 %s , %a
230
+ %cond_b = icmp ugt i64 %b , %s
231
+ %cond = or i1 %cond_a , %cond_b
232
+ ret i1 %cond
233
+ }
234
+
235
+ define i1 @uaddo_or_commuted3 (i64 %a , i64 %b ){
236
+ ; CHECK-LABEL: @uaddo_or_commuted3(
237
+ ; CHECK-NEXT: [[S:%.*]] = add i64 [[A:%.*]], [[B:%.*]]
238
+ ; CHECK-NEXT: [[COND_A:%.*]] = icmp ugt i64 [[A]], [[S]]
239
+ ; CHECK-NEXT: [[COND_B:%.*]] = icmp ugt i64 [[B]], [[S]]
240
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[COND_A]], [[COND_B]]
241
+ ; CHECK-NEXT: ret i1 [[COND]]
242
+ ;
243
+ %s = add i64 %a , %b
244
+ %cond_a = icmp ugt i64 %a , %s
245
+ %cond_b = icmp ugt i64 %b , %s
246
+ %cond = or i1 %cond_a , %cond_b
247
+ ret i1 %cond
248
+ }
0 commit comments