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: ARMHazardRecognizer(const InstrItineraryData * ItinData,const ScheduleDAG * DAG)35 ARMHazardRecognizer(const InstrItineraryData *ItinData, 36 const ScheduleDAG *DAG) 37 : ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"), 38 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 50