X86MachineFunctionInfo.h revision 193574
1//====- X86MachineFuctionInfo.h - X86 machine function info -----*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file declares X86-specific per-machine-function information. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef X86MACHINEFUNCTIONINFO_H 15#define X86MACHINEFUNCTIONINFO_H 16 17#include "llvm/CodeGen/MachineFunction.h" 18 19namespace llvm { 20 21enum NameDecorationStyle { 22 None, 23 StdCall, 24 FastCall 25}; 26 27/// X86MachineFunctionInfo - This class is derived from MachineFunction and 28/// contains private X86 target-specific information for each MachineFunction. 29class X86MachineFunctionInfo : public MachineFunctionInfo { 30 /// ForceFramePointer - True if the function is required to use of frame 31 /// pointer for reasons other than it containing dynamic allocation or 32 /// that FP eliminatation is turned off. For example, Cygwin main function 33 /// contains stack pointer re-alignment code which requires FP. 34 bool ForceFramePointer; 35 36 /// CalleeSavedFrameSize - Size of the callee-saved register portion of the 37 /// stack frame in bytes. 38 unsigned CalleeSavedFrameSize; 39 40 /// BytesToPopOnReturn - Number of bytes function pops on return. 41 /// Used on windows platform for stdcall & fastcall name decoration 42 unsigned BytesToPopOnReturn; 43 44 /// DecorationStyle - If the function requires additional name decoration, 45 /// DecorationStyle holds the right way to do so. 46 NameDecorationStyle DecorationStyle; 47 48 /// ReturnAddrIndex - FrameIndex for return slot. 49 int ReturnAddrIndex; 50 51 /// TailCallReturnAddrDelta - Delta the ReturnAddr stack slot is moved 52 /// Used for creating an area before the register spill area on the stack 53 /// the returnaddr can be savely move to this area 54 int TailCallReturnAddrDelta; 55 56 /// SRetReturnReg - Some subtargets require that sret lowering includes 57 /// returning the value of the returned struct in a register. This field 58 /// holds the virtual register into which the sret argument is passed. 59 unsigned SRetReturnReg; 60 61 /// GlobalBaseReg - keeps track of the virtual register initialized for 62 /// use as the global base register. This is used for PIC in some PIC 63 /// relocation models. 64 unsigned GlobalBaseReg; 65 66public: 67 X86MachineFunctionInfo() : ForceFramePointer(false), 68 CalleeSavedFrameSize(0), 69 BytesToPopOnReturn(0), 70 DecorationStyle(None), 71 ReturnAddrIndex(0), 72 TailCallReturnAddrDelta(0), 73 SRetReturnReg(0), 74 GlobalBaseReg(0) {} 75 76 explicit X86MachineFunctionInfo(MachineFunction &MF) 77 : ForceFramePointer(false), 78 CalleeSavedFrameSize(0), 79 BytesToPopOnReturn(0), 80 DecorationStyle(None), 81 ReturnAddrIndex(0), 82 TailCallReturnAddrDelta(0), 83 SRetReturnReg(0), 84 GlobalBaseReg(0) {} 85 86 bool getForceFramePointer() const { return ForceFramePointer;} 87 void setForceFramePointer(bool forceFP) { ForceFramePointer = forceFP; } 88 89 unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; } 90 void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; } 91 92 unsigned getBytesToPopOnReturn() const { return BytesToPopOnReturn; } 93 void setBytesToPopOnReturn (unsigned bytes) { BytesToPopOnReturn = bytes;} 94 95 NameDecorationStyle getDecorationStyle() const { return DecorationStyle; } 96 void setDecorationStyle(NameDecorationStyle style) { DecorationStyle = style;} 97 98 int getRAIndex() const { return ReturnAddrIndex; } 99 void setRAIndex(int Index) { ReturnAddrIndex = Index; } 100 101 int getTCReturnAddrDelta() const { return TailCallReturnAddrDelta; } 102 void setTCReturnAddrDelta(int delta) {TailCallReturnAddrDelta = delta;} 103 104 unsigned getSRetReturnReg() const { return SRetReturnReg; } 105 void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; } 106 107 unsigned getGlobalBaseReg() const { return GlobalBaseReg; } 108 void setGlobalBaseReg(unsigned Reg) { GlobalBaseReg = Reg; } 109}; 110 111} // End llvm namespace 112 113#endif 114