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();