Fix a bug legalizing call instructions (make sure to remember all result
authorChris Lattner <sabre@nondot.org>
Sun, 9 Jan 2005 19:43:23 +0000 (19:43 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 9 Jan 2005 19:43:23 +0000 (19:43 +0000)
values), and eliminate some switch statements.

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

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 7a4697ad5bf27ffde42c47083280fe5ec476b48f..649c34cc766e43e2ecd80bb1b0e0ea69ae6560ad 100644 (file)
@@ -332,9 +332,15 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
       RetTyVTs.reserve(Node->getNumValues());
       for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
         RetTyVTs.push_back(Node->getValueType(i));
-      Result = SDOperand(DAG.getCall(RetTyVTs, Tmp1, Tmp2), Op.ResNo);
+      Result = SDOperand(DAG.getCall(RetTyVTs, Tmp1, Tmp2), 0);
+    } else {
+      Result = Result.getValue(0);
     }
-    break;
+    // Since calls produce multiple values, make sure to remember that we
+    // legalized all of them.
+    for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
+      AddLegalizedOperand(SDOperand(Node, i), Result.getValue(i));
+    return Result.getValue(Op.ResNo);
 
   case ISD::BR:
     Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
@@ -499,13 +505,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
       // FIXME: These two stores are independent of each other!
       Result = DAG.getNode(ISD::STORE, MVT::Other, Tmp1, Lo, Tmp2);
 
-      unsigned IncrementSize;
-      switch (Lo.getValueType()) {
-      default: assert(0 && "Unknown ValueType to expand to!");
-      case MVT::i32: IncrementSize = 4; break;
-      case MVT::i16: IncrementSize = 2; break;
-      case MVT::i8:  IncrementSize = 1; break;
-      }
+      unsigned IncrementSize = MVT::getSizeInBits(Lo.getValueType())/8;
       Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
                          getIntPtrConstant(IncrementSize));
       assert(isTypeLegal(Tmp2.getValueType()) &&
@@ -701,13 +701,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
     Lo = DAG.getLoad(NVT, Ch, Ptr);
 
     // Increment the pointer to the other half.
-    unsigned IncrementSize;
-    switch (Lo.getValueType()) {
-    default: assert(0 && "Unknown ValueType to expand to!");
-    case MVT::i32: IncrementSize = 4; break;
-    case MVT::i16: IncrementSize = 2; break;
-    case MVT::i8:  IncrementSize = 1; break;
-    }
+    unsigned IncrementSize = MVT::getSizeInBits(Lo.getValueType())/8;
     Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
                       getIntPtrConstant(IncrementSize));
     // FIXME: This load is independent of the first one.