MipsMachineFunction.h revision 173192fa71a45ee87479c0eb7753bf116bce36b8
1//===-- MipsMachineFunctionInfo.h - Private data used for Mips ----*- 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 the Mips specific subclass of MachineFunctionInfo. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef MIPS_MACHINE_FUNCTION_INFO_H 15#define MIPS_MACHINE_FUNCTION_INFO_H 16 17#include "MipsSubtarget.h" 18#include "llvm/CodeGen/MachineFunction.h" 19#include "llvm/CodeGen/MachineFrameInfo.h" 20#include "llvm/Target/TargetFrameLowering.h" 21#include "llvm/Target/TargetMachine.h" 22#include <utility> 23 24namespace llvm { 25 26/// MipsFunctionInfo - This class is derived from MachineFunction private 27/// Mips target-specific information for each MachineFunction. 28class MipsFunctionInfo : public MachineFunctionInfo { 29 virtual void anchor(); 30 31 MachineFunction& MF; 32 /// SRetReturnReg - Some subtargets require that sret lowering includes 33 /// returning the value of the returned struct in a register. This field 34 /// holds the virtual register into which the sret argument is passed. 35 unsigned SRetReturnReg; 36 37 /// GlobalBaseReg - keeps track of the virtual register initialized for 38 /// use as the global base register. This is used for PIC in some PIC 39 /// relocation models. 40 unsigned GlobalBaseReg; 41 42 /// Mips16SPAliasReg - keeps track of the virtual register initialized for 43 /// use as an alias for SP for use in load/store of halfword/byte from/to 44 /// the stack 45 unsigned Mips16SPAliasReg; 46 47 /// VarArgsFrameIndex - FrameIndex for start of varargs area. 48 int VarArgsFrameIndex; 49 50 // Formal argument information obtained during call to LowerFormalArguments. 51 unsigned NextStackOffset; 52 bool HasByvalArg; 53 54public: 55 MipsFunctionInfo(MachineFunction& MF) 56 : MF(MF), SRetReturnReg(0), GlobalBaseReg(0), Mips16SPAliasReg(0), 57 VarArgsFrameIndex(0) 58 {} 59 60 unsigned getSRetReturnReg() const { return SRetReturnReg; } 61 void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; } 62 63 bool globalBaseRegSet() const; 64 unsigned getGlobalBaseReg(); 65 66 bool mips16SPAliasRegSet() const; 67 unsigned getMips16SPAliasReg(); 68 69 int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } 70 void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } 71 72 unsigned nextStackOffset() const { return NextStackOffset; } 73 bool hasByvalArg() const { return HasByvalArg; } 74 void setFormalArgInfo(unsigned Offset, bool HasByval) { 75 NextStackOffset = Offset; 76 HasByvalArg = HasByval; 77 } 78}; 79 80} // end of namespace llvm 81 82#endif // MIPS_MACHINE_FUNCTION_INFO_H 83