LLVM API Documentation
#include <RegisterScavenging.h>
Public Member Functions | |
RegScavenger () | |
void | enterBasicBlock (MachineBasicBlock *mbb) |
void | initRegState () |
void | forward () |
forward - Move the internal MBB iterator and update register states. More... | |
void | forward (MachineBasicBlock::iterator I) |
void | unprocess () |
void | unprocess (MachineBasicBlock::iterator I) |
Unprocess instructions until you reach the provided iterator. More... | |
void | skipTo (MachineBasicBlock::iterator I) |
skipTo - Move the internal MBB iterator but do not update register states. More... | |
MachineBasicBlock::iterator | getCurrentPosition () const |
void | getRegsUsed (BitVector &used, bool includeReserved) |
getRegsUsed - return all registers currently in use in used. More... | |
BitVector | getRegsAvailable (const TargetRegisterClass *RC) |
unsigned | FindUnusedReg (const TargetRegisterClass *RegClass) const |
void | addScavengingFrameIndex (int FI) |
Add a scavenging frame index. More... | |
bool | isScavengingFrameIndex (int FI) const |
Query whether a frame index is a scavenging frame index. More... | |
void | getScavengingFrameIndices (SmallVectorImpl< int > &A) const |
Get an array of scavenging frame indices. More... | |
unsigned | scavengeRegister (const TargetRegisterClass *RegClass, MachineBasicBlock::iterator I, int SPAdj) |
unsigned | scavengeRegister (const TargetRegisterClass *RegClass, int SPAdj) |
void | setUsed (unsigned Reg) |
setUsed - Set the register and its sub-registers as being used. More... | |
Definition at line 31 of file RegisterScavenging.h.
|
inline |
Definition at line 75 of file RegisterScavenging.h.
|
inline |
Add a scavenging frame index.
Definition at line 128 of file RegisterScavenging.h.
References llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().
Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), llvm::MipsSEFrameLowering::processFunctionBeforeCalleeSavedScan(), llvm::XCoreFrameLowering::processFunctionBeforeCalleeSavedScan(), llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan(), llvm::AArch64FrameLowering::processFunctionBeforeCalleeSavedScan(), and llvm::SystemZFrameLowering::processFunctionBeforeFrameFinalized().
void RegScavenger::enterBasicBlock | ( | MachineBasicBlock * | mbb | ) |
enterBasicBlock - Start tracking liveness from the begin of the specific basic block.
Definition at line 70 of file RegisterScavenging.cpp.
References llvm::TargetRegisterInfo::getCalleeSavedRegs(), llvm::TargetMachine::getInstrInfo(), llvm::MCRegisterInfo::getNumRegs(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getRegInfo(), llvm::TargetMachine::getRegisterInfo(), llvm::MachineFunction::getTarget(), initRegState(), llvm::BitVector::resize(), llvm::BitVector::set(), llvm::SystemZISD::TM, and llvm::MachineRegisterInfo::tracksLiveness().
Referenced by llvm::Mips16InstrInfo::loadImmediate().
unsigned RegScavenger::FindUnusedReg | ( | const TargetRegisterClass * | RegClass | ) | const |
FindUnusedReg - Find a unused register of the specified register class. Return 0 if none is found.
Definition at line 258 of file RegisterScavenging.cpp.
References llvm::TargetRegisterClass::begin(), llvm::dbgs(), DEBUG, llvm::TargetRegisterClass::end(), llvm::MCRegisterInfo::getName(), and I.
void RegScavenger::forward | ( | ) |
forward - Move the internal MBB iterator and update register states.
Definition at line 171 of file RegisterScavenging.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::MachineBasicBlock::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::MachineBasicBlock::end(), llvm::MachineBasicBlock::getParent(), llvm::MachineOperand::getReg(), I, llvm::ARM_PROC::IE, llvm::MachineOperand::isDef(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUndef(), llvm::MachineOperand::isUse(), llvm::MCRegisterInfo::DiffListIterator::isValid(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm_unreachable, llvm::next(), setUsed(), and llvm::MachineFunction::verify().
Referenced by forward(), and llvm::Mips16InstrInfo::loadImmediate().
|
inline |
forward - Move the internal MBB iterator and update register states until it has processed the specific iterator.
Definition at line 91 of file RegisterScavenging.h.
References llvm::MachineBasicBlock::begin(), forward(), and I.
|
inline |
Definition at line 112 of file RegisterScavenging.h.
BitVector RegScavenger::getRegsAvailable | ( | const TargetRegisterClass * | RC | ) |
getRegsAvailable - Return all available registers in the register class in Mask.
Definition at line 271 of file RegisterScavenging.cpp.
References llvm::TargetRegisterClass::begin(), llvm::TargetRegisterClass::end(), llvm::MCRegisterInfo::getNumRegs(), I, and llvm::BitVector::set().
Referenced by llvm::Mips16InstrInfo::loadImmediate(), and scavengeRegister().
getRegsUsed - return all registers currently in use in used.
Definition at line 249 of file RegisterScavenging.cpp.
References llvm::BitVector::flip(), llvm::MachineRegisterInfo::getReservedRegs(), and llvm::BitVector::reset().
|
inline |
Get an array of scavenging frame indices.
Definition at line 143 of file RegisterScavenging.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), I, llvm::ARM_PROC::IE, and llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().
void RegScavenger::initRegState | ( | ) |
initRegState - allow resetting register state info for multiple passes over/within the same function.
Definition at line 46 of file RegisterScavenging.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::BitVector::find_first(), llvm::BitVector::find_next(), llvm::MachineFunction::getFrameInfo(), llvm::MachineBasicBlock::getParent(), llvm::MachineFrameInfo::getPristineRegs(), I, llvm::ARM_PROC::IE, llvm::MachineBasicBlock::livein_begin(), llvm::MachineBasicBlock::livein_end(), llvm::BitVector::set(), and setUsed().
Referenced by enterBasicBlock().
|
inline |
Query whether a frame index is a scavenging frame index.
Definition at line 133 of file RegisterScavenging.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), I, and llvm::ARM_PROC::IE.
Referenced by llvm::Thumb1RegisterInfo::eliminateFrameIndex(), and llvm::ARMBaseRegisterInfo::eliminateFrameIndex().
unsigned RegScavenger::scavengeRegister | ( | const TargetRegisterClass * | RegClass, |
MachineBasicBlock::iterator | I, | ||
int | SPAdj | ||
) |
scavengeRegister - Make a register of the specific register class available and do the appropriate bookkeeping. SPAdj is the stack adjustment due to call frame, it's passed along to eliminateFrameIndex(). Returns the scavenged register.
Definition at line 361 of file RegisterScavenging.cpp.
References llvm::BitVector::any(), llvm::dbgs(), DEBUG, llvm::TargetRegisterInfo::eliminateFrameIndex(), llvm::ISD::FrameIndex, llvm::TargetRegisterInfo::getAllocatableSet(), getFrameIndexOperandNum(), llvm::MCRegisterInfo::getName(), llvm::MachineOperand::getReg(), getRegsAvailable(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUndef(), llvm::MachineOperand::isUse(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm::TargetInstrInfo::loadRegFromStackSlot(), llvm::prior(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::BitVector::reset(), llvm::TargetRegisterInfo::saveScavengerRegister(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::TargetInstrInfo::storeRegToStackSlot().
Referenced by llvm::XCoreRegisterInfo::eliminateFrameIndex(), and scavengeRegister().
|
inline |
Definition at line 156 of file RegisterScavenging.h.
References scavengeRegister().
void RegScavenger::setUsed | ( | unsigned | Reg | ) |
setUsed - Set the register and its sub-registers as being used.
setUsed - Tell the scavenger a register is used.
Definition at line 33 of file RegisterScavenging.cpp.
References llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::BitVector::reset().
Referenced by forward(), initRegState(), and unprocess().
|
inline |
skipTo - Move the internal MBB iterator but do not update register states.
Definition at line 106 of file RegisterScavenging.h.
References I.
void RegScavenger::unprocess | ( | ) |
Invert the behavior of forward() on the current instruction (undo the changes to the available registers made by forward()).
Definition at line 152 of file RegisterScavenging.cpp.
References llvm::MachineBasicBlock::begin(), llvm::MachineInstr::isDebugValue(), and setUsed().
Referenced by unprocess().
|
inline |
Unprocess instructions until you reach the provided iterator.
Definition at line 101 of file RegisterScavenging.h.
References unprocess().