Searched refs:SCEV (Results 1 - 25 of 85) sorted by relevance

1234

/freebsd-current/contrib/llvm-project/llvm/include/llvm/Analysis/
H A DScalarEvolution.h12 // 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 DDelinearization.h10 // 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 DDependenceAnalysis.h53 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 DScalarEvolutionNormalization.h45 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 DScalarEvolutionDivision.h9 // 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 DScalarEvolutionExpressions.h1 //===- 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 DLoopCacheAnalysis.h31 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 DLoopAccessAnalysis.h30 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 DScalarEvolutionAliasAnalysis.h1 //===- 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 DDelinearization.cpp10 // 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 DScalarEvolutionNormalization.cpp43 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 DScalarEvolution.cpp14 // 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 DScalarEvolutionDivision.cpp9 // 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 DLoopCacheAnalysis.cpp81 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 DDependenceAnalysis.cpp27 // 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 DScalarEvolutionAliasAnalysis.cpp1 //===- 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 DLoopAccessAnalysis.cpp153 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 DAlignmentFromAssumptions.h27 class SCEV;
41 const SCEV *&AlignSCEV, const SCEV *&OffSCEV);
H A DNaryReassociate.h39 // 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 DInductiveRangeCheckElimination.cpp147 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 DAlignmentFromAssumptions.cpp47 // 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 DLoopStrengthReduce.cpp28 // 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 DNaryReassociate.cpp39 // 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 DLoopPredication.cpp36 // 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 DScalarEvolutionExpander.h1 //===---- 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...]

Completed in 387 milliseconds

1234