It's not legal to fold a load from a narrower stack slot into a wider instruction...
[llvm/avr.git] / lib / CodeGen / ExactHazardRecognizer.h
blob71ac979e6cd8d1eed39c5452fecff4549f4310d5
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.
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"
23 namespace llvm {
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.
33 unsigned *Scoreboard;
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();
50 public:
51 ExactHazardRecognizer(const InstrItineraryData &ItinData);
52 ~ExactHazardRecognizer();
54 virtual HazardType getHazardType(SUnit *SU);
55 virtual void Reset();
56 virtual void EmitInstruction(SUnit *SU);
57 virtual void AdvanceCycle();
61 #endif