17d523365SDimitry Andric //=== MSP430MachineFunctionInfo.h - MSP430 machine function info -*- C++ -*-==// 2f22ef01cSRoman Divacky // 3f22ef01cSRoman Divacky // The LLVM Compiler Infrastructure 4f22ef01cSRoman Divacky // 5f22ef01cSRoman Divacky // This file is distributed under the University of Illinois Open Source 6f22ef01cSRoman Divacky // License. See LICENSE.TXT for details. 7f22ef01cSRoman Divacky // 8f22ef01cSRoman Divacky //===----------------------------------------------------------------------===// 9f22ef01cSRoman Divacky // 10f22ef01cSRoman Divacky // This file declares MSP430-specific per-machine-function information. 11f22ef01cSRoman Divacky // 12f22ef01cSRoman Divacky //===----------------------------------------------------------------------===// 13f22ef01cSRoman Divacky 1439d628a0SDimitry Andric #ifndef LLVM_LIB_TARGET_MSP430_MSP430MACHINEFUNCTIONINFO_H 1539d628a0SDimitry Andric #define LLVM_LIB_TARGET_MSP430_MSP430MACHINEFUNCTIONINFO_H 16f22ef01cSRoman Divacky 17f22ef01cSRoman Divacky #include "llvm/CodeGen/MachineFunction.h" 18f22ef01cSRoman Divacky 19f22ef01cSRoman Divacky namespace llvm { 20f22ef01cSRoman Divacky 21f22ef01cSRoman Divacky /// MSP430MachineFunctionInfo - This class is derived from MachineFunction and 22f22ef01cSRoman Divacky /// contains private MSP430 target-specific information for each MachineFunction. 23f22ef01cSRoman Divacky class MSP430MachineFunctionInfo : public MachineFunctionInfo { 24dff0c46cSDimitry Andric virtual void anchor(); 25dff0c46cSDimitry Andric 26f22ef01cSRoman Divacky /// CalleeSavedFrameSize - Size of the callee-saved register portion of the 27f22ef01cSRoman Divacky /// stack frame in bytes. 28f22ef01cSRoman Divacky unsigned CalleeSavedFrameSize; 29f22ef01cSRoman Divacky 30f22ef01cSRoman Divacky /// ReturnAddrIndex - FrameIndex for return slot. 31f22ef01cSRoman Divacky int ReturnAddrIndex; 32f22ef01cSRoman Divacky 33139f7f9bSDimitry Andric /// VarArgsFrameIndex - FrameIndex for start of varargs area. 34139f7f9bSDimitry Andric int VarArgsFrameIndex; 35139f7f9bSDimitry Andric 36*7a7e6055SDimitry Andric /// SRetReturnReg - Some subtargets require that sret lowering includes 37*7a7e6055SDimitry Andric /// returning the value of the returned struct in a register. This field 38*7a7e6055SDimitry Andric /// holds the virtual register into which the sret argument is passed. 39*7a7e6055SDimitry Andric unsigned SRetReturnReg; 40*7a7e6055SDimitry Andric 41f22ef01cSRoman Divacky public: MSP430MachineFunctionInfo()42f22ef01cSRoman Divacky MSP430MachineFunctionInfo() : CalleeSavedFrameSize(0) {} 43f22ef01cSRoman Divacky MSP430MachineFunctionInfo(MachineFunction & MF)44f22ef01cSRoman Divacky explicit MSP430MachineFunctionInfo(MachineFunction &MF) 45*7a7e6055SDimitry Andric : CalleeSavedFrameSize(0), ReturnAddrIndex(0), SRetReturnReg(0) {} 46f22ef01cSRoman Divacky getCalleeSavedFrameSize()47f22ef01cSRoman Divacky unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; } setCalleeSavedFrameSize(unsigned bytes)48f22ef01cSRoman Divacky void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; } 49f22ef01cSRoman Divacky getSRetReturnReg()50*7a7e6055SDimitry Andric unsigned getSRetReturnReg() const { return SRetReturnReg; } setSRetReturnReg(unsigned Reg)51*7a7e6055SDimitry Andric void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; } 52*7a7e6055SDimitry Andric getRAIndex()53f22ef01cSRoman Divacky int getRAIndex() const { return ReturnAddrIndex; } setRAIndex(int Index)54f22ef01cSRoman Divacky void setRAIndex(int Index) { ReturnAddrIndex = Index; } 55139f7f9bSDimitry Andric getVarArgsFrameIndex()56139f7f9bSDimitry Andric int getVarArgsFrameIndex() const { return VarArgsFrameIndex;} setVarArgsFrameIndex(int Index)57139f7f9bSDimitry Andric void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } 58f22ef01cSRoman Divacky }; 59f22ef01cSRoman Divacky 60f22ef01cSRoman Divacky } // End llvm namespace 61f22ef01cSRoman Divacky 62f22ef01cSRoman Divacky #endif 63