diff options
author | Whitney Tsang <whitneyt@ca.ibm.com> | 2019-12-18 15:57:50 +0000 |
---|---|---|
committer | Whitney Tsang <whitneyt@ca.ibm.com> | 2019-12-18 15:59:45 +0000 |
commit | 9883d7edc65f03c5380ad577619a81e54b9b01eb (patch) | |
tree | 3deb9392f99cd0c3f4235adb3c4577fc00af98a3 /llvm/lib/Transforms/Utils/LoopUtils.cpp | |
parent | d372576d8a3baeff180e3a2fada3220215204ed1 (diff) | |
download | bcm5719-llvm-9883d7edc65f03c5380ad577619a81e54b9b01eb.tar.gz bcm5719-llvm-9883d7edc65f03c5380ad577619a81e54b9b01eb.zip |
[LoopUtils] Updated deleteDeadLoop() to handle loop nest.
Reviewer: kariddi, sanjoy, reames, Meinersbur, bmahjour, etiotto,
kbarton
Reviewed By: Meinersbur
Subscribers: mgorny, hiraditya, llvm-commits
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D70939
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index 68ef0fe4071..ec068e16717 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -673,7 +673,19 @@ void llvm::deleteDeadLoop(Loop *L, DominatorTree *DT = nullptr, LI->removeBlock(BB); // The last step is to update LoopInfo now that we've eliminated this loop. - LI->erase(L); + // Note: LoopInfo::erase remove the given loop and relink its subloops with + // its parent. While removeLoop/removeChildLoop remove the given loop but + // not relink its subloops, which is what we want. + if (Loop *ParentLoop = L->getParentLoop()) { + Loop::iterator I = find(ParentLoop->begin(), ParentLoop->end(), L); + assert(I != ParentLoop->end() && "Couldn't find loop"); + ParentLoop->removeChildLoop(I); + } else { + Loop::iterator I = find(LI->begin(), LI->end(), L); + assert(I != LI->end() && "Couldn't find loop"); + LI->removeLoop(I); + } + LI->destroy(L); } } |