Line data Source code
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 LLVM_LIB_TARGET_ARM_ARMHAZARDRECOGNIZER_H
15 : #define LLVM_LIB_TARGET_ARM_ARMHAZARDRECOGNIZER_H
16 :
17 : #include "llvm/CodeGen/ScoreboardHazardRecognizer.h"
18 :
19 : namespace llvm {
20 :
21 : class ARMBaseInstrInfo;
22 : class ARMBaseRegisterInfo;
23 : class ARMSubtarget;
24 : class 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.
30 : class ARMHazardRecognizer : public ScoreboardHazardRecognizer {
31 : MachineInstr *LastMI;
32 : unsigned FpMLxStalls;
33 :
34 : public:
35 : ARMHazardRecognizer(const InstrItineraryData *ItinData,
36 : const ScheduleDAG *DAG)
37 9595 : : ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"),
38 9595 : LastMI(nullptr) {}
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
|