mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Make MergeBlockIntoPredecessor conformant to the precondition of calling DTU.applyUpdates
Summary: It is mentioned in the document of DTU that "It is illegal to submit any update that has already been submitted, i.e., you are supposed not to insert an existent edge or delete a nonexistent edge." It is dangerous to violet this rule because DomTree and PostDomTree occasionally crash on this scenario. This patch fixes `MergeBlockIntoPredecessor`, making it conformant to this precondition. Reviewers: kuhar, brzycki, chandlerc Reviewed By: brzycki Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58444 llvm-svn: 355105
This commit is contained in:
parent
5268203d9c
commit
a16394ad24
@ -186,7 +186,9 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU,
|
|||||||
Updates.push_back({DominatorTree::Delete, PredBB, BB});
|
Updates.push_back({DominatorTree::Delete, PredBB, BB});
|
||||||
for (auto I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
|
for (auto I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
|
||||||
Updates.push_back({DominatorTree::Delete, BB, *I});
|
Updates.push_back({DominatorTree::Delete, BB, *I});
|
||||||
Updates.push_back({DominatorTree::Insert, PredBB, *I});
|
// This successor of BB may already have PredBB as a predecessor.
|
||||||
|
if (llvm::find(successors(PredBB), *I) == succ_end(PredBB))
|
||||||
|
Updates.push_back({DominatorTree::Insert, PredBB, *I});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user