From d1fc96499b7619356c7542200d32da898b79f7c1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 7 Jan 2005 21:08:55 +0000 Subject: [PATCH] Add a new SelectionDAG::RemoveDeadNodes method git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19344 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/SelectionDAG.h | 9 +++++++++ include/llvm/CodeGen/SelectionDAGNodes.h | 12 +++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/llvm/CodeGen/SelectionDAG.h b/include/llvm/CodeGen/SelectionDAG.h index ce5deecf38f..e6f89e9ec5f 100644 --- a/include/llvm/CodeGen/SelectionDAG.h +++ b/include/llvm/CodeGen/SelectionDAG.h @@ -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); }; } diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index 96575fea417..eea1942f066 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -409,6 +409,17 @@ protected: void setValueTypes(std::vector &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(GA); - } public: