summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/ExactHazardRecognizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/ExactHazardRecognizer.h')
-rw-r--r--lib/CodeGen/ExactHazardRecognizer.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/CodeGen/ExactHazardRecognizer.h b/lib/CodeGen/ExactHazardRecognizer.h
new file mode 100644
index 0000000..71ac979
--- /dev/null
+++ b/lib/CodeGen/ExactHazardRecognizer.h
@@ -0,0 +1,61 @@
+//=- llvm/CodeGen/ExactHazardRecognizer.h - Scheduling Support -*- C++ -*-=//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the ExactHazardRecognizer class, which
+// implements hazard-avoidance heuristics for scheduling, based on the
+// scheduling itineraries specified for the target.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
+#define LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
+
+#include "llvm/CodeGen/ScheduleHazardRecognizer.h"
+#include "llvm/CodeGen/ScheduleDAG.h"
+#include "llvm/Target/TargetInstrItineraries.h"
+
+namespace llvm {
+ class ExactHazardRecognizer : public ScheduleHazardRecognizer {
+ // Itinerary data for the target.
+ const InstrItineraryData &ItinData;
+
+ // Scoreboard to track function unit usage. Scoreboard[0] is a
+ // mask of the FUs in use in the cycle currently being
+ // schedule. Scoreboard[1] is a mask for the next cycle. The
+ // Scoreboard is used as a circular buffer with the current cycle
+ // indicated by ScoreboardHead.
+ unsigned *Scoreboard;
+
+ // The maximum number of cycles monitored by the Scoreboard. This
+ // value is determined based on the target itineraries to ensure
+ // that all hazards can be tracked.
+ unsigned ScoreboardDepth;
+
+ // Indices into the Scoreboard that represent the current cycle.
+ unsigned ScoreboardHead;
+
+ // Return the scoreboard index to use for 'offset' cycles in the
+ // future. 'offset' of 0 returns ScoreboardHead.
+ unsigned getFutureIndex(unsigned offset);
+
+ // Print the scoreboard.
+ void dumpScoreboard();
+
+ public:
+ ExactHazardRecognizer(const InstrItineraryData &ItinData);
+ ~ExactHazardRecognizer();
+
+ virtual HazardType getHazardType(SUnit *SU);
+ virtual void Reset();
+ virtual void EmitInstruction(SUnit *SU);
+ virtual void AdvanceCycle();
+ };
+}
+
+#endif
OpenPOWER on IntegriCloud