Lines Matching refs:SE
51 static void analyzeICmp(ScalarEvolution &SE, ICmpInst *ICmp, in analyzeICmp() argument
56 const SCEV *AddRecSCEV = SE.getSCEV(Cond.AddRecValue); in analyzeICmp()
57 const SCEV *BoundSCEV = SE.getSCEV(Cond.BoundValue); in analyzeICmp()
80 static bool calculateUpperBound(const Loop &L, ScalarEvolution &SE, in calculateUpperBound() argument
83 const SCEV *ExitCount = SE.getExitCount(&L, Cond.ICmp->getParent()); in calculateUpperBound()
107 const SCEV *MaxSCEV = SE.getConstant(Max); in calculateUpperBound()
111 if (SE.isKnownPredicate(Pred, Cond.BoundSCEV, MaxSCEV)) { in calculateUpperBound()
113 SE.getAddExpr(Cond.BoundSCEV, SE.getOne(BoundSCEVIntType)); in calculateUpperBound()
125 static bool hasProcessableCondition(const Loop &L, ScalarEvolution &SE, in hasProcessableCondition() argument
128 analyzeICmp(SE, ICmp, Cond, L); in hasProcessableCondition()
131 if (!SE.isAvailableAtLoopEntry(Cond.BoundSCEV, &L)) in hasProcessableCondition()
141 const SCEV *StepRecSCEV = Cond.AddRecSCEV->getStepRecurrence(SE); in hasProcessableCondition()
153 if (!calculateUpperBound(L, SE, Cond, IsExitCond)) in hasProcessableCondition()
159 static bool isProcessableCondBI(const ScalarEvolution &SE, in isProcessableCondBI() argument
169 if (!SE.isSCEVable(LHS->getType())) in isProcessableCondBI()
171 assert(SE.isSCEVable(RHS->getType()) && "Expected RHS's type is SCEVable"); in isProcessableCondBI()
180 ScalarEvolution &SE, ConditionInfo &Cond) { in canSplitLoopBound() argument
211 if (!isProcessableCondBI(SE, ExitingBI)) in canSplitLoopBound()
216 if (!hasProcessableCondition(L, SE, ICmp, Cond, /*IsExitCond*/ true)) in canSplitLoopBound()
243 static BranchInst *findSplitCandidate(const Loop &L, ScalarEvolution &SE, in findSplitCandidate() argument
256 if (!isProcessableCondBI(SE, BI)) in findSplitCandidate()
265 if (!hasProcessableCondition(L, SE, ICmp, SplitCandidateCond, in findSplitCandidate()
276 if (!SE.isLoopEntryGuardedByCond(&L, SplitCandidateCond.Pred, in findSplitCandidate()
289 ScalarEvolution &SE, LPMUpdater &U) { in splitLoopBound() argument
294 if (!canSplitLoopBound(L, DT, SE, ExitingCond)) in splitLoopBound()
297 if (!findSplitCandidate(L, SE, ExitingCond, SplitCandidateCond)) in splitLoopBound()
383 if (!SE.isSCEVable(PN.getType())) in splitLoopBound()
386 const SCEVAddRecExpr *PhiSCEV = dyn_cast<SCEVAddRecExpr>(SE.getSCEV(&PN)); in splitLoopBound()
404 ? SE.getSMinExpr(NewBoundSCEV, SplitBoundSCEV) in splitLoopBound()
405 : SE.getUMinExpr(NewBoundSCEV, SplitBoundSCEV); in splitLoopBound()
408 SE, L.getHeader()->getParent()->getParent()->getDataLayout(), "split"); in splitLoopBound()
461 SE.forgetLoop(&L); in splitLoopBound()
464 simplifyLoop(&L, &DT, &LI, &SE, nullptr, nullptr, true); in splitLoopBound()
465 simplifyLoop(PostLoop, &DT, &LI, &SE, nullptr, nullptr, true); in splitLoopBound()
482 if (!splitLoopBound(L, AR.DT, AR.LI, AR.SE, U)) in run()