| commit 24bd657202379595b514ee17241f019294e86bc9 |
| Author: Stefan Pintilie <stefanp@ca.ibm.com> |
| Date: Fri May 28 11:35:12 2021 -0500 |
| |
| Revert "[NFCI][LoopDeletion] Only query SCEV about loop successor if another successor is also in loop" |
| |
| This reverts commit b0b2bf3b5da950679db1431aae431a6dedea2245. |
| |
| diff --git a/llvm/lib/Transforms/Scalar/LoopDeletion.cpp b/llvm/lib/Transforms/Scalar/LoopDeletion.cpp |
| index 14eb07ab17e6..41be776ec141 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); |
| } |