15 #ifndef R600MACHINESCHEDULER_H_
16 #define R600MACHINESCHEDULER_H_
54 std::vector<SUnit *> Available[IDLast], Pending[IDLast];
55 std::vector<SUnit *> AvailableAlus[AluLast];
56 std::vector<SUnit *> PhysicalRegCopy;
60 InstKind NextInstKind;
62 unsigned AluInstCount;
63 unsigned FetchInstCount;
65 int InstKindLimit[IDLast];
71 DAG(0), TII(0), TRI(0), MRI(0) {
84 std::vector<MachineInstr *> InstructionsGroupCandidate;
87 int getInstKind(
SUnit *SU);
89 AluKind getAluKind(
SUnit *SU)
const;
91 unsigned AvailablesAluCount()
const;
92 SUnit *AttemptFillSlot (
unsigned Slot,
bool AnyAlu);
93 void PrepareNextSlot();
94 SUnit *PopInst(std::vector<SUnit*> &Q,
bool AnyALU);
98 SUnit* pickOther(
int QID);
99 void MoveUnits(std::vector<SUnit *> &QSrc, std::vector<SUnit *> &QDst);
virtual void schedNode(SUnit *SU, bool IsTopNode)
Interface definition for R600InstrInfo.
virtual void releaseTopNode(SUnit *SU)
virtual void releaseBottomNode(SUnit *SU)
virtual SUnit * pickNode(bool &IsTopNode)
virtual void initialize(ScheduleDAGMI *dag)
Initialize the strategy after building the DAG for a new region.
virtual ~R600SchedStrategy()
SUnit - Scheduling unit. This is a node in the scheduling DAG.