Teach the dag scheduler to handle inline asm nodes with multi-value immediate operands.
authorChris Lattner <sabre@nondot.org>
Sat, 25 Aug 2007 00:53:07 +0000 (00:53 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 25 Aug 2007 00:53:07 +0000 (00:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41386 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

index 192b0767e363243eaf98144d02bd8a6c91847ef6..11c69a4e29340e6a2837465410dd0934d62f8ca5 100644 (file)
@@ -753,15 +753,16 @@ void ScheduleDAG::EmitNode(SDNode *Node,
           }
           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.