[SystemZ] Remove "virtual" from override methods
[oota-llvm.git] / lib / Target / SystemZ / SystemZFrameLowering.h
1 //===-- SystemZFrameLowering.h - Frame lowering for SystemZ -----*- 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 #ifndef SYSTEMZFRAMELOWERING_H
11 #define SYSTEMZFRAMELOWERING_H
12
13 #include "SystemZSubtarget.h"
14 #include "llvm/ADT/IndexedMap.h"
15 #include "llvm/Target/TargetFrameLowering.h"
16
17 namespace llvm {
18 class SystemZTargetMachine;
19 class SystemZSubtarget;
20
21 class SystemZFrameLowering : public TargetFrameLowering {
22   IndexedMap<unsigned> RegSpillOffsets;
23
24 protected:
25   const SystemZTargetMachine &TM;
26   const SystemZSubtarget &STI;
27
28 public:
29   SystemZFrameLowering(const SystemZTargetMachine &tm,
30                        const SystemZSubtarget &sti);
31
32   // Override TargetFrameLowering.
33   bool isFPCloseToIncomingSP() const override { return false; }
34   const SpillSlot *getCalleeSavedSpillSlots(unsigned &NumEntries) const
35     override;
36   void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
37                                             RegScavenger *RS) const override;
38   bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
39                                  MachineBasicBlock::iterator MBBI,
40                                  const std::vector<CalleeSavedInfo> &CSI,
41                                  const TargetRegisterInfo *TRI) const override;
42   bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
43                                    MachineBasicBlock::iterator MBBII,
44                                    const std::vector<CalleeSavedInfo> &CSI,
45                                    const TargetRegisterInfo *TRI) const
46     override;
47   void processFunctionBeforeFrameFinalized(MachineFunction &MF,
48                                            RegScavenger *RS) const override;
49   void emitPrologue(MachineFunction &MF) const override;
50   void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
51   bool hasFP(const MachineFunction &MF) const override;
52   int getFrameIndexOffset(const MachineFunction &MF, int FI) const override;
53   bool hasReservedCallFrame(const MachineFunction &MF) const override;
54   void eliminateCallFramePseudoInstr(MachineFunction &MF,
55                                      MachineBasicBlock &MBB,
56                                      MachineBasicBlock::iterator MI) const
57     override;
58
59   // Return the number of bytes in the callee-allocated part of the frame.
60   uint64_t getAllocatedStackSize(const MachineFunction &MF) const;
61
62   // Return the byte offset from the incoming stack pointer of Reg's
63   // ABI-defined save slot.  Return 0 if no slot is defined for Reg.
64   unsigned getRegSpillOffset(unsigned Reg) const {
65     return RegSpillOffsets[Reg];
66   }
67 };
68 } // end namespace llvm
69
70 #endif