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