LLVM  9.0.0svn
Public Types | Public Member Functions | Protected Attributes | Friends | List of all members
llvm::SCEV Class Reference

This class represents an analyzed expression in the program. More...

#include "llvm/Analysis/ScalarEvolution.h"

Inheritance diagram for llvm::SCEV:
Inheritance graph
Collaboration diagram for llvm::SCEV:
Collaboration graph

Public Types

enum  NoWrapFlags {
  FlagAnyWrap = 0, FlagNW = (1 << 0), FlagNUW = (1 << 1), FlagNSW = (1 << 2),
  NoWrapMask = (1 << 3) - 1
 NoWrapFlags are bitfield indices into SubclassData. More...

Public Member Functions

 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)

Protected Attributes

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


struct FoldingSetTrait< SCEV >

Detailed Description

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 76 of file ScalarEvolution.h.

Member Enumeration Documentation

◆ NoWrapFlags

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 expressions may have a no-self-wraparound <NW> property if, in the integer domain, abs(step) * max-iteration(loop) <= unsigned-max(bitwidth). This means that the recurrence will never reach its start value if the step is non-zero. Computing the same value on each iteration is not considered wrapping, and recurrences with step = 0 are trivially <NW>. <NW> is independent of the sign of step and the value the add recurrence starts with.

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.


Definition at line 113 of file ScalarEvolution.h.

Constructor & Destructor Documentation

◆ SCEV() [1/2]

llvm::SCEV::SCEV ( const FoldingSetNodeIDRef  ID,
unsigned  SCEVTy,
unsigned short  ExpressionSize 

Definition at line 121 of file ScalarEvolution.h.

References operator=().

◆ SCEV() [2/2]

llvm::SCEV::SCEV ( const SCEV )

Member Function Documentation

◆ dump()

LLVM_DUMP_METHOD void SCEV::dump ( ) const

This method is used for debugging.

Definition at line 228 of file ScalarEvolution.cpp.

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

Referenced by getExpressionSize().

◆ getExpressionSize()

unsigned short llvm::SCEV::getExpressionSize ( ) const

Definition at line 153 of file ScalarEvolution.h.

References dump(), ExpressionSize, and print().

Referenced by isHugeExpression().

◆ getSCEVType()

unsigned llvm::SCEV::getSCEVType ( ) const

◆ getType()

Type * SCEV::getType ( ) const

Return the LLVM type of this SCEV expression.

Definition at line 344 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 llvm::LoopAccessInfo::addRuntimeChecks(), llvm::SCEVAAResult::alias(), asmClobbersCTR(), BinomialCoefficient(), BuildConstantFromSCEV(), llvm::cannotBeMaxInLoop(), llvm::cannotBeMinInLoop(), countToEliminateCompares(), llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton(), llvm::SCEVExpander::expandCodeFor(), llvm::SCEVExpander::expandEqualPredicate(), llvm::AlignmentFromAssumptionsPass::extractAlignmentInfo(), FactorOutConstant(), FindLoopCounter(), llvm::InnerLoopVectorizer::fixupIVUsers(), genLoopLimit(), llvm::ScalarEvolution::getAnyExtendExpr(), getConstantPart(), llvm::ScalarEvolution::getEqualPredicate(), getExactSDiv(), llvm::ScalarEvolution::getGEPExpr(), llvm::ScalarEvolution::getMinusSCEV(), llvm::ScalarEvolution::getNegativeSCEV(), getNewAlignment(), llvm::ScalarEvolution::getNoopOrAnyExtend(), llvm::ScalarEvolution::getNoopOrSignExtend(), llvm::ScalarEvolution::getNoopOrZeroExtend(), llvm::ScalarEvolution::getNotSCEV(), getNumBytes(), llvm::InnerLoopVectorizer::getOrCreateTripCount(), llvm::ScalarEvolution::getPointerBase(), getRangeForAffineARHelper(), GetRangeFromMetadata(), llvm::SCEVExpander::getRelatedExistingExpansion(), getSCEVType(), getSignedOverflowLimitForStep(), llvm::ScalarEvolution::getSignExtendExpr(), llvm::ScalarEvolution::getTruncateExpr(), llvm::ScalarEvolution::getTruncateOrNoop(), llvm::ScalarEvolution::getTruncateOrSignExtend(), llvm::ScalarEvolution::getTruncateOrZeroExtend(), llvm::ScalarEvolution::getUDivExpr(), llvm::ScalarEvolution::getUMaxFromMismatchedTypes(), llvm::ScalarEvolution::getUMinFromMismatchedTypes(), getUnsignedOverflowLimitForStep(), llvm::ScalarEvolution::getURemExpr(), llvm::ScalarEvolution::getZeroExtendExpr(), hasHugeExpression(), llvm::hasIterationCountInvariantInParent(), llvm::RuntimePointerChecking::insert(), isAddFoldable(), isAlwaysFoldable(), isIgnorableInst(), isIntegerLoopHeaderPHI(), llvm::isKnownNegativeInLoop(), llvm::isKnownNonNegativeInLoop(), IsKnownPredicateViaMinOrMax(), isLoadOrStore(), llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(), llvm::ScalarEvolution::isLoopEntryGuardedByCond(), isLoopIncrement(), isLoopInvariant(), llvm::ScalarEvolution::isLoopInvariantPredicate(), isRemainderZero(), isSafeDependenceDistance(), isSimpleCastedPHI(), llvm::FullDependence::isSplitable(), MatchBinaryOp(), matchesOr(), mayLoopAccessLocation(), mayUsePostIncMode(), minAPInt(), PickMostRelevantLoop(), llvm::LoopPredicationPass::run(), llvm::SCEVCastExpr::SCEVCastExpr(), llvm::SCEVEqualPredicate::SCEVEqualPredicate(), llvm::ScalarEvolution::SimplifyICmpOperands(), SolveLinEquationWithOverflow(), truncateIVUse(), and llvm::UnrollRuntimeLoopRemainder().

◆ isAllOnesValue()

bool SCEV::isAllOnesValue ( ) const

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

Definition at line 381 of file ScalarEvolution.cpp.

References llvm::PPCISD::SC.

Referenced by llvm::ScalarEvolution::getMulExpr(), getSCEVType(), MatchNotExpr(), and llvm::LoopPredicationPass::run().

◆ isNonConstantNegative()

bool SCEV::isNonConstantNegative ( ) const

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

Definition at line 387 of file ScalarEvolution.cpp.

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

Referenced by getSCEVType(), IsIncrementNUW(), and PickMostRelevantLoop().

◆ isOne()

bool SCEV::isOne ( ) const

Return true if the expression is a constant one.

Definition at line 375 of file ScalarEvolution.cpp.

References llvm::PPCISD::SC.

Referenced by FactorOutConstant(), FindLoopCounter(), genLoopLimit(), getSCEVType(), hasHugeExpression(), and llvm::LoopPredicationPass::run().

◆ isZero()

bool SCEV::isZero ( ) const

◆ operator=()

SCEV& llvm::SCEV::operator= ( const SCEV )

Referenced by SCEV().

◆ print()

void SCEV::print ( raw_ostream OS) const

Friends And Related Function Documentation

◆ FoldingSetTrait< SCEV >

friend struct FoldingSetTrait< SCEV >

Definition at line 77 of file ScalarEvolution.h.

Member Data Documentation

◆ ExpressionSize

const unsigned short llvm::SCEV::ExpressionSize

Definition at line 88 of file ScalarEvolution.h.

Referenced by getExpressionSize().

◆ SubclassData

unsigned short llvm::SCEV::SubclassData = 0

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

Definition at line 92 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: