diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-10-25 10:27:08 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-10-25 10:32:17 +0200 |
commit | 477551fd0957326d1988dd1a74b39642241bd86c (patch) | |
tree | c15d2e04377838e9e92f78ac89ad622aa331d99e /llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | |
parent | a81672b31af4f8ac6362e983d4e3cffa4eadd1d1 (diff) | |
download | llvm-477551fd0957326d1988dd1a74b39642241bd86c.zip llvm-477551fd0957326d1988dd1a74b39642241bd86c.tar.gz llvm-477551fd0957326d1988dd1a74b39642241bd86c.tar.bz2 |
[SCEVExpander] Minor cleanup in value reuse (NFC)
Use dyn_cast_or_null and convert one of the checks into an
assertion. SCEV is a per-function analysis.
Diffstat (limited to 'llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp index a25f9d6..9b8dbe3 100644 --- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp @@ -1844,16 +1844,18 @@ SCEVExpander::FindValueInExprValueMap(const SCEV *S, if (CanonicalMode || !SE.containsAddRecurrence(S)) { // If S is scConstant, it may be worse to reuse an existing Value. if (S->getSCEVType() != scConstant && Set) { - // Choose a Value from the set which dominates the insertPt. - // insertPt should be inside the Value's parent loop so as not to break + // Choose a Value from the set which dominates the InsertPt. + // InsertPt should be inside the Value's parent loop so as not to break // the LCSSA form. for (auto const &VOPair : *Set) { Value *V = VOPair.first; ConstantInt *Offset = VOPair.second; - Instruction *EntInst = nullptr; - if (V && isa<Instruction>(V) && (EntInst = cast<Instruction>(V)) && - S->getType() == V->getType() && - EntInst->getFunction() == InsertPt->getFunction() && + Instruction *EntInst = dyn_cast_or_null<Instruction>(V); + if (!EntInst) + continue; + + assert(EntInst->getFunction() == InsertPt->getFunction()); + if (S->getType() == V->getType() && SE.DT.dominates(EntInst, InsertPt) && (SE.LI.getLoopFor(EntInst->getParent()) == nullptr || SE.LI.getLoopFor(EntInst->getParent())->contains(InsertPt))) |