AVRFrameLowering.h revision de2d8694e25a814696358e95141f4b1aa4d8847e
1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===-- AVRFrameLowering.h - Define frame lowering for AVR ------*- C++ -*-===//
2de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//
3de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//
5de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
6de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// License. See LICENSE.TXT for details.
7de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//
8de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===//
9de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#ifndef LLVM_AVR_FRAME_LOWERING_H
11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#define LLVM_AVR_FRAME_LOWERING_H
12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Target/TargetFrameLowering.h"
14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarnamespace llvm {
16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar/// Utilities for creating function call frames.
18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarclass AVRFrameLowering : public TargetFrameLowering {
19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic:
20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  explicit AVRFrameLowering();
21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarpublic:
23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  bool hasFP(const MachineFunction &MF) const override;
26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                                 MachineBasicBlock::iterator MI,
28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                                 const std::vector<CalleeSavedInfo> &CSI,
29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                                 const TargetRegisterInfo *TRI) const override;
30de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  bool
31de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
32de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                              MachineBasicBlock::iterator MI,
33de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                              const std::vector<CalleeSavedInfo> &CSI,
34de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                              const TargetRegisterInfo *TRI) const override;
35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  bool hasReservedCallFrame(const MachineFunction &MF) const override;
36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  bool canSimplifyCallFramePseudos(const MachineFunction &MF) const override;
37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                            RegScavenger *RS = nullptr) const override;
39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  MachineBasicBlock::iterator
40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar  eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar                                MachineBasicBlock::iterator MI) const override;
42de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar};
43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} // end namespace llvm
45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
46de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#endif // LLVM_AVR_FRAME_LOWERING_H
47