aboutsummaryrefslogtreecommitdiff
path: root/polly/lib/Support/ScopHelper.cpp
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2026-03-13 16:23:06 +0000
committerGitHub <noreply@github.com>2026-03-13 16:23:06 +0000
commitf8734a5e107f603871e4e327ddc41fb8a6058f3e (patch)
treeafccd55c41be0018ce8312de07f17cf0c76a9fab /polly/lib/Support/ScopHelper.cpp
parentc272252bbd7e3b1113ce9cc645aacc0835d71836 (diff)
downloadllvm-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.cpp32
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();