XCoreFrameLowering.h revision 700ed80d3da5e98e05ceb90e9bfb66058581a6db
131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- XCoreFrameLowering.h - Frame info for XCore Target ------*- C++ -*-===// 2b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 3b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// The LLVM Compiler Infrastructure 4b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 5b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// This file is distributed under the University of Illinois Open Source 6b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// License. See LICENSE.TXT for details. 7b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 8b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===----------------------------------------------------------------------===// 9b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 10b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// This file contains XCore frame information that doesn't fit anywhere else 11b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// cleanly... 12b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne// 13b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne//===----------------------------------------------------------------------===// 14b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 15b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#ifndef XCOREFRAMEINFO_H 16b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#define XCOREFRAMEINFO_H 17b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 1816c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov#include "llvm/Target/TargetFrameLowering.h" 19b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#include "llvm/Target/TargetMachine.h" 20b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 21b25baef26f03b9909b65dd5f762b38f93000445dRichard Osbornenamespace llvm { 2233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov class XCoreSubtarget; 23b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 2416c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov class XCoreFrameLowering: public TargetFrameLowering { 25b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne public: 2616c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov XCoreFrameLowering(const XCoreSubtarget &STI); 2733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov 2833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov /// emitProlog/emitEpilog - These methods insert prolog and epilog code into 2933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov /// the function. 3033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov void emitPrologue(MachineFunction &MF) const; 3133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 32b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 33cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov bool spillCalleeSavedRegisters(MachineBasicBlock &MBB, 34cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov MachineBasicBlock::iterator MI, 35cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const std::vector<CalleeSavedInfo> &CSI, 36cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const TargetRegisterInfo *TRI) const; 37cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB, 38cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov MachineBasicBlock::iterator MI, 39cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const std::vector<CalleeSavedInfo> &CSI, 40cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov const TargetRegisterInfo *TRI) const; 41cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov 42700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky void eliminateCallFramePseudoInstr(MachineFunction &MF, 43700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky MachineBasicBlock &MBB, 44700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky MachineBasicBlock::iterator I) const; 45700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky 46d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov bool hasFP(const MachineFunction &MF) const; 47d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov 4894c5ae08750f314bc3cf1bf882b686244a3927d9Anton Korobeynikov void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, 4994c5ae08750f314bc3cf1bf882b686244a3927d9Anton Korobeynikov RegScavenger *RS = NULL) const; 5094c5ae08750f314bc3cf1bf882b686244a3927d9Anton Korobeynikov 51b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne //! Stack slot size (4 bytes) 52b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne static int stackSlotSize() { 53b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne return 4; 54b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne } 55b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne }; 56b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne} 57b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 58b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#endif // XCOREFRAMEINFO_H 59