Begin adding static dependence information to passes, which will allow us to
[oota-llvm.git] / lib / CodeGen / LiveVariables.cpp
1 //===-- LiveVariables.cpp - Live Variable Analysis for Machine Code -------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the LiveVariable analysis pass.  For each machine
11 // instruction in the function, this pass calculates the set of registers that
12 // are immediately dead after the instruction (i.e., the instruction calculates
13 // the value, but it is never used) and the set of registers that are used by
14 // the instruction, but are never used after the instruction (i.e., they are
15 // killed).
16 //
17 // This class computes live variables using are sparse implementation based on
18 // the machine code SSA form.  This class computes live variable information for
19 // each virtual and _register allocatable_ physical register in a function.  It
20 // uses the dominance properties of SSA form to efficiently compute live
21 // variables for virtual registers, and assumes that physical registers are only
22 // live within a single basic block (allowing it to do a single local analysis
23 // to resolve physical register lifetimes in each basic block).  If a physical
24 // register is not register allocatable, it is not tracked.  This is useful for
25 // things like the stack pointer and condition codes.
26 //
27 //===----------------------------------------------------------------------===//
28
29 #include "llvm/CodeGen/LiveVariables.h"
30 #include "llvm/CodeGen/MachineInstr.h"
31 #include "llvm/CodeGen/MachineRegisterInfo.h"
32 #include "llvm/CodeGen/Passes.h"
33 #include "llvm/Support/Debug.h"
34 #include "llvm/Target/TargetRegisterInfo.h"
35 #include "llvm/Target/TargetInstrInfo.h"
36 #include "llvm/Target/TargetMachine.h"
37 #include "llvm/ADT/DepthFirstIterator.h"
38 #include "llvm/ADT/SmallPtrSet.h"
39 #include "llvm/ADT/SmallSet.h"
40 #include "llvm/ADT/STLExtras.h"
41 #include <algorithm>
42 using namespace llvm;
43
44 char LiveVariables::ID = 0;
45 INITIALIZE_PASS_BEGIN(LiveVariables, "livevars",
46                 "Live Variable Analysis", false, false)
47 INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim)
48 INITIALIZE_PASS_END(LiveVariables, "livevars",
49                 "Live Variable Analysis", false, false)
50
51
52 void LiveVariables::getAnalysisUsage(AnalysisUsage &AU) const {
53   AU.addRequiredID(UnreachableMachineBlockElimID);
54   AU.setPreservesAll();
55   MachineFunctionPass::getAnalysisUsage(AU);
56 }
57
58 MachineInstr *
59 LiveVariables::VarInfo::findKill(const MachineBasicBlock *MBB) const {
60   for (unsigned i = 0, e = Kills.size(); i != e; ++i)
61     if (Kills[i]->getParent() == MBB)
62       return Kills[i];
63   return NULL;
64 }
65
66 void LiveVariables::VarInfo::dump() const {
67   dbgs() << "  Alive in blocks: ";
68   for (SparseBitVector<>::iterator I = AliveBlocks.begin(),
69            E = AliveBlocks.end(); I != E; ++I)
70     dbgs() << *I << ", ";
71   dbgs() << "\n  Killed by:";
72   if (Kills.empty())
73     dbgs() << " No instructions.\n";
74   else {
75     for (unsigned i = 0, e = Kills.size(); i != e; ++i)
76       dbgs() << "\n    #" << i << ": " << *Kills[i];
77     dbgs() << "\n";
78   }
79 }
80
81 /// getVarInfo - Get (possibly creating) a VarInfo object for the given vreg.
82 LiveVariables::VarInfo &LiveVariables::getVarInfo(unsigned RegIdx) {
83   assert(TargetRegisterInfo::isVirtualRegister(RegIdx) &&
84          "getVarInfo: not a virtual register!");
85   RegIdx -= TargetRegisterInfo::FirstVirtualRegister;
86   if (RegIdx >= VirtRegInfo.size()) {
87     if (RegIdx >= 2*VirtRegInfo.size())
88       VirtRegInfo.resize(RegIdx*2);
89     else
90       VirtRegInfo.resize(2*VirtRegInfo.size());
91   }
92   return VirtRegInfo[RegIdx];
93 }
94
95 void LiveVariables::MarkVirtRegAliveInBlock(VarInfo& VRInfo,
96                                             MachineBasicBlock *DefBlock,
97                                             MachineBasicBlock *MBB,
98                                     std::vector<MachineBasicBlock*> &WorkList) {
99   unsigned BBNum = MBB->getNumber();
100   
101   // Check to see if this basic block is one of the killing blocks.  If so,
102   // remove it.
103   for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i)
104     if (VRInfo.Kills[i]->getParent() == MBB) {
105       VRInfo.Kills.erase(VRInfo.Kills.begin()+i);  // Erase entry
106       break;
107     }
108   
109   if (MBB == DefBlock) return;  // Terminate recursion
110
111   if (VRInfo.AliveBlocks.test(BBNum))
112     return;  // We already know the block is live
113
114   // Mark the variable known alive in this bb
115   VRInfo.AliveBlocks.set(BBNum);
116
117   for (MachineBasicBlock::const_pred_reverse_iterator PI = MBB->pred_rbegin(),
118          E = MBB->pred_rend(); PI != E; ++PI)
119     WorkList.push_back(*PI);
120 }
121
122 void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo,
123                                             MachineBasicBlock *DefBlock,
124                                             MachineBasicBlock *MBB) {
125   std::vector<MachineBasicBlock*> WorkList;
126   MarkVirtRegAliveInBlock(VRInfo, DefBlock, MBB, WorkList);
127
128   while (!WorkList.empty()) {
129     MachineBasicBlock *Pred = WorkList.back();
130     WorkList.pop_back();
131     MarkVirtRegAliveInBlock(VRInfo, DefBlock, Pred, WorkList);
132   }
133 }
134
135 void LiveVariables::HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
136                                      MachineInstr *MI) {
137   assert(MRI->getVRegDef(reg) && "Register use before def!");
138
139   unsigned BBNum = MBB->getNumber();
140
141   VarInfo& VRInfo = getVarInfo(reg);
142   VRInfo.NumUses++;
143
144   // Check to see if this basic block is already a kill block.
145   if (!VRInfo.Kills.empty() && VRInfo.Kills.back()->getParent() == MBB) {
146     // Yes, this register is killed in this basic block already. Increase the
147     // live range by updating the kill instruction.
148     VRInfo.Kills.back() = MI;
149     return;
150   }
151
152 #ifndef NDEBUG
153   for (unsigned i = 0, e = VRInfo.Kills.size(); i != e; ++i)
154     assert(VRInfo.Kills[i]->getParent() != MBB && "entry should be at end!");
155 #endif
156
157   // This situation can occur:
158   //
159   //     ,------.
160   //     |      |
161   //     |      v
162   //     |   t2 = phi ... t1 ...
163   //     |      |
164   //     |      v
165   //     |   t1 = ...
166   //     |  ... = ... t1 ...
167   //     |      |
168   //     `------'
169   //
170   // where there is a use in a PHI node that's a predecessor to the defining
171   // block. We don't want to mark all predecessors as having the value "alive"
172   // in this case.
173   if (MBB == MRI->getVRegDef(reg)->getParent()) return;
174
175   // Add a new kill entry for this basic block. If this virtual register is
176   // already marked as alive in this basic block, that means it is alive in at
177   // least one of the successor blocks, it's not a kill.
178   if (!VRInfo.AliveBlocks.test(BBNum))
179     VRInfo.Kills.push_back(MI);
180
181   // Update all dominating blocks to mark them as "known live".
182   for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
183          E = MBB->pred_end(); PI != E; ++PI)
184     MarkVirtRegAliveInBlock(VRInfo, MRI->getVRegDef(reg)->getParent(), *PI);
185 }
186
187 void LiveVariables::HandleVirtRegDef(unsigned Reg, MachineInstr *MI) {
188   VarInfo &VRInfo = getVarInfo(Reg);
189
190   if (VRInfo.AliveBlocks.empty())
191     // If vr is not alive in any block, then defaults to dead.
192     VRInfo.Kills.push_back(MI);
193 }
194
195 /// FindLastPartialDef - Return the last partial def of the specified register.
196 /// Also returns the sub-registers that're defined by the instruction.
197 MachineInstr *LiveVariables::FindLastPartialDef(unsigned Reg,
198                                             SmallSet<unsigned,4> &PartDefRegs) {
199   unsigned LastDefReg = 0;
200   unsigned LastDefDist = 0;
201   MachineInstr *LastDef = NULL;
202   for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
203        unsigned SubReg = *SubRegs; ++SubRegs) {
204     MachineInstr *Def = PhysRegDef[SubReg];
205     if (!Def)
206       continue;
207     unsigned Dist = DistanceMap[Def];
208     if (Dist > LastDefDist) {
209       LastDefReg  = SubReg;
210       LastDef     = Def;
211       LastDefDist = Dist;
212     }
213   }
214
215   if (!LastDef)
216     return 0;
217
218   PartDefRegs.insert(LastDefReg);
219   for (unsigned i = 0, e = LastDef->getNumOperands(); i != e; ++i) {
220     MachineOperand &MO = LastDef->getOperand(i);
221     if (!MO.isReg() || !MO.isDef() || MO.getReg() == 0)
222       continue;
223     unsigned DefReg = MO.getReg();
224     if (TRI->isSubRegister(Reg, DefReg)) {
225       PartDefRegs.insert(DefReg);
226       for (const unsigned *SubRegs = TRI->getSubRegisters(DefReg);
227            unsigned SubReg = *SubRegs; ++SubRegs)
228         PartDefRegs.insert(SubReg);
229     }
230   }
231   return LastDef;
232 }
233
234 /// HandlePhysRegUse - Turn previous partial def's into read/mod/writes. Add
235 /// implicit defs to a machine instruction if there was an earlier def of its
236 /// super-register.
237 void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) {
238   MachineInstr *LastDef = PhysRegDef[Reg];
239   // If there was a previous use or a "full" def all is well.
240   if (!LastDef && !PhysRegUse[Reg]) {
241     // Otherwise, the last sub-register def implicitly defines this register.
242     // e.g.
243     // AH =
244     // AL = ... <imp-def EAX>, <imp-kill AH>
245     //    = AH
246     // ...
247     //    = EAX
248     // All of the sub-registers must have been defined before the use of Reg!
249     SmallSet<unsigned, 4> PartDefRegs;
250     MachineInstr *LastPartialDef = FindLastPartialDef(Reg, PartDefRegs);
251     // If LastPartialDef is NULL, it must be using a livein register.
252     if (LastPartialDef) {
253       LastPartialDef->addOperand(MachineOperand::CreateReg(Reg, true/*IsDef*/,
254                                                            true/*IsImp*/));
255       PhysRegDef[Reg] = LastPartialDef;
256       SmallSet<unsigned, 8> Processed;
257       for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
258            unsigned SubReg = *SubRegs; ++SubRegs) {
259         if (Processed.count(SubReg))
260           continue;
261         if (PartDefRegs.count(SubReg))
262           continue;
263         // This part of Reg was defined before the last partial def. It's killed
264         // here.
265         LastPartialDef->addOperand(MachineOperand::CreateReg(SubReg,
266                                                              false/*IsDef*/,
267                                                              true/*IsImp*/));
268         PhysRegDef[SubReg] = LastPartialDef;
269         for (const unsigned *SS = TRI->getSubRegisters(SubReg); *SS; ++SS)
270           Processed.insert(*SS);
271       }
272     }
273   }
274   else if (LastDef && !PhysRegUse[Reg] &&
275            !LastDef->findRegisterDefOperand(Reg))
276     // Last def defines the super register, add an implicit def of reg.
277     LastDef->addOperand(MachineOperand::CreateReg(Reg,
278                                                  true/*IsDef*/, true/*IsImp*/));
279
280   // Remember this use.
281   PhysRegUse[Reg]  = MI;
282   for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
283        unsigned SubReg = *SubRegs; ++SubRegs)
284     PhysRegUse[SubReg] =  MI;
285 }
286
287 /// FindLastRefOrPartRef - Return the last reference or partial reference of
288 /// the specified register.
289 MachineInstr *LiveVariables::FindLastRefOrPartRef(unsigned Reg) {
290   MachineInstr *LastDef = PhysRegDef[Reg];
291   MachineInstr *LastUse = PhysRegUse[Reg];
292   if (!LastDef && !LastUse)
293     return 0;
294
295   MachineInstr *LastRefOrPartRef = LastUse ? LastUse : LastDef;
296   unsigned LastRefOrPartRefDist = DistanceMap[LastRefOrPartRef];
297   unsigned LastPartDefDist = 0;
298   for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
299        unsigned SubReg = *SubRegs; ++SubRegs) {
300     MachineInstr *Def = PhysRegDef[SubReg];
301     if (Def && Def != LastDef) {
302       // There was a def of this sub-register in between. This is a partial
303       // def, keep track of the last one.
304       unsigned Dist = DistanceMap[Def];
305       if (Dist > LastPartDefDist)
306         LastPartDefDist = Dist;
307     } else if (MachineInstr *Use = PhysRegUse[SubReg]) {
308       unsigned Dist = DistanceMap[Use];
309       if (Dist > LastRefOrPartRefDist) {
310         LastRefOrPartRefDist = Dist;
311         LastRefOrPartRef = Use;
312       }
313     }
314   }
315
316   return LastRefOrPartRef;
317 }
318
319 bool LiveVariables::HandlePhysRegKill(unsigned Reg, MachineInstr *MI) {
320   MachineInstr *LastDef = PhysRegDef[Reg];
321   MachineInstr *LastUse = PhysRegUse[Reg];
322   if (!LastDef && !LastUse)
323     return false;
324
325   MachineInstr *LastRefOrPartRef = LastUse ? LastUse : LastDef;
326   unsigned LastRefOrPartRefDist = DistanceMap[LastRefOrPartRef];
327   // The whole register is used.
328   // AL =
329   // AH =
330   //
331   //    = AX
332   //    = AL, AX<imp-use, kill>
333   // AX =
334   //
335   // Or whole register is defined, but not used at all.
336   // AX<dead> =
337   // ...
338   // AX =
339   //
340   // Or whole register is defined, but only partly used.
341   // AX<dead> = AL<imp-def>
342   //    = AL<kill>
343   // AX = 
344   MachineInstr *LastPartDef = 0;
345   unsigned LastPartDefDist = 0;
346   SmallSet<unsigned, 8> PartUses;
347   for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
348        unsigned SubReg = *SubRegs; ++SubRegs) {
349     MachineInstr *Def = PhysRegDef[SubReg];
350     if (Def && Def != LastDef) {
351       // There was a def of this sub-register in between. This is a partial
352       // def, keep track of the last one.
353       unsigned Dist = DistanceMap[Def];
354       if (Dist > LastPartDefDist) {
355         LastPartDefDist = Dist;
356         LastPartDef = Def;
357       }
358       continue;
359     }
360     if (MachineInstr *Use = PhysRegUse[SubReg]) {
361       PartUses.insert(SubReg);
362       for (const unsigned *SS = TRI->getSubRegisters(SubReg); *SS; ++SS)
363         PartUses.insert(*SS);
364       unsigned Dist = DistanceMap[Use];
365       if (Dist > LastRefOrPartRefDist) {
366         LastRefOrPartRefDist = Dist;
367         LastRefOrPartRef = Use;
368       }
369     }
370   }
371
372   if (!PhysRegUse[Reg]) {
373     // Partial uses. Mark register def dead and add implicit def of
374     // sub-registers which are used.
375     // EAX<dead>  = op  AL<imp-def>
376     // That is, EAX def is dead but AL def extends pass it.
377     PhysRegDef[Reg]->addRegisterDead(Reg, TRI, true);
378     for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
379          unsigned SubReg = *SubRegs; ++SubRegs) {
380       if (!PartUses.count(SubReg))
381         continue;
382       bool NeedDef = true;
383       if (PhysRegDef[Reg] == PhysRegDef[SubReg]) {
384         MachineOperand *MO = PhysRegDef[Reg]->findRegisterDefOperand(SubReg);
385         if (MO) {
386           NeedDef = false;
387           assert(!MO->isDead());
388         }
389       }
390       if (NeedDef)
391         PhysRegDef[Reg]->addOperand(MachineOperand::CreateReg(SubReg,
392                                                  true/*IsDef*/, true/*IsImp*/));
393       MachineInstr *LastSubRef = FindLastRefOrPartRef(SubReg);
394       if (LastSubRef)
395         LastSubRef->addRegisterKilled(SubReg, TRI, true);
396       else {
397         LastRefOrPartRef->addRegisterKilled(SubReg, TRI, true);
398         PhysRegUse[SubReg] = LastRefOrPartRef;
399         for (const unsigned *SSRegs = TRI->getSubRegisters(SubReg);
400              unsigned SSReg = *SSRegs; ++SSRegs)
401           PhysRegUse[SSReg] = LastRefOrPartRef;
402       }
403       for (const unsigned *SS = TRI->getSubRegisters(SubReg); *SS; ++SS)
404         PartUses.erase(*SS);
405     }
406   } else if (LastRefOrPartRef == PhysRegDef[Reg] && LastRefOrPartRef != MI) {
407     if (LastPartDef)
408       // The last partial def kills the register.
409       LastPartDef->addOperand(MachineOperand::CreateReg(Reg, false/*IsDef*/,
410                                                 true/*IsImp*/, true/*IsKill*/));
411     else {
412       MachineOperand *MO =
413         LastRefOrPartRef->findRegisterDefOperand(Reg, false, TRI);
414       bool NeedEC = MO->isEarlyClobber() && MO->getReg() != Reg;
415       // If the last reference is the last def, then it's not used at all.
416       // That is, unless we are currently processing the last reference itself.
417       LastRefOrPartRef->addRegisterDead(Reg, TRI, true);
418       if (NeedEC) {
419         // If we are adding a subreg def and the superreg def is marked early
420         // clobber, add an early clobber marker to the subreg def.
421         MO = LastRefOrPartRef->findRegisterDefOperand(Reg);
422         if (MO)
423           MO->setIsEarlyClobber();
424       }
425     }
426   } else
427     LastRefOrPartRef->addRegisterKilled(Reg, TRI, true);
428   return true;
429 }
430
431 void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI,
432                                      SmallVector<unsigned, 4> &Defs) {
433   // What parts of the register are previously defined?
434   SmallSet<unsigned, 32> Live;
435   if (PhysRegDef[Reg] || PhysRegUse[Reg]) {
436     Live.insert(Reg);
437     for (const unsigned *SS = TRI->getSubRegisters(Reg); *SS; ++SS)
438       Live.insert(*SS);
439   } else {
440     for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
441          unsigned SubReg = *SubRegs; ++SubRegs) {
442       // If a register isn't itself defined, but all parts that make up of it
443       // are defined, then consider it also defined.
444       // e.g.
445       // AL =
446       // AH =
447       //    = AX
448       if (Live.count(SubReg))
449         continue;
450       if (PhysRegDef[SubReg] || PhysRegUse[SubReg]) {
451         Live.insert(SubReg);
452         for (const unsigned *SS = TRI->getSubRegisters(SubReg); *SS; ++SS)
453           Live.insert(*SS);
454       }
455     }
456   }
457
458   // Start from the largest piece, find the last time any part of the register
459   // is referenced.
460   HandlePhysRegKill(Reg, MI);
461   // Only some of the sub-registers are used.
462   for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
463        unsigned SubReg = *SubRegs; ++SubRegs) {
464     if (!Live.count(SubReg))
465       // Skip if this sub-register isn't defined.
466       continue;
467     HandlePhysRegKill(SubReg, MI);
468   }
469
470   if (MI)
471     Defs.push_back(Reg);  // Remember this def.
472 }
473
474 void LiveVariables::UpdatePhysRegDefs(MachineInstr *MI,
475                                       SmallVector<unsigned, 4> &Defs) {
476   while (!Defs.empty()) {
477     unsigned Reg = Defs.back();
478     Defs.pop_back();
479     PhysRegDef[Reg]  = MI;
480     PhysRegUse[Reg]  = NULL;
481     for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
482          unsigned SubReg = *SubRegs; ++SubRegs) {
483       PhysRegDef[SubReg]  = MI;
484       PhysRegUse[SubReg]  = NULL;
485     }
486   }
487 }
488
489 bool LiveVariables::runOnMachineFunction(MachineFunction &mf) {
490   MF = &mf;
491   MRI = &mf.getRegInfo();
492   TRI = MF->getTarget().getRegisterInfo();
493
494   ReservedRegisters = TRI->getReservedRegs(mf);
495
496   unsigned NumRegs = TRI->getNumRegs();
497   PhysRegDef  = new MachineInstr*[NumRegs];
498   PhysRegUse  = new MachineInstr*[NumRegs];
499   PHIVarInfo = new SmallVector<unsigned, 4>[MF->getNumBlockIDs()];
500   std::fill(PhysRegDef,  PhysRegDef  + NumRegs, (MachineInstr*)0);
501   std::fill(PhysRegUse,  PhysRegUse  + NumRegs, (MachineInstr*)0);
502   PHIJoins.clear();
503
504   /// Get some space for a respectable number of registers.
505   VirtRegInfo.resize(64);
506
507   analyzePHINodes(mf);
508
509   // Calculate live variable information in depth first order on the CFG of the
510   // function.  This guarantees that we will see the definition of a virtual
511   // register before its uses due to dominance properties of SSA (except for PHI
512   // nodes, which are treated as a special case).
513   MachineBasicBlock *Entry = MF->begin();
514   SmallPtrSet<MachineBasicBlock*,16> Visited;
515
516   for (df_ext_iterator<MachineBasicBlock*, SmallPtrSet<MachineBasicBlock*,16> >
517          DFI = df_ext_begin(Entry, Visited), E = df_ext_end(Entry, Visited);
518        DFI != E; ++DFI) {
519     MachineBasicBlock *MBB = *DFI;
520
521     // Mark live-in registers as live-in.
522     SmallVector<unsigned, 4> Defs;
523     for (MachineBasicBlock::livein_iterator II = MBB->livein_begin(),
524            EE = MBB->livein_end(); II != EE; ++II) {
525       assert(TargetRegisterInfo::isPhysicalRegister(*II) &&
526              "Cannot have a live-in virtual register!");
527       HandlePhysRegDef(*II, 0, Defs);
528     }
529
530     // Loop over all of the instructions, processing them.
531     DistanceMap.clear();
532     unsigned Dist = 0;
533     for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
534          I != E; ++I) {
535       MachineInstr *MI = I;
536       if (MI->isDebugValue())
537         continue;
538       DistanceMap.insert(std::make_pair(MI, Dist++));
539
540       // Process all of the operands of the instruction...
541       unsigned NumOperandsToProcess = MI->getNumOperands();
542
543       // Unless it is a PHI node.  In this case, ONLY process the DEF, not any
544       // of the uses.  They will be handled in other basic blocks.
545       if (MI->isPHI())
546         NumOperandsToProcess = 1;
547
548       // Clear kill and dead markers. LV will recompute them.
549       SmallVector<unsigned, 4> UseRegs;
550       SmallVector<unsigned, 4> DefRegs;
551       for (unsigned i = 0; i != NumOperandsToProcess; ++i) {
552         MachineOperand &MO = MI->getOperand(i);
553         if (!MO.isReg() || MO.getReg() == 0)
554           continue;
555         unsigned MOReg = MO.getReg();
556         if (MO.isUse()) {
557           MO.setIsKill(false);
558           UseRegs.push_back(MOReg);
559         } else /*MO.isDef()*/ {
560           MO.setIsDead(false);
561           DefRegs.push_back(MOReg);
562         }
563       }
564
565       // Process all uses.
566       for (unsigned i = 0, e = UseRegs.size(); i != e; ++i) {
567         unsigned MOReg = UseRegs[i];
568         if (TargetRegisterInfo::isVirtualRegister(MOReg))
569           HandleVirtRegUse(MOReg, MBB, MI);
570         else if (!ReservedRegisters[MOReg])
571           HandlePhysRegUse(MOReg, MI);
572       }
573
574       // Process all defs.
575       for (unsigned i = 0, e = DefRegs.size(); i != e; ++i) {
576         unsigned MOReg = DefRegs[i];
577         if (TargetRegisterInfo::isVirtualRegister(MOReg))
578           HandleVirtRegDef(MOReg, MI);
579         else if (!ReservedRegisters[MOReg])
580           HandlePhysRegDef(MOReg, MI, Defs);
581       }
582       UpdatePhysRegDefs(MI, Defs);
583     }
584
585     // Handle any virtual assignments from PHI nodes which might be at the
586     // bottom of this basic block.  We check all of our successor blocks to see
587     // if they have PHI nodes, and if so, we simulate an assignment at the end
588     // of the current block.
589     if (!PHIVarInfo[MBB->getNumber()].empty()) {
590       SmallVector<unsigned, 4>& VarInfoVec = PHIVarInfo[MBB->getNumber()];
591
592       for (SmallVector<unsigned, 4>::iterator I = VarInfoVec.begin(),
593              E = VarInfoVec.end(); I != E; ++I)
594         // Mark it alive only in the block we are representing.
595         MarkVirtRegAliveInBlock(getVarInfo(*I),MRI->getVRegDef(*I)->getParent(),
596                                 MBB);
597     }
598
599     // Finally, if the last instruction in the block is a return, make sure to
600     // mark it as using all of the live-out values in the function.
601     // Things marked both call and return are tail calls; do not do this for
602     // them.  The tail callee need not take the same registers as input
603     // that it produces as output, and there are dependencies for its input
604     // registers elsewhere.
605     if (!MBB->empty() && MBB->back().getDesc().isReturn()
606         && !MBB->back().getDesc().isCall()) {
607       MachineInstr *Ret = &MBB->back();
608
609       for (MachineRegisterInfo::liveout_iterator
610            I = MF->getRegInfo().liveout_begin(),
611            E = MF->getRegInfo().liveout_end(); I != E; ++I) {
612         assert(TargetRegisterInfo::isPhysicalRegister(*I) &&
613                "Cannot have a live-out virtual register!");
614         HandlePhysRegUse(*I, Ret);
615
616         // Add live-out registers as implicit uses.
617         if (!Ret->readsRegister(*I))
618           Ret->addOperand(MachineOperand::CreateReg(*I, false, true));
619       }
620     }
621
622     // Loop over PhysRegDef / PhysRegUse, killing any registers that are
623     // available at the end of the basic block.
624     for (unsigned i = 0; i != NumRegs; ++i)
625       if (PhysRegDef[i] || PhysRegUse[i])
626         HandlePhysRegDef(i, 0, Defs);
627
628     std::fill(PhysRegDef,  PhysRegDef  + NumRegs, (MachineInstr*)0);
629     std::fill(PhysRegUse,  PhysRegUse  + NumRegs, (MachineInstr*)0);
630   }
631
632   // Convert and transfer the dead / killed information we have gathered into
633   // VirtRegInfo onto MI's.
634   for (unsigned i = 0, e1 = VirtRegInfo.size(); i != e1; ++i)
635     for (unsigned j = 0, e2 = VirtRegInfo[i].Kills.size(); j != e2; ++j)
636       if (VirtRegInfo[i].Kills[j] ==
637           MRI->getVRegDef(i + TargetRegisterInfo::FirstVirtualRegister))
638         VirtRegInfo[i]
639           .Kills[j]->addRegisterDead(i +
640                                      TargetRegisterInfo::FirstVirtualRegister,
641                                      TRI);
642       else
643         VirtRegInfo[i]
644           .Kills[j]->addRegisterKilled(i +
645                                        TargetRegisterInfo::FirstVirtualRegister,
646                                        TRI);
647
648   // Check to make sure there are no unreachable blocks in the MC CFG for the
649   // function.  If so, it is due to a bug in the instruction selector or some
650   // other part of the code generator if this happens.
651 #ifndef NDEBUG
652   for(MachineFunction::iterator i = MF->begin(), e = MF->end(); i != e; ++i)
653     assert(Visited.count(&*i) != 0 && "unreachable basic block found");
654 #endif
655
656   delete[] PhysRegDef;
657   delete[] PhysRegUse;
658   delete[] PHIVarInfo;
659
660   return false;
661 }
662
663 /// replaceKillInstruction - Update register kill info by replacing a kill
664 /// instruction with a new one.
665 void LiveVariables::replaceKillInstruction(unsigned Reg, MachineInstr *OldMI,
666                                            MachineInstr *NewMI) {
667   VarInfo &VI = getVarInfo(Reg);
668   std::replace(VI.Kills.begin(), VI.Kills.end(), OldMI, NewMI);
669 }
670
671 /// removeVirtualRegistersKilled - Remove all killed info for the specified
672 /// instruction.
673 void LiveVariables::removeVirtualRegistersKilled(MachineInstr *MI) {
674   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
675     MachineOperand &MO = MI->getOperand(i);
676     if (MO.isReg() && MO.isKill()) {
677       MO.setIsKill(false);
678       unsigned Reg = MO.getReg();
679       if (TargetRegisterInfo::isVirtualRegister(Reg)) {
680         bool removed = getVarInfo(Reg).removeKill(MI);
681         assert(removed && "kill not in register's VarInfo?");
682         removed = true;
683       }
684     }
685   }
686 }
687
688 /// analyzePHINodes - Gather information about the PHI nodes in here. In
689 /// particular, we want to map the variable information of a virtual register
690 /// which is used in a PHI node. We map that to the BB the vreg is coming from.
691 ///
692 void LiveVariables::analyzePHINodes(const MachineFunction& Fn) {
693   for (MachineFunction::const_iterator I = Fn.begin(), E = Fn.end();
694        I != E; ++I)
695     for (MachineBasicBlock::const_iterator BBI = I->begin(), BBE = I->end();
696          BBI != BBE && BBI->isPHI(); ++BBI)
697       for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2)
698         PHIVarInfo[BBI->getOperand(i + 1).getMBB()->getNumber()]
699           .push_back(BBI->getOperand(i).getReg());
700 }
701
702 bool LiveVariables::VarInfo::isLiveIn(const MachineBasicBlock &MBB,
703                                       unsigned Reg,
704                                       MachineRegisterInfo &MRI) {
705   unsigned Num = MBB.getNumber();
706
707   // Reg is live-through.
708   if (AliveBlocks.test(Num))
709     return true;
710
711   // Registers defined in MBB cannot be live in.
712   const MachineInstr *Def = MRI.getVRegDef(Reg);
713   if (Def && Def->getParent() == &MBB)
714     return false;
715
716  // Reg was not defined in MBB, was it killed here?
717   return findKill(&MBB);
718 }
719
720 bool LiveVariables::isLiveOut(unsigned Reg, const MachineBasicBlock &MBB) {
721   LiveVariables::VarInfo &VI = getVarInfo(Reg);
722
723   // Loop over all of the successors of the basic block, checking to see if
724   // the value is either live in the block, or if it is killed in the block.
725   std::vector<MachineBasicBlock*> OpSuccBlocks;
726   for (MachineBasicBlock::const_succ_iterator SI = MBB.succ_begin(),
727          E = MBB.succ_end(); SI != E; ++SI) {
728     MachineBasicBlock *SuccMBB = *SI;
729
730     // Is it alive in this successor?
731     unsigned SuccIdx = SuccMBB->getNumber();
732     if (VI.AliveBlocks.test(SuccIdx))
733       return true;
734     OpSuccBlocks.push_back(SuccMBB);
735   }
736
737   // Check to see if this value is live because there is a use in a successor
738   // that kills it.
739   switch (OpSuccBlocks.size()) {
740   case 1: {
741     MachineBasicBlock *SuccMBB = OpSuccBlocks[0];
742     for (unsigned i = 0, e = VI.Kills.size(); i != e; ++i)
743       if (VI.Kills[i]->getParent() == SuccMBB)
744         return true;
745     break;
746   }
747   case 2: {
748     MachineBasicBlock *SuccMBB1 = OpSuccBlocks[0], *SuccMBB2 = OpSuccBlocks[1];
749     for (unsigned i = 0, e = VI.Kills.size(); i != e; ++i)
750       if (VI.Kills[i]->getParent() == SuccMBB1 ||
751           VI.Kills[i]->getParent() == SuccMBB2)
752         return true;
753     break;
754   }
755   default:
756     std::sort(OpSuccBlocks.begin(), OpSuccBlocks.end());
757     for (unsigned i = 0, e = VI.Kills.size(); i != e; ++i)
758       if (std::binary_search(OpSuccBlocks.begin(), OpSuccBlocks.end(),
759                              VI.Kills[i]->getParent()))
760         return true;
761   }
762   return false;
763 }
764
765 /// addNewBlock - Add a new basic block BB as an empty succcessor to DomBB. All
766 /// variables that are live out of DomBB will be marked as passing live through
767 /// BB.
768 void LiveVariables::addNewBlock(MachineBasicBlock *BB,
769                                 MachineBasicBlock *DomBB,
770                                 MachineBasicBlock *SuccBB) {
771   const unsigned NumNew = BB->getNumber();
772
773   // All registers used by PHI nodes in SuccBB must be live through BB.
774   for (MachineBasicBlock::const_iterator BBI = SuccBB->begin(),
775          BBE = SuccBB->end(); BBI != BBE && BBI->isPHI(); ++BBI)
776     for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2)
777       if (BBI->getOperand(i+1).getMBB() == BB)
778         getVarInfo(BBI->getOperand(i).getReg()).AliveBlocks.set(NumNew);
779
780   // Update info for all live variables
781   for (unsigned Reg = TargetRegisterInfo::FirstVirtualRegister,
782          E = MRI->getLastVirtReg()+1; Reg != E; ++Reg) {
783     VarInfo &VI = getVarInfo(Reg);
784     if (!VI.AliveBlocks.test(NumNew) && VI.isLiveIn(*SuccBB, Reg, *MRI))
785       VI.AliveBlocks.set(NumNew);
786   }
787 }