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 () |
Static Public Attributes | |
static char | ID = 0 |
Definition at line 39 of file LiveRegMatrix.h.
Definition at line 81 of file LiveRegMatrix.h.
Live Register false LiveRegMatrix::LiveRegMatrix | ( | ) |
Definition at line 40 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 75 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 141 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 102 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 120 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().
LiveIntervalUnion* llvm::LiveRegMatrix::getLiveUnions | ( | ) | [inline] |
Directly access the live interval unions per regunit. This returns an array indexed by the regunit number.
Definition at line 142 of file LiveRegMatrix.h.
void llvm::LiveRegMatrix::invalidateVirtRegs | ( | ) | [inline] |
Invalidate cached interference queries after modifying virtual register live ranges. Interference checks may return stale information unless caches are invalidated.
Definition at line 79 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 133 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 89 of file LiveRegMatrix.cpp.
References llvm::dbgs(), DEBUG, llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::LiveInterval::reg.
char LiveRegMatrix::ID = 0 [static] |
Definition at line 65 of file LiveRegMatrix.h.