@@ -303,3 +303,66 @@ define i1 @ugt_assumed_positive_values(i8 %a, i8 %b) {
303303
304304 ret i1 %result
305305}
306+
307+ define i1 @implied_condition_sgt_ugt (i8 %a , i8 %b ) {
308+ ; CHECK-LABEL: @implied_condition_sgt_ugt(
309+ ; CHECK-NEXT: [[CMP_SGT:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
310+ ; CHECK-NEXT: br i1 [[CMP_SGT]], label [[GREATER:%.*]], label [[EXIT:%.*]]
311+ ; CHECK: greater:
312+ ; CHECK-NEXT: [[CMP_UGT:%.*]] = icmp samesign ugt i8 [[A]], [[B]]
313+ ; CHECK-NEXT: ret i1 [[CMP_UGT]]
314+ ; CHECK: exit:
315+ ; CHECK-NEXT: ret i1 false
316+ ;
317+ %cmp_sgt = icmp sgt i8 %a , %b
318+ br i1 %cmp_sgt , label %greater , label %exit
319+
320+ greater:
321+ %cmp_ugt = icmp samesign ugt i8 %a , %b
322+ ret i1 %cmp_ugt
323+
324+ exit:
325+ ret i1 false
326+ }
327+
328+ define i1 @implied_condition_sle_ule (i8 %a ) {
329+ ; CHECK-LABEL: @implied_condition_sle_ule(
330+ ; CHECK-NEXT: [[CMP_SLE:%.*]] = icmp sle i8 [[A:%.*]], 42
331+ ; CHECK-NEXT: br i1 [[CMP_SLE]], label [[LESS_OR_EQUAL:%.*]], label [[EXIT:%.*]]
332+ ; CHECK: less_or_equal:
333+ ; CHECK-NEXT: [[CMP_ULE:%.*]] = icmp samesign ule i8 [[A]], 42
334+ ; CHECK-NEXT: ret i1 [[CMP_ULE]]
335+ ; CHECK: exit:
336+ ; CHECK-NEXT: ret i1 false
337+ ;
338+ %cmp_sle = icmp sle i8 %a , 42
339+ br i1 %cmp_sle , label %less_or_equal , label %exit
340+
341+ less_or_equal:
342+ %cmp_ule = icmp samesign ule i8 %a , 42
343+ ret i1 %cmp_ule
344+
345+ exit:
346+ ret i1 false
347+ }
348+
349+ define i1 @implied_condition_cannot_simplify (i8 %a , i8 %b ) {
350+ ; CHECK-LABEL: @implied_condition_cannot_simplify(
351+ ; CHECK-NEXT: [[CMP_SGT:%.*]] = icmp ne i8 [[A:%.*]], [[B:%.*]]
352+ ; CHECK-NEXT: br i1 [[CMP_SGT]], label [[GREATER:%.*]], label [[EXIT:%.*]]
353+ ; CHECK: not_equal:
354+ ; CHECK-NEXT: [[CMP_UGT:%.*]] = icmp samesign ugt i8 [[A]], [[B]]
355+ ; CHECK-NEXT: ret i1 [[CMP_UGT]]
356+ ; CHECK: exit:
357+ ; CHECK-NEXT: ret i1 false
358+ ;
359+ %cmp_ne = icmp ne i8 %a , %b
360+ br i1 %cmp_ne , label %not_equal , label %exit
361+
362+ not_equal:
363+ %cmp_ugt = icmp samesign ugt i8 %a , %b
364+ ret i1 %cmp_ugt
365+
366+ exit:
367+ ret i1 false
368+ }
0 commit comments