From 7cffcaaa48656fa6f90b041cc5f056304addef32 Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Thu, 8 Nov 2001 04:52:27 +0000 Subject: [PATCH] Machine-independent interface to target's stack frame layout parameters. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1190 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetFrameInfo.h | 76 +++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 include/llvm/Target/TargetFrameInfo.h diff --git a/include/llvm/Target/TargetFrameInfo.h b/include/llvm/Target/TargetFrameInfo.h new file mode 100644 index 00000000000..4f19cc95c3c --- /dev/null +++ b/include/llvm/Target/TargetFrameInfo.h @@ -0,0 +1,76 @@ +// $Id$ -*-c++-*- +//*************************************************************************** +// File: +// MachineFrameInfo.h +// +// Purpose: +// Interface to layout of stack frame on target machine. +// +// History: +// 11/6/01 - Vikram Adve - Created +//**************************************************************************/ + +#ifndef LLVM_CODEGEN_FRAMEINFO_H +#define LLVM_CODEGEN_FRAMEINFO_H + +#include "llvm/Support/NonCopyable.h" +#include + + +//************************* Forward Declarations **************************/ + +class MachineCodeForMethod; + + +//*************************** External Classes ****************************/ + + +class MachineFrameInfo : public NonCopyableV { +public: + const TargetMachine& target; + +public: + /*ctor*/ MachineFrameInfo(const TargetMachine& tgt) : target(tgt) {} + + // + // These methods provide constant parameters of the frame layout. + // + virtual int getStackFrameSizeAlignment () const = 0; + virtual int getMinStackFrameSize () const = 0; + virtual int getNumFixedOutgoingArgs () const = 0; + virtual int getSizeOfEachArgOnStack () const = 0; + virtual bool argsOnStackHaveFixedSize () const = 0; + + // + // These methods compute offsets using the frame contents for a + // particular method. The frame contents are obtained from the + // MachineCodeInfoForMethod object for the given method. + // + virtual int getFirstIncomingArgOffset (MachineCodeForMethod& mcInfo, + bool& pos) const=0; + virtual int getFirstOutgoingArgOffset (MachineCodeForMethod& mcInfo, + bool& pos) const=0; + virtual int getFirstOptionalOutgoingArgOffset (MachineCodeForMethod&, + bool& pos) const=0; + virtual int getFirstAutomaticVarOffset (MachineCodeForMethod& mcInfo, + bool& pos) const=0; + virtual int getRegSpillAreaOffset (MachineCodeForMethod& mcInfo, + bool& pos) const=0; + virtual int getTmpAreaOffset (MachineCodeForMethod& mcInfo, + bool& pos) const=0; + virtual int getDynamicAreaOffset (MachineCodeForMethod& mcInfo, + bool& pos) const=0; + + // + // These methods specify the base register used for each stack area + // (generally FP or SP) + // + virtual int getIncomingArgBaseRegNum() const=0; + virtual int getOutgoingArgBaseRegNum() const=0; + virtual int getOptionalOutgoingArgBaseRegNum() const=0; + virtual int getAutomaticVarBaseRegNum() const=0; + virtual int getRegSpillAreaBaseRegNum() const=0; + virtual int getDynamicAreaBaseRegNum() const=0; +}; + +#endif -- 2.34.1