diff options
author | Chris Lattner <sabre@nondot.org> | 2010-03-14 19:46:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-03-14 19:46:02 +0000 |
commit | c4a3f23b9251b07785cca646ad27b426dfa23230 (patch) | |
tree | 6adeeb5dca53861a24b22b89cebb1ed796f19454 /lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | |
parent | 25e0ab9ae5507b0589be852f54693dec66796f0e (diff) |
fix ShrinkDemandedOps to not leave dead nodes around,
fixing PR6607
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98512 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index f6828ae4fb..72e61d3325 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -509,6 +509,12 @@ void SelectionDAGISel::ShrinkDemandedOps() { InWorklist.erase(N); if (N->use_empty() && N != CurDAG->getRoot().getNode()) { + // Deleting this node may make its operands dead, add them to the worklist + // if they aren't already there. + for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) + if (InWorklist.insert(N->getOperand(i).getNode())) + Worklist.push_back(N->getOperand(i).getNode()); + CurDAG->DeleteNode(N); continue; } |