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(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 // ARMHAZARDRECOGNIZER_H 50