add some methods for dag->dag isel
authorChris Lattner <sabre@nondot.org>
Tue, 16 Aug 2005 18:16:24 +0000 (18:16 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 16 Aug 2005 18:16:24 +0000 (18:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22800 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 79e5014e46b7408d1bb845724d975ecab910af85..b05ae25e299a2a4e291e2b299ba643ecb6236571 100644 (file)
@@ -204,14 +204,23 @@ public:
   // getSrcValue - construct a node to track a Value* through the backend
   SDOperand getSrcValue(const Value* I, int offset = 0);
 
-  void replaceAllUsesWith(SDOperand Old, SDOperand New) {
-    assert(Old != New && "RAUW self!");
-    assert(0 && "Unimplemented!");
-  }
-
+  
+  /// SelectNodeTo - These are used for target selectors to *mutate* the
+  /// specified node to have the specified return type, Target opcode, and
+  /// operands.  Note that target opcodes are stored as
+  /// ISD::BUILTIN_OP_END+TargetOpcode in the node opcode field.
+  void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
+                    SDOperand Op1);
+  void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
+                    SDOperand Op1, SDOperand Op2);
+  void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
+                    SDOperand Op1, SDOperand Op2, SDOperand Op3);
+  
+  
   void dump() const;
 
 private:
+  void RemoveNodeFromCSEMaps(SDNode *N);
   void DeleteNodeIfDead(SDNode *N, void *NodeSet);
   
   /// SimplifySetCC - Try to simplify a setcc built with the specified operands 
index d1273bc1ba14ce4a9700ea67041aad5b40d26801..f0bc0e3ccb5bcf80ad6f39d3745f7538f8ac70dd 100644 (file)
@@ -592,10 +592,17 @@ protected:
     NodeDepth = ND+1;
   }
 
-  virtual ~SDNode() {
-    // FIXME: Drop uses.
-  }
+  virtual ~SDNode() {}
 
+  /// 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) {
+    NodeType = Opc;
+    Values.clear();
+    Operands.clear();
+  }
+  
   void setValueTypes(MVT::ValueType VT) {
     Values.reserve(1);
     Values.push_back(VT);
@@ -609,7 +616,22 @@ protected:
   void setValueTypes(std::vector<MVT::ValueType> &VTs) {
     std::swap(Values, VTs);
   }
-
+  
+  void setOperands(SDOperand Op0) {
+    Operands.reserve(1);
+    Operands.push_back(Op0);
+  }
+  void setOperands(SDOperand Op0, SDOperand Op1) {
+    Operands.reserve(2);
+    Operands.push_back(Op0);
+    Operands.push_back(Op1);
+  }
+  void setOperands(SDOperand Op0, SDOperand Op1, SDOperand Op2) {
+    Operands.reserve(3);
+    Operands.push_back(Op0);
+    Operands.push_back(Op1);
+    Operands.push_back(Op2);
+  }
   void removeUser(SDNode *User) {
     // Remove this user from the operand's use list.
     for (unsigned i = Uses.size(); ; --i) {