Use SUnit's CycleBound field instead of duplicating it in
authorDan Gohman <gohman@apple.com>
Mon, 17 Nov 2008 19:45:19 +0000 (19:45 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 17 Nov 2008 19:45:19 +0000 (19:45 +0000)
a side-car datastructure

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59458 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp

index f22812fa46a2188ebf09ae33b5d8078963f365b3..901a2a8c921d6071d820389552f6419f355761a8 100644 (file)
@@ -55,9 +55,8 @@ private:
   /// PendingQueue - This contains all of the instructions whose operands have
   /// been issued, but their results are not ready yet (due to the latency of
   /// the operation).  Once the operands becomes available, the instruction is
-  /// added to the AvailableQueue.  This keeps track of each SUnit and the
-  /// number of cycles left to execute before the operation is available.
-  std::vector<std::pair<unsigned, SUnit*> > PendingQueue;
+  /// added to the AvailableQueue.
+  std::vector<SUnit*> PendingQueue;
 
   /// HazardRec - The hazard recognizer to use.
   HazardRecognizer *HazardRec;
@@ -134,7 +133,9 @@ void ScheduleDAGList::ReleaseSucc(SUnit *SuccSU, bool isChain) {
       AvailableCycle = std::max(AvailableCycle, PredDoneCycle);
     }
     
-    PendingQueue.push_back(std::make_pair(AvailableCycle, SuccSU));
+    assert(SuccSU->CycleBound == 0 && "CycleBound already assigned!");
+    SuccSU->CycleBound = AvailableCycle;
+    PendingQueue.push_back(SuccSU);
   }
 }
 
@@ -176,14 +177,14 @@ void ScheduleDAGList::ListScheduleTopDown() {
     // Check to see if any of the pending instructions are ready to issue.  If
     // so, add them to the available queue.
     for (unsigned i = 0, e = PendingQueue.size(); i != e; ++i) {
-      if (PendingQueue[i].first == CurCycle) {
-        AvailableQueue->push(PendingQueue[i].second);
-        PendingQueue[i].second->isAvailable = true;
+      if (PendingQueue[i]->CycleBound == CurCycle) {
+        AvailableQueue->push(PendingQueue[i]);
+        PendingQueue[i]->isAvailable = true;
         PendingQueue[i] = PendingQueue.back();
         PendingQueue.pop_back();
         --i; --e;
       } else {
-        assert(PendingQueue[i].first > CurCycle && "Negative latency?");
+        assert(PendingQueue[i]->CycleBound > CurCycle && "Negative latency?");
       }
     }