1
//=- llvm/CodeGen/ScheduleHazardRecognizer.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 ScheduleHazardRecognizer class, which implements
11
// hazard-avoidance heuristics for scheduling.
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_CODEGEN_SCHEDULEHAZARDRECOGNIZER_H
16
#define LLVM_CODEGEN_SCHEDULEHAZARDRECOGNIZER_H
22
/// HazardRecognizer - This determines whether or not an instruction can be
23
/// issued this cycle, and whether or not a noop needs to be inserted to handle
25
class ScheduleHazardRecognizer {
27
virtual ~ScheduleHazardRecognizer();
30
NoHazard, // This instruction can be emitted at this cycle.
31
Hazard, // This instruction can't be emitted at this cycle.
32
NoopHazard // This instruction can't be emitted, and needs noops.
35
/// getHazardType - Return the hazard type of emitting this node. There are
36
/// three possible results. Either:
37
/// * NoHazard: it is legal to issue this instruction on this cycle.
38
/// * Hazard: issuing this instruction would stall the machine. If some
39
/// other instruction is available, issue it first.
40
/// * NoopHazard: issuing this instruction would break the program. If
41
/// some other instruction can be issued, do so, otherwise issue a noop.
42
virtual HazardType getHazardType(SUnit *) {
46
/// Reset - This callback is invoked when a new block of
47
/// instructions is about to be schedule. The hazard state should be
48
/// set to an initialized state.
49
virtual void Reset() {}
51
/// EmitInstruction - This callback is invoked when an instruction is
52
/// emitted, to advance the hazard state.
53
virtual void EmitInstruction(SUnit *) {}
55
/// AdvanceCycle - This callback is invoked when no instructions can be
56
/// issued on this cycle without a hazard. This should increment the
57
/// internal state of the hazard recognizer so that previously "Hazard"
58
/// instructions will now not be hazards.
59
virtual void AdvanceCycle() {}
61
/// EmitNoop - This callback is invoked when a noop was added to the
62
/// instruction stream.
63
virtual void EmitNoop() {
64
// Default implementation: count it as a cycle.