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. 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitPrologue(MachineFunction &MF) const override; 31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitEpilogue(MachineFunction &MF, 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock &MBB) const override; 33b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 34cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov bool spillCalleeSavedRegisters(MachineBasicBlock &MBB, 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock::iterator MI, 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const std::vector<CalleeSavedInfo> &CSI, 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const TargetRegisterInfo *TRI) const override; 38cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB, 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock::iterator MI, 40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const std::vector<CalleeSavedInfo> &CSI, 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const TargetRegisterInfo *TRI) const override; 42cd775ceff0b25a0b026f643a7990c2924bd310a3Anton Korobeynikov 43700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky void eliminateCallFramePseudoInstr(MachineFunction &MF, 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock &MBB, 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock::iterator I) const override; 46700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool hasFP(const MachineFunction &MF) const override; 48d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov 4994c5ae08750f314bc3cf1bf882b686244a3927d9Anton Korobeynikov void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines RegScavenger *RS = nullptr) const override; 5194c5ae08750f314bc3cf1bf882b686244a3927d9Anton Korobeynikov 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void processFunctionBeforeFrameFinalized(MachineFunction &MF, 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines RegScavenger *RS = nullptr) const override; 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 55b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne //! Stack slot size (4 bytes) 56b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne static int stackSlotSize() { 57b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne return 4; 58b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne } 59b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne }; 60b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne} 61b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne 62b25baef26f03b9909b65dd5f762b38f93000445dRichard Osborne#endif // XCOREFRAMEINFO_H 63