Fix bug in RegScavenger::scavengeRegister().

Reserved registers are not candidates for scavenging, and they were removed
from the candidate list like this:

CreateRegClassMask(RC, Candidates);
Candidates ^= ReservedRegs;

However, when there are reserved registers outside RC, this causes invalid
bits to be set in Candidates.

llvm-svn: 75847
This commit is contained in:
Jakob Stoklund Olesen 2009-07-15 22:32:11 +00:00
parent 19251ec836
commit 41ed90f03e
1 changed files with 1 additions and 1 deletions

View File

@ -426,7 +426,7 @@ unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC,
// Mask off the registers which are not in the TargetRegisterClass. // Mask off the registers which are not in the TargetRegisterClass.
BitVector Candidates(NumPhysRegs, false); BitVector Candidates(NumPhysRegs, false);
CreateRegClassMask(RC, Candidates); CreateRegClassMask(RC, Candidates);
Candidates ^= ReservedRegs; // Do not include reserved registers. Candidates ^= ReservedRegs & Candidates; // Do not include reserved registers.
// Exclude all the registers being used by the instruction. // Exclude all the registers being used by the instruction.
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {