ARMHazardRecognizer.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1//===-- 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
17#include "llvm/CodeGen/ScoreboardHazardRecognizer.h"
18
19namespace llvm {
20
21class ARMBaseInstrInfo;
22class ARMBaseRegisterInfo;
23class ARMSubtarget;
24class MachineInstr;
25
26/// 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.
30class ARMHazardRecognizer : public ScoreboardHazardRecognizer {
31  MachineInstr *LastMI;
32  unsigned FpMLxStalls;
33
34public:
35  ARMHazardRecognizer(const InstrItineraryData *ItinData,
36                      const ScheduleDAG *DAG)
37    : ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"),
38      LastMI(0) {}
39
40  HazardType getHazardType(SUnit *SU, int Stalls) override;
41  void Reset() override;
42  void EmitInstruction(SUnit *SU) override;
43  void AdvanceCycle() override;
44  void RecedeCycle() override;
45};
46
47} // end namespace llvm
48
49#endif // ARMHAZARDRECOGNIZER_H
50