16 #ifndef LLVM_CODEGEN_LATENCYPRIORITYQUEUE_H
17 #define LLVM_CODEGEN_LATENCYPRIORITYQUEUE_H
22 class LatencyPriorityQueue;
25 struct latency_sort :
public std::binary_function<SUnit*, SUnit*, bool> {
34 std::vector<SUnit> *SUnits;
40 std::vector<unsigned> NumNodesSolelyBlocking;
43 std::vector<SUnit*> Queue;
52 void initNodes(std::vector<SUnit> &sunits)
override {
54 NumNodesSolelyBlocking.resize(SUnits->size(), 0);
58 NumNodesSolelyBlocking.resize(SUnits->size(), 0);
69 assert(NodeNum < (*SUnits).size());
70 return (*SUnits)[NodeNum].getHeight();
74 assert(NodeNum < NumNodesSolelyBlocking.size());
75 return NumNodesSolelyBlocking[NodeNum];
78 bool empty()
const override {
return Queue.empty(); }
84 void remove(
SUnit *SU)
override;
93 void AdjustPriorityOfUnscheduledPreds(
SUnit *SU);
void releaseState() override
SchedulingPriorityQueue - This interface is used to plug different priorities computation algorithms ...
void scheduledNode(SUnit *Node) override
scheduledNode - As each node is scheduled, this method is invoked.
latency_sort(LatencyPriorityQueue *pq)
bool operator()(const SUnit *left, const SUnit *right) const
unsigned getLatency(unsigned NodeNum) const
void push(SUnit *U) override
Sorting functions for the Available queue.
LatencyPriorityQueue * PQ
unsigned getNumSolelyBlockNodes(unsigned NodeNum) const
void addNode(const SUnit *SU) override
bool empty() const override
void initNodes(std::vector< SUnit > &sunits) override
bool isBottomUp() const override
SUnit - Scheduling unit. This is a node in the scheduling DAG.
void updateNode(const SUnit *SU) override