Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/M68k/M68kMachineFunction.h
35269 views
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
21
namespace llvm {
22
23
class 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
68
public:
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
112
private:
113
virtual void anchor();
114
};
115
116
} // end of namespace llvm
117
118
#endif // LLVM_LIB_TARGET_M68K_M68KMACHINEFUNCTION_H
119
120