Lines Matching defs:ScalarEvolution

1 //===- llvm/Analysis/ScalarEvolution.h - Scalar Evolution -------*- C++ -*-===//
9 // The ScalarEvolution class is an LLVM pass which can be used to analyze and
58 class ScalarEvolution;
75 /// ScalarEvolution's BumpPtrAllocator holds the data.
218 /// ScalarEvolution's BumpPtrAllocator holds the data.
244 virtual bool implies(const SCEVPredicate *N, ScalarEvolution &SE) const = 0;
289 bool implies(const SCEVPredicate *N, ScalarEvolution &SE) const override;
380 getImpliedFlags(const SCEVAddRecExpr *AR, ScalarEvolution &SE);
396 bool implies(const SCEVPredicate *N, ScalarEvolution &SE) const override;
411 /// ScalarEvolution::Preds folding set. This is why the \c add function is sound.
421 void add(const SCEVPredicate *N, ScalarEvolution &SE);
425 ScalarEvolution &SE);
431 bool implies(const SCEVPredicate *N, ScalarEvolution &SE) const override;
447 class ScalarEvolution {
466 /// visible in the ScalarEvolution name space.
484 ScalarEvolution(Function &F, TargetLibraryInfo &TLI, AssumptionCache &AC,
486 ScalarEvolution(ScalarEvolution &&Arg);
487 ~ScalarEvolution();
493 /// include pointer types if the ScalarEvolution class has access to
544 /// Notify this ScalarEvolution that \p User directly uses SCEVs in \p Ops.
943 // information held internally by ScalarEvolution. This is intended to be used
949 /// a way that may effect ScalarEvolution's ability to compute a trip count,
955 // \p L, making ScalarEvolution forget about all this subtree. This needs to
1313 ScalarEvolution &SE;
1315 LoopGuards(ScalarEvolution &SE) : SE(SE) {}
1321 collectFromBlock(ScalarEvolution &SE, ScalarEvolution::LoopGuards &Guards,
1331 ScalarEvolution &SE, ScalarEvolution::LoopGuards &Guards,
1339 static LoopGuards collect(const Loop *L, ScalarEvolution &SE);
1399 /// A CallbackVH to arrange for ScalarEvolution to be notified whenever a
1402 ScalarEvolution *SE;
1408 SCEVCallbackVH(Value *V, ScalarEvolution *SE = nullptr);
1523 friend class ScalarEvolution;
1592 const Loop *L, ScalarEvolution *SE,
1601 const BasicBlock *ExitingBlock, ScalarEvolution *SE,
1611 ScalarEvolution *SE,
1616 const BasicBlock *ExitingBlock, ScalarEvolution *SE,
1626 const Loop *L, ScalarEvolution *SE,
1631 const BasicBlock *ExitingBlock, ScalarEvolution *SE,
1641 bool isConstantMaxOrZero(ScalarEvolution *SE) const;
1886 std::optional<ScalarEvolution::ExitLimit> computeExitLimitFromCondFromBinOp(
2318 /// Analysis pass that exposes the \c ScalarEvolution for a function.
2326 using Result = ScalarEvolution;
2328 ScalarEvolution run(Function &F, FunctionAnalysisManager &AM);
2353 std::unique_ptr<ScalarEvolution> SE;
2360 ScalarEvolution &getSE() { return *SE; }
2361 const ScalarEvolution &getSE() const { return *SE; }
2385 PredicatedScalarEvolution(ScalarEvolution &SE, Loop &L);
2391 /// returned by ScalarEvolution is guaranteed to be preserved, even when
2421 /// Returns the ScalarEvolution analysis used.
2422 ScalarEvolution *getSE() const { return &SE; }
2455 /// The ScalarEvolution analysis.
2456 ScalarEvolution &SE;
2481 template <> struct DenseMapInfo<ScalarEvolution::FoldID> {
2482 static inline ScalarEvolution::FoldID getEmptyKey() {
2483 ScalarEvolution::FoldID ID(0);
2486 static inline ScalarEvolution::FoldID getTombstoneKey() {
2487 ScalarEvolution::FoldID ID(1);
2491 static unsigned getHashValue(const ScalarEvolution::FoldID &Val) {
2495 static bool isEqual(const ScalarEvolution::FoldID &LHS,
2496 const ScalarEvolution::FoldID &RHS) {