diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -9222,9 +9222,11 @@ !isAvailableAtLoopEntry(SplitRHS.first, MDL)) return false; - return isLoopEntryGuardedByCond(MDL, Pred, SplitLHS.first, SplitRHS.first) && - isLoopBackedgeGuardedByCond(MDL, Pred, SplitLHS.second, - SplitRHS.second); + // It seems backedge guard check is faster than entry one so in some cases + // it can speed up whole estimation by short circuit + return isLoopBackedgeGuardedByCond(MDL, Pred, SplitLHS.second, + SplitRHS.second) && + isLoopEntryGuardedByCond(MDL, Pred, SplitLHS.first, SplitRHS.first); } bool ScalarEvolution::isKnownPredicate(ICmpInst::Predicate Pred,