The register allocator shouldn't consider allocating reserved registers. PBQP version.

llvm-svn: 112742
This commit is contained in:
Jim Grosbach 2010-09-01 21:23:03 +00:00
parent 5ccf18c2fc
commit b070ddf6b4
1 changed files with 8 additions and 2 deletions

View File

@ -587,6 +587,8 @@ PBQP::Graph PBQPRegAlloc::constructPBQPProblem() {
// Resize allowedSets container appropriately.
allowedSets.resize(vregIntervalsToAlloc.size());
BitVector ReservedRegs = tri->getReservedRegs(*mf);
// Iterate over virtual register intervals to compute allowed sets...
for (unsigned node = 0; node < node2LI.size(); ++node) {
@ -595,8 +597,12 @@ PBQP::Graph PBQPRegAlloc::constructPBQPProblem() {
const TargetRegisterClass *liRC = mri->getRegClass(li->reg);
// Start by assuming all allocable registers in the class are allowed...
RegVector liAllowed(liRC->allocation_order_begin(*mf),
liRC->allocation_order_end(*mf));
RegVector liAllowed;
TargetRegisterClass::iterator aob = liRC->allocation_order_begin(*mf);
TargetRegisterClass::iterator aoe = liRC->allocation_order_end(*mf);
for (TargetRegisterClass::iterator it = aob; it != aoe; ++it)
if (!ReservedRegs.test(*it))
liAllowed.push_back(*it);
// Eliminate the physical registers which overlap with this range, along
// with all their aliases.