1//===-- M68kMachineFunctionInfo.h - M68k private data -----------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// This file declares the M68k specific subclass of MachineFunctionInfo.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
15#define LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
16
17#include "llvm/CodeGen/CallingConvLower.h"
18#include "llvm/CodeGen/MachineFunction.h"
19#include "llvm/CodeGenTypes/MachineValueType.h"
20
21namespace llvm {
22
23class M68kMachineFunctionInfo : public MachineFunctionInfo {
24 /// Non-zero if the function has base pointer and makes call to
25 /// llvm.eh.sjlj.setjmp. When non-zero, the value is a displacement from the
26 /// frame pointer to a slot where the base pointer is stashed.
27 signed char RestoreBasePointerOffset = 0;
28
29 /// Size of the callee-saved register portion of the stack frame in bytes.
30 unsigned CalleeSavedFrameSize = 0;
31
32 /// Number of bytes function pops on return (in addition to the space used by
33 /// the return address). Used on windows platform for stdcall & fastcall
34 /// name decoration
35 unsigned BytesToPopOnReturn = 0;
36
37 /// FrameIndex for return slot.
38 int ReturnAddrIndex = 0;
39
40 /// The number of bytes by which return address stack slot is moved as the
41 /// result of tail call optimization.
42 int TailCallReturnAddrDelta = 0;
43
44 /// keeps track of the virtual register initialized for use as the global
45 /// base register. This is used for PIC in some PIC relocation models.
46 unsigned GlobalBaseReg = 0;
47
48 /// FrameIndex for start of varargs area.
49 int VarArgsFrameIndex = 0;
50
51 /// Keeps track of whether this function uses sequences of pushes to pass
52 /// function parameters.
53 bool HasPushSequences = false;
54
55 /// Some subtargets require that sret lowering includes
56 /// returning the value of the returned struct in a register. This field
57 /// holds the virtual register into which the sret argument is passed.
58 unsigned SRetReturnReg = 0;
59
60 /// A list of virtual and physical registers that must be forwarded to every
61 /// musttail call.
62 SmallVector<ForwardedRegister, 1> ForwardedMustTailRegParms;
63
64 /// The number of bytes on stack consumed by the arguments being passed on
65 /// the stack.
66 unsigned ArgumentStackSize = 0;
67
68public:
69 explicit M68kMachineFunctionInfo(const Function &F,
70 const TargetSubtargetInfo *STI) {}
71
72 MachineFunctionInfo *
73 clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF,
74 const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
75 const override;
76
77 bool getRestoreBasePointer() const { return RestoreBasePointerOffset != 0; }
78 void setRestoreBasePointer(const MachineFunction *MF);
79 int getRestoreBasePointerOffset() const { return RestoreBasePointerOffset; }
80
81 unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; }
82 void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; }
83
84 unsigned getBytesToPopOnReturn() const { return BytesToPopOnReturn; }
85 void setBytesToPopOnReturn(unsigned bytes) { BytesToPopOnReturn = bytes; }
86
87 int getRAIndex() const { return ReturnAddrIndex; }
88 void setRAIndex(int Index) { ReturnAddrIndex = Index; }
89
90 int getTCReturnAddrDelta() const { return TailCallReturnAddrDelta; }
91 void setTCReturnAddrDelta(int delta) { TailCallReturnAddrDelta = delta; }
92
93 unsigned getGlobalBaseReg() const { return GlobalBaseReg; }
94 void setGlobalBaseReg(unsigned Reg) { GlobalBaseReg = Reg; }
95
96 int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
97 void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; }
98
99 bool getHasPushSequences() const { return HasPushSequences; }
100 void setHasPushSequences(bool HasPush) { HasPushSequences = HasPush; }
101
102 unsigned getSRetReturnReg() const { return SRetReturnReg; }
103 void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; }
104
105 unsigned getArgumentStackSize() const { return ArgumentStackSize; }
106 void setArgumentStackSize(unsigned size) { ArgumentStackSize = size; }
107
108 SmallVectorImpl<ForwardedRegister> &getForwardedMustTailRegParms() {
109 return ForwardedMustTailRegParms;
110 }
111
112private:
113 virtual void anchor();
114};
115
116} // end of namespace llvm
117
118#endif // LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
119

source code of llvm/lib/Target/M68k/M68kMachineFunction.h