change the LabelSDNode to be EHLabelSDNode and make it hold
[oota-llvm.git] / lib / CodeGen / ExactHazardRecognizer.h
1 //=- llvm/CodeGen/ExactHazardRecognizer.h - Scheduling Support -*- C++ -*-=//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
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.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
17 #define LLVM_CODEGEN_EXACTHAZARDRECOGNIZER_H
18
19 #include "llvm/CodeGen/ScheduleHazardRecognizer.h"
20 #include "llvm/CodeGen/ScheduleDAG.h"
21 #include "llvm/Target/TargetInstrItineraries.h"
22
23 namespace llvm {
24   class ExactHazardRecognizer : public ScheduleHazardRecognizer {
25     // Itinerary data for the target.
26     const InstrItineraryData &ItinData;
27
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.
33     unsigned *Scoreboard;
34
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;
39
40     // Indices into the Scoreboard that represent the current cycle.
41     unsigned ScoreboardHead;
42
43     // Return the scoreboard index to use for 'offset' cycles in the
44     // future. 'offset' of 0 returns ScoreboardHead.
45     unsigned getFutureIndex(unsigned offset);
46
47     // Print the scoreboard.
48     void dumpScoreboard();
49
50   public:
51     ExactHazardRecognizer(const InstrItineraryData &ItinData);
52     ~ExactHazardRecognizer();
53     
54     virtual HazardType getHazardType(SUnit *SU);
55     virtual void Reset();
56     virtual void EmitInstruction(SUnit *SU);
57     virtual void AdvanceCycle();
58   };
59 }
60
61 #endif