aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
diff options
context:
space:
mode:
authorArthur Eubanks <aeubanks@google.com>2023-01-19 16:59:36 -0800
committerArthur Eubanks <aeubanks@google.com>2023-01-19 17:01:15 -0800
commitc5ea42bcf48c8f3d3e35a6bff620b06d2a499108 (patch)
tree5b1176374b66a976ea7eaf0c45174dc50df834a6 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
parentd5cbaa047004335a29dc3bcaf6aaa1c26fc27f36 (diff)
downloadllvm-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.cpp20
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);