1235633Sdim//===-- XCoreFrameLowering.h - Frame info for XCore Target ------*- C++ -*-===//
2218885Sdim//
3218885Sdim//                     The LLVM Compiler Infrastructure
4218885Sdim//
5218885Sdim// This file is distributed under the University of Illinois Open Source
6218885Sdim// License. See LICENSE.TXT for details.
7218885Sdim//
8218885Sdim//===----------------------------------------------------------------------===//
9218885Sdim//
10218885Sdim// This file contains XCore frame information that doesn't fit anywhere else
11218885Sdim// cleanly...
12218885Sdim//
13218885Sdim//===----------------------------------------------------------------------===//
14218885Sdim
15218885Sdim#ifndef XCOREFRAMEINFO_H
16218885Sdim#define XCOREFRAMEINFO_H
17218885Sdim
18218885Sdim#include "llvm/Target/TargetFrameLowering.h"
19218885Sdim#include "llvm/Target/TargetMachine.h"
20218885Sdim
21218885Sdimnamespace llvm {
22218885Sdim  class XCoreSubtarget;
23218885Sdim
24218885Sdim  class XCoreFrameLowering: public TargetFrameLowering {
25218885Sdim  public:
26218885Sdim    XCoreFrameLowering(const XCoreSubtarget &STI);
27218885Sdim
28218885Sdim    /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
29218885Sdim    /// the function.
30218885Sdim    void emitPrologue(MachineFunction &MF) const;
31218885Sdim    void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
32218885Sdim
33218885Sdim    bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
34218885Sdim                                   MachineBasicBlock::iterator MI,
35218885Sdim                                   const std::vector<CalleeSavedInfo> &CSI,
36218885Sdim                                   const TargetRegisterInfo *TRI) const;
37218885Sdim    bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
38218885Sdim                                     MachineBasicBlock::iterator MI,
39218885Sdim                                     const std::vector<CalleeSavedInfo> &CSI,
40218885Sdim                                     const TargetRegisterInfo *TRI) const;
41218885Sdim
42252723Sdim    void eliminateCallFramePseudoInstr(MachineFunction &MF,
43252723Sdim                                       MachineBasicBlock &MBB,
44252723Sdim                                       MachineBasicBlock::iterator I) const;
45252723Sdim
46218885Sdim    bool hasFP(const MachineFunction &MF) const;
47218885Sdim
48218885Sdim    void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
49218885Sdim                                              RegScavenger *RS = NULL) const;
50218885Sdim
51218885Sdim    //! Stack slot size (4 bytes)
52218885Sdim    static int stackSlotSize() {
53218885Sdim      return 4;
54218885Sdim    }
55218885Sdim  };
56218885Sdim}
57218885Sdim
58218885Sdim#endif // XCOREFRAMEINFO_H
59