LLVM: llvm::PredicatedScalarEvolution Class Reference (original) (raw)

An interface layer with SCEV used to manage how we see SCEV expressions for values in the context of existing predicates. More...

#include "[llvm/Analysis/ScalarEvolution.h](ScalarEvolution%5F8h%5Fsource.html)"

Public Member Functions
PredicatedScalarEvolution (ScalarEvolution &SE, Loop &L)
const SCEVPredicate & getPredicate () const
const SCEV * getSCEV (Value *V)
Returns the SCEV expression of V, in the context of the current SCEV predicate.
const SCEV * getBackedgeTakenCount ()
Get the (predicated) backedge count for the analyzed loop.
const SCEV * getSymbolicMaxBackedgeTakenCount ()
Get the (predicated) symbolic max backedge count for the analyzed loop.
unsigned getSmallConstantMaxTripCount ()
Returns the upper bound of the loop trip count as a normal unsigned value, or 0 if the trip count is unknown.
void addPredicate (const SCEVPredicate &Pred)
Adds a new predicate.
const SCEVAddRecExpr * getAsAddRec (Value *V)
Attempts to produce an AddRecExpr for V by adding additional SCEV predicates.
void setNoOverflow (Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags)
Proves that V doesn't overflow by adding SCEV predicate.
bool hasNoOverflow (Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags)
Returns true if we've proved that V doesn't wrap by means of a SCEV predicate.
ScalarEvolution * getSE () const
Returns the ScalarEvolution analysis used.
PredicatedScalarEvolution (const PredicatedScalarEvolution &)
We need to explicitly define the copy constructor because of FlagsMap.
void print (raw_ostream &OS, unsigned Depth) const
Print the SCEV mappings done by the Predicated Scalar Evolution.
bool areAddRecsEqualWithPreds (const SCEVAddRecExpr *AR1, const SCEVAddRecExpr *AR2) const
Check if AR1 and AR2 are equal, while taking into account Equal predicates in Preds.

An interface layer with SCEV used to manage how we see SCEV expressions for values in the context of existing predicates.

We can add new predicates, but we cannot remove them.

This layer has multiple purposes:

Definition at line 2383 of file ScalarEvolution.h.

PredicatedScalarEvolution() [2/2]

We need to explicitly define the copy constructor because of FlagsMap.

Definition at line 15232 of file ScalarEvolution.cpp.

References I.

addPredicate()

areAddRecsEqualWithPreds()

getAsAddRec()

getBackedgeTakenCount()

const SCEV * PredicatedScalarEvolution::getBackedgeTakenCount ( )

getPredicate()

getSCEV()

Returns the SCEV expression of V, in the context of the current SCEV predicate.

The order of transformations applied on the expression of V returned by ScalarEvolution is guaranteed to be preserved, even when adding new predicates.

Definition at line 15111 of file ScalarEvolution.cpp.

References llvm::ScalarEvolution::getSCEV(), and llvm::ScalarEvolution::rewriteUsingPredicate().

Referenced by getAddressAccessSCEV(), getAsAddRec(), getCastsForInductionPHI(), llvm::LoopVectorizationCostModel::getInstructionCost(), hasNoOverflow(), llvm::InductionDescriptor::isInductionPHI(), isNoWrap(), isNoWrapAddRec(), llvm::replaceSymbolicStrideSCEV(), setNoOverflow(), and llvm::LoopVectorizationCostModel::setVectorizedCallDecision().

getSE()

Returns the ScalarEvolution analysis used.

Definition at line 2422 of file ScalarEvolution.h.

Referenced by llvm::InterleavedAccessInfo::analyzeInterleaving(), canTailPredicateLoop(), llvm::LoopVectorizationCostModel::computeMaxVF(), llvm::VPlan::createInitialVPlan(), llvm::InnerLoopVectorizer::emitIterationCountCheck(), llvm::LoopVectorizationPlanner::executePlan(), llvm::LoopVectorizationCostModel::expectedCost(), findForkedPointer(), llvm::findHistogram(), llvm::InnerLoopVectorizer::fixVectorizedLoop(), getAddressAccessSCEV(), llvm::LoopVectorizationCostModel::getInstructionCost(), llvm::getPtrStride(), llvm::LoopVectorizationLegality::getScalarEvolution(), getSmallBestKnownTC(), getStartAndEndForAccess(), hasComputableBounds(), llvm::InductionDescriptor::isInductionPHI(), llvm::LoopAccessInfo::isInvariant(), llvm::LoopVectorizationLegality::isInvariantAddressOfReduction(), isNoWrap(), llvm::LoopVectorizationLegality::isUniform(), llvm::VPlanTransforms::optimizeForVFAndUF(), llvm::replaceSymbolicStrideSCEV(), llvm::LoopVectorizationPlanner::selectEpilogueVectorizationFactor(), llvm::LoopVectorizationCostModel::selectInterleaveCount(), and llvm::LoopVectorizationCostModel::setVectorizedCallDecision().

getSmallConstantMaxTripCount()

unsigned PredicatedScalarEvolution::getSmallConstantMaxTripCount ( )

getSymbolicMaxBackedgeTakenCount()

const SCEV * PredicatedScalarEvolution::getSymbolicMaxBackedgeTakenCount ( )

hasNoOverflow()

print()

setNoOverflow()


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