diff options
author | Arthur Eubanks <aeubanks@google.com> | 2023-01-19 16:59:36 -0800 |
---|---|---|
committer | Arthur Eubanks <aeubanks@google.com> | 2023-01-19 17:01:15 -0800 |
commit | c5ea42bcf48c8f3d3e35a6bff620b06d2a499108 (patch) | |
tree | 5b1176374b66a976ea7eaf0c45174dc50df834a6 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | |
parent | d5cbaa047004335a29dc3bcaf6aaa1c26fc27f36 (diff) | |
download | llvm-c5ea42bcf48c8f3d3e35a6bff620b06d2a499108.zip llvm-c5ea42bcf48c8f3d3e35a6bff620b06d2a499108.tar.gz llvm-c5ea42bcf48c8f3d3e35a6bff620b06d2a499108.tar.bz2 |
Revert "[LoopUnroll] Directly update DT instead of DTU."
This reverts commit d0907ce7ed9f159562ca3f4cfd8d87e89e93febe.
Causes `opt -passes=loop-unroll-full` to crash on
```
define void @foo() {
bb:
br label %bb1
bb1: ; preds = %bb1, %bb1, %bb
switch i1 true, label %bb1 [
i1 true, label %bb2
i1 false, label %bb1
]
bb2: ; preds = %bb1
ret void
}
```
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | 20 |
1 files changed, 1 insertions, 19 deletions
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp index 8e49edb..d14e5b8 100644 --- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp +++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -179,8 +179,7 @@ bool llvm::DeleteDeadPHIs(BasicBlock *BB, const TargetLibraryInfo *TLI, bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU, LoopInfo *LI, MemorySSAUpdater *MSSAU, MemoryDependenceResults *MemDep, - bool PredecessorWithTwoSuccessors, - DominatorTree *DT) { + bool PredecessorWithTwoSuccessors) { if (BB->hasAddressTaken()) return false; @@ -233,21 +232,10 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU, FoldSingleEntryPHINodes(BB, MemDep); } - if (DT) { - assert(!DTU && "cannot use both DT and DTU for updates"); - DomTreeNode *PredNode = DT->getNode(PredBB); - DomTreeNode *BBNode = DT->getNode(BB); - if (PredNode) { - assert(BBNode && "PredNode unreachable but BBNode reachable?"); - for (DomTreeNode *C : to_vector(BBNode->children())) - C->setIDom(PredNode); - } - } // DTU update: Collect all the edges that exit BB. // These dominator edges will be redirected from Pred. std::vector<DominatorTree::UpdateType> Updates; if (DTU) { - assert(!DT && "cannot use both DT and DTU for updates"); // To avoid processing the same predecessor more than once. SmallPtrSet<BasicBlock *, 8> SeenSuccs; SmallPtrSet<BasicBlock *, 2> SuccsOfPredBB(succ_begin(PredBB), @@ -323,12 +311,6 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU, if (DTU) DTU->applyUpdates(Updates); - if (DT) { - assert(succ_empty(BB) && - "successors should have been transferred to PredBB"); - DT->eraseNode(BB); - } - // Finally, erase the old block and update dominator info. DeleteDeadBlock(BB, DTU); |