1cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka//===-- Mips16FrameLowering.h - Mips16 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
1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_TARGET_MIPS_MIPS16FRAMELOWERING_H
1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_TARGET_MIPS_MIPS16FRAMELOWERING_H
16cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
17cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka#include "MipsFrameLowering.h"
18cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
19cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanakanamespace llvm {
20cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanakaclass Mips16FrameLowering : public MipsFrameLowering {
21cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanakapublic:
22c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  explicit Mips16FrameLowering(const MipsSubtarget &STI);
23cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
24cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
25cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  /// the function.
266948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
28cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
29cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
30cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka                                 MachineBasicBlock::iterator MI,
31cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka                                 const std::vector<CalleeSavedInfo> &CSI,
32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                 const TargetRegisterInfo *TRI) const override;
33cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
340fdf3b029b35f495d7261fe78737e434edc84758Akira Hatanaka  bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  MachineBasicBlock::iterator MI,
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  const std::vector<CalleeSavedInfo> &CSI,
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                  const TargetRegisterInfo *TRI) const override;
380fdf3b029b35f495d7261fe78737e434edc84758Akira Hatanaka
39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool hasReservedCallFrame(const MachineFunction &MF) const override;
40cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
41cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar  void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
42cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar                            RegScavenger *RS) const override;
43cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka};
44cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
45cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka} // End llvm namespace
46cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka
47cdb3ba71ce550c5a41c84c3678225a39d6f0a414Akira Hatanaka#endif
48