@@ -292,3 +292,51 @@ taken:
292
292
end:
293
293
ret i32 0
294
294
}
295
+
296
+ define i1 @gt_sub_nsw_ult (i8 %L0 , i8 %L1 , i1 %V ) {
297
+ ; CHECK-LABEL: define i1 @gt_sub_nsw_ult(
298
+ ; CHECK-SAME: i8 [[L0:%.*]], i8 [[L1:%.*]], i1 [[V:%.*]]) {
299
+ ; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ugt i8 [[L0]], [[L1]]
300
+ ; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
301
+ ; CHECK: [[LHS_TRUE]]:
302
+ ; CHECK-NEXT: [[R0:%.*]] = sub nsw i8 [[L0]], [[L1]]
303
+ ; CHECK-NEXT: [[RHS:%.*]] = icmp ult i8 [[R0]], -1
304
+ ; CHECK-NEXT: ret i1 [[RHS]]
305
+ ; CHECK: [[LHS_FALSE]]:
306
+ ; CHECK-NEXT: ret i1 [[V]]
307
+ ;
308
+ %LHS = icmp samesign ugt i8 %L0 , %L1
309
+ br i1 %LHS , label %LHS_true , label %LHS_false
310
+
311
+ LHS_true:
312
+ %R0 = sub nsw i8 %L0 , %L1
313
+ %RHS = icmp ult i8 %R0 , -1
314
+ ret i1 %RHS
315
+
316
+ LHS_false:
317
+ ret i1 %V
318
+ }
319
+
320
+ define i1 @lt_sub_nsw_ult (i8 %L0 , i8 %L1 , i1 %V ) {
321
+ ; CHECK-LABEL: define i1 @lt_sub_nsw_ult(
322
+ ; CHECK-SAME: i8 [[L0:%.*]], i8 [[L1:%.*]], i1 [[V:%.*]]) {
323
+ ; CHECK-NEXT: [[LHS:%.*]] = icmp samesign ult i8 [[L0]], [[L1]]
324
+ ; CHECK-NEXT: br i1 [[LHS]], label %[[LHS_TRUE:.*]], label %[[LHS_FALSE:.*]]
325
+ ; CHECK: [[LHS_TRUE]]:
326
+ ; CHECK-NEXT: [[R0:%.*]] = sub nsw i8 [[L0]], [[L1]]
327
+ ; CHECK-NEXT: [[RHS:%.*]] = icmp ult i8 [[R0]], 1
328
+ ; CHECK-NEXT: ret i1 [[RHS]]
329
+ ; CHECK: [[LHS_FALSE]]:
330
+ ; CHECK-NEXT: ret i1 [[V]]
331
+ ;
332
+ %LHS = icmp samesign ult i8 %L0 , %L1
333
+ br i1 %LHS , label %LHS_true , label %LHS_false
334
+
335
+ LHS_true:
336
+ %R0 = sub nsw i8 %L0 , %L1
337
+ %RHS = icmp ult i8 %R0 , 1
338
+ ret i1 %RHS
339
+
340
+ LHS_false:
341
+ ret i1 %V
342
+ }
0 commit comments