xref: /freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVMachineFunctionInfo.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //=- RISCVMachineFunctionInfo.h - RISCV machine function info -----*- C++ -*-=//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric //
9*0b57cec5SDimitry Andric // This file declares RISCV-specific per-machine-function information.
10*0b57cec5SDimitry Andric //
11*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
12*0b57cec5SDimitry Andric 
13*0b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_RISCV_RISCVMACHINEFUNCTIONINFO_H
14*0b57cec5SDimitry Andric #define LLVM_LIB_TARGET_RISCV_RISCVMACHINEFUNCTIONINFO_H
15*0b57cec5SDimitry Andric 
16*0b57cec5SDimitry Andric #include "llvm/CodeGen/MachineFrameInfo.h"
17*0b57cec5SDimitry Andric #include "llvm/CodeGen/MachineFunction.h"
18*0b57cec5SDimitry Andric 
19*0b57cec5SDimitry Andric namespace llvm {
20*0b57cec5SDimitry Andric 
21*0b57cec5SDimitry Andric /// RISCVMachineFunctionInfo - This class is derived from MachineFunctionInfo
22*0b57cec5SDimitry Andric /// and contains private RISCV-specific information for each MachineFunction.
23*0b57cec5SDimitry Andric class RISCVMachineFunctionInfo : public MachineFunctionInfo {
24*0b57cec5SDimitry Andric private:
25*0b57cec5SDimitry Andric   MachineFunction &MF;
26*0b57cec5SDimitry Andric   /// FrameIndex for start of varargs area
27*0b57cec5SDimitry Andric   int VarArgsFrameIndex = 0;
28*0b57cec5SDimitry Andric   /// Size of the save area used for varargs
29*0b57cec5SDimitry Andric   int VarArgsSaveSize = 0;
30*0b57cec5SDimitry Andric   /// FrameIndex used for transferring values between 64-bit FPRs and a pair
31*0b57cec5SDimitry Andric   /// of 32-bit GPRs via the stack.
32*0b57cec5SDimitry Andric   int MoveF64FrameIndex = -1;
33*0b57cec5SDimitry Andric 
34*0b57cec5SDimitry Andric public:
35*0b57cec5SDimitry Andric   RISCVMachineFunctionInfo(MachineFunction &MF) : MF(MF) {}
36*0b57cec5SDimitry Andric 
37*0b57cec5SDimitry Andric   int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
38*0b57cec5SDimitry Andric   void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
39*0b57cec5SDimitry Andric 
40*0b57cec5SDimitry Andric   unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; }
41*0b57cec5SDimitry Andric   void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; }
42*0b57cec5SDimitry Andric 
43*0b57cec5SDimitry Andric   int getMoveF64FrameIndex() {
44*0b57cec5SDimitry Andric     if (MoveF64FrameIndex == -1)
45*0b57cec5SDimitry Andric       MoveF64FrameIndex = MF.getFrameInfo().CreateStackObject(8, 8, false);
46*0b57cec5SDimitry Andric     return MoveF64FrameIndex;
47*0b57cec5SDimitry Andric   }
48*0b57cec5SDimitry Andric };
49*0b57cec5SDimitry Andric 
50*0b57cec5SDimitry Andric } // end namespace llvm
51*0b57cec5SDimitry Andric 
52*0b57cec5SDimitry Andric #endif // LLVM_LIB_TARGET_RISCV_RISCVMACHINEFUNCTIONINFO_H
53