@@ -292,3 +292,51 @@ taken:
292292end:
293293 ret i32 0
294294}
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