- Add methods to ImmediateDominators & DominatorTree to allow updates
authorChris Lattner <sabre@nondot.org>
Thu, 26 Sep 2002 16:14:41 +0000 (16:14 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 26 Sep 2002 16:14:41 +0000 (16:14 +0000)
 - Make DominatorTree::Node not inherit from std::vector

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3939 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Dominators.cpp

index cd0825c128ab41789d26b5089f385236eb960adf..e6f18ec3b361e0fd8baa50c94130922c9a069cd7 100644 (file)
@@ -186,6 +186,23 @@ void DominatorTreeBase::reset() {
   Nodes.clear();
 }
 
+void DominatorTreeBase::Node2::setIDom(Node2 *NewIDom) {
+  assert(IDom && "No immediate dominator?");
+  if (IDom != NewIDom) {
+    std::vector<Node*>::iterator I =
+      std::find(IDom->Children.begin(), IDom->Children.end(), this);
+    assert(I != IDom->Children.end() &&
+           "Not in immediate dominator children set!");
+    // I am no longer your child...
+    IDom->Children.erase(I);
+
+    // Switch to new dominator
+    IDom = NewIDom;
+    IDom->Children.push_back(this);
+  }
+}
+
+
 
 void DominatorTree::calculate(const DominatorSet &DS) {
   Nodes[Root] = new Node(Root, 0);   // Add a node for the root...