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 | |
|---|---|
| LLVM_ABI | PredicatedScalarEvolution (ScalarEvolution &SE, Loop &L) |
| LLVM_ABI const SCEVPredicate & | getPredicate () const |
| LLVM_ABI const SCEV * | getSCEV (Value *V) |
| Returns the SCEV expression of V, in the context of the current SCEV predicate. | |
| LLVM_ABI const SCEV * | getBackedgeTakenCount () |
| Get the (predicated) backedge count for the analyzed loop. | |
| LLVM_ABI const SCEV * | getSymbolicMaxBackedgeTakenCount () |
| Get the (predicated) symbolic max backedge count for the analyzed loop. | |
| LLVM_ABI unsigned | getSmallConstantMaxTripCount () |
| Returns the upper bound of the loop trip count as a normal unsigned value, or 0 if the trip count is unknown. | |
| LLVM_ABI void | addPredicate (const SCEVPredicate &Pred) |
| Adds a new predicate. | |
| LLVM_ABI const SCEVAddRecExpr * | getAsAddRec (Value *V) |
| Attempts to produce an AddRecExpr for V by adding additional SCEV predicates. | |
| LLVM_ABI void | setNoOverflow (Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags) |
| Proves that V doesn't overflow by adding SCEV predicate. | |
| LLVM_ABI 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. | |
| LLVM_ABI | PredicatedScalarEvolution (const PredicatedScalarEvolution &) |
| We need to explicitly define the copy constructor because of FlagsMap. | |
| LLVM_ABI void | print (raw_ostream &OS, unsigned Depth) const |
| Print the SCEV mappings done by the Predicated Scalar Evolution. | |
| LLVM_ABI 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:
- provides a simple interface for SCEV versioning.
- guarantees that the order of transformations applied on a SCEV expression for a single Value is consistent across two different getSCEV calls. This means that, for example, once we've obtained an AddRec expression for a certain value through expression rewriting, we will continue to get an AddRec expression for that Value.
- lowers the number of expression rewrites.
Definition at line 2442 of file ScalarEvolution.h.
◆ PredicatedScalarEvolution() [2/2]
◆ addPredicate()
◆ areAddRecsEqualWithPreds()
◆ getAsAddRec()
◆ getBackedgeTakenCount()
| const SCEV * PredicatedScalarEvolution::getBackedgeTakenCount | ( | ) |
|---|
◆ getPredicate()
◆ getSCEV()
◆ getSE()
Returns the ScalarEvolution analysis used.
Definition at line 2483 of file ScalarEvolution.h.
Referenced by addInitialSkeleton(), canTailPredicateLoop(), llvm::findHistogram(), getAddressAccessSCEV(), llvm::getPtrStride(), getSmallBestKnownTC(), getStrideFromAddRec(), llvm::RuntimePointerChecking::insert(), llvm::InductionDescriptor::isInductionPHI(), llvm::VPlanTransforms::materializeConstantVectorTripCount(), llvm::LoopVectorizePass::processLoop(), llvm::VPlanTransforms::replaceSymbolicStrides(), llvm::replaceSymbolicStrideSCEV(), simplifyBranchConditionForVFAndUF(), and simplifyKnownEVL().
◆ getSmallConstantMaxTripCount()
| unsigned PredicatedScalarEvolution::getSmallConstantMaxTripCount | ( | ) |
|---|
◆ getSymbolicMaxBackedgeTakenCount()
| const SCEV * PredicatedScalarEvolution::getSymbolicMaxBackedgeTakenCount | ( | ) |
|---|
◆ hasNoOverflow()
◆ print()
◆ setNoOverflow()
The documentation for this class was generated from the following files:
- include/llvm/Analysis/ScalarEvolution.h
- lib/Analysis/ScalarEvolution.cpp