diff --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp --- a/llvm/lib/CodeGen/RegAllocGreedy.cpp +++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp @@ -428,6 +428,8 @@ MCRegister tryAssign(LiveInterval&, AllocationOrder&, SmallVectorImpl&, const SmallVirtRegSet&); + MCRegister tryFindEvictionCandidate(LiveInterval &, const AllocationOrder &, + uint8_t, const SmallVirtRegSet &) const; MCRegister tryEvict(LiveInterval &, AllocationOrder &, SmallVectorImpl &, uint8_t, const SmallVirtRegSet &); @@ -1099,17 +1101,9 @@ return !Matrix->isPhysRegUsed(PhysReg); } -/// tryEvict - Try to evict all interferences for a physreg. -/// @param VirtReg Currently unassigned virtual register. -/// @param Order Physregs to try. -/// @return Physreg to assign VirtReg, or 0. -MCRegister RAGreedy::tryEvict(LiveInterval &VirtReg, AllocationOrder &Order, - SmallVectorImpl &NewVRegs, - uint8_t CostPerUseLimit, - const SmallVirtRegSet &FixedRegisters) { - NamedRegionTimer T("evict", "Evict", TimerGroupName, TimerGroupDescription, - TimePassesIsEnabled); - +MCRegister RAGreedy::tryFindEvictionCandidate( + LiveInterval &VirtReg, const AllocationOrder &Order, + uint8_t CostPerUseLimit, const SmallVirtRegSet &FixedRegisters) const { // Keep track of the cheapest interference seen so far. EvictionCost BestCost; BestCost.setMax(); @@ -1167,7 +1161,22 @@ if (I.isHint()) break; } + return BestPhys; +} + +/// tryEvict - Try to evict all interferences for a physreg. +/// @param VirtReg Currently unassigned virtual register. +/// @param Order Physregs to try. +/// @return Physreg to assign VirtReg, or 0. +MCRegister RAGreedy::tryEvict(LiveInterval &VirtReg, AllocationOrder &Order, + SmallVectorImpl &NewVRegs, + uint8_t CostPerUseLimit, + const SmallVirtRegSet &FixedRegisters) { + NamedRegionTimer T("evict", "Evict", TimerGroupName, TimerGroupDescription, + TimePassesIsEnabled); + MCRegister BestPhys = + tryFindEvictionCandidate(VirtReg, Order, CostPerUseLimit, FixedRegisters); if (BestPhys.isValid()) evictInterference(VirtReg, BestPhys, NewVRegs); return BestPhys;