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