LLVM 22.0.0git
llvm::RegScavenger Class Reference

#include "llvm/CodeGen/RegisterScavenging.h"

Public Member Functions

 RegScavenger ()=default
void assignRegToScavengingIndex (int FI, Register Reg, MachineInstr *Restore=nullptr)
 Record that Reg is in use at scavenging index FI.
void enterBasicBlock (MachineBasicBlock &MBB)
 Start tracking liveness from the begin of basic block MBB.
void enterBasicBlockEnd (MachineBasicBlock &MBB)
 Start tracking liveness from the end of basic block MBB.
void backward ()
 Update internal register state and move MBB iterator backwards.
void backward (MachineBasicBlock::iterator I)
 Call backward() to update internal register state to just before *I.
bool isRegUsed (Register Reg, bool includeReserved=true) const
 Return if a specific register is currently used.
BitVector getRegsAvailable (const TargetRegisterClass *RC)
 Return all available registers in the register class in Mask.
Register FindUnusedReg (const TargetRegisterClass *RC) const
 Find an unused register of the specified register class.
void addScavengingFrameIndex (int FI)
 Add a scavenging frame index.
bool isScavengingFrameIndex (int FI) const
 Query whether a frame index is a scavenging frame index.
void getScavengingFrameIndices (SmallVectorImpl< int > &A) const
 Get an array of scavenging frame indices.
Register scavengeRegisterBackwards (const TargetRegisterClass &RC, MachineBasicBlock::iterator To, bool RestoreAfter, int SPAdj, bool AllowSpill=true)
 Make a register of the specific register class available from the current position backwards to the place before To.
void setRegUsed (Register Reg, LaneBitmask LaneMask=LaneBitmask::getAll())
 Tell the scavenger a register is used.

Detailed Description

Definition at line 34 of file RegisterScavenging.h.

Constructor & Destructor Documentation

◆ RegScavenger()

llvm::RegScavenger::RegScavenger ( )
default

Member Function Documentation

◆ addScavengingFrameIndex()

void llvm::RegScavenger::addScavengingFrameIndex ( int FI)
inline

Add a scavenging frame index.

Definition at line 112 of file RegisterScavenging.h.

◆ assignRegToScavengingIndex()

void llvm::RegScavenger::assignRegToScavengingIndex ( int FI,
Register Reg,
MachineInstr * Restore = nullptr )
inline

Record that Reg is in use at scavenging index FI.

This is for targets which need to directly manage the spilling process, and need to update the scavenger's internal state. It's expected this be called a second time with Restore set to a non-null value, so that the externally inserted restore instruction resets the scavenged slot liveness when encountered.

Definition at line 70 of file RegisterScavenging.h.

References assert(), llvm_unreachable, and Reg.

◆ backward() [1/2]

void RegScavenger::backward ( )

Update internal register state and move MBB iterator backwards.

This method gives precise results even in the absence of kill flags.

Definition at line 81 of file RegisterScavenging.cpp.

References I, and MI.

Referenced by backward(), and llvm::Mips16InstrInfo::loadImmediate().

◆ backward() [2/2]

void llvm::RegScavenger::backward ( MachineBasicBlock::iterator I)
inline

Call backward() to update internal register state to just before *I.

Definition at line 96 of file RegisterScavenging.h.

References backward(), and I.

◆ enterBasicBlock()

void RegScavenger::enterBasicBlock ( MachineBasicBlock & MBB)

Start tracking liveness from the begin of basic block MBB.

Definition at line 69 of file RegisterScavenging.cpp.

◆ enterBasicBlockEnd()

void RegScavenger::enterBasicBlockEnd ( MachineBasicBlock & MBB)

Start tracking liveness from the end of basic block MBB.

Use backward() to move towards the beginning of the block.

Definition at line 75 of file RegisterScavenging.cpp.

Referenced by llvm::Mips16InstrInfo::loadImmediate().

◆ FindUnusedReg()

Register RegScavenger::FindUnusedReg ( const TargetRegisterClass * RC) const

Find an unused register of the specified register class.

Return 0 if none is found.

Definition at line 100 of file RegisterScavenging.cpp.

References llvm::dbgs(), isRegUsed(), LLVM_DEBUG, and llvm::printReg().

◆ getRegsAvailable()

BitVector RegScavenger::getRegsAvailable ( const TargetRegisterClass * RC)

Return all available registers in the register class in Mask.

Definition at line 111 of file RegisterScavenging.cpp.

References isRegUsed().

Referenced by llvm::Mips16InstrInfo::loadImmediate().

◆ getScavengingFrameIndices()

void llvm::RegScavenger::getScavengingFrameIndices ( SmallVectorImpl< int > & A) const
inline

Get an array of scavenging frame indices.

Definition at line 126 of file RegisterScavenging.h.

References A(), and I.

◆ isRegUsed()

bool RegScavenger::isRegUsed ( Register Reg,
bool includeReserved = true ) const

Return if a specific register is currently used.

Definition at line 94 of file RegisterScavenging.cpp.

Referenced by FindUnusedReg(), and getRegsAvailable().

◆ isScavengingFrameIndex()

bool llvm::RegScavenger::isScavengingFrameIndex ( int FI) const
inline

Query whether a frame index is a scavenging frame index.

Definition at line 117 of file RegisterScavenging.h.

◆ scavengeRegisterBackwards()

Register RegScavenger::scavengeRegisterBackwards ( const TargetRegisterClass & RC,
MachineBasicBlock::iterator To,
bool RestoreAfter,
int SPAdj,
bool AllowSpill = true )

Make a register of the specific register class available from the current position backwards to the place before To.

If RestoreAfter is true this includes the instruction following the current position. SPAdj is the stack adjustment due to call frame, it's passed along to eliminateFrameIndex(). Returns the scavenged register.

If AllowSpill is false, fail if a spill is required to make the register available, and return NoRegister.

Definition at line 295 of file RegisterScavenging.cpp.

References assert(), llvm::dbgs(), findSurvivorBackwards(), llvm::TargetRegisterClass::getRawAllocationOrder(), LLVM_DEBUG, P, llvm::printReg(), and UseMI.

◆ setRegUsed()

void RegScavenger::setRegUsed ( Register Reg,
LaneBitmask LaneMask = LaneBitmask::getAll() )

Tell the scavenger a register is used.

Definition at line 50 of file RegisterScavenging.cpp.


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