blob: 98bfc4cf0cc552947deaad6e417c7875bfd390c3 [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 Trick7d8867d2011-11-29 19:33:49 +000026/// ARMHazardRecognizer handles special constraints that are not expressed in
27/// the scheduling itinerary. This is only used during postRA scheduling. The
28/// ARM preRA scheduler uses an unspecialized instance of the
29/// ScoreboardHazardRecognizer.
Andrew Trick6b120722010-12-08 20:04:29 +000030class ARMHazardRecognizer : public ScoreboardHazardRecognizer {
Evan Cheng48575f62010-12-05 22:04:16 +000031 const ARMBaseInstrInfo &TII;
32 const ARMBaseRegisterInfo &TRI;
33 const ARMSubtarget &STI;
34
35 MachineInstr *LastMI;
Andrew Trick2da8bc82010-12-24 05:03:26 +000036 unsigned FpMLxStalls;
Evan Cheng48575f62010-12-05 22:04:16 +000037
38public:
39 ARMHazardRecognizer(const InstrItineraryData *ItinData,
40 const ARMBaseInstrInfo &tii,
41 const ARMBaseRegisterInfo &tri,
Andrew Trick2da8bc82010-12-24 05:03:26 +000042 const ARMSubtarget &sti,
43 const ScheduleDAG *DAG) :
44 ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"), TII(tii),
Evan Chengddfd1372011-12-14 02:11:42 +000045 TRI(tri), STI(sti), LastMI(0) {}
Evan Cheng48575f62010-12-05 22:04:16 +000046
Andrew Trick2da8bc82010-12-24 05:03:26 +000047 virtual HazardType getHazardType(SUnit *SU, int Stalls);
Evan Cheng48575f62010-12-05 22:04:16 +000048 virtual void Reset();
49 virtual void EmitInstruction(SUnit *SU);
50 virtual void AdvanceCycle();
Andrew Trick6b120722010-12-08 20:04:29 +000051 virtual void RecedeCycle();
Evan Cheng48575f62010-12-05 22:04:16 +000052};
53
Evan Cheng48575f62010-12-05 22:04:16 +000054} // end namespace llvm
55
56#endif // ARMHAZARDRECOGNIZER_H