1 //=- llvm/CodeGen/ExactHazardRecognizer.h - Scheduling Support -*- C++ -*-=//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the ExactHazardRecognizer class, which
11 // implements hazard-avoidance heuristics for scheduling, based on the
12 // scheduling itineraries specified for the target.
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
17 #define LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
19 #include "llvm/CodeGen/ScheduleHazardRecognizer.h"
20 #include "llvm/CodeGen/ScheduleDAG.h"
21 #include "llvm/Target/TargetInstrItineraries.h"
24 class ExactHazardRecognizer
: public ScheduleHazardRecognizer
{
25 // Itinerary data for the target.
26 const InstrItineraryData
&ItinData
;
28 // Scoreboard to track function unit usage. Scoreboard[0] is a
29 // mask of the FUs in use in the cycle currently being
30 // schedule. Scoreboard[1] is a mask for the next cycle. The
31 // Scoreboard is used as a circular buffer with the current cycle
32 // indicated by ScoreboardHead.
35 // The maximum number of cycles monitored by the Scoreboard. This
36 // value is determined based on the target itineraries to ensure
37 // that all hazards can be tracked.
38 unsigned ScoreboardDepth
;
40 // Indices into the Scoreboard that represent the current cycle.
41 unsigned ScoreboardHead
;
43 // Return the scoreboard index to use for 'offset' cycles in the
44 // future. 'offset' of 0 returns ScoreboardHead.
45 unsigned getFutureIndex(unsigned offset
);
47 // Print the scoreboard.
48 void dumpScoreboard();
51 ExactHazardRecognizer(const InstrItineraryData
&ItinData
);
52 ~ExactHazardRecognizer();
54 virtual HazardType
getHazardType(SUnit
*SU
);
56 virtual void EmitInstruction(SUnit
*SU
);
57 virtual void AdvanceCycle();