LLVM API Documentation

Public Types | Public Member Functions | Protected Attributes | Friends
llvm::SCEV Class Reference

#include <ScalarEvolution.h>

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

List of all members.

Public Types

enum  NoWrapFlags {
  FlagAnyWrap = 0, FlagNW = (1 << 0), FlagNUW = (1 << 1), FlagNSW = (1 << 2),
  NoWrapMask = (1 << 3) -1
}

Public Member Functions

 SCEV (const FoldingSetNodeIDRef ID, unsigned SCEVTy)
unsigned getSCEVType () const
TypegetType () const
bool isZero () const
bool isOne () const
bool isAllOnesValue () const
bool isNonConstantNegative () const
void print (raw_ostream &OS) const
void dump () const

Protected Attributes

unsigned short SubclassData

Friends

struct FoldingSetTrait< SCEV >

Detailed Description

SCEV - This class represents an analyzed expression in the program. These are opaque objects that the client is not allowed to do much with directly.

Definition at line 58 of file ScalarEvolution.h.


Member Enumeration Documentation

NoWrapFlags are bitfield indices into SubclassData.

Add and Mul expressions may have no-unsigned-wrap <NUW> or no-signed-wrap <NSW> properties, which are derived from the IR operator. NSW is a misnomer that we use to mean no signed overflow or underflow.

AddRec expression may have a no-self-wraparound <NW> property if the result can never reach the start value. This property is independent of the actual start value and step direction. Self-wraparound is defined purely in terms of the recurrence's loop, step size, and bitwidth. Formally, a recurrence with no self-wraparound satisfies: abs(step) * max-iteration(loop) <= unsigned-max(bitwidth).

Note that NUW and NSW are also valid properties of a recurrence, and either implies NW. For convenience, NW will be set for a recurrence whenever either NUW or NSW are set.

Enumerator:
FlagAnyWrap 
FlagNW 
FlagNUW 
FlagNSW 
NoWrapMask 

Definition at line 95 of file ScalarEvolution.h.


Constructor & Destructor Documentation

llvm::SCEV::SCEV ( const FoldingSetNodeIDRef  ID,
unsigned  SCEVTy 
) [inline, explicit]

Definition at line 101 of file ScalarEvolution.h.


Member Function Documentation

void SCEV::dump ( ) const

dump - This method is used for debugging.

Definition at line 134 of file ScalarEvolution.cpp.

References llvm::dbgs(), and print().

unsigned llvm::SCEV::getSCEVType ( ) const [inline]
Type * SCEV::getType ( ) const

getType - Return the LLVM type of this SCEV expression.

Reimplemented in llvm::SCEVUnknown, llvm::SCEVUDivExpr, llvm::SCEVAddExpr, llvm::SCEVNAryExpr, llvm::SCEVCastExpr, and llvm::SCEVConstant.

Definition at line 250 of file ScalarEvolution.cpp.

References getSCEVType(), llvm_unreachable, llvm::scAddExpr, llvm::scAddRecExpr, llvm::scConstant, llvm::scCouldNotCompute, llvm::scMulExpr, llvm::scSignExtend, llvm::scSMaxExpr, llvm::scTruncate, llvm::scUDivExpr, llvm::scUMaxExpr, llvm::scUnknown, and llvm::scZeroExtend.

Referenced by BinomialCoefficient(), BuildConstantFromSCEV(), FactorOutConstant(), FindLoopCounter(), genLoopLimit(), llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getAnyExtendExpr(), getExactSDiv(), llvm::ScalarEvolution::getMinusSCEV(), llvm::ScalarEvolution::getNegativeSCEV(), getNewAlignment(), llvm::ScalarEvolution::getNoopOrAnyExtend(), llvm::ScalarEvolution::getNoopOrSignExtend(), llvm::ScalarEvolution::getNoopOrZeroExtend(), llvm::ScalarEvolution::getNotSCEV(), getOverflowLimitForStep(), llvm::ScalarEvolution::getPointerBase(), llvm::ScalarEvolution::getSignedRange(), llvm::ScalarEvolution::getSignExtendExpr(), llvm::ScalarEvolution::getSmallConstantTripMultiple(), llvm::ScalarEvolution::getTruncateExpr(), llvm::ScalarEvolution::getTruncateOrNoop(), llvm::ScalarEvolution::getTruncateOrSignExtend(), llvm::ScalarEvolution::getTruncateOrZeroExtend(), llvm::SCEVNAryExpr::getType(), llvm::SCEVAddExpr::getType(), llvm::SCEVUDivExpr::getType(), llvm::ScalarEvolution::getUDivExpr(), llvm::ScalarEvolution::getUMaxFromMismatchedTypes(), llvm::ScalarEvolution::getUMinFromMismatchedTypes(), llvm::ScalarEvolution::getUnsignedRange(), llvm::ScalarEvolution::getZeroExtendExpr(), isHighCostExpansion(), llvm::SCEVExpander::replaceCongruentIVs(), llvm::ScalarEvolution::SimplifyICmpOperands(), and llvm::UnrollRuntimeLoopProlog().

isAllOnesValue - Return true if the expression is a constant all-ones value.

Definition at line 287 of file ScalarEvolution.cpp.

References llvm::PPCISD::SC.

isNonConstantNegative - Return true if the specified scev is negated, but not a constant.

Definition at line 295 of file ScalarEvolution.cpp.

References llvm::dyn_cast(), llvm::SCEVNAryExpr::getOperand(), llvm::SCEVConstant::getValue(), llvm::ConstantInt::getValue(), llvm::APInt::isNegative(), and llvm::PPCISD::SC.

bool SCEV::isOne ( ) const

isOne - Return true if the expression is a constant one.

Definition at line 281 of file ScalarEvolution.cpp.

References llvm::PPCISD::SC.

Referenced by FactorOutConstant(), FindLoopCounter(), and genLoopLimit().

bool SCEV::isZero ( ) const
void SCEV::print ( raw_ostream OS) const

Friends And Related Function Documentation

friend struct FoldingSetTrait< SCEV > [friend]

Definition at line 59 of file ScalarEvolution.h.


Member Data Documentation

SubclassData - This field is initialized to zero and may be used in subclasses to store miscellaneous information.

Definition at line 71 of file ScalarEvolution.h.

Referenced by llvm::SCEVNAryExpr::getNoWrapFlags(), llvm::SCEVCommutativeExpr::setNoWrapFlags(), and llvm::SCEVAddRecExpr::setNoWrapFlags().


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