pub struct A64RegAlloc { /* private fields */ }Expand description
AArch64 register allocator for MIR virtual registers.
Tracks a fixed pool of available caller-saved GPRs and provides stable mappings from virtual registers to physical registers. Returns None when no register is available (caller should spill to stack).
Implementations§
Source§impl A64RegAlloc
impl A64RegAlloc
Sourcepub fn set_conservative_mode(&mut self)
pub fn set_conservative_mode(&mut self)
Sets conservative mode for complex functions, using fewer registers to reduce pressure.
pub fn alloc_scratch(&mut self) -> Option<&'static str>
pub fn free_scratch(&mut self, phys: &'static str)
pub fn is_occupied(&self, phys: &'static str) -> bool
pub fn occupy(&mut self, phys: &'static str)
pub fn release(&mut self, phys: &'static str)
pub fn get_mapping_for(&self, v: &VirtualReg) -> Option<&'static str>
pub fn ensure_mapping(&mut self, v: VirtualReg) -> Option<&'static str>
pub fn ensure_mapping_for_gpr(&mut self, v: VirtualReg) -> Option<&'static str>
pub fn mapped_for_register(&self, r: &Register) -> Option<&'static str>
Trait Implementations§
Source§impl Default for A64RegAlloc
impl Default for A64RegAlloc
Source§impl RegisterAllocator for A64RegAlloc
impl RegisterAllocator for A64RegAlloc
Source§fn alloc_scratch(&mut self) -> Option<Self::PhysReg>
fn alloc_scratch(&mut self) -> Option<Self::PhysReg>
Acquire a short-lived scratch register. Returns
None when the dedicated
pool is exhausted so the caller may spill or choose an alternate path.Source§fn free_scratch(&mut self, phys: Self::PhysReg)
fn free_scratch(&mut self, phys: Self::PhysReg)
Release a scratch register obtained through
RegisterAllocator::alloc_scratch.Source§fn get_mapping(&self, vreg: &VirtualReg) -> Option<Self::PhysReg>
fn get_mapping(&self, vreg: &VirtualReg) -> Option<Self::PhysReg>
Look up the physical register currently assigned to the virtual
register, when available.
Source§fn ensure_mapping(&mut self, vreg: VirtualReg) -> Option<Self::PhysReg>
fn ensure_mapping(&mut self, vreg: VirtualReg) -> Option<Self::PhysReg>
Ensure that the virtual register has a permanent mapping. Implementers
can reject unsupported register classes by returning
None, signalling
that the caller should spill.Source§fn mapped_for_register(&self, reg: &Register) -> Option<Self::PhysReg>
fn mapped_for_register(&self, reg: &Register) -> Option<Self::PhysReg>
Resolve the backing physical register for an arbitrary MIR register
(virtual or physical).
Source§fn occupy(&mut self, phys: Self::PhysReg)
fn occupy(&mut self, phys: Self::PhysReg)
Mark a physical register as occupied, removing it from the allocator’s
free pool if necessary.
Source§fn release(&mut self, phys: Self::PhysReg)
fn release(&mut self, phys: Self::PhysReg)
Release a previously occupied physical register back to the pool.
Source§fn is_occupied(&self, phys: Self::PhysReg) -> bool
fn is_occupied(&self, phys: Self::PhysReg) -> bool
Test whether the allocator currently treats the physical register as
occupied.
Auto Trait Implementations§
impl Freeze for A64RegAlloc
impl RefUnwindSafe for A64RegAlloc
impl Send for A64RegAlloc
impl Sync for A64RegAlloc
impl Unpin for A64RegAlloc
impl UnsafeUnpin for A64RegAlloc
impl UnwindSafe for A64RegAlloc
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more