• Home
  • Raw
  • Download

Lines Matching refs:AR

164     const SCEVAddRecExpr *AR = cast<SCEVAddRecExpr>(this);  in print()  local
165 OS << "{" << *AR->getOperand(0); in print()
166 for (unsigned i = 1, e = AR->getNumOperands(); i != e; ++i) in print()
167 OS << ",+," << *AR->getOperand(i); in print()
169 if (AR->hasNoUnsignedWrap()) in print()
171 if (AR->hasNoSignedWrap()) in print()
173 if (AR->hasNoSelfWrap() && in print()
174 !AR->getNoWrapFlags((NoWrapFlags)(FlagNUW | FlagNSW))) in print()
176 AR->getLoop()->getHeader()->printAsOperand(OS, /*PrintType=*/false); in print()
1241 static const SCEV *getPreStartForExtend(const SCEVAddRecExpr *AR, Type *Ty, in getPreStartForExtend() argument
1246 const Loop *L = AR->getLoop(); in getPreStartForExtend()
1247 const SCEV *Start = AR->getStart(); in getPreStartForExtend()
1248 const SCEV *Step = AR->getStepRecurrence(*SE); in getPreStartForExtend()
1286 unsigned BitWidth = SE->getTypeSizeInBits(AR->getType()); in getPreStartForExtend()
1292 if (PreAR && AR->getNoWrapFlags(WrapType)) { in getPreStartForExtend()
1315 static const SCEV *getExtendAddRecStart(const SCEVAddRecExpr *AR, Type *Ty, in getExtendAddRecStart() argument
1319 const SCEV *PreStart = getPreStartForExtend<ExtendOpTy>(AR, Ty, SE); in getExtendAddRecStart()
1321 return (SE->*GetExtendExpr)(AR->getStart(), Ty); in getExtendAddRecStart()
1323 return SE->getAddExpr((SE->*GetExtendExpr)(AR->getStepRecurrence(*SE), Ty), in getExtendAddRecStart()
1447 if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(Op)) in getZeroExtendExpr() local
1448 if (AR->isAffine()) { in getZeroExtendExpr()
1449 const SCEV *Start = AR->getStart(); in getZeroExtendExpr()
1450 const SCEV *Step = AR->getStepRecurrence(*this); in getZeroExtendExpr()
1451 unsigned BitWidth = getTypeSizeInBits(AR->getType()); in getZeroExtendExpr()
1452 const Loop *L = AR->getLoop(); in getZeroExtendExpr()
1454 if (!AR->hasNoUnsignedWrap()) { in getZeroExtendExpr()
1455 auto NewFlags = proveNoWrapViaConstantRanges(AR); in getZeroExtendExpr()
1456 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(NewFlags); in getZeroExtendExpr()
1461 if (AR->hasNoUnsignedWrap()) in getZeroExtendExpr()
1463 getExtendAddRecStart<SCEVZeroExtendExpr>(AR, Ty, this), in getZeroExtendExpr()
1464 getZeroExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getZeroExtendExpr()
1499 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNUW); in getZeroExtendExpr()
1502 getExtendAddRecStart<SCEVZeroExtendExpr>(AR, Ty, this), in getZeroExtendExpr()
1503 getZeroExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getZeroExtendExpr()
1514 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNW); in getZeroExtendExpr()
1517 getExtendAddRecStart<SCEVZeroExtendExpr>(AR, Ty, this), in getZeroExtendExpr()
1518 getSignExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getZeroExtendExpr()
1540 if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_ULT, AR, N) || in getZeroExtendExpr()
1543 AR->getPostIncExpr(*this), N))) { in getZeroExtendExpr()
1546 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNUW); in getZeroExtendExpr()
1549 getExtendAddRecStart<SCEVZeroExtendExpr>(AR, Ty, this), in getZeroExtendExpr()
1550 getZeroExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getZeroExtendExpr()
1555 if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_UGT, AR, N) || in getZeroExtendExpr()
1558 AR->getPostIncExpr(*this), N))) { in getZeroExtendExpr()
1562 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNW); in getZeroExtendExpr()
1565 getExtendAddRecStart<SCEVZeroExtendExpr>(AR, Ty, this), in getZeroExtendExpr()
1566 getSignExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getZeroExtendExpr()
1572 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNUW); in getZeroExtendExpr()
1574 getExtendAddRecStart<SCEVZeroExtendExpr>(AR, Ty, this), in getZeroExtendExpr()
1575 getZeroExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getZeroExtendExpr()
1674 if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(Op)) in getSignExtendExpr() local
1675 if (AR->isAffine()) { in getSignExtendExpr()
1676 const SCEV *Start = AR->getStart(); in getSignExtendExpr()
1677 const SCEV *Step = AR->getStepRecurrence(*this); in getSignExtendExpr()
1678 unsigned BitWidth = getTypeSizeInBits(AR->getType()); in getSignExtendExpr()
1679 const Loop *L = AR->getLoop(); in getSignExtendExpr()
1681 if (!AR->hasNoSignedWrap()) { in getSignExtendExpr()
1682 auto NewFlags = proveNoWrapViaConstantRanges(AR); in getSignExtendExpr()
1683 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(NewFlags); in getSignExtendExpr()
1688 if (AR->hasNoSignedWrap()) in getSignExtendExpr()
1690 getExtendAddRecStart<SCEVSignExtendExpr>(AR, Ty, this), in getSignExtendExpr()
1726 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNSW); in getSignExtendExpr()
1729 getExtendAddRecStart<SCEVSignExtendExpr>(AR, Ty, this), in getSignExtendExpr()
1730 getSignExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getSignExtendExpr()
1747 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNW); in getSignExtendExpr()
1751 getExtendAddRecStart<SCEVSignExtendExpr>(AR, Ty, this), in getSignExtendExpr()
1752 getZeroExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getSignExtendExpr()
1776 (isLoopBackedgeGuardedByCond(L, Pred, AR, OverflowLimit) || in getSignExtendExpr()
1778 isLoopBackedgeGuardedByCond(L, Pred, AR->getPostIncExpr(*this), in getSignExtendExpr()
1781 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNSW); in getSignExtendExpr()
1783 getExtendAddRecStart<SCEVSignExtendExpr>(AR, Ty, this), in getSignExtendExpr()
1784 getSignExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getSignExtendExpr()
1799 const SCEV *NewAR = getAddRecExpr(getZero(AR->getType()), Step, L, in getSignExtendExpr()
1800 AR->getNoWrapFlags()); in getSignExtendExpr()
1806 const_cast<SCEVAddRecExpr *>(AR)->setNoWrapFlags(SCEV::FlagNSW); in getSignExtendExpr()
1808 getExtendAddRecStart<SCEVSignExtendExpr>(AR, Ty, this), in getSignExtendExpr()
1809 getSignExtendExpr(Step, Ty), L, AR->getNoWrapFlags()); in getSignExtendExpr()
1862 if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(Op)) { in getAnyExtendExpr() local
1864 for (const SCEV *Op : AR->operands()) in getAnyExtendExpr()
1866 return getAddRecExpr(Ops, AR->getLoop(), SCEV::FlagNW); in getAnyExtendExpr()
2699 if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(LHS)) in getUDivExpr() local
2701 dyn_cast<SCEVConstant>(AR->getStepRecurrence(*this))) { in getUDivExpr()
2706 getZeroExtendExpr(AR, ExtTy) == in getUDivExpr()
2707 getAddRecExpr(getZeroExtendExpr(AR->getStart(), ExtTy), in getUDivExpr()
2709 AR->getLoop(), SCEV::FlagAnyWrap)) { in getUDivExpr()
2711 for (const SCEV *Op : AR->operands()) in getUDivExpr()
2713 return getAddRecExpr(Operands, AR->getLoop(), SCEV::FlagNW); in getUDivExpr()
2718 const SCEVConstant *StartC = dyn_cast<SCEVConstant>(AR->getStart()); in getUDivExpr()
2720 getZeroExtendExpr(AR, ExtTy) == in getUDivExpr()
2721 getAddRecExpr(getZeroExtendExpr(AR->getStart(), ExtTy), in getUDivExpr()
2723 AR->getLoop(), SCEV::FlagAnyWrap)) { in getUDivExpr()
2728 AR->getLoop(), SCEV::FlagNW); in getUDivExpr()
3755 ScalarEvolution::proveNoWrapViaConstantRanges(const SCEVAddRecExpr *AR) { in proveNoWrapViaConstantRanges() argument
3756 if (!AR->isAffine()) in proveNoWrapViaConstantRanges()
3762 if (!AR->hasNoSignedWrap()) { in proveNoWrapViaConstantRanges()
3763 ConstantRange AddRecRange = getSignedRange(AR); in proveNoWrapViaConstantRanges()
3764 ConstantRange IncRange = getSignedRange(AR->getStepRecurrence(*this)); in proveNoWrapViaConstantRanges()
3772 if (!AR->hasNoUnsignedWrap()) { in proveNoWrapViaConstantRanges()
3773 ConstantRange AddRecRange = getUnsignedRange(AR); in proveNoWrapViaConstantRanges()
3774 ConstantRange IncRange = getUnsignedRange(AR->getStepRecurrence(*this)); in proveNoWrapViaConstantRanges()
7309 if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(RHS)) { in SimplifyICmpOperands() local
7310 const Loop *L = AR->getLoop(); in SimplifyICmpOperands()
8948 if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S)) in follow() local
8949 Strides.push_back(AR->getStepRecurrence(SE)); in follow()
9280 if (auto *AR = dyn_cast<SCEVAddRecExpr>(Expr)) in computeAccessFunctions() local
9281 if (!AR->isAffine()) in computeAccessFunctions()
9718 const SCEVAddRecExpr *AR = cast<SCEVAddRecExpr>(S); in computeLoopDisposition() local
9721 if (AR->getLoop() == L) in computeLoopDisposition()
9729 if (L->contains(AR->getLoop())) in computeLoopDisposition()
9733 if (AR->getLoop()->contains(L)) in computeLoopDisposition()
9738 for (auto *Op : AR->operands()) in computeLoopDisposition()
9825 const SCEVAddRecExpr *AR = cast<SCEVAddRecExpr>(S); in computeBlockDisposition() local
9826 if (!DT.dominates(AR->getLoop()->getHeader(), BB)) in computeBlockDisposition()
10085 const SCEVAddRecExpr *AR, in getWrapPredicate() argument
10090 ID.AddPointer(AR); in getWrapPredicate()
10096 SCEVWrapPredicate(ID.Intern(SCEVAllocator), AR, AddedFlags); in getWrapPredicate()
10130 const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(Operand); in visitZeroExtendExpr() local
10131 if (AR && AR->getLoop() == L && AR->isAffine()) { in visitZeroExtendExpr()
10134 const SCEV *Step = AR->getStepRecurrence(SE); in visitZeroExtendExpr()
10136 if (addOverflowAssumption(AR, SCEVWrapPredicate::IncrementNUSW)) in visitZeroExtendExpr()
10137 return SE.getAddRecExpr(SE.getZeroExtendExpr(AR->getStart(), Ty), in visitZeroExtendExpr()
10139 AR->getNoWrapFlags()); in visitZeroExtendExpr()
10146 const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(Operand); in visitSignExtendExpr() local
10147 if (AR && AR->getLoop() == L && AR->isAffine()) { in visitSignExtendExpr()
10150 const SCEV *Step = AR->getStepRecurrence(SE); in visitSignExtendExpr()
10152 if (addOverflowAssumption(AR, SCEVWrapPredicate::IncrementNSSW)) in visitSignExtendExpr()
10153 return SE.getAddRecExpr(SE.getSignExtendExpr(AR->getStart(), Ty), in visitSignExtendExpr()
10155 AR->getNoWrapFlags()); in visitSignExtendExpr()
10161 bool addOverflowAssumption(const SCEVAddRecExpr *AR, in addOverflowAssumption() argument
10163 auto *A = SE.getWrapPredicate(AR, AddedFlags); in addOverflowAssumption()
10229 const SCEVAddRecExpr *AR, in SCEVWrapPredicate() argument
10231 : SCEVPredicate(ID, P_Wrap), AR(AR), Flags(Flags) {} in SCEVWrapPredicate()
10233 const SCEV *SCEVWrapPredicate::getExpr() const { return AR; } in getExpr()
10238 return Op && Op->AR == AR && setFlags(Flags, Op->Flags) == Flags; in implies()
10242 SCEV::NoWrapFlags ScevFlags = AR->getNoWrapFlags(); in isAlwaysTrue()
10261 SCEVWrapPredicate::getImpliedFlags(const SCEVAddRecExpr *AR, in getImpliedFlags() argument
10264 SCEV::NoWrapFlags StaticFlags = AR->getNoWrapFlags(); in getImpliedFlags()
10273 if (const auto *Step = dyn_cast<SCEVConstant>(AR->getStepRecurrence(SE))) in getImpliedFlags()
10393 const auto *AR = cast<SCEVAddRecExpr>(Expr); in setNoOverflow() local
10395 auto ImpliedFlags = SCEVWrapPredicate::getImpliedFlags(AR, SE); in setNoOverflow()
10399 addPredicate(*SE.getWrapPredicate(AR, Flags)); in setNoOverflow()
10409 const auto *AR = cast<SCEVAddRecExpr>(Expr); in hasNoOverflow() local
10412 Flags, SCEVWrapPredicate::getImpliedFlags(AR, SE)); in hasNoOverflow()