LLVM API Documentation

RegAllocLocal.cpp

Go to the documentation of this file.
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 }