From: Florian Hahn Date: Fri, 28 May 2021 15:58:59 +0000 (+0100) Subject: [LoopDeletion] Add test with potentially infinite sub-loop. X-Git-Tag: llvmorg-14-init~5332 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ee59f75fea87968087f2bb32a0e7e25573a4f76;p=platform%2Fupstream%2Fllvm.git [LoopDeletion] Add test with potentially infinite sub-loop. Tests for PR50511. --- diff --git a/llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll b/llvm/test/Transforms/LoopDeletion/noop-loops-with-subloops.ll index b7a921a..f3a10c4 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 +}