diff options
author | Philip Reames <preames@rivosinc.com> | 2023-03-20 08:44:15 -0700 |
---|---|---|
committer | Philip Reames <listmail@philipreames.com> | 2023-03-20 09:05:38 -0700 |
commit | 54539fa8b3a3b8875b4e3d8b0737c66052a0edcd (patch) | |
tree | da996422385a4aa6235f7e8edf4261fb1bb9402b /llvm/lib/Transforms/Utils/LoopUtils.cpp | |
parent | afce10c5b60fada1db369d3770f4389da7ef30ef (diff) | |
download | llvm-54539fa8b3a3b8875b4e3d8b0737c66052a0edcd.zip llvm-54539fa8b3a3b8875b4e3d8b0737c66052a0edcd.tar.gz llvm-54539fa8b3a3b8875b4e3d8b0737c66052a0edcd.tar.bz2 |
[LSR/LFTR] Move two utilities to common code for reuse [nfc]
We're working on a transform in LSR which is essentiall an inverse of LFTR (in certain sub-cases). Move utilties so that they can be reused.
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index 7df8651..1c58370 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -466,6 +466,19 @@ llvm::collectChildrenInLoop(DomTreeNode *N, const Loop *CurLoop) { return Worklist; } +bool llvm::isAlmostDeadIV(PHINode *PN, BasicBlock *LatchBlock, Value *Cond) { + int LatchIdx = PN->getBasicBlockIndex(LatchBlock); + Value *IncV = PN->getIncomingValue(LatchIdx); + + for (User *U : PN->users()) + if (U != Cond && U != IncV) return false; + + for (User *U : IncV->users()) + if (U != Cond && U != PN) return false; + return true; +} + + void llvm::deleteDeadLoop(Loop *L, DominatorTree *DT, ScalarEvolution *SE, LoopInfo *LI, MemorySSA *MSSA) { assert((!DT || L->isLCSSAForm(*DT)) && "Expected LCSSA!"); |