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