Don't add the same MI to register reuse "last def/use" twice if it reads the
[oota-llvm.git] / lib / CodeGen / VirtRegMap.cpp
1 //===-- llvm/CodeGen/VirtRegMap.cpp - Virtual Register Map ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the VirtRegMap class.
11 //
12 // It also contains implementations of the the Spiller interface, which, given a
13 // virtual register map and a machine function, eliminates all virtual
14 // references by replacing them with physical register references - adding spill
15 // code as necessary.
16 //
17 //===----------------------------------------------------------------------===//
18
19 #define DEBUG_TYPE "spiller"
20 #include "VirtRegMap.h"
21 #include "llvm/Function.h"
22 #include "llvm/CodeGen/MachineFrameInfo.h"
23 #include "llvm/CodeGen/MachineFunction.h"
24 #include "llvm/CodeGen/SSARegMap.h"
25 #include "llvm/Target/TargetMachine.h"
26 #include "llvm/Target/TargetInstrInfo.h"
27 #include "llvm/Support/CommandLine.h"
28 #include "llvm/Support/Debug.h"
29 #include "llvm/Support/Compiler.h"
30 #include "llvm/ADT/BitVector.h"
31 #include "llvm/ADT/Statistic.h"
32 #include "llvm/ADT/STLExtras.h"
33 #include "llvm/ADT/SmallSet.h"
34 #include <algorithm>
35 using namespace llvm;
36
37 STATISTIC(NumSpills, "Number of register spills");
38 STATISTIC(NumReMats, "Number of re-materialization");
39 STATISTIC(NumStores, "Number of stores added");
40 STATISTIC(NumLoads , "Number of loads added");
41 STATISTIC(NumReused, "Number of values reused");
42 STATISTIC(NumDSE   , "Number of dead stores elided");
43 STATISTIC(NumDCE   , "Number of copies elided");
44
45 namespace {
46   enum SpillerName { simple, local };
47
48   static cl::opt<SpillerName>
49   SpillerOpt("spiller",
50              cl::desc("Spiller to use: (default: local)"),
51              cl::Prefix,
52              cl::values(clEnumVal(simple, "  simple spiller"),
53                         clEnumVal(local,  "  local spiller"),
54                         clEnumValEnd),
55              cl::init(local));
56 }
57
58 //===----------------------------------------------------------------------===//
59 //  VirtRegMap implementation
60 //===----------------------------------------------------------------------===//
61
62 VirtRegMap::VirtRegMap(MachineFunction &mf)
63   : TII(*mf.getTarget().getInstrInfo()), MF(mf), 
64     Virt2PhysMap(NO_PHYS_REG), Virt2StackSlotMap(NO_STACK_SLOT),
65     ReMatId(MAX_STACK_SLOT+1) {
66   grow();
67 }
68
69 void VirtRegMap::grow() {
70   Virt2PhysMap.grow(MF.getSSARegMap()->getLastVirtReg());
71   Virt2StackSlotMap.grow(MF.getSSARegMap()->getLastVirtReg());
72 }
73
74 int VirtRegMap::assignVirt2StackSlot(unsigned virtReg) {
75   assert(MRegisterInfo::isVirtualRegister(virtReg));
76   assert(Virt2StackSlotMap[virtReg] == NO_STACK_SLOT &&
77          "attempt to assign stack slot to already spilled register");
78   const TargetRegisterClass* RC = MF.getSSARegMap()->getRegClass(virtReg);
79   int frameIndex = MF.getFrameInfo()->CreateStackObject(RC->getSize(),
80                                                         RC->getAlignment());
81   Virt2StackSlotMap[virtReg] = frameIndex;
82   ++NumSpills;
83   return frameIndex;
84 }
85
86 void VirtRegMap::assignVirt2StackSlot(unsigned virtReg, int frameIndex) {
87   assert(MRegisterInfo::isVirtualRegister(virtReg));
88   assert(Virt2StackSlotMap[virtReg] == NO_STACK_SLOT &&
89          "attempt to assign stack slot to already spilled register");
90   Virt2StackSlotMap[virtReg] = frameIndex;
91 }
92
93 int VirtRegMap::assignVirtReMatId(unsigned virtReg) {
94   assert(MRegisterInfo::isVirtualRegister(virtReg));
95   assert(Virt2StackSlotMap[virtReg] == NO_STACK_SLOT &&
96          "attempt to assign re-mat id to already spilled register");
97   Virt2StackSlotMap[virtReg] = ReMatId;
98   ++NumReMats;
99   return ReMatId++;
100 }
101
102 void VirtRegMap::virtFolded(unsigned VirtReg, MachineInstr *OldMI,
103                             unsigned OpNo, MachineInstr *NewMI) {
104   // Move previous memory references folded to new instruction.
105   MI2VirtMapTy::iterator IP = MI2VirtMap.lower_bound(NewMI);
106   for (MI2VirtMapTy::iterator I = MI2VirtMap.lower_bound(OldMI),
107          E = MI2VirtMap.end(); I != E && I->first == OldMI; ) {
108     MI2VirtMap.insert(IP, std::make_pair(NewMI, I->second));
109     MI2VirtMap.erase(I++);
110   }
111
112   ModRef MRInfo;
113   const TargetInstrDescriptor *TID = OldMI->getInstrDescriptor();
114   if (TID->getOperandConstraint(OpNo, TOI::TIED_TO) != -1 ||
115       TID->findTiedToSrcOperand(OpNo) != -1) {
116     // Folded a two-address operand.
117     MRInfo = isModRef;
118   } else if (OldMI->getOperand(OpNo).isDef()) {
119     MRInfo = isMod;
120   } else {
121     MRInfo = isRef;
122   }
123
124   // add new memory reference
125   MI2VirtMap.insert(IP, std::make_pair(NewMI, std::make_pair(VirtReg, MRInfo)));
126 }
127
128 void VirtRegMap::print(std::ostream &OS) const {
129   const MRegisterInfo* MRI = MF.getTarget().getRegisterInfo();
130
131   OS << "********** REGISTER MAP **********\n";
132   for (unsigned i = MRegisterInfo::FirstVirtualRegister,
133          e = MF.getSSARegMap()->getLastVirtReg(); i <= e; ++i) {
134     if (Virt2PhysMap[i] != (unsigned)VirtRegMap::NO_PHYS_REG)
135       OS << "[reg" << i << " -> " << MRI->getName(Virt2PhysMap[i]) << "]\n";
136
137   }
138
139   for (unsigned i = MRegisterInfo::FirstVirtualRegister,
140          e = MF.getSSARegMap()->getLastVirtReg(); i <= e; ++i)
141     if (Virt2StackSlotMap[i] != VirtRegMap::NO_STACK_SLOT)
142       OS << "[reg" << i << " -> fi#" << Virt2StackSlotMap[i] << "]\n";
143   OS << '\n';
144 }
145
146 void VirtRegMap::dump() const {
147   print(DOUT);
148 }
149
150
151 //===----------------------------------------------------------------------===//
152 // Simple Spiller Implementation
153 //===----------------------------------------------------------------------===//
154
155 Spiller::~Spiller() {}
156
157 namespace {
158   struct VISIBILITY_HIDDEN SimpleSpiller : public Spiller {
159     bool runOnMachineFunction(MachineFunction& mf, VirtRegMap &VRM);
160   };
161 }
162
163 bool SimpleSpiller::runOnMachineFunction(MachineFunction &MF, VirtRegMap &VRM) {
164   DOUT << "********** REWRITE MACHINE CODE **********\n";
165   DOUT << "********** Function: " << MF.getFunction()->getName() << '\n';
166   const TargetMachine &TM = MF.getTarget();
167   const MRegisterInfo &MRI = *TM.getRegisterInfo();
168   bool *PhysRegsUsed = MF.getUsedPhysregs();
169
170   // LoadedRegs - Keep track of which vregs are loaded, so that we only load
171   // each vreg once (in the case where a spilled vreg is used by multiple
172   // operands).  This is always smaller than the number of operands to the
173   // current machine instr, so it should be small.
174   std::vector<unsigned> LoadedRegs;
175
176   for (MachineFunction::iterator MBBI = MF.begin(), E = MF.end();
177        MBBI != E; ++MBBI) {
178     DOUT << MBBI->getBasicBlock()->getName() << ":\n";
179     MachineBasicBlock &MBB = *MBBI;
180     for (MachineBasicBlock::iterator MII = MBB.begin(),
181            E = MBB.end(); MII != E; ++MII) {
182       MachineInstr &MI = *MII;
183       for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
184         MachineOperand &MO = MI.getOperand(i);
185         if (MO.isRegister() && MO.getReg())
186           if (MRegisterInfo::isVirtualRegister(MO.getReg())) {
187             unsigned VirtReg = MO.getReg();
188             unsigned PhysReg = VRM.getPhys(VirtReg);
189             if (VRM.hasStackSlot(VirtReg)) {
190               int StackSlot = VRM.getStackSlot(VirtReg);
191               const TargetRegisterClass* RC =
192                 MF.getSSARegMap()->getRegClass(VirtReg);
193
194               if (MO.isUse() &&
195                   std::find(LoadedRegs.begin(), LoadedRegs.end(), VirtReg)
196                   == LoadedRegs.end()) {
197                 MRI.loadRegFromStackSlot(MBB, &MI, PhysReg, StackSlot, RC);
198                 LoadedRegs.push_back(VirtReg);
199                 ++NumLoads;
200                 DOUT << '\t' << *prior(MII);
201               }
202
203               if (MO.isDef()) {
204                 MRI.storeRegToStackSlot(MBB, next(MII), PhysReg, StackSlot, RC);
205                 ++NumStores;
206               }
207             }
208             PhysRegsUsed[PhysReg] = true;
209             MI.getOperand(i).setReg(PhysReg);
210           } else {
211             PhysRegsUsed[MO.getReg()] = true;
212           }
213       }
214
215       DOUT << '\t' << MI;
216       LoadedRegs.clear();
217     }
218   }
219   return true;
220 }
221
222 //===----------------------------------------------------------------------===//
223 //  Local Spiller Implementation
224 //===----------------------------------------------------------------------===//
225
226 namespace {
227   /// LocalSpiller - This spiller does a simple pass over the machine basic
228   /// block to attempt to keep spills in registers as much as possible for
229   /// blocks that have low register pressure (the vreg may be spilled due to
230   /// register pressure in other blocks).
231   class VISIBILITY_HIDDEN LocalSpiller : public Spiller {
232     const MRegisterInfo *MRI;
233     const TargetInstrInfo *TII;
234   public:
235     bool runOnMachineFunction(MachineFunction &MF, VirtRegMap &VRM) {
236       MRI = MF.getTarget().getRegisterInfo();
237       TII = MF.getTarget().getInstrInfo();
238       DOUT << "\n**** Local spiller rewriting function '"
239            << MF.getFunction()->getName() << "':\n";
240
241       std::vector<MachineInstr *> ReMatedMIs;
242       for (MachineFunction::iterator MBB = MF.begin(), E = MF.end();
243            MBB != E; ++MBB)
244         RewriteMBB(*MBB, VRM, ReMatedMIs);
245       for (unsigned i = 0, e = ReMatedMIs.size(); i != e; ++i)
246         delete ReMatedMIs[i];
247       return true;
248     }
249   private:
250     void RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM,
251                     std::vector<MachineInstr*> &ReMatedMIs);
252   };
253 }
254
255 /// AvailableSpills - As the local spiller is scanning and rewriting an MBB from
256 /// top down, keep track of which spills slots are available in each register.
257 ///
258 /// Note that not all physregs are created equal here.  In particular, some
259 /// physregs are reloads that we are allowed to clobber or ignore at any time.
260 /// Other physregs are values that the register allocated program is using that
261 /// we cannot CHANGE, but we can read if we like.  We keep track of this on a 
262 /// per-stack-slot basis as the low bit in the value of the SpillSlotsAvailable
263 /// entries.  The predicate 'canClobberPhysReg()' checks this bit and
264 /// addAvailable sets it if.
265 namespace {
266 class VISIBILITY_HIDDEN AvailableSpills {
267   const MRegisterInfo *MRI;
268   const TargetInstrInfo *TII;
269
270   // SpillSlotsAvailable - This map keeps track of all of the spilled virtual
271   // register values that are still available, due to being loaded or stored to,
272   // but not invalidated yet. It also tracks the instructions that defined
273   // or used the register.
274   typedef std::pair<unsigned, std::vector<MachineInstr*> > SSInfo;
275   std::map<int, SSInfo> SpillSlotsAvailable;
276     
277   // PhysRegsAvailable - This is the inverse of SpillSlotsAvailable, indicating
278   // which stack slot values are currently held by a physreg.  This is used to
279   // invalidate entries in SpillSlotsAvailable when a physreg is modified.
280   std::multimap<unsigned, int> PhysRegsAvailable;
281   
282   void disallowClobberPhysRegOnly(unsigned PhysReg);
283
284   void ClobberPhysRegOnly(unsigned PhysReg);
285 public:
286   AvailableSpills(const MRegisterInfo *mri, const TargetInstrInfo *tii)
287     : MRI(mri), TII(tii) {
288   }
289   
290   const MRegisterInfo *getRegInfo() const { return MRI; }
291
292   /// getSpillSlotPhysReg - If the specified stack slot is available in a 
293   /// physical register, return that PhysReg, otherwise return 0. It also
294   /// returns by reference the instruction that either defines or last uses
295   /// the register.
296   unsigned getSpillSlotPhysReg(int Slot, MachineInstr *&SSMI) const {
297     std::map<int, SSInfo>::const_iterator I = SpillSlotsAvailable.find(Slot);
298     if (I != SpillSlotsAvailable.end()) {
299       if (!I->second.second.empty())
300         SSMI = I->second.second.back();
301       return I->second.first >> 1;  // Remove the CanClobber bit.
302     }
303     return 0;
304   }
305
306   /// addLastUse - Add the last use information of all stack slots whose
307   /// values are available in the specific register.
308   void addLastUse(unsigned PhysReg, MachineInstr *Use) {
309     std::multimap<unsigned, int>::iterator I =
310       PhysRegsAvailable.lower_bound(PhysReg);
311     while (I != PhysRegsAvailable.end() && I->first == PhysReg) {
312       int Slot = I->second;
313       I++;
314
315       std::map<int, SSInfo>::iterator II = SpillSlotsAvailable.find(Slot);
316       assert(II != SpillSlotsAvailable.end() && "Slot not available!");
317       unsigned Val = II->second.first;
318       assert((Val >> 1) == PhysReg && "Bidirectional map mismatch!");
319       // This can be true if there are multiple uses of the same register.
320       if (II->second.second.back() != Use)
321         II->second.second.push_back(Use);
322     }
323   }
324   
325   /// removeLastUse - Remove the last use information of all stack slots whose
326   /// values are available in the specific register.
327   void removeLastUse(unsigned PhysReg, MachineInstr *Use) {
328     std::multimap<unsigned, int>::iterator I =
329       PhysRegsAvailable.lower_bound(PhysReg);
330     while (I != PhysRegsAvailable.end() && I->first == PhysReg) {
331       int Slot = I->second;
332       I++;
333
334       std::map<int, SSInfo>::iterator II = SpillSlotsAvailable.find(Slot);
335       assert(II != SpillSlotsAvailable.end() && "Slot not available!");
336       unsigned Val = II->second.first;
337       assert((Val >> 1) == PhysReg && "Bidirectional map mismatch!");
338       if (II->second.second.back() == Use)
339         II->second.second.pop_back();
340     }
341   }
342   
343   /// addAvailable - Mark that the specified stack slot is available in the
344   /// specified physreg.  If CanClobber is true, the physreg can be modified at
345   /// any time without changing the semantics of the program.
346   void addAvailable(int Slot, MachineInstr *MI, unsigned Reg,
347                     bool CanClobber = true) {
348     // If this stack slot is thought to be available in some other physreg, 
349     // remove its record.
350     ModifyStackSlot(Slot);
351     
352     PhysRegsAvailable.insert(std::make_pair(Reg, Slot));
353     std::vector<MachineInstr*> DefUses;
354     DefUses.push_back(MI);
355     SpillSlotsAvailable[Slot] =
356       std::make_pair((Reg << 1) | (unsigned)CanClobber, DefUses);
357   
358     if (Slot > VirtRegMap::MAX_STACK_SLOT)
359       DOUT << "Remembering RM#" << Slot-VirtRegMap::MAX_STACK_SLOT-1;
360     else
361       DOUT << "Remembering SS#" << Slot;
362     DOUT << " in physreg " << MRI->getName(Reg) << "\n";
363   }
364
365   /// canClobberPhysReg - Return true if the spiller is allowed to change the 
366   /// value of the specified stackslot register if it desires.  The specified
367   /// stack slot must be available in a physreg for this query to make sense.
368   bool canClobberPhysReg(int Slot) const {
369     assert(SpillSlotsAvailable.count(Slot) && "Slot not available!");
370     return SpillSlotsAvailable.find(Slot)->second.first & 1;
371   }
372   
373   /// disallowClobberPhysReg - Unset the CanClobber bit of the specified
374   /// stackslot register. The register is still available but is no longer
375   /// allowed to be modifed.
376   void disallowClobberPhysReg(unsigned PhysReg);
377   
378   /// ClobberPhysReg - This is called when the specified physreg changes
379   /// value.  We use this to invalidate any info about stuff we thing lives in
380   /// it and any of its aliases.
381   void ClobberPhysReg(unsigned PhysReg);
382
383   /// ModifyStackSlot - This method is called when the value in a stack slot
384   /// changes.  This removes information about which register the previous value
385   /// for this slot lives in (as the previous value is dead now).
386   void ModifyStackSlot(int Slot);
387 };
388 }
389
390 /// disallowClobberPhysRegOnly - Unset the CanClobber bit of the specified
391 /// stackslot register. The register is still available but is no longer
392 /// allowed to be modifed.
393 void AvailableSpills::disallowClobberPhysRegOnly(unsigned PhysReg) {
394   std::multimap<unsigned, int>::iterator I =
395     PhysRegsAvailable.lower_bound(PhysReg);
396   while (I != PhysRegsAvailable.end() && I->first == PhysReg) {
397     int Slot = I->second;
398     I++;
399     assert((SpillSlotsAvailable[Slot].first >> 1) == PhysReg &&
400            "Bidirectional map mismatch!");
401     SpillSlotsAvailable[Slot].first &= ~1;
402     DOUT << "PhysReg " << MRI->getName(PhysReg)
403          << " copied, it is available for use but can no longer be modified\n";
404   }
405 }
406
407 /// disallowClobberPhysReg - Unset the CanClobber bit of the specified
408 /// stackslot register and its aliases. The register and its aliases may
409 /// still available but is no longer allowed to be modifed.
410 void AvailableSpills::disallowClobberPhysReg(unsigned PhysReg) {
411   for (const unsigned *AS = MRI->getAliasSet(PhysReg); *AS; ++AS)
412     disallowClobberPhysRegOnly(*AS);
413   disallowClobberPhysRegOnly(PhysReg);
414 }
415
416 /// ClobberPhysRegOnly - This is called when the specified physreg changes
417 /// value.  We use this to invalidate any info about stuff we thing lives in it.
418 void AvailableSpills::ClobberPhysRegOnly(unsigned PhysReg) {
419   std::multimap<unsigned, int>::iterator I =
420     PhysRegsAvailable.lower_bound(PhysReg);
421   while (I != PhysRegsAvailable.end() && I->first == PhysReg) {
422     int Slot = I->second;
423     PhysRegsAvailable.erase(I++);
424     assert((SpillSlotsAvailable[Slot].first >> 1) == PhysReg &&
425            "Bidirectional map mismatch!");
426     SpillSlotsAvailable.erase(Slot);
427     DOUT << "PhysReg " << MRI->getName(PhysReg)
428          << " clobbered, invalidating ";
429     if (Slot > VirtRegMap::MAX_STACK_SLOT)
430       DOUT << "RM#" << Slot-VirtRegMap::MAX_STACK_SLOT-1 << "\n";
431     else
432       DOUT << "SS#" << Slot << "\n";
433   }
434 }
435
436 /// ClobberPhysReg - This is called when the specified physreg changes
437 /// value.  We use this to invalidate any info about stuff we thing lives in
438 /// it and any of its aliases.
439 void AvailableSpills::ClobberPhysReg(unsigned PhysReg) {
440   for (const unsigned *AS = MRI->getAliasSet(PhysReg); *AS; ++AS)
441     ClobberPhysRegOnly(*AS);
442   ClobberPhysRegOnly(PhysReg);
443 }
444
445 /// ModifyStackSlot - This method is called when the value in a stack slot
446 /// changes.  This removes information about which register the previous value
447 /// for this slot lives in (as the previous value is dead now).
448 void AvailableSpills::ModifyStackSlot(int Slot) {
449   std::map<int, SSInfo>::iterator It = SpillSlotsAvailable.find(Slot);
450   if (It == SpillSlotsAvailable.end()) return;
451   unsigned Reg = It->second.first >> 1;
452   SpillSlotsAvailable.erase(It);
453   
454   // This register may hold the value of multiple stack slots, only remove this
455   // stack slot from the set of values the register contains.
456   std::multimap<unsigned, int>::iterator I = PhysRegsAvailable.lower_bound(Reg);
457   for (; ; ++I) {
458     assert(I != PhysRegsAvailable.end() && I->first == Reg &&
459            "Map inverse broken!");
460     if (I->second == Slot) break;
461   }
462   PhysRegsAvailable.erase(I);
463 }
464
465
466
467 // ReusedOp - For each reused operand, we keep track of a bit of information, in
468 // case we need to rollback upon processing a new operand.  See comments below.
469 namespace {
470   struct ReusedOp {
471     // The MachineInstr operand that reused an available value.
472     unsigned Operand;
473
474     // StackSlot - The spill slot of the value being reused.
475     unsigned StackSlot;
476
477     // PhysRegReused - The physical register the value was available in.
478     unsigned PhysRegReused;
479
480     // AssignedPhysReg - The physreg that was assigned for use by the reload.
481     unsigned AssignedPhysReg;
482     
483     // VirtReg - The virtual register itself.
484     unsigned VirtReg;
485
486     ReusedOp(unsigned o, unsigned ss, unsigned prr, unsigned apr,
487              unsigned vreg)
488       : Operand(o), StackSlot(ss), PhysRegReused(prr), AssignedPhysReg(apr),
489       VirtReg(vreg) {}
490   };
491   
492   /// ReuseInfo - This maintains a collection of ReuseOp's for each operand that
493   /// is reused instead of reloaded.
494   class VISIBILITY_HIDDEN ReuseInfo {
495     MachineInstr &MI;
496     std::vector<ReusedOp> Reuses;
497     BitVector PhysRegsClobbered;
498   public:
499     ReuseInfo(MachineInstr &mi, const MRegisterInfo *mri) : MI(mi) {
500       PhysRegsClobbered.resize(mri->getNumRegs());
501     }
502     
503     bool hasReuses() const {
504       return !Reuses.empty();
505     }
506     
507     /// addReuse - If we choose to reuse a virtual register that is already
508     /// available instead of reloading it, remember that we did so.
509     void addReuse(unsigned OpNo, unsigned StackSlot,
510                   unsigned PhysRegReused, unsigned AssignedPhysReg,
511                   unsigned VirtReg) {
512       // If the reload is to the assigned register anyway, no undo will be
513       // required.
514       if (PhysRegReused == AssignedPhysReg) return;
515       
516       // Otherwise, remember this.
517       Reuses.push_back(ReusedOp(OpNo, StackSlot, PhysRegReused, 
518                                 AssignedPhysReg, VirtReg));
519     }
520
521     void markClobbered(unsigned PhysReg) {
522       PhysRegsClobbered.set(PhysReg);
523     }
524
525     bool isClobbered(unsigned PhysReg) const {
526       return PhysRegsClobbered.test(PhysReg);
527     }
528     
529     /// GetRegForReload - We are about to emit a reload into PhysReg.  If there
530     /// is some other operand that is using the specified register, either pick
531     /// a new register to use, or evict the previous reload and use this reg. 
532     unsigned GetRegForReload(unsigned PhysReg, MachineInstr *MI,
533                              AvailableSpills &Spills,
534                              std::map<int, MachineInstr*> &MaybeDeadStores,
535                              SmallSet<unsigned, 8> &Rejected) {
536       if (Reuses.empty()) return PhysReg;  // This is most often empty.
537
538       for (unsigned ro = 0, e = Reuses.size(); ro != e; ++ro) {
539         ReusedOp &Op = Reuses[ro];
540         // If we find some other reuse that was supposed to use this register
541         // exactly for its reload, we can change this reload to use ITS reload
542         // register. That is, unless its reload register has already been
543         // considered and subsequently rejected because it has also been reused
544         // by another operand.
545         if (Op.PhysRegReused == PhysReg &&
546             Rejected.count(Op.AssignedPhysReg) == 0) {
547           // Yup, use the reload register that we didn't use before.
548           unsigned NewReg = Op.AssignedPhysReg;
549           Rejected.insert(PhysReg);
550           return GetRegForReload(NewReg, MI, Spills, MaybeDeadStores, Rejected);
551         } else {
552           // Otherwise, we might also have a problem if a previously reused
553           // value aliases the new register.  If so, codegen the previous reload
554           // and use this one.          
555           unsigned PRRU = Op.PhysRegReused;
556           const MRegisterInfo *MRI = Spills.getRegInfo();
557           if (MRI->areAliases(PRRU, PhysReg)) {
558             // Okay, we found out that an alias of a reused register
559             // was used.  This isn't good because it means we have
560             // to undo a previous reuse.
561             MachineBasicBlock *MBB = MI->getParent();
562             const TargetRegisterClass *AliasRC =
563               MBB->getParent()->getSSARegMap()->getRegClass(Op.VirtReg);
564
565             // Copy Op out of the vector and remove it, we're going to insert an
566             // explicit load for it.
567             ReusedOp NewOp = Op;
568             Reuses.erase(Reuses.begin()+ro);
569
570             // Ok, we're going to try to reload the assigned physreg into the
571             // slot that we were supposed to in the first place.  However, that
572             // register could hold a reuse.  Check to see if it conflicts or
573             // would prefer us to use a different register.
574             unsigned NewPhysReg = GetRegForReload(NewOp.AssignedPhysReg,
575                                          MI, Spills, MaybeDeadStores, Rejected);
576             
577             MRI->loadRegFromStackSlot(*MBB, MI, NewPhysReg,
578                                       NewOp.StackSlot, AliasRC);
579             Spills.ClobberPhysReg(NewPhysReg);
580             Spills.ClobberPhysReg(NewOp.PhysRegReused);
581             
582             // Any stores to this stack slot are not dead anymore.
583             MaybeDeadStores.erase(NewOp.StackSlot);
584             
585             MI->getOperand(NewOp.Operand).setReg(NewPhysReg);
586             
587             Spills.addAvailable(NewOp.StackSlot, MI, NewPhysReg);
588             ++NumLoads;
589             DEBUG(MachineBasicBlock::iterator MII = MI;
590                   DOUT << '\t' << *prior(MII));
591             
592             DOUT << "Reuse undone!\n";
593             --NumReused;
594             
595             // Finally, PhysReg is now available, go ahead and use it.
596             return PhysReg;
597           }
598         }
599       }
600       return PhysReg;
601     }
602
603     /// GetRegForReload - Helper for the above GetRegForReload(). Add a
604     /// 'Rejected' set to remember which registers have been considered and
605     /// rejected for the reload. This avoids infinite looping in case like
606     /// this:
607     /// t1 := op t2, t3
608     /// t2 <- assigned r0 for use by the reload but ended up reuse r1
609     /// t3 <- assigned r1 for use by the reload but ended up reuse r0
610     /// t1 <- desires r1
611     ///       sees r1 is taken by t2, tries t2's reload register r0
612     ///       sees r0 is taken by t3, tries t3's reload register r1
613     ///       sees r1 is taken by t2, tries t2's reload register r0 ...
614     unsigned GetRegForReload(unsigned PhysReg, MachineInstr *MI,
615                              AvailableSpills &Spills,
616                              std::map<int, MachineInstr*> &MaybeDeadStores) {
617       SmallSet<unsigned, 8> Rejected;
618       return GetRegForReload(PhysReg, MI, Spills, MaybeDeadStores, Rejected);
619     }
620   };
621 }
622
623
624 /// rewriteMBB - Keep track of which spills are available even after the
625 /// register allocator is done with them.  If possible, avoid reloading vregs.
626 void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM,
627                               std::vector<MachineInstr*> &ReMatedMIs) {
628
629   DOUT << MBB.getBasicBlock()->getName() << ":\n";
630
631   // Spills - Keep track of which spilled values are available in physregs so
632   // that we can choose to reuse the physregs instead of emitting reloads.
633   AvailableSpills Spills(MRI, TII);
634   
635   // MaybeDeadStores - When we need to write a value back into a stack slot,
636   // keep track of the inserted store.  If the stack slot value is never read
637   // (because the value was used from some available register, for example), and
638   // subsequently stored to, the original store is dead.  This map keeps track
639   // of inserted stores that are not used.  If we see a subsequent store to the
640   // same stack slot, the original store is deleted.
641   std::map<int, MachineInstr*> MaybeDeadStores;
642
643   bool *PhysRegsUsed = MBB.getParent()->getUsedPhysregs();
644
645   for (MachineBasicBlock::iterator MII = MBB.begin(), E = MBB.end();
646        MII != E; ) {
647     MachineInstr &MI = *MII;
648     MachineBasicBlock::iterator NextMII = MII; ++NextMII;
649
650     /// ReusedOperands - Keep track of operand reuse in case we need to undo
651     /// reuse.
652     ReuseInfo ReusedOperands(MI, MRI);
653
654     // Loop over all of the implicit defs, clearing them from our available
655     // sets.
656     const TargetInstrDescriptor *TID = MI.getInstrDescriptor();
657
658     // If this instruction is being rematerialized, just remove it!
659     if (TID->Flags & M_REMATERIALIZIBLE) {
660       bool Remove = true;
661       for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
662         MachineOperand &MO = MI.getOperand(i);
663         if (!MO.isRegister() || MO.getReg() == 0)
664           continue;   // Ignore non-register operands.
665         if (MO.isDef() && !VRM.isReMaterialized(MO.getReg())) {
666           Remove = false;
667           break;
668         }
669       }
670       if (Remove) {
671         VRM.RemoveFromFoldedVirtMap(&MI);
672         ReMatedMIs.push_back(MI.removeFromParent());
673         MII = NextMII;
674         continue;
675       }
676     }
677
678     const unsigned *ImpDef = TID->ImplicitDefs;
679     if (ImpDef) {
680       for ( ; *ImpDef; ++ImpDef) {
681         PhysRegsUsed[*ImpDef] = true;
682         ReusedOperands.markClobbered(*ImpDef);
683         Spills.ClobberPhysReg(*ImpDef);
684       }
685     }
686
687     // Process all of the spilled uses and all non spilled reg references.
688     for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
689       MachineOperand &MO = MI.getOperand(i);
690       if (!MO.isRegister() || MO.getReg() == 0)
691         continue;   // Ignore non-register operands.
692       
693       if (MRegisterInfo::isPhysicalRegister(MO.getReg())) {
694         // Ignore physregs for spilling, but remember that it is used by this
695         // function.
696         PhysRegsUsed[MO.getReg()] = true;
697         ReusedOperands.markClobbered(MO.getReg());
698         continue;
699       }
700       
701       assert(MRegisterInfo::isVirtualRegister(MO.getReg()) &&
702              "Not a virtual or a physical register?");
703       
704       unsigned VirtReg = MO.getReg();
705       if (!VRM.hasStackSlot(VirtReg)) {
706         // This virtual register was assigned a physreg!
707         unsigned Phys = VRM.getPhys(VirtReg);
708         PhysRegsUsed[Phys] = true;
709         if (MO.isDef())
710           ReusedOperands.markClobbered(Phys);
711         MI.getOperand(i).setReg(Phys);
712         continue;
713       }
714       
715       // This virtual register is now known to be a spilled value.
716       if (!MO.isUse())
717         continue;  // Handle defs in the loop below (handle use&def here though)
718
719       bool doReMat = VRM.isReMaterialized(VirtReg);
720       int StackSlot = VRM.getStackSlot(VirtReg);
721       unsigned PhysReg;
722
723       // Check to see if this stack slot is available.
724       MachineInstr *SSMI = NULL;
725       if ((PhysReg = Spills.getSpillSlotPhysReg(StackSlot, SSMI))) {
726         // This spilled operand might be part of a two-address operand.  If this
727         // is the case, then changing it will necessarily require changing the 
728         // def part of the instruction as well.  However, in some cases, we
729         // aren't allowed to modify the reused register.  If none of these cases
730         // apply, reuse it.
731         bool CanReuse = true;
732         int ti = TID->getOperandConstraint(i, TOI::TIED_TO);
733         if (ti != -1 &&
734             MI.getOperand(ti).isReg() && 
735             MI.getOperand(ti).getReg() == VirtReg) {
736           // Okay, we have a two address operand.  We can reuse this physreg as
737           // long as we are allowed to clobber the value and there isn't an
738           // earlier def that has already clobbered the physreg.
739           CanReuse = Spills.canClobberPhysReg(StackSlot) &&
740             !ReusedOperands.isClobbered(PhysReg);
741         }
742         
743         if (CanReuse) {
744           // If this stack slot value is already available, reuse it!
745           if (StackSlot > VirtRegMap::MAX_STACK_SLOT)
746             DOUT << "Reusing RM#" << StackSlot-VirtRegMap::MAX_STACK_SLOT-1;
747           else
748             DOUT << "Reusing SS#" << StackSlot;
749           DOUT << " from physreg "
750                << MRI->getName(PhysReg) << " for vreg"
751                << VirtReg <<" instead of reloading into physreg "
752                << MRI->getName(VRM.getPhys(VirtReg)) << "\n";
753           MI.getOperand(i).setReg(PhysReg);
754
755           // Extend the live range of the MI that last kill the register if
756           // necessary.
757           bool WasKill = false;
758           if (SSMI) {
759             int UIdx = SSMI->findRegisterUseOperand(PhysReg, true);
760             if (UIdx != -1) {
761               MachineOperand &MOK = SSMI->getOperand(UIdx);
762               WasKill = MOK.isKill();
763               MOK.unsetIsKill();
764             }
765           }
766           if (ti == -1) {
767             // Unless it's the use of a two-address code, transfer the kill
768             // of the reused register to this use.
769             if (WasKill)
770               MI.getOperand(i).setIsKill();
771             Spills.addLastUse(PhysReg, &MI);
772           }
773
774           // The only technical detail we have is that we don't know that
775           // PhysReg won't be clobbered by a reloaded stack slot that occurs
776           // later in the instruction.  In particular, consider 'op V1, V2'.
777           // If V1 is available in physreg R0, we would choose to reuse it
778           // here, instead of reloading it into the register the allocator
779           // indicated (say R1).  However, V2 might have to be reloaded
780           // later, and it might indicate that it needs to live in R0.  When
781           // this occurs, we need to have information available that
782           // indicates it is safe to use R1 for the reload instead of R0.
783           //
784           // To further complicate matters, we might conflict with an alias,
785           // or R0 and R1 might not be compatible with each other.  In this
786           // case, we actually insert a reload for V1 in R1, ensuring that
787           // we can get at R0 or its alias.
788           ReusedOperands.addReuse(i, StackSlot, PhysReg,
789                                   VRM.getPhys(VirtReg), VirtReg);
790           if (ti != -1)
791             // Only mark it clobbered if this is a use&def operand.
792             ReusedOperands.markClobbered(PhysReg);
793           ++NumReused;
794           continue;
795         }
796         
797         // Otherwise we have a situation where we have a two-address instruction
798         // whose mod/ref operand needs to be reloaded.  This reload is already
799         // available in some register "PhysReg", but if we used PhysReg as the
800         // operand to our 2-addr instruction, the instruction would modify
801         // PhysReg.  This isn't cool if something later uses PhysReg and expects
802         // to get its initial value.
803         //
804         // To avoid this problem, and to avoid doing a load right after a store,
805         // we emit a copy from PhysReg into the designated register for this
806         // operand.
807         unsigned DesignatedReg = VRM.getPhys(VirtReg);
808         assert(DesignatedReg && "Must map virtreg to physreg!");
809
810         // Note that, if we reused a register for a previous operand, the
811         // register we want to reload into might not actually be
812         // available.  If this occurs, use the register indicated by the
813         // reuser.
814         if (ReusedOperands.hasReuses())
815           DesignatedReg = ReusedOperands.GetRegForReload(DesignatedReg, &MI, 
816                                                       Spills, MaybeDeadStores);
817         
818         // If the mapped designated register is actually the physreg we have
819         // incoming, we don't need to inserted a dead copy.
820         if (DesignatedReg == PhysReg) {
821           // If this stack slot value is already available, reuse it!
822           if (StackSlot > VirtRegMap::MAX_STACK_SLOT)
823             DOUT << "Reusing RM#" << StackSlot-VirtRegMap::MAX_STACK_SLOT-1;
824           else
825             DOUT << "Reusing SS#" << StackSlot;
826           DOUT << " from physreg " << MRI->getName(PhysReg) << " for vreg"
827                << VirtReg
828                << " instead of reloading into same physreg.\n";
829           MI.getOperand(i).setReg(PhysReg);
830           ReusedOperands.markClobbered(PhysReg);
831           ++NumReused;
832           continue;
833         }
834         
835         const TargetRegisterClass* RC =
836           MBB.getParent()->getSSARegMap()->getRegClass(VirtReg);
837
838         PhysRegsUsed[DesignatedReg] = true;
839         ReusedOperands.markClobbered(DesignatedReg);
840         MRI->copyRegToReg(MBB, &MI, DesignatedReg, PhysReg, RC);
841
842         // Extend the live range of the MI that last kill the register if
843         // necessary.
844         bool WasKill = false;
845         if (SSMI) {
846           int UIdx = SSMI->findRegisterUseOperand(PhysReg, true);
847           if (UIdx != -1) {
848             MachineOperand &MOK = SSMI->getOperand(UIdx);
849             WasKill = MOK.isKill();
850             MOK.unsetIsKill();
851           }
852         }
853         MachineInstr *CopyMI = prior(MII);
854         if (WasKill) {
855           // Transfer kill to the next use.
856           int UIdx = CopyMI->findRegisterUseOperand(PhysReg);
857           assert(UIdx != -1);
858           MachineOperand &MOU = CopyMI->getOperand(UIdx);
859           MOU.setIsKill();
860         }
861         Spills.addLastUse(PhysReg, CopyMI);
862
863         // This invalidates DesignatedReg.
864         Spills.ClobberPhysReg(DesignatedReg);
865         
866         Spills.addAvailable(StackSlot, &MI, DesignatedReg);
867         MI.getOperand(i).setReg(DesignatedReg);
868         DOUT << '\t' << *prior(MII);
869         ++NumReused;
870         continue;
871       }
872       
873       // Otherwise, reload it and remember that we have it.
874       PhysReg = VRM.getPhys(VirtReg);
875       assert(PhysReg && "Must map virtreg to physreg!");
876       const TargetRegisterClass* RC =
877         MBB.getParent()->getSSARegMap()->getRegClass(VirtReg);
878
879       // Note that, if we reused a register for a previous operand, the
880       // register we want to reload into might not actually be
881       // available.  If this occurs, use the register indicated by the
882       // reuser.
883       if (ReusedOperands.hasReuses())
884         PhysReg = ReusedOperands.GetRegForReload(PhysReg, &MI, 
885                                                  Spills, MaybeDeadStores);
886       
887       PhysRegsUsed[PhysReg] = true;
888       ReusedOperands.markClobbered(PhysReg);
889       if (doReMat)
890         MRI->reMaterialize(MBB, &MI, PhysReg, VRM.getReMaterializedMI(VirtReg));
891       else
892         MRI->loadRegFromStackSlot(MBB, &MI, PhysReg, StackSlot, RC);
893       // This invalidates PhysReg.
894       Spills.ClobberPhysReg(PhysReg);
895
896       // Any stores to this stack slot are not dead anymore.
897       if (!doReMat)
898         MaybeDeadStores.erase(StackSlot);
899       Spills.addAvailable(StackSlot, &MI, PhysReg);
900       // Assumes this is the last use. IsKill will be unset if reg is reused
901       // unless it's a two-address operand.
902       if (TID->getOperandConstraint(i, TOI::TIED_TO) == -1)
903         MI.getOperand(i).setIsKill();
904       ++NumLoads;
905       MI.getOperand(i).setReg(PhysReg);
906       DOUT << '\t' << *prior(MII);
907     }
908
909     DOUT << '\t' << MI;
910
911     // If we have folded references to memory operands, make sure we clear all
912     // physical registers that may contain the value of the spilled virtual
913     // register
914     VirtRegMap::MI2VirtMapTy::const_iterator I, End;
915     for (tie(I, End) = VRM.getFoldedVirts(&MI); I != End; ++I) {
916       DOUT << "Folded vreg: " << I->second.first << "  MR: "
917            << I->second.second;
918       unsigned VirtReg = I->second.first;
919       VirtRegMap::ModRef MR = I->second.second;
920       if (!VRM.hasStackSlot(VirtReg)) {
921         DOUT << ": No stack slot!\n";
922         continue;
923       }
924       int SS = VRM.getStackSlot(VirtReg);
925       DOUT << " - StackSlot: " << SS << "\n";
926       
927       // If this folded instruction is just a use, check to see if it's a
928       // straight load from the virt reg slot.
929       if ((MR & VirtRegMap::isRef) && !(MR & VirtRegMap::isMod)) {
930         int FrameIdx;
931         if (unsigned DestReg = TII->isLoadFromStackSlot(&MI, FrameIdx)) {
932           if (FrameIdx == SS) {
933             // If this spill slot is available, turn it into a copy (or nothing)
934             // instead of leaving it as a load!
935             MachineInstr *SSMI = NULL;
936             if (unsigned InReg = Spills.getSpillSlotPhysReg(SS, SSMI)) {
937               DOUT << "Promoted Load To Copy: " << MI;
938               MachineFunction &MF = *MBB.getParent();
939               if (DestReg != InReg) {
940                 MRI->copyRegToReg(MBB, &MI, DestReg, InReg,
941                                   MF.getSSARegMap()->getRegClass(VirtReg));
942                 // Revisit the copy so we make sure to notice the effects of the
943                 // operation on the destreg (either needing to RA it if it's 
944                 // virtual or needing to clobber any values if it's physical).
945                 NextMII = &MI;
946                 --NextMII;  // backtrack to the copy.
947               } else
948                 DOUT << "Removing now-noop copy: " << MI;
949
950               // Either way, the live range of the last kill of InReg has been
951               // extended. Remove its kill.
952               bool WasKill = false;
953               if (SSMI) {
954                 int UIdx = SSMI->findRegisterUseOperand(InReg, true);
955                 if (UIdx != -1) {
956                   MachineOperand &MOK = SSMI->getOperand(UIdx);
957                   WasKill = MOK.isKill();
958                   MOK.unsetIsKill();
959                 }
960               }
961               if (NextMII != MBB.end()) {
962                 // If NextMII uses InReg and the use is not a two address
963                 // operand, mark it killed.
964                 int UIdx = NextMII->findRegisterUseOperand(InReg);
965                 if (UIdx != -1) {
966                   MachineOperand &MOU = NextMII->getOperand(UIdx);
967                   if (WasKill) {
968                     const TargetInstrDescriptor *NTID =
969                       NextMII->getInstrDescriptor();
970                     if (UIdx >= NTID->numOperands ||
971                         NTID->getOperandConstraint(UIdx, TOI::TIED_TO) == -1)
972                       MOU.setIsKill();
973                   }
974                   Spills.addLastUse(InReg, &(*NextMII));
975                 }
976               }
977
978               VRM.RemoveFromFoldedVirtMap(&MI);
979               MBB.erase(&MI);
980               goto ProcessNextInst;
981             }
982           }
983         }
984       }
985
986       // If this reference is not a use, any previous store is now dead.
987       // Otherwise, the store to this stack slot is not dead anymore.
988       std::map<int, MachineInstr*>::iterator MDSI = MaybeDeadStores.find(SS);
989       if (MDSI != MaybeDeadStores.end()) {
990         if (MR & VirtRegMap::isRef)   // Previous store is not dead.
991           MaybeDeadStores.erase(MDSI);
992         else {
993           // If we get here, the store is dead, nuke it now.
994           assert(VirtRegMap::isMod && "Can't be modref!");
995           DOUT << "Removed dead store:\t" << *MDSI->second;
996           MBB.erase(MDSI->second);
997           VRM.RemoveFromFoldedVirtMap(MDSI->second);
998           MaybeDeadStores.erase(MDSI);
999           ++NumDSE;
1000         }
1001       }
1002
1003       // If the spill slot value is available, and this is a new definition of
1004       // the value, the value is not available anymore.
1005       if (MR & VirtRegMap::isMod) {
1006         // Notice that the value in this stack slot has been modified.
1007         Spills.ModifyStackSlot(SS);
1008         
1009         // If this is *just* a mod of the value, check to see if this is just a
1010         // store to the spill slot (i.e. the spill got merged into the copy). If
1011         // so, realize that the vreg is available now, and add the store to the
1012         // MaybeDeadStore info.
1013         int StackSlot;
1014         if (!(MR & VirtRegMap::isRef)) {
1015           if (unsigned SrcReg = TII->isStoreToStackSlot(&MI, StackSlot)) {
1016             assert(MRegisterInfo::isPhysicalRegister(SrcReg) &&
1017                    "Src hasn't been allocated yet?");
1018             // Okay, this is certainly a store of SrcReg to [StackSlot].  Mark
1019             // this as a potentially dead store in case there is a subsequent
1020             // store into the stack slot without a read from it.
1021             MaybeDeadStores[StackSlot] = &MI;
1022
1023             // If the stack slot value was previously available in some other
1024             // register, change it now.  Otherwise, make the register available,
1025             // in PhysReg.
1026             Spills.addAvailable(StackSlot, &MI, SrcReg, false/*don't clobber*/);
1027           }
1028         }
1029       }
1030     }
1031
1032     // Process all of the spilled defs.
1033     for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
1034       MachineOperand &MO = MI.getOperand(i);
1035       if (MO.isRegister() && MO.getReg() && MO.isDef()) {
1036         unsigned VirtReg = MO.getReg();
1037
1038         if (!MRegisterInfo::isVirtualRegister(VirtReg)) {
1039           // Check to see if this is a noop copy.  If so, eliminate the
1040           // instruction before considering the dest reg to be changed.
1041           unsigned Src, Dst;
1042           if (TII->isMoveInstr(MI, Src, Dst) && Src == Dst) {
1043             ++NumDCE;
1044             DOUT << "Removing now-noop copy: " << MI;
1045             Spills.removeLastUse(Src, &MI);
1046             MBB.erase(&MI);
1047             VRM.RemoveFromFoldedVirtMap(&MI);
1048             Spills.disallowClobberPhysReg(VirtReg);
1049             goto ProcessNextInst;
1050           }
1051           
1052           // If it's not a no-op copy, it clobbers the value in the destreg.
1053           Spills.ClobberPhysReg(VirtReg);
1054           ReusedOperands.markClobbered(VirtReg);
1055  
1056           // Check to see if this instruction is a load from a stack slot into
1057           // a register.  If so, this provides the stack slot value in the reg.
1058           int FrameIdx;
1059           if (unsigned DestReg = TII->isLoadFromStackSlot(&MI, FrameIdx)) {
1060             assert(DestReg == VirtReg && "Unknown load situation!");
1061             
1062             // Otherwise, if it wasn't available, remember that it is now!
1063             Spills.addAvailable(FrameIdx, &MI, DestReg);
1064             goto ProcessNextInst;
1065           }
1066             
1067           continue;
1068         }
1069
1070         // The only vregs left are stack slot definitions.
1071         int StackSlot = VRM.getStackSlot(VirtReg);
1072         const TargetRegisterClass *RC =
1073           MBB.getParent()->getSSARegMap()->getRegClass(VirtReg);
1074
1075         // If this def is part of a two-address operand, make sure to execute
1076         // the store from the correct physical register.
1077         unsigned PhysReg;
1078         int TiedOp = MI.getInstrDescriptor()->findTiedToSrcOperand(i);
1079         if (TiedOp != -1)
1080           PhysReg = MI.getOperand(TiedOp).getReg();
1081         else {
1082           PhysReg = VRM.getPhys(VirtReg);
1083           if (ReusedOperands.isClobbered(PhysReg)) {
1084             // Another def has taken the assigned physreg. It must have been a
1085             // use&def which got it due to reuse. Undo the reuse!
1086             PhysReg = ReusedOperands.GetRegForReload(PhysReg, &MI, 
1087                                                      Spills, MaybeDeadStores);
1088           }
1089         }
1090
1091         PhysRegsUsed[PhysReg] = true;
1092         ReusedOperands.markClobbered(PhysReg);
1093         MRI->storeRegToStackSlot(MBB, next(MII), PhysReg, StackSlot, RC);
1094         DOUT << "Store:\t" << *next(MII);
1095         MI.getOperand(i).setReg(PhysReg);
1096
1097         // If there is a dead store to this stack slot, nuke it now.
1098         MachineInstr *&LastStore = MaybeDeadStores[StackSlot];
1099         if (LastStore) {
1100           DOUT << "Removed dead store:\t" << *LastStore;
1101           ++NumDSE;
1102           MBB.erase(LastStore);
1103           VRM.RemoveFromFoldedVirtMap(LastStore);
1104         }
1105         LastStore = next(MII);
1106
1107         // If the stack slot value was previously available in some other
1108         // register, change it now.  Otherwise, make the register available,
1109         // in PhysReg.
1110         Spills.ModifyStackSlot(StackSlot);
1111         Spills.ClobberPhysReg(PhysReg);
1112         Spills.addAvailable(StackSlot, LastStore, PhysReg);
1113         ++NumStores;
1114
1115         // Check to see if this is a noop copy.  If so, eliminate the
1116         // instruction before considering the dest reg to be changed.
1117         {
1118           unsigned Src, Dst;
1119           if (TII->isMoveInstr(MI, Src, Dst) && Src == Dst) {
1120             ++NumDCE;
1121             DOUT << "Removing now-noop copy: " << MI;
1122             Spills.removeLastUse(Src, &MI);
1123             MBB.erase(&MI);
1124             VRM.RemoveFromFoldedVirtMap(&MI);
1125             goto ProcessNextInst;
1126           }
1127         }        
1128       }
1129     }
1130   ProcessNextInst:
1131     MII = NextMII;
1132   }
1133 }
1134
1135
1136
1137 llvm::Spiller* llvm::createSpiller() {
1138   switch (SpillerOpt) {
1139   default: assert(0 && "Unreachable!");
1140   case local:
1141     return new LocalSpiller();
1142   case simple:
1143     return new SimpleSpiller();
1144   }
1145 }