1*349cc55cSDimitry Andric //=- CSKYMachineFunctionInfo.h - CSKY machine function info -------*- C++ -*-=// 2*349cc55cSDimitry Andric // 3*349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*349cc55cSDimitry Andric // 7*349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 8*349cc55cSDimitry Andric // 9*349cc55cSDimitry Andric // This file declares CSKY-specific per-machine-function information. 10*349cc55cSDimitry Andric // 11*349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 12*349cc55cSDimitry Andric 13*349cc55cSDimitry Andric #ifndef LLVM_LIB_TARGET_CSKY_CSKYMACHINEFUNCTIONINFO_H 14*349cc55cSDimitry Andric #define LLVM_LIB_TARGET_CSKY_CSKYMACHINEFUNCTIONINFO_H 15*349cc55cSDimitry Andric 16*349cc55cSDimitry Andric #include "llvm/CodeGen/MachineFunction.h" 17*349cc55cSDimitry Andric 18*349cc55cSDimitry Andric namespace llvm { 19*349cc55cSDimitry Andric 20*349cc55cSDimitry Andric class CSKYMachineFunctionInfo : public MachineFunctionInfo { 21*349cc55cSDimitry Andric MachineFunction &MF; 22*349cc55cSDimitry Andric 23*349cc55cSDimitry Andric Register GlobalBaseReg = 0; 24*349cc55cSDimitry Andric bool SpillsCR = false; 25*349cc55cSDimitry Andric 26*349cc55cSDimitry Andric int VarArgsFrameIndex = 0; 27*349cc55cSDimitry Andric unsigned VarArgsSaveSize = 0; 28*349cc55cSDimitry Andric 29*349cc55cSDimitry Andric int spillAreaSize = 0; 30*349cc55cSDimitry Andric 31*349cc55cSDimitry Andric bool LRSpilled = false; 32*349cc55cSDimitry Andric 33*349cc55cSDimitry Andric unsigned PICLabelUId = 0; 34*349cc55cSDimitry Andric 35*349cc55cSDimitry Andric public: 36*349cc55cSDimitry Andric CSKYMachineFunctionInfo(MachineFunction &MF) : MF(MF) {} 37*349cc55cSDimitry Andric 38*349cc55cSDimitry Andric Register getGlobalBaseReg() const { return GlobalBaseReg; } 39*349cc55cSDimitry Andric void setGlobalBaseReg(Register Reg) { GlobalBaseReg = Reg; } 40*349cc55cSDimitry Andric 41*349cc55cSDimitry Andric void setSpillsCR() { SpillsCR = true; } 42*349cc55cSDimitry Andric bool isCRSpilled() const { return SpillsCR; } 43*349cc55cSDimitry Andric 44*349cc55cSDimitry Andric void setVarArgsFrameIndex(int v) { VarArgsFrameIndex = v; } 45*349cc55cSDimitry Andric int getVarArgsFrameIndex() { return VarArgsFrameIndex; } 46*349cc55cSDimitry Andric 47*349cc55cSDimitry Andric unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; } 48*349cc55cSDimitry Andric void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; } 49*349cc55cSDimitry Andric 50*349cc55cSDimitry Andric bool isLRSpilled() const { return LRSpilled; } 51*349cc55cSDimitry Andric void setLRIsSpilled(bool s) { LRSpilled = s; } 52*349cc55cSDimitry Andric 53*349cc55cSDimitry Andric void setCalleeSaveAreaSize(int v) { spillAreaSize = v; } 54*349cc55cSDimitry Andric int getCalleeSaveAreaSize() const { return spillAreaSize; } 55*349cc55cSDimitry Andric 56*349cc55cSDimitry Andric unsigned createPICLabelUId() { return ++PICLabelUId; } 57*349cc55cSDimitry Andric void initPICLabelUId(unsigned UId) { PICLabelUId = UId; } 58*349cc55cSDimitry Andric }; 59*349cc55cSDimitry Andric 60*349cc55cSDimitry Andric } // namespace llvm 61*349cc55cSDimitry Andric 62*349cc55cSDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_CSKYMACHINEFUNCTIONINFO_H 63