[llvm] ab06a74 - [NFC][SCEV] Reflow `getRelevantLoop()` into an exhaustive switch
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 21 14:16:00 PST 2023
Author: Roman Lebedev
Date: 2023-01-22T01:15:27+03:00
New Revision: ab06a74738c661230b5f26675ab8e3a188f5ac4b
URL: https://github.com/llvm/llvm-project/commit/ab06a74738c661230b5f26675ab8e3a188f5ac4b
DIFF: https://github.com/llvm/llvm-project/commit/ab06a74738c661230b5f26675ab8e3a188f5ac4b.diff
LOG: [NFC][SCEV] Reflow `getRelevantLoop()` into an exhaustive switch
Added:
Modified:
llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
index c027638f9958e..abb1496c72066 100644
--- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
+++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
@@ -678,16 +678,32 @@ const Loop *SCEVExpander::getRelevantLoop(const SCEV *S) {
if (!Pair.second)
return Pair.first->second;
- if (isa<SCEVConstant>(S))
- // A constant has no relevant loops.
- return nullptr;
- if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(S)) {
- if (const Instruction *I = dyn_cast<Instruction>(U->getValue()))
- return Pair.first->second = SE.LI.getLoopFor(I->getParent());
- // A non-instruction has no relevant loops.
- return nullptr;
+ switch (S->getSCEVType()) {
+ case scConstant:
+ return nullptr; // A constant has no relevant loops.
+ case scTruncate:
+ case scZeroExtend:
+ case scSignExtend:
+ case scPtrToInt: {
+ const SCEVCastExpr *C = cast<SCEVCastExpr>(S);
+ const Loop *Result = getRelevantLoop(C->getOperand());
+ return RelevantLoops[C] = Result;
+ }
+ case scUDivExpr: {
+ const SCEVUDivExpr *D = cast<SCEVUDivExpr>(S);
+ const Loop *Result = PickMostRelevantLoop(
+ getRelevantLoop(D->getLHS()), getRelevantLoop(D->getRHS()), SE.DT);
+ return RelevantLoops[D] = Result;
}
- if (const SCEVNAryExpr *N = dyn_cast<SCEVNAryExpr>(S)) {
+ case scAddExpr:
+ case scMulExpr:
+ case scAddRecExpr:
+ case scUMaxExpr:
+ case scSMaxExpr:
+ case scUMinExpr:
+ case scSMinExpr:
+ case scSequentialUMinExpr: {
+ const SCEVNAryExpr *N = cast<SCEVNAryExpr>(S);
const Loop *L = nullptr;
if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S))
L = AR->getLoop();
@@ -695,14 +711,15 @@ const Loop *SCEVExpander::getRelevantLoop(const SCEV *S) {
L = PickMostRelevantLoop(L, getRelevantLoop(Op), SE.DT);
return RelevantLoops[N] = L;
}
- if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(S)) {
- const Loop *Result = getRelevantLoop(C->getOperand());
- return RelevantLoops[C] = Result;
+ case scUnknown: {
+ const SCEVUnknown *U = cast<SCEVUnknown>(S);
+ if (const Instruction *I = dyn_cast<Instruction>(U->getValue()))
+ return Pair.first->second = SE.LI.getLoopFor(I->getParent());
+ // A non-instruction has no relevant loops.
+ return nullptr;
}
- if (const SCEVUDivExpr *D = dyn_cast<SCEVUDivExpr>(S)) {
- const Loop *Result = PickMostRelevantLoop(
- getRelevantLoop(D->getLHS()), getRelevantLoop(D->getRHS()), SE.DT);
- return RelevantLoops[D] = Result;
+ case scCouldNotCompute:
+ llvm_unreachable("Attempt to use a SCEVCouldNotCompute object!");
}
llvm_unreachable("Unexpected SCEV type!");
}
More information about the llvm-commits
mailing list