16 #ifndef LLVM_CODEGEN_SCOREBOARDHAZARDRECOGNIZER_H
17 #define LLVM_CODEGEN_SCOREBOARDHAZARDRECOGNIZER_H
20 #include "llvm/Support/DataTypes.h"
26 class InstrItineraryData;
50 Scoreboard():Data(NULL), Depth(0), Head(0) { }
55 size_t getDepth()
const {
return Depth; }
56 unsigned& operator[](
size_t idx)
const {
58 assert(Depth && !(Depth & (Depth - 1)) &&
59 "Scoreboard was not initialized properly!");
61 return Data[(Head + idx) & (Depth-1)];
64 void reset(
size_t d = 1) {
67 Data =
new unsigned[Depth];
70 memset(Data, 0, Depth *
sizeof(Data[0]));
75 Head = (Head + 1) & (Depth-1);
79 Head = (Head - 1) & (Depth-1);
89 static const char *DebugType;
103 Scoreboard ReservedScoreboard;
104 Scoreboard RequiredScoreboard;
109 const char *ParentDebugType =
"");
118 virtual void Reset();
virtual void AdvanceCycle()
virtual HazardType getHazardType(SUnit *SU, int Stalls)
static error_code advance(T &it, size_t Val)
virtual void RecedeCycle()
ScoreboardHazardRecognizer(const InstrItineraryData *ItinData, const ScheduleDAG *DAG, const char *ParentDebugType="")
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
virtual bool atIssueLimit() const
virtual void EmitInstruction(SUnit *SU)
SUnit - Scheduling unit. This is a node in the scheduling DAG.