[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon Mar 6 21:40:54 PST 2006



Changes in directory llvm/lib/CodeGen/SelectionDAG:

ScheduleDAGList.cpp updated: 1.19 -> 1.20
---
Log message:

Fix some formatting, when looking for hazards, prefer target nodes over 
things like copyfromreg.


---
Diffs of the changes:  (+15 -7)

 ScheduleDAGList.cpp |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.19 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.20
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.19	Mon Mar  6 11:58:04 2006
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp	Mon Mar  6 23:40:43 2006
@@ -435,19 +435,27 @@
 
     bool HasNoopHazards = false;
     do {
-      SUnit *CurrNode = Available.top();
+      SUnit *CurNode = Available.top();
       Available.pop();
-      HazardRecognizer::HazardType HT =
-        HazardRec.getHazardType(CurrNode->Node);
+      
+      // Get the node represented by this SUnit.
+      SDNode *N = CurNode->Node;
+      // If this is a pseudo op, like copyfromreg, look to see if there is a
+      // real target node flagged to it.  If so, use the target node.
+      for (unsigned i = 0, e = CurNode->FlaggedNodes.size(); 
+           N->getOpcode() < ISD::BUILTIN_OP_END && i != e; ++i)
+        N = CurNode->FlaggedNodes[i];
+      
+      HazardRecognizer::HazardType HT = HazardRec.getHazardType(N);
       if (HT == HazardRecognizer::NoHazard) {
-        FoundNode = CurrNode;
+        FoundNode = CurNode;
         break;
       }
       
       // Remember if this is a noop hazard.
       HasNoopHazards |= HT == HazardRecognizer::NoopHazard;
       
-      NotReady.push_back(CurrNode);
+      NotReady.push_back(CurNode);
     } while (!Available.empty());
     
     // Add the nodes that aren't ready back onto the available list.
@@ -463,14 +471,14 @@
     } else if (!HasNoopHazards) {
       // Otherwise, we have a pipeline stall, but no other problem, just advance
       // the current cycle and try again.
-      DEBUG(std::cerr << "*** Advancing cycle, no work to do");
+      DEBUG(std::cerr << "*** Advancing cycle, no work to do\n");
       HazardRec.AdvanceCycle();
       ++NumStalls;
     } else {
       // Otherwise, we have no instructions to issue and we have instructions
       // that will fault if we don't do this right.  This is the case for
       // processors without pipeline interlocks and other cases.
-      DEBUG(std::cerr << "*** Emitting noop");
+      DEBUG(std::cerr << "*** Emitting noop\n");
       HazardRec.EmitNoop();
       Sequence.push_back(0);   // NULL SUnit* -> noop
       ++NumNoops;






More information about the llvm-commits mailing list