I was confused about this, it turns out that MorphNodeTo
authorChris Lattner <sabre@nondot.org>
Tue, 2 Mar 2010 07:14:49 +0000 (07:14 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 2 Mar 2010 07:14:49 +0000 (07:14 +0000)
*does* delete ex-operands that become dead.

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

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index f708ff25832a765c07e0371f64d7203342809fa5..7e1ce429ef7d29e4dc22289807df806a7a1150b6 100644 (file)
@@ -1770,9 +1770,8 @@ MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTList,
   } else if (Node->getValueType(NTMNumResults-1) == MVT::Other)
     OldChainResultNo = NTMNumResults-1;
 
-  // FIXME: If this matches multiple nodes it will just leave them here
-  // dead with noone to love them.  These dead nodes can block future
-  // matches (!).
+  // Call the underlying SelectionDAG routine to do the transmogrification. Note
+  // that this deletes operands of the old node that become dead.
   SDNode *Res = CurDAG->MorphNodeTo(Node, ~TargetOpc, VTList, Ops, NumOps);
 
   // MorphNodeTo can operate in two ways: if an existing node with the