1c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard//===--------------------- AMDGPUFrameLowering.h ----------------*- C++ -*-===// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief Interface to describe a layout of a stack frame on a AMDIL target 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// machine. 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#ifndef AMDILFRAME_LOWERING_H 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define AMDILFRAME_LOWERING_H 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/CodeGen/MachineFunction.h" 19f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/Target/TargetFrameLowering.h" 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief Information about the stack frame layout on the AMDGPU targets. 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// It holds the direction of the stack growth, the known stack alignment on 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// entry to each function, and the offset to the locals area. 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// See TargetFrameInfo for more comments. 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass AMDGPUFrameLowering : public TargetFrameLowering { 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardpublic: 30f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard AMDGPUFrameLowering(StackDirection D, unsigned StackAl, int LAO, 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard unsigned TransAl = 1); 32f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual ~AMDGPUFrameLowering(); 33c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard 34c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard /// \returns The number of 32-bit sub-registers that are used when storing 35c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard /// values to the stack. 36c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard virtual unsigned getStackWidth(const MachineFunction &MF) const; 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual int getFrameIndexOffset(const MachineFunction &MF, int FI) const; 38f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual const SpillSlot *getCalleeSavedSpillSlots(unsigned &NumEntries) const; 39f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual void emitPrologue(MachineFunction &MF) const; 40f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 41f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual bool hasFP(const MachineFunction &MF) const; 42f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 43f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // namespace llvm 44f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif // AMDILFRAME_LOWERING_H 45