LLVM  8.0.1
Public Member Functions | Static Public Member Functions | List of all members
llvm::LiveRegUnits Class Reference

A set of register units used to track register liveness. More...

#include "llvm/CodeGen/LiveRegUnits.h"

Public Member Functions

 LiveRegUnits ()=default
 Constructs a new empty LiveRegUnits set. More...
 
 LiveRegUnits (const TargetRegisterInfo &TRI)
 Constructs and initialize an empty LiveRegUnits set. More...
 
void init (const TargetRegisterInfo &TRI)
 Initialize and clear the set. More...
 
void clear ()
 Clears the set. More...
 
bool empty () const
 Returns true if the set is empty. More...
 
void addReg (MCPhysReg Reg)
 Adds register units covered by physical register Reg. More...
 
void addRegMasked (MCPhysReg Reg, LaneBitmask Mask)
 Adds register units covered by physical register Reg that are part of the lanemask Mask. More...
 
void removeReg (MCPhysReg Reg)
 Removes all register units covered by physical register Reg. More...
 
void removeRegsNotPreserved (const uint32_t *RegMask)
 Removes register units not preserved by the regmask RegMask. More...
 
void addRegsInMask (const uint32_t *RegMask)
 Adds register units not preserved by the regmask RegMask. More...
 
bool available (MCPhysReg Reg) const
 Returns true if no part of physical register Reg is live. More...
 
void stepBackward (const MachineInstr &MI)
 Updates liveness when stepping backwards over the instruction MI. More...
 
void accumulate (const MachineInstr &MI)
 Adds all register units used, defined or clobbered in MI. More...
 
void addLiveOuts (const MachineBasicBlock &MBB)
 Adds registers living out of block MBB. More...
 
void addLiveIns (const MachineBasicBlock &MBB)
 Adds registers living into block MBB. More...
 
void addUnits (const BitVector &RegUnits)
 Adds all register units marked in the bitvector RegUnits. More...
 
void removeUnits (const BitVector &RegUnits)
 Removes all register units marked in the bitvector RegUnits. More...
 
const BitVectorgetBitVector () const
 Return the internal bitvector representation of the set. More...
 

Static Public Member Functions

static void accumulateUsedDefed (const MachineInstr &MI, LiveRegUnits &ModifiedRegUnits, LiveRegUnits &UsedRegUnits, const TargetRegisterInfo *TRI)
 For a machine instruction MI, adds all register units used in UsedRegUnits and defined or clobbered in ModifiedRegUnits. More...
 

Detailed Description

A set of register units used to track register liveness.

Definition at line 31 of file LiveRegUnits.h.

Constructor & Destructor Documentation

◆ LiveRegUnits() [1/2]

llvm::LiveRegUnits::LiveRegUnits ( )
default

Constructs a new empty LiveRegUnits set.

◆ LiveRegUnits() [2/2]

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

Constructs and initialize an empty LiveRegUnits set.

Definition at line 40 of file LiveRegUnits.h.

References init().

Member Function Documentation

◆ accumulate()

void LiveRegUnits::accumulate ( const MachineInstr MI)

Adds all register units used, defined or clobbered in MI.

This is useful when walking over a range of instruction to find registers unused over the whole range.

Definition at line 70 of file LiveRegUnits.cpp.

References addReg(), addRegsInMask(), llvm::TargetRegisterInfo::isPhysicalRegister(), llvm::RISCVFenceField::O, and Reg.

Referenced by available(), findSurvivorBackwards(), llvm::outliner::Candidate::initLRU(), and false::Chain::str().

◆ accumulateUsedDefed()

static void llvm::LiveRegUnits::accumulateUsedDefed ( const MachineInstr MI,
LiveRegUnits ModifiedRegUnits,
LiveRegUnits UsedRegUnits,
const TargetRegisterInfo TRI 
)
inlinestatic

For a machine instruction MI, adds all register units used in UsedRegUnits and defined or clobbered in ModifiedRegUnits.

This is useful when walking over a range of instructions to track registers used or defined seperately.

Definition at line 48 of file LiveRegUnits.h.

References addReg(), addRegsInMask(), assert(), llvm::TargetRegisterInfo::isConstantPhysReg(), llvm::TargetRegisterInfo::isPhysicalRegister(), llvm::RISCVFenceField::O, and Reg.

Referenced by areCandidatesToMergeOrPair(), hasRegisterDependency(), INITIALIZE_PASS(), and mayAlias().

◆ addLiveIns()

void LiveRegUnits::addLiveIns ( const MachineBasicBlock MBB)

Adds registers living into block MBB.

Definition at line 142 of file LiveRegUnits.cpp.

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

Referenced by available(), and llvm::RegScavenger::enterBasicBlock().

◆ addLiveOuts()

void LiveRegUnits::addLiveOuts ( const MachineBasicBlock MBB)

Adds registers living out of block MBB.

Live out registers are the union of the live-in registers of the successor blocks and pristine registers. Live out registers of the end block are the callee saved registers.

Definition at line 127 of file LiveRegUnits.cpp.

References addBlockLiveIns(), addCalleeSavedRegs(), llvm::MachineFunction::getFrameInfo(), llvm::MachineBasicBlock::getParent(), llvm::MachineFrameInfo::isCalleeSavedInfoValid(), llvm::MachineBasicBlock::isReturnBlock(), llvm::MachineBasicBlock::succ_empty(), and llvm::MachineBasicBlock::successors().

Referenced by available(), llvm::RegScavenger::enterBasicBlockEnd(), getTag(), llvm::outliner::Candidate::initLRU(), and false::Chain::str().

◆ addReg()

void llvm::LiveRegUnits::addReg ( MCPhysReg  Reg)
inline

Adds register units covered by physical register Reg.

Definition at line 88 of file LiveRegUnits.h.

References llvm::BitVector::set(), and Unit.

Referenced by accumulate(), accumulateUsedDefed(), addCalleeSavedRegs(), getTag(), and stepBackward().

◆ addRegMasked()

void llvm::LiveRegUnits::addRegMasked ( MCPhysReg  Reg,
LaneBitmask  Mask 
)
inline

Adds register units covered by physical register Reg that are part of the lanemask Mask.

Definition at line 95 of file LiveRegUnits.h.

References llvm::BitmaskEnumDetail::Mask(), llvm::LaneBitmask::none(), llvm::BitVector::set(), and Unit.

Referenced by addBlockLiveIns(), and llvm::RegScavenger::setRegUsed().

◆ addRegsInMask()

void LiveRegUnits::addRegsInMask ( const uint32_t RegMask)

Adds register units not preserved by the regmask RegMask.

The regmask has the same format as the one in the RegMask machine operand.

Definition at line 36 of file LiveRegUnits.cpp.

References llvm::MachineOperand::clobbersPhysReg(), E, llvm::MCRegisterInfo::getNumRegUnits(), llvm::MCRegUnitRootIterator::isValid(), and llvm::BitVector::set().

Referenced by accumulate(), accumulateUsedDefed(), and removeReg().

◆ addUnits()

void llvm::LiveRegUnits::addUnits ( const BitVector RegUnits)
inline

Adds all register units marked in the bitvector RegUnits.

Definition at line 146 of file LiveRegUnits.h.

Referenced by addCalleeSavedRegs(), and llvm::RegScavenger::scavengeRegister().

◆ available()

bool llvm::LiveRegUnits::available ( MCPhysReg  Reg) const
inline

◆ clear()

void llvm::LiveRegUnits::clear ( )
inline

Clears the set.

Definition at line 82 of file LiveRegUnits.h.

References llvm::BitVector::reset().

Referenced by getTag(), and INITIALIZE_PASS().

◆ empty()

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

Returns true if the set is empty.

Definition at line 85 of file LiveRegUnits.h.

References llvm::BitVector::none().

Referenced by addCalleeSavedRegs().

◆ getBitVector()

const BitVector& llvm::LiveRegUnits::getBitVector ( ) const
inline

Return the internal bitvector representation of the set.

Definition at line 154 of file LiveRegUnits.h.

Referenced by addCalleeSavedRegs().

◆ init()

void llvm::LiveRegUnits::init ( const TargetRegisterInfo TRI)
inline

◆ removeReg()

void llvm::LiveRegUnits::removeReg ( MCPhysReg  Reg)
inline

Removes all register units covered by physical register Reg.

Definition at line 104 of file LiveRegUnits.h.

References addRegsInMask(), removeRegsNotPreserved(), llvm::BitVector::reset(), and Unit.

Referenced by addCalleeSavedRegs(), llvm::RegScavenger::scavengeRegisterBackwards(), and stepBackward().

◆ removeRegsNotPreserved()

void LiveRegUnits::removeRegsNotPreserved ( const uint32_t RegMask)

Removes register units not preserved by the regmask RegMask.

The regmask has the same format as the one in the RegMask machine operand.

Definition at line 27 of file LiveRegUnits.cpp.

References llvm::MachineOperand::clobbersPhysReg(), E, llvm::MCRegisterInfo::getNumRegUnits(), llvm::MCRegUnitRootIterator::isValid(), and llvm::BitVector::reset().

Referenced by removeReg(), and stepBackward().

◆ removeUnits()

void llvm::LiveRegUnits::removeUnits ( const BitVector RegUnits)
inline

Removes all register units marked in the bitvector RegUnits.

Definition at line 150 of file LiveRegUnits.h.

References llvm::BitVector::reset().

Referenced by llvm::RegScavenger::scavengeRegister().

◆ stepBackward()

void LiveRegUnits::stepBackward ( const MachineInstr MI)

Updates liveness when stepping backwards over the instruction MI.

This removes all register units defined or clobbered in MI and then adds the units used (as in use operands) in MI.

Definition at line 45 of file LiveRegUnits.cpp.

References addReg(), llvm::TargetRegisterInfo::isPhysicalRegister(), llvm::RISCVFenceField::O, Reg, removeReg(), and removeRegsNotPreserved().

Referenced by available(), llvm::RegScavenger::backward(), getTag(), llvm::outliner::Candidate::initLRU(), and false::Chain::str().


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