[llvm] 2ee59f7 - [LoopDeletion] Add test with potentially infinite sub-loop.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Fri May 28 10:01:13 PDT 2021


Author: Florian Hahn
Date: 2021-05-28T17:45:44+01:00
New Revision: 2ee59f75fea87968087f2bb32a0e7e25573a4f76

URL: https://github.com/llvm/llvm-project/commit/2ee59f75fea87968087f2bb32a0e7e25573a4f76
DIFF: https://github.com/llvm/llvm-project/commit/2ee59f75fea87968087f2bb32a0e7e25573a4f76.diff

LOG: [LoopDeletion] Add test with potentially infinite sub-loop.

Tests for PR50511.

Added: 
    

Modified: 
    llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll b/llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll
index b7a921a8dd513..f3a10c4e5e37f 100644
--- a/llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll
+++ b/llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll
@@ -153,3 +153,49 @@ outer.latch:
 exit:
   ret void
 }
+
+; The inner loop may not terminate, so we cannot remote it, unless the
+; function/loop is mustprogress. Test case from PR50511.
+define void @inner_loop_may_be_infinite(i1 %c1, i1 %c2) {
+; CHECK-LABEL: @inner_loop_may_be_infinite(
+; CHECK-NEXT:    br label [[EXIT:%.*]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret void
+;
+  br label %loop1
+
+loop1:
+  br i1 %c1, label %loop1.latch, label %loop2
+
+loop2:
+  br i1 %c2, label %loop1.latch, label %loop2
+
+loop1.latch:
+  br i1 false, label %loop1, label %exit
+
+exit:
+  ret void
+}
+
+; Similar to @inner_loop_may_be_infinite, but with mustprogress. We can delete
+; both loops.
+define void @inner_loop_may_be_infinite_mustprogress(i1 %c1, i1 %c2) mustprogress {
+; CHECK-LABEL: @inner_loop_may_be_infinite_mustprogress(
+; CHECK-NEXT:    br label [[EXIT:%.*]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret void
+;
+  br label %loop1
+
+loop1:
+  br i1 %c1, label %loop1.latch, label %loop2
+
+loop2:
+  br i1 %c2, label %loop1.latch, label %loop2
+
+loop1.latch:
+  br i1 false, label %loop1, label %exit
+
+exit:
+  ret void
+}


        


More information about the llvm-commits mailing list