From 56ddada278aa768a6cc32782b6f92986d160d78b Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 17 Feb 2004 17:49:10 +0000 Subject: [PATCH] Remove the -disable-kill option. The register allocator is buggy with it, and it was only for debugging in the first place. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11557 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/RegAllocLocal.cpp | 89 +++++++++++++++-------------------- 1 file changed, 39 insertions(+), 50 deletions(-) diff --git a/lib/CodeGen/RegAllocLocal.cpp b/lib/CodeGen/RegAllocLocal.cpp index 59bb1a542b6..b533bc87865 100644 --- a/lib/CodeGen/RegAllocLocal.cpp +++ b/lib/CodeGen/RegAllocLocal.cpp @@ -31,9 +31,6 @@ namespace { Statistic<> NumSpilled ("ra-local", "Number of registers spilled"); Statistic<> NumReloaded("ra-local", "Number of registers reloaded"); Statistic<> NumFused ("ra-local", "Number of reloads fused into instructions"); - cl::opt DisableKill("disable-kill", cl::Hidden, - cl::desc("Disable register kill in local-ra")); - class RA : public MachineFunctionPass { const TargetMachine *TM; MachineFunction *MF; @@ -122,8 +119,7 @@ namespace { } virtual void getAnalysisUsage(AnalysisUsage &AU) const { - if (!DisableKill) - AU.addRequired(); + AU.addRequired(); AU.addRequiredID(PHIEliminationID); AU.addRequiredID(TwoAddressInstructionPassID); MachineFunctionPass::getAnalysisUsage(AU); @@ -263,7 +259,6 @@ void RA::removePhysReg(unsigned PhysReg) { /// void RA::spillVirtReg(MachineBasicBlock &MBB, MachineInstr *I, unsigned VirtReg, unsigned PhysReg) { - if (!VirtReg && DisableKill) return; assert(VirtReg && "Spilling a physical register is illegal!" " Must not have appropriate kill for the register or use exists beyond" " the intended one."); @@ -556,28 +551,26 @@ void RA::AllocateBasicBlock(MachineBasicBlock &MBB) { MRegisterInfo::isVirtualRegister(MI->getOperand(i).getReg())) MI = reloadVirtReg(MBB, MI, i); - if (!DisableKill) { - // If this instruction is the last user of anything in registers, kill the - // value, freeing the register being used, so it doesn't need to be - // spilled to memory. - // - for (LiveVariables::killed_iterator KI = LV->killed_begin(MI), - KE = LV->killed_end(MI); KI != KE; ++KI) { - unsigned VirtReg = KI->second; - unsigned PhysReg = VirtReg; - if (MRegisterInfo::isVirtualRegister(VirtReg)) { - // If the virtual register was never materialized into a register, it - // might not be in the map, but it won't hurt to zero it out anyway. - unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg); - PhysReg = PhysRegSlot; - PhysRegSlot = 0; - } + // If this instruction is the last user of anything in registers, kill the + // value, freeing the register being used, so it doesn't need to be + // spilled to memory. + // + for (LiveVariables::killed_iterator KI = LV->killed_begin(MI), + KE = LV->killed_end(MI); KI != KE; ++KI) { + unsigned VirtReg = KI->second; + unsigned PhysReg = VirtReg; + if (MRegisterInfo::isVirtualRegister(VirtReg)) { + // If the virtual register was never materialized into a register, it + // might not be in the map, but it won't hurt to zero it out anyway. + unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg); + PhysReg = PhysRegSlot; + PhysRegSlot = 0; + } - if (PhysReg) { - DEBUG(std::cerr << " Last use of " << RegInfo->getName(PhysReg) - << "[%reg" << VirtReg <<"], removing it from live set\n"); - removePhysReg(PhysReg); - } + if (PhysReg) { + DEBUG(std::cerr << " Last use of " << RegInfo->getName(PhysReg) + << "[%reg" << VirtReg <<"], removing it from live set\n"); + removePhysReg(PhysReg); } } @@ -629,27 +622,25 @@ void RA::AllocateBasicBlock(MachineBasicBlock &MBB) { MI->SetMachineOperandReg(i, DestPhysReg); // Assign the output register } - if (!DisableKill) { - // If this instruction defines any registers that are immediately dead, - // kill them now. - // - for (LiveVariables::killed_iterator KI = LV->dead_begin(MI), - KE = LV->dead_end(MI); KI != KE; ++KI) { - unsigned VirtReg = KI->second; - unsigned PhysReg = VirtReg; - if (MRegisterInfo::isVirtualRegister(VirtReg)) { - unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg); - PhysReg = PhysRegSlot; - assert(PhysReg != 0); - PhysRegSlot = 0; - } + // If this instruction defines any registers that are immediately dead, + // kill them now. + // + for (LiveVariables::killed_iterator KI = LV->dead_begin(MI), + KE = LV->dead_end(MI); KI != KE; ++KI) { + unsigned VirtReg = KI->second; + unsigned PhysReg = VirtReg; + if (MRegisterInfo::isVirtualRegister(VirtReg)) { + unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg); + PhysReg = PhysRegSlot; + assert(PhysReg != 0); + PhysRegSlot = 0; + } - if (PhysReg) { - DEBUG(std::cerr << " Register " << RegInfo->getName(PhysReg) - << " [%reg" << VirtReg - << "] is never used, removing it frame live list\n"); - removePhysReg(PhysReg); - } + if (PhysReg) { + DEBUG(std::cerr << " Register " << RegInfo->getName(PhysReg) + << " [%reg" << VirtReg + << "] is never used, removing it frame live list\n"); + removePhysReg(PhysReg); } } } @@ -692,6 +683,7 @@ bool RA::runOnMachineFunction(MachineFunction &Fn) { MF = &Fn; TM = &Fn.getTarget(); RegInfo = TM->getRegisterInfo(); + LV = &getAnalysis(); PhysRegsUsed.assign(RegInfo->getNumRegs(), -1); @@ -699,9 +691,6 @@ bool RA::runOnMachineFunction(MachineFunction &Fn) { // mapping for all virtual registers Virt2PhysRegMap.assign(MF->getSSARegMap()->getNumVirtualRegs(), 0); - if (!DisableKill) - LV = &getAnalysis(); - // Loop over all of the basic blocks, eliminating virtual register references for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); MBB != MBBe; ++MBB) -- 2.34.1