xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/LoongArch/LoongArchMachineFunctionInfo.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
181ad6265SDimitry Andric //=- LoongArchMachineFunctionInfo.h - LoongArch machine function info -----===//
281ad6265SDimitry Andric //
381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
681ad6265SDimitry Andric //
781ad6265SDimitry Andric //===----------------------------------------------------------------------===//
881ad6265SDimitry Andric //
981ad6265SDimitry Andric // This file declares LoongArch-specific per-machine-function information.
1081ad6265SDimitry Andric //
1181ad6265SDimitry Andric //===----------------------------------------------------------------------===//
1281ad6265SDimitry Andric 
1381ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H
1481ad6265SDimitry Andric #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H
1581ad6265SDimitry Andric 
1681ad6265SDimitry Andric #include "LoongArchSubtarget.h"
1781ad6265SDimitry Andric #include "llvm/CodeGen/MachineFrameInfo.h"
1881ad6265SDimitry Andric #include "llvm/CodeGen/MachineFunction.h"
1981ad6265SDimitry Andric 
2081ad6265SDimitry Andric namespace llvm {
2181ad6265SDimitry Andric 
2281ad6265SDimitry Andric /// LoongArchMachineFunctionInfo - This class is derived from
2381ad6265SDimitry Andric /// MachineFunctionInfo and contains private LoongArch-specific information for
2481ad6265SDimitry Andric /// each MachineFunction.
2581ad6265SDimitry Andric class LoongArchMachineFunctionInfo : public MachineFunctionInfo {
2681ad6265SDimitry Andric private:
2781ad6265SDimitry Andric   /// FrameIndex for start of varargs area
2881ad6265SDimitry Andric   int VarArgsFrameIndex = 0;
2981ad6265SDimitry Andric   /// Size of the save area used for varargs
3081ad6265SDimitry Andric   int VarArgsSaveSize = 0;
3181ad6265SDimitry Andric 
3281ad6265SDimitry Andric   /// Size of stack frame to save callee saved registers
3381ad6265SDimitry Andric   unsigned CalleeSavedStackSize = 0;
3481ad6265SDimitry Andric 
35*bdd1243dSDimitry Andric   /// FrameIndex of the spill slot when there is no scavenged register in
36*bdd1243dSDimitry Andric   /// insertIndirectBranch.
37*bdd1243dSDimitry Andric   int BranchRelaxationSpillFrameIndex = -1;
38*bdd1243dSDimitry Andric 
3981ad6265SDimitry Andric public:
40*bdd1243dSDimitry Andric   LoongArchMachineFunctionInfo(const Function &F,
41*bdd1243dSDimitry Andric                                const TargetSubtargetInfo *STI) {}
4281ad6265SDimitry Andric 
4381ad6265SDimitry Andric   MachineFunctionInfo *
4481ad6265SDimitry Andric   clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF,
4581ad6265SDimitry Andric         const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
4681ad6265SDimitry Andric       const override {
4781ad6265SDimitry Andric     return DestMF.cloneInfo<LoongArchMachineFunctionInfo>(*this);
4881ad6265SDimitry Andric   }
4981ad6265SDimitry Andric 
5081ad6265SDimitry Andric   int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
5181ad6265SDimitry Andric   void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
5281ad6265SDimitry Andric 
5381ad6265SDimitry Andric   unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; }
5481ad6265SDimitry Andric   void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; }
5581ad6265SDimitry Andric 
5681ad6265SDimitry Andric   unsigned getCalleeSavedStackSize() const { return CalleeSavedStackSize; }
5781ad6265SDimitry Andric   void setCalleeSavedStackSize(unsigned Size) { CalleeSavedStackSize = Size; }
58*bdd1243dSDimitry Andric 
59*bdd1243dSDimitry Andric   int getBranchRelaxationSpillFrameIndex() {
60*bdd1243dSDimitry Andric     return BranchRelaxationSpillFrameIndex;
61*bdd1243dSDimitry Andric   }
62*bdd1243dSDimitry Andric   void setBranchRelaxationSpillFrameIndex(int Index) {
63*bdd1243dSDimitry Andric     BranchRelaxationSpillFrameIndex = Index;
64*bdd1243dSDimitry Andric   }
6581ad6265SDimitry Andric };
6681ad6265SDimitry Andric 
6781ad6265SDimitry Andric } // end namespace llvm
6881ad6265SDimitry Andric 
6981ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H
70