@@ -417,3 +417,86 @@ then:
417
417
else:
418
418
ret i1 0
419
419
}
420
+
421
+ ; FIXME: Currently gets mis-compiled.
422
+ define void @sub_nuw_chained_positive_constants (i16 %a ) {
423
+ ; CHECK-LABEL: @sub_nuw_chained_positive_constants(
424
+ ; CHECK-NEXT: entry:
425
+ ; CHECK-NEXT: [[SUB1:%.*]] = sub nuw i16 [[A:%.*]], 10
426
+ ; CHECK-NEXT: [[SUB2:%.*]] = sub nuw i16 [[SUB1]], 20
427
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i16 [[SUB2]], 90
428
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
429
+ ; CHECK: exit.1:
430
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 120
431
+ ; CHECK-NEXT: call void @use(i1 [[C_2]])
432
+ ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 121
433
+ ; CHECK-NEXT: call void @use(i1 [[C_3]])
434
+ ; CHECK-NEXT: ret void
435
+ ; CHECK: exit.2:
436
+ ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i16 [[A]], 120
437
+ ; CHECK-NEXT: call void @use(i1 [[C_4]])
438
+ ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i16 [[A]], 121
439
+ ; CHECK-NEXT: call void @use(i1 [[C_5]])
440
+ ; CHECK-NEXT: ret void
441
+ ;
442
+ entry:
443
+ %sub1 = sub nuw i16 %a , 10
444
+ %sub2 = sub nuw i16 %sub1 , 20
445
+ %c.1 = icmp ugt i16 %sub2 , 90
446
+ br i1 %c.1 , label %exit.1 , label %exit.2
447
+
448
+ exit.1 :
449
+ %c.2 = icmp ugt i16 %a , 120
450
+ call void @use (i1 %c.2 )
451
+ %c.3 = icmp ugt i16 %a , 121
452
+ call void @use (i1 %c.3 )
453
+ ret void
454
+
455
+ exit.2 :
456
+ %c.4 = icmp ugt i16 %a , 120
457
+ call void @use (i1 %c.4 )
458
+ %c.5 = icmp ugt i16 %a , 121
459
+ call void @use (i1 %c.5 )
460
+ ret void
461
+ }
462
+
463
+ ; FIXME: Currently gets mis-compiled.
464
+ define void @sub_nuw_chained_negative_constants (i8 %a ) {
465
+ ; CHECK-LABEL: @sub_nuw_chained_negative_constants(
466
+ ; CHECK-NEXT: entry:
467
+ ; CHECK-NEXT: [[SUB1:%.*]] = sub nuw i8 [[A:%.*]], 10
468
+ ; CHECK-NEXT: [[SUB2:%.*]] = sub nuw i8 [[SUB1]], -126
469
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[SUB2]], 20
470
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
471
+ ; CHECK: exit.1:
472
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[A]], -96
473
+ ; CHECK-NEXT: call void @use(i1 [[C_2]])
474
+ ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[A]], -95
475
+ ; CHECK-NEXT: call void @use(i1 [[C_3]])
476
+ ; CHECK-NEXT: ret void
477
+ ; CHECK: exit.2:
478
+ ; CHECK-NEXT: call void @use(i1 true)
479
+ ; CHECK-NEXT: call void @use(i1 true)
480
+ ; CHECK-NEXT: ret void
481
+ ;
482
+ entry:
483
+ %sub1 = sub nuw i8 %a , 10
484
+ %sub2 = sub nuw i8 %sub1 , 130
485
+ %c.1 = icmp ugt i8 %sub2 , 20
486
+ br i1 %c.1 , label %exit.1 , label %exit.2
487
+
488
+ exit.1 :
489
+ %c.2 = icmp ugt i8 %a , 160
490
+ call void @use (i1 %c.2 )
491
+ %c.3 = icmp ugt i8 %a , 161
492
+ call void @use (i1 %c.3 )
493
+ ret void
494
+
495
+
496
+ exit.2 :
497
+ %c.4 = icmp ugt i8 %a , 160
498
+ call void @use (i1 %c.4 )
499
+ %c.5 = icmp ugt i8 %a , 161
500
+ call void @use (i1 %c.5 )
501
+ ret void
502
+ }
0 commit comments