BranchFolding.cpp revision d904455c24c3f96288e950109730e5f3c6e6009f
1//===-- BranchFolding.cpp - Fold machine code branch instructions ---------===//
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 forwards branches to unconditional branches to make them branch
11// directly to the target block.  This pass often results in dead MBB's, which
12// it then removes.
13//
14// Note that this pass must be run after register allocation, it cannot handle
15// SSA form.
16//
17//===----------------------------------------------------------------------===//
18
19#define DEBUG_TYPE "branchfolding"
20#include "BranchFolding.h"
21#include "llvm/Function.h"
22#include "llvm/CodeGen/Passes.h"
23#include "llvm/CodeGen/MachineModuleInfo.h"
24#include "llvm/CodeGen/MachineFunctionPass.h"
25#include "llvm/CodeGen/MachineJumpTableInfo.h"
26#include "llvm/CodeGen/RegisterScavenging.h"
27#include "llvm/Target/TargetInstrInfo.h"
28#include "llvm/Target/TargetMachine.h"
29#include "llvm/Target/TargetRegisterInfo.h"
30#include "llvm/Support/CommandLine.h"
31#include "llvm/Support/Debug.h"
32#include "llvm/Support/ErrorHandling.h"
33#include "llvm/Support/raw_ostream.h"
34#include "llvm/ADT/SmallSet.h"
35#include "llvm/ADT/SetVector.h"
36#include "llvm/ADT/Statistic.h"
37#include "llvm/ADT/STLExtras.h"
38#include <algorithm>
39using namespace llvm;
40
41STATISTIC(NumDeadBlocks, "Number of dead blocks removed");
42STATISTIC(NumBranchOpts, "Number of branches optimized");
43STATISTIC(NumTailMerge , "Number of block tails merged");
44static cl::opt<cl::boolOrDefault> FlagEnableTailMerge("enable-tail-merge",
45                              cl::init(cl::BOU_UNSET), cl::Hidden);
46// Throttle for huge numbers of predecessors (compile speed problems)
47static cl::opt<unsigned>
48TailMergeThreshold("tail-merge-threshold",
49          cl::desc("Max number of predecessors to consider tail merging"),
50          cl::init(150), cl::Hidden);
51
52// Heuristic for tail merging (and, inversely, tail duplication).
53// TODO: This should be replaced with a target query.
54static cl::opt<unsigned>
55TailMergeSize("tail-merge-size",
56          cl::desc("Min number of instructions to consider tail merging"),
57                              cl::init(3), cl::Hidden);
58
59namespace {
60  /// BranchFolderPass - Wrap branch folder in a machine function pass.
61  class BranchFolderPass : public MachineFunctionPass,
62                           public BranchFolder {
63  public:
64    static char ID;
65    explicit BranchFolderPass(bool defaultEnableTailMerge)
66      : MachineFunctionPass(&ID), BranchFolder(defaultEnableTailMerge) {}
67
68    virtual bool runOnMachineFunction(MachineFunction &MF);
69    virtual const char *getPassName() const { return "Control Flow Optimizer"; }
70  };
71}
72
73char BranchFolderPass::ID = 0;
74
75FunctionPass *llvm::createBranchFoldingPass(bool DefaultEnableTailMerge) {
76  return new BranchFolderPass(DefaultEnableTailMerge);
77}
78
79bool BranchFolderPass::runOnMachineFunction(MachineFunction &MF) {
80  return OptimizeFunction(MF,
81                          MF.getTarget().getInstrInfo(),
82                          MF.getTarget().getRegisterInfo(),
83                          getAnalysisIfAvailable<MachineModuleInfo>());
84}
85
86
87BranchFolder::BranchFolder(bool defaultEnableTailMerge) {
88  switch (FlagEnableTailMerge) {
89  case cl::BOU_UNSET: EnableTailMerge = defaultEnableTailMerge; break;
90  case cl::BOU_TRUE: EnableTailMerge = true; break;
91  case cl::BOU_FALSE: EnableTailMerge = false; break;
92  }
93}
94
95/// RemoveDeadBlock - Remove the specified dead machine basic block from the
96/// function, updating the CFG.
97void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) {
98  assert(MBB->pred_empty() && "MBB must be dead!");
99  DEBUG(errs() << "\nRemoving MBB: " << *MBB);
100
101  MachineFunction *MF = MBB->getParent();
102  // drop all successors.
103  while (!MBB->succ_empty())
104    MBB->removeSuccessor(MBB->succ_end()-1);
105
106  // If there are any labels in the basic block, unregister them from
107  // MachineModuleInfo.
108  if (MMI && !MBB->empty()) {
109    for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
110         I != E; ++I) {
111      if (I->isLabel())
112        // The label ID # is always operand #0, an immediate.
113        MMI->InvalidateLabel(I->getOperand(0).getImm());
114    }
115  }
116
117  // Remove the block.
118  MF->erase(MBB);
119}
120
121/// OptimizeImpDefsBlock - If a basic block is just a bunch of implicit_def
122/// followed by terminators, and if the implicitly defined registers are not
123/// used by the terminators, remove those implicit_def's. e.g.
124/// BB1:
125///   r0 = implicit_def
126///   r1 = implicit_def
127///   br
128/// This block can be optimized away later if the implicit instructions are
129/// removed.
130bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) {
131  SmallSet<unsigned, 4> ImpDefRegs;
132  MachineBasicBlock::iterator I = MBB->begin();
133  while (I != MBB->end()) {
134    if (I->getOpcode() != TargetInstrInfo::IMPLICIT_DEF)
135      break;
136    unsigned Reg = I->getOperand(0).getReg();
137    ImpDefRegs.insert(Reg);
138    for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
139         unsigned SubReg = *SubRegs; ++SubRegs)
140      ImpDefRegs.insert(SubReg);
141    ++I;
142  }
143  if (ImpDefRegs.empty())
144    return false;
145
146  MachineBasicBlock::iterator FirstTerm = I;
147  while (I != MBB->end()) {
148    if (!TII->isUnpredicatedTerminator(I))
149      return false;
150    // See if it uses any of the implicitly defined registers.
151    for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
152      MachineOperand &MO = I->getOperand(i);
153      if (!MO.isReg() || !MO.isUse())
154        continue;
155      unsigned Reg = MO.getReg();
156      if (ImpDefRegs.count(Reg))
157        return false;
158    }
159    ++I;
160  }
161
162  I = MBB->begin();
163  while (I != FirstTerm) {
164    MachineInstr *ImpDefMI = &*I;
165    ++I;
166    MBB->erase(ImpDefMI);
167  }
168
169  return true;
170}
171
172/// OptimizeFunction - Perhaps branch folding, tail merging and other
173/// CFG optimizations on the given function.
174bool BranchFolder::OptimizeFunction(MachineFunction &MF,
175                                    const TargetInstrInfo *tii,
176                                    const TargetRegisterInfo *tri,
177                                    MachineModuleInfo *mmi) {
178  if (!tii) return false;
179
180  TII = tii;
181  TRI = tri;
182  MMI = mmi;
183
184  RS = TRI->requiresRegisterScavenging(MF) ? new RegScavenger() : NULL;
185
186  // Fix CFG.  The later algorithms expect it to be right.
187  bool MadeChange = false;
188  for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; I++) {
189    MachineBasicBlock *MBB = I, *TBB = 0, *FBB = 0;
190    SmallVector<MachineOperand, 4> Cond;
191    if (!TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true))
192      MadeChange |= MBB->CorrectExtraCFGEdges(TBB, FBB, !Cond.empty());
193    MadeChange |= OptimizeImpDefsBlock(MBB);
194  }
195
196
197  bool MadeChangeThisIteration = true;
198  while (MadeChangeThisIteration) {
199    MadeChangeThisIteration = false;
200    MadeChangeThisIteration |= TailMergeBlocks(MF);
201    MadeChangeThisIteration |= OptimizeBranches(MF);
202    MadeChange |= MadeChangeThisIteration;
203  }
204
205  // See if any jump tables have become mergable or dead as the code generator
206  // did its thing.
207  MachineJumpTableInfo *JTI = MF.getJumpTableInfo();
208  const std::vector<MachineJumpTableEntry> &JTs = JTI->getJumpTables();
209  if (!JTs.empty()) {
210    // Figure out how these jump tables should be merged.
211    std::vector<unsigned> JTMapping;
212    JTMapping.reserve(JTs.size());
213
214    // We always keep the 0th jump table.
215    JTMapping.push_back(0);
216
217    // Scan the jump tables, seeing if there are any duplicates.  Note that this
218    // is N^2, which should be fixed someday.
219    for (unsigned i = 1, e = JTs.size(); i != e; ++i) {
220      if (JTs[i].MBBs.empty())
221        JTMapping.push_back(i);
222      else
223        JTMapping.push_back(JTI->getJumpTableIndex(JTs[i].MBBs));
224    }
225
226    // If a jump table was merge with another one, walk the function rewriting
227    // references to jump tables to reference the new JT ID's.  Keep track of
228    // whether we see a jump table idx, if not, we can delete the JT.
229    BitVector JTIsLive(JTs.size());
230    for (MachineFunction::iterator BB = MF.begin(), E = MF.end();
231         BB != E; ++BB) {
232      for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end();
233           I != E; ++I)
234        for (unsigned op = 0, e = I->getNumOperands(); op != e; ++op) {
235          MachineOperand &Op = I->getOperand(op);
236          if (!Op.isJTI()) continue;
237          unsigned NewIdx = JTMapping[Op.getIndex()];
238          Op.setIndex(NewIdx);
239
240          // Remember that this JT is live.
241          JTIsLive.set(NewIdx);
242        }
243    }
244
245    // Finally, remove dead jump tables.  This happens either because the
246    // indirect jump was unreachable (and thus deleted) or because the jump
247    // table was merged with some other one.
248    for (unsigned i = 0, e = JTIsLive.size(); i != e; ++i)
249      if (!JTIsLive.test(i)) {
250        JTI->RemoveJumpTable(i);
251        MadeChange = true;
252      }
253  }
254
255  delete RS;
256  return MadeChange;
257}
258
259//===----------------------------------------------------------------------===//
260//  Tail Merging of Blocks
261//===----------------------------------------------------------------------===//
262
263/// HashMachineInstr - Compute a hash value for MI and its operands.
264static unsigned HashMachineInstr(const MachineInstr *MI) {
265  unsigned Hash = MI->getOpcode();
266  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
267    const MachineOperand &Op = MI->getOperand(i);
268
269    // Merge in bits from the operand if easy.
270    unsigned OperandHash = 0;
271    switch (Op.getType()) {
272    case MachineOperand::MO_Register:          OperandHash = Op.getReg(); break;
273    case MachineOperand::MO_Immediate:         OperandHash = Op.getImm(); break;
274    case MachineOperand::MO_MachineBasicBlock:
275      OperandHash = Op.getMBB()->getNumber();
276      break;
277    case MachineOperand::MO_FrameIndex:
278    case MachineOperand::MO_ConstantPoolIndex:
279    case MachineOperand::MO_JumpTableIndex:
280      OperandHash = Op.getIndex();
281      break;
282    case MachineOperand::MO_GlobalAddress:
283    case MachineOperand::MO_ExternalSymbol:
284      // Global address / external symbol are too hard, don't bother, but do
285      // pull in the offset.
286      OperandHash = Op.getOffset();
287      break;
288    default: break;
289    }
290
291    Hash += ((OperandHash << 3) | Op.getType()) << (i&31);
292  }
293  return Hash;
294}
295
296/// HashEndOfMBB - Hash the last few instructions in the MBB.  For blocks
297/// with no successors, we hash two instructions, because cross-jumping
298/// only saves code when at least two instructions are removed (since a
299/// branch must be inserted).  For blocks with a successor, one of the
300/// two blocks to be tail-merged will end with a branch already, so
301/// it gains to cross-jump even for one instruction.
302static unsigned HashEndOfMBB(const MachineBasicBlock *MBB,
303                             unsigned minCommonTailLength) {
304  MachineBasicBlock::const_iterator I = MBB->end();
305  if (I == MBB->begin())
306    return 0;   // Empty MBB.
307
308  --I;
309  unsigned Hash = HashMachineInstr(I);
310
311  if (I == MBB->begin() || minCommonTailLength == 1)
312    return Hash;   // Single instr MBB.
313
314  --I;
315  // Hash in the second-to-last instruction.
316  Hash ^= HashMachineInstr(I) << 2;
317  return Hash;
318}
319
320/// ComputeCommonTailLength - Given two machine basic blocks, compute the number
321/// of instructions they actually have in common together at their end.  Return
322/// iterators for the first shared instruction in each block.
323static unsigned ComputeCommonTailLength(MachineBasicBlock *MBB1,
324                                        MachineBasicBlock *MBB2,
325                                        MachineBasicBlock::iterator &I1,
326                                        MachineBasicBlock::iterator &I2) {
327  I1 = MBB1->end();
328  I2 = MBB2->end();
329
330  unsigned TailLen = 0;
331  while (I1 != MBB1->begin() && I2 != MBB2->begin()) {
332    --I1; --I2;
333    if (!I1->isIdenticalTo(I2) ||
334        // FIXME: This check is dubious. It's used to get around a problem where
335        // people incorrectly expect inline asm directives to remain in the same
336        // relative order. This is untenable because normal compiler
337        // optimizations (like this one) may reorder and/or merge these
338        // directives.
339        I1->getOpcode() == TargetInstrInfo::INLINEASM) {
340      ++I1; ++I2;
341      break;
342    }
343    ++TailLen;
344  }
345  return TailLen;
346}
347
348/// ReplaceTailWithBranchTo - Delete the instruction OldInst and everything
349/// after it, replacing it with an unconditional branch to NewDest.  This
350/// returns true if OldInst's block is modified, false if NewDest is modified.
351void BranchFolder::ReplaceTailWithBranchTo(MachineBasicBlock::iterator OldInst,
352                                           MachineBasicBlock *NewDest) {
353  MachineBasicBlock *OldBB = OldInst->getParent();
354
355  // Remove all the old successors of OldBB from the CFG.
356  while (!OldBB->succ_empty())
357    OldBB->removeSuccessor(OldBB->succ_begin());
358
359  // Remove all the dead instructions from the end of OldBB.
360  OldBB->erase(OldInst, OldBB->end());
361
362  // If OldBB isn't immediately before OldBB, insert a branch to it.
363  if (++MachineFunction::iterator(OldBB) != MachineFunction::iterator(NewDest))
364    TII->InsertBranch(*OldBB, NewDest, 0, SmallVector<MachineOperand, 0>());
365  OldBB->addSuccessor(NewDest);
366  ++NumTailMerge;
367}
368
369/// SplitMBBAt - Given a machine basic block and an iterator into it, split the
370/// MBB so that the part before the iterator falls into the part starting at the
371/// iterator.  This returns the new MBB.
372MachineBasicBlock *BranchFolder::SplitMBBAt(MachineBasicBlock &CurMBB,
373                                            MachineBasicBlock::iterator BBI1) {
374  MachineFunction &MF = *CurMBB.getParent();
375
376  // Create the fall-through block.
377  MachineFunction::iterator MBBI = &CurMBB;
378  MachineBasicBlock *NewMBB =MF.CreateMachineBasicBlock(CurMBB.getBasicBlock());
379  CurMBB.getParent()->insert(++MBBI, NewMBB);
380
381  // Move all the successors of this block to the specified block.
382  NewMBB->transferSuccessors(&CurMBB);
383
384  // Add an edge from CurMBB to NewMBB for the fall-through.
385  CurMBB.addSuccessor(NewMBB);
386
387  // Splice the code over.
388  NewMBB->splice(NewMBB->end(), &CurMBB, BBI1, CurMBB.end());
389
390  // For targets that use the register scavenger, we must maintain LiveIns.
391  if (RS) {
392    RS->enterBasicBlock(&CurMBB);
393    if (!CurMBB.empty())
394      RS->forward(prior(CurMBB.end()));
395    BitVector RegsLiveAtExit(TRI->getNumRegs());
396    RS->getRegsUsed(RegsLiveAtExit, false);
397    for (unsigned int i = 0, e = TRI->getNumRegs(); i != e; i++)
398      if (RegsLiveAtExit[i])
399        NewMBB->addLiveIn(i);
400  }
401
402  return NewMBB;
403}
404
405/// EstimateRuntime - Make a rough estimate for how long it will take to run
406/// the specified code.
407static unsigned EstimateRuntime(MachineBasicBlock::iterator I,
408                                MachineBasicBlock::iterator E) {
409  unsigned Time = 0;
410  for (; I != E; ++I) {
411    const TargetInstrDesc &TID = I->getDesc();
412    if (TID.isCall())
413      Time += 10;
414    else if (TID.mayLoad() || TID.mayStore())
415      Time += 2;
416    else
417      ++Time;
418  }
419  return Time;
420}
421
422// CurMBB needs to add an unconditional branch to SuccMBB (we removed these
423// branches temporarily for tail merging).  In the case where CurMBB ends
424// with a conditional branch to the next block, optimize by reversing the
425// test and conditionally branching to SuccMBB instead.
426static void FixTail(MachineBasicBlock* CurMBB, MachineBasicBlock *SuccBB,
427                    const TargetInstrInfo *TII) {
428  MachineFunction *MF = CurMBB->getParent();
429  MachineFunction::iterator I = next(MachineFunction::iterator(CurMBB));
430  MachineBasicBlock *TBB = 0, *FBB = 0;
431  SmallVector<MachineOperand, 4> Cond;
432  if (I != MF->end() &&
433      !TII->AnalyzeBranch(*CurMBB, TBB, FBB, Cond, true)) {
434    MachineBasicBlock *NextBB = I;
435    if (TBB == NextBB && !Cond.empty() && !FBB) {
436      if (!TII->ReverseBranchCondition(Cond)) {
437        TII->RemoveBranch(*CurMBB);
438        TII->InsertBranch(*CurMBB, SuccBB, NULL, Cond);
439        return;
440      }
441    }
442  }
443  TII->InsertBranch(*CurMBB, SuccBB, NULL, SmallVector<MachineOperand, 0>());
444}
445
446bool
447BranchFolder::MergePotentialsElt::operator<(const MergePotentialsElt &o) const {
448  if (getHash() < o.getHash())
449    return true;
450   else if (getHash() > o.getHash())
451    return false;
452  else if (getBlock()->getNumber() < o.getBlock()->getNumber())
453    return true;
454  else if (getBlock()->getNumber() > o.getBlock()->getNumber())
455    return false;
456  else {
457    // _GLIBCXX_DEBUG checks strict weak ordering, which involves comparing
458    // an object with itself.
459#ifndef _GLIBCXX_DEBUG
460    llvm_unreachable("Predecessor appears twice");
461#endif
462    return false;
463  }
464}
465
466/// CountTerminators - Count the number of terminators in the given
467/// block and set I to the position of the first non-terminator, if there
468/// is one, or MBB->end() otherwise.
469static unsigned CountTerminators(MachineBasicBlock *MBB,
470                                 MachineBasicBlock::iterator &I) {
471  I = MBB->end();
472  unsigned NumTerms = 0;
473  for (;;) {
474    if (I == MBB->begin()) {
475      I = MBB->end();
476      break;
477    }
478    --I;
479    if (!I->getDesc().isTerminator()) break;
480    ++NumTerms;
481  }
482  return NumTerms;
483}
484
485/// ProfitableToMerge - Check if two machine basic blocks have a common tail
486/// and decide if it would be profitable to merge those tails.  Return the
487/// length of the common tail and iterators to the first common instruction
488/// in each block.
489static bool ProfitableToMerge(MachineBasicBlock *MBB1,
490                              MachineBasicBlock *MBB2,
491                              unsigned minCommonTailLength,
492                              unsigned &CommonTailLen,
493                              MachineBasicBlock::iterator &I1,
494                              MachineBasicBlock::iterator &I2,
495                              MachineBasicBlock *SuccBB,
496                              MachineBasicBlock *PredBB) {
497  CommonTailLen = ComputeCommonTailLength(MBB1, MBB2, I1, I2);
498  MachineFunction *MF = MBB1->getParent();
499
500  if (CommonTailLen == 0)
501    return false;
502
503  // It's almost always profitable to merge any number of non-terminator
504  // instructions with the block that falls through into the common successor.
505  if (MBB1 == PredBB || MBB2 == PredBB) {
506    MachineBasicBlock::iterator I;
507    unsigned NumTerms = CountTerminators(MBB1 == PredBB ? MBB2 : MBB1, I);
508    if (CommonTailLen > NumTerms)
509      return true;
510  }
511
512  // If one of the blocks can be completely merged and happens to be in
513  // a position where the other could fall through into it, merge any number
514  // of instructions, because it can be done without a branch.
515  // TODO: If the blocks are not adjacent, move one of them so that they are?
516  if (MBB1->isLayoutSuccessor(MBB2) && I2 == MBB2->begin())
517    return true;
518  if (MBB2->isLayoutSuccessor(MBB1) && I1 == MBB1->begin())
519    return true;
520
521  // If both blocks have an unconditional branch temporarily stripped out,
522  // count that as an additional common instruction for the following
523  // heuristics.
524  unsigned EffectiveTailLen = CommonTailLen;
525  if (SuccBB && MBB1 != PredBB && MBB2 != PredBB &&
526      !MBB1->back().getDesc().isBarrier() &&
527      !MBB2->back().getDesc().isBarrier())
528    ++EffectiveTailLen;
529
530  // Check if the common tail is long enough to be worthwhile.
531  if (EffectiveTailLen >= minCommonTailLength)
532    return true;
533
534  // If we are optimizing for code size, 2 instructions in common is enough if
535  // we don't have to split a block.  At worst we will be introducing 1 new
536  // branch instruction, which is likely to be smaller than the 2
537  // instructions that would be deleted in the merge.
538  if (EffectiveTailLen >= 2 &&
539      MF->getFunction()->hasFnAttr(Attribute::OptimizeForSize) &&
540      (I1 == MBB1->begin() || I2 == MBB2->begin()))
541    return true;
542
543  return false;
544}
545
546/// ComputeSameTails - Look through all the blocks in MergePotentials that have
547/// hash CurHash (guaranteed to match the last element).  Build the vector
548/// SameTails of all those that have the (same) largest number of instructions
549/// in common of any pair of these blocks.  SameTails entries contain an
550/// iterator into MergePotentials (from which the MachineBasicBlock can be
551/// found) and a MachineBasicBlock::iterator into that MBB indicating the
552/// instruction where the matching code sequence begins.
553/// Order of elements in SameTails is the reverse of the order in which
554/// those blocks appear in MergePotentials (where they are not necessarily
555/// consecutive).
556unsigned BranchFolder::ComputeSameTails(unsigned CurHash,
557                                        unsigned minCommonTailLength,
558                                        MachineBasicBlock *SuccBB,
559                                        MachineBasicBlock *PredBB) {
560  unsigned maxCommonTailLength = 0U;
561  SameTails.clear();
562  MachineBasicBlock::iterator TrialBBI1, TrialBBI2;
563  MPIterator HighestMPIter = prior(MergePotentials.end());
564  for (MPIterator CurMPIter = prior(MergePotentials.end()),
565                  B = MergePotentials.begin();
566       CurMPIter != B && CurMPIter->getHash() == CurHash;
567       --CurMPIter) {
568    for (MPIterator I = prior(CurMPIter); I->getHash() == CurHash ; --I) {
569      unsigned CommonTailLen;
570      if (ProfitableToMerge(CurMPIter->getBlock(), I->getBlock(),
571                            minCommonTailLength,
572                            CommonTailLen, TrialBBI1, TrialBBI2,
573                            SuccBB, PredBB)) {
574        if (CommonTailLen > maxCommonTailLength) {
575          SameTails.clear();
576          maxCommonTailLength = CommonTailLen;
577          HighestMPIter = CurMPIter;
578          SameTails.push_back(SameTailElt(CurMPIter, TrialBBI1));
579        }
580        if (HighestMPIter == CurMPIter &&
581            CommonTailLen == maxCommonTailLength)
582          SameTails.push_back(SameTailElt(I, TrialBBI2));
583      }
584      if (I == B)
585        break;
586    }
587  }
588  return maxCommonTailLength;
589}
590
591/// RemoveBlocksWithHash - Remove all blocks with hash CurHash from
592/// MergePotentials, restoring branches at ends of blocks as appropriate.
593void BranchFolder::RemoveBlocksWithHash(unsigned CurHash,
594                                        MachineBasicBlock* SuccBB,
595                                        MachineBasicBlock* PredBB) {
596  MPIterator CurMPIter, B;
597  for (CurMPIter = prior(MergePotentials.end()), B = MergePotentials.begin();
598       CurMPIter->getHash() == CurHash;
599       --CurMPIter) {
600    // Put the unconditional branch back, if we need one.
601    MachineBasicBlock *CurMBB = CurMPIter->getBlock();
602    if (SuccBB && CurMBB != PredBB)
603      FixTail(CurMBB, SuccBB, TII);
604    if (CurMPIter == B)
605      break;
606  }
607  if (CurMPIter->getHash() != CurHash)
608    CurMPIter++;
609  MergePotentials.erase(CurMPIter, MergePotentials.end());
610}
611
612/// CreateCommonTailOnlyBlock - None of the blocks to be tail-merged consist
613/// only of the common tail.  Create a block that does by splitting one.
614unsigned BranchFolder::CreateCommonTailOnlyBlock(MachineBasicBlock *&PredBB,
615                                             unsigned maxCommonTailLength) {
616  unsigned commonTailIndex = 0;
617  unsigned TimeEstimate = ~0U;
618  for (unsigned i = 0, e = SameTails.size(); i != e; ++i) {
619    // Use PredBB if possible; that doesn't require a new branch.
620    if (SameTails[i].getBlock() == PredBB) {
621      commonTailIndex = i;
622      break;
623    }
624    // Otherwise, make a (fairly bogus) choice based on estimate of
625    // how long it will take the various blocks to execute.
626    unsigned t = EstimateRuntime(SameTails[i].getBlock()->begin(),
627                                 SameTails[i].getTailStartPos());
628    if (t <= TimeEstimate) {
629      TimeEstimate = t;
630      commonTailIndex = i;
631    }
632  }
633
634  MachineBasicBlock::iterator BBI =
635    SameTails[commonTailIndex].getTailStartPos();
636  MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock();
637
638  DEBUG(errs() << "\nSplitting BB#" << MBB->getNumber() << ", size "
639               << maxCommonTailLength);
640
641  MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI);
642  SameTails[commonTailIndex].setBlock(newMBB);
643  SameTails[commonTailIndex].setTailStartPos(newMBB->begin());
644
645  // If we split PredBB, newMBB is the new predecessor.
646  if (PredBB == MBB)
647    PredBB = newMBB;
648
649  return commonTailIndex;
650}
651
652// See if any of the blocks in MergePotentials (which all have a common single
653// successor, or all have no successor) can be tail-merged.  If there is a
654// successor, any blocks in MergePotentials that are not tail-merged and
655// are not immediately before Succ must have an unconditional branch to
656// Succ added (but the predecessor/successor lists need no adjustment).
657// The lone predecessor of Succ that falls through into Succ,
658// if any, is given in PredBB.
659
660bool BranchFolder::TryTailMergeBlocks(MachineBasicBlock *SuccBB,
661                                      MachineBasicBlock* PredBB) {
662  bool MadeChange = false;
663
664  // Except for the special cases below, tail-merge if there are at least
665  // this many instructions in common.
666  unsigned minCommonTailLength = TailMergeSize;
667
668  // If there's a successor block, there are some cases which don't require
669  // new branching and as such are very likely to be profitable.
670  if (SuccBB) {
671    if (SuccBB->pred_size() == MergePotentials.size() &&
672        !MergePotentials[0].getBlock()->empty()) {
673      // If all the predecessors have at least one tail instruction in common,
674      // merging is very likely to be a win since it won't require an increase
675      // in static branches, and it will decrease the static instruction count.
676      bool AllPredsMatch = true;
677      MachineBasicBlock::iterator FirstNonTerm;
678      unsigned MinNumTerms = CountTerminators(MergePotentials[0].getBlock(),
679                                              FirstNonTerm);
680      if (FirstNonTerm != MergePotentials[0].getBlock()->end()) {
681        for (unsigned i = 1, e = MergePotentials.size(); i != e; ++i) {
682          MachineBasicBlock::iterator OtherFirstNonTerm;
683          unsigned NumTerms = CountTerminators(MergePotentials[0].getBlock(),
684                                               OtherFirstNonTerm);
685          if (NumTerms < MinNumTerms)
686            MinNumTerms = NumTerms;
687          if (OtherFirstNonTerm == MergePotentials[i].getBlock()->end() ||
688              OtherFirstNonTerm->isIdenticalTo(FirstNonTerm)) {
689            AllPredsMatch = false;
690            break;
691          }
692        }
693
694        // If they all have an instruction in common, do any amount of merging.
695        if (AllPredsMatch)
696          minCommonTailLength = MinNumTerms + 1;
697      }
698    }
699  }
700
701  DEBUG(errs() << "\nTryTailMergeBlocks: ";
702        for (unsigned i = 0, e = MergePotentials.size(); i != e; ++i)
703          errs() << "BB#" << MergePotentials[i].getBlock()->getNumber()
704                 << (i == e-1 ? "" : ", ");
705        errs() << "\n";
706        if (SuccBB) {
707          errs() << "  with successor BB#" << SuccBB->getNumber() << '\n';
708          if (PredBB)
709            errs() << "  which has fall-through from BB#"
710                   << PredBB->getNumber() << "\n";
711        }
712        errs() << "Looking for common tails of at least "
713               << minCommonTailLength << " instruction"
714               << (minCommonTailLength == 1 ? "" : "s") << '\n';
715       );
716
717  // Sort by hash value so that blocks with identical end sequences sort
718  // together.
719  std::stable_sort(MergePotentials.begin(), MergePotentials.end());
720
721  // Walk through equivalence sets looking for actual exact matches.
722  while (MergePotentials.size() > 1) {
723    unsigned CurHash = MergePotentials.back().getHash();
724
725    // Build SameTails, identifying the set of blocks with this hash code
726    // and with the maximum number of instructions in common.
727    unsigned maxCommonTailLength = ComputeSameTails(CurHash,
728                                                    minCommonTailLength,
729                                                    SuccBB, PredBB);
730
731    // If we didn't find any pair that has at least minCommonTailLength
732    // instructions in common, remove all blocks with this hash code and retry.
733    if (SameTails.empty()) {
734      RemoveBlocksWithHash(CurHash, SuccBB, PredBB);
735      continue;
736    }
737
738    // If one of the blocks is the entire common tail (and not the entry
739    // block, which we can't jump to), we can treat all blocks with this same
740    // tail at once.  Use PredBB if that is one of the possibilities, as that
741    // will not introduce any extra branches.
742    MachineBasicBlock *EntryBB = MergePotentials.begin()->getBlock()->
743                                 getParent()->begin();
744    unsigned commonTailIndex = SameTails.size();
745    // If there are two blocks, check to see if one can be made to fall through
746    // into the other.
747    if (SameTails.size() == 2 &&
748        SameTails[0].getBlock()->isLayoutSuccessor(SameTails[1].getBlock()) &&
749        SameTails[1].tailIsWholeBlock())
750      commonTailIndex = 1;
751    else if (SameTails.size() == 2 &&
752             SameTails[1].getBlock()->isLayoutSuccessor(
753                                                     SameTails[0].getBlock()) &&
754             SameTails[0].tailIsWholeBlock())
755      commonTailIndex = 0;
756    else {
757      // Otherwise just pick one, favoring the fall-through predecessor if
758      // there is one.
759      for (unsigned i = 0, e = SameTails.size(); i != e; ++i) {
760        MachineBasicBlock *MBB = SameTails[i].getBlock();
761        if (MBB == EntryBB && SameTails[i].tailIsWholeBlock())
762          continue;
763        if (MBB == PredBB) {
764          commonTailIndex = i;
765          break;
766        }
767        if (SameTails[i].tailIsWholeBlock())
768          commonTailIndex = i;
769      }
770    }
771
772    if (commonTailIndex == SameTails.size() ||
773        (SameTails[commonTailIndex].getBlock() == PredBB &&
774         !SameTails[commonTailIndex].tailIsWholeBlock())) {
775      // None of the blocks consist entirely of the common tail.
776      // Split a block so that one does.
777      commonTailIndex = CreateCommonTailOnlyBlock(PredBB, maxCommonTailLength);
778    }
779
780    MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock();
781    // MBB is common tail.  Adjust all other BB's to jump to this one.
782    // Traversal must be forwards so erases work.
783    DEBUG(errs() << "\nUsing common tail in BB#" << MBB->getNumber()
784                 << " for ");
785    for (unsigned int i=0, e = SameTails.size(); i != e; ++i) {
786      if (commonTailIndex == i)
787        continue;
788      DEBUG(errs() << "BB#" << SameTails[i].getBlock()->getNumber()
789                   << (i == e-1 ? "" : ", "));
790      // Hack the end off BB i, making it jump to BB commonTailIndex instead.
791      ReplaceTailWithBranchTo(SameTails[i].getTailStartPos(), MBB);
792      // BB i is no longer a predecessor of SuccBB; remove it from the worklist.
793      MergePotentials.erase(SameTails[i].getMPIter());
794    }
795    DEBUG(errs() << "\n");
796    // We leave commonTailIndex in the worklist in case there are other blocks
797    // that match it with a smaller number of instructions.
798    MadeChange = true;
799  }
800  return MadeChange;
801}
802
803bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
804
805  if (!EnableTailMerge) return false;
806
807  bool MadeChange = false;
808
809  // First find blocks with no successors.
810  MergePotentials.clear();
811  for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) {
812    if (I->succ_empty())
813      MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(I, 2U), I));
814  }
815
816  // See if we can do any tail merging on those.
817  if (MergePotentials.size() < TailMergeThreshold &&
818      MergePotentials.size() >= 2)
819    MadeChange |= TryTailMergeBlocks(NULL, NULL);
820
821  // Look at blocks (IBB) with multiple predecessors (PBB).
822  // We change each predecessor to a canonical form, by
823  // (1) temporarily removing any unconditional branch from the predecessor
824  // to IBB, and
825  // (2) alter conditional branches so they branch to the other block
826  // not IBB; this may require adding back an unconditional branch to IBB
827  // later, where there wasn't one coming in.  E.g.
828  //   Bcc IBB
829  //   fallthrough to QBB
830  // here becomes
831  //   Bncc QBB
832  // with a conceptual B to IBB after that, which never actually exists.
833  // With those changes, we see whether the predecessors' tails match,
834  // and merge them if so.  We change things out of canonical form and
835  // back to the way they were later in the process.  (OptimizeBranches
836  // would undo some of this, but we can't use it, because we'd get into
837  // a compile-time infinite loop repeatedly doing and undoing the same
838  // transformations.)
839
840  for (MachineFunction::iterator I = next(MF.begin()), E = MF.end();
841       I != E; ++I) {
842    if (I->pred_size() >= 2 && I->pred_size() < TailMergeThreshold) {
843      SmallPtrSet<MachineBasicBlock *, 8> UniquePreds;
844      MachineBasicBlock *IBB = I;
845      MachineBasicBlock *PredBB = prior(I);
846      MergePotentials.clear();
847      for (MachineBasicBlock::pred_iterator P = I->pred_begin(),
848                                            E2 = I->pred_end();
849           P != E2; ++P) {
850        MachineBasicBlock* PBB = *P;
851        // Skip blocks that loop to themselves, can't tail merge these.
852        if (PBB == IBB)
853          continue;
854        // Visit each predecessor only once.
855        if (!UniquePreds.insert(PBB))
856          continue;
857        MachineBasicBlock *TBB = 0, *FBB = 0;
858        SmallVector<MachineOperand, 4> Cond;
859        if (!TII->AnalyzeBranch(*PBB, TBB, FBB, Cond, true)) {
860          // Failing case:  IBB is the target of a cbr, and
861          // we cannot reverse the branch.
862          SmallVector<MachineOperand, 4> NewCond(Cond);
863          if (!Cond.empty() && TBB == IBB) {
864            if (TII->ReverseBranchCondition(NewCond))
865              continue;
866            // This is the QBB case described above
867            if (!FBB)
868              FBB = next(MachineFunction::iterator(PBB));
869          }
870          // Failing case:  the only way IBB can be reached from PBB is via
871          // exception handling.  Happens for landing pads.  Would be nice
872          // to have a bit in the edge so we didn't have to do all this.
873          if (IBB->isLandingPad()) {
874            MachineFunction::iterator IP = PBB;  IP++;
875            MachineBasicBlock* PredNextBB = NULL;
876            if (IP != MF.end())
877              PredNextBB = IP;
878            if (TBB == NULL) {
879              if (IBB != PredNextBB)      // fallthrough
880                continue;
881            } else if (FBB) {
882              if (TBB != IBB && FBB != IBB)   // cbr then ubr
883                continue;
884            } else if (Cond.empty()) {
885              if (TBB != IBB)               // ubr
886                continue;
887            } else {
888              if (TBB != IBB && IBB != PredNextBB)  // cbr
889                continue;
890            }
891          }
892          // Remove the unconditional branch at the end, if any.
893          if (TBB && (Cond.empty() || FBB)) {
894            TII->RemoveBranch(*PBB);
895            if (!Cond.empty())
896              // reinsert conditional branch only, for now
897              TII->InsertBranch(*PBB, (TBB == IBB) ? FBB : TBB, 0, NewCond);
898          }
899          MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(PBB, 1U),
900                                                       *P));
901        }
902      }
903      if (MergePotentials.size() >= 2)
904        MadeChange |= TryTailMergeBlocks(IBB, PredBB);
905      // Reinsert an unconditional branch if needed.
906      // The 1 below can occur as a result of removing blocks in TryTailMergeBlocks.
907      PredBB = prior(I);      // this may have been changed in TryTailMergeBlocks
908      if (MergePotentials.size() == 1 &&
909          MergePotentials.begin()->getBlock() != PredBB)
910        FixTail(MergePotentials.begin()->getBlock(), IBB, TII);
911    }
912  }
913  return MadeChange;
914}
915
916//===----------------------------------------------------------------------===//
917//  Branch Optimization
918//===----------------------------------------------------------------------===//
919
920bool BranchFolder::OptimizeBranches(MachineFunction &MF) {
921  bool MadeChange = false;
922
923  // Make sure blocks are numbered in order
924  MF.RenumberBlocks();
925
926  for (MachineFunction::iterator I = ++MF.begin(), E = MF.end(); I != E; ) {
927    MachineBasicBlock *MBB = I++;
928    MadeChange |= OptimizeBlock(MBB);
929
930    // If it is dead, remove it.
931    if (MBB->pred_empty()) {
932      RemoveDeadBlock(MBB);
933      MadeChange = true;
934      ++NumDeadBlocks;
935    }
936  }
937  return MadeChange;
938}
939
940
941/// CanFallThrough - Return true if the specified block (with the specified
942/// branch condition) can implicitly transfer control to the block after it by
943/// falling off the end of it.  This should return false if it can reach the
944/// block after it, but it uses an explicit branch to do so (e.g. a table jump).
945///
946/// True is a conservative answer.
947///
948bool BranchFolder::CanFallThrough(MachineBasicBlock *CurBB,
949                                  bool BranchUnAnalyzable,
950                                  MachineBasicBlock *TBB,
951                                  MachineBasicBlock *FBB,
952                                  const SmallVectorImpl<MachineOperand> &Cond) {
953  MachineFunction::iterator Fallthrough = CurBB;
954  ++Fallthrough;
955  // If FallthroughBlock is off the end of the function, it can't fall through.
956  if (Fallthrough == CurBB->getParent()->end())
957    return false;
958
959  // If FallthroughBlock isn't a successor of CurBB, no fallthrough is possible.
960  if (!CurBB->isSuccessor(Fallthrough))
961    return false;
962
963  // If we couldn't analyze the branch, examine the last instruction.
964  // If the block doesn't end in a known control barrier, assume fallthrough
965  // is possible. The isPredicable check is needed because this code can be
966  // called during IfConversion, where an instruction which is normally a
967  // Barrier is predicated and thus no longer an actual control barrier. This
968  // is over-conservative though, because if an instruction isn't actually
969  // predicated we could still treat it like a barrier.
970  if (BranchUnAnalyzable)
971    return CurBB->empty() || !CurBB->back().getDesc().isBarrier() ||
972           CurBB->back().getDesc().isPredicable();
973
974  // If there is no branch, control always falls through.
975  if (TBB == 0) return true;
976
977  // If there is some explicit branch to the fallthrough block, it can obviously
978  // reach, even though the branch should get folded to fall through implicitly.
979  if (MachineFunction::iterator(TBB) == Fallthrough ||
980      MachineFunction::iterator(FBB) == Fallthrough)
981    return true;
982
983  // If it's an unconditional branch to some block not the fall through, it
984  // doesn't fall through.
985  if (Cond.empty()) return false;
986
987  // Otherwise, if it is conditional and has no explicit false block, it falls
988  // through.
989  return FBB == 0;
990}
991
992/// CanFallThrough - Return true if the specified can implicitly transfer
993/// control to the block after it by falling off the end of it.  This should
994/// return false if it can reach the block after it, but it uses an explicit
995/// branch to do so (e.g. a table jump).
996///
997/// True is a conservative answer.
998///
999bool BranchFolder::CanFallThrough(MachineBasicBlock *CurBB) {
1000  MachineBasicBlock *TBB = 0, *FBB = 0;
1001  SmallVector<MachineOperand, 4> Cond;
1002  bool CurUnAnalyzable = TII->AnalyzeBranch(*CurBB, TBB, FBB, Cond, true);
1003  return CanFallThrough(CurBB, CurUnAnalyzable, TBB, FBB, Cond);
1004}
1005
1006/// IsBetterFallthrough - Return true if it would be clearly better to
1007/// fall-through to MBB1 than to fall through into MBB2.  This has to return
1008/// a strict ordering, returning true for both (MBB1,MBB2) and (MBB2,MBB1) will
1009/// result in infinite loops.
1010static bool IsBetterFallthrough(MachineBasicBlock *MBB1,
1011                                MachineBasicBlock *MBB2) {
1012  // Right now, we use a simple heuristic.  If MBB2 ends with a call, and
1013  // MBB1 doesn't, we prefer to fall through into MBB1.  This allows us to
1014  // optimize branches that branch to either a return block or an assert block
1015  // into a fallthrough to the return.
1016  if (MBB1->empty() || MBB2->empty()) return false;
1017
1018  // If there is a clear successor ordering we make sure that one block
1019  // will fall through to the next
1020  if (MBB1->isSuccessor(MBB2)) return true;
1021  if (MBB2->isSuccessor(MBB1)) return false;
1022
1023  MachineInstr *MBB1I = --MBB1->end();
1024  MachineInstr *MBB2I = --MBB2->end();
1025  return MBB2I->getDesc().isCall() && !MBB1I->getDesc().isCall();
1026}
1027
1028/// TailDuplicate - MBB unconditionally branches to SuccBB. If it is profitable,
1029/// duplicate SuccBB's contents in MBB to eliminate the branch.
1030bool BranchFolder::TailDuplicate(MachineBasicBlock *TailBB,
1031                                 bool PrevFallsThrough,
1032                                 MachineFunction &MF) {
1033  // Don't try to tail-duplicate single-block loops.
1034  if (TailBB->isSuccessor(TailBB))
1035    return false;
1036
1037  // Don't tail-duplicate a block which will soon be folded into its successor.
1038  if (TailBB->succ_size() == 1 &&
1039      TailBB->succ_begin()[0]->pred_size() == 1)
1040    return false;
1041
1042  // Duplicate up to one less that the tail-merge threshold, so that we don't
1043  // get into an infinite loop between duplicating and merging. When optimizing
1044  // for size, duplicate only one, because one branch instruction can be
1045  // eliminated to compensate for the duplication.
1046  unsigned MaxDuplicateCount =
1047    MF.getFunction()->hasFnAttr(Attribute::OptimizeForSize) ?
1048      1 : (TailMergeSize - 1);
1049
1050  // Check the instructions in the block to determine whether tail-duplication
1051  // is invalid or unlikely to be unprofitable.
1052  unsigned i = 0;
1053  bool HasCall = false;
1054  for (MachineBasicBlock::iterator I = TailBB->begin();
1055       I != TailBB->end(); ++I, ++i) {
1056    // Non-duplicable things shouldn't be tail-duplicated.
1057    if (I->getDesc().isNotDuplicable()) return false;
1058    // Don't duplicate more than the threshold.
1059    if (i == MaxDuplicateCount) return false;
1060    // Remember if we saw a call.
1061    if (I->getDesc().isCall()) HasCall = true;
1062  }
1063  // Heuristically, don't tail-duplicate calls if it would expand code size,
1064  // as it's less likely to be worth the extra cost.
1065  if (i > 1 && HasCall)
1066    return false;
1067
1068  // Iterate through all the unique predecessors and tail-duplicate this
1069  // block into them, if possible. Copying the list ahead of time also
1070  // avoids trouble with the predecessor list reallocating.
1071  bool Changed = false;
1072  SmallSetVector<MachineBasicBlock *, 8> Preds(TailBB->pred_begin(),
1073                                               TailBB->pred_end());
1074  for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
1075       PE = Preds.end(); PI != PE; ++PI) {
1076    MachineBasicBlock *PredBB = *PI;
1077
1078    assert(TailBB != PredBB &&
1079           "Single-block loop should have been rejected earlier!");
1080    if (PredBB->succ_size() > 1) continue;
1081
1082    MachineBasicBlock *PredTBB, *PredFBB;
1083    SmallVector<MachineOperand, 4> PredCond;
1084    if (TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true))
1085      continue;
1086    if (!PredCond.empty())
1087      continue;
1088    // EH edges are ignored by AnalyzeBranch.
1089    if (PredBB->succ_size() != 1)
1090      continue;
1091    // Don't duplicate into a fall-through predecessor unless its the
1092    // only predecessor.
1093    if (PredBB->isLayoutSuccessor(TailBB) &&
1094        PrevFallsThrough &&
1095        TailBB->pred_size() != 1)
1096      continue;
1097
1098    DEBUG(errs() << "\nTail-duplicating into PredBB: " << *PredBB
1099                 << "From Succ: " << *TailBB);
1100
1101    // Remove PredBB's unconditional branch.
1102    TII->RemoveBranch(*PredBB);
1103    // Clone the contents of TailBB into PredBB.
1104    for (MachineBasicBlock::iterator I = TailBB->begin(), E = TailBB->end();
1105         I != E; ++I) {
1106      MachineInstr *NewMI = MF.CloneMachineInstr(I);
1107      PredBB->insert(PredBB->end(), NewMI);
1108    }
1109
1110    // Update the CFG.
1111    PredBB->removeSuccessor(PredBB->succ_begin());
1112    assert(PredBB->succ_empty() &&
1113           "TailDuplicate called on block with multiple successors!");
1114    for (MachineBasicBlock::succ_iterator I = TailBB->succ_begin(),
1115         E = TailBB->succ_end(); I != E; ++I)
1116       PredBB->addSuccessor(*I);
1117
1118    Changed = true;
1119  }
1120
1121  return Changed;
1122}
1123
1124/// OptimizeBlock - Analyze and optimize control flow related to the specified
1125/// block.  This is never called on the entry block.
1126bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) {
1127  bool MadeChange = false;
1128  MachineFunction &MF = *MBB->getParent();
1129ReoptimizeBlock:
1130
1131  MachineFunction::iterator FallThrough = MBB;
1132  ++FallThrough;
1133
1134  // If this block is empty, make everyone use its fall-through, not the block
1135  // explicitly.  Landing pads should not do this since the landing-pad table
1136  // points to this block.  Blocks with their addresses taken shouldn't be
1137  // optimized away.
1138  if (MBB->empty() && !MBB->isLandingPad() && !MBB->hasAddressTaken()) {
1139    // Dead block?  Leave for cleanup later.
1140    if (MBB->pred_empty()) return MadeChange;
1141
1142    if (FallThrough == MF.end()) {
1143      // TODO: Simplify preds to not branch here if possible!
1144    } else {
1145      // Rewrite all predecessors of the old block to go to the fallthrough
1146      // instead.
1147      while (!MBB->pred_empty()) {
1148        MachineBasicBlock *Pred = *(MBB->pred_end()-1);
1149        Pred->ReplaceUsesOfBlockWith(MBB, FallThrough);
1150      }
1151      // If MBB was the target of a jump table, update jump tables to go to the
1152      // fallthrough instead.
1153      MF.getJumpTableInfo()->ReplaceMBBInJumpTables(MBB, FallThrough);
1154      MadeChange = true;
1155    }
1156    return MadeChange;
1157  }
1158
1159  // Check to see if we can simplify the terminator of the block before this
1160  // one.
1161  MachineBasicBlock &PrevBB = *prior(MachineFunction::iterator(MBB));
1162
1163  MachineBasicBlock *PriorTBB = 0, *PriorFBB = 0;
1164  SmallVector<MachineOperand, 4> PriorCond;
1165  bool PriorUnAnalyzable =
1166    TII->AnalyzeBranch(PrevBB, PriorTBB, PriorFBB, PriorCond, true);
1167  if (!PriorUnAnalyzable) {
1168    // If the CFG for the prior block has extra edges, remove them.
1169    MadeChange |= PrevBB.CorrectExtraCFGEdges(PriorTBB, PriorFBB,
1170                                              !PriorCond.empty());
1171
1172    // If the previous branch is conditional and both conditions go to the same
1173    // destination, remove the branch, replacing it with an unconditional one or
1174    // a fall-through.
1175    if (PriorTBB && PriorTBB == PriorFBB) {
1176      TII->RemoveBranch(PrevBB);
1177      PriorCond.clear();
1178      if (PriorTBB != MBB)
1179        TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond);
1180      MadeChange = true;
1181      ++NumBranchOpts;
1182      goto ReoptimizeBlock;
1183    }
1184
1185    // If the previous block unconditionally falls through to this block and
1186    // this block has no other predecessors, move the contents of this block
1187    // into the prior block. This doesn't usually happen when SimplifyCFG
1188    // has been used, but it can happen tail duplication eliminates all the
1189    // non-branch predecessors of a block leaving only the fall-through edge.
1190    // This has to check PrevBB->succ_size() because EH edges are ignored by
1191    // AnalyzeBranch.
1192    if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 &&
1193        PrevBB.succ_size() == 1 &&
1194        !MBB->hasAddressTaken()) {
1195      DEBUG(errs() << "\nMerging into block: " << PrevBB
1196                   << "From MBB: " << *MBB);
1197      PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end());
1198      PrevBB.removeSuccessor(PrevBB.succ_begin());;
1199      assert(PrevBB.succ_empty());
1200      PrevBB.transferSuccessors(MBB);
1201      MadeChange = true;
1202      return MadeChange;
1203    }
1204
1205    // If the previous branch *only* branches to *this* block (conditional or
1206    // not) remove the branch.
1207    if (PriorTBB == MBB && PriorFBB == 0) {
1208      TII->RemoveBranch(PrevBB);
1209      MadeChange = true;
1210      ++NumBranchOpts;
1211      goto ReoptimizeBlock;
1212    }
1213
1214    // If the prior block branches somewhere else on the condition and here if
1215    // the condition is false, remove the uncond second branch.
1216    if (PriorFBB == MBB) {
1217      TII->RemoveBranch(PrevBB);
1218      TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond);
1219      MadeChange = true;
1220      ++NumBranchOpts;
1221      goto ReoptimizeBlock;
1222    }
1223
1224    // If the prior block branches here on true and somewhere else on false, and
1225    // if the branch condition is reversible, reverse the branch to create a
1226    // fall-through.
1227    if (PriorTBB == MBB) {
1228      SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
1229      if (!TII->ReverseBranchCondition(NewPriorCond)) {
1230        TII->RemoveBranch(PrevBB);
1231        TII->InsertBranch(PrevBB, PriorFBB, 0, NewPriorCond);
1232        MadeChange = true;
1233        ++NumBranchOpts;
1234        goto ReoptimizeBlock;
1235      }
1236    }
1237
1238    // If this block has no successors (e.g. it is a return block or ends with
1239    // a call to a no-return function like abort or __cxa_throw) and if the pred
1240    // falls through into this block, and if it would otherwise fall through
1241    // into the block after this, move this block to the end of the function.
1242    //
1243    // We consider it more likely that execution will stay in the function (e.g.
1244    // due to loops) than it is to exit it.  This asserts in loops etc, moving
1245    // the assert condition out of the loop body.
1246    if (MBB->succ_empty() && !PriorCond.empty() && PriorFBB == 0 &&
1247        MachineFunction::iterator(PriorTBB) == FallThrough &&
1248        !CanFallThrough(MBB)) {
1249      bool DoTransform = true;
1250
1251      // We have to be careful that the succs of PredBB aren't both no-successor
1252      // blocks.  If neither have successors and if PredBB is the second from
1253      // last block in the function, we'd just keep swapping the two blocks for
1254      // last.  Only do the swap if one is clearly better to fall through than
1255      // the other.
1256      if (FallThrough == --MF.end() &&
1257          !IsBetterFallthrough(PriorTBB, MBB))
1258        DoTransform = false;
1259
1260      // We don't want to do this transformation if we have control flow like:
1261      //   br cond BB2
1262      // BB1:
1263      //   ..
1264      //   jmp BBX
1265      // BB2:
1266      //   ..
1267      //   ret
1268      //
1269      // In this case, we could actually be moving the return block *into* a
1270      // loop!
1271      if (DoTransform && !MBB->succ_empty() &&
1272          (!CanFallThrough(PriorTBB) || PriorTBB->empty()))
1273        DoTransform = false;
1274
1275
1276      if (DoTransform) {
1277        // Reverse the branch so we will fall through on the previous true cond.
1278        SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
1279        if (!TII->ReverseBranchCondition(NewPriorCond)) {
1280          DEBUG(errs() << "\nMoving MBB: " << *MBB
1281                       << "To make fallthrough to: " << *PriorTBB << "\n");
1282
1283          TII->RemoveBranch(PrevBB);
1284          TII->InsertBranch(PrevBB, MBB, 0, NewPriorCond);
1285
1286          // Move this block to the end of the function.
1287          MBB->moveAfter(--MF.end());
1288          MadeChange = true;
1289          ++NumBranchOpts;
1290          return MadeChange;
1291        }
1292      }
1293    }
1294  }
1295
1296  // Analyze the branch in the current block.
1297  MachineBasicBlock *CurTBB = 0, *CurFBB = 0;
1298  SmallVector<MachineOperand, 4> CurCond;
1299  bool CurUnAnalyzable= TII->AnalyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true);
1300  if (!CurUnAnalyzable) {
1301    // If the CFG for the prior block has extra edges, remove them.
1302    MadeChange |= MBB->CorrectExtraCFGEdges(CurTBB, CurFBB, !CurCond.empty());
1303
1304    // If this is a two-way branch, and the FBB branches to this block, reverse
1305    // the condition so the single-basic-block loop is faster.  Instead of:
1306    //    Loop: xxx; jcc Out; jmp Loop
1307    // we want:
1308    //    Loop: xxx; jncc Loop; jmp Out
1309    if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) {
1310      SmallVector<MachineOperand, 4> NewCond(CurCond);
1311      if (!TII->ReverseBranchCondition(NewCond)) {
1312        TII->RemoveBranch(*MBB);
1313        TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond);
1314        MadeChange = true;
1315        ++NumBranchOpts;
1316        goto ReoptimizeBlock;
1317      }
1318    }
1319
1320
1321    // If this branch is the only thing in its block, see if we can forward
1322    // other blocks across it.
1323    if (CurTBB && CurCond.empty() && CurFBB == 0 &&
1324        MBB->begin()->getDesc().isBranch() && CurTBB != MBB &&
1325        !MBB->hasAddressTaken()) {
1326      // This block may contain just an unconditional branch.  Because there can
1327      // be 'non-branch terminators' in the block, try removing the branch and
1328      // then seeing if the block is empty.
1329      TII->RemoveBranch(*MBB);
1330
1331      // If this block is just an unconditional branch to CurTBB, we can
1332      // usually completely eliminate the block.  The only case we cannot
1333      // completely eliminate the block is when the block before this one
1334      // falls through into MBB and we can't understand the prior block's branch
1335      // condition.
1336      if (MBB->empty()) {
1337        bool PredHasNoFallThrough = TII->BlockHasNoFallThrough(PrevBB);
1338        if (PredHasNoFallThrough || !PriorUnAnalyzable ||
1339            !PrevBB.isSuccessor(MBB)) {
1340          // If the prior block falls through into us, turn it into an
1341          // explicit branch to us to make updates simpler.
1342          if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) &&
1343              PriorTBB != MBB && PriorFBB != MBB) {
1344            if (PriorTBB == 0) {
1345              assert(PriorCond.empty() && PriorFBB == 0 &&
1346                     "Bad branch analysis");
1347              PriorTBB = MBB;
1348            } else {
1349              assert(PriorFBB == 0 && "Machine CFG out of date!");
1350              PriorFBB = MBB;
1351            }
1352            TII->RemoveBranch(PrevBB);
1353            TII->InsertBranch(PrevBB, PriorTBB, PriorFBB, PriorCond);
1354          }
1355
1356          // Iterate through all the predecessors, revectoring each in-turn.
1357          size_t PI = 0;
1358          bool DidChange = false;
1359          bool HasBranchToSelf = false;
1360          while(PI != MBB->pred_size()) {
1361            MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI);
1362            if (PMBB == MBB) {
1363              // If this block has an uncond branch to itself, leave it.
1364              ++PI;
1365              HasBranchToSelf = true;
1366            } else {
1367              DidChange = true;
1368              PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB);
1369              // If this change resulted in PMBB ending in a conditional
1370              // branch where both conditions go to the same destination,
1371              // change this to an unconditional branch (and fix the CFG).
1372              MachineBasicBlock *NewCurTBB = 0, *NewCurFBB = 0;
1373              SmallVector<MachineOperand, 4> NewCurCond;
1374              bool NewCurUnAnalyzable = TII->AnalyzeBranch(*PMBB, NewCurTBB,
1375                      NewCurFBB, NewCurCond, true);
1376              if (!NewCurUnAnalyzable && NewCurTBB && NewCurTBB == NewCurFBB) {
1377                TII->RemoveBranch(*PMBB);
1378                NewCurCond.clear();
1379                TII->InsertBranch(*PMBB, NewCurTBB, 0, NewCurCond);
1380                MadeChange = true;
1381                ++NumBranchOpts;
1382                PMBB->CorrectExtraCFGEdges(NewCurTBB, 0, false);
1383              }
1384            }
1385          }
1386
1387          // Change any jumptables to go to the new MBB.
1388          MF.getJumpTableInfo()->ReplaceMBBInJumpTables(MBB, CurTBB);
1389          if (DidChange) {
1390            ++NumBranchOpts;
1391            MadeChange = true;
1392            if (!HasBranchToSelf) return MadeChange;
1393          }
1394        }
1395      }
1396
1397      // Add the branch back if the block is more than just an uncond branch.
1398      TII->InsertBranch(*MBB, CurTBB, 0, CurCond);
1399    }
1400  }
1401
1402  // Now we know that there was no fall-through into this block, check to
1403  // see if it has a fall-through into its successor.
1404  bool CurFallsThru = CanFallThrough(MBB, CurUnAnalyzable, CurTBB, CurFBB,
1405                                     CurCond);
1406  bool PrevFallsThru = CanFallThrough(&PrevBB, PriorUnAnalyzable,
1407                                      PriorTBB, PriorFBB, PriorCond);
1408
1409  // If this block is small, unconditionally branched to, and does not
1410  // fall through, tail-duplicate its instructions into its predecessors
1411  // to eliminate a (dynamic) branch.
1412  if (!CurFallsThru)
1413    if (TailDuplicate(MBB, PrevFallsThru, MF)) {
1414      MadeChange = true;
1415      return MadeChange;
1416    }
1417
1418  // If the prior block doesn't fall through into this block, and if this
1419  // block doesn't fall through into some other block, see if we can find a
1420  // place to move this block where a fall-through will happen.
1421  if (!PrevFallsThru) {
1422    if (!MBB->isLandingPad()) {
1423      // Check all the predecessors of this block.  If one of them has no fall
1424      // throughs, move this block right after it.
1425      for (MachineBasicBlock::pred_iterator PI = MBB->pred_begin(),
1426           E = MBB->pred_end(); PI != E; ++PI) {
1427        // Analyze the branch at the end of the pred.
1428        MachineBasicBlock *PredBB = *PI;
1429        MachineFunction::iterator PredFallthrough = PredBB; ++PredFallthrough;
1430        MachineBasicBlock *PredTBB, *PredFBB;
1431        SmallVector<MachineOperand, 4> PredCond;
1432        if (PredBB != MBB && !CanFallThrough(PredBB) &&
1433            !TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true)
1434            && (!CurFallsThru || !CurTBB || !CurFBB)
1435            && (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) {
1436          // If the current block doesn't fall through, just move it.
1437          // If the current block can fall through and does not end with a
1438          // conditional branch, we need to append an unconditional jump to
1439          // the (current) next block.  To avoid a possible compile-time
1440          // infinite loop, move blocks only backward in this case.
1441          // Also, if there are already 2 branches here, we cannot add a third;
1442          // this means we have the case
1443          // Bcc next
1444          // B elsewhere
1445          // next:
1446          if (CurFallsThru) {
1447            MachineBasicBlock *NextBB = next(MachineFunction::iterator(MBB));
1448            CurCond.clear();
1449            TII->InsertBranch(*MBB, NextBB, 0, CurCond);
1450          }
1451          MBB->moveAfter(PredBB);
1452          MadeChange = true;
1453          goto ReoptimizeBlock;
1454        }
1455      }
1456    }
1457
1458    if (!CurFallsThru) {
1459      // Check all successors to see if we can move this block before it.
1460      for (MachineBasicBlock::succ_iterator SI = MBB->succ_begin(),
1461           E = MBB->succ_end(); SI != E; ++SI) {
1462        // Analyze the branch at the end of the block before the succ.
1463        MachineBasicBlock *SuccBB = *SI;
1464        MachineFunction::iterator SuccPrev = SuccBB; --SuccPrev;
1465
1466        // If this block doesn't already fall-through to that successor, and if
1467        // the succ doesn't already have a block that can fall through into it,
1468        // and if the successor isn't an EH destination, we can arrange for the
1469        // fallthrough to happen.
1470        if (SuccBB != MBB && &*SuccPrev != MBB &&
1471            !CanFallThrough(SuccPrev) && !CurUnAnalyzable &&
1472            !SuccBB->isLandingPad()) {
1473          MBB->moveBefore(SuccBB);
1474          MadeChange = true;
1475          goto ReoptimizeBlock;
1476        }
1477      }
1478
1479      // Okay, there is no really great place to put this block.  If, however,
1480      // the block before this one would be a fall-through if this block were
1481      // removed, move this block to the end of the function.
1482      MachineBasicBlock *PrevTBB, *PrevFBB;
1483      SmallVector<MachineOperand, 4> PrevCond;
1484      if (FallThrough != MF.end() &&
1485          !TII->AnalyzeBranch(PrevBB, PrevTBB, PrevFBB, PrevCond, true) &&
1486          PrevBB.isSuccessor(FallThrough)) {
1487        MBB->moveAfter(--MF.end());
1488        MadeChange = true;
1489        return MadeChange;
1490      }
1491    }
1492  }
1493
1494  return MadeChange;
1495}
1496