LLVM 22.0.0git
ScopedScavengeOrSpill Struct Reference

RAII helper class for scavenging or spilling a register. More...

Public Member Functions

 ScopedScavengeOrSpill (const ScopedScavengeOrSpill &)=delete
 ScopedScavengeOrSpill (ScopedScavengeOrSpill &&)=delete
 ScopedScavengeOrSpill (MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register SpillCandidate, const TargetRegisterClass &RC, LiveRegUnits const &UsedRegs, BitVector const &AllocatableRegs, std::optional< int > *MaybeSpillFI, Register PreferredReg=AArch64::NoRegister)
bool hasSpilled () const
Register freeRegister () const
 Returns the free register (found from scavenging or spilling a register).
Register operator* () const
 ~ScopedScavengeOrSpill ()

Detailed Description

RAII helper class for scavenging or spilling a register.

On construction attempts to find a free register of class RC (given UsedRegs and AllocatableRegs), if no register can be found spills SpillCandidate to MaybeSpillFI to free a register. The free'd register is returned via the FreeReg output parameter. On destruction, if there is a spill, its previous value is reloaded. The spilling and scavenging is only valid at the insertion point MBBI, this class should not be used in places that create or manipulate basic blocks, moving the expected insertion point.

Definition at line 3709 of file AArch64FrameLowering.cpp.

Constructor & Destructor Documentation

◆ ScopedScavengeOrSpill() [1/3]

ScopedScavengeOrSpill::ScopedScavengeOrSpill ( const ScopedScavengeOrSpill & )
delete

◆ ScopedScavengeOrSpill() [2/3]

ScopedScavengeOrSpill::ScopedScavengeOrSpill ( ScopedScavengeOrSpill && )
delete

◆ ScopedScavengeOrSpill() [3/3]

ScopedScavengeOrSpill::ScopedScavengeOrSpill ( MachineFunction & MF,
MachineBasicBlock & MBB,
MachineBasicBlock::iterator MBBI,
Register SpillCandidate,
const TargetRegisterClass & RC,
LiveRegUnits const & UsedRegs,
BitVector const & AllocatableRegs,
std::optional< int > * MaybeSpillFI,
Register PreferredReg = AArch64::NoRegister )
inline

◆ ~ScopedScavengeOrSpill()

ScopedScavengeOrSpill::~ScopedScavengeOrSpill ( )
inline

Definition at line 3746 of file AArch64FrameLowering.cpp.

References hasSpilled(), and Register.

Member Function Documentation

◆ freeRegister()

Register ScopedScavengeOrSpill::freeRegister ( ) const
inline

Returns the free register (found from scavenging or spilling a register).

Definition at line 3742 of file AArch64FrameLowering.cpp.

Referenced by operator*().

◆ hasSpilled()

bool ScopedScavengeOrSpill::hasSpilled ( ) const
inline

◆ operator*()

Register ScopedScavengeOrSpill::operator* ( ) const
inline

Definition at line 3744 of file AArch64FrameLowering.cpp.

References freeRegister().


The documentation for this struct was generated from the following file: