OSDN Git Service

simplify MorphNodeTo to take a VTList operand.
authorChris Lattner <sabre@nondot.org>
Sun, 4 Feb 2007 02:41:42 +0000 (02:41 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 4 Feb 2007 02:41:42 +0000 (02:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33868 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 4a40e83..5e4be98 100644 (file)
@@ -970,10 +970,10 @@ protected:
   /// MorphNodeTo - This clears the return value and operands list, and sets the
   /// opcode of the node to the specified value.  This should only be used by
   /// the SelectionDAG class.
-  void MorphNodeTo(unsigned Opc) {
+  void MorphNodeTo(unsigned Opc, SDVTList L) {
     NodeType = Opc;
-    ValueList = 0;
-    NumValues = 0;
+    ValueList = L.VTs;
+    NumValues = L.NumVTs;
     
     // Clear the operands list, updating used nodes to remove this from their
     // use list.
@@ -1058,10 +1058,7 @@ class HandleSDNode : public SDNode {
   virtual void ANCHOR();  // Out-of-line virtual method to give class a home.
 public:
   HandleSDNode(SDOperand X) : SDNode(ISD::HANDLENODE, X) {}
-  ~HandleSDNode() {
-    MorphNodeTo(ISD::HANDLENODE);  // Drops operand uses.
-  }
-  
+  ~HandleSDNode();  
   SDOperand getValue() const { return getOperand(0); }
 };
 
index 0370cc1..f790e63 100644 (file)
@@ -2085,8 +2085,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
    
   RemoveNodeFromCSEMaps(N);
   
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
 
   CSEMap.InsertNode(N, IP);
   return N;
@@ -2105,8 +2104,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
   RemoveNodeFromCSEMaps(N);
   SDOperand OperandList[] = { Op1 };
   
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
   N->setOperands(OperandList, 1);
   CSEMap.InsertNode(N, IP);
   return N;
@@ -2127,8 +2125,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
   
   SDOperand OperandList[] = { Op1, Op2 };
 
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
   N->setOperands(OperandList, 2);
   
   CSEMap.InsertNode(N, IP);   // Memoize the new node.
@@ -2149,8 +2146,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
   RemoveNodeFromCSEMaps(N);
   
   SDOperand OperandList[] = { Op1, Op2, Op3 };
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
   N->setOperands(OperandList, 3);
 
   CSEMap.InsertNode(N, IP);   // Memoize the new node.
@@ -2169,8 +2165,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
     return ON;
                                        
   RemoveNodeFromCSEMaps(N);
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
   N->setOperands(Ops, NumOps);
   
   CSEMap.InsertNode(N, IP);   // Memoize the new node.
@@ -2190,8 +2185,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
   RemoveNodeFromCSEMaps(N);
 
   SDOperand OperandList[] = { Op1, Op2 };
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
   N->setOperands(OperandList, 2);
   
   CSEMap.InsertNode(N, IP);   // Memoize the new node.
@@ -2213,8 +2207,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
   RemoveNodeFromCSEMaps(N);
 
   SDOperand OperandList[] = { Op1, Op2, Op3 };
-  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
-  N->setValueTypes(VTs);
+  N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc, VTs);
   N->setOperands(OperandList, 3);
   
   CSEMap.InsertNode(N, IP);   // Memoize the new node.
@@ -2547,6 +2540,12 @@ void VTSDNode::ANCHOR() {}
 void LoadSDNode::ANCHOR() {}
 void StoreSDNode::ANCHOR() {}
 
+HandleSDNode::~HandleSDNode() {
+  SDVTList VTs = { 0, 0 };
+  MorphNodeTo(ISD::HANDLENODE, VTs);  // Drops operand uses.
+}
+
+
 /// Profile - Gather unique data for the node.
 ///
 void SDNode::Profile(FoldingSetNodeID &ID) {