LLVM  4.0.0
Classes | Public Member Functions | List of all members
llvm::RegScavenger Class Reference

#include <RegisterScavenging.h>

Public Member Functions

 RegScavenger ()
 
void enterBasicBlock (MachineBasicBlock &MBB)
 Start tracking liveness from the begin of basic block MBB. More...
 
void enterBasicBlockEnd (MachineBasicBlock &MBB)
 Start tracking liveness from the end of basic block MBB. 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 backward ()
 Update internal register state and move MBB iterator backwards. More...
 
void backward (MachineBasicBlock::iterator I)
 Call backward() as long as the internal iterator does not point to I. 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, LaneBitmask LaneMask=LaneBitmask::getAll())
 Tell the scavenger a register is used. More...
 

Detailed Description

Definition at line 32 of file RegisterScavenging.h.

Constructor & Destructor Documentation

llvm::RegScavenger::RegScavenger ( )
inline

Definition at line 72 of file RegisterScavenging.h.

Member Function Documentation

void llvm::RegScavenger::addScavengingFrameIndex ( int  FI)
inline
void RegScavenger::backward ( )

Update internal register state and move MBB iterator backwards.

Contrary to unprocess() this method gives precise results even in the absence of kill flags.

Definition at line 262 of file RegisterScavenging.cpp.

References assert(), llvm::MachineBasicBlock::begin(), llvm::MCRegisterInfo::getNumRegUnits(), llvm::MCRegUnitRootIterator::isValid(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm::MachineInstr::operands(), llvm::BitVector::set(), and llvm::MachineInstr::uses().

Referenced by backward().

void llvm::RegScavenger::backward ( MachineBasicBlock::iterator  I)
inline

Call backward() as long as the internal iterator does not point to I.

Definition at line 109 of file RegisterScavenging.h.

References backward().

void RegScavenger::enterBasicBlock ( MachineBasicBlock MBB)

Start tracking liveness from the begin of basic block MBB.

Definition at line 83 of file RegisterScavenging.cpp.

Referenced by llvm::SIInstrInfo::calculateLDSSpillAddress(), doScavengeFrameVirtualRegs(), and llvm::Mips16InstrInfo::loadImmediate().

void RegScavenger::enterBasicBlockEnd ( MachineBasicBlock MBB)

Start tracking liveness from the end of basic block MBB.

Use backward() to move towards the beginning of the block. This is preferred to enterBasicBlock() and forward() because it does not depend on the presence of kill flags.

Definition at line 88 of file RegisterScavenging.cpp.

References llvm::MachineBasicBlock::begin(), llvm::MachineBasicBlock::end(), and llvm::MachineBasicBlock::successors().

Referenced by llvm::SIInstrInfo::insertIndirectBranch().

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 313 of file RegisterScavenging.cpp.

References llvm::dbgs(), DEBUG, llvm::MCRegisterInfo::getName(), and isRegUsed().

Referenced by llvm::LanaiRegisterInfo::eliminateFrameIndex().

void RegScavenger::forward ( )
void llvm::RegScavenger::forward ( MachineBasicBlock::iterator  I)
inline

Move the internal MBB iterator and update register states until it has processed the specific iterator.

Definition at line 89 of file RegisterScavenging.h.

References llvm::MachineBasicBlock::begin(), forward(), and I.

MachineBasicBlock::iterator llvm::RegScavenger::getCurrentPosition ( ) const
inline

Definition at line 121 of file RegisterScavenging.h.

Referenced by doScavengeFrameVirtualRegs().

BitVector RegScavenger::getRegsAvailable ( const TargetRegisterClass RC)

Return all available registers in the register class in Mask.

Definition at line 324 of file RegisterScavenging.cpp.

References llvm::MCRegisterInfo::getNumRegs(), isRegUsed(), and llvm::BitmaskEnumDetail::Mask().

Referenced by llvm::Mips16InstrInfo::loadImmediate(), and scavengeRegister().

void llvm::RegScavenger::getScavengingFrameIndices ( SmallVectorImpl< int > &  A) const
inline
bool RegScavenger::isRegUsed ( unsigned  Reg,
bool  includeReserved = true 
) const
bool llvm::RegScavenger::isScavengingFrameIndex ( int  FI) const
inline
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 405 of file RegisterScavenging.cpp.

References A, llvm::BitVector::any(), D, llvm::dbgs(), DEBUG, llvm::TargetRegisterInfo::eliminateFrameIndex(), llvm::ISD::FrameIndex, llvm::TargetRegisterClass::getAlignment(), llvm::TargetRegisterInfo::getAllocatableSet(), getFrameIndexOperandNum(), llvm::MachineFunction::getFrameInfo(), llvm::MCRegisterInfo::getName(), llvm::MachineFrameInfo::getObjectAlignment(), llvm::MachineFrameInfo::getObjectIndexBegin(), llvm::MachineFrameInfo::getObjectIndexEnd(), llvm::MachineFrameInfo::getObjectSize(), llvm::MachineInstr::getParent(), llvm::MachineBasicBlock::getParent(), llvm::TargetRegisterInfo::getRegClassName(), getRegsAvailable(), llvm::TargetRegisterClass::getSize(), I, isRegUsed(), llvm::MCRegAliasIterator::isValid(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm::TargetInstrInfo::loadRegFromStackSlot(), llvm::MachineInstr::operands(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::report_fatal_error(), llvm::BitVector::reset(), llvm::TargetRegisterInfo::saveScavengerRegister(), SI, llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::TargetInstrInfo::storeRegToStackSlot(), and UseMI.

Referenced by llvm::SIInstrInfo::calculateLDSSpillAddress(), doScavengeFrameVirtualRegs(), llvm::LanaiRegisterInfo::eliminateFrameIndex(), InsertFPConstInst(), llvm::SIInstrInfo::insertIndirectBranch(), InsertSPConstInst(), and scavengeRegister().

unsigned llvm::RegScavenger::scavengeRegister ( const TargetRegisterClass RegClass,
int  SPAdj 
)
inline

Definition at line 162 of file RegisterScavenging.h.

References scavengeRegister().

void RegScavenger::setRegUsed ( unsigned  Reg,
LaneBitmask  LaneMask = LaneBitmask::getAll() 
)
void llvm::RegScavenger::skipTo ( MachineBasicBlock::iterator  I)
inline

Move the internal MBB iterator but do not update register states.

Definition at line 115 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 158 of file RegisterScavenging.cpp.

References assert(), llvm::MachineBasicBlock::begin(), and llvm::MachineInstr::isDebugValue().

Referenced by doScavengeFrameVirtualRegs(), and unprocess().

void llvm::RegScavenger::unprocess ( MachineBasicBlock::iterator  I)
inline

Unprocess instructions until you reach the provided iterator.

Definition at line 99 of file RegisterScavenging.h.

References unprocess().


The documentation for this class was generated from the following files: