LLVM: lib/CodeGen/PrologEpilogInserter.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "prologepilog"
Functions
STATISTIC (NumLeafFuncWithSpills, "Number of leaf functions with CSRs")
STATISTIC (NumFuncSeen, "Number of functions seen in PEI")
INITIALIZE_PASS_BEGIN (PEILegacy, DEBUG_TYPE, "Prologue/Epilogue Insertion", false, false) INITIALIZE_PASS_END(PEILegacy
STATISTIC (NumBytesStackSpace, "Number of bytes used for stack in all functions")
static void stashEntryDbgValues (MachineBasicBlock &MBB, SavedDbgValuesMap &EntryDbgValues)
Stash DBG_VALUEs that describe parameters and which are placed at the start of the block.
static void assignCalleeSavedSpillSlots (MachineFunction &F, const BitVector &SavedRegs)
static void updateLiveness (MachineFunction &MF)
Helper function to update the liveness information for the callee-saved registers.
static void insertCSRSaves (MachineBasicBlock &SaveBlock, ArrayRef< CalleeSavedInfo > CSI)
Insert spill code for the callee-saved registers used in the function.
static void insertCSRRestores (MachineBasicBlock &RestoreBlock, std::vector< CalleeSavedInfo > &CSI)
Insert restore code for the callee-saved registers used in the function.
static void AdjustStackOffset (MachineFrameInfo &MFI, int FrameIdx, bool StackGrowsDown, int64_t &Offset, Align &MaxAlign)
AdjustStackOffset - Helper function used to adjust the stack frame offset.
static void computeFreeStackSlots (MachineFrameInfo &MFI, bool StackGrowsDown, int64_t FixedCSEnd, BitVector &StackBytesFree)
Compute which bytes of fixed and callee-save stack area are unused and keep track of them in StackBytesFree.
static bool scavengeStackSlot (MachineFrameInfo &MFI, int FrameIdx, bool StackGrowsDown, Align MaxAlign, BitVector &StackBytesFree)
Assign frame object to an unused portion of the stack in the fixed stack object range.
static void AssignProtectedObjSet (const StackObjSet &UnassignedObjs, SmallSet< int, 16 > &ProtectedObjs, MachineFrameInfo &MFI, bool StackGrowsDown, int64_t &Offset, Align &MaxAlign)
AssignProtectedObjSet - Helper function to assign large stack objects (i.e., those required to be close to the Stack Protector) to stack offsets.
Variables
DEBUG_TYPE
Prologue Epilogue Insertion &Frame Finalization
Prologue Epilogue Insertion &Frame false

DEBUG_TYPE

#define DEBUG_TYPE "prologepilog"

MBBVector

SavedDbgValuesMap

StackObjSet

AdjustStackOffset()

void AdjustStackOffset ( MachineFrameInfo & MFI, int FrameIdx, bool StackGrowsDown, int64_t & Offset, Align & MaxAlign ) inlinestatic

assignCalleeSavedSpillSlots()

Definition at line 453 of file PrologEpilogInserter.cpp.

References llvm::TargetFrameLowering::assignCalleeSavedSpillSlots(), llvm::MachineFrameInfo::CreateFixedSpillStackObject(), llvm::MachineFrameInfo::CreateStackObject(), llvm::BitVector::empty(), F, llvm::TargetFrameLowering::getCalleeSavedSpillSlots(), llvm::TargetFrameLowering::getStackAlign(), llvm::TargetFrameLowering::SpillSlot::Offset, llvm::TargetFrameLowering::SpillSlot::Reg, Reg, llvm::BitVector::set(), llvm::MachineFrameInfo::setCalleeSavedInfo(), llvm::MachineFrameInfo::setIsCalleeSavedObjectIndex(), Size, llvm::BitVector::size(), and llvm::BitVector::test().

AssignProtectedObjSet()

void LocalStackSlotImpl::AssignProtectedObjSet ( const StackObjSet & UnassignedObjs, SmallSet< int, 16 > & ProtectedObjs, MachineFrameInfo & MFI, bool StackGrowsDown, int64_t & Offset, Align & MaxAlign ) static

computeFreeStackSlots()

Compute which bytes of fixed and callee-save stack area are unused and keep track of them in StackBytesFree.

Definition at line 744 of file PrologEpilogInserter.cpp.

References llvm::TargetStackID::Default, llvm::MachineFrameInfo::getObjectIndexBegin(), llvm::MachineFrameInfo::getObjectIndexEnd(), llvm::MachineFrameInfo::getObjectOffset(), llvm::MachineFrameInfo::getObjectSize(), llvm::MachineFrameInfo::getStackID(), llvm::MachineFrameInfo::isCalleeSavedObjectIndex(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::BitVector::reset(), and llvm::BitVector::resize().

INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( PEILegacy ,
DEBUG_TYPE ,
"Prologue/Epilogue Insertion" ,
false ,
false )

insertCSRRestores()

Insert restore code for the callee-saved registers used in the function.

Definition at line 641 of file PrologEpilogInserter.cpp.

References llvm::MachineBasicBlock::getFirstTerminator(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineBasicBlock::getParent(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::TargetFrameLowering::restoreCalleeSavedRegister(), llvm::TargetFrameLowering::restoreCalleeSavedRegisters(), llvm::reverse(), TII, and TRI.

insertCSRSaves()

Insert spill code for the callee-saved registers used in the function.

Definition at line 625 of file PrologEpilogInserter.cpp.

References llvm::MachineBasicBlock::begin(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineBasicBlock::getParent(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::TargetFrameLowering::spillCalleeSavedRegister(), llvm::TargetFrameLowering::spillCalleeSavedRegisters(), TII, and TRI.

scavengeStackSlot()

Assign frame object to an unused portion of the stack in the fixed stack object range.

Return true if the allocation was successful.

Definition at line 788 of file PrologEpilogInserter.cpp.

References llvm::alignTo(), llvm::BitVector::clear(), llvm::dbgs(), llvm::BitVector::find_first(), llvm::BitVector::find_next(), llvm::MachineFrameInfo::getObjectAlign(), llvm::MachineFrameInfo::getObjectSize(), llvm::MachineFrameInfo::isVariableSizedObjectIndex(), LLVM_DEBUG, llvm::BitVector::none(), llvm::BitVector::reset(), llvm::MachineFrameInfo::setObjectOffset(), llvm::BitVector::size(), and llvm::BitVector::test().

stashEntryDbgValues()

STATISTIC() [1/3]

STATISTIC ( NumBytesStackSpace ,
"Number of bytes used for stack in all functions" )

STATISTIC() [2/3]

STATISTIC ( NumFuncSeen ,
"Number of functions seen in PEI" )

STATISTIC() [3/3]

STATISTIC ( NumLeafFuncWithSpills ,
"Number of leaf functions with CSRs" )

updateLiveness()

Helper function to update the liveness information for the callee-saved registers.

Definition at line 544 of file PrologEpilogInserter.cpp.

References assert(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::MachineFunction::front(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getRegInfo(), llvm::MachineFrameInfo::getRestorePoints(), llvm::MachineFrameInfo::getSavePoints(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), MBB, MRI, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, and llvm::MachineBasicBlock::successors().

DEBUG_TYPE

false

Prologue Epilogue Insertion& Frame false

Finalization

Prologue Epilogue Insertion& Frame Finalization