LLVM API Documentation
#include <SlotIndexes.h>
Public Member Functions | |
SlotIndexes () | |
void | getAnalysisUsage (AnalysisUsage &au) const override |
void | releaseMemory () override |
bool | runOnMachineFunction (MachineFunction &fn) override |
void | dump () const |
Dump the indexes. | |
void | renumberIndexes () |
Renumber the index list, providing space for new instructions. | |
void | repairIndexesInRange (MachineBasicBlock *MBB, MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End) |
Repair indexes after adding and removing instructions. | |
SlotIndex | getZeroIndex () |
Returns the zero index for this analysis. | |
SlotIndex | getLastIndex () |
Returns the base index of the last slot in this analysis. | |
bool | hasIndex (const MachineInstr *instr) const |
SlotIndex | getInstructionIndex (const MachineInstr *MI) const |
Returns the base index for the given instruction. | |
MachineInstr * | getInstructionFromIndex (SlotIndex index) const |
SlotIndex | getNextNonNullIndex (SlotIndex Index) |
SlotIndex | getIndexBefore (const MachineInstr *MI) const |
SlotIndex | getIndexAfter (const MachineInstr *MI) const |
const std::pair< SlotIndex, SlotIndex > & | getMBBRange (unsigned Num) const |
Return the (start,end) range of the given basic block number. | |
const std::pair< SlotIndex, SlotIndex > & | getMBBRange (const MachineBasicBlock *MBB) const |
Return the (start,end) range of the given basic block. | |
SlotIndex | getMBBStartIdx (unsigned Num) const |
Returns the first index in the given basic block number. | |
SlotIndex | getMBBStartIdx (const MachineBasicBlock *mbb) const |
Returns the first index in the given basic block. | |
SlotIndex | getMBBEndIdx (unsigned Num) const |
Returns the last index in the given basic block number. | |
SlotIndex | getMBBEndIdx (const MachineBasicBlock *mbb) const |
Returns the last index in the given basic block. | |
MachineBasicBlock * | getMBBFromIndex (SlotIndex index) const |
Returns the basic block which the given index falls in. | |
bool | findLiveInMBBs (SlotIndex start, SlotIndex end, SmallVectorImpl< MachineBasicBlock * > &mbbs) const |
MachineBasicBlock * | getMBBCoveringRange (SlotIndex start, SlotIndex end) const |
SlotIndex | insertMachineInstrInMaps (MachineInstr *mi, bool Late=false) |
void | removeMachineInstrFromMaps (MachineInstr *mi) |
Remove the given machine instruction from the mapping. | |
void | replaceMachineInstrInMaps (MachineInstr *mi, MachineInstr *newMI) |
void | insertMBBInMaps (MachineBasicBlock *mbb) |
Add the given MachineBasicBlock into the maps. | |
void | eraseIndex (SlotIndex index) |
Free the resources that were required to maintain a SlotIndex. | |
Static Public Attributes | |
static char | ID = 0 |
SlotIndexes pass.
This pass assigns indexes to each instruction.
Definition at line 334 of file SlotIndexes.h.
llvm::SlotIndexes::SlotIndexes | ( | ) | [inline] |
Definition at line 376 of file SlotIndexes.h.
References llvm::PassRegistry::getPassRegistry(), and llvm::initializeSlotIndexesPass().
void SlotIndexes::dump | ( | ) | const |
Dump the indexes.
Reimplemented from llvm::Pass.
Definition at line 217 of file SlotIndexes.cpp.
References llvm::iplist< NodeTy, Traits >::begin(), llvm::dbgs(), llvm::iplist< NodeTy, Traits >::end(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
void llvm::SlotIndexes::eraseIndex | ( | SlotIndex | index | ) | [inline] |
Free the resources that were required to maintain a SlotIndex.
Once an index is no longer needed (for instance because the instruction at that index has been moved), the resources required to maintain the index can be relinquished to reduce memory use and improve renumbering performance. Any remaining SlotIndex objects that point to the same index are left 'dangling' (much the same as a dangling pointer to a freed object) and should not be accessed, except to destruct them.
Like dangling pointers, access to dangling SlotIndexes can cause painful-to-track-down bugs, especially if the memory for the index previously pointed to has been re-used. To detect dangling SlotIndex bugs, build with EXPENSIVE_CHECKS=1. This will cause "erased" indexes to be retained in a graveyard instead of being freed. Operations on indexes in the graveyard will trigger an assertion.
Definition at line 689 of file SlotIndexes.h.
References llvm::iplist< NodeTy, Traits >::erase(), and llvm::iplist< NodeTy, Traits >::remove().
bool llvm::SlotIndexes::findLiveInMBBs | ( | SlotIndex | start, |
SlotIndex | end, | ||
SmallVectorImpl< MachineBasicBlock * > & | mbbs | ||
) | const [inline] |
Definition at line 522 of file SlotIndexes.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), and llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().
Referenced by llvm::LiveIntervals::findLiveInMBBs().
void SlotIndexes::getAnalysisUsage | ( | AnalysisUsage & | AU | ) | const [override, virtual] |
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
For MachineFunctionPasses, calling AU.preservesCFG() indicates that the pass does not modify the MachineBasicBlock CFG.
Reimplemented from llvm::MachineFunctionPass.
Definition at line 28 of file SlotIndexes.cpp.
References llvm::MachineFunctionPass::getAnalysisUsage().
SlotIndex llvm::SlotIndexes::getIndexAfter | ( | const MachineInstr * | MI | ) | const [inline] |
getIndexAfter - Returns the index of the first indexed instruction after MI, or the end index of its basic block. MI is not required to have an index.
Definition at line 459 of file SlotIndexes.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::MachineBasicBlock::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), getMBBEndIdx(), llvm::MachineInstr::getParent(), I, and llvm::AArch64CC::MI.
Referenced by insertMachineInstrInMaps().
SlotIndex llvm::SlotIndexes::getIndexBefore | ( | const MachineInstr * | MI | ) | const [inline] |
getIndexBefore - Returns the index of the last indexed instruction before MI, or the start index of its basic block. MI is not required to have an index.
Definition at line 442 of file SlotIndexes.h.
References llvm::MachineBasicBlock::begin(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), getMBBStartIdx(), llvm::MachineInstr::getParent(), I, and llvm::AArch64CC::MI.
Referenced by insertMachineInstrInMaps().
MachineInstr* llvm::SlotIndexes::getInstructionFromIndex | ( | SlotIndex | index | ) | const [inline] |
Returns the instruction for the given index, or null if the given index has no instruction associated with it.
Definition at line 423 of file SlotIndexes.h.
References llvm::IndexListEntry::getInstr(), and llvm::SlotIndex::isValid().
Referenced by llvm::LiveIntervals::getInstructionFromIndex(), getMBBFromIndex(), and llvm::LiveRange::overlaps().
SlotIndex llvm::SlotIndexes::getInstructionIndex | ( | const MachineInstr * | MI | ) | const [inline] |
Returns the base index for the given instruction.
Definition at line 414 of file SlotIndexes.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), and llvm::getBundleStart().
Referenced by llvm::LiveRangeCalc::createDeadDefs(), llvm::LiveRangeCalc::extendToUses(), llvm::LiveIntervals::getInstructionIndex(), llvm::LiveIntervals::handleMove(), llvm::LiveIntervals::handleMoveIntoBundle(), llvm::MachineBasicBlock::print(), and repairIndexesInRange().
SlotIndex llvm::SlotIndexes::getLastIndex | ( | ) | [inline] |
Returns the base index of the last slot in this analysis.
Definition at line 403 of file SlotIndexes.h.
References llvm::iplist< NodeTy, Traits >::back().
Referenced by getNextNonNullIndex().
MachineBasicBlock* llvm::SlotIndexes::getMBBCoveringRange | ( | SlotIndex | start, |
SlotIndex | end | ||
) | const [inline] |
Returns the MBB covering the given range, or null if the range covers more than one basic block.
Definition at line 540 of file SlotIndexes.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), and llvm::SmallVectorTemplateCommon< T, typename >::end().
SlotIndex llvm::SlotIndexes::getMBBEndIdx | ( | unsigned | Num | ) | const [inline] |
Returns the last index in the given basic block number.
Definition at line 496 of file SlotIndexes.h.
References getMBBRange().
Referenced by llvm::LiveRangeCalc::extendToUses(), getIndexAfter(), llvm::LiveIntervals::getMBBEndIdx(), getMBBFromIndex(), llvm::LiveIntervals::hasPHIKill(), and repairIndexesInRange().
SlotIndex llvm::SlotIndexes::getMBBEndIdx | ( | const MachineBasicBlock * | mbb | ) | const [inline] |
Returns the last index in the given basic block.
Definition at line 501 of file SlotIndexes.h.
References getMBBRange().
MachineBasicBlock* llvm::SlotIndexes::getMBBFromIndex | ( | SlotIndex | index | ) | const [inline] |
Returns the basic block which the given index falls in.
Definition at line 506 of file SlotIndexes.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), getInstructionFromIndex(), getMBBEndIdx(), I, llvm::AArch64CC::MI, and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::LiveRangeCalc::extend(), llvm::LiveIntervals::getMBBFromIndex(), llvm::LiveIntervals::intervalIsInOneMBB(), and llvm::LiveIntervals::pruneValue().
const std::pair<SlotIndex, SlotIndex>& llvm::SlotIndexes::getMBBRange | ( | unsigned | Num | ) | const [inline] |
Return the (start,end) range of the given basic block number.
Definition at line 475 of file SlotIndexes.h.
Referenced by getMBBEndIdx(), getMBBRange(), getMBBStartIdx(), llvm::LiveIntervals::pruneValue(), llvm::SplitEditor::splitLiveThroughBlock(), llvm::SplitEditor::splitRegInBlock(), and llvm::SplitEditor::splitRegOutBlock().
const std::pair<SlotIndex, SlotIndex>& llvm::SlotIndexes::getMBBRange | ( | const MachineBasicBlock * | MBB | ) | const [inline] |
Return the (start,end) range of the given basic block.
Definition at line 481 of file SlotIndexes.h.
References getMBBRange(), and llvm::MachineBasicBlock::getNumber().
SlotIndex llvm::SlotIndexes::getMBBStartIdx | ( | unsigned | Num | ) | const [inline] |
Returns the first index in the given basic block number.
Definition at line 486 of file SlotIndexes.h.
References getMBBRange().
Referenced by llvm::LiveRangeCalc::createDeadDefs(), llvm::LiveRangeCalc::extend(), getIndexBefore(), llvm::LiveIntervals::getMBBStartIdx(), insertMBBInMaps(), llvm::MachineBasicBlock::print(), and repairIndexesInRange().
SlotIndex llvm::SlotIndexes::getMBBStartIdx | ( | const MachineBasicBlock * | mbb | ) | const [inline] |
Returns the first index in the given basic block.
Definition at line 491 of file SlotIndexes.h.
References getMBBRange().
SlotIndex llvm::SlotIndexes::getNextNonNullIndex | ( | SlotIndex | Index | ) | [inline] |
Returns the next non-null index, if one exists. Otherwise returns getLastIndex().
Definition at line 429 of file SlotIndexes.h.
References llvm::iplist< NodeTy, Traits >::end(), getLastIndex(), and I.
Referenced by llvm::LiveRange::isZeroLength().
SlotIndex llvm::SlotIndexes::getZeroIndex | ( | ) | [inline] |
Returns the zero index for this analysis.
Definition at line 397 of file SlotIndexes.h.
References llvm::iplist< NodeTy, Traits >::front(), and llvm::IndexListEntry::getIndex().
bool llvm::SlotIndexes::hasIndex | ( | const MachineInstr * | instr | ) | const [inline] |
Returns true if the given machine instr is mapped to an index, otherwise returns false.
Definition at line 409 of file SlotIndexes.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::count().
Referenced by llvm::LiveIntervals::isNotInMIMap(), llvm::MachineBasicBlock::print(), repairIndexesInRange(), and llvm::LiveIntervals::repairIntervalsInRange().
SlotIndex llvm::SlotIndexes::insertMachineInstrInMaps | ( | MachineInstr * | mi, |
bool | Late = false |
||
) | [inline] |
Insert the given machine instruction into the mapping. Returns the assigned index. If Late is set and there are null indexes between mi's neighboring instructions, create the new index after the null indexes instead of before them.
Definition at line 569 of file SlotIndexes.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), getIndexAfter(), getIndexBefore(), llvm::MachineInstr::getParent(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::insert(), llvm::ilist< NodeTy >::insert(), llvm::MachineInstr::isDebugValue(), llvm::MachineInstr::isInsideBundle(), and renumberIndexes().
Referenced by llvm::LiveIntervals::handleMove(), llvm::LiveIntervals::InsertMachineInstrInMaps(), llvm::LiveIntervals::InsertMachineInstrRangeInMaps(), llvm::LiveRangeEdit::rematerializeAt(), and repairIndexesInRange().
void llvm::SlotIndexes::insertMBBInMaps | ( | MachineBasicBlock * | mbb | ) | [inline] |
Add the given MachineBasicBlock into the maps.
Definition at line 639 of file SlotIndexes.h.
References llvm::iplist< NodeTy, Traits >::back(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::MachineFunction::end(), getMBBStartIdx(), llvm::MachineBasicBlock::getNumber(), llvm::MachineBasicBlock::getParent(), llvm::ilist< NodeTy >::insert(), llvm::iplist< NodeTy, Traits >::insertAfter(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), renumberIndexes(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::LiveIntervals::insertMBBInMaps(), and llvm::MachineBasicBlock::SplitCriticalEdge().
void SlotIndexes::releaseMemory | ( | ) | [override, virtual] |
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memory when it is no longer needed. The default behavior of passes is to hold onto memory for the entire duration of their lifetime (which is the entire compile time). For pipelined passes, this is not a big deal because that memory gets recycled every time the pass is invoked on another program unit. For IP passes, it is more important to free memory when it is unused.
Optionally implement this function to release pass memory when it is no longer used.
Reimplemented from llvm::Pass.
Definition at line 33 of file SlotIndexes.cpp.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::clear(), llvm::SmallVectorImpl< T >::clear(), llvm::iplist< NodeTy, Traits >::clear(), and llvm::BumpPtrAllocatorImpl< AllocatorT, SlabSize, SizeThreshold >::Reset().
void llvm::SlotIndexes::removeMachineInstrFromMaps | ( | MachineInstr * | mi | ) | [inline] |
Remove the given machine instruction from the mapping.
Definition at line 610 of file SlotIndexes.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::erase(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), and llvm::IndexListEntry::setInstr().
Referenced by llvm::LiveIntervals::handleMove(), llvm::LiveIntervals::RemoveMachineInstrFromMaps(), and repairIndexesInRange().
void SlotIndexes::renumberIndexes | ( | ) |
Renumber the index list, providing space for new instructions.
Definition at line 111 of file SlotIndexes.cpp.
References llvm::iplist< NodeTy, Traits >::begin(), llvm::dbgs(), DEBUG, llvm::iplist< NodeTy, Traits >::end(), I, and llvm::SlotIndex::InstrDist.
Referenced by insertMachineInstrInMaps(), and insertMBBInMaps().
void SlotIndexes::repairIndexesInRange | ( | MachineBasicBlock * | MBB, |
MachineBasicBlock::iterator | Begin, | ||
MachineBasicBlock::iterator | End | ||
) |
Repair indexes after adding and removing instructions.
Definition at line 146 of file SlotIndexes.cpp.
References llvm::MachineBasicBlock::begin(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::MachineBasicBlock::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), getInstructionIndex(), getMBBEndIdx(), getMBBStartIdx(), hasIndex(), I, insertMachineInstrInMaps(), llvm::MachineInstr::isDebugValue(), llvm::AArch64CC::MI, and removeMachineInstrFromMaps().
Referenced by llvm::LiveIntervals::repairIntervalsInRange().
void llvm::SlotIndexes::replaceMachineInstrInMaps | ( | MachineInstr * | mi, |
MachineInstr * | newMI | ||
) | [inline] |
ReplaceMachineInstrInMaps - Replacing a machine instr with a new one in maps used by register allocator.
Definition at line 625 of file SlotIndexes.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::erase(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::find(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::insert(), and llvm::IndexListEntry::setInstr().
Referenced by llvm::LiveIntervals::ReplaceMachineInstrInMaps().
bool SlotIndexes::runOnMachineFunction | ( | MachineFunction & | MF | ) | [override, virtual] |
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis.
Implements llvm::MachineFunctionPass.
Definition at line 41 of file SlotIndexes.cpp.
References llvm::iplist< NodeTy, Traits >::back(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::MachineBasicBlock::begin(), llvm::MachineFunction::begin(), llvm::dbgs(), DEBUG, llvm::SmallVectorBase::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::empty(), llvm::iplist< NodeTy, Traits >::empty(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::MachineBasicBlock::end(), llvm::MachineFunction::end(), llvm::MachineBasicBlock::getNumber(), llvm::MachineFunction::getNumBlockIDs(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT >::insert(), llvm::SlotIndex::InstrDist, llvm::MachineInstr::isDebugValue(), llvm::MachineFunction::print(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::ilist< NodeTy >::push_back(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorImpl< T >::resize(), and llvm::MachineFunction::size().
char SlotIndexes::ID = 0 [static] |
Definition at line 374 of file SlotIndexes.h.