LLVM  3.7.0
Public Member Functions | Static Public Member Functions | Friends | List of all members
llvm::SCEVAddRecExpr Class Reference

SCEVAddRecExpr - This node represents a polynomial recurrence on the trip count of the specified loop. More...

#include <ScalarEvolutionExpressions.h>

Inheritance diagram for llvm::SCEVAddRecExpr:
[legend]
Collaboration diagram for llvm::SCEVAddRecExpr:
[legend]

Public Member Functions

const SCEVgetStart () const
 
const LoopgetLoop () const
 
const SCEVgetStepRecurrence (ScalarEvolution &SE) const
 getStepRecurrence - This method constructs and returns the recurrence indicating how much this expression steps by. More...
 
bool isAffine () const
 isAffine - Return true if this represents an expression A + B*x where A and B are loop invariant values. More...
 
bool isQuadratic () const
 isQuadratic - Return true if this represents an expression A + B*x + C*x^2 where A, B and C are loop invariant values. More...
 
void setNoWrapFlags (NoWrapFlags Flags)
 Set flags for a recurrence without clearing any previously set flags. More...
 
const SCEVevaluateAtIteration (const SCEV *It, ScalarEvolution &SE) const
 evaluateAtIteration - Return the value of this chain of recurrences at the specified iteration number. More...
 
const SCEVgetNumIterationsInRange (ConstantRange Range, ScalarEvolution &SE) const
 getNumIterationsInRange - Return the number of iterations of this loop that produce values in the specified constant range. More...
 
const SCEVAddRecExprgetPostIncExpr (ScalarEvolution &SE) const
 getPostIncExpr - Return an expression representing the value of this expression one iteration of the loop ahead. More...
 
- Public Member Functions inherited from llvm::SCEVNAryExpr
size_t getNumOperands () const
 
const SCEVgetOperand (unsigned i) const
 
op_iterator op_begin () const
 
op_iterator op_end () const
 
op_range operands () const
 
TypegetType () const
 
NoWrapFlags getNoWrapFlags (NoWrapFlags Mask=NoWrapMask) const
 
- Public Member Functions inherited from llvm::SCEV
 SCEV (const FoldingSetNodeIDRef ID, unsigned SCEVTy)
 
unsigned getSCEVType () const
 
TypegetType () const
 getType - Return the LLVM type of this SCEV expression. More...
 
bool isZero () const
 isZero - Return true if the expression is a constant zero. More...
 
bool isOne () const
 isOne - Return true if the expression is a constant one. More...
 
bool isAllOnesValue () const
 isAllOnesValue - Return true if the expression is a constant all-ones value. More...
 
bool isNonConstantNegative () const
 isNonConstantNegative - Return true if the specified scev is negated, but not a constant. More...
 
void print (raw_ostream &OS) const
 print - Print out the internal representation of this scalar to the specified stream. More...
 
void dump () const
 dump - This method is used for debugging. More...
 
- Public Member Functions inherited from llvm::FoldingSetImpl::Node
 Node ()
 
void * getNextInBucket () const
 
void SetNextInBucket (void *N)
 

Static Public Member Functions

static bool classof (const SCEV *S)
 Methods for support type inquiry through isa, cast, and dyn_cast: More...
 
- Static Public Member Functions inherited from llvm::SCEVNAryExpr
static bool classof (const SCEV *S)
 Methods for support type inquiry through isa, cast, and dyn_cast: More...
 

Friends

class ScalarEvolution
 

Additional Inherited Members

- Public Types inherited from llvm::SCEVNAryExpr
typedef const SCEV *constop_iterator
 
typedef iterator_range
< op_iterator
op_range
 
- Public Types inherited from llvm::SCEV
enum  NoWrapFlags {
  FlagAnyWrap = 0, FlagNW = (1 << 0), FlagNUW = (1 << 1), FlagNSW = (1 << 2),
  NoWrapMask = (1 << 3) -1
}
 NoWrapFlags are bitfield indices into SubclassData. More...
 
- Protected Member Functions inherited from llvm::SCEVNAryExpr
 SCEVNAryExpr (const FoldingSetNodeIDRef ID, enum SCEVTypes T, const SCEV *const *O, size_t N)
 
- Protected Attributes inherited from llvm::SCEVNAryExpr
const SCEV *constOperands
 
size_t NumOperands
 
- Protected Attributes inherited from llvm::SCEV
unsigned short SubclassData
 SubclassData - This field is initialized to zero and may be used in subclasses to store miscellaneous information. More...
 

Detailed Description

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 288 of file ScalarEvolutionExpressions.h.

Member Function Documentation

static bool llvm::SCEVAddRecExpr::classof ( const SCEV S)
inlinestatic

Methods for support type inquiry through isa, cast, and dyn_cast:

Definition at line 356 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.

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 1067 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(), llvm::RuntimePointerChecking::insert(), and llvm::SCEVApplyRewriter::visitAddRecExpr().

const Loop* llvm::SCEVAddRecExpr::getLoop ( ) const
inline
const SCEV * SCEVAddRecExpr::getNumIterationsInRange ( ConstantRange  Range,
ScalarEvolution SE 
) const
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 351 of file ScalarEvolutionExpressions.h.

References llvm::ScalarEvolution::getAddExpr(), and getStepRecurrence().

Referenced by llvm::ScalarEvolution::isKnownPredicate().

const SCEV* llvm::SCEVAddRecExpr::getStart ( ) const
inline
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 305 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(), getPreStartForExtend(), llvm::getStrideFromPointer(), IsIncrementNSW(), IsIncrementNUW(), llvm::isInductionPHI(), isLikelyComplexAddressComputation(), and llvm::isStridedPtr().

bool llvm::SCEVAddRecExpr::isAffine ( ) const
inline

isAffine - Return true if this represents an expression A + B*x where A and B are loop invariant values.

Definition at line 314 of file ScalarEvolutionExpressions.h.

References llvm::SCEVNAryExpr::getNumOperands().

Referenced by FindLoopCounter(), genLoopLimit(), getNumIterationsInRange(), getStepRecurrence(), and hasComputableBounds().

bool llvm::SCEVAddRecExpr::isQuadratic ( ) const
inline

isQuadratic - Return true if this represents an expression 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 323 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 330 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().

Friends And Related Function Documentation

friend class ScalarEvolution
friend

Definition at line 289 of file ScalarEvolutionExpressions.h.


The documentation for this class was generated from the following files: