summaryrefslogtreecommitdiffstats
path: root/llvm/lib/VMCore/Dominators.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-08-13 22:10:29 +0000
committerDevang Patel <dpatel@apple.com>2007-08-13 22:10:29 +0000
commitc0fa0c52b30aeb4cfebd55f3ace34dcd0a1fc524 (patch)
tree0916ab2cb6ade6298c89697afb55f100136e4b9f /llvm/lib/VMCore/Dominators.cpp
parentda48cf40db3945c6d0ca0dc20f8eba027fc6e6f7 (diff)
downloadbcm5719-llvm-c0fa0c52b30aeb4cfebd55f3ace34dcd0a1fc524.tar.gz
bcm5719-llvm-c0fa0c52b30aeb4cfebd55f3ace34dcd0a1fc524.zip
Add methods to erase basic block entry.
llvm-svn: 41052
Diffstat (limited to 'llvm/lib/VMCore/Dominators.cpp')
-rw-r--r--llvm/lib/VMCore/Dominators.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/VMCore/Dominators.cpp b/llvm/lib/VMCore/Dominators.cpp
index d08048cc3b8..d292e0816c3 100644
--- a/llvm/lib/VMCore/Dominators.cpp
+++ b/llvm/lib/VMCore/Dominators.cpp
@@ -559,6 +559,30 @@ static void PrintDomTree(const DomTreeNode *N, std::ostream &o,
PrintDomTree(*I, o, Lev+1);
}
+/// eraseNode - Removes a node from the domiantor tree. Block must not
+/// domiante any other blocks. Removes node from its immediate dominator's
+/// children list. Deletes dominator node associated with basic block BB.
+void DominatorTreeBase::eraseNode(BasicBlock *BB) {
+ DomTreeNode *Node = getNode(BB);
+ assert (Node && "Removing node that isn't in dominator tree.");
+
+ // Remove node from immediate dominator's children list.
+ DomTreeNode *IDom = Node->getIDom();
+ if (IDom) {
+ std::vector<DomTreeNode*>::iterator I =
+ std::find(IDom->Children.begin(), IDom->Children.end(), Node);
+ assert(I != IDom->Children.end() &&
+ "Not in immediate dominator children set!");
+ // I am no longer your child...
+ IDom->Children.erase(I);
+ }
+
+ assert (Node->getChildren().empty() && "Children list is not empty");
+
+ DomTreeNodes.erase(BB);
+ delete Node;
+}
+
void DominatorTreeBase::print(std::ostream &o, const Module* ) const {
o << "=============================--------------------------------\n";
o << "Inorder Dominator Tree: ";
OpenPOWER on IntegriCloud