X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FTarget%2FTargetFrameInfo.h;h=3e26b9dd01bea6112c778d529388b30fdd4a1263;hb=ac57e6e498abccb117e0d61c2fa0f733845e50cb;hp=14a98a0163406ad94819f90b389569a92e15b8e9;hpb=484577a870562ea16886f582650afcf38026b4cb;p=oota-llvm.git diff --git a/include/llvm/Target/TargetFrameInfo.h b/include/llvm/Target/TargetFrameInfo.h index 14a98a01634..3e26b9dd01b 100644 --- a/include/llvm/Target/TargetFrameInfo.h +++ b/include/llvm/Target/TargetFrameInfo.h @@ -1,10 +1,10 @@ //===-- llvm/Target/TargetFrameInfo.h ---------------------------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// // // Interface to describe the layout of a stack frame on the target machine. @@ -14,9 +14,9 @@ #ifndef LLVM_TARGET_TARGETFRAMEINFO_H #define LLVM_TARGET_TARGETFRAMEINFO_H -namespace llvm { +#include -class MachineFunction; +namespace llvm { /// Information about stack frame layout on the target. It holds the direction /// of stack growth, the known stack alignment on entry to each function, and @@ -25,7 +25,8 @@ class MachineFunction; /// The offset to the local area is the offset from the stack pointer on /// function entry to the first location where function data (local variables, /// spill locations) can be stored. -struct TargetFrameInfo { +class TargetFrameInfo { +public: enum StackDirection { StackGrowsUp, // Adding to the stack increases the stack address StackGrowsDown // Adding to the stack decreases the stack address @@ -38,6 +39,8 @@ public: TargetFrameInfo(StackDirection D, unsigned StackAl, int LAO) : StackDir(D), StackAlignment(StackAl), LocalAreaOffset(LAO) {} + virtual ~TargetFrameInfo(); + // These methods return information that describes the abstract stack layout // of the target machine. @@ -56,45 +59,20 @@ public: /// int getOffsetOfLocalArea() const { return LocalAreaOffset; } - //===--------------------------------------------------------------------===// - // These methods provide details of the stack frame used by Sparc, thus they - // are Sparc specific. - //===--------------------------------------------------------------------===// - - virtual int getStackFrameSizeAlignment () const; - virtual int getMinStackFrameSize () const; - virtual int getNumFixedOutgoingArgs () const; - virtual int getSizeOfEachArgOnStack () const; - virtual bool argsOnStackHaveFixedSize () const; - - // This method adjusts a stack offset to meet alignment rules of target. - virtual int adjustAlignment(int unalignedOffset, bool growUp, - unsigned align) const; - - // These methods compute offsets using the frame contents for a particular - // function. The frame contents are obtained from the MachineFunction object - // for the given function. The rest must be implemented by the - // machine-specific subclass. - // - virtual int getIncomingArgOffset (MachineFunction& mcInfo, - unsigned argNum) const; - virtual int getOutgoingArgOffset (MachineFunction& mcInfo, - unsigned argNum) const; - - virtual int getFirstIncomingArgOffset (MachineFunction& mcInfo, - bool& growUp) const; - virtual int getFirstOutgoingArgOffset (MachineFunction& mcInfo, - bool& growUp) const; - virtual int getFirstOptionalOutgoingArgOffset (MachineFunction&, - bool& growUp) const; - virtual int getFirstAutomaticVarOffset (MachineFunction& mcInfo, - bool& growUp) const; - virtual int getRegSpillAreaOffset (MachineFunction& mcInfo, - bool& growUp) const; - virtual int getTmpAreaOffset (MachineFunction& mcInfo, - bool& growUp) const; - virtual int getDynamicAreaOffset (MachineFunction& mcInfo, - bool& growUp) const; + /// getCalleeSavedSpillSlots - This method returns a pointer to an array of + /// pairs, that contains an entry for each callee saved register that must be + /// spilled to a particular stack location if it is spilled. + /// + /// Each entry in this array contains a pair, indicating the + /// fixed offset from the incoming stack pointer that each register should be + /// spilled at. If a register is not listed here, the code generator is + /// allowed to spill it anywhere it chooses. + /// + virtual const std::pair * + getCalleeSavedSpillSlots(unsigned &NumEntries) const { + NumEntries = 0; + return 0; + } }; } // End llvm namespace