blob: 433d965605cf80379ed7288a484619500874ecb8 [file] [log] [blame]
Anton Korobeynikov33464912010-11-15 00:06:54 +00001//===-- X86TargetFrameInfo.h - Define TargetFrameInfo for X86 ---*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86_FRAMEINFO_H
15#define X86_FRAMEINFO_H
16
17#include "X86Subtarget.h"
18#include "llvm/Target/TargetFrameInfo.h"
19
20namespace llvm {
21 class MCSymbol;
22
23class X86FrameInfo : public TargetFrameInfo {
24protected:
25 const X86Subtarget &STI;
26
27public:
28 explicit X86FrameInfo(const X86Subtarget &sti)
29 : TargetFrameInfo(StackGrowsDown,
30 sti.getStackAlignment(),
31 (sti.isTargetWin64() ? -40 : (sti.is64Bit() ? -8 : -4))),
32 STI(sti) {
33 }
34
35 void emitCalleeSavedFrameMoves(MachineFunction &MF, MCSymbol *Label,
36 unsigned FramePtr) const;
37
38 /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
39 /// the function.
40 void emitPrologue(MachineFunction &MF) const;
41 void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
Anton Korobeynikovd0c38172010-11-18 21:19:35 +000042
43 bool hasFP(const MachineFunction &MF) const;
44 bool hasReservedCallFrame(const MachineFunction &MF) const;
45
Anton Korobeynikov33464912010-11-15 00:06:54 +000046};
47
48} // End llvm namespace
49
50#endif