diff options
| author | Florian Hahn <flo@fhahn.com> | 2026-03-13 16:23:06 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-13 16:23:06 +0000 |
| commit | f8734a5e107f603871e4e327ddc41fb8a6058f3e (patch) | |
| tree | afccd55c41be0018ce8312de07f17cf0c76a9fab /polly/lib/Support/ScopHelper.cpp | |
| parent | c272252bbd7e3b1113ce9cc645aacc0835d71836 (diff) | |
| download | llvm-f8734a5e107f603871e4e327ddc41fb8a6058f3e.tar.gz llvm-f8734a5e107f603871e4e327ddc41fb8a6058f3e.tar.bz2 llvm-f8734a5e107f603871e4e327ddc41fb8a6058f3e.zip | |
[SCEV] Introduce SCEVUse, use it instead of const SCEV * (NFCI). (#91961)
This patch introduces SCEVUse, which is a tagged pointer containing the
used const SCEV *, plus extra bits to store NUW/NSW flags that are only
valid at the specific use.
This was suggested by @nikic as an alternative
to https://github.com/llvm/llvm-project/pull/90742.
This patch just updates most SCEV infrastructure to operate on SCEVUse
instead of const SCEV *. It does not introduce any code that makes use
of the use-specific flags yet which I'll share as follow-ups.
Compile-time impact: https://llvm-compile-time-tracker.com/compare.php?from=ee34eb6edccdebc2a752ffecdde5faae6b0d5593&to=5a7727d7819414d2acbc5b6ab740f0fc2363e842&stat=instructions%3Au
Diffstat (limited to 'polly/lib/Support/ScopHelper.cpp')
| -rw-r--r-- | polly/lib/Support/ScopHelper.cpp | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/polly/lib/Support/ScopHelper.cpp b/polly/lib/Support/ScopHelper.cpp index fe9b8bb1ffea..fb80edcf1d30 100644 --- a/polly/lib/Support/ScopHelper.cpp +++ b/polly/lib/Support/ScopHelper.cpp @@ -243,7 +243,7 @@ struct ScopExpander final : SCEVVisitor<ScopExpander, const SCEV *> { explicit ScopExpander(const Region &R, ScalarEvolution &SE, Function *GenFn, ScalarEvolution &GenSE, const char *Name, - ValueMapT *VMap, LoopToScevMapT *LoopMap, + ValueMapT *VMap, polly::LoopToScevMapT *LoopMap, BasicBlock *RTCBB) : Expander(GenSE, Name, /*PreserveLCSSA=*/false), Name(Name), R(R), VMap(VMap), LoopMap(LoopMap), RTCBB(RTCBB), GenSE(GenSE), GenFn(GenFn) { @@ -272,7 +272,7 @@ private: const char *Name; const Region &R; ValueMapT *VMap; - LoopToScevMapT *LoopMap; + polly::LoopToScevMapT *LoopMap; BasicBlock *RTCBB; DenseMap<const SCEV *, const SCEV *> SCEVCache; @@ -389,50 +389,50 @@ private: return GenSE.getUDivExpr(visit(E->getLHS()), RHSScev); } const SCEV *visitAddExpr(const SCEVAddExpr *E) { - SmallVector<const SCEV *, 4> NewOps; + SmallVector<SCEVUse, 4> NewOps; for (const SCEV *Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getAddExpr(NewOps); } const SCEV *visitMulExpr(const SCEVMulExpr *E) { - SmallVector<const SCEV *, 4> NewOps; + SmallVector<SCEVUse, 4> NewOps; for (const SCEV *Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getMulExpr(NewOps); } const SCEV *visitUMaxExpr(const SCEVUMaxExpr *E) { - SmallVector<const SCEV *, 4> NewOps; - for (const SCEV *Op : E->operands()) + SmallVector<SCEVUse, 4> NewOps; + for (SCEVUse Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getUMaxExpr(NewOps); } const SCEV *visitSMaxExpr(const SCEVSMaxExpr *E) { - SmallVector<const SCEV *, 4> NewOps; - for (const SCEV *Op : E->operands()) + SmallVector<SCEVUse, 4> NewOps; + for (SCEVUse Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getSMaxExpr(NewOps); } const SCEV *visitUMinExpr(const SCEVUMinExpr *E) { - SmallVector<const SCEV *, 4> NewOps; - for (const SCEV *Op : E->operands()) + SmallVector<SCEVUse, 4> NewOps; + for (SCEVUse Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getUMinExpr(NewOps); } const SCEV *visitSMinExpr(const SCEVSMinExpr *E) { - SmallVector<const SCEV *, 4> NewOps; - for (const SCEV *Op : E->operands()) + SmallVector<SCEVUse, 4> NewOps; + for (SCEVUse Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getSMinExpr(NewOps); } const SCEV *visitSequentialUMinExpr(const SCEVSequentialUMinExpr *E) { - SmallVector<const SCEV *, 4> NewOps; - for (const SCEV *Op : E->operands()) + SmallVector<SCEVUse, 4> NewOps; + for (SCEVUse Op : E->operands()) NewOps.push_back(visit(Op)); return GenSE.getUMinExpr(NewOps, /*Sequential=*/true); } const SCEV *visitAddRecExpr(const SCEVAddRecExpr *E) { - SmallVector<const SCEV *, 4> NewOps; - for (const SCEV *Op : E->operands()) + SmallVector<SCEVUse, 4> NewOps; + for (SCEVUse Op : E->operands()) NewOps.push_back(visit(Op)); const Loop *L = E->getLoop(); |
