LLVM API Documentation
00001 //===-- RegisterScavenging.cpp - Machine register scavenging --------------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file implements the machine register scavenger. It can provide 00011 // information, such as unused registers, at any point in a machine basic block. 00012 // It also provides a mechanism to make registers available by evicting them to 00013 // spill slots. 00014 // 00015 //===----------------------------------------------------------------------===// 00016 00017 #define DEBUG_TYPE "reg-scavenging" 00018 #include "llvm/CodeGen/RegisterScavenging.h" 00019 #include "llvm/CodeGen/MachineBasicBlock.h" 00020 #include "llvm/CodeGen/MachineFrameInfo.h" 00021 #include "llvm/CodeGen/MachineFunction.h" 00022 #include "llvm/CodeGen/MachineInstr.h" 00023 #include "llvm/CodeGen/MachineRegisterInfo.h" 00024 #include "llvm/Support/Debug.h" 00025 #include "llvm/Support/ErrorHandling.h" 00026 #include "llvm/Support/raw_ostream.h" 00027 #include "llvm/Target/TargetInstrInfo.h" 00028 #include "llvm/Target/TargetMachine.h" 00029 #include "llvm/Target/TargetRegisterInfo.h" 00030 using namespace llvm; 00031 00032 /// setUsed - Set the register and its sub-registers as being used. 00033 void RegScavenger::setUsed(unsigned Reg) { 00034 RegsAvailable.reset(Reg); 00035 00036 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) 00037 RegsAvailable.reset(*SubRegs); 00038 } 00039 00040 bool RegScavenger::isAliasUsed(unsigned Reg) const { 00041 for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) 00042 if (isUsed(*AI, *AI == Reg)) 00043 return true; 00044 return false; 00045 } 00046 00047 void RegScavenger::initRegState() { 00048 for (SmallVector<ScavengedInfo, 2>::iterator I = Scavenged.begin(), 00049 IE = Scavenged.end(); I != IE; ++I) { 00050 I->Reg = 0; 00051 I->Restore = NULL; 00052 } 00053 00054 // All registers started out unused. 00055 RegsAvailable.set(); 00056 00057 if (!MBB) 00058 return; 00059 00060 // Live-in registers are in use. 00061 for (MachineBasicBlock::livein_iterator I = MBB->livein_begin(), 00062 E = MBB->livein_end(); I != E; ++I) 00063 setUsed(*I); 00064 00065 // Pristine CSRs are also unavailable. 00066 BitVector PR = MBB->getParent()->getFrameInfo()->getPristineRegs(MBB); 00067 for (int I = PR.find_first(); I>0; I = PR.find_next(I)) 00068 setUsed(I); 00069 } 00070 00071 void RegScavenger::enterBasicBlock(MachineBasicBlock *mbb) { 00072 MachineFunction &MF = *mbb->getParent(); 00073 const TargetMachine &TM = MF.getTarget(); 00074 TII = TM.getInstrInfo(); 00075 TRI = TM.getRegisterInfo(); 00076 MRI = &MF.getRegInfo(); 00077 00078 assert((NumPhysRegs == 0 || NumPhysRegs == TRI->getNumRegs()) && 00079 "Target changed?"); 00080 00081 // It is not possible to use the register scavenger after late optimization 00082 // passes that don't preserve accurate liveness information. 00083 assert(MRI->tracksLiveness() && 00084 "Cannot use register scavenger with inaccurate liveness"); 00085 00086 // Self-initialize. 00087 if (!MBB) { 00088 NumPhysRegs = TRI->getNumRegs(); 00089 RegsAvailable.resize(NumPhysRegs); 00090 KillRegs.resize(NumPhysRegs); 00091 DefRegs.resize(NumPhysRegs); 00092 00093 // Create callee-saved registers bitvector. 00094 CalleeSavedRegs.resize(NumPhysRegs); 00095 const uint16_t *CSRegs = TRI->getCalleeSavedRegs(&MF); 00096 if (CSRegs != NULL) 00097 for (unsigned i = 0; CSRegs[i]; ++i) 00098 CalleeSavedRegs.set(CSRegs[i]); 00099 } 00100 00101 MBB = mbb; 00102 initRegState(); 00103 00104 Tracking = false; 00105 } 00106 00107 void RegScavenger::addRegWithSubRegs(BitVector &BV, unsigned Reg) { 00108 BV.set(Reg); 00109 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) 00110 BV.set(*SubRegs); 00111 } 00112 00113 void RegScavenger::determineKillsAndDefs() { 00114 assert(Tracking && "Must be tracking to determine kills and defs"); 00115 00116 MachineInstr *MI = MBBI; 00117 assert(!MI->isDebugValue() && "Debug values have no kills or defs"); 00118 00119 // Find out which registers are early clobbered, killed, defined, and marked 00120 // def-dead in this instruction. 00121 // FIXME: The scavenger is not predication aware. If the instruction is 00122 // predicated, conservatively assume "kill" markers do not actually kill the 00123 // register. Similarly ignores "dead" markers. 00124 bool isPred = TII->isPredicated(MI); 00125 KillRegs.reset(); 00126 DefRegs.reset(); 00127 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00128 const MachineOperand &MO = MI->getOperand(i); 00129 if (MO.isRegMask()) 00130 (isPred ? DefRegs : KillRegs).setBitsNotInMask(MO.getRegMask()); 00131 if (!MO.isReg()) 00132 continue; 00133 unsigned Reg = MO.getReg(); 00134 if (!Reg || TargetRegisterInfo::isVirtualRegister(Reg) || isReserved(Reg)) 00135 continue; 00136 00137 if (MO.isUse()) { 00138 // Ignore undef uses. 00139 if (MO.isUndef()) 00140 continue; 00141 if (!isPred && MO.isKill()) 00142 addRegWithSubRegs(KillRegs, Reg); 00143 } else { 00144 assert(MO.isDef()); 00145 if (!isPred && MO.isDead()) 00146 addRegWithSubRegs(KillRegs, Reg); 00147 else 00148 addRegWithSubRegs(DefRegs, Reg); 00149 } 00150 } 00151 } 00152 00153 void RegScavenger::unprocess() { 00154 assert(Tracking && "Cannot unprocess because we're not tracking"); 00155 00156 MachineInstr *MI = MBBI; 00157 if (!MI->isDebugValue()) { 00158 determineKillsAndDefs(); 00159 00160 // Commit the changes. 00161 setUsed(KillRegs); 00162 setUnused(DefRegs); 00163 } 00164 00165 if (MBBI == MBB->begin()) { 00166 MBBI = MachineBasicBlock::iterator(NULL); 00167 Tracking = false; 00168 } else 00169 --MBBI; 00170 } 00171 00172 void RegScavenger::forward() { 00173 // Move ptr forward. 00174 if (!Tracking) { 00175 MBBI = MBB->begin(); 00176 Tracking = true; 00177 } else { 00178 assert(MBBI != MBB->end() && "Already past the end of the basic block!"); 00179 MBBI = llvm::next(MBBI); 00180 } 00181 assert(MBBI != MBB->end() && "Already at the end of the basic block!"); 00182 00183 MachineInstr *MI = MBBI; 00184 00185 for (SmallVector<ScavengedInfo, 2>::iterator I = Scavenged.begin(), 00186 IE = Scavenged.end(); I != IE; ++I) { 00187 if (I->Restore != MI) 00188 continue; 00189 00190 I->Reg = 0; 00191 I->Restore = NULL; 00192 } 00193 00194 if (MI->isDebugValue()) 00195 return; 00196 00197 determineKillsAndDefs(); 00198 00199 // Verify uses and defs. 00200 #ifndef NDEBUG 00201 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00202 const MachineOperand &MO = MI->getOperand(i); 00203 if (!MO.isReg()) 00204 continue; 00205 unsigned Reg = MO.getReg(); 00206 if (!Reg || TargetRegisterInfo::isVirtualRegister(Reg) || isReserved(Reg)) 00207 continue; 00208 if (MO.isUse()) { 00209 if (MO.isUndef()) 00210 continue; 00211 if (!isUsed(Reg)) { 00212 // Check if it's partial live: e.g. 00213 // D0 = insert_subreg D0<undef>, S0 00214 // ... D0 00215 // The problem is the insert_subreg could be eliminated. The use of 00216 // D0 is using a partially undef value. This is not *incorrect* since 00217 // S1 is can be freely clobbered. 00218 // Ideally we would like a way to model this, but leaving the 00219 // insert_subreg around causes both correctness and performance issues. 00220 bool SubUsed = false; 00221 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) 00222 if (isUsed(*SubRegs)) { 00223 SubUsed = true; 00224 break; 00225 } 00226 if (!SubUsed) { 00227 MBB->getParent()->verify(NULL, "In Register Scavenger"); 00228 llvm_unreachable("Using an undefined register!"); 00229 } 00230 (void)SubUsed; 00231 } 00232 } else { 00233 assert(MO.isDef()); 00234 #if 0 00235 // FIXME: Enable this once we've figured out how to correctly transfer 00236 // implicit kills during codegen passes like the coalescer. 00237 assert((KillRegs.test(Reg) || isUnused(Reg) || 00238 isLiveInButUnusedBefore(Reg, MI, MBB, TRI, MRI)) && 00239 "Re-defining a live register!"); 00240 #endif 00241 } 00242 } 00243 #endif // NDEBUG 00244 00245 // Commit the changes. 00246 setUnused(KillRegs); 00247 setUsed(DefRegs); 00248 } 00249 00250 void RegScavenger::getRegsUsed(BitVector &used, bool includeReserved) { 00251 used = RegsAvailable; 00252 used.flip(); 00253 if (includeReserved) 00254 used |= MRI->getReservedRegs(); 00255 else 00256 used.reset(MRI->getReservedRegs()); 00257 } 00258 00259 unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass *RC) const { 00260 for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); 00261 I != E; ++I) 00262 if (!isAliasUsed(*I)) { 00263 DEBUG(dbgs() << "Scavenger found unused reg: " << TRI->getName(*I) << 00264 "\n"); 00265 return *I; 00266 } 00267 return 0; 00268 } 00269 00270 /// getRegsAvailable - Return all available registers in the register class 00271 /// in Mask. 00272 BitVector RegScavenger::getRegsAvailable(const TargetRegisterClass *RC) { 00273 BitVector Mask(TRI->getNumRegs()); 00274 for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); 00275 I != E; ++I) 00276 if (!isAliasUsed(*I)) 00277 Mask.set(*I); 00278 return Mask; 00279 } 00280 00281 /// findSurvivorReg - Return the candidate register that is unused for the 00282 /// longest after StargMII. UseMI is set to the instruction where the search 00283 /// stopped. 00284 /// 00285 /// No more than InstrLimit instructions are inspected. 00286 /// 00287 unsigned RegScavenger::findSurvivorReg(MachineBasicBlock::iterator StartMI, 00288 BitVector &Candidates, 00289 unsigned InstrLimit, 00290 MachineBasicBlock::iterator &UseMI) { 00291 int Survivor = Candidates.find_first(); 00292 assert(Survivor > 0 && "No candidates for scavenging"); 00293 00294 MachineBasicBlock::iterator ME = MBB->getFirstTerminator(); 00295 assert(StartMI != ME && "MI already at terminator"); 00296 MachineBasicBlock::iterator RestorePointMI = StartMI; 00297 MachineBasicBlock::iterator MI = StartMI; 00298 00299 bool inVirtLiveRange = false; 00300 for (++MI; InstrLimit > 0 && MI != ME; ++MI, --InstrLimit) { 00301 if (MI->isDebugValue()) { 00302 ++InstrLimit; // Don't count debug instructions 00303 continue; 00304 } 00305 bool isVirtKillInsn = false; 00306 bool isVirtDefInsn = false; 00307 // Remove any candidates touched by instruction. 00308 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00309 const MachineOperand &MO = MI->getOperand(i); 00310 if (MO.isRegMask()) 00311 Candidates.clearBitsNotInMask(MO.getRegMask()); 00312 if (!MO.isReg() || MO.isUndef() || !MO.getReg()) 00313 continue; 00314 if (TargetRegisterInfo::isVirtualRegister(MO.getReg())) { 00315 if (MO.isDef()) 00316 isVirtDefInsn = true; 00317 else if (MO.isKill()) 00318 isVirtKillInsn = true; 00319 continue; 00320 } 00321 for (MCRegAliasIterator AI(MO.getReg(), TRI, true); AI.isValid(); ++AI) 00322 Candidates.reset(*AI); 00323 } 00324 // If we're not in a virtual reg's live range, this is a valid 00325 // restore point. 00326 if (!inVirtLiveRange) RestorePointMI = MI; 00327 00328 // Update whether we're in the live range of a virtual register 00329 if (isVirtKillInsn) inVirtLiveRange = false; 00330 if (isVirtDefInsn) inVirtLiveRange = true; 00331 00332 // Was our survivor untouched by this instruction? 00333 if (Candidates.test(Survivor)) 00334 continue; 00335 00336 // All candidates gone? 00337 if (Candidates.none()) 00338 break; 00339 00340 Survivor = Candidates.find_first(); 00341 } 00342 // If we ran off the end, that's where we want to restore. 00343 if (MI == ME) RestorePointMI = ME; 00344 assert (RestorePointMI != StartMI && 00345 "No available scavenger restore location!"); 00346 00347 // We ran out of candidates, so stop the search. 00348 UseMI = RestorePointMI; 00349 return Survivor; 00350 } 00351 00352 static unsigned getFrameIndexOperandNum(MachineInstr *MI) { 00353 unsigned i = 0; 00354 while (!MI->getOperand(i).isFI()) { 00355 ++i; 00356 assert(i < MI->getNumOperands() && 00357 "Instr doesn't have FrameIndex operand!"); 00358 } 00359 return i; 00360 } 00361 00362 unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC, 00363 MachineBasicBlock::iterator I, 00364 int SPAdj) { 00365 // Consider all allocatable registers in the register class initially 00366 BitVector Candidates = 00367 TRI->getAllocatableSet(*I->getParent()->getParent(), RC); 00368 00369 // Exclude all the registers being used by the instruction. 00370 for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { 00371 MachineOperand &MO = I->getOperand(i); 00372 if (MO.isReg() && MO.getReg() != 0 && 00373 !TargetRegisterInfo::isVirtualRegister(MO.getReg())) 00374 Candidates.reset(MO.getReg()); 00375 } 00376 00377 // Try to find a register that's unused if there is one, as then we won't 00378 // have to spill. Search explicitly rather than masking out based on 00379 // RegsAvailable, as RegsAvailable does not take aliases into account. 00380 // That's what getRegsAvailable() is for. 00381 BitVector Available = getRegsAvailable(RC); 00382 Available &= Candidates; 00383 if (Available.any()) 00384 Candidates = Available; 00385 00386 // Find the register whose use is furthest away. 00387 MachineBasicBlock::iterator UseMI; 00388 unsigned SReg = findSurvivorReg(I, Candidates, 25, UseMI); 00389 00390 // If we found an unused register there is no reason to spill it. 00391 if (!isAliasUsed(SReg)) { 00392 DEBUG(dbgs() << "Scavenged register: " << TRI->getName(SReg) << "\n"); 00393 return SReg; 00394 } 00395 00396 // Find an available scavenging slot. 00397 unsigned SI; 00398 for (SI = 0; SI < Scavenged.size(); ++SI) 00399 if (Scavenged[SI].Reg == 0) 00400 break; 00401 00402 if (SI == Scavenged.size()) { 00403 // We need to scavenge a register but have no spill slot, the target 00404 // must know how to do it (if not, we'll assert below). 00405 Scavenged.push_back(ScavengedInfo()); 00406 } 00407 00408 // Avoid infinite regress 00409 Scavenged[SI].Reg = SReg; 00410 00411 // If the target knows how to save/restore the register, let it do so; 00412 // otherwise, use the emergency stack spill slot. 00413 if (!TRI->saveScavengerRegister(*MBB, I, UseMI, RC, SReg)) { 00414 // Spill the scavenged register before I. 00415 assert(Scavenged[SI].FrameIndex >= 0 && 00416 "Cannot scavenge register without an emergency spill slot!"); 00417 TII->storeRegToStackSlot(*MBB, I, SReg, true, Scavenged[SI].FrameIndex, 00418 RC, TRI); 00419 MachineBasicBlock::iterator II = prior(I); 00420 00421 unsigned FIOperandNum = getFrameIndexOperandNum(II); 00422 TRI->eliminateFrameIndex(II, SPAdj, FIOperandNum, this); 00423 00424 // Restore the scavenged register before its use (or first terminator). 00425 TII->loadRegFromStackSlot(*MBB, UseMI, SReg, Scavenged[SI].FrameIndex, 00426 RC, TRI); 00427 II = prior(UseMI); 00428 00429 FIOperandNum = getFrameIndexOperandNum(II); 00430 TRI->eliminateFrameIndex(II, SPAdj, FIOperandNum, this); 00431 } 00432 00433 Scavenged[SI].Restore = prior(UseMI); 00434 00435 // Doing this here leads to infinite regress. 00436 // Scavenged[SI].Reg = SReg; 00437 00438 DEBUG(dbgs() << "Scavenged register (with spill): " << TRI->getName(SReg) << 00439 "\n"); 00440 00441 return SReg; 00442 }