Eliminate special purpose hacks for dynamic_stack_alloc.
authorChris Lattner <sabre@nondot.org>
Sat, 14 May 2005 07:29:57 +0000 (07:29 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 14 May 2005 07:29:57 +0000 (07:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22015 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index d0de8c9b819dcbefdadb4afdf09864cfe1db02a3..2f259b1eb4855946d65747386d6f6c47d31241ef 100644 (file)
@@ -373,10 +373,12 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
     Tmp2 = LegalizeOp(Node->getOperand(1));  // Legalize the size.
     Tmp3 = LegalizeOp(Node->getOperand(2));  // Legalize the alignment.
     if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1) ||
-        Tmp3 != Node->getOperand(2))
-      Result = DAG.getNode(ISD::DYNAMIC_STACKALLOC, Node->getValueType(0),
-                           Tmp1, Tmp2, Tmp3);
-    else
+        Tmp3 != Node->getOperand(2)) {
+      std::vector<MVT::ValueType> VTs(Node->value_begin(), Node->value_end());
+      std::vector<SDOperand> Ops;
+      Ops.push_back(Tmp1); Ops.push_back(Tmp2); Ops.push_back(Tmp3);
+      Result = DAG.getNode(ISD::DYNAMIC_STACKALLOC, VTs, Ops);
+    } else
       Result = Op.getValue(0);
 
     // Since this op produces two values, make sure to remember that we
index 165b3c92f18d8b54ed612f163709d27f0bf7eb6b..3643f77f9361d930e796bf4a3c17d99115d1b2bc 100644 (file)
@@ -1350,19 +1350,7 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
   }
 
   SDNode *N = new SDNode(Opcode, N1, N2, N3);
-  switch (Opcode) {
-  case ISD::SRA_PARTS:
-  case ISD::SRL_PARTS:
-  case ISD::SHL_PARTS:
-    assert(0 && "Should not get here!");
-  default:
-    N->setValueTypes(VT);
-    break;
-  case ISD::DYNAMIC_STACKALLOC: // DYNAMIC_STACKALLOC produces pointer and chain
-    N->setValueTypes(VT, MVT::Other);
-    break;
-  }
-
+  N->setValueTypes(VT);
   // FIXME: memoize NODES
   AllNodes.push_back(N);
   return SDOperand(N, 0);
index c08232c7f00228b5e2d53396f8e71fbb5b0a49e5..52bcc9ab75c8ee038dc9013b4a1c70fede9871fe 100644 (file)
@@ -617,9 +617,14 @@ void SelectionDAGLowering::visitAlloca(AllocaInst &I) {
                             getIntPtrConstant(~(uint64_t)(StackAlign-1)));
   }
 
-  SDOperand DSA = DAG.getNode(ISD::DYNAMIC_STACKALLOC, AllocSize.getValueType(),
-                              getRoot(), AllocSize,
-                              getIntPtrConstant(Align));
+  std::vector<MVT::ValueType> VTs;
+  VTs.push_back(AllocSize.getValueType());
+  VTs.push_back(MVT::Other);
+  std::vector<SDOperand> Ops;
+  Ops.push_back(getRoot());
+  Ops.push_back(AllocSize);
+  Ops.push_back(getIntPtrConstant(Align));
+  SDOperand DSA = DAG.getNode(ISD::DYNAMIC_STACKALLOC, VTs, Ops);
   DAG.setRoot(setValue(&I, DSA).getValue(1));
 
   // Inform the Frame Information that we have just allocated a variable-sized