LLVM: lib/Target/AMDGPU/SIFrameLowering.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H

10#define LLVM_LIB_TARGET_AMDGPU_SIFRAMELOWERING_H

11

14

15namespace llvm {

16

18public:

23

31 Register &FrameReg) const override;

32

38 bool NeedExecCopyReservedReg) const;

42 Register FramePtrRegScratchCopy) const;

46 Register FramePtrRegScratchCopy) const;

47 bool

50 std::vector &CSI) const override;

51

54 std::vector &CSI) const;

55

60

61 bool

66

69

71

75

78

83

84protected:

86

87private:

88 void emitEntryFunctionFlatScratchInit(MachineFunction &MF,

92 Register ScratchWaveOffsetReg) const;

93

95

96 void emitEntryFunctionScratchRsrcRegSetup(

100 Register ScratchWaveOffsetReg) const;

101

102public:

104

105

106

108};

109

110}

111

112#endif

Interface to describe a layout of a stack frame on an AMDGPU target.

MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL

MachineBasicBlock MachineBasicBlock::iterator MBBI

static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")

Register const TargetRegisterInfo * TRI

Interface definition for SIRegisterInfo.

AMDGPUFrameLowering(StackDirection D, Align StackAl, int LAO, Align TransAl=Align(1))

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

A set of register units used to track register liveness.

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.

void determinePrologEpilogSGPRSaves(MachineFunction &MF, BitVector &SavedRegs, bool NeedExecCopyReservedReg) const

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

getFrameIndexReference - This method should return the base register and offset used to reference a f...

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

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

bool mayReserveScratchForCWSR(const MachineFunction &MF) const

bool allocateScavengingFrameIndexesNearIncomingSP(const MachineFunction &MF) const override

Control the placement of special register scavenging spill slots when allocating a stack frame.

SIFrameLowering(StackDirection D, Align StackAl, int LAO, Align TransAl=Align(1))

Definition SIFrameLowering.h:19

bool requiresStackPointerReference(const MachineFunction &MF) const

void emitEntryFunctionPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const

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

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

void emitCSRSpillStores(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, DebugLoc &DL, LiveRegUnits &LiveUnits, Register FrameReg, Register FramePtrRegScratchCopy) const

bool hasFPImpl(const MachineFunction &MF) const override

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

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 assignCalleeSavedSpillSlots(MachineFunction &MF, const TargetRegisterInfo *TRI, std::vector< CalleeSavedInfo > &CSI) const override

assignCalleeSavedSpillSlots - Allows target to override spill slot assignment logic.

void determineCalleeSavesSGPR(MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS=nullptr) const

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

void emitCSRSpillRestores(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, DebugLoc &DL, LiveRegUnits &LiveUnits, Register FrameReg, Register FramePtrRegScratchCopy) const

~SIFrameLowering() override=default

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

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

bool isSupportedStackID(TargetStackID::Value ID) const override

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

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

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

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

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...

StackOffset holds a fixed and a scalable offset in bytes.

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.

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.