From 24bd657202379595b514ee17241f019294e86bc9 Mon Sep 17 00:00:00 2001 From: Stefan Pintilie Date: Fri, 28 May 2021 11:35:12 -0500 Subject: [PATCH] Revert "[NFCI][LoopDeletion] Only query SCEV about loop successor if another successor is also in loop" This reverts commit b0b2bf3b5da950679db1431aae431a6dedea2245. --- llvm/lib/Transforms/Scalar/LoopDeletion.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp index 14eb07a..41be776 100644 --- a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp +++ b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp @@ -267,10 +267,10 @@ static bool canProveExitOnFirstIteration(Loop *L, DominatorTree &DT, ICmpInst::Predicate Pred; Value *LHS, *RHS; const BasicBlock *IfTrue, *IfFalse; - auto *Term = BB->getTerminator(); // TODO: Handle switches. - if (!match(Term, m_Br(m_ICmp(Pred, m_Value(LHS), m_Value(RHS)), - m_BasicBlock(IfTrue), m_BasicBlock(IfFalse)))) { + if (!match(BB->getTerminator(), + m_Br(m_ICmp(Pred, m_Value(LHS), m_Value(RHS)), + m_BasicBlock(IfTrue), m_BasicBlock(IfFalse)))) { MarkAllSuccessorsLive(BB); continue; } @@ -283,16 +283,13 @@ static bool canProveExitOnFirstIteration(Loop *L, DominatorTree &DT, // Can we prove constant true or false for this condition? const SCEV *LHSS = getSCEVOnFirstIteration(LHS, L, SE, FirstIterSCEV); const SCEV *RHSS = getSCEVOnFirstIteration(RHS, L, SE, FirstIterSCEV); - // Only query for liveness of in-loop edge if another successor is also - // in-loop. - // TODO: isKnownPredicateAt is more powerful, but it's too compile time - // consuming. So we avoid using it here. - if (L->contains(Term->getSuccessor(1)) && - SE.isKnownPredicate(Pred, LHSS, RHSS)) - MarkLiveEdge(BB, Term->getSuccessor(0)); - else if (L->contains(Term->getSuccessor(0)) && - SE.isKnownPredicate(ICmpInst::getInversePredicate(Pred), LHSS, - RHSS)) MarkLiveEdge(BB, Term->getSuccessor(1)); + // TODO: isKnownPredicateAt is more powerful, but it's too compile time + // consuming. So we avoid using it here. + if (SE.isKnownPredicate(Pred, LHSS, RHSS)) + MarkLiveEdge(BB, BB->getTerminator()->getSuccessor(0)); + else if (SE.isKnownPredicate(ICmpInst::getInversePredicate(Pred), LHSS, + RHSS)) + MarkLiveEdge(BB, BB->getTerminator()->getSuccessor(1)); else MarkAllSuccessorsLive(BB); } -- 2.7.4