diff options
| author | Jim Grosbach <grosbach@apple.com> | 2010-09-01 19:28:41 +0000 |
|---|---|---|
| committer | Jim Grosbach <grosbach@apple.com> | 2010-09-01 19:28:41 +0000 |
| commit | 1f758831cbbdbfcb0cf164959b08b8219deac018 (patch) | |
| tree | 82d6311c071c9ae030e3ea76318ecf42ef064020 /lib/CodeGen/RegAllocFast.cpp | |
| parent | c096704c4a261ac78133680d2c308e1f553e3eef (diff) | |
The register allocator shouldn't consider allocating reserved registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112728 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/RegAllocFast.cpp')
| -rw-r--r-- | lib/CodeGen/RegAllocFast.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/CodeGen/RegAllocFast.cpp b/lib/CodeGen/RegAllocFast.cpp index 3df4ab71e4..3cf1d726ec 100644 --- a/lib/CodeGen/RegAllocFast.cpp +++ b/lib/CodeGen/RegAllocFast.cpp @@ -113,6 +113,9 @@ namespace { // Allocatable - vector of allocatable physical registers. BitVector Allocatable; + // Reserved - vector of reserved physical registers. + BitVector Reserved; + // SkippedInstrs - Descriptors of instructions whose clobber list was // ignored because all registers were spilled. It is still necessary to // mark all the clobbered registers as used by the function. @@ -709,7 +712,7 @@ void RAFast::handleThroughOperands(MachineInstr *MI, } // Restore UsedInInstr to a state usable for allocating normal virtual uses. - UsedInInstr.reset(); + UsedInInstr = Reserved; for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); if (!MO.isReg() || (MO.isDef() && !MO.isEarlyClobber())) continue; @@ -835,7 +838,7 @@ void RAFast::AllocateBasicBlock() { } // Track registers used by instruction. - UsedInInstr.reset(); + UsedInInstr = Reserved; // First scan. // Mark physreg uses and early clobbers as used. @@ -913,7 +916,7 @@ void RAFast::AllocateBasicBlock() { // Track registers defined by instruction - early clobbers and tied uses at // this point. - UsedInInstr.reset(); + UsedInInstr = Reserved; if (hasEarlyClobbers) { for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { MachineOperand &MO = MI->getOperand(i); @@ -1011,6 +1014,7 @@ bool RAFast::runOnMachineFunction(MachineFunction &Fn) { UsedInInstr.resize(TRI->getNumRegs()); Allocatable = TRI->getAllocatableSet(*MF); + Reserved = TRI->getReservedRegs(*MF); // initialize the virtual->physical register map to have a 'null' // mapping for all virtual registers |
