Teach the dag scheduler to handle inline asm nodes with multi-value immediate operands.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41386 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
index 192b076..11c69a4 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
@@ -753,15 +753,16 @@
           }
           break;
         case 3: { // Immediate.
-          assert(NumVals == 1 && "Unknown immediate value!");
-          if (ConstantSDNode *CS=dyn_cast<ConstantSDNode>(Node->getOperand(i))){
-            MI->addImmOperand(CS->getValue());
-          } else {
-            GlobalAddressSDNode *GA = 
-              cast<GlobalAddressSDNode>(Node->getOperand(i));
-            MI->addGlobalAddressOperand(GA->getGlobal(), GA->getOffset());
+          for (; NumVals; --NumVals, ++i) {
+            if (ConstantSDNode *CS =
+                   dyn_cast<ConstantSDNode>(Node->getOperand(i))) {
+              MI->addImmOperand(CS->getValue());
+            } else {
+              GlobalAddressSDNode *GA = 
+                  cast<GlobalAddressSDNode>(Node->getOperand(i));
+              MI->addGlobalAddressOperand(GA->getGlobal(), GA->getOffset());
+            }
           }
-          ++i;
           break;
         }
         case 4:  // Addressing mode.