/freebsd-current/contrib/llvm-project/llvm/include/llvm/Analysis/ |
H A D | ScalarEvolution.h | 12 // SCEV class. Given this analysis, trip counts of loops and other important 75 class SCEV : public FoldingSetNode { class in namespace:llvm 76 friend struct FoldingSetTrait<SCEV>; 82 // The SCEV baseclass this node corresponds to 113 /// We require that the flag on a SCEV apply to the entire scope in which 114 /// that SCEV is defined. A SCEV's scope is set of locations dominated by 124 /// potential control dependence). A SCEV is defined anywhere a 128 /// at runtime. A SCEV being defined does not require the existence of any 138 explicit SCEV(cons function in class:llvm::SCEV 584 getAddExpr(const SCEV *LHS, const SCEV *RHS, SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, unsigned Depth = 0) argument 590 getAddExpr(const SCEV *Op0, const SCEV *Op1, const SCEV *Op2, SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, unsigned Depth = 0) argument 599 getMulExpr(const SCEV *LHS, const SCEV *RHS, SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, unsigned Depth = 0) argument 605 getMulExpr(const SCEV *Op0, const SCEV *Op1, const SCEV *Op2, SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, unsigned Depth = 0) argument [all...] |
H A D | Delinearization.h | 10 // instructions in all loops using the SCEV analysis functionality. This pass is 26 class SCEV; 32 SmallVectorImpl<const SCEV *> &Terms, 33 SmallVectorImpl<const SCEV *> &Sizes, 34 const SCEV *ElementSize); 38 void collectParametricTerms(ScalarEvolution &SE, const SCEV *Expr, 39 SmallVectorImpl<const SCEV *> &Terms); 43 void computeAccessFunctions(ScalarEvolution &SE, const SCEV *Expr, 44 SmallVectorImpl<const SCEV *> &Subscripts, 45 SmallVectorImpl<const SCEV *> [all...] |
H A D | DependenceAnalysis.h | 53 class SCEV; 100 const SCEV *Distance = nullptr; // NULL implies no distance available. 161 virtual const SCEV *getDistance(unsigned Level) const { return nullptr; } 254 const SCEV *getDistance(unsigned Level) const override; 353 const SCEV *getSplitIteration(const Dependence &Dep, unsigned Level); 367 const SCEV *Src; 368 const SCEV *Dst; 376 const SCEV *Coeff; 377 const SCEV *PosPart; 378 const SCEV *NegPar [all...] |
H A D | ScalarEvolutionNormalization.h | 45 class SCEV; 55 const SCEV *normalizeForPostIncUse(const SCEV *S, const PostIncLoopSet &Loops, 61 const SCEV *normalizeForPostIncUseIf(const SCEV *S, NormalizePredTy Pred, 66 const SCEV *denormalizeForPostIncUse(const SCEV *S, const PostIncLoopSet &Loops,
|
H A D | ScalarEvolutionDivision.h | 9 // This file defines the class that knows how to divide SCEV's. 20 class SCEV; 30 static void divide(ScalarEvolution &SE, const SCEV *Numerator, 31 const SCEV *Denominator, const SCEV **Quotient, 32 const SCEV **Remainder); 60 SCEVDivision(ScalarEvolution &S, const SCEV *Numerator, 61 const SCEV *Denominator); 65 void cannotDivide(const SCEV *Numerator); 68 const SCEV *Denominato [all...] |
H A D | ScalarEvolutionExpressions.h | 1 //===- llvm/Analysis/ScalarEvolutionExpressions.h - SCEV Exprs --*- C++ -*-===// 60 class SCEVConstant : public SCEV { 66 : SCEV(ID, scConstant, 1), V(v) {} 75 static bool classof(const SCEV *S) { return S->getSCEVType() == scConstant; } 80 class SCEVVScale : public SCEV { 84 : SCEV(ID, scVScale, 0), Ty(ty) {} 92 static bool classof(const SCEV *S) { return S->getSCEVType() == scVScale; } 95 inline unsigned short computeExpressionSize(ArrayRef<const SCEV *> Args) { 103 class SCEVCastExpr : public SCEV { 105 const SCEV *O [all...] |
H A D | LoopCacheAnalysis.h | 31 class SCEV; 57 const SCEV *getBasePointer() const { return BasePointer; } 59 const SCEV *getSubscript(unsigned SubNum) const { 63 const SCEV *getFirstSubscript() const { 67 const SCEV *getLastSubscript() const { 103 bool tryDelinearizeFixedSize(const SCEV *AccessFn, 104 SmallVectorImpl<const SCEV *> &Subscripts); 114 bool isConsecutive(const Loop &L, const SCEV *&Stride, unsigned CLS) const; 124 const SCEV *getLastCoefficient() const; 128 bool isCoeffForLoopZeroOrInvariant(const SCEV [all...] |
H A D | LoopAccessAnalysis.h | 30 class SCEV; 199 const DenseMap<Value *, const SCEV *> &Strides, 270 /// A wrapper around ScalarEvolution, used to add runtime SCEV checks, and 271 /// applies dynamic knowledge to simplify SCEV expressions and convert them 272 /// to a more usable form. We need this in case assumptions about SCEV 331 unsigned BIdx, const DenseMap<Value *, const SCEV *> &Strides, 362 bool addPointer(unsigned Index, const SCEV *Start, const SCEV *End, 365 /// The SCEV expression which represents the upper bound of all the 367 const SCEV *Hig [all...] |
H A D | ScalarEvolutionAliasAnalysis.h | 1 //===- ScalarEvolutionAliasAnalysis.h - SCEV-based AA -----------*- C++ -*-===// 9 /// This is the interface for a SCEV-based alias analysis. 23 class SCEV; 41 Value *GetBaseValue(const SCEV *S);
|
/freebsd-current/contrib/llvm-project/llvm/lib/Analysis/ |
H A D | Delinearization.cpp | 10 // instructions in all loops using the SCEV analysis functionality. This pass is 37 static inline bool containsUndefs(const SCEV *S) { 38 return SCEVExprContains(S, [](const SCEV *S) { 47 // Collect all steps of SCEV expressions. 50 SmallVectorImpl<const SCEV *> &Strides; 52 SCEVCollectStrides(ScalarEvolution &SE, SmallVectorImpl<const SCEV *> &S) 55 bool follow(const SCEV *S) { 66 SmallVectorImpl<const SCEV *> &Terms; 68 SCEVCollectTerms(SmallVectorImpl<const SCEV *> &T) : Terms(T) {} 70 bool follow(const SCEV * [all...] |
H A D | ScalarEvolutionNormalization.cpp | 43 const SCEV *visitAddRecExpr(const SCEVAddRecExpr *Expr); 47 const SCEV * 49 SmallVector<const SCEV *, 8> Operands; 52 [&](const SCEV *Op) { return visit(Op); }); 55 return SE.getAddRecExpr(Operands, AR->getLoop(), SCEV::FlagAnyWrap); 58 // incrementing a SCEV expression with respect to a set of loops. Since 72 // incrementing a SCEV expression (in general) changes the step of the SCEV 94 return SE.getAddRecExpr(Operands, AR->getLoop(), SCEV::FlagAnyWrap); 97 const SCEV *llv [all...] |
H A D | ScalarEvolution.cpp | 14 // scalar expressions, which are represented as subclasses of the SCEV class. 16 // can handle. We only create one SCEV of a particular shape, so 19 // One important aspect of the SCEV objects is that they are never cyclic, even 154 cl::desc("Maximum number of iterations SCEV will " 168 cl::desc("Verify IR correctness when making sensitive SCEV queries (slow)"), 173 cl::desc("Threshold for inlining multiplication operands into a SCEV"), 178 cl::desc("Threshold for inlining addition operands into a SCEV"), 183 cl::desc("Maximum depth of recursive SCEV complexity comparisons"), 188 cl::desc("Maximum depth of recursive SCEV operations implication analysis"), 222 cl::desc("Threshold for switching to iteratively computing SCEV range [all...] |
H A D | ScalarEvolutionDivision.cpp | 9 // This file defines the class that knows how to divide SCEV's. 30 static inline int sizeOfSCEV(const SCEV *S) { 36 bool follow(const SCEV *S) { 55 void SCEVDivision::divide(ScalarEvolution &SE, const SCEV *Numerator, 56 const SCEV *Denominator, const SCEV **Quotient, 57 const SCEV **Remainder) { 58 assert(Numerator && Denominator && "Uninitialized SCEV"); 85 const SCEV *Q, *R; 87 for (const SCEV *O [all...] |
H A D | LoopCacheAnalysis.cpp | 81 static bool isOneDimensionalArray(const SCEV &AccessFn, const SCEV &ElemSize, 90 const SCEV *Start = AR->getStart(); 91 const SCEV *Step = AR->getStepRecurrence(SE); 99 const SCEV *StepRec = AR->getStepRecurrence(SE); 107 /// it is not a compile time constant. Return the SCEV expression for the trip 109 static const SCEV *computeTripCount(const Loop &L, const SCEV &ElemSize, 111 const SCEV *BackedgeTakenCount = SE.getBackedgeTakenCount(&L); 112 const SCEV *TripCoun [all...] |
H A D | DependenceAnalysis.cpp | 27 // analysis is using SCEV->delinearize to recover the representation of multiple 33 // Subtract, or Multiply, with both APInt's and SCEV's. 39 // Finally, it seems like certain test cases expose weaknesses in the SCEV 341 const SCEV *FullDependence::getDistance(unsigned Level) const { 384 const SCEV *DependenceInfo::Constraint::getX() const { 392 const SCEV *DependenceInfo::Constraint::getY() const { 400 const SCEV *DependenceInfo::Constraint::getA() const { 409 const SCEV *DependenceInfo::Constraint::getB() const { 418 const SCEV *DependenceInfo::Constraint::getC() const { 427 const SCEV *DependenceInf [all...] |
H A D | ScalarEvolutionAliasAnalysis.cpp | 1 //===- ScalarEvolutionAliasAnalysis.cpp - SCEV-based Alias Analysis -------===// 28 const SCEV *A, const SCEV *B) { 46 const SCEV *AS = SE.getSCEV(const_cast<Value *>(LocA.Ptr)); 47 const SCEV *BS = SE.getSCEV(const_cast<Value *>(LocB.Ptr)); 65 const SCEV *BA = SE.getMinusSCEV(BS, AS); 80 const SCEV *AB = SE.getMinusSCEV(AS, BS); 114 Value *SCEVAAResult::GetBaseValue(const SCEV *S) { 121 const SCEV *Last = A->getOperand(A->getNumOperands() - 1);
|
H A D | LoopAccessAnalysis.cpp | 153 const SCEV *llvm::replaceSymbolicStrideSCEV(PredicatedScalarEvolution &PSE, 154 const DenseMap<Value *, const SCEV *> &PtrToStride, 156 const SCEV *OrigSCEV = PSE.getSCEV(Ptr); 158 // If there is an entry in the map return the SCEV of the pointer with the 160 DenseMap<Value *, const SCEV *>::const_iterator SI = PtrToStride.find(Ptr); 165 const SCEV *StrideSCEV = SI->second; 177 LLVM_DEBUG(dbgs() << "LAA: Replacing SCEV: " << *OrigSCEV 205 void RuntimePointerChecking::insert(Loop *Lp, Value *Ptr, const SCEV *PtrExpr, 212 const SCEV *ScStart; 213 const SCEV *ScEn [all...] |
/freebsd-current/contrib/llvm-project/llvm/include/llvm/Transforms/Scalar/ |
H A D | AlignmentFromAssumptions.h | 27 class SCEV; 41 const SCEV *&AlignSCEV, const SCEV *&OffSCEV);
|
H A D | NaryReassociate.h | 39 // an expression is computed before, we store each instruction seen and its SCEV 40 // into an SCEV-to-instruction map. 96 class SCEV; 117 Instruction *tryReassociate(Instruction *I, const SCEV *&OrigSCEV); 146 Instruction *tryReassociatedBinaryOp(const SCEV *LHS, Value *RHS, 152 // Gets SCEV for (LHS op RHS). 153 const SCEV *getBinarySCEV(BinaryOperator *I, const SCEV *LHS, 154 const SCEV *RHS); 158 Instruction *findClosestMatchingDominator(const SCEV *CandidateExp [all...] |
/freebsd-current/contrib/llvm-project/llvm/lib/Transforms/Scalar/ |
H A D | InductiveRangeCheckElimination.cpp | 147 const SCEV *Begin = nullptr; 148 const SCEV *Step = nullptr; 149 const SCEV *End = nullptr; 154 const SCEV *&End); 164 const SCEV *&End); 168 const SCEVAddRecExpr *&Index, const SCEV *&End); 171 const SCEV *getBegin() const { return Begin; } 172 const SCEV *getStep() const { return Step; } 173 const SCEV *getEnd() const { return End; } 199 const SCEV *Begi [all...] |
H A D | AlignmentFromAssumptions.cpp | 47 // to a constant. Using SCEV to compute alignment handles the case where 50 static MaybeAlign getNewAlignmentDiff(const SCEV *DiffSCEV, 51 const SCEV *AlignSCEV, 54 const SCEV *DiffUnitsSCEV = SE->getURemExpr(DiffSCEV, AlignSCEV); 82 static Align getNewAlignment(const SCEV *AASCEV, const SCEV *AlignSCEV, 83 const SCEV *OffSCEV, Value *Ptr, 85 const SCEV *PtrSCEV = SE->getSCEV(Ptr); 87 const SCEV *DiffSCEV = SE->getMinusSCEV(PtrSCEV, AASCEV); 116 const SCEV *DiffStartSCE [all...] |
H A D | LoopStrengthReduce.cpp | 28 // The SCEV for %i is {0,+,1}<%L>. The SCEV for %i.next is {1,+,1}<%L>, however 141 /// Limit the size of expression that SCEV-based salvaging will attempt to 266 using RegUsesTy = DenseMap<const SCEV *, RegSortData>; 269 SmallVector<const SCEV *, 16> RegSequence; 272 void countRegister(const SCEV *Reg, size_t LUIdx); 273 void dropRegister(const SCEV *Reg, size_t LUIdx); 276 bool isRegUsedByUsesOtherThan(const SCEV *Reg, size_t LUIdx) const; 278 const SmallBitVector &getUsedByIndices(const SCEV *Reg) const; 282 using iterator = SmallVectorImpl<const SCEV *> [all...] |
H A D | NaryReassociate.cpp | 39 // an expression is computed before, we store each instruction seen and its SCEV 40 // into an SCEV-to-instruction map. 228 const SCEV *OrigSCEV = nullptr; 237 const SCEV *NewSCEV = SE->getSCEV(NewI); 255 // map both SCEV before and after tryReassociate(I) to I. 276 const SCEV *&OrigSCEV) { 296 const SCEV *&OrigSCEV) { 398 // Look for GEP's closest dominator that has the same SCEV as GEP except that 400 SmallVector<const SCEV *, 4> IndexExprs; 416 const SCEV *CandidateExp [all...] |
H A D | LoopPredication.cpp | 36 // It's tempting to rely on SCEV here, but it has proven to be problematic. 37 // Generally the facts SCEV provides about the increment step of add 251 const SCEV *Limit; 253 const SCEV *Limit) 274 bool isSupportedStep(const SCEV* Step); 283 /// Same as above, *except* that this uses the SCEV definition of invariant 288 ArrayRef<const SCEV *> Ops); 293 bool isLoopInvariantValue(const SCEV* S); 296 ICmpInst::Predicate Pred, const SCEV *LHS, 297 const SCEV *RH [all...] |
/freebsd-current/contrib/llvm-project/llvm/include/llvm/Transforms/Utils/ |
H A D | ScalarEvolutionExpander.h | 1 //===---- llvm/Analysis/ScalarEvolutionExpander.h - SCEV Exprs --*- C++ -*-===// 32 /// given SCEV when expanded into IR. 34 explicit SCEVOperand(unsigned Opc, int Idx, const SCEV *S) : 40 /// The SCEV operand to be costed. 41 const SCEV* S; 61 DenseMap<std::pair<const SCEV *, Instruction *>, TrackingVH<Value>> 76 /// A memoization of the "relevant" loop for a given SCEV. 77 DenseMap<const SCEV *, const Loop *> RelevantLoops; 116 // InsertPointGuards stack when insert points are moved during SCEV 225 bool isHighCostExpansion(ArrayRef<const SCEV *> Expr [all...] |