|
LLVM
3.7.0
|
#include <RegisterScavenging.h>
Public Member Functions | |
| RegScavenger () | |
| void | enterBasicBlock (MachineBasicBlock *mbb) |
| Start tracking liveness from the begin of the specific basic block. More... | |
| void | initRegState () |
| Allow resetting register state info for multiple passes over/within the same function. More... | |
| void | forward () |
| Move the internal MBB iterator and update register states. More... | |
| void | forward (MachineBasicBlock::iterator I) |
| Move the internal MBB iterator and update register states until it has processed the specific iterator. More... | |
| void | unprocess () |
| Invert the behavior of forward() on the current instruction (undo the changes to the available registers made by forward()). More... | |
| void | unprocess (MachineBasicBlock::iterator I) |
| Unprocess instructions until you reach the provided iterator. More... | |
| void | skipTo (MachineBasicBlock::iterator I) |
| Move the internal MBB iterator but do not update register states. More... | |
| MachineBasicBlock::iterator | getCurrentPosition () const |
| bool | isRegUsed (unsigned Reg, bool includeReserved=true) const |
| Return if a specific register is currently used. More... | |
| BitVector | getRegsAvailable (const TargetRegisterClass *RC) |
| Return all available registers in the register class in Mask. More... | |
| unsigned | FindUnusedReg (const TargetRegisterClass *RegClass) const |
| Find an unused register of the specified register class. More... | |
| 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) |
| Make a register of the specific register class available and do the appropriate bookkeeping. More... | |
| unsigned | scavengeRegister (const TargetRegisterClass *RegClass, int SPAdj) |
| void | setRegUsed (unsigned Reg) |
| Tell the scavenger a register is used. More... | |
Definition at line 31 of file RegisterScavenging.h.
|
inline |
Definition at line 71 of file RegisterScavenging.h.
|
inline |
Add a scavenging frame index.
Definition at line 122 of file RegisterScavenging.h.
References llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().
Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), llvm::MipsSEFrameLowering::determineCalleeSaves(), llvm::HexagonFrameLowering::determineCalleeSaves(), llvm::ARMFrameLowering::determineCalleeSaves(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::SystemZFrameLowering::processFunctionBeforeFrameFinalized(), and llvm::XCoreFrameLowering::processFunctionBeforeFrameFinalized().
| void RegScavenger::enterBasicBlock | ( | MachineBasicBlock * | mbb | ) |
Start tracking liveness from the begin of the specific basic block.
Definition at line 64 of file RegisterScavenging.cpp.
References llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MCRegisterInfo::getNumRegUnits(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), initRegState(), llvm::BitVector::resize(), and llvm::MachineRegisterInfo::tracksLiveness().
Referenced by llvm::SIInstrInfo::calculateLDSSpillAddress(), and llvm::Mips16InstrInfo::loadImmediate().
| unsigned RegScavenger::FindUnusedReg | ( | const TargetRegisterClass * | RegClass | ) | const |
Find an unused register of the specified register class.
Return 0 if none is found.
Definition at line 261 of file RegisterScavenging.cpp.
References llvm::TargetRegisterClass::begin(), llvm::dbgs(), DEBUG, llvm::TargetRegisterClass::end(), llvm::MCRegisterInfo::getName(), I, and isRegUsed().
| void RegScavenger::forward | ( | ) |
Move the internal MBB iterator and update register states.
Definition at line 166 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(), isRegUsed(), llvm::MachineOperand::isUndef(), llvm::MachineOperand::isUse(), llvm::MCRegisterInfo::DiffListIterator::isValid(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm_unreachable, and llvm::MachineFunction::verify().
Referenced by forward(), and llvm::Mips16InstrInfo::loadImmediate().
|
inline |
Move the internal MBB iterator and update register states until it has processed the specific iterator.
Definition at line 86 of file RegisterScavenging.h.
References llvm::MachineBasicBlock::begin(), forward(), and I.
|
inline |
Definition at line 107 of file RegisterScavenging.h.
| BitVector RegScavenger::getRegsAvailable | ( | const TargetRegisterClass * | RC | ) |
Return all available registers in the register class in Mask.
getRegsAvailable - Return all available registers in the register class in Mask.
Definition at line 274 of file RegisterScavenging.cpp.
References llvm::TargetRegisterClass::begin(), llvm::TargetRegisterClass::end(), llvm::MCRegisterInfo::getNumRegs(), I, isRegUsed(), and llvm::BitVector::set().
Referenced by llvm::Mips16InstrInfo::loadImmediate(), and scavengeRegister().
|
inline |
Get an array of scavenging frame indices.
Definition at line 137 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 | ( | ) |
Allow resetting register state info for multiple passes over/within the same function.
Definition at line 39 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 setRegUsed().
Referenced by enterBasicBlock().
Return if a specific register is currently used.
Definition at line 252 of file RegisterScavenging.cpp.
References llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::BitVector::test().
Referenced by FindUnusedReg(), forward(), getRegsAvailable(), and scavengeRegister().
Query whether a frame index is a scavenging frame index.
Definition at line 127 of file RegisterScavenging.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), I, and llvm::ARM_PROC::IE.
Referenced by llvm::ThumbRegisterInfo::eliminateFrameIndex(), llvm::AArch64RegisterInfo::eliminateFrameIndex(), and llvm::ARMBaseRegisterInfo::eliminateFrameIndex().
| unsigned RegScavenger::scavengeRegister | ( | const TargetRegisterClass * | RegClass, |
| MachineBasicBlock::iterator | I, | ||
| int | SPAdj | ||
| ) |
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 364 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(), isRegUsed(), llvm::MachineOperand::isUndef(), llvm::MachineOperand::isUse(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm::TargetInstrInfo::loadRegFromStackSlot(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::BitVector::reset(), llvm::TargetRegisterInfo::saveScavengerRegister(), llvm::SI, llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::TargetInstrInfo::storeRegToStackSlot().
Referenced by llvm::SIInstrInfo::calculateLDSSpillAddress(), llvm::SIRegisterInfo::eliminateFrameIndex(), InsertFPConstInst(), InsertSPConstInst(), and scavengeRegister().
|
inline |
Definition at line 150 of file RegisterScavenging.h.
References scavengeRegister().
| void RegScavenger::setRegUsed | ( | unsigned | Reg | ) |
Tell the scavenger a register is used.
setUsed - Set the register units of this register as used.
Definition at line 34 of file RegisterScavenging.cpp.
References llvm::MCRegisterInfo::DiffListIterator::isValid(), and llvm::BitVector::reset().
Referenced by initRegState(), InsertFPConstInst(), and InsertSPConstInst().
|
inline |
Move the internal MBB iterator but do not update register states.
Definition at line 101 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 147 of file RegisterScavenging.cpp.
References llvm::MachineBasicBlock::begin(), and llvm::MachineInstr::isDebugValue().
Referenced by unprocess().
|
inline |
Unprocess instructions until you reach the provided iterator.
Definition at line 96 of file RegisterScavenging.h.
References unprocess().
1.8.6