// Scavenge a new scratch register
CurrentVirtReg = Reg;
const TargetRegisterClass *RC = Fn.getRegInfo().getRegClass(Reg);
- const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo();
- BitVector Candidates(TRI->getNumRegs());
- RS->getRegsAvailable(RC, Candidates);
-
- // If there are any registers available, use the one that's
- // unused for the longest after this instruction. That increases
- // the ability to reuse the value.
- if (Candidates.any()) {
- MachineBasicBlock::iterator UMI;
- CurrentScratchReg = RS->findSurvivorReg(I, Candidates, 25, UMI);
- } else {
- // No register is "free". Scavenge a register.
- CurrentScratchReg = RS->scavengeRegister(RC, I, SPAdj);
- }
-
+ CurrentScratchReg = RS->scavengeRegister(RC, I, SPAdj);
PrevValue = Value;
}
// replace this reference to the virtual register with the
Candidates.reset(MO.getReg());
}
+ // Try to find a register that's unused if there is one, as then we won't
+ // have to spill.
+ if ((Candidates & RegsAvailable).any())
+ Candidates &= RegsAvailable;
+
// Find the register whose use is furthest away.
MachineBasicBlock::iterator UseMI;
unsigned SReg = findSurvivorReg(I, Candidates, 25, UseMI);
- // If we found an unused register there is no reason to spill it. We have
- // probably found a callee-saved register that has been saved in the
- // prologue, but happens to be unused at this point.
+ // If we found an unused register there is no reason to spill it.
if (!isAliasUsed(SReg))
return SReg;