@@ -303,3 +303,45 @@ define i1 @ugt_assumed_positive_values(i8 %a, i8 %b) {
303
303
304
304
ret i1 %result
305
305
}
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
+ }
0 commit comments