Move callee-saved regs spills / reloads to TFI
[oota-llvm.git] / lib / Target / SystemZ / SystemZFrameInfo.h
1 //==- SystemZFrameInfo.h - Define TargetFrameInfo for z/System --*- 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 SYSTEMZ_FRAMEINFO_H
15 #define SYSTEMZ_FRAMEINFO_H
16
17 #include "SystemZ.h"
18 #include "SystemZSubtarget.h"
19 #include "llvm/Target/TargetFrameInfo.h"
20 #include "llvm/ADT/IndexedMap.h"
21
22 namespace llvm {
23   class SystemZSubtarget;
24
25 class SystemZFrameInfo : public TargetFrameInfo {
26   IndexedMap<unsigned> RegSpillOffsets;
27 protected:
28   const SystemZSubtarget &STI;
29
30 public:
31   explicit SystemZFrameInfo(const SystemZSubtarget &sti);
32
33   /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
34   /// the function.
35   void emitPrologue(MachineFunction &MF) const;
36   void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
37
38   bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
39                                  MachineBasicBlock::iterator MI,
40                                  const std::vector<CalleeSavedInfo> &CSI,
41                                  const TargetRegisterInfo *TRI) const;
42   bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
43                                    MachineBasicBlock::iterator MI,
44                                    const std::vector<CalleeSavedInfo> &CSI,
45                                    const TargetRegisterInfo *TRI) const;
46
47   bool hasReservedCallFrame(const MachineFunction &MF) const { return true; }
48   bool hasFP(const MachineFunction &MF) const;
49   int getFrameIndexOffset(const MachineFunction &MF, int FI) const;
50 };
51
52 } // End llvm namespace
53
54 #endif