1349cc55cSDimitry Andric //=- CSKYMachineFunctionInfo.h - CSKY machine function info -------*- C++ -*-=// 2349cc55cSDimitry Andric // 3349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6349cc55cSDimitry Andric // 7349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 8349cc55cSDimitry Andric // 9349cc55cSDimitry Andric // This file declares CSKY-specific per-machine-function information. 10349cc55cSDimitry Andric // 11349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 12349cc55cSDimitry Andric 13349cc55cSDimitry Andric #ifndef LLVM_LIB_TARGET_CSKY_CSKYMACHINEFUNCTIONINFO_H 14349cc55cSDimitry Andric #define LLVM_LIB_TARGET_CSKY_CSKYMACHINEFUNCTIONINFO_H 15349cc55cSDimitry Andric 16349cc55cSDimitry Andric #include "llvm/CodeGen/MachineFunction.h" 17349cc55cSDimitry Andric 18349cc55cSDimitry Andric namespace llvm { 19349cc55cSDimitry Andric 20349cc55cSDimitry Andric class CSKYMachineFunctionInfo : public MachineFunctionInfo { 21349cc55cSDimitry Andric Register GlobalBaseReg = 0; 22349cc55cSDimitry Andric bool SpillsCR = false; 23349cc55cSDimitry Andric 24349cc55cSDimitry Andric int VarArgsFrameIndex = 0; 25349cc55cSDimitry Andric unsigned VarArgsSaveSize = 0; 26349cc55cSDimitry Andric 27349cc55cSDimitry Andric int spillAreaSize = 0; 28349cc55cSDimitry Andric 29349cc55cSDimitry Andric bool LRSpilled = false; 30349cc55cSDimitry Andric 31349cc55cSDimitry Andric unsigned PICLabelUId = 0; 32349cc55cSDimitry Andric 33349cc55cSDimitry Andric public: CSKYMachineFunctionInfo(const Function & F,const TargetSubtargetInfo * STI)34*bdd1243dSDimitry Andric CSKYMachineFunctionInfo(const Function &F, const TargetSubtargetInfo *STI) {} 3581ad6265SDimitry Andric 3681ad6265SDimitry Andric MachineFunctionInfo * clone(BumpPtrAllocator & Allocator,MachineFunction & DestMF,const DenseMap<MachineBasicBlock *,MachineBasicBlock * > & Src2DstMBB)3781ad6265SDimitry Andric clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF, 3881ad6265SDimitry Andric const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB) 3981ad6265SDimitry Andric const override { 4081ad6265SDimitry Andric return DestMF.cloneInfo<CSKYMachineFunctionInfo>(*this); 4181ad6265SDimitry Andric } 42349cc55cSDimitry Andric getGlobalBaseReg()43349cc55cSDimitry Andric Register getGlobalBaseReg() const { return GlobalBaseReg; } setGlobalBaseReg(Register Reg)44349cc55cSDimitry Andric void setGlobalBaseReg(Register Reg) { GlobalBaseReg = Reg; } 45349cc55cSDimitry Andric setSpillsCR()46349cc55cSDimitry Andric void setSpillsCR() { SpillsCR = true; } isCRSpilled()47349cc55cSDimitry Andric bool isCRSpilled() const { return SpillsCR; } 48349cc55cSDimitry Andric setVarArgsFrameIndex(int v)49349cc55cSDimitry Andric void setVarArgsFrameIndex(int v) { VarArgsFrameIndex = v; } getVarArgsFrameIndex()50349cc55cSDimitry Andric int getVarArgsFrameIndex() { return VarArgsFrameIndex; } 51349cc55cSDimitry Andric getVarArgsSaveSize()52349cc55cSDimitry Andric unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; } setVarArgsSaveSize(int Size)53349cc55cSDimitry Andric void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; } 54349cc55cSDimitry Andric isLRSpilled()55349cc55cSDimitry Andric bool isLRSpilled() const { return LRSpilled; } setLRIsSpilled(bool s)56349cc55cSDimitry Andric void setLRIsSpilled(bool s) { LRSpilled = s; } 57349cc55cSDimitry Andric setCalleeSaveAreaSize(int v)58349cc55cSDimitry Andric void setCalleeSaveAreaSize(int v) { spillAreaSize = v; } getCalleeSaveAreaSize()59349cc55cSDimitry Andric int getCalleeSaveAreaSize() const { return spillAreaSize; } 60349cc55cSDimitry Andric createPICLabelUId()61349cc55cSDimitry Andric unsigned createPICLabelUId() { return ++PICLabelUId; } initPICLabelUId(unsigned UId)62349cc55cSDimitry Andric void initPICLabelUId(unsigned UId) { PICLabelUId = UId; } 63349cc55cSDimitry Andric }; 64349cc55cSDimitry Andric 65349cc55cSDimitry Andric } // namespace llvm 66349cc55cSDimitry Andric 67349cc55cSDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_CSKYMACHINEFUNCTIONINFO_H 68