Lines Matching refs:SCEV
207 static bool FactorOutConstant(const SCEV *&S, in FactorOutConstant()
208 const SCEV *&Remainder, in FactorOutConstant()
209 const SCEV *Factor, in FactorOutConstant()
237 const SCEV *Div = SE.getConstant(CI); in FactorOutConstant()
258 SmallVector<const SCEV *, 4> NewMulOps(M->op_begin(), M->op_end()); in FactorOutConstant()
269 const SCEV *SOp = M->getOperand(i); in FactorOutConstant()
270 const SCEV *Remainder = SE.getConstant(SOp->getType(), 0); in FactorOutConstant()
273 SmallVector<const SCEV *, 4> NewMulOps(M->op_begin(), M->op_end()); in FactorOutConstant()
284 const SCEV *Step = A->getStepRecurrence(SE); in FactorOutConstant()
285 const SCEV *StepRem = SE.getConstant(Step->getType(), 0); in FactorOutConstant()
290 const SCEV *Start = A->getStart(); in FactorOutConstant()
294 A->getNoWrapFlags(SCEV::FlagNW)); in FactorOutConstant()
305 static void SimplifyAddOperands(SmallVectorImpl<const SCEV *> &Ops, in SimplifyAddOperands()
312 SmallVector<const SCEV *, 8> NoAddRecs(Ops.begin(), Ops.end() - NumAddRecs); in SimplifyAddOperands()
313 SmallVector<const SCEV *, 8> AddRecs(Ops.end() - NumAddRecs, Ops.end()); in SimplifyAddOperands()
315 const SCEV *Sum = NoAddRecs.empty() ? in SimplifyAddOperands()
334 static void SplitAddRecs(SmallVectorImpl<const SCEV *> &Ops, in SplitAddRecs()
338 SmallVector<const SCEV *, 8> AddRecs; in SplitAddRecs()
341 const SCEV *Start = A->getStart(); in SplitAddRecs()
343 const SCEV *Zero = SE.getConstant(Ty, 0); in SplitAddRecs()
347 A->getNoWrapFlags(SCEV::FlagNW))); in SplitAddRecs()
391 Value *SCEVExpander::expandAddToGEP(const SCEV *const *op_begin, in expandAddToGEP()
392 const SCEV *const *op_end, in expandAddToGEP()
398 SmallVector<const SCEV *, 8> Ops(op_begin, op_end); in expandAddToGEP()
417 SmallVector<const SCEV *, 8> ScaledOps; in expandAddToGEP()
419 const SCEV *ElSize = SE.getSizeOfExpr(IntPtrTy, ElTy); in expandAddToGEP()
421 SmallVector<const SCEV *, 8> NewOps; in expandAddToGEP()
423 const SCEV *Op = Ops[i]; in expandAddToGEP()
424 const SCEV *Remainder = SE.getConstant(Ty, 0); in expandAddToGEP()
628 const Loop *SCEVExpander::getRelevantLoop(const SCEV *S) { in getRelevantLoop()
630 std::pair<DenseMap<const SCEV *, const Loop *>::iterator, bool> Pair = in getRelevantLoop()
675 bool operator()(std::pair<const Loop *, const SCEV *> LHS, in operator ()()
676 std::pair<const Loop *, const SCEV *> RHS) const { in operator ()()
709 SmallVector<std::pair<const Loop *, const SCEV *>, 8> OpsAndLoops; in visitAddExpr()
721 for (SmallVectorImpl<std::pair<const Loop *, const SCEV *> >::iterator in visitAddExpr()
724 const SCEV *Op = I->second; in visitAddExpr()
732 SmallVector<const SCEV *, 4> NewOps; in visitAddExpr()
736 const SCEV *X = I->second; in visitAddExpr()
747 SmallVector<const SCEV *, 4> NewOps; in visitAddExpr()
778 SmallVector<std::pair<const Loop *, const SCEV *>, 8> OpsAndLoops; in visitMulExpr()
789 for (SmallVectorImpl<std::pair<const Loop *, const SCEV *> >::iterator in visitMulExpr()
791 const SCEV *Op = I->second; in visitMulExpr()
833 static void ExposePointerBase(const SCEV *&Base, const SCEV *&Rest, in ExposePointerBase()
841 A->getNoWrapFlags(SCEV::FlagNW))); in ExposePointerBase()
845 SmallVector<const SCEV *, 8> NewAddOps(A->op_begin(), A->op_end()); in ExposePointerBase()
1003 const SCEV *const StepArray[1] = { SE.getSCEV(StepV) }; in expandIVInc()
1181 const SCEV *Step = Normalized->getStepRecurrence(SE); in getAddRecExprPHILiterally()
1217 if (Normalized->getNoWrapFlags(SCEV::FlagNUW)) in getAddRecExprPHILiterally()
1219 if (Normalized->getNoWrapFlags(SCEV::FlagNSW)) in getAddRecExprPHILiterally()
1252 const SCEV *Start = Normalized->getStart(); in expandAddRecExprLiterally()
1253 const SCEV *PostLoopOffset = nullptr; in expandAddRecExprLiterally()
1260 Normalized->getNoWrapFlags(SCEV::FlagNW))); in expandAddRecExprLiterally()
1264 const SCEV *Step = Normalized->getStepRecurrence(SE); in expandAddRecExprLiterally()
1265 const SCEV *PostLoopScale = nullptr; in expandAddRecExprLiterally()
1272 Normalized->getNoWrapFlags(SCEV::FlagNW))); in expandAddRecExprLiterally()
1356 const SCEV *const OffsetArray[1] = { PostLoopOffset }; in expandAddRecExprLiterally()
1386 SmallVector<const SCEV *, 4> NewOps(S->getNumOperands()); in visitAddRecExpr()
1390 S->getNoWrapFlags(SCEV::FlagNW))); in visitAddRecExpr()
1404 SmallVector<const SCEV *, 4> NewOps(S->op_begin(), S->op_end()); in visitAddRecExpr()
1406 const SCEV *Rest = SE.getAddRecExpr(NewOps, L, in visitAddRecExpr()
1407 S->getNoWrapFlags(SCEV::FlagNW)); in visitAddRecExpr()
1411 const SCEV *Base = S->getStart(); in visitAddRecExpr()
1412 const SCEV *RestArray[1] = { Rest }; in visitAddRecExpr()
1487 const SCEV *IH = SE.getUnknown(CanonicalIV); // Get I as a "symbolic" SCEV. in visitAddRecExpr()
1490 const SCEV *NewS = S; in visitAddRecExpr()
1491 const SCEV *Ext = SE.getNoopOrAnyExtend(S, CanonicalIV->getType()); in visitAddRecExpr()
1495 const SCEV *V = cast<SCEVAddRecExpr>(NewS)->evaluateAtIteration(IH, SE); in visitAddRecExpr()
1499 const SCEV *T = SE.getTruncateOrNoop(V, Ty); in visitAddRecExpr()
1578 Value *SCEVExpander::expandCodeFor(const SCEV *SH, Type *Ty, in expandCodeFor()
1584 Value *SCEVExpander::expandCodeFor(const SCEV *SH, Type *Ty) { in expandCodeFor()
1595 Value *SCEVExpander::expand(const SCEV *S) { in expand()
1626 std::map<std::pair<const SCEV *, Instruction *>, TrackingVH<Value> >::iterator in expand()
1665 const SCEV *H = SE.getAddRecExpr(SE.getConstant(Ty, 0), in getOrInsertCanonicalInductionVariable()
1666 SE.getConstant(Ty, 1), L, SCEV::FlagAnyWrap); in getOrInsertCanonicalInductionVariable()
1701 DenseMap<const SCEV *, PHINode *> ExprToIVMap; in replaceCongruentIVs()
1729 const SCEV *TruncExpr = in replaceCongruentIVs()
1764 const SCEV *TruncExpr = SE.getTruncateOrNoop(SE.getSCEV(OrigInc), in replaceCongruentIVs()
1829 bool follow(const SCEV *S) { in follow()
1838 const SCEV *Step = AR->getStepRecurrence(SE); in follow()
1851 bool isSafeToExpand(const SCEV *S, ScalarEvolution &SE) { in isSafeToExpand()