LLVM API Documentation
#include <LiveRegMatrix.h>
Public Types | |
enum | InterferenceKind { IK_Free = 0, IK_VirtReg, IK_RegUnit, IK_RegMask } |
Public Member Functions | |
LiveRegMatrix () | |
void | invalidateVirtRegs () |
InterferenceKind | checkInterference (LiveInterval &VirtReg, unsigned PhysReg) |
void | assign (LiveInterval &VirtReg, unsigned PhysReg) |
void | unassign (LiveInterval &VirtReg) |
bool | checkRegMaskInterference (LiveInterval &VirtReg, unsigned PhysReg=0) |
bool | checkRegUnitInterference (LiveInterval &VirtReg, unsigned PhysReg) |
LiveIntervalUnion::Query & | query (LiveInterval &VirtReg, unsigned RegUnit) |
LiveIntervalUnion * | getLiveUnions () |
![]() | |
FunctionPass (char &pid) | |
Pass * | createPrinterPass (raw_ostream &O, const std::string &Banner) const |
createPrinterPass - Get a function printer pass. More... | |
virtual void | assignPassManager (PMStack &PMS, PassManagerType T) |
virtual PassManagerType | getPotentialPassManagerType () const |
Return what kind of Pass Manager can manage this pass. More... | |
![]() | |
Pass (PassKind K, char &pid) | |
virtual | ~Pass () |
PassKind | getPassKind () const |
virtual const char * | getPassName () const |
AnalysisID | getPassID () const |
getPassID - Return the PassID number that corresponds to this pass. More... | |
virtual bool | doInitialization (Module &) |
virtual bool | doFinalization (Module &) |
virtual void | print (raw_ostream &O, const Module *M) const |
void | dump () const |
virtual void | preparePassManager (PMStack &) |
Check if available pass managers are suitable for this pass or not. More... | |
void | setResolver (AnalysisResolver *AR) |
AnalysisResolver * | getResolver () const |
virtual void * | getAdjustedAnalysisPointer (AnalysisID ID) |
virtual ImmutablePass * | getAsImmutablePass () |
virtual PMDataManager * | getAsPMDataManager () |
virtual void | verifyAnalysis () const |
virtual void | dumpPassStructure (unsigned Offset=0) |
template<typename AnalysisType > | |
AnalysisType * | getAnalysisIfAvailable () const |
bool | mustPreserveAnalysisID (char &AID) const |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis () const |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis (Function &F) |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI) const |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI, Function &F) |
Static Public Attributes | |
static char | ID = 0 |
Additional Inherited Members | |
![]() | |
static const PassInfo * | lookupPassInfo (const void *TI) |
static const PassInfo * | lookupPassInfo (StringRef Arg) |
static Pass * | createPass (AnalysisID ID) |
![]() | |
MachineFunctionPass (char &ID) | |
Definition at line 40 of file LiveRegMatrix.h.
Definition at line 82 of file LiveRegMatrix.h.
Definition at line 39 of file LiveRegMatrix.cpp.
void LiveRegMatrix::assign | ( | LiveInterval & | VirtReg, |
unsigned | PhysReg | ||
) |
Assign VirtReg to PhysReg. This will mark VirtReg's live range as occupied in the LiveRegMatrix and update VirtRegMap. The live range is expected to be available in PhysReg.
Definition at line 72 of file LiveRegMatrix.cpp.
References llvm::dbgs(), DEBUG, llvm::MCRegisterInfo::DiffListIterator::isValid(), llvm::LiveInterval::reg, and llvm::MachineRegisterInfo::setPhysRegUsed().
Referenced by llvm::RegAllocBase::allocatePhysRegs().
LiveRegMatrix::InterferenceKind LiveRegMatrix::checkInterference | ( | LiveInterval & | VirtReg, |
unsigned | PhysReg | ||
) |
Check for interference before assigning VirtReg to PhysReg. If this function returns IK_Free, it is legal to assign(VirtReg, PhysReg). When there is more than one kind of interference, the InterferenceKind with the highest enum value is returned.
Definition at line 138 of file LiveRegMatrix.cpp.
References llvm::LiveIntervalUnion::Query::checkInterference(), checkRegMaskInterference(), checkRegUnitInterference(), llvm::LiveRange::empty(), IK_Free, IK_RegMask, IK_RegUnit, IK_VirtReg, llvm::MCRegisterInfo::DiffListIterator::isValid(), and query().
bool LiveRegMatrix::checkRegMaskInterference | ( | LiveInterval & | VirtReg, |
unsigned | PhysReg = 0 |
||
) |
Check for regmask interference only. Return true if VirtReg crosses a regmask operand that clobbers PhysReg. If PhysReg is null, check if VirtReg crosses any regmask operands.
Definition at line 99 of file LiveRegMatrix.cpp.
References llvm::LiveIntervals::checkRegMaskInterference(), llvm::BitVector::clear(), llvm::BitVector::empty(), llvm::LiveInterval::reg, and llvm::BitVector::test().
Referenced by checkInterference().
bool LiveRegMatrix::checkRegUnitInterference | ( | LiveInterval & | VirtReg, |
unsigned | PhysReg | ||
) |
Check for regunit interference only. Return true if VirtReg overlaps a fixed assignment of one of PhysRegs's register units.
Definition at line 117 of file LiveRegMatrix.cpp.
References llvm::LiveRange::empty(), llvm::LiveIntervals::getRegUnit(), llvm::LiveIntervals::getSlotIndexes(), llvm::MCRegisterInfo::DiffListIterator::isValid(), llvm::LiveRange::overlaps(), and llvm::LiveInterval::reg.
Referenced by checkInterference().
|
inline |
Directly access the live interval unions per regunit. This returns an array indexed by the regunit number.
Definition at line 143 of file LiveRegMatrix.h.
|
inline |
Invalidate cached interference queries after modifying virtual register live ranges. Interference checks may return stale information unless caches are invalidated.
Definition at line 80 of file LiveRegMatrix.h.
Referenced by llvm::RegAllocBase::allocatePhysRegs().
LiveIntervalUnion::Query & LiveRegMatrix::query | ( | LiveInterval & | VirtReg, |
unsigned | RegUnit | ||
) |
Query a line of the assigned virtual register matrix directly. Use MCRegUnitIterator to enumerate all regunits in the desired PhysReg. This returns a reference to an internal Query data structure that is only valid until the next query() call.
Definition at line 130 of file LiveRegMatrix.cpp.
References llvm::LiveIntervalUnion::Query::init().
Referenced by checkInterference().
void LiveRegMatrix::unassign | ( | LiveInterval & | VirtReg | ) |
Unassign VirtReg from its PhysReg. Assuming that VirtReg was previously assigned to a PhysReg, this undoes the assignment and updates VirtRegMap accordingly.
Definition at line 86 of file LiveRegMatrix.cpp.
References llvm::dbgs(), DEBUG, llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::LiveInterval::reg.
|
static |
Definition at line 66 of file LiveRegMatrix.h.