Lines Matching defs:SE
51 static void analyzeICmp(ScalarEvolution &SE, ICmpInst *ICmp,
56 const SCEV *AddRecSCEV = SE.getSCEV(Cond.AddRecValue);
57 const SCEV *BoundSCEV = SE.getSCEV(Cond.BoundValue);
80 static bool calculateUpperBound(const Loop &L, ScalarEvolution &SE,
83 const SCEV *ExitCount = SE.getExitCount(&L, Cond.ICmp->getParent());
107 const SCEV *MaxSCEV = SE.getConstant(Max);
111 if (SE.isKnownPredicate(Pred, Cond.BoundSCEV, MaxSCEV)) {
113 SE.getAddExpr(Cond.BoundSCEV, SE.getOne(BoundSCEVIntType));
125 static bool hasProcessableCondition(const Loop &L, ScalarEvolution &SE,
128 analyzeICmp(SE, ICmp, Cond, L);
131 if (!SE.isAvailableAtLoopEntry(Cond.BoundSCEV, &L))
141 const SCEV *StepRecSCEV = Cond.AddRecSCEV->getStepRecurrence(SE);
153 if (!calculateUpperBound(L, SE, Cond, IsExitCond))
159 static bool isProcessableCondBI(const ScalarEvolution &SE,
168 if (!SE.isSCEVable(LHS->getType()))
170 assert(SE.isSCEVable(RHS->getType()) && "Expected RHS's type is SCEVable");
179 ScalarEvolution &SE, ConditionInfo &Cond) {
210 if (!isProcessableCondBI(SE, ExitingBI))
215 if (!hasProcessableCondition(L, SE, ICmp, Cond, /*IsExitCond*/ true))
242 static BranchInst *findSplitCandidate(const Loop &L, ScalarEvolution &SE,
255 if (!isProcessableCondBI(SE, BI))
264 if (!hasProcessableCondition(L, SE, ICmp, SplitCandidateCond,
275 if (!SE.isLoopEntryGuardedByCond(&L, SplitCandidateCond.Pred,
288 ScalarEvolution &SE, LPMUpdater &U) {
293 if (!canSplitLoopBound(L, DT, SE, ExitingCond))
296 if (!findSplitCandidate(L, SE, ExitingCond, SplitCandidateCond))
382 if (!SE.isSCEVable(PN.getType()))
385 const SCEVAddRecExpr *PhiSCEV = dyn_cast<SCEVAddRecExpr>(SE.getSCEV(&PN));
403 ? SE.getSMinExpr(NewBoundSCEV, SplitBoundSCEV)
404 : SE.getUMinExpr(NewBoundSCEV, SplitBoundSCEV);
407 SE, L.getHeader()->getDataLayout(), "split");
459 // Invalidate cached SE information.
460 SE.forgetLoop(&L);
463 simplifyLoop(&L, &DT, &LI, &SE, nullptr, nullptr, true);
464 simplifyLoop(PostLoop, &DT, &LI, &SE, nullptr, nullptr, true);
481 if (!splitLoopBound(L, AR.DT, AR.LI, AR.SE, U))