Go to the source code of this file.
|
static cl::opt< bool > | DisableColoring ("no-stack-coloring", cl::init(false), cl::Hidden, cl::desc("Disable stack coloring")) |
|
static cl::opt< bool > | ProtectFromEscapedAllocas ("protect-from-escaped-allocas", cl::init(false), cl::Hidden, cl::desc("Do not optimize lifetime zones that " "are broken")) |
| The user may write code that uses allocas outside of the declared lifetime zone. More...
|
|
static cl::opt< bool > | LifetimeStartOnFirstUse ("stackcoloring-lifetime-start-on-first-use", cl::init(true), cl::Hidden, cl::desc("Treat stack lifetimes as starting on first use, not on START marker.")) |
| Enable enhanced dataflow scheme for lifetime analysis (treat first use of stack slot as start of slot lifetime, as opposed to looking for LIFETIME_START marker). More...
|
|
| DEBUG_TYPE |
|
Merge disjoint stack | slots |
|
Merge disjoint stack | false |
|
◆ DEBUG_TYPE
#define DEBUG_TYPE "stack-coloring" |
◆ getStartOrEndSlot()
Definition at line 567 of file StackColoring.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::WinEHHandlerType::CatchObj, llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::clear(), llvm::LiveRange::clear(), llvm::SmallVectorImpl< T >::clear(), llvm::BitVector::clear(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::dbgs(), llvm::depth_first(), DisableColoring, llvm::dump(), llvm::SmallVectorBase::empty(), llvm::empty(), llvm::LiveRange::empty(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::LiveRange::end(), llvm::MachineInstr::eraseFromParent(), llvm::LiveRange::find(), llvm::WinEHHandlerType::FrameIndex, From, llvm::Use::get(), llvm::UndefValue::get(), llvm::MachineFunction::getFunction(), llvm::MachineOperand::getIndex(), llvm::SlotIndexes::getInstructionIndex(), llvm::SlotIndexes::getMBBEndIdx(), llvm::SlotIndexes::getMBBStartIdx(), llvm::Value::getName(), llvm::MachineFunction::getName(), llvm::MachineFrameInfo::getObjectAlignment(), llvm::MachineFrameInfo::getObjectAllocation(), llvm::MachineFrameInfo::getObjectIndexEnd(), llvm::MachineFrameInfo::getObjectSize(), llvm::MachineFrameInfo::getObjectSSPLayout(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::AllocaInst::getType(), llvm::getUnderlyingObjectsForCodeGen(), llvm::LiveRange::getValNumInfo(), llvm::MachineFunction::getVariableDbgInfo(), llvm::SlotIndexes::getZeroIndex(), H, llvm::WinEHTryBlockMapEntry::HandlerArray, llvm::ValueAsMetadata::handleRAUW(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::Instruction::insertAfter(), llvm::MachineInstr::isDebugInstr(), llvm::LiveRange::isLiveAtIndexes(), llvm::Value::isUsedByMetadata(), llvm::ISD::LIFETIME_END, llvm::ISD::LIFETIME_START, LifetimeStartOnFirstUse, LLVM_DEBUG, llvm::max(), llvm::LiveRange::MergeSegmentsInAsValue(), MI, llvm::MachineInstr::operands(), llvm::MachineBasicBlock::pred_begin(), llvm::MachineBasicBlock::pred_end(), llvm::SlotIndex::print(), llvm::printMBBReference(), ProtectFromEscapedAllocas, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::MachineFrameInfo::RemoveStackObject(), llvm::Value::replaceAllUsesWith(), llvm::SmallVectorImpl< T >::reserve(), llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::Reset(), llvm::BitVector::reset(), llvm::SmallVectorImpl< T >::resize(), llvm::BitVector::resize(), llvm::BitVector::set(), llvm::MachineFrameInfo::setObjectAlignment(), llvm::MachineFrameInfo::setObjectSSPLayout(), SI, llvm::SmallVectorBase::size(), slots, llvm::sort(), llvm::MachineFrameInfo::SSPLK_AddrOf, llvm::MachineFrameInfo::SSPLK_LargeArray, llvm::MachineFrameInfo::SSPLK_None, llvm::BitVector::test(), llvm::Value::uses(), and VI.
◆ INITIALIZE_PASS_BEGIN()
◆ STATISTIC() [1/4]
STATISTIC |
( |
NumMarkerSeen |
, |
|
|
"Number of lifetime markers found." |
|
|
) |
| |
◆ STATISTIC() [2/4]
STATISTIC |
( |
StackSpaceSaved |
, |
|
|
"Number of bytes saved due to merging slots." |
|
|
) |
| |
◆ STATISTIC() [3/4]
STATISTIC |
( |
StackSlotMerged |
, |
|
|
"Number of stack slot merged." |
|
|
) |
| |
◆ STATISTIC() [4/4]
STATISTIC |
( |
EscapedAllocas |
, |
|
|
"Number of allocas that escaped the lifetime region" |
|
|
) |
| |
◆ DEBUG_TYPE
◆ DisableColoring
◆ false
Merge disjoint stack false |
◆ LifetimeStartOnFirstUse
Enable enhanced dataflow scheme for lifetime analysis (treat first use of stack slot as start of slot lifetime, as opposed to looking for LIFETIME_START marker).
See "Implementation notes" below for more info.
Referenced by getStartOrEndSlot().
◆ ProtectFromEscapedAllocas
cl::opt<bool> ProtectFromEscapedAllocas("protect-from-escaped-allocas", cl::init(false), cl::Hidden, cl::desc("Do not optimize lifetime zones that " "are broken")) |
|
static |
The user may write code that uses allocas outside of the declared lifetime zone.
This can happen when the user returns a reference to a local data-structure. We can detect these cases and decide not to optimize the code. If this flag is enabled, we try to save the user. This option is treated as overriding LifetimeStartOnFirstUse below.
Referenced by getStartOrEndSlot().
◆ slots
Merge disjoint stack slots |