LLVM API Documentation
#include <ScalarEvolutionExpressions.h>


Public Member Functions | |
| const SCEV * | getStart () const |
| const Loop * | getLoop () const |
| const SCEV * | getStepRecurrence (ScalarEvolution &SE) const |
| bool | isAffine () const |
| bool | isQuadratic () const |
| void | setNoWrapFlags (NoWrapFlags Flags) |
| const SCEV * | evaluateAtIteration (const SCEV *It, ScalarEvolution &SE) const |
| const SCEV * | getNumIterationsInRange (ConstantRange Range, ScalarEvolution &SE) const |
| const SCEVAddRecExpr * | getPostIncExpr (ScalarEvolution &SE) const |
Static Public Member Functions | |
| static bool | classof (const SCEV *S) |
| Methods for support type inquiry through isa, cast, and dyn_cast: | |
Friends | |
| class | ScalarEvolution |
SCEVAddRecExpr - This node represents a polynomial recurrence on the trip count of the specified loop. This is the primary focus of the ScalarEvolution framework; all the other SCEV subclasses are mostly just supporting infrastructure to allow SCEVAddRecExpr expressions to be created and analyzed.
All operands of an AddRec are required to be loop invariant.
Definition at line 283 of file ScalarEvolutionExpressions.h.
Methods for support type inquiry through isa, cast, and dyn_cast:
Reimplemented from llvm::SCEVNAryExpr.
Definition at line 351 of file ScalarEvolutionExpressions.h.
References llvm::SCEV::getSCEVType(), and llvm::scAddRecExpr.
| const SCEV * SCEVAddRecExpr::evaluateAtIteration | ( | const SCEV * | It, |
| ScalarEvolution & | SE | ||
| ) | const |
evaluateAtIteration - Return the value of this chain of recurrences at the specified iteration number.
evaluateAtIteration - Return the value of this chain of recurrences at the specified iteration number. We can evaluate this recurrence by multiplying each element in the chain by the binomial coefficient corresponding to it. In other words, we can evaluate {A,+,B,+,C,+,D} as:
A*BC(It, 0) + B*BC(It, 1) + C*BC(It, 2) + D*BC(It, 3)
where BC(It, k) stands for binomial coefficient.
Definition at line 799 of file ScalarEvolution.cpp.
References BinomialCoefficient(), llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getMulExpr(), llvm::SCEVNAryExpr::getNumOperands(), llvm::SCEVNAryExpr::getOperand(), getStart(), and llvm::SCEVNAryExpr::getType().
Referenced by EvaluateConstantChrecAtConstant(), and llvm::SCEVApplyRewriter::visitAddRecExpr().
| const Loop* llvm::SCEVAddRecExpr::getLoop | ( | ) | const [inline] |
Definition at line 294 of file ScalarEvolutionExpressions.h.
Referenced by CollectSubexprs(), findIVOperand(), FindLoopCounter(), genLoopLimit(), llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getMulExpr(), getNumIterationsInRange(), getPreStartForSignExtend(), getStepRecurrence(), isExistingPhi(), isSimpleIVUser(), llvm::SCEV::print(), llvm::SCEVRewriter::visitAddRecExpr(), and llvm::SCEVApplyRewriter::visitAddRecExpr().
| const SCEV * SCEVAddRecExpr::getNumIterationsInRange | ( | ConstantRange | Range, |
| ScalarEvolution & | SE | ||
| ) | const |
getNumIterationsInRange - Return the number of iterations of this loop that produce values in the specified constant range. Another way of looking at this is that it returns the first iteration number where the value is not in the condition, thus computing the exit count. If the iteration count can't be computed, an instance of SCEVCouldNotCompute is returned.
Definition at line 6468 of file ScalarEvolution.cpp.
References llvm::ARM_PROC::A, llvm::ConstantRange::contains(), llvm::dyn_cast(), EvaluateConstantChrecAtConstant(), llvm::SCEV::FlagAnyWrap, llvm::SCEV::FlagNW, llvm::ConstantInt::get(), llvm::ScalarEvolution::getAddRecExpr(), llvm::ScalarEvolution::getConstant(), llvm::ScalarEvolution::getContext(), llvm::ScalarEvolution::getCouldNotCompute(), llvm::ConstantExpr::getICmp(), getLoop(), llvm::ConstantRange::getLower(), llvm::ScalarEvolution::getNegativeSCEV(), llvm::SCEVNAryExpr::getNoWrapFlags(), llvm::SCEVNAryExpr::getNumOperands(), llvm::SCEVNAryExpr::getOperand(), getStart(), llvm::SCEVNAryExpr::getType(), llvm::ScalarEvolution::getTypeSizeInBits(), llvm::ConstantRange::getUpper(), llvm::SCEVConstant::getValue(), llvm::ConstantInt::getValue(), isAffine(), llvm::ConstantRange::isFullSet(), isQuadratic(), llvm::SCEVNAryExpr::op_begin(), llvm::SCEVNAryExpr::op_end(), llvm::SCEVNAryExpr::Operands, llvm::PPCISD::SC, llvm::APInt::sge(), SolveQuadraticEquation(), llvm::ConstantRange::subtract(), std::swap(), and llvm::APIntOps::udiv().
| const SCEVAddRecExpr* llvm::SCEVAddRecExpr::getPostIncExpr | ( | ScalarEvolution & | SE | ) | const [inline] |
getPostIncExpr - Return an expression representing the value of this expression one iteration of the loop ahead.
Definition at line 346 of file ScalarEvolutionExpressions.h.
References llvm::ScalarEvolution::getAddExpr(), and getStepRecurrence().
| const SCEV* llvm::SCEVAddRecExpr::getStart | ( | ) | const [inline] |
Definition at line 293 of file ScalarEvolutionExpressions.h.
References llvm::SCEVNAryExpr::Operands.
Referenced by CollectSubexprs(), evaluateAtIteration(), FindLoopCounter(), genLoopLimit(), llvm::ScalarEvolution::getAddExpr(), getNumIterationsInRange(), getPreStartForSignExtend(), and getSignExtendAddRecStart().
| const SCEV* llvm::SCEVAddRecExpr::getStepRecurrence | ( | ScalarEvolution & | SE | ) | const [inline] |
getStepRecurrence - This method constructs and returns the recurrence indicating how much this expression steps by. If this is a polynomial of degree N, it returns a chrec of degree N-1. We cannot determine whether the step recurrence has self-wraparound.
Definition at line 300 of file ScalarEvolutionExpressions.h.
References llvm::SCEV::FlagAnyWrap, llvm::ScalarEvolution::getAddRecExpr(), getLoop(), llvm::SCEVNAryExpr::getOperand(), isAffine(), llvm::SCEVNAryExpr::op_begin(), and llvm::SCEVNAryExpr::op_end().
Referenced by CollectSubexprs(), FindLoopCounter(), genLoopLimit(), getPostIncExpr(), getPreStartForSignExtend(), and getSignExtendAddRecStart().
| bool llvm::SCEVAddRecExpr::isAffine | ( | ) | const [inline] |
isAffine - Return true if this is an affine AddRec (i.e., it represents an expressions A+B*x where A and B are loop invariant values.
Definition at line 309 of file ScalarEvolutionExpressions.h.
References llvm::SCEVNAryExpr::getNumOperands().
Referenced by FindLoopCounter(), genLoopLimit(), getNumIterationsInRange(), and getStepRecurrence().
| bool llvm::SCEVAddRecExpr::isQuadratic | ( | ) | const [inline] |
isQuadratic - Return true if this is an quadratic AddRec (i.e., it represents an expressions A+B*x+C*x^2 where A, B and C are loop invariant values. This corresponds to an addrec of the form {L,+,M,+,N}
Definition at line 318 of file ScalarEvolutionExpressions.h.
References llvm::SCEVNAryExpr::getNumOperands().
Referenced by getNumIterationsInRange().
| void llvm::SCEVAddRecExpr::setNoWrapFlags | ( | NoWrapFlags | Flags | ) | [inline] |
Set flags for a recurrence without clearing any previously set flags. For AddRec, either NUW or NSW implies NW. Keep track of this fact here to make it easier to propagate flags.
Definition at line 325 of file ScalarEvolutionExpressions.h.
References llvm::SCEV::FlagNSW, llvm::SCEV::FlagNUW, llvm::SCEV::FlagNW, llvm::ScalarEvolution::setFlags(), and llvm::SCEV::SubclassData.
Referenced by llvm::ScalarEvolution::getAddRecExpr().
friend class ScalarEvolution [friend] |
Definition at line 284 of file ScalarEvolutionExpressions.h.