blob: 71ac979e6cd8d1eed39c5452fecff4549f4310d5 [file] [log] [blame]
David Goodwind94a4e52009-08-10 15:55:25 +00001//=- 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
23namespace 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