xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/CSKY/CSKYMachineFunctionInfo.h (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
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