1235633Sdim//===-- MipsFrameLowering.h - Define frame lowering for Mips ----*- 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//
11218885Sdim//
12218885Sdim//===----------------------------------------------------------------------===//
13218885Sdim
14221345Sdim#ifndef MIPS_FRAMEINFO_H
15221345Sdim#define MIPS_FRAMEINFO_H
16218885Sdim
17218885Sdim#include "Mips.h"
18218885Sdim#include "MipsSubtarget.h"
19218885Sdim#include "llvm/Target/TargetFrameLowering.h"
20218885Sdim
21218885Sdimnamespace llvm {
22218885Sdim  class MipsSubtarget;
23218885Sdim
24218885Sdimclass MipsFrameLowering : public TargetFrameLowering {
25218885Sdimprotected:
26218885Sdim  const MipsSubtarget &STI;
27218885Sdim
28218885Sdimpublic:
29252723Sdim  explicit MipsFrameLowering(const MipsSubtarget &sti, unsigned Alignment)
30252723Sdim    : TargetFrameLowering(StackGrowsDown, Alignment, 0, Alignment), STI(sti) {}
31218885Sdim
32245431Sdim  static const MipsFrameLowering *create(MipsTargetMachine &TM,
33245431Sdim                                         const MipsSubtarget &ST);
34218885Sdim
35218885Sdim  bool hasFP(const MachineFunction &MF) const;
36218885Sdim
37245431Sdimprotected:
38245431Sdim  uint64_t estimateStackSize(const MachineFunction &MF) const;
39218885Sdim};
40218885Sdim
41252723Sdim/// Create MipsFrameLowering objects.
42245431Sdimconst MipsFrameLowering *createMips16FrameLowering(const MipsSubtarget &ST);
43245431Sdimconst MipsFrameLowering *createMipsSEFrameLowering(const MipsSubtarget &ST);
44245431Sdim
45218885Sdim} // End llvm namespace
46218885Sdim
47218885Sdim#endif
48