llvm::SCEVAddRecExpr Class Reference

#include <ScalarEvolutionExpressions.h>

Inheritance diagram for llvm::SCEVAddRecExpr:

llvm::SCEVNAryExpr llvm::SCEV

List of all members.

Public Member Functions

const SCEVgetStart () const
const Loop * getLoop () const
const SCEVgetStepRecurrence (ScalarEvolution &SE) const
virtual bool hasComputableLoopEvolution (const Loop *QL) const
virtual bool isLoopInvariant (const Loop *QueryLoop) const
bool dominates (BasicBlock *BB, DominatorTree *DT) const
bool properlyDominates (BasicBlock *BB, DominatorTree *DT) const
bool isAffine () const
bool isQuadratic () const
const SCEVevaluateAtIteration (const SCEV *It, ScalarEvolution &SE) const
const SCEVgetNumIterationsInRange (ConstantRange Range, ScalarEvolution &SE) const
const SCEVAddRecExprgetPostIncExpr (ScalarEvolution &SE) const
virtual void print (raw_ostream &OS) const

Static Public Member Functions

static bool classof (const SCEVAddRecExpr *S)
 Methods for support type inquiry through isa, cast, and dyn_cast:.
static bool classof (const SCEV *S)

Friends

class ScalarEvolution


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.


Member Function Documentation

bool llvm::SCEVAddRecExpr::dominates ( BasicBlock *  BB,
DominatorTree DT 
) const [virtual]

dominates - Return true if elements that makes up this SCEV dominates the specified basic block.

Reimplemented from llvm::SCEVNAryExpr.

const SCEV* llvm::SCEVAddRecExpr::evaluateAtIteration ( const SCEV It,
ScalarEvolution SE 
) const

evaluateAtIteration - Return the value of this chain of recurrences at the specified iteration number.

const SCEV* llvm::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.

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.

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.

virtual bool llvm::SCEVAddRecExpr::hasComputableLoopEvolution ( const Loop *  L  )  const [inline, virtual]

hasComputableLoopEvolution - Return true if this SCEV changes value in a known way in the specified loop. This property being true implies that the value is variant in the loop AND that we can emit an expression to compute the value of the expression at any particular loop iteration.

Reimplemented from llvm::SCEVNAryExpr.

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.

virtual bool llvm::SCEVAddRecExpr::isLoopInvariant ( const Loop *  L  )  const [virtual]

isLoopInvariant - Return true if the value of this SCEV is unchanging in the specified loop.

Reimplemented from llvm::SCEVNAryExpr.

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}

virtual void llvm::SCEVAddRecExpr::print ( raw_ostream &  OS  )  const [virtual]

print - Print out the internal representation of this scalar to the specified stream. This should really only be used for debugging purposes.

Implements llvm::SCEV.

bool llvm::SCEVAddRecExpr::properlyDominates ( BasicBlock *  BB,
DominatorTree DT 
) const [virtual]

properlyDominates - Return true if elements that makes up this SCEV properly dominate the specified basic block.

Reimplemented from llvm::SCEVNAryExpr.


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

Generated on Fri Mar 19 01:41:26 2010 by  doxygen 1.5.8