1303231Sdim//===- LanaiMachineFuctionInfo.h - Lanai machine func info -------*- C++ -*-==// 2303231Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6303231Sdim// 7303231Sdim//===----------------------------------------------------------------------===// 8303231Sdim// 9303231Sdim// This file declares Lanai-specific per-machine-function information. 10303231Sdim// 11303231Sdim//===----------------------------------------------------------------------===// 12303231Sdim 13303231Sdim#ifndef LLVM_LIB_TARGET_LANAI_LANAIMACHINEFUNCTIONINFO_H 14303231Sdim#define LLVM_LIB_TARGET_LANAI_LANAIMACHINEFUNCTIONINFO_H 15303231Sdim 16303231Sdim#include "LanaiRegisterInfo.h" 17303231Sdim#include "llvm/CodeGen/MachineFunction.h" 18303231Sdim#include "llvm/CodeGen/MachineRegisterInfo.h" 19303231Sdim 20303231Sdimnamespace llvm { 21303231Sdim 22303231Sdim// LanaiMachineFunctionInfo - This class is derived from MachineFunction and 23303231Sdim// contains private Lanai target-specific information for each MachineFunction. 24303231Sdimclass LanaiMachineFunctionInfo : public MachineFunctionInfo { 25303231Sdim virtual void anchor(); 26303231Sdim 27303231Sdim MachineFunction &MF; 28303231Sdim 29303231Sdim // SRetReturnReg - Lanai ABI require that sret lowering includes 30303231Sdim // returning the value of the returned struct in a register. This field 31303231Sdim // holds the virtual register into which the sret argument is passed. 32303231Sdim unsigned SRetReturnReg; 33303231Sdim 34303231Sdim // GlobalBaseReg - keeps track of the virtual register initialized for 35303231Sdim // use as the global base register. This is used for PIC in some PIC 36303231Sdim // relocation models. 37303231Sdim unsigned GlobalBaseReg; 38303231Sdim 39303231Sdim // VarArgsFrameIndex - FrameIndex for start of varargs area. 40303231Sdim int VarArgsFrameIndex; 41303231Sdim 42303231Sdimpublic: 43303231Sdim explicit LanaiMachineFunctionInfo(MachineFunction &MF) 44303231Sdim : MF(MF), SRetReturnReg(0), GlobalBaseReg(0), VarArgsFrameIndex(0) {} 45303231Sdim 46303231Sdim unsigned getSRetReturnReg() const { return SRetReturnReg; } 47303231Sdim void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; } 48303231Sdim 49303231Sdim unsigned getGlobalBaseReg(); 50303231Sdim 51303231Sdim int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } 52303231Sdim void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } 53303231Sdim}; 54303231Sdim 55303231Sdim} // namespace llvm 56303231Sdim 57303231Sdim#endif // LLVM_LIB_TARGET_LANAI_LANAIMACHINEFUNCTIONINFO_H 58