From: Jakob Stoklund Olesen Date: Wed, 15 Jul 2009 22:32:11 +0000 (+0000) Subject: Fix bug in RegScavenger::scavengeRegister(). X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=72fbc3d9d260e061bdee07059fcd63772c714091;p=oota-llvm.git 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75847 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/RegisterScavenging.cpp b/lib/CodeGen/RegisterScavenging.cpp index 84cff8d5d88..98f485045f6 100644 --- a/lib/CodeGen/RegisterScavenging.cpp +++ b/lib/CodeGen/RegisterScavenging.cpp @@ -426,7 +426,7 @@ unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC, // Mask off the registers which are not in the TargetRegisterClass. BitVector Candidates(NumPhysRegs, false); 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. for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {