95ce2a664892b8f8b98aaf8b08c10f5c88a287a2
[oota-llvm.git] / lib / CodeGen / TailDuplication.cpp
1 //===-- TailDuplication.cpp - Duplicate blocks into predecessors' tails ---===//
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 pass duplicates basic blocks ending in unconditional branches into
11 // the tails of their predecessors.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #define DEBUG_TYPE "tailduplication"
16 #include "llvm/Function.h"
17 #include "llvm/CodeGen/Passes.h"
18 #include "llvm/CodeGen/MachineModuleInfo.h"
19 #include "llvm/CodeGen/MachineFunctionPass.h"
20 #include "llvm/CodeGen/MachineInstrBuilder.h"
21 #include "llvm/CodeGen/MachineRegisterInfo.h"
22 #include "llvm/CodeGen/MachineSSAUpdater.h"
23 #include "llvm/Target/TargetInstrInfo.h"
24 #include "llvm/Support/CommandLine.h"
25 #include "llvm/Support/Debug.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include "llvm/ADT/SmallSet.h"
29 #include "llvm/ADT/SetVector.h"
30 #include "llvm/ADT/Statistic.h"
31 using namespace llvm;
32
33 STATISTIC(NumTails     , "Number of tails duplicated");
34 STATISTIC(NumTailDups  , "Number of tail duplicated blocks");
35 STATISTIC(NumInstrDups , "Additional instructions due to tail duplication");
36 STATISTIC(NumDeadBlocks, "Number of dead blocks removed");
37 STATISTIC(NumAddedPHIs , "Number of phis added");
38
39 // Heuristic for tail duplication.
40 static cl::opt<unsigned>
41 TailDuplicateSize("tail-dup-size",
42                   cl::desc("Maximum instructions to consider tail duplicating"),
43                   cl::init(2), cl::Hidden);
44
45 static cl::opt<bool>
46 TailDupVerify("tail-dup-verify",
47               cl::desc("Verify sanity of PHI instructions during taildup"),
48               cl::init(false), cl::Hidden);
49
50 static cl::opt<unsigned>
51 TailDupLimit("tail-dup-limit", cl::init(~0U), cl::Hidden);
52
53 typedef std::vector<std::pair<MachineBasicBlock*,unsigned> > AvailableValsTy;
54
55 namespace {
56   /// TailDuplicatePass - Perform tail duplication.
57   class TailDuplicatePass : public MachineFunctionPass {
58     bool PreRegAlloc;
59     const TargetInstrInfo *TII;
60     MachineModuleInfo *MMI;
61     MachineRegisterInfo *MRI;
62
63     // SSAUpdateVRs - A list of virtual registers for which to update SSA form.
64     SmallVector<unsigned, 16> SSAUpdateVRs;
65
66     // SSAUpdateVals - For each virtual register in SSAUpdateVals keep a list of
67     // source virtual registers.
68     DenseMap<unsigned, AvailableValsTy> SSAUpdateVals;
69
70   public:
71     static char ID;
72     explicit TailDuplicatePass(bool PreRA) :
73       MachineFunctionPass(ID), PreRegAlloc(PreRA) {}
74
75     virtual bool runOnMachineFunction(MachineFunction &MF);
76     virtual const char *getPassName() const { return "Tail Duplication"; }
77
78   private:
79     void AddSSAUpdateEntry(unsigned OrigReg, unsigned NewReg,
80                            MachineBasicBlock *BB);
81     void ProcessPHI(MachineInstr *MI, MachineBasicBlock *TailBB,
82                     MachineBasicBlock *PredBB,
83                     DenseMap<unsigned, unsigned> &LocalVRMap,
84                     SmallVector<std::pair<unsigned,unsigned>, 4> &Copies,
85                     const DenseSet<unsigned> &UsedByPhi,
86                     bool Remove);
87     void DuplicateInstruction(MachineInstr *MI,
88                               MachineBasicBlock *TailBB,
89                               MachineBasicBlock *PredBB,
90                               MachineFunction &MF,
91                               DenseMap<unsigned, unsigned> &LocalVRMap,
92                               const DenseSet<unsigned> &UsedByPhi);
93     void UpdateSuccessorsPHIs(MachineBasicBlock *FromBB, bool isDead,
94                               SmallVector<MachineBasicBlock*, 8> &TDBBs,
95                               SmallSetVector<MachineBasicBlock*, 8> &Succs);
96     bool TailDuplicateBlocks(MachineFunction &MF);
97     bool shouldTailDuplicate(const MachineFunction &MF,
98                              bool IsSimple, MachineBasicBlock &TailBB);
99     bool isSimpleBB(MachineBasicBlock *TailBB);
100     bool canCompletelyDuplicateBB(MachineBasicBlock &BB);
101     bool duplicateSimpleBB(MachineBasicBlock *TailBB,
102                            SmallVector<MachineBasicBlock*, 8> &TDBBs,
103                            const DenseSet<unsigned> &RegsUsedByPhi,
104                            SmallVector<MachineInstr*, 16> &Copies);
105     bool TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
106                        SmallVector<MachineBasicBlock*, 8> &TDBBs,
107                        SmallVector<MachineInstr*, 16> &Copies);
108     void RemoveDeadBlock(MachineBasicBlock *MBB);
109   };
110
111   char TailDuplicatePass::ID = 0;
112 }
113
114 FunctionPass *llvm::createTailDuplicatePass(bool PreRegAlloc) {
115   return new TailDuplicatePass(PreRegAlloc);
116 }
117
118 bool TailDuplicatePass::runOnMachineFunction(MachineFunction &MF) {
119   TII = MF.getTarget().getInstrInfo();
120   MRI = &MF.getRegInfo();
121   MMI = getAnalysisIfAvailable<MachineModuleInfo>();
122
123   bool MadeChange = false;
124   while (TailDuplicateBlocks(MF))
125     MadeChange = true;
126
127   return MadeChange;
128 }
129
130 static void VerifyPHIs(MachineFunction &MF, bool CheckExtra) {
131   for (MachineFunction::iterator I = ++MF.begin(), E = MF.end(); I != E; ++I) {
132     MachineBasicBlock *MBB = I;
133     SmallSetVector<MachineBasicBlock*, 8> Preds(MBB->pred_begin(),
134                                                 MBB->pred_end());
135     MachineBasicBlock::iterator MI = MBB->begin();
136     while (MI != MBB->end()) {
137       if (!MI->isPHI())
138         break;
139       for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
140              PE = Preds.end(); PI != PE; ++PI) {
141         MachineBasicBlock *PredBB = *PI;
142         bool Found = false;
143         for (unsigned i = 1, e = MI->getNumOperands(); i != e; i += 2) {
144           MachineBasicBlock *PHIBB = MI->getOperand(i+1).getMBB();
145           if (PHIBB == PredBB) {
146             Found = true;
147             break;
148           }
149         }
150         if (!Found) {
151           dbgs() << "Malformed PHI in BB#" << MBB->getNumber() << ": " << *MI;
152           dbgs() << "  missing input from predecessor BB#"
153                  << PredBB->getNumber() << '\n';
154           llvm_unreachable(0);
155         }
156       }
157
158       for (unsigned i = 1, e = MI->getNumOperands(); i != e; i += 2) {
159         MachineBasicBlock *PHIBB = MI->getOperand(i+1).getMBB();
160         if (CheckExtra && !Preds.count(PHIBB)) {
161           dbgs() << "Warning: malformed PHI in BB#" << MBB->getNumber()
162                  << ": " << *MI;
163           dbgs() << "  extra input from predecessor BB#"
164                  << PHIBB->getNumber() << '\n';
165           llvm_unreachable(0);
166         }
167         if (PHIBB->getNumber() < 0) {
168           dbgs() << "Malformed PHI in BB#" << MBB->getNumber() << ": " << *MI;
169           dbgs() << "  non-existing BB#" << PHIBB->getNumber() << '\n';
170           llvm_unreachable(0);
171         }
172       }
173       ++MI;
174     }
175   }
176 }
177
178 /// TailDuplicateBlocks - Look for small blocks that are unconditionally
179 /// branched to and do not fall through. Tail-duplicate their instructions
180 /// into their predecessors to eliminate (dynamic) branches.
181 bool TailDuplicatePass::TailDuplicateBlocks(MachineFunction &MF) {
182   bool MadeChange = false;
183
184   if (PreRegAlloc && TailDupVerify) {
185     DEBUG(dbgs() << "\n*** Before tail-duplicating\n");
186     VerifyPHIs(MF, true);
187   }
188
189   SmallVector<MachineInstr*, 8> NewPHIs;
190   MachineSSAUpdater SSAUpdate(MF, &NewPHIs);
191
192   for (MachineFunction::iterator I = ++MF.begin(), E = MF.end(); I != E; ) {
193     MachineBasicBlock *MBB = I++;
194
195     if (NumTails == TailDupLimit)
196       break;
197
198     // Save the successors list.
199     SmallSetVector<MachineBasicBlock*, 8> Succs(MBB->succ_begin(),
200                                                 MBB->succ_end());
201
202     SmallVector<MachineBasicBlock*, 8> TDBBs;
203     SmallVector<MachineInstr*, 16> Copies;
204     if (!TailDuplicate(MBB, MF, TDBBs, Copies))
205       continue;
206
207     ++NumTails;
208
209     // TailBB's immediate successors are now successors of those predecessors
210     // which duplicated TailBB. Add the predecessors as sources to the PHI
211     // instructions.
212     bool isDead = MBB->pred_empty() && !MBB->hasAddressTaken();
213     if (PreRegAlloc)
214       UpdateSuccessorsPHIs(MBB, isDead, TDBBs, Succs);
215
216     // If it is dead, remove it.
217     if (isDead) {
218       NumInstrDups -= MBB->size();
219       RemoveDeadBlock(MBB);
220       ++NumDeadBlocks;
221     }
222
223     // Update SSA form.
224     if (!SSAUpdateVRs.empty()) {
225       NewPHIs.clear();
226       for (unsigned i = 0, e = SSAUpdateVRs.size(); i != e; ++i) {
227         unsigned VReg = SSAUpdateVRs[i];
228         SSAUpdate.Initialize(VReg);
229
230         // If the original definition is still around, add it as an available
231         // value.
232         MachineInstr *DefMI = MRI->getVRegDef(VReg);
233         MachineBasicBlock *DefBB = 0;
234         if (DefMI) {
235           DefBB = DefMI->getParent();
236           SSAUpdate.AddAvailableValue(DefBB, VReg);
237         }
238
239         // Add the new vregs as available values.
240         DenseMap<unsigned, AvailableValsTy>::iterator LI =
241           SSAUpdateVals.find(VReg);  
242         for (unsigned j = 0, ee = LI->second.size(); j != ee; ++j) {
243           MachineBasicBlock *SrcBB = LI->second[j].first;
244           unsigned SrcReg = LI->second[j].second;
245           SSAUpdate.AddAvailableValue(SrcBB, SrcReg);
246         }
247
248         // Rewrite uses that are outside of the original def's block.
249         MachineRegisterInfo::use_iterator UI = MRI->use_begin(VReg);
250         while (UI != MRI->use_end()) {
251           MachineOperand &UseMO = UI.getOperand();
252           MachineInstr *UseMI = &*UI;
253           ++UI;
254           if (UseMI->isDebugValue()) {
255             // SSAUpdate can replace the use with an undef. That creates
256             // a debug instruction that is a kill.
257             // FIXME: Should it SSAUpdate job to delete debug instructions
258             // instead of replacing the use with undef?
259             UseMI->eraseFromParent();
260             continue;
261           }
262           if (UseMI->getParent() == DefBB && !UseMI->isPHI())
263             continue;
264           SSAUpdate.RewriteUse(UseMO);
265         }
266       }
267
268       SSAUpdateVRs.clear();
269       SSAUpdateVals.clear();
270     }
271
272     // Eliminate some of the copies inserted by tail duplication to maintain
273     // SSA form.
274     for (unsigned i = 0, e = Copies.size(); i != e; ++i) {
275       MachineInstr *Copy = Copies[i];
276       if (!Copy->isCopy())
277         continue;
278       unsigned Dst = Copy->getOperand(0).getReg();
279       unsigned Src = Copy->getOperand(1).getReg();
280       MachineRegisterInfo::use_iterator UI = MRI->use_begin(Src);
281       if (++UI == MRI->use_end()) {
282         // Copy is the only use. Do trivial copy propagation here.
283         MRI->replaceRegWith(Dst, Src);
284         Copy->eraseFromParent();
285       }
286     }
287
288     if (PreRegAlloc && TailDupVerify)
289       VerifyPHIs(MF, false);
290     MadeChange = true;
291
292     if (NewPHIs.size())
293       NumAddedPHIs += NewPHIs.size();
294   }
295
296
297   return MadeChange;
298 }
299
300 static bool isDefLiveOut(unsigned Reg, MachineBasicBlock *BB,
301                          const MachineRegisterInfo *MRI) {
302   for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(Reg),
303          UE = MRI->use_end(); UI != UE; ++UI) {
304     MachineInstr *UseMI = &*UI;
305     if (UseMI->isDebugValue())
306       continue;
307     if (UseMI->getParent() != BB)
308       return true;
309   }
310   return false;
311 }
312
313 static unsigned getPHISrcRegOpIdx(MachineInstr *MI, MachineBasicBlock *SrcBB) {
314   for (unsigned i = 1, e = MI->getNumOperands(); i != e; i += 2)
315     if (MI->getOperand(i+1).getMBB() == SrcBB)
316       return i;
317   return 0;
318 }
319
320
321 // Remember which registers are used by phis in this block. This is
322 // used to determine which registers are liveout while modifying the
323 // block (which is why we need to copy the information).
324 static void getRegsUsedByPHIs(const MachineBasicBlock &BB,
325                               DenseSet<unsigned> *UsedByPhi) {
326   for(MachineBasicBlock::const_iterator I = BB.begin(), E = BB.end();
327       I != E; ++I) {
328     const MachineInstr &MI = *I;
329     if (!MI.isPHI())
330       break;
331     for (unsigned i = 1, e = MI.getNumOperands(); i != e; i += 2) {
332       unsigned SrcReg = MI.getOperand(i).getReg();
333       UsedByPhi->insert(SrcReg);
334     }
335   }
336 }
337
338 /// AddSSAUpdateEntry - Add a definition and source virtual registers pair for
339 /// SSA update.
340 void TailDuplicatePass::AddSSAUpdateEntry(unsigned OrigReg, unsigned NewReg,
341                                           MachineBasicBlock *BB) {
342   DenseMap<unsigned, AvailableValsTy>::iterator LI= SSAUpdateVals.find(OrigReg);
343   if (LI != SSAUpdateVals.end())
344     LI->second.push_back(std::make_pair(BB, NewReg));
345   else {
346     AvailableValsTy Vals;
347     Vals.push_back(std::make_pair(BB, NewReg));
348     SSAUpdateVals.insert(std::make_pair(OrigReg, Vals));
349     SSAUpdateVRs.push_back(OrigReg);
350   }
351 }
352
353 /// ProcessPHI - Process PHI node in TailBB by turning it into a copy in PredBB.
354 /// Remember the source register that's contributed by PredBB and update SSA
355 /// update map.
356 void TailDuplicatePass::ProcessPHI(MachineInstr *MI,
357                                    MachineBasicBlock *TailBB,
358                                    MachineBasicBlock *PredBB,
359                                    DenseMap<unsigned, unsigned> &LocalVRMap,
360                            SmallVector<std::pair<unsigned,unsigned>, 4> &Copies,
361                                    const DenseSet<unsigned> &RegsUsedByPhi,
362                                    bool Remove) {
363   unsigned DefReg = MI->getOperand(0).getReg();
364   unsigned SrcOpIdx = getPHISrcRegOpIdx(MI, PredBB);
365   assert(SrcOpIdx && "Unable to find matching PHI source?");
366   unsigned SrcReg = MI->getOperand(SrcOpIdx).getReg();
367   const TargetRegisterClass *RC = MRI->getRegClass(DefReg);
368   LocalVRMap.insert(std::make_pair(DefReg, SrcReg));
369
370   // Insert a copy from source to the end of the block. The def register is the
371   // available value liveout of the block.
372   unsigned NewDef = MRI->createVirtualRegister(RC);
373   Copies.push_back(std::make_pair(NewDef, SrcReg));
374   if (isDefLiveOut(DefReg, TailBB, MRI) || RegsUsedByPhi.count(DefReg))
375     AddSSAUpdateEntry(DefReg, NewDef, PredBB);
376
377   if (!Remove)
378     return;
379
380   // Remove PredBB from the PHI node.
381   MI->RemoveOperand(SrcOpIdx+1);
382   MI->RemoveOperand(SrcOpIdx);
383   if (MI->getNumOperands() == 1)
384     MI->eraseFromParent();
385 }
386
387 /// DuplicateInstruction - Duplicate a TailBB instruction to PredBB and update
388 /// the source operands due to earlier PHI translation.
389 void TailDuplicatePass::DuplicateInstruction(MachineInstr *MI,
390                                      MachineBasicBlock *TailBB,
391                                      MachineBasicBlock *PredBB,
392                                      MachineFunction &MF,
393                                      DenseMap<unsigned, unsigned> &LocalVRMap,
394                                      const DenseSet<unsigned> &UsedByPhi) {
395   MachineInstr *NewMI = TII->duplicate(MI, MF);
396   for (unsigned i = 0, e = NewMI->getNumOperands(); i != e; ++i) {
397     MachineOperand &MO = NewMI->getOperand(i);
398     if (!MO.isReg())
399       continue;
400     unsigned Reg = MO.getReg();
401     if (!TargetRegisterInfo::isVirtualRegister(Reg))
402       continue;
403     if (MO.isDef()) {
404       const TargetRegisterClass *RC = MRI->getRegClass(Reg);
405       unsigned NewReg = MRI->createVirtualRegister(RC);
406       MO.setReg(NewReg);
407       LocalVRMap.insert(std::make_pair(Reg, NewReg));
408       if (isDefLiveOut(Reg, TailBB, MRI) || UsedByPhi.count(Reg))
409         AddSSAUpdateEntry(Reg, NewReg, PredBB);
410     } else {
411       DenseMap<unsigned, unsigned>::iterator VI = LocalVRMap.find(Reg);
412       if (VI != LocalVRMap.end())
413         MO.setReg(VI->second);
414     }
415   }
416   PredBB->insert(PredBB->end(), NewMI);
417 }
418
419 /// UpdateSuccessorsPHIs - After FromBB is tail duplicated into its predecessor
420 /// blocks, the successors have gained new predecessors. Update the PHI
421 /// instructions in them accordingly.
422 void
423 TailDuplicatePass::UpdateSuccessorsPHIs(MachineBasicBlock *FromBB, bool isDead,
424                                   SmallVector<MachineBasicBlock*, 8> &TDBBs,
425                                   SmallSetVector<MachineBasicBlock*,8> &Succs) {
426   for (SmallSetVector<MachineBasicBlock*, 8>::iterator SI = Succs.begin(),
427          SE = Succs.end(); SI != SE; ++SI) {
428     MachineBasicBlock *SuccBB = *SI;
429     for (MachineBasicBlock::iterator II = SuccBB->begin(), EE = SuccBB->end();
430          II != EE; ++II) {
431       if (!II->isPHI())
432         break;
433       unsigned Idx = 0;
434       for (unsigned i = 1, e = II->getNumOperands(); i != e; i += 2) {
435         MachineOperand &MO = II->getOperand(i+1);
436         if (MO.getMBB() == FromBB) {
437           Idx = i;
438           break;
439         }
440       }
441
442       assert(Idx != 0);
443       MachineOperand &MO0 = II->getOperand(Idx);
444       unsigned Reg = MO0.getReg();
445       if (isDead) {
446         // Folded into the previous BB.
447         // There could be duplicate phi source entries. FIXME: Should sdisel
448         // or earlier pass fixed this?
449         for (unsigned i = II->getNumOperands()-2; i != Idx; i -= 2) {
450           MachineOperand &MO = II->getOperand(i+1);
451           if (MO.getMBB() == FromBB) {
452             II->RemoveOperand(i+1);
453             II->RemoveOperand(i);
454           }
455         }
456       } else
457         Idx = 0;
458
459       // If Idx is set, the operands at Idx and Idx+1 must be removed.
460       // We reuse the location to avoid expensive RemoveOperand calls.
461
462       DenseMap<unsigned,AvailableValsTy>::iterator LI=SSAUpdateVals.find(Reg);
463       if (LI != SSAUpdateVals.end()) {
464         // This register is defined in the tail block.
465         for (unsigned j = 0, ee = LI->second.size(); j != ee; ++j) {
466           MachineBasicBlock *SrcBB = LI->second[j].first;
467           // If we didn't duplicate a bb into a particular predecessor, we
468           // might still have added an entry to SSAUpdateVals to correcly
469           // recompute SSA. If that case, avoid adding a dummy extra argument
470           // this PHI.
471           if (!SrcBB->isSuccessor(SuccBB))
472             continue;
473
474           unsigned SrcReg = LI->second[j].second;
475           if (Idx != 0) {
476             II->getOperand(Idx).setReg(SrcReg);
477             II->getOperand(Idx+1).setMBB(SrcBB);
478             Idx = 0;
479           } else {
480             II->addOperand(MachineOperand::CreateReg(SrcReg, false));
481             II->addOperand(MachineOperand::CreateMBB(SrcBB));
482           }
483         }
484       } else {
485         // Live in tail block, must also be live in predecessors.
486         for (unsigned j = 0, ee = TDBBs.size(); j != ee; ++j) {
487           MachineBasicBlock *SrcBB = TDBBs[j];
488           if (Idx != 0) {
489             II->getOperand(Idx).setReg(Reg);
490             II->getOperand(Idx+1).setMBB(SrcBB);
491             Idx = 0;
492           } else {
493             II->addOperand(MachineOperand::CreateReg(Reg, false));
494             II->addOperand(MachineOperand::CreateMBB(SrcBB));
495           }
496         }
497       }
498       if (Idx != 0) {
499         II->RemoveOperand(Idx+1);
500         II->RemoveOperand(Idx);
501       }
502     }
503   }
504 }
505
506 /// shouldTailDuplicate - Determine if it is profitable to duplicate this block.
507 bool
508 TailDuplicatePass::shouldTailDuplicate(const MachineFunction &MF,
509                                        bool IsSimple,
510                                        MachineBasicBlock &TailBB) {
511   // Only duplicate blocks that end with unconditional branches.
512   if (TailBB.canFallThrough())
513     return false;
514
515   // Don't try to tail-duplicate single-block loops.
516   if (TailBB.isSuccessor(&TailBB))
517     return false;
518
519   // Set the limit on the cost to duplicate. When optimizing for size,
520   // duplicate only one, because one branch instruction can be eliminated to
521   // compensate for the duplication.
522   unsigned MaxDuplicateCount;
523   if (TailDuplicateSize.getNumOccurrences() == 0 &&
524       MF.getFunction()->hasFnAttr(Attribute::OptimizeForSize))
525     MaxDuplicateCount = 1;
526   else
527     MaxDuplicateCount = TailDuplicateSize;
528
529   // If the target has hardware branch prediction that can handle indirect
530   // branches, duplicating them can often make them predictable when there
531   // are common paths through the code.  The limit needs to be high enough
532   // to allow undoing the effects of tail merging and other optimizations
533   // that rearrange the predecessors of the indirect branch.
534
535   bool hasIndirectBR = false;
536   if (PreRegAlloc && !TailBB.empty()) {
537     const MCInstrDesc &MCID = TailBB.back().getDesc();
538     if (MCID.isIndirectBranch()) {
539       MaxDuplicateCount = 20;
540       hasIndirectBR = true;
541     }
542   }
543
544   // Check the instructions in the block to determine whether tail-duplication
545   // is invalid or unlikely to be profitable.
546   unsigned InstrCount = 0;
547   for (MachineBasicBlock::const_iterator I = TailBB.begin(); I != TailBB.end();
548        ++I) {
549     // Non-duplicable things shouldn't be tail-duplicated.
550     if (I->getDesc().isNotDuplicable())
551       return false;
552
553     // Do not duplicate 'return' instructions if this is a pre-regalloc run.
554     // A return may expand into a lot more instructions (e.g. reload of callee
555     // saved registers) after PEI.
556     if (PreRegAlloc && I->getDesc().isReturn())
557       return false;
558
559     // Avoid duplicating calls before register allocation. Calls presents a
560     // barrier to register allocation so duplicating them may end up increasing
561     // spills.
562     if (PreRegAlloc && I->getDesc().isCall())
563       return false;
564
565     if (!I->isPHI() && !I->isDebugValue())
566       InstrCount += 1;
567
568     if (InstrCount > MaxDuplicateCount)
569       return false;
570   }
571
572   if (hasIndirectBR)
573     return true;
574
575   if (IsSimple)
576     return true;
577
578   if (!PreRegAlloc)
579     return true;
580
581   return canCompletelyDuplicateBB(TailBB);
582 }
583
584 /// isSimpleBB - True if this BB has only one unconditional jump.
585 bool
586 TailDuplicatePass::isSimpleBB(MachineBasicBlock *TailBB) {
587   if (TailBB->succ_size() != 1)
588     return false;
589   if (TailBB->pred_empty())
590     return false;
591   MachineBasicBlock::iterator I = TailBB->begin();
592   MachineBasicBlock::iterator E = TailBB->end();
593   while (I != E && I->isDebugValue())
594     ++I;
595   if (I == E)
596     return true;
597   return I->getDesc().isUnconditionalBranch();
598 }
599
600 static bool
601 bothUsedInPHI(const MachineBasicBlock &A,
602               SmallPtrSet<MachineBasicBlock*, 8> SuccsB) {
603   for (MachineBasicBlock::const_succ_iterator SI = A.succ_begin(),
604          SE = A.succ_end(); SI != SE; ++SI) {
605     MachineBasicBlock *BB = *SI;
606     if (SuccsB.count(BB) && !BB->empty() && BB->begin()->isPHI())
607       return true;
608   }
609
610   return false;
611 }
612
613 bool
614 TailDuplicatePass::canCompletelyDuplicateBB(MachineBasicBlock &BB) {
615   SmallPtrSet<MachineBasicBlock*, 8> Succs(BB.succ_begin(), BB.succ_end());
616
617   for (MachineBasicBlock::pred_iterator PI = BB.pred_begin(),
618        PE = BB.pred_end(); PI != PE; ++PI) {
619     MachineBasicBlock *PredBB = *PI;
620
621     if (PredBB->succ_size() > 1)
622       return false;
623
624     MachineBasicBlock *PredTBB = NULL, *PredFBB = NULL;
625     SmallVector<MachineOperand, 4> PredCond;
626     if (TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true))
627       return false;
628
629     if (!PredCond.empty())
630       return false;
631   }
632   return true;
633 }
634
635 bool
636 TailDuplicatePass::duplicateSimpleBB(MachineBasicBlock *TailBB,
637                                      SmallVector<MachineBasicBlock*, 8> &TDBBs,
638                                      const DenseSet<unsigned> &UsedByPhi,
639                                      SmallVector<MachineInstr*, 16> &Copies) {
640   SmallPtrSet<MachineBasicBlock*, 8> Succs(TailBB->succ_begin(),
641                                            TailBB->succ_end());
642   SmallVector<MachineBasicBlock*, 8> Preds(TailBB->pred_begin(),
643                                            TailBB->pred_end());
644   bool Changed = false;
645   for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
646        PE = Preds.end(); PI != PE; ++PI) {
647     MachineBasicBlock *PredBB = *PI;
648
649     if (PredBB->getLandingPadSuccessor())
650       continue;
651
652     if (bothUsedInPHI(*PredBB, Succs))
653       continue;
654
655     MachineBasicBlock *PredTBB = NULL, *PredFBB = NULL;
656     SmallVector<MachineOperand, 4> PredCond;
657     if (TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true))
658       continue;
659
660     Changed = true;
661     DEBUG(dbgs() << "\nTail-duplicating into PredBB: " << *PredBB
662                  << "From simple Succ: " << *TailBB);
663
664     MachineBasicBlock *NewTarget = *TailBB->succ_begin();
665     MachineBasicBlock *NextBB = llvm::next(MachineFunction::iterator(PredBB));
666
667     // Make PredFBB explicit.
668     if (PredCond.empty())
669       PredFBB = PredTBB;
670
671     // Make fall through explicit.
672     if (!PredTBB)
673       PredTBB = NextBB;
674     if (!PredFBB)
675       PredFBB = NextBB;
676
677     // Redirect
678     if (PredFBB == TailBB)
679       PredFBB = NewTarget;
680     if (PredTBB == TailBB)
681       PredTBB = NewTarget;
682
683     // Make the branch unconditional if possible
684     if (PredTBB == PredFBB) {
685       PredCond.clear();
686       PredFBB = NULL;
687     }
688
689     // Avoid adding fall through branches.
690     if (PredFBB == NextBB)
691       PredFBB = NULL;
692     if (PredTBB == NextBB && PredFBB == NULL)
693       PredTBB = NULL;
694
695     TII->RemoveBranch(*PredBB);
696
697     if (PredTBB)
698       TII->InsertBranch(*PredBB, PredTBB, PredFBB, PredCond, DebugLoc());
699
700     PredBB->removeSuccessor(TailBB);
701     unsigned NumSuccessors = PredBB->succ_size();
702     assert(NumSuccessors <= 1);
703     if (NumSuccessors == 0 || *PredBB->succ_begin() != NewTarget)
704       PredBB->addSuccessor(NewTarget);
705
706     TDBBs.push_back(PredBB);
707   }
708   return Changed;
709 }
710
711 /// TailDuplicate - If it is profitable, duplicate TailBB's contents in each
712 /// of its predecessors.
713 bool
714 TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
715                                  SmallVector<MachineBasicBlock*, 8> &TDBBs,
716                                  SmallVector<MachineInstr*, 16> &Copies) {
717   bool IsSimple = isSimpleBB(TailBB);
718
719   if (!shouldTailDuplicate(MF, IsSimple, *TailBB))
720     return false;
721
722   DEBUG(dbgs() << "\n*** Tail-duplicating BB#" << TailBB->getNumber() << '\n');
723
724   DenseSet<unsigned> UsedByPhi;
725   getRegsUsedByPHIs(*TailBB, &UsedByPhi);
726
727   if (IsSimple)
728     return duplicateSimpleBB(TailBB, TDBBs, UsedByPhi, Copies);
729
730   // Iterate through all the unique predecessors and tail-duplicate this
731   // block into them, if possible. Copying the list ahead of time also
732   // avoids trouble with the predecessor list reallocating.
733   bool Changed = false;
734   SmallSetVector<MachineBasicBlock*, 8> Preds(TailBB->pred_begin(),
735                                               TailBB->pred_end());
736   for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
737        PE = Preds.end(); PI != PE; ++PI) {
738     MachineBasicBlock *PredBB = *PI;
739
740     assert(TailBB != PredBB &&
741            "Single-block loop should have been rejected earlier!");
742     // EH edges are ignored by AnalyzeBranch.
743     if (PredBB->succ_size() > 1)
744       continue;
745
746     MachineBasicBlock *PredTBB, *PredFBB;
747     SmallVector<MachineOperand, 4> PredCond;
748     if (TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true))
749       continue;
750     if (!PredCond.empty())
751       continue;
752     // Don't duplicate into a fall-through predecessor (at least for now).
753     if (PredBB->isLayoutSuccessor(TailBB) && PredBB->canFallThrough())
754       continue;
755
756     DEBUG(dbgs() << "\nTail-duplicating into PredBB: " << *PredBB
757                  << "From Succ: " << *TailBB);
758
759     TDBBs.push_back(PredBB);
760
761     // Remove PredBB's unconditional branch.
762     TII->RemoveBranch(*PredBB);
763
764     // Clone the contents of TailBB into PredBB.
765     DenseMap<unsigned, unsigned> LocalVRMap;
766     SmallVector<std::pair<unsigned,unsigned>, 4> CopyInfos;
767     MachineBasicBlock::iterator I = TailBB->begin();
768     while (I != TailBB->end()) {
769       MachineInstr *MI = &*I;
770       ++I;
771       if (MI->isPHI()) {
772         // Replace the uses of the def of the PHI with the register coming
773         // from PredBB.
774         ProcessPHI(MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, true);
775       } else {
776         // Replace def of virtual registers with new registers, and update
777         // uses with PHI source register or the new registers.
778         DuplicateInstruction(MI, TailBB, PredBB, MF, LocalVRMap, UsedByPhi);
779       }
780     }
781     MachineBasicBlock::iterator Loc = PredBB->getFirstTerminator();
782     for (unsigned i = 0, e = CopyInfos.size(); i != e; ++i) {
783       Copies.push_back(BuildMI(*PredBB, Loc, DebugLoc(),
784                                TII->get(TargetOpcode::COPY),
785                                CopyInfos[i].first).addReg(CopyInfos[i].second));
786     }
787
788     // Simplify
789     TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true);
790
791     NumInstrDups += TailBB->size() - 1; // subtract one for removed branch
792
793     // Update the CFG.
794     PredBB->removeSuccessor(PredBB->succ_begin());
795     assert(PredBB->succ_empty() &&
796            "TailDuplicate called on block with multiple successors!");
797     for (MachineBasicBlock::succ_iterator I = TailBB->succ_begin(),
798            E = TailBB->succ_end(); I != E; ++I)
799       PredBB->addSuccessor(*I);
800
801     Changed = true;
802     ++NumTailDups;
803   }
804
805   // If TailBB was duplicated into all its predecessors except for the prior
806   // block, which falls through unconditionally, move the contents of this
807   // block into the prior block.
808   MachineBasicBlock *PrevBB = prior(MachineFunction::iterator(TailBB));
809   MachineBasicBlock *PriorTBB = 0, *PriorFBB = 0;
810   SmallVector<MachineOperand, 4> PriorCond;
811   // This has to check PrevBB->succ_size() because EH edges are ignored by
812   // AnalyzeBranch.
813   if (PrevBB->succ_size() == 1 && 
814       !TII->AnalyzeBranch(*PrevBB, PriorTBB, PriorFBB, PriorCond, true) &&
815       PriorCond.empty() && !PriorTBB && TailBB->pred_size() == 1 &&
816       !TailBB->hasAddressTaken()) {
817     DEBUG(dbgs() << "\nMerging into block: " << *PrevBB
818           << "From MBB: " << *TailBB);
819     if (PreRegAlloc) {
820       DenseMap<unsigned, unsigned> LocalVRMap;
821       SmallVector<std::pair<unsigned,unsigned>, 4> CopyInfos;
822       MachineBasicBlock::iterator I = TailBB->begin();
823       // Process PHI instructions first.
824       while (I != TailBB->end() && I->isPHI()) {
825         // Replace the uses of the def of the PHI with the register coming
826         // from PredBB.
827         MachineInstr *MI = &*I++;
828         ProcessPHI(MI, TailBB, PrevBB, LocalVRMap, CopyInfos, UsedByPhi, true);
829         if (MI->getParent())
830           MI->eraseFromParent();
831       }
832
833       // Now copy the non-PHI instructions.
834       while (I != TailBB->end()) {
835         // Replace def of virtual registers with new registers, and update
836         // uses with PHI source register or the new registers.
837         MachineInstr *MI = &*I++;
838         DuplicateInstruction(MI, TailBB, PrevBB, MF, LocalVRMap, UsedByPhi);
839         MI->eraseFromParent();
840       }
841       MachineBasicBlock::iterator Loc = PrevBB->getFirstTerminator();
842       for (unsigned i = 0, e = CopyInfos.size(); i != e; ++i) {
843         Copies.push_back(BuildMI(*PrevBB, Loc, DebugLoc(),
844                                  TII->get(TargetOpcode::COPY),
845                                  CopyInfos[i].first)
846                            .addReg(CopyInfos[i].second));
847       }
848     } else {
849       // No PHIs to worry about, just splice the instructions over.
850       PrevBB->splice(PrevBB->end(), TailBB, TailBB->begin(), TailBB->end());
851     }
852     PrevBB->removeSuccessor(PrevBB->succ_begin());
853     assert(PrevBB->succ_empty());
854     PrevBB->transferSuccessors(TailBB);
855     TDBBs.push_back(PrevBB);
856     Changed = true;
857   }
858
859   // If this is after register allocation, there are no phis to fix.
860   if (!PreRegAlloc)
861     return Changed;
862
863   // If we made no changes so far, we are safe.
864   if (!Changed)
865     return Changed;
866
867
868   // Handle the nasty case in that we duplicated a block that is part of a loop
869   // into some but not all of its predecessors. For example:
870   //    1 -> 2 <-> 3                 |
871   //          \                      |
872   //           \---> rest            |
873   // if we duplicate 2 into 1 but not into 3, we end up with
874   // 12 -> 3 <-> 2 -> rest           |
875   //   \             /               |
876   //    \----->-----/                |
877   // If there was a "var = phi(1, 3)" in 2, it has to be ultimately replaced
878   // with a phi in 3 (which now dominates 2).
879   // What we do here is introduce a copy in 3 of the register defined by the
880   // phi, just like when we are duplicating 2 into 3, but we don't copy any
881   // real instructions or remove the 3 -> 2 edge from the phi in 2.
882   for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
883        PE = Preds.end(); PI != PE; ++PI) {
884     MachineBasicBlock *PredBB = *PI;
885     if (std::find(TDBBs.begin(), TDBBs.end(), PredBB) != TDBBs.end())
886       continue;
887
888     // EH edges
889     if (PredBB->succ_size() != 1)
890       continue;
891
892     DenseMap<unsigned, unsigned> LocalVRMap;
893     SmallVector<std::pair<unsigned,unsigned>, 4> CopyInfos;
894     MachineBasicBlock::iterator I = TailBB->begin();
895     // Process PHI instructions first.
896     while (I != TailBB->end() && I->isPHI()) {
897       // Replace the uses of the def of the PHI with the register coming
898       // from PredBB.
899       MachineInstr *MI = &*I++;
900       ProcessPHI(MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, false);
901     }
902     MachineBasicBlock::iterator Loc = PredBB->getFirstTerminator();
903     for (unsigned i = 0, e = CopyInfos.size(); i != e; ++i) {
904       Copies.push_back(BuildMI(*PredBB, Loc, DebugLoc(),
905                                TII->get(TargetOpcode::COPY),
906                                CopyInfos[i].first).addReg(CopyInfos[i].second));
907     }
908   }
909
910   return Changed;
911 }
912
913 /// RemoveDeadBlock - Remove the specified dead machine basic block from the
914 /// function, updating the CFG.
915 void TailDuplicatePass::RemoveDeadBlock(MachineBasicBlock *MBB) {
916   assert(MBB->pred_empty() && "MBB must be dead!");
917   DEBUG(dbgs() << "\nRemoving MBB: " << *MBB);
918
919   // Remove all successors.
920   while (!MBB->succ_empty())
921     MBB->removeSuccessor(MBB->succ_end()-1);
922
923   // Remove the block.
924   MBB->eraseFromParent();
925 }