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