diff options
author | Joshua Cao <cao.joshua@yahoo.com> | 2024-09-29 21:28:45 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-29 21:28:45 -0700 |
commit | 0bc98349c84130babb6a4acf2951a0ccc84f574f (patch) | |
tree | da28659fa63256f5e677b1147b4c0513c71db51f /llvm/lib/Transforms/Utils/LoopUtils.cpp | |
parent | 6f3c15163f9e8852768f0dd121564bffe0ace6a6 (diff) | |
download | llvm-0bc98349c84130babb6a4acf2951a0ccc84f574f.zip llvm-0bc98349c84130babb6a4acf2951a0ccc84f574f.tar.gz llvm-0bc98349c84130babb6a4acf2951a0ccc84f574f.tar.bz2 |
[LICM] Use DomTreeUpdater version of SplitBlockPredecessors, nfc (#107190)
The DominatorTree version is marked for deprecation, so we use the
DomTreeUpdater version. We also update sinkRegion() to iterate over
basic blocks instead of DomTreeNodes. The loop body calls
SplitBlockPredecessors. The DTU version calls
DomTreeUpdater::apply_updates(), which may call DominatorTree::reset().
This invalidates the worklist of DomTreeNodes to iterate over.
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index 9a4289e..7004727 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -445,21 +445,22 @@ TransformationMode llvm::hasLICMVersioningTransformation(const Loop *L) { } /// Does a BFS from a given node to all of its children inside a given loop. -/// The returned vector of nodes includes the starting point. -SmallVector<DomTreeNode *, 16> -llvm::collectChildrenInLoop(DomTreeNode *N, const Loop *CurLoop) { - SmallVector<DomTreeNode *, 16> Worklist; +/// The returned vector of basic blocks includes the starting point. +SmallVector<BasicBlock *, 16> llvm::collectChildrenInLoop(DominatorTree *DT, + DomTreeNode *N, + const Loop *CurLoop) { + SmallVector<BasicBlock *, 16> Worklist; auto AddRegionToWorklist = [&](DomTreeNode *DTN) { // Only include subregions in the top level loop. BasicBlock *BB = DTN->getBlock(); if (CurLoop->contains(BB)) - Worklist.push_back(DTN); + Worklist.push_back(DTN->getBlock()); }; AddRegionToWorklist(N); for (size_t I = 0; I < Worklist.size(); I++) { - for (DomTreeNode *Child : Worklist[I]->children()) + for (DomTreeNode *Child : DT->getNode(Worklist[I])->children()) AddRegionToWorklist(Child); } |