Add a new SelectionDAG::RemoveDeadNodes method
authorChris Lattner <sabre@nondot.org>
Fri, 7 Jan 2005 21:08:55 +0000 (21:08 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 7 Jan 2005 21:08:55 +0000 (21:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19344 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/SelectionDAG.h
include/llvm/CodeGen/SelectionDAGNodes.h

index ce5deecf38f31b558a7bca46c9c024dc0edbbc77..e6f89e9ec5f57f10a26a29cd9819f1005d6e3ae5 100644 (file)
@@ -93,6 +93,12 @@ public:
   /// the graph.
   void Legalize(TargetLowering &TLI);
 
+  /// RemoveDeadNodes - This method deletes all unreachable nodes in the
+  /// SelectionDAG, including nodes (like loads) that have uses of their token
+  /// chain but no other uses and no side effect.  If a node is passed in as an
+  /// argument, it is used as the seed for node deletion.
+  void RemoveDeadNodes(SDNode *N = 0);
+
   SDOperand getConstant(uint64_t Val, MVT::ValueType VT);
   SDOperand getConstantFP(double Val, MVT::ValueType VT);
   SDOperand getGlobalAddress(const GlobalValue *GV, MVT::ValueType VT);
@@ -150,6 +156,9 @@ public:
   }
 
   void dump() const;
+
+private:
+  void DeleteNodeIfDead(SDNode *N, void *NodeSet);
 };
 
 }
index 96575fea417ca815dbe49119464a7c3a73e1ae76..eea1942f066c753707c1d7fb08b21e089fe3c923 100644 (file)
@@ -409,6 +409,17 @@ protected:
   void setValueTypes(std::vector<MVT::ValueType> &VTs) {
     std::swap(Values, VTs);
   }
+
+  void removeUser(SDNode *User) {
+    // Remove this user from the operand's use list.
+    for (unsigned i = Uses.size(); ; --i) {
+      assert(i != 0 && "Didn't find user!");
+      if (Uses[i-1] == User) {
+        Uses.erase(Uses.begin()+i-1);
+        break;
+      }
+    }
+  }
 };
 
 
@@ -498,7 +509,6 @@ protected:
   GlobalAddressSDNode(const GlobalValue *GA, MVT::ValueType VT)
     : SDNode(ISD::GlobalAddress, VT) {
     TheGlobal = const_cast<GlobalValue*>(GA);
-
   }
 public: