diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 5ebda953fbd..788c8c04a82 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -606,6 +606,11 @@ void DAGCombiner::Run(bool RunningAfterLegalize) { // Push the new node and any users onto the worklist AddToWorkList(RV.Val); AddUsersToWorkList(RV.Val); + + // Add any uses of the old node to the worklist if they have a single + // use. They may be dead after this node is deleted. + for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) + AddToWorkList(N->getOperand(i).Val); // Nodes can be reintroduced into the worklist. Make sure we do not // process a node that has been replaced.