X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FTarget%2FTargetFrameInfo.h;h=3e26b9dd01bea6112c778d529388b30fdd4a1263;hb=ac57e6e498abccb117e0d61c2fa0f733845e50cb;hp=2b968fab1a12ec45d54891cdda1f0e0bc3334c71;hpb=d0fde30ce850b78371fd1386338350591f9ff494;p=oota-llvm.git diff --git a/include/llvm/Target/TargetFrameInfo.h b/include/llvm/Target/TargetFrameInfo.h index 2b968fab1a1..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,11 +14,19 @@ #ifndef LLVM_TARGET_TARGETFRAMEINFO_H #define LLVM_TARGET_TARGETFRAMEINFO_H -namespace llvm { +#include -class MachineFunction; +namespace llvm { -struct TargetFrameInfo { +/// 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 +/// the offset to the locals area. +/// +/// 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. +class TargetFrameInfo { +public: enum StackDirection { StackGrowsUp, // Adding to the stack increases the stack address StackGrowsDown // Adding to the stack decreases the stack address @@ -31,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. @@ -49,56 +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 { abort(); } - virtual int getMinStackFrameSize () const { abort(); } - virtual int getNumFixedOutgoingArgs () const { abort(); } - virtual int getSizeOfEachArgOnStack () const { abort(); } - virtual bool argsOnStackHaveFixedSize () const { abort(); } - - // This method adjusts a stack offset to meet alignment rules of target. - virtual int adjustAlignment(int unalignedOffset, bool growUp, - unsigned align) const { abort(); } - - // 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{abort();} - virtual int getOutgoingArgOffset (MachineFunction& mcInfo, - unsigned argNum)const{abort();} - - virtual int getFirstIncomingArgOffset (MachineFunction& mcInfo, - bool& growUp) const { abort();} - virtual int getFirstOutgoingArgOffset (MachineFunction& mcInfo, - bool& growUp) const {abort();} - virtual int getFirstOptionalOutgoingArgOffset (MachineFunction&, - bool& growUp) const {abort();} - virtual int getFirstAutomaticVarOffset (MachineFunction& mcInfo, - bool& growUp) const {abort();} - virtual int getRegSpillAreaOffset (MachineFunction& mcInfo, - bool& growUp) const {abort();} - virtual int getTmpAreaOffset (MachineFunction& mcInfo, - bool& growUp) const {abort();} - virtual int getDynamicAreaOffset (MachineFunction& mcInfo, - bool& growUp) const {abort();} - - // - // These methods specify the base register used for each stack area - // (generally FP or SP) - // - virtual int getIncomingArgBaseRegNum() const { abort(); } - virtual int getOutgoingArgBaseRegNum() const { abort(); } - virtual int getOptionalOutgoingArgBaseRegNum() const { abort(); } - virtual int getAutomaticVarBaseRegNum() const { abort(); } - virtual int getRegSpillAreaBaseRegNum() const { abort(); } - virtual int getDynamicAreaBaseRegNum() const { abort(); } + /// 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