@@ -454,3 +454,127 @@ if.end: ; preds = %entry
454
454
}
455
455
456
456
declare void @use (i1 )
457
+
458
+ define i1 @add_nuw_neg_pr54224_i16 (i16 %a ) {
459
+ ; CHECK-LABEL: @add_nuw_neg_pr54224_i16(
460
+ ; CHECK-NEXT: entry:
461
+ ; CHECK-NEXT: [[NEG2:%.*]] = add nuw i16 [[A:%.*]], -305
462
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i16 0, [[NEG2]]
463
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
464
+ ; CHECK: exit.1:
465
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 0
466
+ ; CHECK-NEXT: ret i1 [[C_2]]
467
+ ; CHECK: exit.2:
468
+ ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 0
469
+ ; CHECK-NEXT: ret i1 true
470
+ ;
471
+ entry:
472
+ %neg2 = add nuw i16 %a , -305
473
+ %c.1 = icmp ugt i16 0 , %neg2
474
+ br i1 %c.1 , label %exit.1 , label %exit.2
475
+
476
+ exit.1 :
477
+ %c.2 = icmp ugt i16 %a , 0
478
+ ret i1 %c.2
479
+
480
+ exit.2 :
481
+ %c.3 = icmp ugt i16 %a , 0
482
+ ret i1 %c.3
483
+ }
484
+
485
+ define i1 @add_nuw_neg_pr54224_i64 (i64 %a ) {
486
+ ; CHECK-LABEL: @add_nuw_neg_pr54224_i64(
487
+ ; CHECK-NEXT: entry:
488
+ ; CHECK-NEXT: [[NEG2:%.*]] = add nuw i64 [[A:%.*]], -305
489
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i64 0, [[NEG2]]
490
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
491
+ ; CHECK: exit.1:
492
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i64 [[A]], 0
493
+ ; CHECK-NEXT: ret i1 [[C_2]]
494
+ ; CHECK: exit.2:
495
+ ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i64 [[A]], 0
496
+ ; CHECK-NEXT: ret i1 true
497
+ ;
498
+ entry:
499
+ %neg2 = add nuw i64 %a , -305
500
+ %c.1 = icmp ugt i64 0 , %neg2
501
+ br i1 %c.1 , label %exit.1 , label %exit.2
502
+
503
+ exit.1 :
504
+ %c.2 = icmp ugt i64 %a , 0
505
+ ret i1 %c.2
506
+
507
+ exit.2 :
508
+ %c.3 = icmp ugt i64 %a , 0
509
+ ret i1 %c.3
510
+ }
511
+
512
+ define i1 @add_nuw_neg2_i8 (i8 %a ) {
513
+ ; CHECK-LABEL: @add_nuw_neg2_i8(
514
+ ; CHECK-NEXT: entry:
515
+ ; CHECK-NEXT: [[NEG2:%.*]] = add nuw i8 [[A:%.*]], -4
516
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ult i8 [[NEG2]], -2
517
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
518
+ ; CHECK: exit.1:
519
+ ; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[A]], 2
520
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ult i8 [[A]], 1
521
+ ; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[T_1]], [[C_2]]
522
+ ; CHECK-NEXT: ret i1 [[RES_1]]
523
+ ; CHECK: exit.2:
524
+ ; CHECK-NEXT: [[C_3:%.*]] = icmp ult i8 [[A]], 3
525
+ ; CHECK-NEXT: [[F_1:%.*]] = icmp ult i8 [[A]], 2
526
+ ; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[C_3]], [[F_1]]
527
+ ; CHECK-NEXT: ret i1 [[RES_2]]
528
+ ;
529
+ entry:
530
+ %neg2 = add nuw i8 %a , -4
531
+ %c.1 = icmp ult i8 %neg2 , -2
532
+ br i1 %c.1 , label %exit.1 , label %exit.2
533
+
534
+ exit.1 :
535
+ %t.1 = icmp ult i8 %a , 2
536
+ %c.2 = icmp ult i8 %a , 1
537
+ %res.1 = xor i1 %t.1 , %c.2
538
+ ret i1 %res.1
539
+
540
+ exit.2 :
541
+ %c.3 = icmp ult i8 %a , 3
542
+ %f.1 = icmp ult i8 %a , 2
543
+ %res.2 = xor i1 %c.3 , %f.1
544
+ ret i1 %res.2
545
+ }
546
+
547
+ define i1 @add_nuw_neg2_i64 (i64 %a ) {
548
+ ; CHECK-LABEL: @add_nuw_neg2_i64(
549
+ ; CHECK-NEXT: entry:
550
+ ; CHECK-NEXT: [[NEG2:%.*]] = add nuw i64 [[A:%.*]], -4
551
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ult i64 [[NEG2]], -2
552
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
553
+ ; CHECK: exit.1:
554
+ ; CHECK-NEXT: [[T_1:%.*]] = icmp ult i64 [[A]], 2
555
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ult i64 [[A]], 1
556
+ ; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[T_1]], [[C_2]]
557
+ ; CHECK-NEXT: ret i1 [[RES_1]]
558
+ ; CHECK: exit.2:
559
+ ; CHECK-NEXT: [[C_3:%.*]] = icmp ult i64 [[A]], 3
560
+ ; CHECK-NEXT: [[F_1:%.*]] = icmp ult i64 [[A]], 2
561
+ ; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[C_3]], [[F_1]]
562
+ ; CHECK-NEXT: ret i1 [[RES_2]]
563
+ ;
564
+ entry:
565
+ %neg2 = add nuw i64 %a , -4
566
+ %c.1 = icmp ult i64 %neg2 , -2
567
+ br i1 %c.1 , label %exit.1 , label %exit.2
568
+
569
+ exit.1 :
570
+ %t.1 = icmp ult i64 %a , 2
571
+ %c.2 = icmp ult i64 %a , 1
572
+ %res.1 = xor i1 %t.1 , %c.2
573
+ ret i1 %res.1
574
+
575
+ exit.2 :
576
+ %c.3 = icmp ult i64 %a , 3
577
+ %f.1 = icmp ult i64 %a , 2
578
+ %res.2 = xor i1 %c.3 , %f.1
579
+ ret i1 %res.2
580
+ }
0 commit comments