xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/LoongArch/LoongArchMachineFunctionInfo.h (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
1*81ad6265SDimitry Andric //=- LoongArchMachineFunctionInfo.h - LoongArch machine function info -----===//
2*81ad6265SDimitry Andric //
3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*81ad6265SDimitry Andric //
7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
8*81ad6265SDimitry Andric //
9*81ad6265SDimitry Andric // This file declares LoongArch-specific per-machine-function information.
10*81ad6265SDimitry Andric //
11*81ad6265SDimitry Andric //===----------------------------------------------------------------------===//
12*81ad6265SDimitry Andric 
13*81ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H
14*81ad6265SDimitry Andric #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H
15*81ad6265SDimitry Andric 
16*81ad6265SDimitry Andric #include "LoongArchSubtarget.h"
17*81ad6265SDimitry Andric #include "llvm/CodeGen/MachineFrameInfo.h"
18*81ad6265SDimitry Andric #include "llvm/CodeGen/MachineFunction.h"
19*81ad6265SDimitry Andric 
20*81ad6265SDimitry Andric namespace llvm {
21*81ad6265SDimitry Andric 
22*81ad6265SDimitry Andric /// LoongArchMachineFunctionInfo - This class is derived from
23*81ad6265SDimitry Andric /// MachineFunctionInfo and contains private LoongArch-specific information for
24*81ad6265SDimitry Andric /// each MachineFunction.
25*81ad6265SDimitry Andric class LoongArchMachineFunctionInfo : public MachineFunctionInfo {
26*81ad6265SDimitry Andric private:
27*81ad6265SDimitry Andric   /// FrameIndex for start of varargs area
28*81ad6265SDimitry Andric   int VarArgsFrameIndex = 0;
29*81ad6265SDimitry Andric   /// Size of the save area used for varargs
30*81ad6265SDimitry Andric   int VarArgsSaveSize = 0;
31*81ad6265SDimitry Andric 
32*81ad6265SDimitry Andric   /// Size of stack frame to save callee saved registers
33*81ad6265SDimitry Andric   unsigned CalleeSavedStackSize = 0;
34*81ad6265SDimitry Andric 
35*81ad6265SDimitry Andric public:
36*81ad6265SDimitry Andric   LoongArchMachineFunctionInfo(const MachineFunction &MF) {}
37*81ad6265SDimitry Andric 
38*81ad6265SDimitry Andric   MachineFunctionInfo *
39*81ad6265SDimitry Andric   clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF,
40*81ad6265SDimitry Andric         const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
41*81ad6265SDimitry Andric       const override {
42*81ad6265SDimitry Andric     return DestMF.cloneInfo<LoongArchMachineFunctionInfo>(*this);
43*81ad6265SDimitry Andric   }
44*81ad6265SDimitry Andric 
45*81ad6265SDimitry Andric   int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
46*81ad6265SDimitry Andric   void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
47*81ad6265SDimitry Andric 
48*81ad6265SDimitry Andric   unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; }
49*81ad6265SDimitry Andric   void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; }
50*81ad6265SDimitry Andric 
51*81ad6265SDimitry Andric   unsigned getCalleeSavedStackSize() const { return CalleeSavedStackSize; }
52*81ad6265SDimitry Andric   void setCalleeSavedStackSize(unsigned Size) { CalleeSavedStackSize = Size; }
53*81ad6265SDimitry Andric };
54*81ad6265SDimitry Andric 
55*81ad6265SDimitry Andric } // end namespace llvm
56*81ad6265SDimitry Andric 
57*81ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H
58