Skip to content

Commit

Permalink
Revert "[IndVars] Break backedge and replace PHIs if loop exits on 1s…
Browse files Browse the repository at this point in the history
…t iteration"

This reverts commit d9ca444.  See review for why.
  • Loading branch information
preames committed Sep 13, 2021
1 parent 1a56a29 commit 5746c76
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 10 deletions.
8 changes: 0 additions & 8 deletions llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
Expand Up @@ -1465,15 +1465,8 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {

bool Changed = false;
bool SkipLastIter = false;
bool ExitsOnFirstIter = false;
SmallSet<const SCEV*, 8> DominatingExitCounts;
for (BasicBlock *ExitingBB : ExitingBlocks) {
if (ExitsOnFirstIter) {
// If proved that some earlier exit is taken
// on 1st iteration, then fold this one.
foldExit(L, ExitingBB, true, DeadInsts);
continue;
}
const SCEV *ExitCount = SE->getExitCount(L, ExitingBB);
if (isa<SCEVCouldNotCompute>(ExitCount)) {
// Okay, we do not know the exit count here. Can we at least prove that it
Expand Down Expand Up @@ -1523,7 +1516,6 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
foldExit(L, ExitingBB, true, DeadInsts);
replaceLoopPHINodesWithPreheaderValues(L, DeadInsts);
Changed = true;
ExitsOnFirstIter = true;
continue;
}

Expand Down
7 changes: 5 additions & 2 deletions llvm/test/Transforms/IndVarSimplify/eliminate-backedge.ll
Expand Up @@ -15,6 +15,7 @@ define i1 @kill_backedge_and_phis(i8* align 1 %lhs, i8* align 1 %rhs, i32 %len)
; CHECK: loop_preheader:
; CHECK-NEXT: br label %loop
; CHECK: loop:
; CHECK-NEXT: %iv.next = add nuw nsw i32 0, 1
; CHECK-NEXT: %left_ptr = getelementptr inbounds i8, i8* %lhs, i32 0
; CHECK-NEXT: %right_ptr = getelementptr inbounds i8, i8* %rhs, i32 0
; CHECK-NEXT: %result = call i1 @foo(i8* %left_ptr, i8* %right_ptr)
Expand All @@ -24,10 +25,12 @@ define i1 @kill_backedge_and_phis(i8* align 1 %lhs, i8* align 1 %rhs, i32 %len)
; CHECK-NEXT: br i1 false, label %exiting_2, label %exit.loopexit
; CHECK: exiting_2:
; CHECK-NEXT: %bar_ret = call i1 @bar()
; CHECK-NEXT: br i1 true, label %exit.loopexit, label %exiting_3
; CHECK-NEXT: br i1 %bar_ret, label %exit.loopexit, label %exiting_3
; CHECK: exiting_3:
; CHECK-NEXT: %baz_ret = call i1 @baz()
; CHECK-NEXT: br i1 false, label %loop, label %exit.loopexit
; CHECK-NEXT: %continue = icmp ne i32 %iv.next, %len
; CHECK-NEXT: %or.cond = select i1 %baz_ret, i1 %continue, i1 false
; CHECK-NEXT: br i1 %or.cond, label %loop, label %exit.loopexit
; CHECK: exit.loopexit:
; CHECK-NEXT: %val.ph = phi i1 [ %baz_ret, %exiting_3 ], [ %bar_ret, %exiting_2 ], [ %iv.wide.is_not_zero, %exiting_1 ], [ %result, %loop ]
; CHECK-NEXT: br label %exit
Expand Down

0 comments on commit 5746c76

Please sign in to comment.