Handle CopyToReg nodes with flag operands correctly
authorChris Lattner <sabre@nondot.org>
Tue, 30 Aug 2005 01:57:23 +0000 (01:57 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 30 Aug 2005 01:57:23 +0000 (01:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23144 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

index af751edcbf514c2fe8d0268d95bf2f4b69638b03..8fac71c372cd2d27c21e03bfbb4a7310a1e9369a 100644 (file)
@@ -205,8 +205,13 @@ unsigned SimpleSched::Emit(SDOperand Op) {
         Emit(Op.getOperand(i));
       break;
     case ISD::CopyToReg: {
-      Emit(Op.getOperand(0));   // Emit the chain.
+      SDOperand ChainOp;
+      if (Op.getNumOperands() == 4)
+        ChainOp = Op.getOperand(3);
+      if (Op.getOperand(0).Val != ChainOp.Val)
+        Emit(Op.getOperand(0));   // Emit the chain.
       unsigned Val = Emit(Op.getOperand(2));
+      if (ChainOp.Val) Emit(ChainOp);
       MRI.copyRegToReg(*BB, BB->end(),
                        cast<RegisterSDNode>(Op.getOperand(1))->getReg(), Val,
                        RegMap->getRegClass(Val));