Machine-independent interface to target's stack frame layout parameters.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 8 Nov 2001 04:52:27 +0000 (04:52 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 8 Nov 2001 04:52:27 +0000 (04:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1190 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetFrameInfo.h [new file with mode: 0644]

diff --git a/include/llvm/Target/TargetFrameInfo.h b/include/llvm/Target/TargetFrameInfo.h
new file mode 100644 (file)
index 0000000..4f19cc9
--- /dev/null
@@ -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 <vector>
+
+
+//************************* 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