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.