CopyFromReg produces two values. Make sure that we remember that both are
authorChris Lattner <sabre@nondot.org>
Fri, 28 Jan 2005 06:27:38 +0000 (06:27 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 28 Jan 2005 06:27:38 +0000 (06:27 +0000)
legalized, and actually return the correct result when we legalize the chain first.

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

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 74f1c5526a02e08697da03c173b102a65c5684fa..b48c1b6aaba23230c40a242795b741de9cedcc63 100644 (file)
@@ -206,7 +206,14 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
     if (Tmp1 != Node->getOperand(0))
       Result = DAG.getCopyFromReg(cast<RegSDNode>(Node)->getReg(),
                                   Node->getValueType(0), Tmp1);
-    break;
+    else
+      Result = Op.getValue(0);
+
+    // Since CopyFromReg produces two values, make sure to remember that we
+    // legalized both of them.
+    AddLegalizedOperand(Op.getValue(0), Result);
+    AddLegalizedOperand(Op.getValue(1), Result.getValue(1));
+    return Result.getValue(Op.ResNo);
   case ISD::ImplicitDef:
     Tmp1 = LegalizeOp(Node->getOperand(0));
     if (Tmp1 != Node->getOperand(0))