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