X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FCodeGen%2FScoreboardHazardRecognizer.h;h=060e89a3fdc79d42414cba1f37ee69f35338bbec;hb=0f841b4f95cd3a5c451d65f5fd082d8bcb2828d9;hp=561bf0fecf60e09fa3349e6842b3faf261026787;hpb=6b1207267f01877ff9b351786c902cb2ecd354c0;p=oota-llvm.git diff --git a/include/llvm/CodeGen/ScoreboardHazardRecognizer.h b/include/llvm/CodeGen/ScoreboardHazardRecognizer.h index 561bf0fecf6..060e89a3fdc 100644 --- a/include/llvm/CodeGen/ScoreboardHazardRecognizer.h +++ b/include/llvm/CodeGen/ScoreboardHazardRecognizer.h @@ -21,11 +21,11 @@ #include #include -#include namespace llvm { class InstrItineraryData; +class ScheduleDAG; class SUnit; class ScoreboardHazardRecognizer : public ScheduleHazardRecognizer { @@ -84,16 +84,38 @@ class ScoreboardHazardRecognizer : public ScheduleHazardRecognizer { void dump() const; }; +#ifndef NDEBUG + // Support for tracing ScoreboardHazardRecognizer as a component within + // another module. Follows the current thread-unsafe model of tracing. + static const char *DebugType; +#endif + // Itinerary data for the target. const InstrItineraryData *ItinData; + const ScheduleDAG *DAG; + + /// IssueWidth - Max issue per cycle. 0=Unknown. + unsigned IssueWidth; + + /// IssueCount - Count instructions issued in this cycle. + unsigned IssueCount; + Scoreboard ReservedScoreboard; Scoreboard RequiredScoreboard; public: - ScoreboardHazardRecognizer(const InstrItineraryData *ItinData); + ScoreboardHazardRecognizer(const InstrItineraryData *ItinData, + const ScheduleDAG *DAG, + const char *ParentDebugType = ""); + + /// atIssueLimit - Return true if no more instructions may be issued in this + /// cycle. + virtual bool atIssueLimit() const; - virtual HazardType getHazardType(SUnit *SU); + // Stalls provides an cycle offset at which SU will be scheduled. It will be + // negative for bottom-up scheduling. + virtual HazardType getHazardType(SUnit *SU, int Stalls); virtual void Reset(); virtual void EmitInstruction(SUnit *SU); virtual void AdvanceCycle();