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