116c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov//===-- Thumb1FrameLowering.h - Thumb1-specific frame info stuff --*- C++ -*-=// 233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// 333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// The LLVM Compiler Infrastructure 433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// 533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// This file is distributed under the University of Illinois Open Source 633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// License. See LICENSE.TXT for details. 733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// 833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//===----------------------------------------------------------------------===// 933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// 1033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// 1133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// 1233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//===----------------------------------------------------------------------===// 1333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 1433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#ifndef __THUMB_FRAMEINFO_H_ 15dac4b9267bc4e61de9237c622cd5b145768302fcSebastian Redl#define __THUMB_FRAMEINFO_H_ 1633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 1733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "ARM.h" 1816c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov#include "ARMFrameLowering.h" 1933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "ARMSubtarget.h" 2033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "Thumb1InstrInfo.h" 2133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "Thumb1RegisterInfo.h" 2216c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov#include "llvm/Target/TargetFrameLowering.h" 2333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 2433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovnamespace llvm { 2533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov class ARMSubtarget; 2633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 2716c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikovclass Thumb1FrameLowering : public ARMFrameLowering { 2833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovpublic: 2916c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov explicit Thumb1FrameLowering(const ARMSubtarget &sti) 3016c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov : ARMFrameLowering(sti) { 3133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov } 3233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 3333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov /// emitProlog/emitEpilog - These methods insert prolog and epilog code into 3433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov /// the function. 3533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov void emitPrologue(MachineFunction &MF) const; 3633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 37d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov 38cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov bool spillCalleeSavedRegisters(MachineBasicBlock &MBB, 39cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov MachineBasicBlock::iterator MI, 40cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const std::vector<CalleeSavedInfo> &CSI, 41cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const TargetRegisterInfo *TRI) const; 42cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB, 43cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov MachineBasicBlock::iterator MI, 44cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const std::vector<CalleeSavedInfo> &CSI, 45cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const TargetRegisterInfo *TRI) const; 46cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov 47d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov bool hasReservedCallFrame(const MachineFunction &MF) const; 4833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov}; 4933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 5033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov} // End llvm namespace 5133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 5233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#endif 53