[llvm] 29fa062 - [SCEV] Add SCEV::operands() method (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 16 06:50:50 PST 2022
Author: Nikita Popov
Date: 2022-12-16T15:50:42+01:00
New Revision: 29fa062f0a2aeeb37e644887eb1be8c458c981b2
URL: https://github.com/llvm/llvm-project/commit/29fa062f0a2aeeb37e644887eb1be8c458c981b2
DIFF: https://github.com/llvm/llvm-project/commit/29fa062f0a2aeeb37e644887eb1be8c458c981b2.diff
LOG: [SCEV] Add SCEV::operands() method (NFC)
Add an operands() method on SCEV, which forwards to the operands()
method of individual SCEV expressions.
Added:
Modified:
llvm/include/llvm/Analysis/ScalarEvolution.h
llvm/lib/Analysis/ScalarEvolution.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/ScalarEvolution.h b/llvm/include/llvm/Analysis/ScalarEvolution.h
index 6a9933a7e9c2..917b6d178469 100644
--- a/llvm/include/llvm/Analysis/ScalarEvolution.h
+++ b/llvm/include/llvm/Analysis/ScalarEvolution.h
@@ -146,6 +146,9 @@ class SCEV : public FoldingSetNode {
/// Return the LLVM type of this SCEV expression.
Type *getType() const;
+ /// Return operands of this SCEV expression.
+ ArrayRef<const SCEV *> operands() const;
+
/// Return true if the expression is a constant zero.
bool isZero() const;
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index db7f7da69342..2e46ae57eb4c 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -430,6 +430,33 @@ Type *SCEV::getType() const {
llvm_unreachable("Unknown SCEV kind!");
}
+ArrayRef<const SCEV *> SCEV::operands() const {
+ switch (getSCEVType()) {
+ case scConstant:
+ case scUnknown:
+ return {};
+ case scPtrToInt:
+ case scTruncate:
+ case scZeroExtend:
+ case scSignExtend:
+ return cast<SCEVCastExpr>(this)->operands();
+ case scAddRecExpr:
+ case scAddExpr:
+ case scMulExpr:
+ case scUMaxExpr:
+ case scSMaxExpr:
+ case scUMinExpr:
+ case scSMinExpr:
+ case scSequentialUMinExpr:
+ return cast<SCEVNAryExpr>(this)->operands();
+ case scUDivExpr:
+ return cast<SCEVUDivExpr>(this)->operands();
+ case scCouldNotCompute:
+ llvm_unreachable("Attempt to use a SCEVCouldNotCompute object!");
+ }
+ llvm_unreachable("Unknown SCEV kind!");
+}
+
bool SCEV::isZero() const {
if (const SCEVConstant *SC = dyn_cast<SCEVConstant>(this))
return SC->getValue()->isZero();
@@ -7135,26 +7162,6 @@ ScalarEvolution::getNonTrivialDefiningScopeBound(const SCEV *S) {
return nullptr;
}
-/// Fills \p Ops with unique operands of \p S, if it has operands. If not,
-/// \p Ops remains unmodified.
-static void collectUniqueOps(const SCEV *S,
- SmallVectorImpl<const SCEV *> &Ops) {
- SmallPtrSet<const SCEV *, 4> Unique;
- auto InsertUnique = [&](const SCEV *S) {
- if (Unique.insert(S).second)
- Ops.push_back(S);
- };
- if (auto *S2 = dyn_cast<SCEVCastExpr>(S))
- for (const auto *Op : S2->operands())
- InsertUnique(Op);
- else if (auto *S2 = dyn_cast<SCEVNAryExpr>(S))
- for (const auto *Op : S2->operands())
- InsertUnique(Op);
- else if (auto *S2 = dyn_cast<SCEVUDivExpr>(S))
- for (const auto *Op : S2->operands())
- InsertUnique(Op);
-}
-
const Instruction *
ScalarEvolution::getDefiningScopeBound(ArrayRef<const SCEV *> Ops,
bool &Precise) {
@@ -7183,9 +7190,7 @@ ScalarEvolution::getDefiningScopeBound(ArrayRef<const SCEV *> Ops,
if (!Bound || DT.dominates(Bound, DefI))
Bound = DefI;
} else {
- SmallVector<const SCEV *, 4> Ops;
- collectUniqueOps(S, Ops);
- for (const auto *Op : Ops)
+ for (const auto *Op : S->operands())
pushOp(Op);
}
}
@@ -14129,9 +14134,7 @@ void ScalarEvolution::verify() const {
// Verify integrity of SCEV users.
for (const auto &S : UniqueSCEVs) {
- SmallVector<const SCEV *, 4> Ops;
- collectUniqueOps(&S, Ops);
- for (const auto *Op : Ops) {
+ for (const auto *Op : S.operands()) {
// We do not store dependencies of constants.
if (isa<SCEVConstant>(Op))
continue;
More information about the llvm-commits
mailing list