Lines Matching refs:AddRec

1285   if (const SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(Op)) {  in getTruncateExpr()  local
1287 for (const SCEV *Op : AddRec->operands()) in getTruncateExpr()
1289 return getAddRecExpr(Operands, AddRec->getLoop(), SCEV::FlagAnyWrap); in getTruncateExpr()
2657 const SCEVAddRecExpr *AddRec = cast<SCEVAddRecExpr>(Ops[Idx]); in getAddExpr() local
2658 const Loop *AddRecLoop = AddRec->getLoop(); in getAddExpr()
2669 LIOps.push_back(AddRec->getStart()); in getAddExpr()
2671 SmallVector<const SCEV *, 4> AddRecOps(AddRec->op_begin(), in getAddExpr()
2672 AddRec->op_end()); in getAddExpr()
2681 Flags = AddRec->getNoWrapFlags(setFlags(Flags, SCEV::FlagNW)); in getAddExpr()
2689 if (Ops[i] == AddRec) { in getAddExpr()
2706 AddRec->getLoop()->getHeader()) && in getAddExpr()
2710 SmallVector<const SCEV *, 4> AddRecOps(AddRec->op_begin(), in getAddExpr()
2711 AddRec->op_end()); in getAddExpr()
2943 } else if (const auto *AddRec = dyn_cast<SCEVAddRecExpr>(Ops[1])) { in getMulExpr() local
2946 for (const SCEV *AddRecOp : AddRec->operands()) in getMulExpr()
2950 return getAddRecExpr(Operands, AddRec->getLoop(), in getMulExpr()
2951 AddRec->getNoWrapFlags(SCEV::FlagNW)); in getMulExpr()
2995 const SCEVAddRecExpr *AddRec = cast<SCEVAddRecExpr>(Ops[Idx]); in getMulExpr() local
2996 const Loop *AddRecLoop = AddRec->getLoop(); in getMulExpr()
3008 NewOps.reserve(AddRec->getNumOperands()); in getMulExpr()
3010 for (unsigned i = 0, e = AddRec->getNumOperands(); i != e; ++i) in getMulExpr()
3011 NewOps.push_back(getMulExpr(Scale, AddRec->getOperand(i), in getMulExpr()
3019 Flags = AddRec->getNoWrapFlags(clearFlags(Flags, SCEV::FlagNW)); in getMulExpr()
3027 if (Ops[i] == AddRec) { in getMulExpr()
3059 if (AddRec->getNumOperands() + OtherAddRec->getNumOperands() - 1 > in getMulExpr()
3064 Type *Ty = AddRec->getType(); in getMulExpr()
3067 for (int x = 0, xe = AddRec->getNumOperands() + in getMulExpr()
3072 for (int z = std::max(y-x, y-(int)AddRec->getNumOperands()+1), in getMulExpr()
3082 const SCEV *Term1 = AddRec->getOperand(y-z); in getMulExpr()
3093 const SCEV *NewAddRec = getAddRecExpr(AddRecOps, AddRec->getLoop(), in getMulExpr()
3099 AddRec = dyn_cast<SCEVAddRecExpr>(NewAddRec); in getMulExpr()
3100 if (!AddRec) in getMulExpr()
5633 if (const SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(S)) { in getRangeRef() local
5636 if (AddRec->hasNoUnsignedWrap()) in getRangeRef()
5637 if (const SCEVConstant *C = dyn_cast<SCEVConstant>(AddRec->getStart())) in getRangeRef()
5644 if (AddRec->hasNoSignedWrap()) { in getRangeRef()
5647 for (unsigned i = 0, e = AddRec->getNumOperands(); i != e; ++i) { in getRangeRef()
5648 if (!isKnownNonNegative(AddRec->getOperand(i))) AllNonNeg = false; in getRangeRef()
5649 if (!isKnownNonPositive(AddRec->getOperand(i))) AllNonPos = false; in getRangeRef()
5662 if (AddRec->isAffine()) { in getRangeRef()
5663 const SCEV *MaxBECount = getMaxBackedgeTakenCount(AddRec->getLoop()); in getRangeRef()
5667 AddRec->getStart(), AddRec->getStepRecurrence(*this), MaxBECount, in getRangeRef()
5674 AddRec->getStart(), AddRec->getStepRecurrence(*this), MaxBECount, in getRangeRef()
5682 return setRange(AddRec, SignHint, std::move(ConservativeResult)); in getRangeRef()
6005 if (auto *AddRec = dyn_cast<SCEVAddRecExpr>(Op)) { in isSCEVExprNeverPoison() local
6011 if (!isLoopInvariant(OtherOp, AddRec->getLoop())) { in isSCEVExprNeverPoison()
6018 isGuaranteedToExecuteForEveryIteration(I, AddRec->getLoop())) in isSCEVExprNeverPoison()
7339 if (const SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(LHS)) in computeExitLimitFromICmp() local
7340 if (AddRec->getLoop() == L) { in computeExitLimitFromICmp()
7345 const SCEV *Ret = AddRec->getNumIterationsInRange(CompRange, *this); in computeExitLimitFromICmp()
7419 EvaluateConstantChrecAtConstant(const SCEVAddRecExpr *AddRec, ConstantInt *C, in EvaluateConstantChrecAtConstant() argument
7422 const SCEV *Val = AddRec->evaluateAtIteration(InVal, SE); in EvaluateConstantChrecAtConstant()
8225 if (const SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(V)) { in computeSCEVAtScope() local
8229 for (unsigned i = 0, e = AddRec->getNumOperands(); i != e; ++i) { in computeSCEVAtScope()
8230 const SCEV *OpAtScope = getSCEVAtScope(AddRec->getOperand(i), L); in computeSCEVAtScope()
8231 if (OpAtScope == AddRec->getOperand(i)) in computeSCEVAtScope()
8236 SmallVector<const SCEV *, 8> NewOps(AddRec->op_begin(), in computeSCEVAtScope()
8237 AddRec->op_begin()+i); in computeSCEVAtScope()
8240 NewOps.push_back(getSCEVAtScope(AddRec->getOperand(i), L)); in computeSCEVAtScope()
8243 getAddRecExpr(NewOps, AddRec->getLoop(), in computeSCEVAtScope()
8244 AddRec->getNoWrapFlags(SCEV::FlagNW)); in computeSCEVAtScope()
8245 AddRec = dyn_cast<SCEVAddRecExpr>(FoldedRec); in computeSCEVAtScope()
8249 if (!AddRec) in computeSCEVAtScope()
8256 if (!AddRec->getLoop()->contains(L)) { in computeSCEVAtScope()
8259 const SCEV *BackedgeTakenCount = getBackedgeTakenCount(AddRec->getLoop()); in computeSCEVAtScope()
8260 if (BackedgeTakenCount == getCouldNotCompute()) return AddRec; in computeSCEVAtScope()
8263 return AddRec->evaluateAtIteration(BackedgeTakenCount, *this); in computeSCEVAtScope()
8266 return AddRec; in computeSCEVAtScope()
8362 GetQuadraticEquation(const SCEVAddRecExpr *AddRec) { in GetQuadraticEquation() argument
8363 assert(AddRec->getNumOperands() == 3 && "This is not a quadratic chrec!"); in GetQuadraticEquation()
8364 const SCEVConstant *LC = dyn_cast<SCEVConstant>(AddRec->getOperand(0)); in GetQuadraticEquation()
8365 const SCEVConstant *MC = dyn_cast<SCEVConstant>(AddRec->getOperand(1)); in GetQuadraticEquation()
8366 const SCEVConstant *NC = dyn_cast<SCEVConstant>(AddRec->getOperand(2)); in GetQuadraticEquation()
8368 << *AddRec << '\n'); in GetQuadraticEquation()
8462 SolveQuadraticAddRecExact(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE) { in SolveQuadraticAddRecExact() argument
8465 auto T = GetQuadraticEquation(AddRec); in SolveQuadraticAddRecExact()
8476 ConstantInt *V = EvaluateConstantChrecAtConstant(AddRec, CX, SE); in SolveQuadraticAddRecExact()
8494 SolveQuadraticAddRecRange(const SCEVAddRecExpr *AddRec, in SolveQuadraticAddRecRange() argument
8496 assert(AddRec->getOperand(0)->isZero() && in SolveQuadraticAddRecRange()
8499 << Range << ", addrec " << *AddRec << '\n'); in SolveQuadraticAddRecRange()
8502 assert(Range.contains(APInt(SE.getTypeSizeInBits(AddRec->getType()), 0)) && in SolveQuadraticAddRecRange()
8507 auto T = GetQuadraticEquation(AddRec); in SolveQuadraticAddRecRange()
8539 ConstantInt *V0 = EvaluateConstantChrecAtConstant(AddRec, C0, SE); in SolveQuadraticAddRecRange()
8544 ConstantInt *V1 = EvaluateConstantChrecAtConstant(AddRec, C1, SE); in SolveQuadraticAddRecRange()
8638 const SCEVAddRecExpr *AddRec = in howFarToZero() local
8641 if (!AddRec && AllowPredicates) in howFarToZero()
8645 AddRec = convertSCEVToAddRecWithPredicates(V, L, Predicates); in howFarToZero()
8647 if (!AddRec || AddRec->getLoop() != L) in howFarToZero()
8652 if (AddRec->isQuadratic() && AddRec->getType()->isIntegerTy()) { in howFarToZero()
8656 if (auto S = SolveQuadraticAddRecExact(AddRec, *this)) { in howFarToZero()
8664 if (!AddRec->isAffine()) in howFarToZero()
8679 const SCEV *Start = getSCEVAtScope(AddRec->getStart(), L->getParentLoop()); in howFarToZero()
8680 const SCEV *Step = getSCEVAtScope(AddRec->getOperand(1), L->getParentLoop()); in howFarToZero()
8730 if (ControlsExit && AddRec->hasNoSelfWrap() && in howFarToZero()
8731 loopHasNoAbnormalExits(AddRec->getLoop())) { in howFarToZero()
12132 auto *AddRec = dyn_cast<SCEVAddRecExpr>(S); in convertSCEVToAddRecWithPredicates() local
12134 if (!AddRec) in convertSCEVToAddRecWithPredicates()
12142 return AddRec; in convertSCEVToAddRecWithPredicates()