LLVM API Documentation
00001 //===-- RegAllocLocal.cpp - A BasicBlock generic register allocator -------===// 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 register allocator allocates registers to a basic block at a time, 00011 // attempting to keep values in registers and reusing registers as appropriate. 00012 // 00013 //===----------------------------------------------------------------------===// 00014 00015 #define DEBUG_TYPE "regalloc" 00016 #include "llvm/BasicBlock.h" 00017 #include "llvm/CodeGen/MachineFunctionPass.h" 00018 #include "llvm/CodeGen/MachineInstr.h" 00019 #include "llvm/CodeGen/MachineFrameInfo.h" 00020 #include "llvm/CodeGen/MachineRegisterInfo.h" 00021 #include "llvm/CodeGen/Passes.h" 00022 #include "llvm/CodeGen/RegAllocRegistry.h" 00023 #include "llvm/Target/TargetInstrInfo.h" 00024 #include "llvm/Target/TargetMachine.h" 00025 #include "llvm/Support/CommandLine.h" 00026 #include "llvm/Support/Debug.h" 00027 #include "llvm/Support/Compiler.h" 00028 #include "llvm/ADT/DenseMap.h" 00029 #include "llvm/ADT/IndexedMap.h" 00030 #include "llvm/ADT/SmallSet.h" 00031 #include "llvm/ADT/SmallVector.h" 00032 #include "llvm/ADT/Statistic.h" 00033 #include "llvm/ADT/STLExtras.h" 00034 #include <algorithm> 00035 using namespace llvm; 00036 00037 STATISTIC(NumStores, "Number of stores added"); 00038 STATISTIC(NumLoads , "Number of loads added"); 00039 00040 static RegisterRegAlloc 00041 localRegAlloc("local", "local register allocator", 00042 createLocalRegisterAllocator); 00043 00044 namespace { 00045 class VISIBILITY_HIDDEN RALocal : public MachineFunctionPass { 00046 public: 00047 static char ID; 00048 RALocal() : MachineFunctionPass(&ID), StackSlotForVirtReg(-1) {} 00049 private: 00050 const TargetMachine *TM; 00051 MachineFunction *MF; 00052 const TargetRegisterInfo *TRI; 00053 const TargetInstrInfo *TII; 00054 00055 // StackSlotForVirtReg - Maps virtual regs to the frame index where these 00056 // values are spilled. 00057 IndexedMap<int, VirtReg2IndexFunctor> StackSlotForVirtReg; 00058 00059 // Virt2PhysRegMap - This map contains entries for each virtual register 00060 // that is currently available in a physical register. 00061 IndexedMap<unsigned, VirtReg2IndexFunctor> Virt2PhysRegMap; 00062 00063 unsigned &getVirt2PhysRegMapSlot(unsigned VirtReg) { 00064 return Virt2PhysRegMap[VirtReg]; 00065 } 00066 00067 // PhysRegsUsed - This array is effectively a map, containing entries for 00068 // each physical register that currently has a value (ie, it is in 00069 // Virt2PhysRegMap). The value mapped to is the virtual register 00070 // corresponding to the physical register (the inverse of the 00071 // Virt2PhysRegMap), or 0. The value is set to 0 if this register is pinned 00072 // because it is used by a future instruction, and to -2 if it is not 00073 // allocatable. If the entry for a physical register is -1, then the 00074 // physical register is "not in the map". 00075 // 00076 std::vector<int> PhysRegsUsed; 00077 00078 // PhysRegsUseOrder - This contains a list of the physical registers that 00079 // currently have a virtual register value in them. This list provides an 00080 // ordering of registers, imposing a reallocation order. This list is only 00081 // used if all registers are allocated and we have to spill one, in which 00082 // case we spill the least recently used register. Entries at the front of 00083 // the list are the least recently used registers, entries at the back are 00084 // the most recently used. 00085 // 00086 std::vector<unsigned> PhysRegsUseOrder; 00087 00088 // Virt2LastUseMap - This maps each virtual register to its last use 00089 // (MachineInstr*, operand index pair). 00090 IndexedMap<std::pair<MachineInstr*, unsigned>, VirtReg2IndexFunctor> 00091 Virt2LastUseMap; 00092 00093 std::pair<MachineInstr*,unsigned>& getVirtRegLastUse(unsigned Reg) { 00094 assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!"); 00095 return Virt2LastUseMap[Reg]; 00096 } 00097 00098 // VirtRegModified - This bitset contains information about which virtual 00099 // registers need to be spilled back to memory when their registers are 00100 // scavenged. If a virtual register has simply been rematerialized, there 00101 // is no reason to spill it to memory when we need the register back. 00102 // 00103 BitVector VirtRegModified; 00104 00105 // UsedInMultipleBlocks - Tracks whether a particular register is used in 00106 // more than one block. 00107 BitVector UsedInMultipleBlocks; 00108 00109 void markVirtRegModified(unsigned Reg, bool Val = true) { 00110 assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!"); 00111 Reg -= TargetRegisterInfo::FirstVirtualRegister; 00112 if (Val) 00113 VirtRegModified.set(Reg); 00114 else 00115 VirtRegModified.reset(Reg); 00116 } 00117 00118 bool isVirtRegModified(unsigned Reg) const { 00119 assert(TargetRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!"); 00120 assert(Reg - TargetRegisterInfo::FirstVirtualRegister < VirtRegModified.size() 00121 && "Illegal virtual register!"); 00122 return VirtRegModified[Reg - TargetRegisterInfo::FirstVirtualRegister]; 00123 } 00124 00125 void AddToPhysRegsUseOrder(unsigned Reg) { 00126 std::vector<unsigned>::iterator It = 00127 std::find(PhysRegsUseOrder.begin(), PhysRegsUseOrder.end(), Reg); 00128 if (It != PhysRegsUseOrder.end()) 00129 PhysRegsUseOrder.erase(It); 00130 PhysRegsUseOrder.push_back(Reg); 00131 } 00132 00133 void MarkPhysRegRecentlyUsed(unsigned Reg) { 00134 if (PhysRegsUseOrder.empty() || 00135 PhysRegsUseOrder.back() == Reg) return; // Already most recently used 00136 00137 for (unsigned i = PhysRegsUseOrder.size(); i != 0; --i) 00138 if (areRegsEqual(Reg, PhysRegsUseOrder[i-1])) { 00139 unsigned RegMatch = PhysRegsUseOrder[i-1]; // remove from middle 00140 PhysRegsUseOrder.erase(PhysRegsUseOrder.begin()+i-1); 00141 // Add it to the end of the list 00142 PhysRegsUseOrder.push_back(RegMatch); 00143 if (RegMatch == Reg) 00144 return; // Found an exact match, exit early 00145 } 00146 } 00147 00148 public: 00149 virtual const char *getPassName() const { 00150 return "Local Register Allocator"; 00151 } 00152 00153 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 00154 AU.addRequiredID(PHIEliminationID); 00155 AU.addRequiredID(TwoAddressInstructionPassID); 00156 MachineFunctionPass::getAnalysisUsage(AU); 00157 } 00158 00159 private: 00160 /// runOnMachineFunction - Register allocate the whole function 00161 bool runOnMachineFunction(MachineFunction &Fn); 00162 00163 /// AllocateBasicBlock - Register allocate the specified basic block. 00164 void AllocateBasicBlock(MachineBasicBlock &MBB); 00165 00166 00167 /// areRegsEqual - This method returns true if the specified registers are 00168 /// related to each other. To do this, it checks to see if they are equal 00169 /// or if the first register is in the alias set of the second register. 00170 /// 00171 bool areRegsEqual(unsigned R1, unsigned R2) const { 00172 if (R1 == R2) return true; 00173 for (const unsigned *AliasSet = TRI->getAliasSet(R2); 00174 *AliasSet; ++AliasSet) { 00175 if (*AliasSet == R1) return true; 00176 } 00177 return false; 00178 } 00179 00180 /// getStackSpaceFor - This returns the frame index of the specified virtual 00181 /// register on the stack, allocating space if necessary. 00182 int getStackSpaceFor(unsigned VirtReg, const TargetRegisterClass *RC); 00183 00184 /// removePhysReg - This method marks the specified physical register as no 00185 /// longer being in use. 00186 /// 00187 void removePhysReg(unsigned PhysReg); 00188 00189 /// spillVirtReg - This method spills the value specified by PhysReg into 00190 /// the virtual register slot specified by VirtReg. It then updates the RA 00191 /// data structures to indicate the fact that PhysReg is now available. 00192 /// 00193 void spillVirtReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, 00194 unsigned VirtReg, unsigned PhysReg); 00195 00196 /// spillPhysReg - This method spills the specified physical register into 00197 /// the virtual register slot associated with it. If OnlyVirtRegs is set to 00198 /// true, then the request is ignored if the physical register does not 00199 /// contain a virtual register. 00200 /// 00201 void spillPhysReg(MachineBasicBlock &MBB, MachineInstr *I, 00202 unsigned PhysReg, bool OnlyVirtRegs = false); 00203 00204 /// assignVirtToPhysReg - This method updates local state so that we know 00205 /// that PhysReg is the proper container for VirtReg now. The physical 00206 /// register must not be used for anything else when this is called. 00207 /// 00208 void assignVirtToPhysReg(unsigned VirtReg, unsigned PhysReg); 00209 00210 /// isPhysRegAvailable - Return true if the specified physical register is 00211 /// free and available for use. This also includes checking to see if 00212 /// aliased registers are all free... 00213 /// 00214 bool isPhysRegAvailable(unsigned PhysReg) const; 00215 00216 /// getFreeReg - Look to see if there is a free register available in the 00217 /// specified register class. If not, return 0. 00218 /// 00219 unsigned getFreeReg(const TargetRegisterClass *RC); 00220 00221 /// getReg - Find a physical register to hold the specified virtual 00222 /// register. If all compatible physical registers are used, this method 00223 /// spills the last used virtual register to the stack, and uses that 00224 /// register. If NoFree is true, that means the caller knows there isn't 00225 /// a free register, do not call getFreeReg(). 00226 unsigned getReg(MachineBasicBlock &MBB, MachineInstr *MI, 00227 unsigned VirtReg, bool NoFree = false); 00228 00229 /// reloadVirtReg - This method transforms the specified specified virtual 00230 /// register use to refer to a physical register. This method may do this 00231 /// in one of several ways: if the register is available in a physical 00232 /// register already, it uses that physical register. If the value is not 00233 /// in a physical register, and if there are physical registers available, 00234 /// it loads it into a register. If register pressure is high, and it is 00235 /// possible, it tries to fold the load of the virtual register into the 00236 /// instruction itself. It avoids doing this if register pressure is low to 00237 /// improve the chance that subsequent instructions can use the reloaded 00238 /// value. This method returns the modified instruction. 00239 /// 00240 MachineInstr *reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI, 00241 unsigned OpNum, SmallSet<unsigned, 4> &RRegs); 00242 00243 /// ComputeLocalLiveness - Computes liveness of registers within a basic 00244 /// block, setting the killed/dead flags as appropriate. 00245 void ComputeLocalLiveness(MachineBasicBlock& MBB); 00246 00247 void reloadPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator &I, 00248 unsigned PhysReg); 00249 }; 00250 char RALocal::ID = 0; 00251 } 00252 00253 /// getStackSpaceFor - This allocates space for the specified virtual register 00254 /// to be held on the stack. 00255 int RALocal::getStackSpaceFor(unsigned VirtReg, const TargetRegisterClass *RC) { 00256 // Find the location Reg would belong... 00257 int SS = StackSlotForVirtReg[VirtReg]; 00258 if (SS != -1) 00259 return SS; // Already has space allocated? 00260 00261 // Allocate a new stack object for this spill location... 00262 int FrameIdx = MF->getFrameInfo()->CreateStackObject(RC->getSize(), 00263 RC->getAlignment()); 00264 00265 // Assign the slot... 00266 StackSlotForVirtReg[VirtReg] = FrameIdx; 00267 return FrameIdx; 00268 } 00269 00270 00271 /// removePhysReg - This method marks the specified physical register as no 00272 /// longer being in use. 00273 /// 00274 void RALocal::removePhysReg(unsigned PhysReg) { 00275 PhysRegsUsed[PhysReg] = -1; // PhyReg no longer used 00276 00277 std::vector<unsigned>::iterator It = 00278 std::find(PhysRegsUseOrder.begin(), PhysRegsUseOrder.end(), PhysReg); 00279 if (It != PhysRegsUseOrder.end()) 00280 PhysRegsUseOrder.erase(It); 00281 } 00282 00283 00284 /// spillVirtReg - This method spills the value specified by PhysReg into the 00285 /// virtual register slot specified by VirtReg. It then updates the RA data 00286 /// structures to indicate the fact that PhysReg is now available. 00287 /// 00288 void RALocal::spillVirtReg(MachineBasicBlock &MBB, 00289 MachineBasicBlock::iterator I, 00290 unsigned VirtReg, unsigned PhysReg) { 00291 assert(VirtReg && "Spilling a physical register is illegal!" 00292 " Must not have appropriate kill for the register or use exists beyond" 00293 " the intended one."); 00294 DOUT << " Spilling register " << TRI->getName(PhysReg) 00295 << " containing %reg" << VirtReg; 00296 00297 if (!isVirtRegModified(VirtReg)) { 00298 DOUT << " which has not been modified, so no store necessary!"; 00299 std::pair<MachineInstr*, unsigned> &LastUse = getVirtRegLastUse(VirtReg); 00300 if (LastUse.first) 00301 LastUse.first->getOperand(LastUse.second).setIsKill(); 00302 } else { 00303 // Otherwise, there is a virtual register corresponding to this physical 00304 // register. We only need to spill it into its stack slot if it has been 00305 // modified. 00306 const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg); 00307 int FrameIndex = getStackSpaceFor(VirtReg, RC); 00308 DOUT << " to stack slot #" << FrameIndex; 00309 // If the instruction reads the register that's spilled, (e.g. this can 00310 // happen if it is a move to a physical register), then the spill 00311 // instruction is not a kill. 00312 bool isKill = !(I != MBB.end() && I->readsRegister(PhysReg)); 00313 TII->storeRegToStackSlot(MBB, I, PhysReg, isKill, FrameIndex, RC); 00314 ++NumStores; // Update statistics 00315 } 00316 00317 getVirt2PhysRegMapSlot(VirtReg) = 0; // VirtReg no longer available 00318 00319 DOUT << "\n"; 00320 removePhysReg(PhysReg); 00321 } 00322 00323 00324 /// spillPhysReg - This method spills the specified physical register into the 00325 /// virtual register slot associated with it. If OnlyVirtRegs is set to true, 00326 /// then the request is ignored if the physical register does not contain a 00327 /// virtual register. 00328 /// 00329 void RALocal::spillPhysReg(MachineBasicBlock &MBB, MachineInstr *I, 00330 unsigned PhysReg, bool OnlyVirtRegs) { 00331 if (PhysRegsUsed[PhysReg] != -1) { // Only spill it if it's used! 00332 assert(PhysRegsUsed[PhysReg] != -2 && "Non allocable reg used!"); 00333 if (PhysRegsUsed[PhysReg] || !OnlyVirtRegs) 00334 spillVirtReg(MBB, I, PhysRegsUsed[PhysReg], PhysReg); 00335 } else { 00336 // If the selected register aliases any other registers, we must make 00337 // sure that one of the aliases isn't alive. 00338 for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg); 00339 *AliasSet; ++AliasSet) 00340 if (PhysRegsUsed[*AliasSet] != -1 && // Spill aliased register. 00341 PhysRegsUsed[*AliasSet] != -2) // If allocatable. 00342 if (PhysRegsUsed[*AliasSet]) 00343 spillVirtReg(MBB, I, PhysRegsUsed[*AliasSet], *AliasSet); 00344 } 00345 } 00346 00347 00348 /// assignVirtToPhysReg - This method updates local state so that we know 00349 /// that PhysReg is the proper container for VirtReg now. The physical 00350 /// register must not be used for anything else when this is called. 00351 /// 00352 void RALocal::assignVirtToPhysReg(unsigned VirtReg, unsigned PhysReg) { 00353 assert(PhysRegsUsed[PhysReg] == -1 && "Phys reg already assigned!"); 00354 // Update information to note the fact that this register was just used, and 00355 // it holds VirtReg. 00356 PhysRegsUsed[PhysReg] = VirtReg; 00357 getVirt2PhysRegMapSlot(VirtReg) = PhysReg; 00358 AddToPhysRegsUseOrder(PhysReg); // New use of PhysReg 00359 } 00360 00361 00362 /// isPhysRegAvailable - Return true if the specified physical register is free 00363 /// and available for use. This also includes checking to see if aliased 00364 /// registers are all free... 00365 /// 00366 bool RALocal::isPhysRegAvailable(unsigned PhysReg) const { 00367 if (PhysRegsUsed[PhysReg] != -1) return false; 00368 00369 // If the selected register aliases any other allocated registers, it is 00370 // not free! 00371 for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg); 00372 *AliasSet; ++AliasSet) 00373 if (PhysRegsUsed[*AliasSet] >= 0) // Aliased register in use? 00374 return false; // Can't use this reg then. 00375 return true; 00376 } 00377 00378 00379 /// getFreeReg - Look to see if there is a free register available in the 00380 /// specified register class. If not, return 0. 00381 /// 00382 unsigned RALocal::getFreeReg(const TargetRegisterClass *RC) { 00383 // Get iterators defining the range of registers that are valid to allocate in 00384 // this class, which also specifies the preferred allocation order. 00385 TargetRegisterClass::iterator RI = RC->allocation_order_begin(*MF); 00386 TargetRegisterClass::iterator RE = RC->allocation_order_end(*MF); 00387 00388 for (; RI != RE; ++RI) 00389 if (isPhysRegAvailable(*RI)) { // Is reg unused? 00390 assert(*RI != 0 && "Cannot use register!"); 00391 return *RI; // Found an unused register! 00392 } 00393 return 0; 00394 } 00395 00396 00397 /// getReg - Find a physical register to hold the specified virtual 00398 /// register. If all compatible physical registers are used, this method spills 00399 /// the last used virtual register to the stack, and uses that register. 00400 /// 00401 unsigned RALocal::getReg(MachineBasicBlock &MBB, MachineInstr *I, 00402 unsigned VirtReg, bool NoFree) { 00403 const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg); 00404 00405 // First check to see if we have a free register of the requested type... 00406 unsigned PhysReg = NoFree ? 0 : getFreeReg(RC); 00407 00408 // If we didn't find an unused register, scavenge one now! 00409 if (PhysReg == 0) { 00410 assert(!PhysRegsUseOrder.empty() && "No allocated registers??"); 00411 00412 // Loop over all of the preallocated registers from the least recently used 00413 // to the most recently used. When we find one that is capable of holding 00414 // our register, use it. 00415 for (unsigned i = 0; PhysReg == 0; ++i) { 00416 assert(i != PhysRegsUseOrder.size() && 00417 "Couldn't find a register of the appropriate class!"); 00418 00419 unsigned R = PhysRegsUseOrder[i]; 00420 00421 // We can only use this register if it holds a virtual register (ie, it 00422 // can be spilled). Do not use it if it is an explicitly allocated 00423 // physical register! 00424 assert(PhysRegsUsed[R] != -1 && 00425 "PhysReg in PhysRegsUseOrder, but is not allocated?"); 00426 if (PhysRegsUsed[R] && PhysRegsUsed[R] != -2) { 00427 // If the current register is compatible, use it. 00428 if (RC->contains(R)) { 00429 PhysReg = R; 00430 break; 00431 } else { 00432 // If one of the registers aliased to the current register is 00433 // compatible, use it. 00434 for (const unsigned *AliasIt = TRI->getAliasSet(R); 00435 *AliasIt; ++AliasIt) { 00436 if (RC->contains(*AliasIt) && 00437 // If this is pinned down for some reason, don't use it. For 00438 // example, if CL is pinned, and we run across CH, don't use 00439 // CH as justification for using scavenging ECX (which will 00440 // fail). 00441 PhysRegsUsed[*AliasIt] != 0 && 00442 00443 // Make sure the register is allocatable. Don't allocate SIL on 00444 // x86-32. 00445 PhysRegsUsed[*AliasIt] != -2) { 00446 PhysReg = *AliasIt; // Take an aliased register 00447 break; 00448 } 00449 } 00450 } 00451 } 00452 } 00453 00454 assert(PhysReg && "Physical register not assigned!?!?"); 00455 00456 // At this point PhysRegsUseOrder[i] is the least recently used register of 00457 // compatible register class. Spill it to memory and reap its remains. 00458 spillPhysReg(MBB, I, PhysReg); 00459 } 00460 00461 // Now that we know which register we need to assign this to, do it now! 00462 assignVirtToPhysReg(VirtReg, PhysReg); 00463 return PhysReg; 00464 } 00465 00466 00467 /// reloadVirtReg - This method transforms the specified specified virtual 00468 /// register use to refer to a physical register. This method may do this in 00469 /// one of several ways: if the register is available in a physical register 00470 /// already, it uses that physical register. If the value is not in a physical 00471 /// register, and if there are physical registers available, it loads it into a 00472 /// register. If register pressure is high, and it is possible, it tries to 00473 /// fold the load of the virtual register into the instruction itself. It 00474 /// avoids doing this if register pressure is low to improve the chance that 00475 /// subsequent instructions can use the reloaded value. This method returns the 00476 /// modified instruction. 00477 /// 00478 MachineInstr *RALocal::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI, 00479 unsigned OpNum, 00480 SmallSet<unsigned, 4> &ReloadedRegs) { 00481 unsigned VirtReg = MI->getOperand(OpNum).getReg(); 00482 00483 // If the virtual register is already available, just update the instruction 00484 // and return. 00485 if (unsigned PR = getVirt2PhysRegMapSlot(VirtReg)) { 00486 MarkPhysRegRecentlyUsed(PR); // Already have this value available! 00487 MI->getOperand(OpNum).setReg(PR); // Assign the input register 00488 getVirtRegLastUse(VirtReg) = std::make_pair(MI, OpNum); 00489 return MI; 00490 } 00491 00492 // Otherwise, we need to fold it into the current instruction, or reload it. 00493 // If we have registers available to hold the value, use them. 00494 const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg); 00495 unsigned PhysReg = getFreeReg(RC); 00496 int FrameIndex = getStackSpaceFor(VirtReg, RC); 00497 00498 if (PhysReg) { // Register is available, allocate it! 00499 assignVirtToPhysReg(VirtReg, PhysReg); 00500 } else { // No registers available. 00501 // Force some poor hapless value out of the register file to 00502 // make room for the new register, and reload it. 00503 PhysReg = getReg(MBB, MI, VirtReg, true); 00504 } 00505 00506 markVirtRegModified(VirtReg, false); // Note that this reg was just reloaded 00507 00508 DOUT << " Reloading %reg" << VirtReg << " into " 00509 << TRI->getName(PhysReg) << "\n"; 00510 00511 // Add move instruction(s) 00512 TII->loadRegFromStackSlot(MBB, MI, PhysReg, FrameIndex, RC); 00513 ++NumLoads; // Update statistics 00514 00515 MF->getRegInfo().setPhysRegUsed(PhysReg); 00516 MI->getOperand(OpNum).setReg(PhysReg); // Assign the input register 00517 getVirtRegLastUse(VirtReg) = std::make_pair(MI, OpNum); 00518 00519 if (!ReloadedRegs.insert(PhysReg)) { 00520 cerr << "Ran out of registers during register allocation!\n"; 00521 if (MI->getOpcode() == TargetInstrInfo::INLINEASM) { 00522 cerr << "Please check your inline asm statement for invalid " 00523 << "constraints:\n"; 00524 MI->print(cerr.stream(), TM); 00525 } 00526 exit(1); 00527 } 00528 for (const unsigned *SubRegs = TRI->getSubRegisters(PhysReg); 00529 *SubRegs; ++SubRegs) { 00530 if (!ReloadedRegs.insert(*SubRegs)) { 00531 cerr << "Ran out of registers during register allocation!\n"; 00532 if (MI->getOpcode() == TargetInstrInfo::INLINEASM) { 00533 cerr << "Please check your inline asm statement for invalid " 00534 << "constraints:\n"; 00535 MI->print(cerr.stream(), TM); 00536 } 00537 exit(1); 00538 } 00539 } 00540 00541 return MI; 00542 } 00543 00544 /// isReadModWriteImplicitKill - True if this is an implicit kill for a 00545 /// read/mod/write register, i.e. update partial register. 00546 static bool isReadModWriteImplicitKill(MachineInstr *MI, unsigned Reg) { 00547 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00548 MachineOperand& MO = MI->getOperand(i); 00549 if (MO.isReg() && MO.getReg() == Reg && MO.isImplicit() && 00550 MO.isDef() && !MO.isDead()) 00551 return true; 00552 } 00553 return false; 00554 } 00555 00556 /// isReadModWriteImplicitDef - True if this is an implicit def for a 00557 /// read/mod/write register, i.e. update partial register. 00558 static bool isReadModWriteImplicitDef(MachineInstr *MI, unsigned Reg) { 00559 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00560 MachineOperand& MO = MI->getOperand(i); 00561 if (MO.isReg() && MO.getReg() == Reg && MO.isImplicit() && 00562 !MO.isDef() && MO.isKill()) 00563 return true; 00564 } 00565 return false; 00566 } 00567 00568 // precedes - Helper function to determine with MachineInstr A 00569 // precedes MachineInstr B within the same MBB. 00570 static bool precedes(MachineBasicBlock::iterator A, 00571 MachineBasicBlock::iterator B) { 00572 if (A == B) 00573 return false; 00574 00575 MachineBasicBlock::iterator I = A->getParent()->begin(); 00576 while (I != A->getParent()->end()) { 00577 if (I == A) 00578 return true; 00579 else if (I == B) 00580 return false; 00581 00582 ++I; 00583 } 00584 00585 return false; 00586 } 00587 00588 /// ComputeLocalLiveness - Computes liveness of registers within a basic 00589 /// block, setting the killed/dead flags as appropriate. 00590 void RALocal::ComputeLocalLiveness(MachineBasicBlock& MBB) { 00591 MachineRegisterInfo& MRI = MBB.getParent()->getRegInfo(); 00592 // Keep track of the most recently seen previous use or def of each reg, 00593 // so that we can update them with dead/kill markers. 00594 DenseMap<unsigned, std::pair<MachineInstr*, unsigned> > LastUseDef; 00595 for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); 00596 I != E; ++I) { 00597 for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { 00598 MachineOperand& MO = I->getOperand(i); 00599 // Uses don't trigger any flags, but we need to save 00600 // them for later. Also, we have to process these 00601 // _before_ processing the defs, since an instr 00602 // uses regs before it defs them. 00603 if (MO.isReg() && MO.getReg() && MO.isUse()) { 00604 LastUseDef[MO.getReg()] = std::make_pair(I, i); 00605 00606 00607 if (TargetRegisterInfo::isVirtualRegister(MO.getReg())) continue; 00608 00609 const unsigned* Aliases = TRI->getAliasSet(MO.getReg()); 00610 if (Aliases) { 00611 while (*Aliases) { 00612 DenseMap<unsigned, std::pair<MachineInstr*, unsigned> >::iterator 00613 alias = LastUseDef.find(*Aliases); 00614 00615 if (alias != LastUseDef.end() && alias->second.first != I) 00616 LastUseDef[*Aliases] = std::make_pair(I, i); 00617 00618 ++Aliases; 00619 } 00620 } 00621 } 00622 } 00623 00624 for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { 00625 MachineOperand& MO = I->getOperand(i); 00626 // Defs others than 2-addr redefs _do_ trigger flag changes: 00627 // - A def followed by a def is dead 00628 // - A use followed by a def is a kill 00629 if (MO.isReg() && MO.getReg() && MO.isDef()) { 00630 DenseMap<unsigned, std::pair<MachineInstr*, unsigned> >::iterator 00631 last = LastUseDef.find(MO.getReg()); 00632 if (last != LastUseDef.end()) { 00633 // Check if this is a two address instruction. If so, then 00634 // the def does not kill the use. 00635 if (last->second.first == I && 00636 I->isRegReDefinedByTwoAddr(i)) 00637 continue; 00638 00639 MachineOperand& lastUD = 00640 last->second.first->getOperand(last->second.second); 00641 if (lastUD.isDef()) 00642 lastUD.setIsDead(true); 00643 else 00644 lastUD.setIsKill(true); 00645 } 00646 00647 LastUseDef[MO.getReg()] = std::make_pair(I, i); 00648 } 00649 } 00650 } 00651 00652 // Live-out (of the function) registers contain return values of the function, 00653 // so we need to make sure they are alive at return time. 00654 if (!MBB.empty() && MBB.back().getDesc().isReturn()) { 00655 MachineInstr* Ret = &MBB.back(); 00656 for (MachineRegisterInfo::liveout_iterator 00657 I = MF->getRegInfo().liveout_begin(), 00658 E = MF->getRegInfo().liveout_end(); I != E; ++I) 00659 if (!Ret->readsRegister(*I)) { 00660 Ret->addOperand(MachineOperand::CreateReg(*I, false, true)); 00661 LastUseDef[*I] = std::make_pair(Ret, Ret->getNumOperands()-1); 00662 } 00663 } 00664 00665 // Finally, loop over the final use/def of each reg 00666 // in the block and determine if it is dead. 00667 for (DenseMap<unsigned, std::pair<MachineInstr*, unsigned> >::iterator 00668 I = LastUseDef.begin(), E = LastUseDef.end(); I != E; ++I) { 00669 MachineInstr* MI = I->second.first; 00670 unsigned idx = I->second.second; 00671 MachineOperand& MO = MI->getOperand(idx); 00672 00673 bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(MO.getReg()); 00674 00675 // A crude approximation of "live-out" calculation 00676 bool usedOutsideBlock = isPhysReg ? false : 00677 UsedInMultipleBlocks.test(MO.getReg() - 00678 TargetRegisterInfo::FirstVirtualRegister); 00679 if (!isPhysReg && !usedOutsideBlock) 00680 for (MachineRegisterInfo::reg_iterator UI = MRI.reg_begin(MO.getReg()), 00681 UE = MRI.reg_end(); UI != UE; ++UI) 00682 // Two cases: 00683 // - used in another block 00684 // - used in the same block before it is defined (loop) 00685 if (UI->getParent() != &MBB || 00686 (MO.isDef() && UI.getOperand().isUse() && precedes(&*UI, MI))) { 00687 UsedInMultipleBlocks.set(MO.getReg() - 00688 TargetRegisterInfo::FirstVirtualRegister); 00689 usedOutsideBlock = true; 00690 break; 00691 } 00692 00693 // Physical registers and those that are not live-out of the block 00694 // are killed/dead at their last use/def within this block. 00695 if (isPhysReg || !usedOutsideBlock) { 00696 if (MO.isUse()) { 00697 // Don't mark uses that are tied to defs as kills. 00698 if (MI->getDesc().getOperandConstraint(idx, TOI::TIED_TO) == -1) 00699 MO.setIsKill(true); 00700 } else 00701 MO.setIsDead(true); 00702 } 00703 } 00704 } 00705 00706 void RALocal::AllocateBasicBlock(MachineBasicBlock &MBB) { 00707 // loop over each instruction 00708 MachineBasicBlock::iterator MII = MBB.begin(); 00709 00710 DEBUG(const BasicBlock *LBB = MBB.getBasicBlock(); 00711 if (LBB) DOUT << "\nStarting RegAlloc of BB: " << LBB->getName()); 00712 00713 // Add live-in registers as active. 00714 for (MachineBasicBlock::livein_iterator I = MBB.livein_begin(), 00715 E = MBB.livein_end(); I != E; ++I) { 00716 unsigned Reg = *I; 00717 MF->getRegInfo().setPhysRegUsed(Reg); 00718 PhysRegsUsed[Reg] = 0; // It is free and reserved now 00719 AddToPhysRegsUseOrder(Reg); 00720 for (const unsigned *SubRegs = TRI->getSubRegisters(Reg); 00721 *SubRegs; ++SubRegs) { 00722 if (PhysRegsUsed[*SubRegs] != -2) { 00723 AddToPhysRegsUseOrder(*SubRegs); 00724 PhysRegsUsed[*SubRegs] = 0; // It is free and reserved now 00725 MF->getRegInfo().setPhysRegUsed(*SubRegs); 00726 } 00727 } 00728 } 00729 00730 ComputeLocalLiveness(MBB); 00731 00732 // Otherwise, sequentially allocate each instruction in the MBB. 00733 while (MII != MBB.end()) { 00734 MachineInstr *MI = MII++; 00735 const TargetInstrDesc &TID = MI->getDesc(); 00736 DEBUG(DOUT << "\nStarting RegAlloc of: " << *MI; 00737 DOUT << " Regs have values: "; 00738 for (unsigned i = 0; i != TRI->getNumRegs(); ++i) 00739 if (PhysRegsUsed[i] != -1 && PhysRegsUsed[i] != -2) 00740 DOUT << "[" << TRI->getName(i) 00741 << ",%reg" << PhysRegsUsed[i] << "] "; 00742 DOUT << "\n"); 00743 00744 // Loop over the implicit uses, making sure that they are at the head of the 00745 // use order list, so they don't get reallocated. 00746 if (TID.ImplicitUses) { 00747 for (const unsigned *ImplicitUses = TID.ImplicitUses; 00748 *ImplicitUses; ++ImplicitUses) 00749 MarkPhysRegRecentlyUsed(*ImplicitUses); 00750 } 00751 00752 SmallVector<unsigned, 8> Kills; 00753 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00754 MachineOperand& MO = MI->getOperand(i); 00755 if (MO.isReg() && MO.isKill()) { 00756 if (!MO.isImplicit()) 00757 Kills.push_back(MO.getReg()); 00758 else if (!isReadModWriteImplicitKill(MI, MO.getReg())) 00759 // These are extra physical register kills when a sub-register 00760 // is defined (def of a sub-register is a read/mod/write of the 00761 // larger registers). Ignore. 00762 Kills.push_back(MO.getReg()); 00763 } 00764 } 00765 00766 // If any physical regs are earlyclobber, spill any value they might 00767 // have in them, then mark them unallocatable. 00768 // If any virtual regs are earlyclobber, allocate them now (before 00769 // freeing inputs that are killed). 00770 if (MI->getOpcode()==TargetInstrInfo::INLINEASM) { 00771 for (unsigned i = 0; i != MI->getNumOperands(); ++i) { 00772 MachineOperand& MO = MI->getOperand(i); 00773 if (MO.isReg() && MO.isDef() && MO.isEarlyClobber() && 00774 MO.getReg()) { 00775 if (TargetRegisterInfo::isVirtualRegister(MO.getReg())) { 00776 unsigned DestVirtReg = MO.getReg(); 00777 unsigned DestPhysReg; 00778 00779 // If DestVirtReg already has a value, use it. 00780 if (!(DestPhysReg = getVirt2PhysRegMapSlot(DestVirtReg))) 00781 DestPhysReg = getReg(MBB, MI, DestVirtReg); 00782 MF->getRegInfo().setPhysRegUsed(DestPhysReg); 00783 markVirtRegModified(DestVirtReg); 00784 getVirtRegLastUse(DestVirtReg) = 00785 std::make_pair((MachineInstr*)0, 0); 00786 DOUT << " Assigning " << TRI->getName(DestPhysReg) 00787 << " to %reg" << DestVirtReg << "\n"; 00788 MO.setReg(DestPhysReg); // Assign the earlyclobber register 00789 } else { 00790 unsigned Reg = MO.getReg(); 00791 if (PhysRegsUsed[Reg] == -2) continue; // Something like ESP. 00792 // These are extra physical register defs when a sub-register 00793 // is defined (def of a sub-register is a read/mod/write of the 00794 // larger registers). Ignore. 00795 if (isReadModWriteImplicitDef(MI, MO.getReg())) continue; 00796 00797 MF->getRegInfo().setPhysRegUsed(Reg); 00798 spillPhysReg(MBB, MI, Reg, true); // Spill any existing value in reg 00799 PhysRegsUsed[Reg] = 0; // It is free and reserved now 00800 AddToPhysRegsUseOrder(Reg); 00801 00802 for (const unsigned *SubRegs = TRI->getSubRegisters(Reg); 00803 *SubRegs; ++SubRegs) { 00804 if (PhysRegsUsed[*SubRegs] != -2) { 00805 MF->getRegInfo().setPhysRegUsed(*SubRegs); 00806 PhysRegsUsed[*SubRegs] = 0; // It is free and reserved now 00807 AddToPhysRegsUseOrder(*SubRegs); 00808 } 00809 } 00810 } 00811 } 00812 } 00813 } 00814 00815 // Get the used operands into registers. This has the potential to spill 00816 // incoming values if we are out of registers. Note that we completely 00817 // ignore physical register uses here. We assume that if an explicit 00818 // physical register is referenced by the instruction, that it is guaranteed 00819 // to be live-in, or the input is badly hosed. 00820 // 00821 SmallSet<unsigned, 4> ReloadedRegs; 00822 for (unsigned i = 0; i != MI->getNumOperands(); ++i) { 00823 MachineOperand& MO = MI->getOperand(i); 00824 // here we are looking for only used operands (never def&use) 00825 if (MO.isReg() && !MO.isDef() && MO.getReg() && !MO.isImplicit() && 00826 TargetRegisterInfo::isVirtualRegister(MO.getReg())) 00827 MI = reloadVirtReg(MBB, MI, i, ReloadedRegs); 00828 } 00829 00830 // If this instruction is the last user of this register, kill the 00831 // value, freeing the register being used, so it doesn't need to be 00832 // spilled to memory. 00833 // 00834 for (unsigned i = 0, e = Kills.size(); i != e; ++i) { 00835 unsigned VirtReg = Kills[i]; 00836 unsigned PhysReg = VirtReg; 00837 if (TargetRegisterInfo::isVirtualRegister(VirtReg)) { 00838 // If the virtual register was never materialized into a register, it 00839 // might not be in the map, but it won't hurt to zero it out anyway. 00840 unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg); 00841 PhysReg = PhysRegSlot; 00842 PhysRegSlot = 0; 00843 } else if (PhysRegsUsed[PhysReg] == -2) { 00844 // Unallocatable register dead, ignore. 00845 continue; 00846 } else { 00847 assert((!PhysRegsUsed[PhysReg] || PhysRegsUsed[PhysReg] == -1) && 00848 "Silently clearing a virtual register?"); 00849 } 00850 00851 if (PhysReg) { 00852 DOUT << " Last use of " << TRI->getName(PhysReg) 00853 << "[%reg" << VirtReg <<"], removing it from live set\n"; 00854 removePhysReg(PhysReg); 00855 for (const unsigned *SubRegs = TRI->getSubRegisters(PhysReg); 00856 *SubRegs; ++SubRegs) { 00857 if (PhysRegsUsed[*SubRegs] != -2) { 00858 DOUT << " Last use of " 00859 << TRI->getName(*SubRegs) 00860 << "[%reg" << VirtReg <<"], removing it from live set\n"; 00861 removePhysReg(*SubRegs); 00862 } 00863 } 00864 } 00865 } 00866 00867 // Loop over all of the operands of the instruction, spilling registers that 00868 // are defined, and marking explicit destinations in the PhysRegsUsed map. 00869 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00870 MachineOperand& MO = MI->getOperand(i); 00871 if (MO.isReg() && MO.isDef() && !MO.isImplicit() && MO.getReg() && 00872 !MO.isEarlyClobber() && 00873 TargetRegisterInfo::isPhysicalRegister(MO.getReg())) { 00874 unsigned Reg = MO.getReg(); 00875 if (PhysRegsUsed[Reg] == -2) continue; // Something like ESP. 00876 // These are extra physical register defs when a sub-register 00877 // is defined (def of a sub-register is a read/mod/write of the 00878 // larger registers). Ignore. 00879 if (isReadModWriteImplicitDef(MI, MO.getReg())) continue; 00880 00881 MF->getRegInfo().setPhysRegUsed(Reg); 00882 spillPhysReg(MBB, MI, Reg, true); // Spill any existing value in reg 00883 PhysRegsUsed[Reg] = 0; // It is free and reserved now 00884 AddToPhysRegsUseOrder(Reg); 00885 00886 for (const unsigned *SubRegs = TRI->getSubRegisters(Reg); 00887 *SubRegs; ++SubRegs) { 00888 if (PhysRegsUsed[*SubRegs] != -2) { 00889 MF->getRegInfo().setPhysRegUsed(*SubRegs); 00890 PhysRegsUsed[*SubRegs] = 0; // It is free and reserved now 00891 AddToPhysRegsUseOrder(*SubRegs); 00892 } 00893 } 00894 } 00895 } 00896 00897 // Loop over the implicit defs, spilling them as well. 00898 if (TID.ImplicitDefs) { 00899 for (const unsigned *ImplicitDefs = TID.ImplicitDefs; 00900 *ImplicitDefs; ++ImplicitDefs) { 00901 unsigned Reg = *ImplicitDefs; 00902 if (PhysRegsUsed[Reg] != -2) { 00903 spillPhysReg(MBB, MI, Reg, true); 00904 AddToPhysRegsUseOrder(Reg); 00905 PhysRegsUsed[Reg] = 0; // It is free and reserved now 00906 } 00907 MF->getRegInfo().setPhysRegUsed(Reg); 00908 for (const unsigned *SubRegs = TRI->getSubRegisters(Reg); 00909 *SubRegs; ++SubRegs) { 00910 if (PhysRegsUsed[*SubRegs] != -2) { 00911 AddToPhysRegsUseOrder(*SubRegs); 00912 PhysRegsUsed[*SubRegs] = 0; // It is free and reserved now 00913 MF->getRegInfo().setPhysRegUsed(*SubRegs); 00914 } 00915 } 00916 } 00917 } 00918 00919 SmallVector<unsigned, 8> DeadDefs; 00920 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00921 MachineOperand& MO = MI->getOperand(i); 00922 if (MO.isReg() && MO.isDead()) 00923 DeadDefs.push_back(MO.getReg()); 00924 } 00925 00926 // Okay, we have allocated all of the source operands and spilled any values 00927 // that would be destroyed by defs of this instruction. Loop over the 00928 // explicit defs and assign them to a register, spilling incoming values if 00929 // we need to scavenge a register. 00930 // 00931 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 00932 MachineOperand& MO = MI->getOperand(i); 00933 if (MO.isReg() && MO.isDef() && MO.getReg() && 00934 !MO.isEarlyClobber() && 00935 TargetRegisterInfo::isVirtualRegister(MO.getReg())) { 00936 unsigned DestVirtReg = MO.getReg(); 00937 unsigned DestPhysReg; 00938 00939 // If DestVirtReg already has a value, use it. 00940 if (!(DestPhysReg = getVirt2PhysRegMapSlot(DestVirtReg))) 00941 DestPhysReg = getReg(MBB, MI, DestVirtReg); 00942 MF->getRegInfo().setPhysRegUsed(DestPhysReg); 00943 markVirtRegModified(DestVirtReg); 00944 getVirtRegLastUse(DestVirtReg) = std::make_pair((MachineInstr*)0, 0); 00945 DOUT << " Assigning " << TRI->getName(DestPhysReg) 00946 << " to %reg" << DestVirtReg << "\n"; 00947 MO.setReg(DestPhysReg); // Assign the output register 00948 } 00949 } 00950 00951 // If this instruction defines any registers that are immediately dead, 00952 // kill them now. 00953 // 00954 for (unsigned i = 0, e = DeadDefs.size(); i != e; ++i) { 00955 unsigned VirtReg = DeadDefs[i]; 00956 unsigned PhysReg = VirtReg; 00957 if (TargetRegisterInfo::isVirtualRegister(VirtReg)) { 00958 unsigned &PhysRegSlot = getVirt2PhysRegMapSlot(VirtReg); 00959 PhysReg = PhysRegSlot; 00960 assert(PhysReg != 0); 00961 PhysRegSlot = 0; 00962 } else if (PhysRegsUsed[PhysReg] == -2) { 00963 // Unallocatable register dead, ignore. 00964 continue; 00965 } 00966 00967 if (PhysReg) { 00968 DOUT << " Register " << TRI->getName(PhysReg) 00969 << " [%reg" << VirtReg 00970 << "] is never used, removing it from live set\n"; 00971 removePhysReg(PhysReg); 00972 for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg); 00973 *AliasSet; ++AliasSet) { 00974 if (PhysRegsUsed[*AliasSet] != -2) { 00975 DOUT << " Register " << TRI->getName(*AliasSet) 00976 << " [%reg" << *AliasSet 00977 << "] is never used, removing it from live set\n"; 00978 removePhysReg(*AliasSet); 00979 } 00980 } 00981 } 00982 } 00983 00984 // Finally, if this is a noop copy instruction, zap it. 00985 unsigned SrcReg, DstReg, SrcSubReg, DstSubReg; 00986 if (TII->isMoveInstr(*MI, SrcReg, DstReg, SrcSubReg, DstSubReg) && 00987 SrcReg == DstReg) 00988 MBB.erase(MI); 00989 } 00990 00991 MachineBasicBlock::iterator MI = MBB.getFirstTerminator(); 00992 00993 // Spill all physical registers holding virtual registers now. 00994 for (unsigned i = 0, e = TRI->getNumRegs(); i != e; ++i) 00995 if (PhysRegsUsed[i] != -1 && PhysRegsUsed[i] != -2) { 00996 if (unsigned VirtReg = PhysRegsUsed[i]) 00997 spillVirtReg(MBB, MI, VirtReg, i); 00998 else 00999 removePhysReg(i); 01000 } 01001 01002 #if 0 01003 // This checking code is very expensive. 01004 bool AllOk = true; 01005 for (unsigned i = TargetRegisterInfo::FirstVirtualRegister, 01006 e = MF->getRegInfo().getLastVirtReg(); i <= e; ++i) 01007 if (unsigned PR = Virt2PhysRegMap[i]) { 01008 cerr << "Register still mapped: " << i << " -> " << PR << "\n"; 01009 AllOk = false; 01010 } 01011 assert(AllOk && "Virtual registers still in phys regs?"); 01012 #endif 01013 01014 // Clear any physical register which appear live at the end of the basic 01015 // block, but which do not hold any virtual registers. e.g., the stack 01016 // pointer. 01017 PhysRegsUseOrder.clear(); 01018 } 01019 01020 /// runOnMachineFunction - Register allocate the whole function 01021 /// 01022 bool RALocal::runOnMachineFunction(MachineFunction &Fn) { 01023 DOUT << "Machine Function " << "\n"; 01024 MF = &Fn; 01025 TM = &Fn.getTarget(); 01026 TRI = TM->getRegisterInfo(); 01027 TII = TM->getInstrInfo(); 01028 01029 PhysRegsUsed.assign(TRI->getNumRegs(), -1); 01030 01031 // At various places we want to efficiently check to see whether a register 01032 // is allocatable. To handle this, we mark all unallocatable registers as 01033 // being pinned down, permanently. 01034 { 01035 BitVector Allocable = TRI->getAllocatableSet(Fn); 01036 for (unsigned i = 0, e = Allocable.size(); i != e; ++i) 01037 if (!Allocable[i]) 01038 PhysRegsUsed[i] = -2; // Mark the reg unallocable. 01039 } 01040 01041 // initialize the virtual->physical register map to have a 'null' 01042 // mapping for all virtual registers 01043 unsigned LastVirtReg = MF->getRegInfo().getLastVirtReg(); 01044 StackSlotForVirtReg.grow(LastVirtReg); 01045 Virt2PhysRegMap.grow(LastVirtReg); 01046 Virt2LastUseMap.grow(LastVirtReg); 01047 VirtRegModified.resize(LastVirtReg+1-TargetRegisterInfo::FirstVirtualRegister); 01048 UsedInMultipleBlocks.resize(LastVirtReg+1-TargetRegisterInfo::FirstVirtualRegister); 01049 01050 // Loop over all of the basic blocks, eliminating virtual register references 01051 for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); 01052 MBB != MBBe; ++MBB) 01053 AllocateBasicBlock(*MBB); 01054 01055 StackSlotForVirtReg.clear(); 01056 PhysRegsUsed.clear(); 01057 VirtRegModified.clear(); 01058 UsedInMultipleBlocks.clear(); 01059 Virt2PhysRegMap.clear(); 01060 Virt2LastUseMap.clear(); 01061 return true; 01062 } 01063 01064 FunctionPass *llvm::createLocalRegisterAllocator() { 01065 return new RALocal(); 01066 }