LLVM  3.7.0
Public Types | Public Member Functions | List of all members
llvm::LivePhysRegs Class Reference

A set of live physical registers with functions to track liveness when walking backward/forward through a basic block. More...

#include <LivePhysRegs.h>

Public Types

typedef SparseSet< unsigned >
::const_iterator 
const_iterator
 

Public Member Functions

 LivePhysRegs ()
 Constructs a new empty LivePhysRegs set. More...
 
 LivePhysRegs (const TargetRegisterInfo *TRI)
 Constructs and initialize an empty LivePhysRegs set. More...
 
void init (const TargetRegisterInfo *TRI)
 Clear and initialize the LivePhysRegs set. More...
 
void clear ()
 Clears the LivePhysRegs set. More...
 
bool empty () const
 Returns true if the set is empty. More...
 
void addReg (unsigned Reg)
 Adds a physical register and all its sub-registers to the set. More...
 
void removeReg (unsigned Reg)
 Removes a physical register, all its sub-registers, and all its super-registers from the set. More...
 
void removeRegsInMask (const MachineOperand &MO, SmallVectorImpl< std::pair< unsigned, const MachineOperand * >> *Clobbers)
 Removes physical registers clobbered by the regmask operand MO. More...
 
bool contains (unsigned Reg) const
 Returns true if register Reg is contained in the set. More...
 
void stepBackward (const MachineInstr &MI)
 Simulates liveness when stepping backwards over an instruction(bundle): Remove Defs, add uses. More...
 
void stepForward (const MachineInstr &MI, SmallVectorImpl< std::pair< unsigned, const MachineOperand * >> &Clobbers)
 Simulates liveness when stepping forward over an instruction(bundle): Remove killed-uses, add defs. More...
 
void addLiveIns (const MachineBasicBlock *MBB, bool AddPristines=false)
 Adds all live-in registers of basic block MBB; After prologue/ epilogue insertion AddPristines should be set to true to insert the pristine registers. More...
 
void addLiveOuts (const MachineBasicBlock *MBB, bool AddPristines=false)
 Adds all live-out registers of basic block MBB; After prologue/ epilogue insertion AddPristines should be set to true to insert the pristine registers. More...
 
const_iterator begin () const
 
const_iterator end () const
 
void print (raw_ostream &OS) const
 Prints the currently live registers to OS. More...
 
void dump () const
 Dumps the currently live registers to the debug output. More...
 

Detailed Description

A set of live physical registers with functions to track liveness when walking backward/forward through a basic block.

Definition at line 43 of file LivePhysRegs.h.

Member Typedef Documentation

Definition at line 129 of file LivePhysRegs.h.

Constructor & Destructor Documentation

llvm::LivePhysRegs::LivePhysRegs ( )
inline

Constructs a new empty LivePhysRegs set.

Definition at line 51 of file LivePhysRegs.h.

llvm::LivePhysRegs::LivePhysRegs ( const TargetRegisterInfo TRI)
inline

Constructs and initialize an empty LivePhysRegs set.

Definition at line 54 of file LivePhysRegs.h.

References llvm::MCRegisterInfo::getNumRegs(), and llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::setUniverse().

Member Function Documentation

void LivePhysRegs::addLiveIns ( const MachineBasicBlock MBB,
bool  AddPristines = false 
)

Adds all live-in registers of basic block MBB; After prologue/ epilogue insertion AddPristines should be set to true to insert the pristine registers.

Definition at line 159 of file LivePhysRegs.cpp.

References addPristines(), and llvm::MachineBasicBlock::getParent().

Referenced by addLiveOuts().

void LivePhysRegs::addLiveOuts ( const MachineBasicBlock MBB,
bool  AddPristines = false 
)

Adds all live-out registers of basic block MBB; After prologue/ epilogue insertion AddPristines should be set to true to insert the pristine registers.

Definition at line 149 of file LivePhysRegs.cpp.

References addLiveIns(), addPristines(), llvm::MachineBasicBlock::getParent(), and llvm::MachineBasicBlock::successors().

void llvm::LivePhysRegs::addReg ( unsigned  Reg)
inline

Adds a physical register and all its sub-registers to the set.

Definition at line 74 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::insert(), and llvm::MCRegisterInfo::DiffListIterator::isValid().

Referenced by addLiveIns(), addPristines(), stepBackward(), and stepForward().

const_iterator llvm::LivePhysRegs::begin ( ) const
inline

Definition at line 130 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::begin().

Referenced by print().

void llvm::LivePhysRegs::clear ( )
inline

Clears the LivePhysRegs set.

Definition at line 68 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::clear().

bool llvm::LivePhysRegs::contains ( unsigned  Reg) const
inline

Returns true if register Reg is contained in the set.

This also works if only the super register of Reg has been defined, because we always add also all sub-registers to the set.

Definition at line 102 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::count().

Referenced by RemoveKills(), and UpdatePredRedefs().

void LivePhysRegs::dump ( ) const

Dumps the currently live registers to the debug output.

Definition at line 123 of file LivePhysRegs.cpp.

References llvm::dbgs().

bool llvm::LivePhysRegs::empty ( ) const
inline

Returns true if the set is empty.

Definition at line 71 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::empty().

Referenced by print().

const_iterator llvm::LivePhysRegs::end ( ) const
inline

Definition at line 131 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::end().

Referenced by print().

void llvm::LivePhysRegs::init ( const TargetRegisterInfo TRI)
inline
void LivePhysRegs::print ( raw_ostream OS) const

Prints the currently live registers to OS.

Prin the currently live registers to OS.

Definition at line 105 of file LivePhysRegs.cpp.

References begin(), empty(), end(), and I.

Referenced by llvm::operator<<().

void llvm::LivePhysRegs::removeReg ( unsigned  Reg)
inline

Removes a physical register, all its sub-registers, and all its super-registers from the set.

Definition at line 84 of file LivePhysRegs.h.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::erase(), and llvm::MCRegisterInfo::DiffListIterator::isValid().

Referenced by addPristines(), stepBackward(), and stepForward().

void LivePhysRegs::removeRegsInMask ( const MachineOperand MO,
SmallVectorImpl< std::pair< unsigned, const MachineOperand * >> *  Clobbers 
)

Removes physical registers clobbered by the regmask operand MO.

Remove all registers from the set that get clobbered by the register mask.

The clobbers set will be the list of live registers clobbered by the regmask.

Definition at line 29 of file LivePhysRegs.cpp.

References llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::begin(), llvm::MachineOperand::clobbersPhysReg(), llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::end(), and llvm::SparseSet< ValueT, KeyFunctorT, SparseT >::erase().

Referenced by stepBackward(), and stepForward().

void LivePhysRegs::stepBackward ( const MachineInstr MI)

Simulates liveness when stepping backwards over an instruction(bundle): Remove Defs, add uses.

This is the recommended way of calculating liveness.

Definition at line 44 of file LivePhysRegs.cpp.

References addReg(), llvm::MachineOperandIteratorBase::isValid(), removeReg(), and removeRegsInMask().

void LivePhysRegs::stepForward ( const MachineInstr MI,
SmallVectorImpl< std::pair< unsigned, const MachineOperand * >> &  Clobbers 
)

Simulates liveness when stepping forward over an instruction(bundle): Remove killed-uses, add defs.

This is the not recommended way, because it depends on accurate kill flags. If possible use stepBackwards() instead of this function. The clobbers set will be the list of registers either defined or clobbered by a regmask. The operand will identify whether this is a regmask or register operand.

This is the not recommended way, because it depends on accurate kill flags. If possible use stepBackwards() instead of this function.

Definition at line 73 of file LivePhysRegs.cpp.

References addReg(), llvm::MachineOperandIteratorBase::isValid(), removeReg(), and removeRegsInMask().

Referenced by UpdatePredRedefs().


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