Lines Matching refs:SCEV
219 SCEV::NoWrapFlags Flags, bool IsSafeToHoist) { in InsertBinop()
242 if (I->hasNoSignedWrap() != (Flags & SCEV::FlagNSW)) in InsertBinop()
244 if (I->hasNoUnsignedWrap() != (Flags & SCEV::FlagNUW)) in InsertBinop()
281 if (Flags & SCEV::FlagNUW) in InsertBinop()
283 if (Flags & SCEV::FlagNSW) in InsertBinop()
293 static bool FactorOutConstant(const SCEV *&S, const SCEV *&Remainder, in FactorOutConstant()
294 const SCEV *Factor, ScalarEvolution &SE, in FactorOutConstant()
319 const SCEV *Div = SE.getConstant(CI); in FactorOutConstant()
336 SmallVector<const SCEV *, 4> NewMulOps(M->operands()); in FactorOutConstant()
345 const SCEV *Step = A->getStepRecurrence(SE); in FactorOutConstant()
346 const SCEV *StepRem = SE.getConstant(Step->getType(), 0); in FactorOutConstant()
351 const SCEV *Start = A->getStart(); in FactorOutConstant()
355 A->getNoWrapFlags(SCEV::FlagNW)); in FactorOutConstant()
366 static void SimplifyAddOperands(SmallVectorImpl<const SCEV *> &Ops, in SimplifyAddOperands()
373 SmallVector<const SCEV *, 8> NoAddRecs(Ops.begin(), Ops.end() - NumAddRecs); in SimplifyAddOperands()
374 SmallVector<const SCEV *, 8> AddRecs(Ops.end() - NumAddRecs, Ops.end()); in SimplifyAddOperands()
376 const SCEV *Sum = NoAddRecs.empty() ? in SimplifyAddOperands()
395 static void SplitAddRecs(SmallVectorImpl<const SCEV *> &Ops, in SplitAddRecs()
399 SmallVector<const SCEV *, 8> AddRecs; in SplitAddRecs()
402 const SCEV *Start = A->getStart(); in SplitAddRecs()
404 const SCEV *Zero = SE.getConstant(Ty, 0); in SplitAddRecs()
408 A->getNoWrapFlags(SCEV::FlagNW))); in SplitAddRecs()
452 Value *SCEVExpander::expandAddToGEP(const SCEV *const *op_begin, in expandAddToGEP()
453 const SCEV *const *op_end, in expandAddToGEP()
458 SmallVector<const SCEV *, 8> Ops(op_begin, op_end); in expandAddToGEP()
478 SmallVector<const SCEV *, 8> ScaledOps; in expandAddToGEP()
480 const SCEV *ElSize = SE.getSizeOfExpr(IntIdxTy, ElTy); in expandAddToGEP()
482 SmallVector<const SCEV *, 8> NewOps; in expandAddToGEP()
483 for (const SCEV *Op : Ops) { in expandAddToGEP()
484 const SCEV *Remainder = SE.getConstant(Ty, 0); in expandAddToGEP()
653 Value *SCEVExpander::expandAddToGEP(const SCEV *Op, PointerType *PTy, Type *Ty, in expandAddToGEP()
655 const SCEV *const Ops[1] = {Op}; in expandAddToGEP()
675 const Loop *SCEVExpander::getRelevantLoop(const SCEV *S) { in getRelevantLoop()
694 for (const SCEV *Op : N->operands()) in getRelevantLoop()
718 bool operator()(std::pair<const Loop *, const SCEV *> LHS, in operator ()()
719 std::pair<const Loop *, const SCEV *> RHS) const { in operator ()()
752 SmallVector<std::pair<const Loop *, const SCEV *>, 8> OpsAndLoops; in visitAddExpr()
753 for (const SCEV *Op : reverse(S->operands())) in visitAddExpr()
765 const SCEV *Op = I->second; in visitAddExpr()
777 SmallVector<const SCEV *, 4> NewOps; in visitAddExpr()
781 const SCEV *X = I->second; in visitAddExpr()
792 Sum = InsertBinop(Instruction::Sub, Sum, W, SCEV::FlagAnyWrap, in visitAddExpr()
815 SmallVector<std::pair<const Loop *, const SCEV *>, 8> OpsAndLoops; in visitMulExpr()
816 for (const SCEV *Op : reverse(S->operands())) in visitMulExpr()
853 P = InsertBinop(Instruction::Mul, P, P, SCEV::FlagAnyWrap, in visitMulExpr()
857 SCEV::FlagAnyWrap, in visitMulExpr()
875 SCEV::FlagAnyWrap, /*IsSafeToHoist*/ true); in visitMulExpr()
890 NWFlags = ScalarEvolution::clearFlags(NWFlags, SCEV::FlagNSW); in visitMulExpr()
913 SCEV::FlagAnyWrap, /*IsSafeToHoist*/ true); in visitUDivExpr()
917 return InsertBinop(Instruction::UDiv, LHS, RHS, SCEV::FlagAnyWrap, in visitUDivExpr()
1143 const SCEV *Step = AR->getStepRecurrence(SE); in IsIncrementNSW()
1144 const SCEV *OpAfterExtend = SE.getAddExpr(SE.getSignExtendExpr(Step, WideTy), in IsIncrementNSW()
1146 const SCEV *ExtendAfterOp = in IsIncrementNSW()
1157 const SCEV *Step = AR->getStepRecurrence(SE); in IsIncrementNUW()
1158 const SCEV *OpAfterExtend = SE.getAddExpr(SE.getZeroExtendExpr(Step, WideTy), in IsIncrementNUW()
1160 const SCEV *ExtendAfterOp = in IsIncrementNUW()
1291 const SCEV *Step = Normalized->getStepRecurrence(SE); in getAddRecExprPHILiterally()
1368 const SCEV *Start = Normalized->getStart(); in expandAddRecExprLiterally()
1369 const SCEV *PostLoopOffset = nullptr; in expandAddRecExprLiterally()
1376 Normalized->getNoWrapFlags(SCEV::FlagNW))); in expandAddRecExprLiterally()
1380 const SCEV *Step = Normalized->getStepRecurrence(SE); in expandAddRecExprLiterally()
1381 const SCEV *PostLoopScale = nullptr; in expandAddRecExprLiterally()
1395 Normalized->getNoWrapFlags(SCEV::FlagNW))); in expandAddRecExprLiterally()
1536 SmallVector<const SCEV *, 4> NewOps(S->getNumOperands()); in visitAddRecExpr()
1540 S->getNoWrapFlags(SCEV::FlagNW))); in visitAddRecExpr()
1556 SmallVector<const SCEV *, 4> NewOps(S->operands()); in visitAddRecExpr()
1558 const SCEV *Rest = SE.getAddRecExpr(NewOps, L, in visitAddRecExpr()
1559 S->getNoWrapFlags(SCEV::FlagNW)); in visitAddRecExpr()
1565 const SCEV *AddExprLHS = SE.getUnknown(expand(S->getStart())); in visitAddRecExpr()
1566 const SCEV *AddExprRHS = SE.getUnknown(expand(Rest)); in visitAddRecExpr()
1629 const SCEV *IH = SE.getUnknown(CanonicalIV); // Get I as a "symbolic" SCEV. in visitAddRecExpr()
1632 const SCEV *NewS = S; in visitAddRecExpr()
1633 const SCEV *Ext = SE.getNoopOrAnyExtend(S, CanonicalIV->getType()); in visitAddRecExpr()
1637 const SCEV *V = cast<SCEVAddRecExpr>(NewS)->evaluateAtIteration(IH, SE); in visitAddRecExpr()
1640 const SCEV *T = SE.getTruncateOrNoop(V, Ty); in visitAddRecExpr()
1720 Value *SCEVExpander::expandCodeForImpl(const SCEV *SH, Type *Ty, in expandCodeForImpl()
1727 Value *SCEVExpander::expandCodeForImpl(const SCEV *SH, Type *Ty, bool Root) { in expandCodeForImpl()
1767 Value *SCEVExpander::FindValueInExprValueMap(const SCEV *S, in FindValueInExprValueMap()
1802 Value *SCEVExpander::expand(const SCEV *S) { in expand()
1809 auto SafeToHoist = [](const SCEV *S) { in expand()
1810 return !SCEVExprContains(S, [](const SCEV *S) { in expand()
1933 DenseMap<const SCEV *, PHINode *> ExprToIVMap; in replaceCongruentIVs()
1972 const SCEV *TruncExpr = in replaceCongruentIVs()
2009 const SCEV *TruncExpr = in replaceCongruentIVs()
2054 Value *SCEVExpander::getRelatedExistingExpansion(const SCEV *S, in getRelatedExistingExpansion()
2195 int NumTerms = llvm::count_if(S->operands(), [](const SCEV *Op) { in costAndCollectOperands()
2205 llvm::count_if(S->operands(), [](const SCEV *Op) { in costAndCollectOperands()
2248 SmallPtrSetImpl<const SCEV *> &Processed, in isHighCostExpansionHelper()
2253 const SCEV *S = WorkItem.S; in isHighCostExpansionHelper()
2371 const SCEV *ExitCount = in generateOverflowCheck()
2376 const SCEV *Step = AR->getStepRecurrence(SE); in generateOverflowCheck()
2377 const SCEV *Start = AR->getStart(); in generateOverflowCheck()
2587 bool follow(const SCEV *S) { in follow()
2595 const SCEV *Step = AR->getStepRecurrence(SE); in follow()
2615 bool SCEVExpander::isSafeToExpand(const SCEV *S) const { in isSafeToExpand()
2621 bool SCEVExpander::isSafeToExpandAt(const SCEV *S, in isSafeToExpandAt()