LLVM: lib/Target/AArch64/AArch64FrameLowering.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64FRAMELOWERING_H

14#define LLVM_LIB_TARGET_AARCH64_AARCH64FRAMELOWERING_H

15

19

20namespace llvm {

21

26

31

33public:

37

39

43

44

45

48

49

50

51

52

53

54

56

58

60

62

64 Register &FrameReg) const override;

66 int FI) const override;

68 Register &FrameReg, bool PreferFP,

69 bool ForSimm) const;

71 int64_t ObjectOffset, bool isFixed,

73 Register &FrameReg, bool PreferFP,

74 bool ForSimm) const;

79

80 bool

85

86

88

90

91 bool

94 std::vector &CSI) const override;

95

98

99

103

106

109

110 void

113

115

117

121 bool IgnoreSPUpdates) const override;

123 int FI) const override;

125

127 switch (ID) {

128 default:

129 return false;

134 return true;

135 }

136 }

137

144

145 void

148

150

152

154

155

157

158

159

161

162

166

170

171protected:

173

174private:

175

176

177

178

181

182

184

185

186

189

190

191 void emitZeroCallUsedRegs(BitVector RegsToZero,

193

194

197

199 Register ScratchReg, int64_t FrameSize,

201

204 int64_t NegProbeSize,

206

209

210 bool windowsRequiresStackProbe(const MachineFunction &MF,

211 uint64_t StackSizeInBytes) const;

212

213 bool shouldSignReturnAddressEverywhere(const MachineFunction &MF) const;

214

216 int64_t ObjectOffset) const;

217

219 int64_t ObjectOffset) const;

220

221

222

226

227

228

229

230

231

232

235

236

237

238

239

240

241

242

243

244

245

246

248 bool HasCall = false) const;

249

250

251

254 bool IsFunclet) const;

255};

256

257}

258

259#endif

const TargetInstrInfo & TII

static int getArgumentStackToRestore(MachineFunction &MF, MachineBasicBlock &MBB)

static MachineBasicBlock::iterator insertSEH(MachineBasicBlock::iterator MBBI, const TargetInstrInfo &TII, unsigned Flags)

MachineBasicBlock MachineBasicBlock::iterator MBBI

Register const TargetRegisterInfo * TRI

static MCRegister findScratchNonCalleeSaveRegister(MachineRegisterInfo &MRI, LiveRegUnits &LiveUnits, const TargetRegisterClass &RC, bool Unused=false)

A helper class for emitting the epilogue.

StackOffset getSVEStackSize(const MachineFunction &MF) const

Returns the size of the entire SVE stackframe (PPRs + ZPRs).

Definition AArch64FrameLowering.h:163

StackOffset getZPRStackSize(const MachineFunction &MF) const

Returns the size of the entire ZPR stackframe (calleesaves + spills).

void processFunctionBeforeFrameIndicesReplaced(MachineFunction &MF, RegScavenger *RS) const override

processFunctionBeforeFrameIndicesReplaced - This method is called immediately before MO_FrameIndex op...

friend class AArch64PrologueEpilogueCommon

Definition AArch64FrameLowering.h:167

MachineBasicBlock::iterator eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const override

This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy p...

bool canUseAsPrologue(const MachineBasicBlock &MBB) const override

Check whether or not the given MBB can be used as a prologue for the target.

bool enableStackSlotScavenging(const MachineFunction &MF) const override

Returns true if the stack slot holes in the fixed and callee-save stack area should be used when allo...

bool assignCalleeSavedSpillSlots(MachineFunction &MF, const TargetRegisterInfo *TRI, std::vector< CalleeSavedInfo > &CSI) const override

assignCalleeSavedSpillSlots - Allows target to override spill slot assignment logic.

bool spillCalleeSavedRegisters(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, ArrayRef< CalleeSavedInfo > CSI, const TargetRegisterInfo *TRI) const override

spillCalleeSavedRegisters - Issues instruction(s) to spill all callee saved registers and returns tru...

bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, MutableArrayRef< CalleeSavedInfo > CSI, const TargetRegisterInfo *TRI) const override

restoreCalleeSavedRegisters - Issues instruction(s) to restore all callee saved registers and returns...

bool enableFullCFIFixup(const MachineFunction &MF) const override

enableFullCFIFixup - Returns true if we may need to fix the unwind information such that it is accura...

StackOffset getFrameIndexReferenceFromSP(const MachineFunction &MF, int FI) const override

getFrameIndexReferenceFromSP - This method returns the offset from the stack pointer to the slot of t...

bool enableCFIFixup(const MachineFunction &MF) const override

Returns true if we may need to fix the unwind information for the function.

StackOffset getNonLocalFrameIndexReference(const MachineFunction &MF, int FI) const override

getNonLocalFrameIndexReference - This method returns the offset used to reference a frame index locat...

TargetStackID::Value getStackIDForScalableVectors() const override

Returns the StackID that scalable vectors should be associated with.

friend class AArch64PrologueEmitter

Definition AArch64FrameLowering.h:168

bool hasFPImpl(const MachineFunction &MF) const override

hasFPImpl - Return true if the specified function should have a dedicated frame pointer register.

void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override

emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.

friend class AArch64EpilogueEmitter

Definition AArch64FrameLowering.h:169

void resetCFIToInitialState(MachineBasicBlock &MBB) const override

Emit CFI instructions that recreate the state of the unwind information upon function entry.

bool hasReservedCallFrame(const MachineFunction &MF) const override

hasReservedCallFrame - Under normal circumstances, when a frame pointer is not required,...

StackOffset resolveFrameOffsetReference(const MachineFunction &MF, int64_t ObjectOffset, bool isFixed, TargetStackID::Value StackID, Register &FrameReg, bool PreferFP, bool ForSimm) const

bool enableShrinkWrapping(const MachineFunction &MF) const override

Returns true if the target will correctly handle shrink wrapping.

Definition AArch64FrameLowering.h:100

bool canUseRedZone(const MachineFunction &MF) const

Can this function use the red zone for local allocations.

bool needsWinCFI(const MachineFunction &MF) const

bool isSupportedStackID(TargetStackID::Value ID) const override

Definition AArch64FrameLowering.h:126

bool isFPReserved(const MachineFunction &MF) const

Should the Frame Pointer be reserved for the current function?

void processFunctionBeforeFrameFinalized(MachineFunction &MF, RegScavenger *RS) const override

processFunctionBeforeFrameFinalized - This method is called immediately before the specified function...

int getSEHFrameIndexOffset(const MachineFunction &MF, int FI) const

unsigned getWinEHFuncletFrameSize(const MachineFunction &MF) const

Funclets only need to account for space for the callee saved registers, as the locals are accounted f...

void orderFrameObjects(const MachineFunction &MF, SmallVectorImpl< int > &ObjectsToAllocate) const override

Order the symbols in the local stack frame.

void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override

StackOffset getPPRStackSize(const MachineFunction &MF) const

Returns the size of the entire PPR stackframe (calleesaves + spills + hazard padding).

void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS) const override

This method determines which of the registers reported by TargetRegisterInfo::getCalleeSavedRegs() sh...

StackOffset getFrameIndexReference(const MachineFunction &MF, int FI, Register &FrameReg) const override

getFrameIndexReference - Provide a base+offset reference to an FI slot for debug info.

StackOffset getFrameIndexReferencePreferSP(const MachineFunction &MF, int FI, Register &FrameReg, bool IgnoreSPUpdates) const override

For Win64 AArch64 EH, the offset to the Unwind object is from the SP before the update.

bool isStackIdSafeForLocalArea(unsigned StackId) const override

This method returns whether or not it is safe for an object with the given stack id to be bundled int...

Definition AArch64FrameLowering.h:138

AArch64FrameLowering()

Definition AArch64FrameLowering.h:34

StackOffset resolveFrameIndexReference(const MachineFunction &MF, int FI, Register &FrameReg, bool PreferFP, bool ForSimm) const

unsigned getWinEHParentFrameOffset(const MachineFunction &MF) const override

The parent frame offset (aka dispFrame) is only used on X86_64 to retrieve the parent's frame pointer...

bool requiresSaveVG(const MachineFunction &MF) const

void emitPacRetPlusLeafHardening(MachineFunction &MF) const

Harden the entire function with pac-ret.

AArch64FunctionInfo - This class is derived from MachineFunctionInfo and contains private AArch64-spe...

A helper class for emitting the prologue.

ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...

MachineInstrBundleIterator< MachineInstr > iterator

MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...

Wrapper class representing virtual and physical registers.

This class consists of common code factored out of the SmallVector class to reduce code duplication b...

StackOffset holds a fixed and a scalable offset in bytes.

TargetFrameLowering(StackDirection D, Align StackAl, int LAO, Align TransAl=Align(1), bool StackReal=true)

TargetInstrInfo - Interface to description of machine instruction set.

This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...

TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...

unsigned ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

@ ScalablePredicateVector

This is an optimization pass for GlobalISel generic memory operations.

This struct is a compact representation of a valid (non-zero power of two) alignment.

uint64_t ZPRStackSize

Definition AArch64FrameLowering.h:28

uint64_t PPRStackSize

Definition AArch64FrameLowering.h:29