LLVM API Documentation
#include <LiveRangeEdit.h>
Definition at line 37 of file LiveRangeEdit.h.
typedef SmallVectorImpl<unsigned>::const_iterator llvm::LiveRangeEdit::iterator |
Iterator for accessing the new registers added by this edit.
Definition at line 134 of file LiveRangeEdit.h.
llvm::LiveRangeEdit::LiveRangeEdit | ( | LiveInterval * | parent, |
SmallVectorImpl< unsigned > & | newRegs, | ||
MachineFunction & | MF, | ||
LiveIntervals & | lis, | ||
VirtRegMap * | vrm, | ||
Delegate * | delegate = nullptr |
||
) | [inline] |
Create a LiveRangeEdit for breaking down parent into smaller pieces.
parent | The register being spilled or split. |
newRegs | List to receive any new registers created. This needn't be empty initially, any existing registers are ignored. |
MF | The MachineFunction the live range edit is taking place in. |
lis | The collection of all live intervals in this function. |
vrm | Map of virtual registers to physical registers for this function. If NULL, no virtual register map updates will be done. This could be the case if called before Regalloc. |
Definition at line 115 of file LiveRangeEdit.h.
References llvm::MachineRegisterInfo::setDelegate().
llvm::LiveRangeEdit::~LiveRangeEdit | ( | ) | [inline] |
Definition at line 125 of file LiveRangeEdit.h.
References llvm::MachineRegisterInfo::resetDelegate().
anyRematerializable - Return true if any parent values may be rematerializable. This function must be called before any rematerialization is attempted.
Definition at line 76 of file LiveRangeEdit.cpp.
References llvm::SmallPtrSetImplBase::empty().
Referenced by llvm::SplitEditor::reset().
iterator llvm::LiveRangeEdit::begin | ( | ) | const [inline] |
Definition at line 135 of file LiveRangeEdit.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin().
Referenced by llvm::SplitEditor::finish().
void LiveRangeEdit::calculateRegClassAndHint | ( | MachineFunction & | MF, |
const MachineLoopInfo & | Loops, | ||
const MachineBlockFrequencyInfo & | MBFI | ||
) |
calculateRegClassAndHint - Recompute register class and hint for each new register.
Definition at line 407 of file LiveRangeEdit.cpp.
References llvm::VirtRegAuxInfo::calculateSpillWeightAndHint(), llvm::dbgs(), DEBUG, llvm::LiveIntervals::getInterval(), llvm::TargetRegisterClass::getName(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getTarget(), I, llvm::MachineRegisterInfo::recomputeRegClass(), llvm::LiveInterval::reg, and size().
Referenced by llvm::SplitEditor::finish().
bool LiveRangeEdit::canRematerializeAt | ( | Remat & | RM, |
SlotIndex | UseIdx, | ||
bool | cheapAsAMove | ||
) |
canRematerializeAt - Determine if ParentVNI can be rematerialized at UseIdx. It is assumed that parent_.getVNINfoAt(UseIdx) == ParentVNI. When cheapAsAMove is set, only cheap remats are allowed.
Definition at line 118 of file LiveRangeEdit.cpp.
References llvm::SmallPtrSetImpl< PtrType >::count(), llvm::VNInfo::def, llvm::LiveIntervals::getInstructionFromIndex(), llvm::LiveIntervals::getInstructionIndex(), llvm::TargetInstrInfo::isAsCheapAsAMove(), llvm::LiveRangeEdit::Remat::OrigMI, and llvm::LiveRangeEdit::Remat::ParentVNI.
bool LiveRangeEdit::checkRematerializable | ( | VNInfo * | VNI, |
const MachineInstr * | DefMI, | ||
AliasAnalysis * | aa | ||
) |
checkRematerializable - Manually add VNI to the list of rematerializable values if DefMI may be rematerializable.
Definition at line 51 of file LiveRangeEdit.cpp.
References llvm::SmallPtrSetImpl< PtrType >::insert(), and llvm::TargetInstrInfo::isTriviallyReMaterializable().
unsigned llvm::LiveRangeEdit::create | ( | ) | [inline] |
Definition at line 157 of file LiveRangeEdit.h.
References createFrom(), and getReg().
LiveInterval& llvm::LiveRangeEdit::createEmptyInterval | ( | ) | [inline] |
create - Create a new register with the same class and original slot as parent.
Definition at line 153 of file LiveRangeEdit.h.
References createEmptyIntervalFrom(), and getReg().
Referenced by llvm::SplitEditor::finish(), and llvm::SplitEditor::openIntv().
createEmptyIntervalFrom - Create a new empty interval based on OldReg.
Definition at line 34 of file LiveRangeEdit.cpp.
References llvm::LiveIntervals::createEmptyInterval(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::VirtRegMap::getOriginal(), llvm::MachineRegisterInfo::getRegClass(), LI, and llvm::VirtRegMap::setIsSplitFromReg().
Referenced by createEmptyInterval(), and eliminateDeadDefs().
unsigned LiveRangeEdit::createFrom | ( | unsigned | OldReg | ) |
createFrom - Create a new virtual register based on OldReg.
Definition at line 43 of file LiveRangeEdit.cpp.
References llvm::MachineRegisterInfo::createVirtualRegister(), llvm::VirtRegMap::getOriginal(), llvm::MachineRegisterInfo::getRegClass(), and llvm::VirtRegMap::setIsSplitFromReg().
Referenced by create().
bool llvm::LiveRangeEdit::didRematerialize | ( | const VNInfo * | ParentVNI | ) | const [inline] |
didRematerialize - Return true if ParentVNI was rematerialized anywhere.
Definition at line 203 of file LiveRangeEdit.h.
References llvm::SmallPtrSetImpl< PtrType >::count().
Referenced by llvm::SplitEditor::finish().
void LiveRangeEdit::eliminateDeadDefs | ( | SmallVectorImpl< MachineInstr * > & | Dead, |
ArrayRef< unsigned > | RegsBeingSpilled = None |
||
) |
eliminateDeadDefs - Try to delete machine instructions that are now dead (allDefsAreDead returns true). This may cause live intervals to be trimmed and further dead efs to be eliminated. RegsBeingSpilled lists registers currently being spilled by the register allocator. These registers should not be split into new intervals as currently those new intervals are not guaranteed to spill.
Definition at line 331 of file LiveRangeEdit.cpp.
References llvm::SetVector< T, Vector, Set >::back(), llvm::SmallVectorTemplateCommon< T >::back(), llvm::ConnectedVNInfoEqClasses::Classify(), createEmptyIntervalFrom(), llvm::dbgs(), DEBUG, llvm::ConnectedVNInfoEqClasses::Distribute(), llvm::SmallVectorBase::empty(), llvm::SetVector< T, Vector, Set >::empty(), llvm::VirtRegMap::getOriginal(), llvm::LiveRangeEdit::Delegate::LRE_DidCloneVirtReg(), llvm::LiveRangeEdit::Delegate::LRE_WillShrinkVirtReg(), llvm::SetVector< T, Vector, Set >::pop_back(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::LiveInterval::reg, llvm::LiveRange::RenumberValues(), llvm::VirtRegMap::setIsSplitFromReg(), llvm::LiveIntervals::shrinkToUses(), and llvm::ArrayRef< T >::size().
bool llvm::LiveRangeEdit::empty | ( | ) | const [inline] |
Definition at line 138 of file LiveRangeEdit.h.
References size().
Referenced by llvm::SplitEditor::openIntv().
iterator llvm::LiveRangeEdit::end | ( | ) | const [inline] |
Definition at line 136 of file LiveRangeEdit.h.
References llvm::SmallVectorTemplateCommon< T, typename >::end().
Referenced by llvm::SplitEditor::finish().
void LiveRangeEdit::eraseVirtReg | ( | unsigned | Reg | ) |
eraseVirtReg - Notify the delegate that Reg is no longer in use, and try to erase it from LIS.
Definition at line 161 of file LiveRangeEdit.cpp.
References llvm::LiveRangeEdit::Delegate::LRE_CanEraseVirtReg(), and llvm::LiveIntervals::removeInterval().
unsigned llvm::LiveRangeEdit::get | ( | unsigned | idx | ) | const [inline] |
Definition at line 139 of file LiveRangeEdit.h.
Referenced by llvm::SplitEditor::finish().
LiveInterval& llvm::LiveRangeEdit::getParent | ( | ) | const [inline] |
Definition at line 127 of file LiveRangeEdit.h.
Referenced by llvm::SplitEditor::enterIntvAfter(), llvm::SplitEditor::enterIntvAtEnd(), llvm::SplitEditor::enterIntvBefore(), llvm::SplitEditor::finish(), getReg(), llvm::SplitEditor::leaveIntvAfter(), llvm::SplitEditor::leaveIntvAtTop(), llvm::SplitEditor::leaveIntvBefore(), and llvm::SplitEditor::overlapIntv().
unsigned llvm::LiveRangeEdit::getReg | ( | ) | const [inline] |
Definition at line 131 of file LiveRangeEdit.h.
References getParent(), and llvm::LiveInterval::reg.
Referenced by create(), createEmptyInterval(), and llvm::SplitEditor::leaveIntvAfter().
void llvm::LiveRangeEdit::markRematerialized | ( | const VNInfo * | ParentVNI | ) | [inline] |
markRematerialized - explicitly mark a value as rematerialized after doing it manually.
Definition at line 198 of file LiveRangeEdit.h.
References llvm::SmallPtrSetImpl< PtrType >::insert().
ArrayRef<unsigned> llvm::LiveRangeEdit::regs | ( | ) | const [inline] |
Definition at line 141 of file LiveRangeEdit.h.
References llvm::makeArrayRef().
SlotIndex LiveRangeEdit::rematerializeAt | ( | MachineBasicBlock & | MBB, |
MachineBasicBlock::iterator | MI, | ||
unsigned | DestReg, | ||
const Remat & | RM, | ||
const TargetRegisterInfo & | tri, | ||
bool | Late = false |
||
) |
rematerializeAt - Rematerialize RM.ParentVNI into DestReg by inserting an instruction into MBB before MI. The new instruction is mapped, but liveness is not updated. Return the SlotIndex of the new instruction.
Definition at line 148 of file LiveRangeEdit.cpp.
References llvm::SlotIndex::getRegSlot(), llvm::LiveIntervals::getSlotIndexes(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::SlotIndexes::insertMachineInstrInMaps(), llvm::LiveRangeEdit::Remat::OrigMI, llvm::LiveRangeEdit::Remat::ParentVNI, and llvm::TargetInstrInfo::reMaterialize().
unsigned llvm::LiveRangeEdit::size | ( | ) | const [inline] |
Definition at line 137 of file LiveRangeEdit.h.
References llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by calculateRegClassAndHint(), empty(), llvm::SplitEditor::finish(), and llvm::SplitEditor::openIntv().