summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-06-23 23:40:09 +0000
committerDan Gohman <gohman@apple.com>2008-06-23 23:40:09 +0000
commit0d8a61eb60091b607fe4673a4c09276bf418676c (patch)
treedc1cb3aeefbb2b53f004248067a1419026baa9a9 /llvm/lib/CodeGen/SelectionDAG
parent0cfc16100b1bc9b0accb1eeb61dbf81af985bfdf (diff)
downloadbcm5719-llvm-0d8a61eb60091b607fe4673a4c09276bf418676c.tar.gz
bcm5719-llvm-0d8a61eb60091b607fe4673a4c09276bf418676c.zip
Use the new PriorityQueue in ScheduleDAGList too, which also
needs arbitrary-element removal. llvm-svn: 52654
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp22
1 files changed, 3 insertions, 19 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp
index ab6e92db46e..40c26c290c4 100644
--- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp
@@ -28,9 +28,9 @@
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Compiler.h"
+#include "llvm/ADT/PriorityQueue.h"
#include "llvm/ADT/Statistic.h"
#include <climits>
-#include <queue>
using namespace llvm;
STATISTIC(NumNoops , "Number of noops inserted");
@@ -315,7 +315,7 @@ namespace {
/// mobility.
std::vector<unsigned> NumNodesSolelyBlocking;
- std::priority_queue<SUnit*, std::vector<SUnit*>, latency_sort> Queue;
+ PriorityQueue<SUnit*, std::vector<SUnit*>, latency_sort> Queue;
public:
LatencyPriorityQueue() : Queue(latency_sort(this)) {
}
@@ -373,25 +373,9 @@ public:
return V;
}
- /// remove - This is a really inefficient way to remove a node from a
- /// priority queue. We should roll our own heap to make this better or
- /// something.
void remove(SUnit *SU) {
- std::vector<SUnit*> Temp;
-
assert(!Queue.empty() && "Not in queue!");
- while (Queue.top() != SU) {
- Temp.push_back(Queue.top());
- Queue.pop();
- assert(!Queue.empty() && "Not in queue!");
- }
-
- // Remove the node from the PQ.
- Queue.pop();
-
- // Add all the other nodes back.
- for (unsigned i = 0, e = Temp.size(); i != e; ++i)
- Queue.push(Temp[i]);
+ Queue.erase_one(SU);
}
// ScheduledNode - As nodes are scheduled, we look to see if there are any
OpenPOWER on IntegriCloud