[llvm-commits] [llvm] r41386 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

Chris Lattner sabre at nondot.org
Fri Aug 24 17:53:07 PDT 2007


Author: lattner
Date: Fri Aug 24 19:53:07 2007
New Revision: 41386

URL: http://llvm.org/viewvc/llvm-project?rev=41386&view=rev
Log:
Teach the dag scheduler to handle inline asm nodes with multi-value immediate operands.

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp?rev=41386&r1=41385&r2=41386&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp Fri Aug 24 19:53:07 2007
@@ -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.





More information about the llvm-commits mailing list