@@ -463,7 +463,6 @@ exit:
463
463
464
464
465
465
; Same as test_01a, but non-negativity of %b is known without context.
466
- ; FIXME: We can remove 2nd check in loop.
467
466
define i32 @test_05a (i32 %a , i32* %bp ) {
468
467
; CHECK-LABEL: @test_05a(
469
468
; CHECK-NEXT: entry:
@@ -477,8 +476,7 @@ define i32 @test_05a(i32 %a, i32* %bp) {
477
476
; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ult i32 [[IV]], [[B]]
478
477
; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
479
478
; CHECK: inner.1:
480
- ; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp slt i32 [[IV]], [[B]]
481
- ; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
479
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
482
480
; CHECK: inner.backedge:
483
481
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
484
482
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -527,7 +525,6 @@ exit:
527
525
}
528
526
529
527
; Similar to test_05a, but inverted 2nd condition.
530
- ; FIXME: We can remove 2nd check in loop.
531
528
define i32 @test_05b (i32 %a , i32* %bp ) {
532
529
; CHECK-LABEL: @test_05b(
533
530
; CHECK-NEXT: entry:
@@ -541,8 +538,7 @@ define i32 @test_05b(i32 %a, i32* %bp) {
541
538
; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ult i32 [[IV]], [[B]]
542
539
; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
543
540
; CHECK: inner.1:
544
- ; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp sgt i32 [[B]], [[IV]]
545
- ; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
541
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
546
542
; CHECK: inner.backedge:
547
543
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
548
544
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -591,7 +587,6 @@ exit:
591
587
}
592
588
593
589
; We should prove implication: iv <s b, b <s 0 => iv <u b.
594
- ; FIXME: Can remove 2nd check
595
590
define i32 @test_05c (i32 %a , i32* %bp ) {
596
591
; CHECK-LABEL: @test_05c(
597
592
; CHECK-NEXT: entry:
@@ -605,8 +600,7 @@ define i32 @test_05c(i32 %a, i32* %bp) {
605
600
; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp slt i32 [[IV]], [[B]]
606
601
; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
607
602
; CHECK: inner.1:
608
- ; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ult i32 [[IV]], [[B]]
609
- ; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
603
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
610
604
; CHECK: inner.backedge:
611
605
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
612
606
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -655,7 +649,6 @@ exit:
655
649
}
656
650
657
651
; Same as test_05c, but 2nd condition reversed.
658
- ; FIXME: Can remove 2nd check
659
652
define i32 @test_05d (i32 %a , i32* %bp ) {
660
653
; CHECK-LABEL: @test_05d(
661
654
; CHECK-NEXT: entry:
@@ -669,8 +662,7 @@ define i32 @test_05d(i32 %a, i32* %bp) {
669
662
; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp slt i32 [[IV]], [[B]]
670
663
; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
671
664
; CHECK: inner.1:
672
- ; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ugt i32 [[B]], [[IV]]
673
- ; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
665
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
674
666
; CHECK: inner.backedge:
675
667
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
676
668
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -720,7 +712,6 @@ exit:
720
712
721
713
722
714
; Same as test_05a, but 1st condition inverted.
723
- ; FIXME: We can remove 2nd check in loop.
724
715
define i32 @test_05e (i32 %a , i32* %bp ) {
725
716
; CHECK-LABEL: @test_05e(
726
717
; CHECK-NEXT: entry:
@@ -734,8 +725,7 @@ define i32 @test_05e(i32 %a, i32* %bp) {
734
725
; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ugt i32 [[B]], [[IV]]
735
726
; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
736
727
; CHECK: inner.1:
737
- ; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp slt i32 [[IV]], [[B]]
738
- ; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
728
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
739
729
; CHECK: inner.backedge:
740
730
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
741
731
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -784,7 +774,6 @@ exit:
784
774
}
785
775
786
776
; Same as test_05b, but 1st condition inverted.
787
- ; FIXME: We can remove 2nd check in loop.
788
777
define i32 @test_05f (i32 %a , i32* %bp ) {
789
778
; CHECK-LABEL: @test_05f(
790
779
; CHECK-NEXT: entry:
@@ -798,8 +787,7 @@ define i32 @test_05f(i32 %a, i32* %bp) {
798
787
; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ugt i32 [[B]], [[IV]]
799
788
; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
800
789
; CHECK: inner.1:
801
- ; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp sgt i32 [[B]], [[IV]]
802
- ; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
790
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
803
791
; CHECK: inner.backedge:
804
792
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
805
793
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -848,7 +836,6 @@ exit:
848
836
}
849
837
850
838
; Same as test_05c, but 1st condition inverted.
851
- ; FIXME: We can remove 2nd check in loop.
852
839
define i32 @test_05g (i32 %a , i32* %bp ) {
853
840
; CHECK-LABEL: @test_05g(
854
841
; CHECK-NEXT: entry:
@@ -862,8 +849,7 @@ define i32 @test_05g(i32 %a, i32* %bp) {
862
849
; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp sgt i32 [[B]], [[IV]]
863
850
; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
864
851
; CHECK: inner.1:
865
- ; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ult i32 [[IV]], [[B]]
866
- ; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
852
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
867
853
; CHECK: inner.backedge:
868
854
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
869
855
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
@@ -912,7 +898,6 @@ exit:
912
898
}
913
899
914
900
; Same as test_05d, but 1st condition inverted.
915
- ; FIXME: We can remove 2nd check in loop.
916
901
define i32 @test_05h (i32 %a , i32* %bp ) {
917
902
; CHECK-LABEL: @test_05h(
918
903
; CHECK-NEXT: entry:
@@ -926,8 +911,7 @@ define i32 @test_05h(i32 %a, i32* %bp) {
926
911
; CHECK-NEXT: [[SIGNED_COND:%.*]] = icmp sgt i32 [[B]], [[IV]]
927
912
; CHECK-NEXT: br i1 [[SIGNED_COND]], label [[INNER_1:%.*]], label [[SIDE_EXIT:%.*]]
928
913
; CHECK: inner.1:
929
- ; CHECK-NEXT: [[UNSIGNED_COND:%.*]] = icmp ugt i32 [[B]], [[IV]]
930
- ; CHECK-NEXT: br i1 [[UNSIGNED_COND]], label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
914
+ ; CHECK-NEXT: br i1 true, label [[INNER_BACKEDGE]], label [[SIDE_EXIT]]
931
915
; CHECK: inner.backedge:
932
916
; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
933
917
; CHECK-NEXT: [[INNER_LOOP_COND:%.*]] = call i1 @cond()
0 commit comments