LLVM: llvm::LiveRangeEdit Class Reference (original) (raw)

#include "[llvm/CodeGen/LiveRangeEdit.h](LiveRangeEdit%5F8h%5Fsource.html)"

Public Member Functions
LiveRangeEdit (const LiveInterval *parent, SmallVectorImpl< Register > &newRegs, MachineFunction &MF, LiveIntervals &lis, VirtRegMap *vrm, Delegate *delegate=nullptr, SmallPtrSet< MachineInstr *, 32 > *deadRemats=nullptr)
Create a LiveRangeEdit for breaking down parent into smaller pieces.
~LiveRangeEdit () override
const LiveInterval & getParent () const
Register getReg () const
iterator begin () const
iterator end () const
unsigned size () const
bool empty () const
Register get (unsigned idx) const
void pop_back ()
pop_back - It allows LiveRangeEdit users to drop new registers.
ArrayRef< Register > regs () const
Register createFrom (Register OldReg)
createFrom - Create a new virtual register based on OldReg.
LiveInterval & createEmptyInterval ()
create - Create a new register with the same class and original slot as parent.
Register create ()
bool canRematerializeAt (Remat &RM, SlotIndex UseIdx)
canRematerializeAt - Determine if RM.Orig can be rematerialized at UseIdx.
SlotIndex rematerializeAt (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, Register DestReg, const Remat &RM, const TargetRegisterInfo &, bool Late=false, unsigned SubIdx=0, MachineInstr *ReplaceIndexMI=nullptr)
rematerializeAt - Rematerialize RM.ParentVNI into DestReg by inserting an instruction into MBB before MI.
void markRematerialized (const VNInfo *ParentVNI)
markRematerialized - explicitly mark a value as rematerialized after doing it manually.
bool didRematerialize (const VNInfo *ParentVNI) const
didRematerialize - Return true if ParentVNI was rematerialized anywhere.
void eraseVirtReg (Register Reg)
eraseVirtReg - Notify the delegate that Reg is no longer in use, and try to erase it from LIS.
void eliminateDeadDefs (SmallVectorImpl< MachineInstr * > &Dead, ArrayRef< Register > RegsBeingSpilled={})
eliminateDeadDefs - Try to delete machine instructions that are now dead (allDefsAreDead returns true).
void calculateRegClassAndHint (MachineFunction &, VirtRegAuxInfo &)
calculateRegClassAndHint - Recompute register class and hint for each new register.

Definition at line 42 of file LiveRangeEdit.h.

iterator

Iterator for accessing the new registers added by this edit.

Definition at line 138 of file LiveRangeEdit.h.

Create a LiveRangeEdit for breaking down parent into smaller pieces.

Parameters

parent The register being spilled or split.
newRegs List to receive any new registers created. This needn't be empty initially, any existing registers are ignored.
MF The MachineFunction the live range edit is taking place in.
lis The collection of all live intervals in this function.
vrm Map of virtual registers to physical registers for this function. If NULL, no virtual register map updates will be done. This could be the case if called before Regalloc.
deadRemats The collection of all the instructions defining an original reg and are dead after remat.

Definition at line 118 of file LiveRangeEdit.h.

References size().

~LiveRangeEdit()

llvm::LiveRangeEdit::~LiveRangeEdit ( ) inlineoverride

begin()

iterator llvm::LiveRangeEdit::begin ( ) const inline

calculateRegClassAndHint()

calculateRegClassAndHint - Recompute register class and hint for each new register.

Definition at line 403 of file LiveRangeEdit.cpp.

References llvm::VirtRegAuxInfo::calculateSpillWeightAndHint(), llvm::dbgs(), get(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, LLVM_DEBUG, llvm::printReg(), llvm::LiveInterval::reg(), Size, size(), and TRI.

canRematerializeAt()

create()

Register llvm::LiveRangeEdit::create ( ) inline

createEmptyInterval()

LiveInterval & llvm::LiveRangeEdit::createEmptyInterval ( ) inline

create - Create a new register with the same class and original slot as parent.

Definition at line 162 of file LiveRangeEdit.h.

References getReg().

createFrom()

didRematerialize()

bool llvm::LiveRangeEdit::didRematerialize ( const VNInfo * ParentVNI) const inline

didRematerialize - Return true if ParentVNI was rematerialized anywhere.

Definition at line 199 of file LiveRangeEdit.h.

eliminateDeadDefs()

eliminateDeadDefs - Try to delete machine instructions that are now dead (allDefsAreDead returns true).

This may cause live intervals to be trimmed and further dead efs to be eliminated. RegsBeingSpilled lists registers currently being spilled by the register allocator. These registers should not be split into new intervals as currently those new intervals are not guaranteed to spill.

Definition at line 344 of file LiveRangeEdit.cpp.

References llvm::SetVector< T, Vector, Set, N >::empty(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::is_contained(), llvm::SetVector< T, Vector, Set, N >::pop_back_val(), llvm::LiveInterval::reg(), Register, and llvm::LiveRange::RenumberValues().

empty()

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

end()

iterator llvm::LiveRangeEdit::end ( ) const inline

eraseVirtReg()

void LiveRangeEdit::eraseVirtReg ( Register Reg )

eraseVirtReg - Notify the delegate that Reg is no longer in use, and try to erase it from LIS.

Definition at line 107 of file LiveRangeEdit.cpp.

get()

getParent()

getReg()

Register llvm::LiveRangeEdit::getReg ( ) const inline

markRematerialized()

void llvm::LiveRangeEdit::markRematerialized ( const VNInfo * ParentVNI) inline

markRematerialized - explicitly mark a value as rematerialized after doing it manually.

Definition at line 194 of file LiveRangeEdit.h.

pop_back()

void llvm::LiveRangeEdit::pop_back ( ) inline

pop_back - It allows LiveRangeEdit users to drop new registers.

The context is when an original def instruction of a register is dead after rematerialization, we still want to keep it for following rematerializations. We save the def instruction in DeadRemats, and replace the original dst register with a new dummy register so the live range of original dst register can be shrinked normally. We don't want to allocate phys register for the dummy register, so we want to drop it from the NewRegs set.

Definition at line 153 of file LiveRangeEdit.h.

regs()

rematerializeAt()

rematerializeAt - Rematerialize RM.ParentVNI into DestReg by inserting an instruction into MBB before MI.

The new instruction is mapped, but liveness is not updated. If ReplaceIndexMI is not null it will be replaced by new MI in the index map. Return the SlotIndex of the new instruction.

Definition at line 84 of file LiveRangeEdit.cpp.

References assert(), MBB, and MI.

size()

unsigned llvm::LiveRangeEdit::size ( ) const inline

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