1cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//===-- MipsSEFrameLowering.h - Mips32/64 frame lowering --------*- C++ -*-===//
2cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//
3cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//                     The LLVM Compiler Infrastructure
4cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//
5cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka// This file is distributed under the University of Illinois Open Source
6cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka// License. See LICENSE.TXT for details.
7cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//
8cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//===----------------------------------------------------------------------===//
9cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//
10cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//
11cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//
12cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//===----------------------------------------------------------------------===//
13cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
14cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka#ifndef MIPSSE_FRAMEINFO_H
15cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka#define MIPSSE_FRAMEINFO_H
16cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
17cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka#include "MipsFrameLowering.h"
18cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
19cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanakanamespace llvm {
20cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
21cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanakaclass MipsSEFrameLowering : public MipsFrameLowering {
22cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanakapublic:
23cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  explicit MipsSEFrameLowering(const MipsSubtarget &STI);
24cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
25cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
26cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  /// the function.
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void emitPrologue(MachineFunction &MF) const override;
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
29cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
30700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky  void eliminateCallFramePseudoInstr(MachineFunction &MF,
31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  MachineBasicBlock &MBB,
32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  MachineBasicBlock::iterator I) const override;
33700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky
34cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
35cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka                                 MachineBasicBlock::iterator MI,
36cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka                                 const std::vector<CalleeSavedInfo> &CSI,
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 const TargetRegisterInfo *TRI) const override;
38cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool hasReservedCallFrame(const MachineFunction &MF) const override;
40cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
41cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                            RegScavenger *RS) const override;
43544cc21cf4807116251a699d8b1d3d4bace21597Akira Hatanaka  unsigned ehDataReg(unsigned I) const;
44cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka};
45cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
46cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka} // End llvm namespace
47cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
48cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka#endif
49