| //=- LoongArchMachineFunctionInfo.h - LoongArch machine function info -----===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file declares LoongArch-specific per-machine-function information. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H |
| #define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H |
| |
| #include "LoongArchSubtarget.h" |
| #include "llvm/CodeGen/MachineFrameInfo.h" |
| #include "llvm/CodeGen/MachineFunction.h" |
| |
| namespace llvm { |
| |
| /// LoongArchMachineFunctionInfo - This class is derived from |
| /// MachineFunctionInfo and contains private LoongArch-specific information for |
| /// each MachineFunction. |
| class LoongArchMachineFunctionInfo : public MachineFunctionInfo { |
| private: |
| /// FrameIndex for start of varargs area |
| int VarArgsFrameIndex = 0; |
| /// Size of the save area used for varargs |
| int VarArgsSaveSize = 0; |
| |
| /// Size of stack frame to save callee saved registers |
| unsigned CalleeSavedStackSize = 0; |
| |
| /// FrameIndex of the spill slot when there is no scavenged register in |
| /// insertIndirectBranch. |
| int BranchRelaxationSpillFrameIndex = -1; |
| |
| public: |
| LoongArchMachineFunctionInfo(const Function &F, |
| const TargetSubtargetInfo *STI) {} |
| |
| MachineFunctionInfo * |
| clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, |
| const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB) |
| const override { |
| return DestMF.cloneInfo<LoongArchMachineFunctionInfo>(*this); |
| } |
| |
| int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } |
| void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } |
| |
| unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; } |
| void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; } |
| |
| unsigned getCalleeSavedStackSize() const { return CalleeSavedStackSize; } |
| void setCalleeSavedStackSize(unsigned Size) { CalleeSavedStackSize = Size; } |
| |
| int getBranchRelaxationSpillFrameIndex() { |
| return BranchRelaxationSpillFrameIndex; |
| } |
| void setBranchRelaxationSpillFrameIndex(int Index) { |
| BranchRelaxationSpillFrameIndex = Index; |
| } |
| }; |
| |
| } // end namespace llvm |
| |
| #endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHMACHINEFUNCTIONINFO_H |