Lines Matching refs:SCEV
132 void SCEV::dump() const { in dump()
138 void SCEV::print(raw_ostream &OS) const { in print()
145 const SCEV *Op = Trunc->getOperand(); in print()
152 const SCEV *Op = ZExt->getOperand(); in print()
159 const SCEV *Op = SExt->getOperand(); in print()
248 Type *SCEV::getType() const { in getType()
273 bool SCEV::isZero() const { in isZero()
279 bool SCEV::isOne() const { in isOne()
285 bool SCEV::isAllOnesValue() const { in isAllOnesValue()
293 bool SCEV::isNonConstantNegative() const { in isNonConstantNegative()
306 SCEV(FoldingSetNodeIDRef(), scCouldNotCompute) {} in SCEVCouldNotCompute()
308 bool SCEVCouldNotCompute::classof(const SCEV *S) { in classof()
312 const SCEV *ScalarEvolution::getConstant(ConstantInt *V) { in getConstant()
317 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getConstant()
318 SCEV *S = new (SCEVAllocator) SCEVConstant(ID.Intern(SCEVAllocator), V); in getConstant()
323 const SCEV *ScalarEvolution::getConstant(const APInt &Val) { in getConstant()
327 const SCEV *
334 unsigned SCEVTy, const SCEV *op, Type *ty) in SCEVCastExpr()
335 : SCEV(ID, SCEVTy), Op(op), Ty(ty) {} in SCEVCastExpr()
338 const SCEV *op, Type *ty) in SCEVTruncateExpr()
346 const SCEV *op, Type *ty) in SCEVZeroExtendExpr()
354 const SCEV *op, Type *ty) in SCEVSignExtendExpr()
463 bool operator()(const SCEV *LHS, const SCEV *RHS) const { in operator ()()
470 int compare(const SCEV *LHS, const SCEV *RHS) const { in compare()
638 static void GroupByComplexity(SmallVectorImpl<const SCEV *> &Ops, in GroupByComplexity()
644 const SCEV *&LHS = Ops[0], *&RHS = Ops[1]; in GroupByComplexity()
658 const SCEV *S = Ops[i]; in GroupByComplexity()
682 static const SCEV *BinomialCoefficient(const SCEV *It, unsigned K, in BinomialCoefficient()
776 const SCEV *Dividend = SE.getTruncateOrZeroExtend(It, CalculationTy); in BinomialCoefficient()
778 const SCEV *S = SE.getMinusSCEV(It, SE.getConstant(It->getType(), i)); in BinomialCoefficient()
784 const SCEV *DivResult = SE.getUDivExpr(Dividend, SE.getConstant(DivFactor)); in BinomialCoefficient()
801 const SCEV *SCEVAddRecExpr::evaluateAtIteration(const SCEV *It, in evaluateAtIteration()
803 const SCEV *Result = getStart(); in evaluateAtIteration()
808 const SCEV *Coeff = BinomialCoefficient(It, i, SE, getType()); in evaluateAtIteration()
821 const SCEV *ScalarEvolution::getTruncateExpr(const SCEV *Op, in getTruncateExpr()
834 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getTruncateExpr()
856 SmallVector<const SCEV *, 4> Operands; in getTruncateExpr()
859 const SCEV *S = getTruncateExpr(SA->getOperand(i), Ty); in getTruncateExpr()
871 SmallVector<const SCEV *, 4> Operands; in getTruncateExpr()
874 const SCEV *S = getTruncateExpr(SM->getOperand(i), Ty); in getTruncateExpr()
885 SmallVector<const SCEV *, 4> Operands; in getTruncateExpr()
888 return getAddRecExpr(Operands, AddRec->getLoop(), SCEV::FlagAnyWrap); in getTruncateExpr()
894 SCEV *S = new (SCEVAllocator) SCEVTruncateExpr(ID.Intern(SCEVAllocator), in getTruncateExpr()
900 const SCEV *ScalarEvolution::getZeroExtendExpr(const SCEV *Op, in getZeroExtendExpr()
924 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getZeroExtendExpr()
930 const SCEV *X = ST->getOperand(); in getZeroExtendExpr()
945 const SCEV *Start = AR->getStart(); in getZeroExtendExpr()
946 const SCEV *Step = AR->getStepRecurrence(*this); in getZeroExtendExpr()
952 if (AR->getNoWrapFlags(SCEV::FlagNUW)) in getZeroExtendExpr()
965 const SCEV *MaxBECount = getMaxBackedgeTakenCount(L); in getZeroExtendExpr()
972 const SCEV *CastedMaxBECount = in getZeroExtendExpr()
974 const SCEV *RecastedMaxBECount = in getZeroExtendExpr()
979 const SCEV *ZMul = getMulExpr(CastedMaxBECount, Step); in getZeroExtendExpr()
980 const SCEV *ZAdd = getZeroExtendExpr(getAddExpr(Start, ZMul), WideTy); in getZeroExtendExpr()
981 const SCEV *WideStart = getZeroExtendExpr(Start, WideTy); in getZeroExtendExpr()
982 const SCEV *WideMaxBECount = in getZeroExtendExpr()
984 const SCEV *OperandExtendedAdd = in getZeroExtendExpr()
990 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNUW); in getZeroExtendExpr()
1005 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNW); in getZeroExtendExpr()
1018 const SCEV *N = getConstant(APInt::getMinValue(BitWidth) - in getZeroExtendExpr()
1025 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNUW); in getZeroExtendExpr()
1032 const SCEV *N = getConstant(APInt::getMaxValue(BitWidth) - in getZeroExtendExpr()
1040 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNW); in getZeroExtendExpr()
1052 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getZeroExtendExpr()
1053 SCEV *S = new (SCEVAllocator) SCEVZeroExtendExpr(ID.Intern(SCEVAllocator), in getZeroExtendExpr()
1062 static const SCEV *getOverflowLimitForStep(const SCEV *Step, in getOverflowLimitForStep()
1085 static const SCEV *getPreStartForSignExtend(const SCEVAddRecExpr *AR, in getPreStartForSignExtend()
1089 const SCEV *Start = AR->getStart(); in getPreStartForSignExtend()
1090 const SCEV *Step = AR->getStepRecurrence(*SE); in getPreStartForSignExtend()
1100 SmallVector<const SCEV *, 4> DiffOps; in getPreStartForSignExtend()
1101 for (const SCEV *Op : SA->operands()) in getPreStartForSignExtend()
1112 const SCEV *PreStart = SE->getAddExpr(DiffOps, SA->getNoWrapFlags()); in getPreStartForSignExtend()
1114 SE->getAddRecExpr(PreStart, Step, L, SCEV::FlagAnyWrap)); in getPreStartForSignExtend()
1116 if (PreAR && PreAR->getNoWrapFlags(SCEV::FlagNSW)) in getPreStartForSignExtend()
1122 const SCEV *OperandExtendedStart = in getPreStartForSignExtend()
1128 const_cast<SCEVAddRecExpr *>(PreAR)->setNoWrapFlags(SCEV::FlagNSW); in getPreStartForSignExtend()
1136 const SCEV *OverflowLimit = getOverflowLimitForStep(Step, &Pred, SE); in getPreStartForSignExtend()
1146 static const SCEV *getSignExtendAddRecStart(const SCEVAddRecExpr *AR, in getSignExtendAddRecStart()
1149 const SCEV *PreStart = getPreStartForSignExtend(AR, Ty, SE); in getSignExtendAddRecStart()
1157 const SCEV *ScalarEvolution::getSignExtendExpr(const SCEV *Op, in getSignExtendExpr()
1185 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getSignExtendExpr()
1195 const SCEV *X = ST->getOperand(); in getSignExtendExpr()
1227 const SCEV *Start = AR->getStart(); in getSignExtendExpr()
1228 const SCEV *Step = AR->getStepRecurrence(*this); in getSignExtendExpr()
1234 if (AR->getNoWrapFlags(SCEV::FlagNSW)) in getSignExtendExpr()
1237 L, SCEV::FlagNSW); in getSignExtendExpr()
1247 const SCEV *MaxBECount = getMaxBackedgeTakenCount(L); in getSignExtendExpr()
1254 const SCEV *CastedMaxBECount = in getSignExtendExpr()
1256 const SCEV *RecastedMaxBECount = in getSignExtendExpr()
1261 const SCEV *SMul = getMulExpr(CastedMaxBECount, Step); in getSignExtendExpr()
1262 const SCEV *SAdd = getSignExtendExpr(getAddExpr(Start, SMul), WideTy); in getSignExtendExpr()
1263 const SCEV *WideStart = getSignExtendExpr(Start, WideTy); in getSignExtendExpr()
1264 const SCEV *WideMaxBECount = in getSignExtendExpr()
1266 const SCEV *OperandExtendedAdd = in getSignExtendExpr()
1272 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNSW); in getSignExtendExpr()
1286 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNSW); in getSignExtendExpr()
1299 const SCEV *OverflowLimit = getOverflowLimitForStep(Step, &Pred, this); in getSignExtendExpr()
1306 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNSW); in getSignExtendExpr()
1323 const SCEV *NewAR = getAddRecExpr(getConstant(AR->getType(), 0), Step, in getSignExtendExpr()
1332 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getSignExtendExpr()
1333 SCEV *S = new (SCEVAllocator) SCEVSignExtendExpr(ID.Intern(SCEVAllocator), in getSignExtendExpr()
1342 const SCEV *ScalarEvolution::getAnyExtendExpr(const SCEV *Op, in getAnyExtendExpr()
1357 const SCEV *NewOp = T->getOperand(); in getAnyExtendExpr()
1364 const SCEV *ZExt = getZeroExtendExpr(Op, Ty); in getAnyExtendExpr()
1369 const SCEV *SExt = getSignExtendExpr(Op, Ty); in getAnyExtendExpr()
1375 SmallVector<const SCEV *, 4> Ops; in getAnyExtendExpr()
1376 for (const SCEV *Op : AR->operands()) in getAnyExtendExpr()
1378 return getAddRecExpr(Ops, AR->getLoop(), SCEV::FlagNW); in getAnyExtendExpr()
1415 CollectAddOperandsWithScales(DenseMap<const SCEV *, APInt> &M, in CollectAddOperandsWithScales() argument
1416 SmallVectorImpl<const SCEV *> &NewOps, in CollectAddOperandsWithScales()
1418 const SCEV *const *Ops, size_t NumOperands, in CollectAddOperandsWithScales()
1450 SmallVector<const SCEV *, 4> MulOps(Mul->op_begin()+1, Mul->op_end()); in CollectAddOperandsWithScales()
1451 const SCEV *Key = SE.getMulExpr(MulOps); in CollectAddOperandsWithScales()
1452 std::pair<DenseMap<const SCEV *, APInt>::iterator, bool> Pair = in CollectAddOperandsWithScales()
1465 std::pair<DenseMap<const SCEV *, APInt>::iterator, bool> Pair = in CollectAddOperandsWithScales()
1491 const SCEV *ScalarEvolution::getAddExpr(SmallVectorImpl<const SCEV *> &Ops, in getAddExpr()
1492 SCEV::NoWrapFlags Flags) { in getAddExpr()
1493 assert(!(Flags & ~(SCEV::FlagNUW | SCEV::FlagNSW)) && in getAddExpr()
1506 int SignOrUnsignMask = SCEV::FlagNUW | SCEV::FlagNSW; in getAddExpr()
1507 SCEV::NoWrapFlags SignOrUnsignWrap = maskFlags(Flags, SignOrUnsignMask); in getAddExpr()
1510 for (SmallVectorImpl<const SCEV *>::const_iterator I = Ops.begin(), in getAddExpr()
1516 if (All) Flags = setFlags(Flags, (SCEV::NoWrapFlags)SignOrUnsignMask); in getAddExpr()
1557 const SCEV *Scale = getConstant(Ty, Count); in getAddExpr()
1558 const SCEV *Mul = getMulExpr(Scale, Ops[i]); in getAddExpr()
1577 SmallVector<const SCEV *, 8> LargeOps; in getAddExpr()
1591 SmallVector<const SCEV *, 8> LargeMulOps; in getAddExpr()
1617 const SCEV *Fold = getAddExpr(LargeOps, Flags); in getAddExpr()
1654 DenseMap<const SCEV *, APInt> M; in getAddExpr()
1655 SmallVector<const SCEV *, 8> NewOps; in getAddExpr()
1663 std::map<APInt, SmallVector<const SCEV *, 4>, APIntCompare> MulOpLists; in getAddExpr()
1664 for (SmallVectorImpl<const SCEV *>::const_iterator I = NewOps.begin(), in getAddExpr()
1671 for (std::map<APInt, SmallVector<const SCEV *, 4>, APIntCompare>::iterator in getAddExpr()
1690 const SCEV *MulOpSCEV = Mul->getOperand(MulOp); in getAddExpr()
1696 const SCEV *InnerMul = Mul->getOperand(MulOp == 0); in getAddExpr()
1700 SmallVector<const SCEV *, 4> MulOps(Mul->op_begin(), in getAddExpr()
1705 const SCEV *One = getConstant(Ty, 1); in getAddExpr()
1706 const SCEV *AddOne = getAddExpr(One, InnerMul); in getAddExpr()
1707 const SCEV *OuterMul = getMulExpr(AddOne, MulOpSCEV); in getAddExpr()
1731 const SCEV *InnerMul1 = Mul->getOperand(MulOp == 0); in getAddExpr()
1733 SmallVector<const SCEV *, 4> MulOps(Mul->op_begin(), in getAddExpr()
1738 const SCEV *InnerMul2 = OtherMul->getOperand(OMulOp == 0); in getAddExpr()
1740 SmallVector<const SCEV *, 4> MulOps(OtherMul->op_begin(), in getAddExpr()
1745 const SCEV *InnerMulSum = getAddExpr(InnerMul1,InnerMul2); in getAddExpr()
1746 const SCEV *OuterMul = getMulExpr(MulOpSCEV, InnerMulSum); in getAddExpr()
1767 SmallVector<const SCEV *, 8> LIOps; in getAddExpr()
1782 SmallVector<const SCEV *, 4> AddRecOps(AddRec->op_begin(), in getAddExpr()
1789 Flags = AddRec->getNoWrapFlags(setFlags(Flags, SCEV::FlagNW)); in getAddExpr()
1790 const SCEV *NewRec = getAddRecExpr(AddRecOps, AddRecLoop, Flags); in getAddExpr()
1812 SmallVector<const SCEV *, 4> AddRecOps(AddRec->op_begin(), in getAddExpr()
1832 Ops[Idx] = getAddRecExpr(AddRecOps, AddRecLoop, SCEV::FlagAnyWrap); in getAddExpr()
1850 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getAddExpr()
1894 const SCEV *ScalarEvolution::getMulExpr(SmallVectorImpl<const SCEV *> &Ops, in getMulExpr()
1895 SCEV::NoWrapFlags Flags) { in getMulExpr()
1896 assert(Flags == maskFlags(Flags, SCEV::FlagNUW | SCEV::FlagNSW) && in getMulExpr()
1909 int SignOrUnsignMask = SCEV::FlagNUW | SCEV::FlagNSW; in getMulExpr()
1910 SCEV::NoWrapFlags SignOrUnsignWrap = maskFlags(Flags, SignOrUnsignMask); in getMulExpr()
1913 for (SmallVectorImpl<const SCEV *>::const_iterator I = Ops.begin(), in getMulExpr()
1919 if (All) Flags = setFlags(Flags, (SCEV::NoWrapFlags)SignOrUnsignMask); in getMulExpr()
1961 SmallVector<const SCEV *, 4> NewOps; in getMulExpr()
1965 const SCEV *Mul = getMulExpr(Ops[0], *I); in getMulExpr()
1975 SmallVector<const SCEV *, 4> Operands; in getMulExpr()
1981 AddRec->getNoWrapFlags(SCEV::FlagNW)); in getMulExpr()
2022 SmallVector<const SCEV *, 8> LIOps; in getMulExpr()
2035 SmallVector<const SCEV *, 4> NewOps; in getMulExpr()
2037 const SCEV *Scale = getMulExpr(LIOps); in getMulExpr()
2046 Flags = AddRec->getNoWrapFlags(clearFlags(Flags, SCEV::FlagNW)); in getMulExpr()
2047 const SCEV *NewRec = getAddRecExpr(NewOps, AddRecLoop, Flags); in getMulExpr()
2091 SmallVector<const SCEV*, 7> AddRecOps; in getMulExpr()
2094 const SCEV *Term = getConstant(Ty, 0); in getMulExpr()
2106 const SCEV *CoeffTerm = getConstant(Ty, Coeff); in getMulExpr()
2107 const SCEV *Term1 = AddRec->getOperand(y-z); in getMulExpr()
2108 const SCEV *Term2 = OtherAddRec->getOperand(z); in getMulExpr()
2115 const SCEV *NewAddRec = getAddRecExpr(AddRecOps, AddRec->getLoop(), in getMulExpr()
2116 SCEV::FlagAnyWrap); in getMulExpr()
2144 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getMulExpr()
2156 const SCEV *ScalarEvolution::getUDivExpr(const SCEV *LHS, in getUDivExpr()
2157 const SCEV *RHS) { in getUDivExpr()
2191 AR->getLoop(), SCEV::FlagAnyWrap)) { in getUDivExpr()
2192 SmallVector<const SCEV *, 4> Operands; in getUDivExpr()
2196 SCEV::FlagNW); in getUDivExpr()
2206 AR->getLoop(), SCEV::FlagAnyWrap)) { in getUDivExpr()
2211 AR->getLoop(), SCEV::FlagNW); in getUDivExpr()
2216 SmallVector<const SCEV *, 4> Operands; in getUDivExpr()
2222 const SCEV *Op = M->getOperand(i); in getUDivExpr()
2223 const SCEV *Div = getUDivExpr(Op, RHSC); in getUDivExpr()
2225 Operands = SmallVector<const SCEV *, 4>(M->op_begin(), in getUDivExpr()
2234 SmallVector<const SCEV *, 4> Operands; in getUDivExpr()
2240 const SCEV *Op = getUDivExpr(A->getOperand(i), RHS); in getUDivExpr()
2266 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getUDivExpr()
2267 SCEV *S = new (SCEVAllocator) SCEVUDivExpr(ID.Intern(SCEVAllocator), in getUDivExpr()
2291 const SCEV *ScalarEvolution::getUDivExactExpr(const SCEV *LHS, in getUDivExactExpr()
2292 const SCEV *RHS) { in getUDivExactExpr()
2307 SmallVector<const SCEV *, 2> Operands; in getUDivExactExpr()
2321 SmallVector<const SCEV *, 2> Operands; in getUDivExactExpr()
2335 SmallVector<const SCEV *, 2> Operands; in getUDivExactExpr()
2347 const SCEV *ScalarEvolution::getAddRecExpr(const SCEV *Start, const SCEV *Step, in getAddRecExpr()
2349 SCEV::NoWrapFlags Flags) { in getAddRecExpr()
2350 SmallVector<const SCEV *, 4> Operands; in getAddRecExpr()
2355 return getAddRecExpr(Operands, L, maskFlags(Flags, SCEV::FlagNW)); in getAddRecExpr()
2364 const SCEV *
2365 ScalarEvolution::getAddRecExpr(SmallVectorImpl<const SCEV *> &Operands, in getAddRecExpr()
2366 const Loop *L, SCEV::NoWrapFlags Flags) { in getAddRecExpr()
2380 return getAddRecExpr(Operands, L, SCEV::FlagAnyWrap); // {X,+,0} --> X in getAddRecExpr()
2391 int SignOrUnsignMask = SCEV::FlagNUW | SCEV::FlagNSW; in getAddRecExpr()
2392 SCEV::NoWrapFlags SignOrUnsignWrap = maskFlags(Flags, SignOrUnsignMask); in getAddRecExpr()
2395 for (SmallVectorImpl<const SCEV *>::const_iterator I = Operands.begin(), in getAddRecExpr()
2401 if (All) Flags = setFlags(Flags, (SCEV::NoWrapFlags)SignOrUnsignMask); in getAddRecExpr()
2411 SmallVector<const SCEV *, 4> NestedOperands(NestedAR->op_begin(), in getAddRecExpr()
2428 SCEV::NoWrapFlags OuterFlags = in getAddRecExpr()
2429 maskFlags(Flags, SCEV::FlagNW | NestedAR->getNoWrapFlags()); in getAddRecExpr()
2443 SCEV::NoWrapFlags InnerFlags = in getAddRecExpr()
2444 maskFlags(NestedAR->getNoWrapFlags(), SCEV::FlagNW | Flags); in getAddRecExpr()
2464 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Operands.size()); in getAddRecExpr()
2474 const SCEV *ScalarEvolution::getSMaxExpr(const SCEV *LHS, in getSMaxExpr()
2475 const SCEV *RHS) { in getSMaxExpr()
2476 SmallVector<const SCEV *, 2> Ops; in getSMaxExpr()
2482 const SCEV *
2483 ScalarEvolution::getSMaxExpr(SmallVectorImpl<const SCEV *> &Ops) { in getSMaxExpr()
2569 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getSMaxExpr()
2570 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getSMaxExpr()
2572 SCEV *S = new (SCEVAllocator) SCEVSMaxExpr(ID.Intern(SCEVAllocator), in getSMaxExpr()
2578 const SCEV *ScalarEvolution::getUMaxExpr(const SCEV *LHS, in getUMaxExpr()
2579 const SCEV *RHS) { in getUMaxExpr()
2580 SmallVector<const SCEV *, 2> Ops; in getUMaxExpr()
2586 const SCEV *
2587 ScalarEvolution::getUMaxExpr(SmallVectorImpl<const SCEV *> &Ops) { in getUMaxExpr()
2673 if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; in getUMaxExpr()
2674 const SCEV **O = SCEVAllocator.Allocate<const SCEV *>(Ops.size()); in getUMaxExpr()
2676 SCEV *S = new (SCEVAllocator) SCEVUMaxExpr(ID.Intern(SCEVAllocator), in getUMaxExpr()
2682 const SCEV *ScalarEvolution::getSMinExpr(const SCEV *LHS, in getSMinExpr()
2683 const SCEV *RHS) { in getSMinExpr()
2688 const SCEV *ScalarEvolution::getUMinExpr(const SCEV *LHS, in getUMinExpr()
2689 const SCEV *RHS) { in getUMinExpr()
2694 const SCEV *ScalarEvolution::getSizeOfExpr(Type *IntTy, Type *AllocTy) { in getSizeOfExpr()
2710 const SCEV *ScalarEvolution::getOffsetOfExpr(Type *IntTy, in getOffsetOfExpr()
2730 const SCEV *ScalarEvolution::getUnknown(Value *V) { in getUnknown()
2740 if (SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) { in getUnknown()
2745 SCEV *S = new (SCEVAllocator) SCEVUnknown(ID.Intern(SCEVAllocator), V, this, in getUnknown()
2805 const SCEV *ScalarEvolution::getCouldNotCompute() { in getCouldNotCompute()
2817 bool follow(const SCEV *S) { in follow()
2833 bool ScalarEvolution::checkValidity(const SCEV *S) const { in checkValidity()
2843 const SCEV *ScalarEvolution::getSCEV(Value *V) { in getSCEV()
2848 const SCEV *S = I->second; in getSCEV()
2854 const SCEV *S = createSCEV(V); in getSCEV()
2866 const SCEV *ScalarEvolution::getNegativeSCEV(const SCEV *V) { in getNegativeSCEV()
2878 const SCEV *ScalarEvolution::getNotSCEV(const SCEV *V) { in getNotSCEV()
2885 const SCEV *AllOnes = in getNotSCEV()
2891 const SCEV *ScalarEvolution::getMinusSCEV(const SCEV *LHS, const SCEV *RHS, in getMinusSCEV()
2892 SCEV::NoWrapFlags Flags) { in getMinusSCEV()
2893 assert(!maskFlags(Flags, SCEV::FlagNUW) && "subtraction does not have NUW"); in getMinusSCEV()
2906 const SCEV *
2907 ScalarEvolution::getTruncateOrZeroExtend(const SCEV *V, Type *Ty) { in getTruncateOrZeroExtend()
2922 const SCEV *
2923 ScalarEvolution::getTruncateOrSignExtend(const SCEV *V, in getTruncateOrSignExtend()
2939 const SCEV *
2940 ScalarEvolution::getNoopOrZeroExtend(const SCEV *V, Type *Ty) { in getNoopOrZeroExtend()
2955 const SCEV *
2956 ScalarEvolution::getNoopOrSignExtend(const SCEV *V, Type *Ty) { in getNoopOrSignExtend()
2972 const SCEV *
2973 ScalarEvolution::getNoopOrAnyExtend(const SCEV *V, Type *Ty) { in getNoopOrAnyExtend()
2987 const SCEV *
2988 ScalarEvolution::getTruncateOrNoop(const SCEV *V, Type *Ty) { in getTruncateOrNoop()
3003 const SCEV *ScalarEvolution::getUMaxFromMismatchedTypes(const SCEV *LHS, in getUMaxFromMismatchedTypes()
3004 const SCEV *RHS) { in getUMaxFromMismatchedTypes()
3005 const SCEV *PromotedLHS = LHS; in getUMaxFromMismatchedTypes()
3006 const SCEV *PromotedRHS = RHS; in getUMaxFromMismatchedTypes()
3019 const SCEV *ScalarEvolution::getUMinFromMismatchedTypes(const SCEV *LHS, in getUMinFromMismatchedTypes()
3020 const SCEV *RHS) { in getUMinFromMismatchedTypes()
3021 const SCEV *PromotedLHS = LHS; in getUMinFromMismatchedTypes()
3022 const SCEV *PromotedRHS = RHS; in getUMinFromMismatchedTypes()
3036 const SCEV *ScalarEvolution::getPointerBase(const SCEV *V) { in getPointerBase()
3045 const SCEV *PtrOp = nullptr; in getPointerBase()
3077 ScalarEvolution::ForgetSymbolicName(Instruction *PN, const SCEV *SymName) { in ForgetSymbolicName()
3090 const SCEV *Old = It->second; in ForgetSymbolicName()
3119 const SCEV *ScalarEvolution::createNodeForPHI(PHINode *PN) { in createNodeForPHI()
3144 const SCEV *SymbolicName = getUnknown(PN); in createNodeForPHI()
3151 const SCEV *BEValue = getSCEV(BEValueV); in createNodeForPHI()
3171 SmallVector<const SCEV *, 8> Ops; in createNodeForPHI()
3175 const SCEV *Accum = getAddExpr(Ops); in createNodeForPHI()
3182 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap; in createNodeForPHI()
3188 Flags = setFlags(Flags, SCEV::FlagNUW); in createNodeForPHI()
3190 Flags = setFlags(Flags, SCEV::FlagNSW); in createNodeForPHI()
3199 Flags = setFlags(Flags, SCEV::FlagNW); in createNodeForPHI()
3201 const SCEV *Ptr = getSCEV(GEP->getPointerOperand()); in createNodeForPHI()
3203 Flags = setFlags(Flags, SCEV::FlagNUW); in createNodeForPHI()
3208 Flags = setFlags(Flags, SCEV::FlagNUW); in createNodeForPHI()
3210 Flags = setFlags(Flags, SCEV::FlagNSW); in createNodeForPHI()
3213 const SCEV *StartVal = getSCEV(StartValueV); in createNodeForPHI()
3214 const SCEV *PHISCEV = getAddRecExpr(StartVal, Accum, L, Flags); in createNodeForPHI()
3238 const SCEV *StartVal = getSCEV(StartValueV); in createNodeForPHI()
3246 const SCEV *PHISCEV = in createNodeForPHI()
3248 SCEV::FlagAnyWrap); in createNodeForPHI()
3277 const SCEV *ScalarEvolution::createNodeForGEP(GEPOperator *GEP) { in createNodeForGEP()
3288 SCEV::NoWrapFlags Wrap = GEP->isInBounds() ? SCEV::FlagNSW : SCEV::FlagAnyWrap; in createNodeForGEP()
3290 const SCEV *TotalOffset = getConstant(IntPtrTy, 0); in createNodeForGEP()
3300 const SCEV *FieldOffset = getOffsetOfExpr(IntPtrTy, STy, FieldNo); in createNodeForGEP()
3306 const SCEV *ElementSize = getSizeOfExpr(IntPtrTy, *GTI); in createNodeForGEP()
3307 const SCEV *IndexS = getSCEV(Index); in createNodeForGEP()
3312 const SCEV *LocalOffset = getMulExpr(IndexS, ElementSize, Wrap); in createNodeForGEP()
3320 const SCEV *BaseS = getSCEV(Base); in createNodeForGEP()
3331 ScalarEvolution::GetMinTrailingZeros(const SCEV *S) { in GetMinTrailingZeros()
3409 ScalarEvolution::getUnsignedRange(const SCEV *S) { in getUnsignedRange()
3411 DenseMap<const SCEV *, ConstantRange>::iterator I = UnsignedRanges.find(S); in getUnsignedRange()
3484 if (AddRec->getNoWrapFlags(SCEV::FlagNUW)) in getUnsignedRange()
3494 const SCEV *MaxBECount = getMaxBackedgeTakenCount(AddRec->getLoop()); in getUnsignedRange()
3499 const SCEV *Start = AddRec->getStart(); in getUnsignedRange()
3500 const SCEV *Step = AddRec->getStepRecurrence(*this); in getUnsignedRange()
3550 ScalarEvolution::getSignedRange(const SCEV *S) { in getSignedRange()
3552 DenseMap<const SCEV *, ConstantRange>::iterator I = SignedRanges.find(S); in getSignedRange()
3625 if (AddRec->getNoWrapFlags(SCEV::FlagNSW)) { in getSignedRange()
3645 const SCEV *MaxBECount = getMaxBackedgeTakenCount(AddRec->getLoop()); in getSignedRange()
3650 const SCEV *Start = AddRec->getStart(); in getSignedRange()
3651 const SCEV *Step = AddRec->getStepRecurrence(*this); in getSignedRange()
3703 const SCEV *ScalarEvolution::createSCEV(Value *V) { in createSCEV()
3743 SmallVector<const SCEV *, 4> AddOps; in createSCEV()
3750 const SCEV *Op1 = getSCEV(U->getOperand(1)); in createSCEV()
3761 SmallVector<const SCEV *, 4> MulOps; in createSCEV()
3801 const SCEV *MulCount = getConstant( in createSCEV()
3822 const SCEV *LHS = getSCEV(U->getOperand(0)); in createSCEV()
3827 const SCEV *S = getAddExpr(LHS, getSCEV(CI)); in createSCEV()
3862 const SCEV *Z0 = Z->getOperand(); in createSCEV()
3988 const SCEV *LS = getSCEV(LHS); in createSCEV()
3989 const SCEV *RS = getSCEV(RHS); in createSCEV()
3990 const SCEV *LA = getSCEV(U->getOperand(1)); in createSCEV()
3991 const SCEV *RA = getSCEV(U->getOperand(2)); in createSCEV()
3992 const SCEV *LDiff = getMinusSCEV(LA, LS); in createSCEV()
3993 const SCEV *RDiff = getMinusSCEV(RA, RS); in createSCEV()
4011 const SCEV *LS = getSCEV(LHS); in createSCEV()
4012 const SCEV *RS = getSCEV(RHS); in createSCEV()
4013 const SCEV *LA = getSCEV(U->getOperand(1)); in createSCEV()
4014 const SCEV *RA = getSCEV(U->getOperand(2)); in createSCEV()
4015 const SCEV *LDiff = getMinusSCEV(LA, LS); in createSCEV()
4016 const SCEV *RDiff = getMinusSCEV(RA, RS); in createSCEV()
4030 const SCEV *One = getConstant(LHS->getType(), 1); in createSCEV()
4031 const SCEV *LS = getSCEV(LHS); in createSCEV()
4032 const SCEV *LA = getSCEV(U->getOperand(1)); in createSCEV()
4033 const SCEV *RA = getSCEV(U->getOperand(2)); in createSCEV()
4034 const SCEV *LDiff = getMinusSCEV(LA, LS); in createSCEV()
4035 const SCEV *RDiff = getMinusSCEV(RA, One); in createSCEV()
4045 const SCEV *One = getConstant(LHS->getType(), 1); in createSCEV()
4046 const SCEV *LS = getSCEV(LHS); in createSCEV()
4047 const SCEV *LA = getSCEV(U->getOperand(1)); in createSCEV()
4048 const SCEV *RA = getSCEV(U->getOperand(2)); in createSCEV()
4049 const SCEV *LDiff = getMinusSCEV(LA, One); in createSCEV()
4050 const SCEV *RDiff = getMinusSCEV(RA, LS); in createSCEV()
4123 const SCEV *ExitCount = getBackedgeTakenCount(L); in getSmallConstantTripMultiple()
4128 const SCEV *TCMul = getAddExpr(ExitCount, in getSmallConstantTripMultiple()
4154 const SCEV *ScalarEvolution::getExitCount(Loop *L, BasicBlock *ExitingBlock) { in getExitCount()
4169 const SCEV *ScalarEvolution::getBackedgeTakenCount(const Loop *L) { in getBackedgeTakenCount()
4176 const SCEV *ScalarEvolution::getMaxBackedgeTakenCount(const Loop *L) { in getMaxBackedgeTakenCount()
4238 const SCEV *Old = It->second; in getBackedgeTakenInfo()
4342 const SCEV *
4351 const SCEV *BECount = nullptr; in getExact()
4367 const SCEV *
4380 const SCEV *
4385 bool ScalarEvolution::BackedgeTakenInfo::hasOperand(const SCEV *S, in hasOperand()
4407 SmallVectorImpl< std::pair<BasicBlock *, const SCEV *> > &ExitCounts, in BackedgeTakenInfo()
4408 bool Complete, const SCEV *MaxCount) : Max(MaxCount) { in BackedgeTakenInfo()
4445 SmallVector<std::pair<BasicBlock *, const SCEV *>, 4> ExitCounts; in ComputeBackedgeTakenCount()
4448 const SCEV *MustExitMaxBECount = nullptr; in ComputeBackedgeTakenCount()
4449 const SCEV *MayExitMaxBECount = nullptr; in ComputeBackedgeTakenCount()
4500 const SCEV *MaxBECount = MustExitMaxBECount ? MustExitMaxBECount : in ComputeBackedgeTakenCount()
4609 const SCEV *BECount = getCouldNotCompute(); in ComputeExitLimitFromCond()
4610 const SCEV *MaxBECount = getCouldNotCompute(); in ComputeExitLimitFromCond()
4647 const SCEV *BECount = getCouldNotCompute(); in ComputeExitLimitFromCond()
4648 const SCEV *MaxBECount = getCouldNotCompute(); in ComputeExitLimitFromCond()
4728 const SCEV *LHS = getSCEV(ExitCond->getOperand(0)); in ComputeExitLimitFromICmp()
4729 const SCEV *RHS = getSCEV(ExitCond->getOperand(1)); in ComputeExitLimitFromICmp()
4755 const SCEV *Ret = AddRec->getNumIterationsInRange(CompRange, *this); in ComputeExitLimitFromICmp()
4813 const SCEV *LHS = getSCEVAtScope(Switch->getCondition(), L); in ComputeExitLimitFromSingleExitSwitch()
4814 const SCEV *RHS = getConstant(Switch->findCaseDest(ExitingBlock)); in ComputeExitLimitFromSingleExitSwitch()
4827 const SCEV *InVal = SE.getConstant(C); in EvaluateConstantChrecAtConstant()
4828 const SCEV *Val = AddRec->evaluateAtIteration(InVal, SE); in EvaluateConstantChrecAtConstant()
4879 const SCEV *Idx = getSCEV(VarIdx); in ComputeLoadConstantCompareExitLimit()
5159 const SCEV *ScalarEvolution::ComputeExitCountExhaustively(const Loop *L, in ComputeExitCountExhaustively()
5244 const SCEV *ScalarEvolution::getSCEVAtScope(const SCEV *V, const Loop *L) { in getSCEVAtScope()
5246 SmallVector<std::pair<const Loop *, const SCEV *>, 2> &Values = ValuesAtScopes[V]; in getSCEVAtScope()
5251 Values.push_back(std::make_pair(L, static_cast<const SCEV *>(nullptr))); in getSCEVAtScope()
5253 const SCEV *C = computeSCEVAtScope(V, L); in getSCEVAtScope()
5254 SmallVector<std::pair<const Loop *, const SCEV *>, 2> &Values2 = ValuesAtScopes[V]; in getSCEVAtScope()
5268 static Constant *BuildConstantFromSCEV(const SCEV *V) { in BuildConstantFromSCEV()
5363 const SCEV *ScalarEvolution::computeSCEVAtScope(const SCEV *V, const Loop *L) { in computeSCEVAtScope()
5378 const SCEV *BackedgeTakenCount = getBackedgeTakenCount(LI); in computeSCEVAtScope()
5411 const SCEV *OrigV = getSCEV(Op); in computeSCEVAtScope()
5412 const SCEV *OpV = getSCEVAtScope(OrigV, L); in computeSCEVAtScope()
5452 const SCEV *OpAtScope = getSCEVAtScope(Comm->getOperand(i), L); in computeSCEVAtScope()
5456 SmallVector<const SCEV *, 8> NewOps(Comm->op_begin(), in computeSCEVAtScope()
5480 const SCEV *LHS = getSCEVAtScope(Div->getLHS(), L); in computeSCEVAtScope()
5481 const SCEV *RHS = getSCEVAtScope(Div->getRHS(), L); in computeSCEVAtScope()
5494 const SCEV *OpAtScope = getSCEVAtScope(AddRec->getOperand(i), L); in computeSCEVAtScope()
5500 SmallVector<const SCEV *, 8> NewOps(AddRec->op_begin(), in computeSCEVAtScope()
5506 const SCEV *FoldedRec = in computeSCEVAtScope()
5508 AddRec->getNoWrapFlags(SCEV::FlagNW)); in computeSCEVAtScope()
5523 const SCEV *BackedgeTakenCount = getBackedgeTakenCount(AddRec->getLoop()); in computeSCEVAtScope()
5534 const SCEV *Op = getSCEVAtScope(Cast->getOperand(), L); in computeSCEVAtScope()
5541 const SCEV *Op = getSCEVAtScope(Cast->getOperand(), L); in computeSCEVAtScope()
5548 const SCEV *Op = getSCEVAtScope(Cast->getOperand(), L); in computeSCEVAtScope()
5559 const SCEV *ScalarEvolution::getSCEVAtScope(Value *V, const Loop *L) { in getSCEVAtScope()
5572 static const SCEV *SolveLinEquationWithOverflow(const APInt &A, const APInt &B, in SolveLinEquationWithOverflow()
5615 static std::pair<const SCEV *,const SCEV *>
5624 const SCEV *CNC = SE.getCouldNotCompute(); in SolveQuadraticEquation()
5653 const SCEV *CNC = SE.getCouldNotCompute(); in SolveQuadraticEquation()
5666 const SCEV *CNC = SE.getCouldNotCompute(); in SolveQuadraticEquation()
5690 ScalarEvolution::HowFarToZero(const SCEV *V, const Loop *L, bool IsSubExpr) { in HowFarToZero()
5705 std::pair<const SCEV *,const SCEV *> Roots = in HowFarToZero()
5725 const SCEV *Val = AddRec->evaluateAtIteration(R1, *this); in HowFarToZero()
5749 const SCEV *Start = getSCEVAtScope(AddRec->getStart(), L->getParentLoop()); in HowFarToZero()
5750 const SCEV *Step = getSCEVAtScope(AddRec->getOperand(1), L->getParentLoop()); in HowFarToZero()
5768 const SCEV *Distance = CountDown ? Start : getNegativeSCEV(Start); in HowFarToZero()
5775 const SCEV *MaxBECount; in HowFarToZero()
5801 if (!IsSubExpr && AddRec->getNoWrapFlags(SCEV::FlagNW)) { in HowFarToZero()
5802 const SCEV *Exact = in HowFarToZero()
5828 ScalarEvolution::HowFarToNonZero(const SCEV *V, const Loop *L) { in HowFarToNonZero()
5874 static bool HasSameValue(const SCEV *A, const SCEV *B) { in HasSameValue()
5895 const SCEV *&LHS, const SCEV *&RHS, in SimplifyICmpOperands()
6096 SCEV::FlagNSW); in SimplifyICmpOperands()
6101 SCEV::FlagNSW); in SimplifyICmpOperands()
6109 SCEV::FlagNSW); in SimplifyICmpOperands()
6114 SCEV::FlagNSW); in SimplifyICmpOperands()
6122 SCEV::FlagNUW); in SimplifyICmpOperands()
6127 SCEV::FlagNUW); in SimplifyICmpOperands()
6135 SCEV::FlagNUW); in SimplifyICmpOperands()
6140 SCEV::FlagNUW); in SimplifyICmpOperands()
6171 bool ScalarEvolution::isKnownNegative(const SCEV *S) { in isKnownNegative()
6175 bool ScalarEvolution::isKnownPositive(const SCEV *S) { in isKnownPositive()
6179 bool ScalarEvolution::isKnownNonNegative(const SCEV *S) { in isKnownNonNegative()
6183 bool ScalarEvolution::isKnownNonPositive(const SCEV *S) { in isKnownNonPositive()
6187 bool ScalarEvolution::isKnownNonZero(const SCEV *S) { in isKnownNonZero()
6192 const SCEV *LHS, const SCEV *RHS) { in isKnownPredicate()
6229 const SCEV *LHS, const SCEV *RHS) { in isKnownPredicateWithRanges()
6288 const SCEV *Diff = getMinusSCEV(LHS, RHS); in isKnownPredicateWithRanges()
6307 const SCEV *LHS, const SCEV *RHS) { in isLoopBackedgeGuardedByCond()
6333 const SCEV *LHS, const SCEV *RHS) { in isLoopEntryGuardedByCond()
6382 const SCEV *LHS, const SCEV *RHS, in isImpliedCond()
6422 const SCEV *FoundLHS = getSCEV(ICI->getOperand(0)); in isImpliedCond()
6423 const SCEV *FoundRHS = getSCEV(ICI->getOperand(1)); in isImpliedCond()
6490 const SCEV *LHS, const SCEV *RHS, in isImpliedCondOperands()
6491 const SCEV *FoundLHS, in isImpliedCondOperands()
6492 const SCEV *FoundRHS) { in isImpliedCondOperands()
6506 const SCEV *LHS, const SCEV *RHS, in isImpliedCondOperandsHelper()
6507 const SCEV *FoundLHS, in isImpliedCondOperandsHelper()
6508 const SCEV *FoundRHS) { in isImpliedCondOperandsHelper()
6548 bool ScalarEvolution::doesIVOverflowOnLT(const SCEV *RHS, const SCEV *Stride, in doesIVOverflowOnLT()
6553 const SCEV *One = getConstant(Stride->getType(), 1); in doesIVOverflowOnLT()
6577 bool ScalarEvolution::doesIVOverflowOnGT(const SCEV *RHS, const SCEV *Stride, in doesIVOverflowOnGT()
6582 const SCEV *One = getConstant(Stride->getType(), 1); in doesIVOverflowOnGT()
6605 const SCEV *ScalarEvolution::computeBECount(const SCEV *Delta, const SCEV *Step, in computeBECount()
6607 const SCEV *One = getConstant(Step->getType(), 1); in computeBECount()
6621 ScalarEvolution::HowManyLessThans(const SCEV *LHS, const SCEV *RHS, in HowManyLessThans()
6635 IV->getNoWrapFlags(IsSigned ? SCEV::FlagNSW : SCEV::FlagNUW); in HowManyLessThans()
6637 const SCEV *Stride = IV->getStepRecurrence(*this); in HowManyLessThans()
6652 const SCEV *Start = IV->getStart(); in HowManyLessThans()
6653 const SCEV *End = RHS; in HowManyLessThans()
6658 const SCEV *BECount = computeBECount(getMinusSCEV(End, Start), Stride, false); in HowManyLessThans()
6677 const SCEV *MaxBECount; in HowManyLessThans()
6691 ScalarEvolution::HowManyGreaterThans(const SCEV *LHS, const SCEV *RHS, in HowManyGreaterThans()
6705 IV->getNoWrapFlags(IsSigned ? SCEV::FlagNSW : SCEV::FlagNUW); in HowManyGreaterThans()
6707 const SCEV *Stride = getNegativeSCEV(IV->getStepRecurrence(*this)); in HowManyGreaterThans()
6723 const SCEV *Start = IV->getStart(); in HowManyGreaterThans()
6724 const SCEV *End = RHS; in HowManyGreaterThans()
6729 const SCEV *BECount = computeBECount(getMinusSCEV(Start, End), Stride, false); in HowManyGreaterThans()
6749 const SCEV *MaxBECount = getCouldNotCompute(); in HowManyGreaterThans()
6767 const SCEV *SCEVAddRecExpr::getNumIterationsInRange(ConstantRange Range, in getNumIterationsInRange()
6775 SmallVector<const SCEV *, 4> Operands(op_begin(), op_end()); in getNumIterationsInRange()
6777 const SCEV *Shifted = SE.getAddRecExpr(Operands, getLoop(), in getNumIterationsInRange()
6837 SmallVector<const SCEV *, 4> NewOps(op_begin(), op_end()); in getNumIterationsInRange()
6839 const SCEV *NewAddRec = SE.getAddRecExpr(NewOps, getLoop(), in getNumIterationsInRange()
6844 std::pair<const SCEV *,const SCEV *> Roots = in getNumIterationsInRange()
6893 bool follow(const SCEV *S) { in follow()
6914 containsUndefs(const SCEV *S) { in containsUndefs()
6926 SmallVectorImpl<const SCEV *> &Strides;
6928 SCEVCollectStrides(ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &S) in SCEVCollectStrides()
6931 bool follow(const SCEV *S) { in follow()
6941 SmallVectorImpl<const SCEV *> &Terms;
6943 SCEVCollectTerms(SmallVectorImpl<const SCEV *> &T) in SCEVCollectTerms()
6946 bool follow(const SCEV *S) { in follow()
6964 ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &Terms) const { in collectParametricTerms()
6965 SmallVector<const SCEV *, 4> Strides; in collectParametricTerms()
6971 for (const SCEV *S : Strides) in collectParametricTerms()
6975 for (const SCEV *S : Strides) { in collectParametricTerms()
6982 for (const SCEV *T : Terms) in collectParametricTerms()
7020 bool follow(const SCEV *S) { in follow()
7032 static inline int sizeOfSCEV(const SCEV *S) { in sizeOfSCEV()
7045 static void divide(ScalarEvolution &SE, const SCEV *Numerator, in divide()
7046 const SCEV *Denominator, const SCEV **Quotient, in divide()
7047 const SCEV **Remainder) { in divide()
7068 const SCEV *Q, *R; in divide()
7070 for (const SCEV *Op : T->operands()) { in divide()
7091 SCEVDivision(ScalarEvolution &S, const SCEV *Numerator, const SCEV *Denominator) in SCEVDivision()
7122 const SCEV *StartQ, *StartR, *StepQ, *StepR; in visitAddRecExpr()
7133 SmallVector<const SCEV *, 2> Qs, Rs; in visitAddExpr()
7136 for (const SCEV *Op : Numerator->operands()) { in visitAddExpr()
7137 const SCEV *Q, *R; in visitAddExpr()
7162 SmallVector<const SCEV *, 2> Qs; in visitMulExpr()
7166 for (const SCEV *Op : Numerator->operands()) { in visitMulExpr()
7180 const SCEV *Q, *R; in visitMulExpr()
7229 const SCEV *Q, *R; in visitMulExpr()
7230 const SCEV *Diff = SE.getMinusSCEV(Numerator, Remainder); in visitMulExpr()
7245 const SCEV *Denominator, *Quotient, *Remainder, *Zero, *One;
7250 SmallVectorImpl<const SCEV *> &Terms, in findArrayDimensionsRec()
7251 SmallVectorImpl<const SCEV *> &Sizes) { in findArrayDimensionsRec()
7253 const SCEV *Step = Terms[Last]; in findArrayDimensionsRec()
7258 SmallVector<const SCEV *, 2> Qs; in findArrayDimensionsRec()
7259 for (const SCEV *Op : M->operands()) in findArrayDimensionsRec()
7270 for (const SCEV *&Term : Terms) { in findArrayDimensionsRec()
7272 const SCEV *Q, *R; in findArrayDimensionsRec()
7283 Terms.erase(std::remove_if(Terms.begin(), Terms.end(), [](const SCEV *E) { in findArrayDimensionsRec()
7301 bool follow(const SCEV *S) { in follow()
7319 containsParameters(const SCEV *S) { in containsParameters()
7329 containsParameters(SmallVectorImpl<const SCEV *> &Terms) { in containsParameters()
7330 for (const SCEV *T : Terms) in containsParameters()
7337 static inline int numberOfTerms(const SCEV *S) { in numberOfTerms()
7343 static const SCEV *removeConstantFactors(ScalarEvolution &SE, const SCEV *T) { in removeConstantFactors()
7351 SmallVector<const SCEV *, 2> Factors; in removeConstantFactors()
7352 for (const SCEV *Op : M->operands()) in removeConstantFactors()
7363 const SCEV *ScalarEvolution::getElementSize(Instruction *Inst) { in getElementSize()
7378 void ScalarEvolution::findArrayDimensions(SmallVectorImpl<const SCEV *> &Terms, in findArrayDimensions()
7379 SmallVectorImpl<const SCEV *> &Sizes, in findArrayDimensions()
7380 const SCEV *ElementSize) const { in findArrayDimensions()
7392 for (const SCEV *T : Terms) in findArrayDimensions()
7401 std::sort(Terms.begin(), Terms.end(), [](const SCEV *LHS, const SCEV *RHS) { in findArrayDimensions()
7408 for (const SCEV *&Term : Terms) { in findArrayDimensions()
7409 const SCEV *Q, *R; in findArrayDimensions()
7414 SmallVector<const SCEV *, 4> NewTerms; in findArrayDimensions()
7417 for (const SCEV *T : Terms) in findArrayDimensions()
7418 if (const SCEV *NewT = removeConstantFactors(SE, T)) in findArrayDimensions()
7423 for (const SCEV *T : NewTerms) in findArrayDimensions()
7438 for (const SCEV *S : Sizes) in findArrayDimensions()
7446 ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &Subscripts, in computeAccessFunctions()
7447 SmallVectorImpl<const SCEV *> &Sizes) const { in computeAccessFunctions()
7453 const SCEV *Res = this; in computeAccessFunctions()
7456 const SCEV *Q, *R; in computeAccessFunctions()
7495 for (const SCEV *S : Subscripts) in computeAccessFunctions()
7550 SmallVectorImpl<const SCEV *> &Subscripts, in delinearize()
7551 SmallVectorImpl<const SCEV *> &Sizes, in delinearize()
7552 const SCEV *ElementSize) const { in delinearize()
7554 SmallVector<const SCEV *, 4> Terms; in delinearize()
7575 for (const SCEV *S : Sizes) in delinearize()
7579 for (const SCEV *S : Subscripts) in delinearize()
7741 const SCEV *SV = SE.getSCEV(&*I); in print()
7746 const SCEV *AtUse = SE.getSCEVAtScope(SV, L); in print()
7754 const SCEV *ExitValue = SE.getSCEVAtScope(SV, L->getParentLoop()); in print()
7773 ScalarEvolution::getLoopDisposition(const SCEV *S, const Loop *L) { in getLoopDisposition()
7792 ScalarEvolution::computeLoopDisposition(const SCEV *S, const Loop *L) { in computeLoopDisposition()
7870 bool ScalarEvolution::isLoopInvariant(const SCEV *S, const Loop *L) { in isLoopInvariant()
7874 bool ScalarEvolution::hasComputableLoopEvolution(const SCEV *S, const Loop *L) { in hasComputableLoopEvolution()
7879 ScalarEvolution::getBlockDisposition(const SCEV *S, const BasicBlock *BB) { in getBlockDisposition()
7898 ScalarEvolution::computeBlockDisposition(const SCEV *S, const BasicBlock *BB) { in computeBlockDisposition()
7934 const SCEV *LHS = UDiv->getLHS(), *RHS = UDiv->getRHS(); in computeBlockDisposition()
7960 bool ScalarEvolution::dominates(const SCEV *S, const BasicBlock *BB) { in dominates()
7964 bool ScalarEvolution::properlyDominates(const SCEV *S, const BasicBlock *BB) { in properlyDominates()
7972 const SCEV *Node;
7975 SCEVSearch(const SCEV *N): Node(N), IsFound(false) {} in SCEVSearch()
7977 bool follow(const SCEV *S) { in follow()
7985 bool ScalarEvolution::hasOperand(const SCEV *S, const SCEV *Op) const { in hasOperand()
7991 void ScalarEvolution::forgetMemoizedResults(const SCEV *S) { in forgetMemoizedResults()