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

#include <LiveRangeCalc.h>

Public Member Functions

 LiveRangeCalc ()
 
void reset (const MachineFunction *MF, SlotIndexes *, MachineDominatorTree *, VNInfo::Allocator *)
 reset - Prepare caches for a new set of non-overlapping live ranges. More...
 
void extend (LiveRange &LR, SlotIndex Use, unsigned PhysReg, ArrayRef< SlotIndex > Undefs)
 Extend the live range of LR to reach Use. More...
 
void createDeadDefs (LiveRange &LR, unsigned Reg)
 createDeadDefs - Create a dead def in LI for every def operand of Reg. More...
 
void extendToUses (LiveRange &LR, unsigned PhysReg)
 Extend the live range of LR to reach all uses of Reg. More...
 
void calculate (LiveInterval &LI, bool TrackSubRegs)
 Calculates liveness for the register specified in live interval LI. More...
 
void constructMainRangeFromSubranges (LiveInterval &LI)
 For live interval LI with correct SubRanges construct matching information for the main live range. More...
 
void setLiveOutValue (MachineBasicBlock *MBB, VNInfo *VNI)
 setLiveOutValue - Indicate that VNI is live out from MBB. More...
 
void addLiveInBlock (LiveRange &LR, MachineDomTreeNode *DomNode, SlotIndex Kill=SlotIndex())
 addLiveInBlock - Add a block with an unknown live-in value. More...
 
void calculateValues ()
 calculateValues - Calculate the value that will be live-in to each block added with addLiveInBlock. More...
 

Detailed Description

Definition at line 37 of file LiveRangeCalc.h.

Constructor & Destructor Documentation

llvm::LiveRangeCalc::LiveRangeCalc ( )
inline

Definition at line 172 of file LiveRangeCalc.h.

Member Function Documentation

void llvm::LiveRangeCalc::addLiveInBlock ( LiveRange LR,
MachineDomTreeNode DomNode,
SlotIndex  Kill = SlotIndex() 
)
inline

addLiveInBlock - Add a block with an unknown live-in value.

This function can only be called once per basic block. Once the live-in value has been determined, calculateValues() will add liveness to LI.

Parameters
LRThe live range that is live-in to the block.
DomNodeThe domtree node for the block.
KillIndex in block where LI is killed. If the value is live-through, set Kill = SLotIndex() and also call setLiveOutValue(MBB, 0).

Definition at line 265 of file LiveRangeCalc.h.

References llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().

void LiveRangeCalc::calculate ( LiveInterval LI,
bool  TrackSubRegs 
)
void LiveRangeCalc::calculateValues ( )

calculateValues - Calculate the value that will be live-in to each block added with addLiveInBlock.

Add PHI-def values as needed to preserve SSA form. Add liveness to all live-in blocks up to the Kill point, or the whole block for live-through blocks.

Every predecessor of a live-in block must have been given a value with setLiveOutValue, the value may be null for live-trough blocks.

Definition at line 275 of file LiveRangeCalc.cpp.

References assert().

Referenced by extend().

void LiveRangeCalc::constructMainRangeFromSubranges ( LiveInterval LI)

For live interval LI with correct SubRanges construct matching information for the main live range.

Expects the main live range to not have any segments or value numbers.

Definition at line 134 of file LiveRangeCalc.cpp.

References assert(), llvm::LiveRange::createDeadDef(), llvm::VNInfo::def, llvm::SmallVectorBase::empty(), llvm::LaneBitmask::getAll(), llvm::VNInfo::isPHIDef(), llvm::VNInfo::isUnused(), llvm::LiveInterval::reg, llvm::LiveRange::segments, llvm::LiveInterval::subranges(), and llvm::LiveRange::valnos.

Referenced by calculate(), and llvm::LiveIntervals::constructMainRangeFromSubranges().

void LiveRangeCalc::createDeadDefs ( LiveRange LR,
unsigned  Reg 
)

createDeadDefs - Create a dead def in LI for every def operand of Reg.

Each instruction defining Reg gets a new VNInfo with a corresponding minimal live range.

Definition at line 150 of file LiveRangeCalc.cpp.

References assert(), createDeadDef(), and llvm::MachineRegisterInfo::def_operands().

void LiveRangeCalc::extend ( LiveRange LR,
SlotIndex  Use,
unsigned  PhysReg,
ArrayRef< SlotIndex Undefs 
)

Extend the live range of LR to reach Use.

The existing values in LR must be live so they jointly dominate Use. If Use is not dominated by a single existing value, PHI-defs are inserted as required to preserve SSA form.

PhysReg, when set, is used to verify live-in lists on basic blocks.

Definition at line 246 of file LiveRangeCalc.cpp.

References assert(), calculateValues(), llvm::LiveRange::extendInBlock(), llvm::SlotIndexes::getMBBFromIndex(), llvm::SlotIndexes::getMBBStartIdx(), llvm::SlotIndex::getPrevSlot(), and llvm::SlotIndex::isValid().

Referenced by llvm::LiveIntervals::extendToIndices().

void llvm::LiveRangeCalc::extendToUses ( LiveRange LR,
unsigned  PhysReg 
)
inline

Extend the live range of LR to reach all uses of Reg.

All uses must be jointly dominated by existing liveness. PHI-defs are inserted as needed to preserve SSA form.

Definition at line 218 of file LiveRangeCalc.h.

References llvm::LaneBitmask::getAll().

void LiveRangeCalc::reset ( const MachineFunction MF,
SlotIndexes SI,
MachineDominatorTree MDT,
VNInfo::Allocator VNIA 
)

reset - Prepare caches for a new set of non-overlapping live ranges.

The caches must be reset before attempting calculations with a live range that may overlap a previously computed live range, and before the first live range in a function. If live ranges are not known to be non-overlapping, call reset before each.

Definition at line 31 of file LiveRangeCalc.cpp.

References llvm::SmallVectorImpl< T >::clear(), and llvm::MachineFunction::getRegInfo().

Referenced by calculate(), llvm::LiveIntervals::constructMainRangeFromSubranges(), llvm::LiveIntervals::extendToIndices(), and llvm::SplitEditor::reset().

void llvm::LiveRangeCalc::setLiveOutValue ( MachineBasicBlock MBB,
VNInfo VNI 
)
inline

setLiveOutValue - Indicate that VNI is live out from MBB.

The calculateValues() function will not add liveness for MBB, the caller should take care of that.

VNI may be null only if MBB is a live-through block also passed to addLiveInBlock().

Definition at line 251 of file LiveRangeCalc.h.

References llvm::MachineBasicBlock::getNumber(), MBB, and llvm::BitVector::set().


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