LLVM: lib/Target/AArch64/AArch64PrologueEpilogue.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64PROLOGUEEPILOGUE_H
17#define LLVM_LIB_TARGET_AARCH64_AARCH64PROLOGUEEPILOGUE_H
18
22
23namespace llvm {
24
29
35
40
99
100
101
102
103
105public:
108
109
111
114#ifndef NDEBUG
115 verifyPrologueClobbers();
116#endif
117 }
118
119private:
121 int64_t RealignmentPadding, StackOffset AllocSize,
123 bool FollowupAllocs);
124
127
130
131 void emitEmptyStackFramePrologue(int64_t NumBytes,
134
136 const DebugLoc &DL, unsigned FixedObject);
137
139 unsigned FixedObject) const;
140
142 const DebugLoc &DL, int64_t &NumBytes,
143 int64_t RealignmentPadding) const;
144
147
148 void determineLocalsStackSize(uint64_t StackSize, uint64_t PrologueSaveSize);
149
151
152#ifndef NDEBUG
155
156 void collectBlockLiveins();
157 void verifyPrologueClobbers() const;
158#endif
159
160
161
162 bool EmitAsyncCFI = false;
163 bool CombineSPBump = false;
164};
165
166
167
168
169
171public:
174
175
177
179
180private:
181 bool shouldCombineCSRLocalStackBump(uint64_t StackBumpBytes) const;
182
183
184
186
189
192
194 bool SVE) const;
195
197 emitCalleeSavedRestores(MBBI, false);
198 }
199
201 emitCalleeSavedRestores(MBBI, true);
202 }
203
204 void finalizeEpilogue() const;
205
208};
209
210}
211
212#endif
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
MachineBasicBlock MachineBasicBlock::iterator MBBI
This file implements the LivePhysRegs utility for tracking liveness of physical registers.
void emitEpilogue()
Emit the epilogue.
~AArch64EpilogueEmitter()
Definition AArch64PrologueEpilogue.h:178
AArch64EpilogueEmitter(MachineFunction &MF, MachineBasicBlock &MBB, const AArch64FrameLowering &AFL)
AArch64FunctionInfo - This class is derived from MachineFunctionInfo and contains private AArch64-spe...
void emitPrologue()
Emit the prologue.
AArch64PrologueEmitter(MachineFunction &MF, MachineBasicBlock &MBB, const AArch64FrameLowering &AFL)
~AArch64PrologueEmitter()
Definition AArch64PrologueEpilogue.h:112
const MachineFrameInfo & MFI
Definition AArch64PrologueEpilogue.h:79
AArch64FunctionInfo * AFI
Definition AArch64PrologueEpilogue.h:97
bool HasFP
Definition AArch64PrologueEpilogue.h:86
bool NeedsWinCFI
Definition AArch64PrologueEpilogue.h:89
MachineBasicBlock::iterator convertCalleeSaveRestoreToSPPrePostIncDec(MachineBasicBlock::iterator MBBI, const DebugLoc &DL, int CSStackSizeInc, bool EmitCFI, MachineInstr::MIFlag FrameFlag=MachineInstr::FrameSetup, int CFAOffset=0) const
SVEFrameSizes getSVEStackFrameSizes() const
bool isVGInstruction(MachineBasicBlock::iterator MBBI, const TargetLowering &TLI) const
AArch64PrologueEpilogueCommon(MachineFunction &MF, MachineBasicBlock &MBB, const AArch64FrameLowering &AFL)
const AArch64RegisterInfo & RegInfo
Definition AArch64PrologueEpilogue.h:82
const AArch64FrameLowering & AFL
Definition AArch64PrologueEpilogue.h:81
bool EmitCFI
Definition AArch64PrologueEpilogue.h:87
SVEStackLayout
Definition AArch64PrologueEpilogue.h:46
@ CalleeSavesAboveFrameRecord
Definition AArch64PrologueEpilogue.h:49
@ Default
Definition AArch64PrologueEpilogue.h:47
@ Split
Definition AArch64PrologueEpilogue.h:48
void fixupCalleeSaveRestoreStackOffset(MachineInstr &MI, uint64_t LocalStackSize) const
bool shouldCombineCSRLocalStackBump(uint64_t StackBumpBytes) const
bool HasWinCFI
Definition AArch64PrologueEpilogue.h:94
MachineBasicBlock & MBB
Definition AArch64PrologueEpilogue.h:77
const AArch64Subtarget & Subtarget
Definition AArch64PrologueEpilogue.h:80
SVEStackAllocations getSVEStackAllocations(SVEFrameSizes const &)
SVEStackLayout SVELayout
Definition AArch64PrologueEpilogue.h:91
MachineFunction & MF
Definition AArch64PrologueEpilogue.h:76
bool requiresGetVGCall() const
bool IsFunclet
Definition AArch64PrologueEpilogue.h:88
const TargetInstrInfo * TII
Definition AArch64PrologueEpilogue.h:96
bool HomPrologEpilog
Definition AArch64PrologueEpilogue.h:90
A set of physical registers with utility functions to track liveness when walking backward/forward th...
MachineInstrBundleIterator< MachineInstr > iterator
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.
Representation of each machine instruction.
StackOffset holds a fixed and a scalable offset in bytes.
TargetInstrInfo - Interface to description of machine instruction set.
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
This is an optimization pass for GlobalISel generic memory operations.
struct llvm::SVEFrameSizes::@005032024062370221152241042070022264014337265150 PPR
struct llvm::SVEFrameSizes::@005032024062370221152241042070022264014337265150 ZPR
StackOffset LocalsSize
Definition AArch64PrologueEpilogue.h:32
StackOffset CalleeSavesSize
Definition AArch64PrologueEpilogue.h:32
StackOffset AfterZPRs
Definition AArch64PrologueEpilogue.h:37
StackOffset totalSize() const
Definition AArch64PrologueEpilogue.h:38
StackOffset AfterPPRs
Definition AArch64PrologueEpilogue.h:37
StackOffset BeforePPRs
Definition AArch64PrologueEpilogue.h:37