LLVM 22.0.0git
llvm::LiveRangeCalc Class Reference

#include "llvm/CodeGen/LiveRangeCalc.h"

Inheritance diagram for llvm::LiveRangeCalc:
[legend]

Public Member Functions

 LiveRangeCalc ()=default
LLVM_ABI void reset (const MachineFunction *mf, SlotIndexes *SI, MachineDominatorTree *MDT, VNInfo::Allocator *VNIA)
 reset - Prepare caches for a new set of non-overlapping live ranges.
LLVM_ABI void extend (LiveRange &LR, SlotIndex Use, Register PhysReg, ArrayRef< SlotIndex > Undefs)
 Extend the live range of LR to reach Use.
void setLiveOutValue (MachineBasicBlock *MBB, VNInfo *VNI)
 setLiveOutValue - Indicate that VNI is live out from MBB.
void addLiveInBlock (LiveRange &LR, MachineDomTreeNode *DomNode, SlotIndex Kill=SlotIndex())
 addLiveInBlock - Add a block with an unknown live-in value.
LLVM_ABI void calculateValues ()
 calculateValues - Calculate the value that will be live-in to each block added with addLiveInBlock.

Static Public Member Functions

LLVM_ABI static LLVM_ATTRIBUTE_UNUSED bool isJointlyDominated (const MachineBasicBlock *MBB, ArrayRef< SlotIndex > Defs, const SlotIndexes &Indexes)
 A diagnostic function to check if the end of the block MBB is jointly dominated by the blocks corresponding to the slot indices in Defs.

Protected Member Functions

const MachineFunctiongetMachineFunction ()
 Some getters to expose in a read-only way some private fields to subclasses.
const MachineRegisterInfogetRegInfo () const
SlotIndexesgetIndexes ()
MachineDominatorTreegetDomTree ()
VNInfo::AllocatorgetVNAlloc ()
LLVM_ABI void resetLiveOutMap ()
 Reset Map and Seen fields.

Detailed Description

Definition at line 46 of file LiveRangeCalc.h.

Constructor & Destructor Documentation

◆ LiveRangeCalc()

llvm::LiveRangeCalc::LiveRangeCalc ( )
default

References LLVM_ABI.

Member Function Documentation

◆ addLiveInBlock()

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 244 of file LiveRangeCalc.h.

◆ calculateValues()

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 114 of file LiveRangeCalc.cpp.

References assert().

Referenced by extend().

◆ extend()

void LiveRangeCalc::extend ( LiveRange & LR,
SlotIndex Use,
Register 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 86 of file LiveRangeCalc.cpp.

References assert(), calculateValues(), and llvm::LiveRange::extendInBlock().

◆ getDomTree()

MachineDominatorTree * llvm::LiveRangeCalc::getDomTree ( )
inlineprotected

Definition at line 170 of file LiveRangeCalc.h.

Referenced by llvm::LiveIntervalCalc::calculate().

◆ getIndexes()

SlotIndexes * llvm::LiveRangeCalc::getIndexes ( )
inlineprotected

◆ getMachineFunction()

const MachineFunction * llvm::LiveRangeCalc::getMachineFunction ( )
inlineprotected

Some getters to expose in a read-only way some private fields to subclasses.

Definition at line 167 of file LiveRangeCalc.h.

Referenced by llvm::LiveIntervalCalc::calculate().

◆ getRegInfo()

const MachineRegisterInfo * llvm::LiveRangeCalc::getRegInfo ( ) const
inlineprotected

◆ getVNAlloc()

◆ isJointlyDominated()

bool LiveRangeCalc::isJointlyDominated ( const MachineBasicBlock * MBB,
ArrayRef< SlotIndex > Defs,
const SlotIndexes & Indexes )
static

A diagnostic function to check if the end of the block MBB is jointly dominated by the blocks corresponding to the slot indices in Defs.

This function is mainly for use in self-verification checks.

Definition at line 436 of file LiveRangeCalc.cpp.

References B(), I, llvm::SetVector< T, Vector, Set, N >::insert(), MBB, P, llvm::BitVector::set(), and llvm::SetVector< T, Vector, Set, N >::size().

◆ reset()

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 48 of file LiveRangeCalc.cpp.

References llvm::MachineFunction::getRegInfo(), and resetLiveOutMap().

Referenced by llvm::LiveIntervalCalc::calculate().

◆ resetLiveOutMap()

void LiveRangeCalc::resetLiveOutMap ( )
protected

Reset Map and Seen fields.

Definition at line 40 of file LiveRangeCalc.cpp.

Referenced by llvm::LiveIntervalCalc::calculate(), llvm::LiveIntervalCalc::constructMainRangeFromSubranges(), and reset().

◆ setLiveOutValue()

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 230 of file LiveRangeCalc.h.

References MBB.


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