1239310Sdim//===-- MipsSEFrameLowering.h - Mips32/64 frame lowering --------*- C++ -*-===//
2239310Sdim//
3239310Sdim//                     The LLVM Compiler Infrastructure
4239310Sdim//
5239310Sdim// This file is distributed under the University of Illinois Open Source
6239310Sdim// License. See LICENSE.TXT for details.
7239310Sdim//
8239310Sdim//===----------------------------------------------------------------------===//
9239310Sdim//
10239310Sdim//
11239310Sdim//
12239310Sdim//===----------------------------------------------------------------------===//
13239310Sdim
14239310Sdim#ifndef MIPSSE_FRAMEINFO_H
15239310Sdim#define MIPSSE_FRAMEINFO_H
16239310Sdim
17239310Sdim#include "MipsFrameLowering.h"
18239310Sdim
19239310Sdimnamespace llvm {
20239310Sdim
21239310Sdimclass MipsSEFrameLowering : public MipsFrameLowering {
22239310Sdimpublic:
23239310Sdim  explicit MipsSEFrameLowering(const MipsSubtarget &STI)
24263508Sdim    : MipsFrameLowering(STI, STI.stackAlignment()) {}
25239310Sdim
26239310Sdim  /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
27239310Sdim  /// the function.
28239310Sdim  void emitPrologue(MachineFunction &MF) const;
29239310Sdim  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
30239310Sdim
31249423Sdim  void eliminateCallFramePseudoInstr(MachineFunction &MF,
32249423Sdim                                     MachineBasicBlock &MBB,
33249423Sdim                                     MachineBasicBlock::iterator I) const;
34249423Sdim
35239310Sdim  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
36239310Sdim                                 MachineBasicBlock::iterator MI,
37239310Sdim                                 const std::vector<CalleeSavedInfo> &CSI,
38239310Sdim                                 const TargetRegisterInfo *TRI) const;
39239310Sdim
40239310Sdim  bool hasReservedCallFrame(const MachineFunction &MF) const;
41239310Sdim
42239310Sdim  void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
43239310Sdim                                            RegScavenger *RS) const;
44249423Sdim  unsigned ehDataReg(unsigned I) const;
45239310Sdim};
46239310Sdim
47239310Sdim} // End llvm namespace
48239310Sdim
49239310Sdim#endif
50