LLVM  10.0.0svn

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

#include "llvm/Analysis/ScalarEvolutionExpressions.h"

[legend]
[legend]

## Public Member Functions

const SCEVgetStart () const

const LoopgetLoop () const

const SCEVgetStepRecurrence (ScalarEvolution &SE) const
Constructs and returns the recurrence indicating how much this expression steps by. More...

bool isAffine () const
Return true if this represents an expression A + B*x where A and B are loop invariant values. More...

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
Return the value of this chain of recurrences at the specified iteration number. More...

const SCEVgetNumIterationsInRange (const ConstantRange &Range, ScalarEvolution &SE) const
Return the number of iterations of this loop that produce values in the specified constant range. More...

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

bool hasNoUnsignedWrap () const

bool hasNoSignedWrap () const

bool hasNoSelfWrap () const

Public Member Functions inherited from llvm::SCEV
SCEV (const FoldingSetNodeIDRef ID, unsigned SCEVTy, unsigned short ExpressionSize)

SCEV (const SCEV &)=delete

SCEVoperator= (const SCEV &)=delete

unsigned getSCEVType () const

TypegetType () const
Return the LLVM type of this SCEV expression. More...

bool isZero () const
Return true if the expression is a constant zero. More...

bool isOne () const
Return true if the expression is a constant one. More...

bool isAllOnesValue () const
Return true if the expression is a constant all-ones value. More...

bool isNonConstantNegative () const
Return true if the specified scev is negated, but not a constant. More...

unsigned short getExpressionSize () const

void print (raw_ostream &OS) const
Print out the internal representation of this scalar to the specified stream. More...

void dump () const
This method is used for debugging. More...

Public Member Functions inherited from llvm::FoldingSetBase::Node
Node ()=default

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

Public Types inherited from llvm::SCEVNAryExpr
using op_iterator = const SCEV *const *

using op_range = iterator_range< op_iterator >

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
const unsigned short ExpressionSize

unsigned short SubclassData = 0
This field is initialized to zero and may be used in subclasses to store miscellaneous information. More...

## Detailed Description

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

## ◆ classof()

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

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

Definition at line 362 of file ScalarEvolutionExpressions.h.

## ◆ evaluateAtIteration()

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

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 1234 of file ScalarEvolution.cpp.

## ◆ getNumIterationsInRange()

 const SCEV * SCEVAddRecExpr::getNumIterationsInRange ( const ConstantRange & Range, ScalarEvolution & SE ) const

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 10779 of file ScalarEvolution.cpp.

## ◆ getPostIncExpr()

Return an expression representing the value of this expression one iteration of the loop ahead.

Definition at line 10851 of file ScalarEvolution.cpp.

## ◆ getStart()

 const SCEV* llvm::SCEVAddRecExpr::getStart ( ) const
inline

## ◆ getStepRecurrence()

 const SCEV* llvm::SCEVAddRecExpr::getStepRecurrence ( ScalarEvolution & SE ) const
inline

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

## ◆ isAffine()

inline

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

Definition at line 322 of file ScalarEvolutionExpressions.h.

inline

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

## ◆ setNoWrapFlags()

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