17 #ifndef LLVM_CODEGEN_RESOURCEPRIORITYQUEUE_H
18 #define LLVM_CODEGEN_RESOURCEPRIORITYQUEUE_H
28 class ResourcePriorityQueue;
31 struct resource_sort :
public std::binary_function<SUnit*, SUnit*, bool> {
40 std::vector<SUnit> *SUnits;
46 std::vector<unsigned> NumNodesSolelyBlocking;
49 std::vector<SUnit*> Queue;
53 std::vector<unsigned> RegPressure;
57 std::vector<unsigned> RegLimit;
71 std::vector<SUnit*> Packet;
74 unsigned ParallelLiveRanges;
75 signed HorizontalVerticalBalance;
81 delete ResourcesModel;
86 void initNodes(std::vector<SUnit> &sunits);
89 NumNodesSolelyBlocking.resize(SUnits->size(), 0);
99 assert(NodeNum < (*SUnits).size());
100 return (*SUnits)[NodeNum].getHeight();
104 assert(NodeNum < NumNodesSolelyBlocking.size());
105 return NumNodesSolelyBlocking[NodeNum];
119 bool empty()
const {
return Queue.empty(); }
125 virtual void remove(
SUnit *SU);
135 void adjustPriorityOfUnscheduledPreds(
SUnit *SU);
137 unsigned numberRCValPredInSU (
SUnit *SU,
unsigned RCId);
138 unsigned numberRCValSuccInSU (
SUnit *SU,
unsigned RCId);
signed rawRegPressureDelta(SUnit *SU, unsigned RCId)
void scheduledNode(SUnit *Node)
scheduledNode - Main resource tracking point.
void reserveResources(SUnit *SU)
Keep track of available resources.
unsigned getLatency(unsigned NodeNum) const
void initNumRegDefsLeft(SUnit *SU)
ResourcePriorityQueue(SelectionDAGISel *IS)
Sorting functions for the Available queue.
void initNodes(std::vector< SUnit > &sunits)
virtual void dump(ScheduleDAG *DAG) const
virtual void push(SUnit *U)
unsigned getNumSolelyBlockNodes(unsigned NodeNum) const
signed regPressureDelta(SUnit *SU, bool RawPressure=false)
void updateNumRegDefsLeft(SUnit *SU)
signed SUSchedulingCost(SUnit *SU)
void addNode(const SUnit *SU)
bool isResourceAvailable(SUnit *SU)
void updateNode(const SUnit *SU)
ResourcePriorityQueue * PQ
bool operator()(const SUnit *left, const SUnit *right) const
SUnit - Scheduling unit. This is a node in the scheduling DAG.
resource_sort(ResourcePriorityQueue *pq)