Change CopyFromReg to take and produce a chain node, allowing it to be used
authorChris Lattner <sabre@nondot.org>
Fri, 14 Jan 2005 22:37:20 +0000 (22:37 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 14 Jan 2005 22:37:20 +0000 (22:37 +0000)
with physregs that are not live across the entire block.

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

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

index 5c55005df85abb5ebf5f5b74aab88bd08597812b..4feaf909f2f168605f9a5e94fcafe1bcb0ee2a1e 100644 (file)
@@ -99,21 +99,24 @@ public:
   SDOperand getCopyToReg(SDOperand Chain, SDOperand N, unsigned Reg) {
     // Note: these are auto-CSE'd because the caller doesn't make requests that
     // could cause duplicates to occur.
-    SDNode *NN = new RegSDNode(ISD::CopyToReg, MVT::Other, Chain, N, Reg);
+    SDNode *NN = new RegSDNode(ISD::CopyToReg, Chain, N, Reg);
+    NN->setValueTypes(MVT::Other);
     AllNodes.push_back(NN);
     return SDOperand(NN, 0);
   }
 
-  SDOperand getCopyFromReg(unsigned Reg, MVT::ValueType VT) {
+  SDOperand getCopyFromReg(unsigned Reg, MVT::ValueType VT, SDOperand Chain) {
     // Note: These nodes are auto-CSE'd by the caller of this method.
-    SDNode *NN = new RegSDNode(ISD::CopyFromReg, VT, Reg);
+    SDNode *NN = new RegSDNode(ISD::CopyFromReg, Chain, Reg);
+    NN->setValueTypes(VT, MVT::Other);
     AllNodes.push_back(NN);
     return SDOperand(NN, 0);
   }
 
   SDOperand getImplicitDef(SDOperand Chain, unsigned Reg) {
     // Note: These nodes are auto-CSE'd by the caller of this method.
-    SDNode *NN = new RegSDNode(ISD::ImplicitDef, MVT::Other, Chain, Reg);
+    SDNode *NN = new RegSDNode(ISD::ImplicitDef, Chain, Reg);
+    NN->setValueTypes(MVT::Other);
     AllNodes.push_back(NN);
     return SDOperand(NN, 0);
   }
index c9a7df937a93df367230ca597600e816fd0f2d01..b82671e0aee0fe7fadbd67b1a714dd46ac033603 100644 (file)
@@ -648,19 +648,11 @@ class RegSDNode : public SDNode {
   unsigned Reg;
 protected:
   friend class SelectionDAG;
-  RegSDNode(unsigned Opc, MVT::ValueType VT, SDOperand Chain,
-            SDOperand Src, unsigned reg)
+  RegSDNode(unsigned Opc, SDOperand Chain, SDOperand Src, unsigned reg)
     : SDNode(Opc, Chain, Src), Reg(reg) {
-    setValueTypes(VT);
-  }
-  RegSDNode(unsigned Opc, MVT::ValueType VT, SDOperand Chain,
-            unsigned reg)
-    : SDNode(Opc, Chain), Reg(reg) {
-    setValueTypes(VT);
-  }
-  RegSDNode(unsigned Opc, MVT::ValueType VT, unsigned reg)
-    : SDNode(Opc, VT), Reg(reg) {
   }
+  RegSDNode(unsigned Opc, SDOperand Chain, unsigned reg)
+    : SDNode(Opc, Chain), Reg(reg) {}
 public:
 
   unsigned getReg() const { return Reg; }
@@ -714,10 +706,10 @@ class MVTSDNode : public SDNode {
   MVT::ValueType ExtraValueType;
 protected:
   friend class SelectionDAG;
-  MVTSDNode(unsigned Opc, MVT::ValueType VT,
+  MVTSDNode(unsigned Opc, MVT::ValueType VT1, MVT::ValueType VT2,
             SDOperand Op0, SDOperand Op1, MVT::ValueType EVT)
     : SDNode(Opc, Op0, Op1), ExtraValueType(EVT) {
-    setValueTypes(VT);
+    setValueTypes(VT1, VT2);
   }
   MVTSDNode(unsigned Opc, MVT::ValueType VT,
             SDOperand Op0, SDOperand Op1, SDOperand Op2, MVT::ValueType EVT)