1b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//=- HexagonFrameLowering.h - Define frame lowering for Hexagon --*- C++ -*--=// 2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// The LLVM Compiler Infrastructure 4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source 6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details. 7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifndef HEXAGON_FRAMEINFO_H 11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define HEXAGON_FRAMEINFO_H 12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "Hexagon.h" 14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Target/TargetFrameLowering.h" 15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace llvm { 17b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass HexagonFrameLowering : public TargetFrameLowering { 19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumprivate: 20b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum void determineFrameLayout(MachineFunction &MF) const; 21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 23cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines explicit HexagonFrameLowering() : TargetFrameLowering(StackGrowsDown, 8, 0) {} 24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum /// emitProlog/emitEpilog - These methods insert prolog and epilog code into 26b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum /// the function. 27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitPrologue(MachineFunction &MF) const override; 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override; 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool spillCalleeSavedRegisters(MachineBasicBlock &MBB, 30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock::iterator MI, 31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const std::vector<CalleeSavedInfo> &CSI, 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const TargetRegisterInfo *TRI) const override; 33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines eliminateCallFramePseudoInstr(MachineFunction &MF, 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock &MBB, 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MachineBasicBlock::iterator I) const override; 38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 39dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool 40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum restoreCalleeSavedRegisters(MachineBasicBlock &MBB, 41b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MachineBasicBlock::iterator MI, 42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const std::vector<CalleeSavedInfo> &CSI, 43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const TargetRegisterInfo *TRI) const override; 44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines int getFrameIndexOffset(const MachineFunction &MF, int FI) const override; 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool hasFP(const MachineFunction &MF) const override; 46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool hasTailCall(MachineBasicBlock &MBB) const; 47b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 49b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} // End llvm namespace 50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 51b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#endif 52