forked from OSchip/llvm-project
[SCEV] Only add direct loop users (NFC)
It it now sufficient to track only direct addrec users of a loop, and let the SCEVUsers mechanism track and invalidate transitive users. Differential Revision: https://reviews.llvm.org/D112875
This commit is contained in:
parent
ac7c8808ba
commit
4972d12185
|
@ -2025,10 +2025,6 @@ private:
|
|||
/// an add rec on said loop.
|
||||
void getUsedLoops(const SCEV *S, SmallPtrSetImpl<const Loop *> &LoopsUsed);
|
||||
|
||||
/// Find all of the loops transitively used in \p S, and update \c LoopUsers
|
||||
/// accordingly.
|
||||
void addToLoopUseLists(const SCEV *S);
|
||||
|
||||
/// Try to match the pattern generated by getURemExpr(A, B). If successful,
|
||||
/// Assign A and B to LHS and RHS, respectively.
|
||||
bool matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS);
|
||||
|
@ -2041,9 +2037,8 @@ private:
|
|||
FoldingSet<SCEVPredicate> UniquePreds;
|
||||
BumpPtrAllocator SCEVAllocator;
|
||||
|
||||
/// This maps loops to a list of SCEV expressions that (transitively) use said
|
||||
/// loop.
|
||||
DenseMap<const Loop *, SmallVector<const SCEV *, 4>> LoopUsers;
|
||||
/// This maps loops to a list of addrecs that directly use said loop.
|
||||
DenseMap<const Loop *, SmallVector<const SCEVAddRecExpr *, 4>> LoopUsers;
|
||||
|
||||
/// Cache tentative mappings from UnknownSCEVs in a Loop, to a SCEV expression
|
||||
/// they can be rewritten into under certain predicates.
|
||||
|
|
|
@ -1098,7 +1098,6 @@ const SCEV *ScalarEvolution::getLosslessPtrToIntExpr(const SCEV *Op,
|
|||
SCEV *S = new (SCEVAllocator)
|
||||
SCEVPtrToIntExpr(ID.Intern(SCEVAllocator), Op, IntPtrTy);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Op);
|
||||
return S;
|
||||
}
|
||||
|
@ -1219,7 +1218,6 @@ const SCEV *ScalarEvolution::getTruncateExpr(const SCEV *Op, Type *Ty,
|
|||
SCEV *S =
|
||||
new (SCEVAllocator) SCEVTruncateExpr(ID.Intern(SCEVAllocator), Op, Ty);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Op);
|
||||
return S;
|
||||
}
|
||||
|
@ -1274,7 +1272,6 @@ const SCEV *ScalarEvolution::getTruncateExpr(const SCEV *Op, Type *Ty,
|
|||
SCEV *S = new (SCEVAllocator) SCEVTruncateExpr(ID.Intern(SCEVAllocator),
|
||||
Op, Ty);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Op);
|
||||
return S;
|
||||
}
|
||||
|
@ -1604,7 +1601,6 @@ ScalarEvolution::getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
|
|||
SCEV *S = new (SCEVAllocator) SCEVZeroExtendExpr(ID.Intern(SCEVAllocator),
|
||||
Op, Ty);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Op);
|
||||
return S;
|
||||
}
|
||||
|
@ -1874,7 +1870,6 @@ ScalarEvolution::getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
|
|||
SCEV *S = new (SCEVAllocator) SCEVZeroExtendExpr(ID.Intern(SCEVAllocator),
|
||||
Op, Ty);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Op);
|
||||
return S;
|
||||
}
|
||||
|
@ -1914,7 +1909,6 @@ ScalarEvolution::getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
|
|||
SCEV *S = new (SCEVAllocator) SCEVSignExtendExpr(ID.Intern(SCEVAllocator),
|
||||
Op, Ty);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Op);
|
||||
return S;
|
||||
}
|
||||
|
@ -2112,7 +2106,6 @@ ScalarEvolution::getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
|
|||
SCEV *S = new (SCEVAllocator) SCEVSignExtendExpr(ID.Intern(SCEVAllocator),
|
||||
Op, Ty);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, { Op });
|
||||
return S;
|
||||
}
|
||||
|
@ -2898,7 +2891,6 @@ ScalarEvolution::getOrCreateAddExpr(ArrayRef<const SCEV *> Ops,
|
|||
S = new (SCEVAllocator)
|
||||
SCEVAddExpr(ID.Intern(SCEVAllocator), O, Ops.size());
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Ops);
|
||||
}
|
||||
S->setNoWrapFlags(Flags);
|
||||
|
@ -2922,7 +2914,7 @@ ScalarEvolution::getOrCreateAddRecExpr(ArrayRef<const SCEV *> Ops,
|
|||
S = new (SCEVAllocator)
|
||||
SCEVAddRecExpr(ID.Intern(SCEVAllocator), O, Ops.size(), L);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
LoopUsers[L].push_back(S);
|
||||
registerUser(S, Ops);
|
||||
}
|
||||
setNoWrapFlags(S, Flags);
|
||||
|
@ -2945,7 +2937,6 @@ ScalarEvolution::getOrCreateMulExpr(ArrayRef<const SCEV *> Ops,
|
|||
S = new (SCEVAllocator) SCEVMulExpr(ID.Intern(SCEVAllocator),
|
||||
O, Ops.size());
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Ops);
|
||||
}
|
||||
S->setNoWrapFlags(Flags);
|
||||
|
@ -3455,7 +3446,6 @@ const SCEV *ScalarEvolution::getUDivExpr(const SCEV *LHS,
|
|||
SCEV *S = new (SCEVAllocator) SCEVUDivExpr(ID.Intern(SCEVAllocator),
|
||||
LHS, RHS);
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, {LHS, RHS});
|
||||
return S;
|
||||
}
|
||||
|
@ -3850,7 +3840,6 @@ const SCEV *ScalarEvolution::getMinMaxExpr(SCEVTypes Kind,
|
|||
SCEVMinMaxExpr(ID.Intern(SCEVAllocator), Kind, O, Ops.size());
|
||||
|
||||
UniqueSCEVs.InsertNode(S, IP);
|
||||
addToLoopUseLists(S);
|
||||
registerUser(S, Ops);
|
||||
return S;
|
||||
}
|
||||
|
@ -12825,13 +12814,6 @@ ScalarEvolution::getUsedLoops(const SCEV *S,
|
|||
SCEVTraversal<FindUsedLoops>(F).visitAll(S);
|
||||
}
|
||||
|
||||
void ScalarEvolution::addToLoopUseLists(const SCEV *S) {
|
||||
SmallPtrSet<const Loop *, 8> LoopsUsed;
|
||||
getUsedLoops(S, LoopsUsed);
|
||||
for (auto *L : LoopsUsed)
|
||||
LoopUsers[L].push_back(S);
|
||||
}
|
||||
|
||||
void ScalarEvolution::verify() const {
|
||||
ScalarEvolution &SE = *const_cast<ScalarEvolution *>(this);
|
||||
ScalarEvolution SE2(F, TLI, AC, DT, LI);
|
||||
|
|
Loading…
Reference in New Issue