LLVM: lib/CodeGen/TargetFrameLoweringImpl.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

26

27using namespace llvm;

28

30

35 return false;

36}

37

41}

42

43

44

45

46

52

53

54

55

57

61}

62

63

64

65

66

67

70 int FI) const {

71

72

75}

76

80}

81

85 CalleeSaves.resize(TRI.getNumRegs());

86

89 return;

90

92 CalleeSaves.set(Info.getReg());

93}

94

99

100

101

102

103 SavedRegs.resize(TRI.getNumRegs());

104

105

106 const MCPhysReg *CSRegs = nullptr;

107

108

109

110

114 CSRegs = TRI.getIPRACSRegs(&MF);

115 else

117

118

119 if (!CSRegs || CSRegs[0] == 0)

120 return;

121

122

124 return;

125

126

127

128

129

130

131

132

137 return;

138

139

142 for (unsigned i = 0; CSRegs[i]; ++i) {

143 unsigned Reg = CSRegs[i];

144 if (CallsUnwindInit || MRI.isPhysRegModified(Reg))

145 SavedRegs.set(Reg);

146 }

147}

148

152 return false;

153

157}

158

160 if (F.hasLocalLinkage() || F.hasAddressTaken() ||

161 F.hasFnAttribute(Attribute::NoRecurse))

162 return false;

163

164 for (const User *U : F.users())

165 if (auto *CB = dyn_cast(U))

166 if (CB->isTailCall())

167 return false;

168 return true;

169}

170

173}

174

177 llvm_unreachable("getInitialCFARegister() not implemented!");

178}

179

184}

unsigned const MachineRegisterInfo * MRI

This file contains the simple types necessary to represent the attributes associated with functions a...

This file implements the BitVector class.

Analysis containing CSE Info

unsigned const TargetRegisterInfo * TRI

assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())

void resize(unsigned N, bool t=false)

resize - Grow or shrink the bitvector.

The CalleeSavedInfo class tracks the information need to locate where a callee saved register is in t...

bool hasFnAttribute(Attribute::AttrKind Kind) const

Return true if the function has the attribute.

bool usesWindowsCFI() const

The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.

uint64_t getStackSize() const

Return the number of bytes that must be allocated to hold all of the fixed size frame objects.

int64_t getOffsetAdjustment() const

Return the correction for frame offsets.

bool isCalleeSavedInfoValid() const

Has the callee saved info been calculated yet?

const std::vector< CalleeSavedInfo > & getCalleeSavedInfo() const

Returns a reference to call saved info vector for the current function.

bool hasStackObjects() const

Return true if there are any stack objects in this function.

int64_t getObjectOffset(int ObjectIdx) const

Return the assigned stack offset of the specified object from the incoming stack pointer.

const TargetSubtargetInfo & getSubtarget() const

getSubtarget - Return the subtarget for which this machine code is being compiled.

bool needsFrameMoves() const

True if this function needs frame moves for debug or exceptions.

MachineFrameInfo & getFrameInfo()

getFrameInfo - Return the frame info object for the current function.

bool callsUnwindInit() const

MachineRegisterInfo & getRegInfo()

getRegInfo - Return information about the registers currently in use.

Function & getFunction()

Return the LLVM function that this machine code represents.

const TargetMachine & getTarget() const

getTarget - Return the target machine this machine code is compiled with

MachineRegisterInfo - Keep track of information for virtual and physical registers,...

const MCPhysReg * getCalleeSavedRegs() const

Returns list of callee saved registers.

Wrapper class representing virtual and physical registers.

StackOffset holds a fixed and a scalable offset in bytes.

int64_t getFixed() const

Returns the fixed component of the stack.

bool hasFP(const MachineFunction &MF) const

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

virtual bool allocateScavengingFrameIndexesNearIncomingSP(const MachineFunction &MF) const

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

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

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

virtual bool enableCalleeSaveSkip(const MachineFunction &MF) const

Returns true if the target can safely skip saving callee-saved registers for noreturn nounwind functi...

virtual Register getInitialCFARegister(const MachineFunction &MF) const

Return initial CFA register value i.e.

virtual void getCalleeSaves(const MachineFunction &MF, BitVector &SavedRegs) const

Returns the callee-saved registers as computed by determineCalleeSaves in the BitVector SavedRegs.

int getOffsetOfLocalArea() const

getOffsetOfLocalArea - This method returns the offset of the local area from the stack pointer on ent...

virtual DwarfFrameBase getDwarfFrameBase(const MachineFunction &MF) const

Return the frame base information to be encoded in the DWARF subprogram debug info.

virtual bool needsFrameIndexResolution(const MachineFunction &MF) const

virtual bool isProfitableForNoCSROpt(const Function &F) const

Check if the no-CSR optimisation is profitable for the given function.

static bool isSafeForNoCSROpt(const Function &F)

Check if given function is safe for not having callee saved registers.

virtual bool enableCFIFixup(MachineFunction &MF) const

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

virtual ~TargetFrameLowering()

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

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

virtual int getInitialCFAOffset(const MachineFunction &MF) const

Return initial CFA offset value i.e.

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

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

const MCAsmInfo * getMCAsmInfo() const

Return target specific asm information.

unsigned EnableIPRA

This flag enables InterProcedural Register Allocation (IPRA).

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

virtual bool useFPForScavengingIndex(const MachineFunction &MF) const

Returns true if the target wants to use frame pointer based accesses to spill to the scavenger emerge...

bool hasStackRealignment(const MachineFunction &MF) const

True if stack realignment is required and still possible.

virtual Register getFrameRegister(const MachineFunction &MF) const =0

Debug information queries.

virtual const TargetRegisterInfo * getRegisterInfo() const

getRegisterInfo - If register information is available, return it.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

This is an optimization pass for GlobalISel generic memory operations.