148575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng//===-- ARMHazardRecognizer.h - ARM Hazard Recognizers ----------*- C++ -*-===// 248575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// 348575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// The LLVM Compiler Infrastructure 448575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// 548575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// This file is distributed under the University of Illinois Open Source 648575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// License. See LICENSE.TXT for details. 748575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// 848575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng//===----------------------------------------------------------------------===// 948575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// 1048575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// This file defines hazard recognizers for scheduling ARM functions. 1148575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng// 1248575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng//===----------------------------------------------------------------------===// 1348575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 1448575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng#ifndef ARMHAZARDRECOGNIZER_H 1548575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng#define ARMHAZARDRECOGNIZER_H 1648575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 176b1207267f01877ff9b351786c902cb2ecd354c0Andrew Trick#include "llvm/CodeGen/ScoreboardHazardRecognizer.h" 1848575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 1948575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Chengnamespace llvm { 2048575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 2148575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Chengclass ARMBaseInstrInfo; 2248575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Chengclass ARMBaseRegisterInfo; 2348575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Chengclass ARMSubtarget; 2448575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Chengclass MachineInstr; 2548575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 266b1207267f01877ff9b351786c902cb2ecd354c0Andrew Trickclass ARMHazardRecognizer : public ScoreboardHazardRecognizer { 2748575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng const ARMBaseInstrInfo &TII; 2848575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng const ARMBaseRegisterInfo &TRI; 2948575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng const ARMSubtarget &STI; 3048575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 3148575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng MachineInstr *LastMI; 322da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick unsigned FpMLxStalls; 3348575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng unsigned ITBlockSize; // No. of MIs in current IT block yet to be scheduled. 3448575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng MachineInstr *ITBlockMIs[4]; 3548575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 3648575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Chengpublic: 3748575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng ARMHazardRecognizer(const InstrItineraryData *ItinData, 3848575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng const ARMBaseInstrInfo &tii, 3948575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng const ARMBaseRegisterInfo &tri, 402da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick const ARMSubtarget &sti, 412da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick const ScheduleDAG *DAG) : 422da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"), TII(tii), 432da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick TRI(tri), STI(sti), LastMI(0), ITBlockSize(0) {} 4448575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 452da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick virtual HazardType getHazardType(SUnit *SU, int Stalls); 4648575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng virtual void Reset(); 4748575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng virtual void EmitInstruction(SUnit *SU); 4848575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng virtual void AdvanceCycle(); 496b1207267f01877ff9b351786c902cb2ecd354c0Andrew Trick virtual void RecedeCycle(); 5048575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng}; 5148575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 5248575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng} // end namespace llvm 5348575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng 5448575f6ea7d5cd21ab29ca370f58fcf9ca31400bEvan Cheng#endif // ARMHAZARDRECOGNIZER_H 55