LLVM API Documentation

Public Member Functions | Static Public Member Functions | Friends
llvm::SCEVAddRecExpr Class Reference

#include <ScalarEvolutionExpressions.h>

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

List of all members.

Public Member Functions

const SCEVgetStart () const
const LoopgetLoop () const
const SCEVgetStepRecurrence (ScalarEvolution &SE) const
bool isAffine () const
bool isQuadratic () const
void setNoWrapFlags (NoWrapFlags Flags)
const SCEVevaluateAtIteration (const SCEV *It, ScalarEvolution &SE) const
const SCEVgetNumIterationsInRange (ConstantRange Range, ScalarEvolution &SE) const
const SCEVAddRecExprgetPostIncExpr (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

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


Member Function Documentation

static bool llvm::SCEVAddRecExpr::classof ( const SCEV S) [inline, static]

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

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

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 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().


Friends And Related Function Documentation

friend class ScalarEvolution [friend]

Definition at line 284 of file ScalarEvolutionExpressions.h.


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