blob: 9473bc52072b6aac07d9585503e89b6deabfde67 [file] [log] [blame]
Evan Cheng48575f62010-12-05 22:04:16 +00001//===-- ARMHazardRecognizer.h - ARM Hazard Recognizers ----------*- 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 defines hazard recognizers for scheduling ARM functions.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef ARMHAZARDRECOGNIZER_H
15#define ARMHAZARDRECOGNIZER_H
16
Andrew Trick6b120722010-12-08 20:04:29 +000017#include "llvm/CodeGen/ScoreboardHazardRecognizer.h"
Evan Cheng48575f62010-12-05 22:04:16 +000018
19namespace llvm {
20
21class ARMBaseInstrInfo;
22class ARMBaseRegisterInfo;
23class ARMSubtarget;
24class MachineInstr;
25
Andrew Trick6b120722010-12-08 20:04:29 +000026class ARMHazardRecognizer : public ScoreboardHazardRecognizer {
Evan Cheng48575f62010-12-05 22:04:16 +000027 const ARMBaseInstrInfo &TII;
28 const ARMBaseRegisterInfo &TRI;
29 const ARMSubtarget &STI;
30
31 MachineInstr *LastMI;
32 unsigned Stalls;
33 unsigned ITBlockSize; // No. of MIs in current IT block yet to be scheduled.
34 MachineInstr *ITBlockMIs[4];
35
36public:
37 ARMHazardRecognizer(const InstrItineraryData *ItinData,
38 const ARMBaseInstrInfo &tii,
39 const ARMBaseRegisterInfo &tri,
40 const ARMSubtarget &sti) :
Andrew Trick6b120722010-12-08 20:04:29 +000041 ScoreboardHazardRecognizer(ItinData), TII(tii), TRI(tri), STI(sti),
Evan Cheng48575f62010-12-05 22:04:16 +000042 LastMI(0), ITBlockSize(0) {}
43
44 virtual HazardType getHazardType(SUnit *SU);
45 virtual void Reset();
46 virtual void EmitInstruction(SUnit *SU);
47 virtual void AdvanceCycle();
Andrew Trick6b120722010-12-08 20:04:29 +000048 virtual void RecedeCycle();
Evan Cheng48575f62010-12-05 22:04:16 +000049};
50
Evan Cheng48575f62010-12-05 22:04:16 +000051} // end namespace llvm
52
53#endif // ARMHAZARDRECOGNIZER_H