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