LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BranchFolding.cpp
Go to the documentation of this file.
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/ADT/STLExtras.h"
22 #include "llvm/ADT/SmallSet.h"
23 #include "llvm/ADT/Statistic.h"
28 #include "llvm/CodeGen/Passes.h"
30 #include "llvm/IR/Function.h"
32 #include "llvm/Support/Debug.h"
38 #include <algorithm>
39 using namespace llvm;
40 
41 STATISTIC(NumDeadBlocks, "Number of dead blocks removed");
42 STATISTIC(NumBranchOpts, "Number of branches optimized");
43 STATISTIC(NumTailMerge , "Number of block tails merged");
44 STATISTIC(NumHoist , "Number of times common instructions are hoisted");
45 
46 static cl::opt<cl::boolOrDefault> FlagEnableTailMerge("enable-tail-merge",
48 
49 // Throttle for huge numbers of predecessors (compile speed problems)
50 static cl::opt<unsigned>
51 TailMergeThreshold("tail-merge-threshold",
52  cl::desc("Max number of predecessors to consider tail merging"),
53  cl::init(150), cl::Hidden);
54 
55 // Heuristic for tail merging (and, inversely, tail duplication).
56 // TODO: This should be replaced with a target query.
57 static cl::opt<unsigned>
58 TailMergeSize("tail-merge-size",
59  cl::desc("Min number of instructions to consider tail merging"),
60  cl::init(3), cl::Hidden);
61 
62 namespace {
63  /// BranchFolderPass - Wrap branch folder in a machine function pass.
64  class BranchFolderPass : public MachineFunctionPass {
65  public:
66  static char ID;
67  explicit BranchFolderPass(): MachineFunctionPass(ID) {}
68 
69  virtual bool runOnMachineFunction(MachineFunction &MF);
70 
71  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
74  }
75  };
76 }
77 
78 char BranchFolderPass::ID = 0;
80 
81 INITIALIZE_PASS(BranchFolderPass, "branch-folder",
82  "Control Flow Optimizer", false, false)
83 
84 bool BranchFolderPass::runOnMachineFunction(MachineFunction &MF) {
85  TargetPassConfig *PassConfig = &getAnalysis<TargetPassConfig>();
86  BranchFolder Folder(PassConfig->getEnableTailMerge(), /*CommonHoist=*/true);
87  return Folder.OptimizeFunction(MF,
88  MF.getTarget().getInstrInfo(),
89  MF.getTarget().getRegisterInfo(),
90  getAnalysisIfAvailable<MachineModuleInfo>());
91 }
92 
93 
94 BranchFolder::BranchFolder(bool defaultEnableTailMerge, bool CommonHoist) {
95  switch (FlagEnableTailMerge) {
96  case cl::BOU_UNSET: EnableTailMerge = defaultEnableTailMerge; break;
97  case cl::BOU_TRUE: EnableTailMerge = true; break;
98  case cl::BOU_FALSE: EnableTailMerge = false; break;
99  }
100 
101  EnableHoistCommonCode = CommonHoist;
102 }
103 
104 /// RemoveDeadBlock - Remove the specified dead machine basic block from the
105 /// function, updating the CFG.
106 void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) {
107  assert(MBB->pred_empty() && "MBB must be dead!");
108  DEBUG(dbgs() << "\nRemoving MBB: " << *MBB);
109 
110  MachineFunction *MF = MBB->getParent();
111  // drop all successors.
112  while (!MBB->succ_empty())
113  MBB->removeSuccessor(MBB->succ_end()-1);
114 
115  // Avoid matching if this pointer gets reused.
116  TriedMerging.erase(MBB);
117 
118  // Remove the block.
119  MF->erase(MBB);
120 }
121 
122 /// OptimizeImpDefsBlock - If a basic block is just a bunch of implicit_def
123 /// followed by terminators, and if the implicitly defined registers are not
124 /// used by the terminators, remove those implicit_def's. e.g.
125 /// BB1:
126 /// r0 = implicit_def
127 /// r1 = implicit_def
128 /// br
129 /// This block can be optimized away later if the implicit instructions are
130 /// removed.
131 bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) {
132  SmallSet<unsigned, 4> ImpDefRegs;
134  while (I != MBB->end()) {
135  if (!I->isImplicitDef())
136  break;
137  unsigned Reg = I->getOperand(0).getReg();
138  for (MCSubRegIterator SubRegs(Reg, TRI, /*IncludeSelf=*/true);
139  SubRegs.isValid(); ++SubRegs)
140  ImpDefRegs.insert(*SubRegs);
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.
175  const TargetInstrInfo *tii,
176  const TargetRegisterInfo *tri,
177  MachineModuleInfo *mmi) {
178  if (!tii) return false;
179 
180  TriedMerging.clear();
181 
182  TII = tii;
183  TRI = tri;
184  MMI = mmi;
185  RS = NULL;
186 
187  // Use a RegScavenger to help update liveness when required.
189  if (MRI.tracksLiveness() && TRI->trackLivenessAfterRegAlloc(MF))
190  RS = new RegScavenger();
191  else
192  MRI.invalidateLiveness();
193 
194  // Fix CFG. The later algorithms expect it to be right.
195  bool MadeChange = false;
196  for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; I++) {
197  MachineBasicBlock *MBB = I, *TBB = 0, *FBB = 0;
199  if (!TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true))
200  MadeChange |= MBB->CorrectExtraCFGEdges(TBB, FBB, !Cond.empty());
201  MadeChange |= OptimizeImpDefsBlock(MBB);
202  }
203 
204  bool MadeChangeThisIteration = true;
205  while (MadeChangeThisIteration) {
206  MadeChangeThisIteration = TailMergeBlocks(MF);
207  MadeChangeThisIteration |= OptimizeBranches(MF);
208  if (EnableHoistCommonCode)
209  MadeChangeThisIteration |= HoistCommonCode(MF);
210  MadeChange |= MadeChangeThisIteration;
211  }
212 
213  // See if any jump tables have become dead as the code generator
214  // did its thing.
216  if (JTI == 0) {
217  delete RS;
218  return MadeChange;
219  }
220 
221  // Walk the function to find jump tables that are live.
222  BitVector JTIsLive(JTI->getJumpTables().size());
223  for (MachineFunction::iterator BB = MF.begin(), E = MF.end();
224  BB != E; ++BB) {
225  for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end();
226  I != E; ++I)
227  for (unsigned op = 0, e = I->getNumOperands(); op != e; ++op) {
228  MachineOperand &Op = I->getOperand(op);
229  if (!Op.isJTI()) continue;
230 
231  // Remember that this JT is live.
232  JTIsLive.set(Op.getIndex());
233  }
234  }
235 
236  // Finally, remove dead jump tables. This happens when the
237  // indirect jump was unreachable (and thus deleted).
238  for (unsigned i = 0, e = JTIsLive.size(); i != e; ++i)
239  if (!JTIsLive.test(i)) {
240  JTI->RemoveJumpTable(i);
241  MadeChange = true;
242  }
243 
244  delete RS;
245  return MadeChange;
246 }
247 
248 //===----------------------------------------------------------------------===//
249 // Tail Merging of Blocks
250 //===----------------------------------------------------------------------===//
251 
252 /// HashMachineInstr - Compute a hash value for MI and its operands.
253 static unsigned HashMachineInstr(const MachineInstr *MI) {
254  unsigned Hash = MI->getOpcode();
255  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
256  const MachineOperand &Op = MI->getOperand(i);
257 
258  // Merge in bits from the operand if easy.
259  unsigned OperandHash = 0;
260  switch (Op.getType()) {
261  case MachineOperand::MO_Register: OperandHash = Op.getReg(); break;
262  case MachineOperand::MO_Immediate: OperandHash = Op.getImm(); break;
264  OperandHash = Op.getMBB()->getNumber();
265  break;
269  OperandHash = Op.getIndex();
270  break;
273  // Global address / external symbol are too hard, don't bother, but do
274  // pull in the offset.
275  OperandHash = Op.getOffset();
276  break;
277  default: break;
278  }
279 
280  Hash += ((OperandHash << 3) | Op.getType()) << (i&31);
281  }
282  return Hash;
283 }
284 
285 /// HashEndOfMBB - Hash the last instruction in the MBB.
286 static unsigned HashEndOfMBB(const MachineBasicBlock *MBB) {
288  if (I == MBB->begin())
289  return 0; // Empty MBB.
290 
291  --I;
292  // Skip debug info so it will not affect codegen.
293  while (I->isDebugValue()) {
294  if (I==MBB->begin())
295  return 0; // MBB empty except for debug info.
296  --I;
297  }
298 
299  return HashMachineInstr(I);
300 }
301 
302 /// ComputeCommonTailLength - Given two machine basic blocks, compute the number
303 /// of instructions they actually have in common together at their end. Return
304 /// iterators for the first shared instruction in each block.
306  MachineBasicBlock *MBB2,
309  I1 = MBB1->end();
310  I2 = MBB2->end();
311 
312  unsigned TailLen = 0;
313  while (I1 != MBB1->begin() && I2 != MBB2->begin()) {
314  --I1; --I2;
315  // Skip debugging pseudos; necessary to avoid changing the code.
316  while (I1->isDebugValue()) {
317  if (I1==MBB1->begin()) {
318  while (I2->isDebugValue()) {
319  if (I2==MBB2->begin())
320  // I1==DBG at begin; I2==DBG at begin
321  return TailLen;
322  --I2;
323  }
324  ++I2;
325  // I1==DBG at begin; I2==non-DBG, or first of DBGs not at begin
326  return TailLen;
327  }
328  --I1;
329  }
330  // I1==first (untested) non-DBG preceding known match
331  while (I2->isDebugValue()) {
332  if (I2==MBB2->begin()) {
333  ++I1;
334  // I1==non-DBG, or first of DBGs not at begin; I2==DBG at begin
335  return TailLen;
336  }
337  --I2;
338  }
339  // I1, I2==first (untested) non-DBGs preceding known match
340  if (!I1->isIdenticalTo(I2) ||
341  // FIXME: This check is dubious. It's used to get around a problem where
342  // people incorrectly expect inline asm directives to remain in the same
343  // relative order. This is untenable because normal compiler
344  // optimizations (like this one) may reorder and/or merge these
345  // directives.
346  I1->isInlineAsm()) {
347  ++I1; ++I2;
348  break;
349  }
350  ++TailLen;
351  }
352  // Back past possible debugging pseudos at beginning of block. This matters
353  // when one block differs from the other only by whether debugging pseudos
354  // are present at the beginning. (This way, the various checks later for
355  // I1==MBB1->begin() work as expected.)
356  if (I1 == MBB1->begin() && I2 != MBB2->begin()) {
357  --I2;
358  while (I2->isDebugValue()) {
359  if (I2 == MBB2->begin())
360  return TailLen;
361  --I2;
362  }
363  ++I2;
364  }
365  if (I2 == MBB2->begin() && I1 != MBB1->begin()) {
366  --I1;
367  while (I1->isDebugValue()) {
368  if (I1 == MBB1->begin())
369  return TailLen;
370  --I1;
371  }
372  ++I1;
373  }
374  return TailLen;
375 }
376 
377 void BranchFolder::MaintainLiveIns(MachineBasicBlock *CurMBB,
378  MachineBasicBlock *NewMBB) {
379  if (RS) {
380  RS->enterBasicBlock(CurMBB);
381  if (!CurMBB->empty())
382  RS->forward(prior(CurMBB->end()));
383  BitVector RegsLiveAtExit(TRI->getNumRegs());
384  RS->getRegsUsed(RegsLiveAtExit, false);
385  for (unsigned int i = 0, e = TRI->getNumRegs(); i != e; i++)
386  if (RegsLiveAtExit[i])
387  NewMBB->addLiveIn(i);
388  }
389 }
390 
391 /// ReplaceTailWithBranchTo - Delete the instruction OldInst and everything
392 /// after it, replacing it with an unconditional branch to NewDest.
393 void BranchFolder::ReplaceTailWithBranchTo(MachineBasicBlock::iterator OldInst,
394  MachineBasicBlock *NewDest) {
395  MachineBasicBlock *CurMBB = OldInst->getParent();
396 
397  TII->ReplaceTailWithBranchTo(OldInst, NewDest);
398 
399  // For targets that use the register scavenger, we must maintain LiveIns.
400  MaintainLiveIns(CurMBB, NewDest);
401 
402  ++NumTailMerge;
403 }
404 
405 /// SplitMBBAt - Given a machine basic block and an iterator into it, split the
406 /// MBB so that the part before the iterator falls into the part starting at the
407 /// iterator. This returns the new MBB.
408 MachineBasicBlock *BranchFolder::SplitMBBAt(MachineBasicBlock &CurMBB,
410  const BasicBlock *BB) {
411  if (!TII->isLegalToSplitMBBAt(CurMBB, BBI1))
412  return 0;
413 
414  MachineFunction &MF = *CurMBB.getParent();
415 
416  // Create the fall-through block.
417  MachineFunction::iterator MBBI = &CurMBB;
419  CurMBB.getParent()->insert(++MBBI, NewMBB);
420 
421  // Move all the successors of this block to the specified block.
422  NewMBB->transferSuccessors(&CurMBB);
423 
424  // Add an edge from CurMBB to NewMBB for the fall-through.
425  CurMBB.addSuccessor(NewMBB);
426 
427  // Splice the code over.
428  NewMBB->splice(NewMBB->end(), &CurMBB, BBI1, CurMBB.end());
429 
430  // For targets that use the register scavenger, we must maintain LiveIns.
431  MaintainLiveIns(&CurMBB, NewMBB);
432 
433  return NewMBB;
434 }
435 
436 /// EstimateRuntime - Make a rough estimate for how long it will take to run
437 /// the specified code.
440  unsigned Time = 0;
441  for (; I != E; ++I) {
442  if (I->isDebugValue())
443  continue;
444  if (I->isCall())
445  Time += 10;
446  else if (I->mayLoad() || I->mayStore())
447  Time += 2;
448  else
449  ++Time;
450  }
451  return Time;
452 }
453 
454 // CurMBB needs to add an unconditional branch to SuccMBB (we removed these
455 // branches temporarily for tail merging). In the case where CurMBB ends
456 // with a conditional branch to the next block, optimize by reversing the
457 // test and conditionally branching to SuccMBB instead.
458 static void FixTail(MachineBasicBlock *CurMBB, MachineBasicBlock *SuccBB,
459  const TargetInstrInfo *TII) {
460  MachineFunction *MF = CurMBB->getParent();
462  MachineBasicBlock *TBB = 0, *FBB = 0;
464  DebugLoc dl; // FIXME: this is nowhere
465  if (I != MF->end() &&
466  !TII->AnalyzeBranch(*CurMBB, TBB, FBB, Cond, true)) {
467  MachineBasicBlock *NextBB = I;
468  if (TBB == NextBB && !Cond.empty() && !FBB) {
469  if (!TII->ReverseBranchCondition(Cond)) {
470  TII->RemoveBranch(*CurMBB);
471  TII->InsertBranch(*CurMBB, SuccBB, NULL, Cond, dl);
472  return;
473  }
474  }
475  }
476  TII->InsertBranch(*CurMBB, SuccBB, NULL,
478 }
479 
480 bool
481 BranchFolder::MergePotentialsElt::operator<(const MergePotentialsElt &o) const {
482  if (getHash() < o.getHash())
483  return true;
484  if (getHash() > o.getHash())
485  return false;
486  if (getBlock()->getNumber() < o.getBlock()->getNumber())
487  return true;
488  if (getBlock()->getNumber() > o.getBlock()->getNumber())
489  return false;
490  // _GLIBCXX_DEBUG checks strict weak ordering, which involves comparing
491  // an object with itself.
492 #ifndef _GLIBCXX_DEBUG
493  llvm_unreachable("Predecessor appears twice");
494 #else
495  return false;
496 #endif
497 }
498 
499 /// CountTerminators - Count the number of terminators in the given
500 /// block and set I to the position of the first non-terminator, if there
501 /// is one, or MBB->end() otherwise.
502 static unsigned CountTerminators(MachineBasicBlock *MBB,
504  I = MBB->end();
505  unsigned NumTerms = 0;
506  for (;;) {
507  if (I == MBB->begin()) {
508  I = MBB->end();
509  break;
510  }
511  --I;
512  if (!I->isTerminator()) break;
513  ++NumTerms;
514  }
515  return NumTerms;
516 }
517 
518 /// ProfitableToMerge - Check if two machine basic blocks have a common tail
519 /// and decide if it would be profitable to merge those tails. Return the
520 /// length of the common tail and iterators to the first common instruction
521 /// in each block.
523  MachineBasicBlock *MBB2,
524  unsigned minCommonTailLength,
525  unsigned &CommonTailLen,
528  MachineBasicBlock *SuccBB,
529  MachineBasicBlock *PredBB) {
530  CommonTailLen = ComputeCommonTailLength(MBB1, MBB2, I1, I2);
531  if (CommonTailLen == 0)
532  return false;
533  DEBUG(dbgs() << "Common tail length of BB#" << MBB1->getNumber()
534  << " and BB#" << MBB2->getNumber() << " is " << CommonTailLen
535  << '\n');
536 
537  // It's almost always profitable to merge any number of non-terminator
538  // instructions with the block that falls through into the common successor.
539  if (MBB1 == PredBB || MBB2 == PredBB) {
541  unsigned NumTerms = CountTerminators(MBB1 == PredBB ? MBB2 : MBB1, I);
542  if (CommonTailLen > NumTerms)
543  return true;
544  }
545 
546  // If one of the blocks can be completely merged and happens to be in
547  // a position where the other could fall through into it, merge any number
548  // of instructions, because it can be done without a branch.
549  // TODO: If the blocks are not adjacent, move one of them so that they are?
550  if (MBB1->isLayoutSuccessor(MBB2) && I2 == MBB2->begin())
551  return true;
552  if (MBB2->isLayoutSuccessor(MBB1) && I1 == MBB1->begin())
553  return true;
554 
555  // If both blocks have an unconditional branch temporarily stripped out,
556  // count that as an additional common instruction for the following
557  // heuristics.
558  unsigned EffectiveTailLen = CommonTailLen;
559  if (SuccBB && MBB1 != PredBB && MBB2 != PredBB &&
560  !MBB1->back().isBarrier() &&
561  !MBB2->back().isBarrier())
562  ++EffectiveTailLen;
563 
564  // Check if the common tail is long enough to be worthwhile.
565  if (EffectiveTailLen >= minCommonTailLength)
566  return true;
567 
568  // If we are optimizing for code size, 2 instructions in common is enough if
569  // we don't have to split a block. At worst we will be introducing 1 new
570  // branch instruction, which is likely to be smaller than the 2
571  // instructions that would be deleted in the merge.
572  MachineFunction *MF = MBB1->getParent();
573  if (EffectiveTailLen >= 2 &&
574  MF->getFunction()->getAttributes().
575  hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeForSize) &&
576  (I1 == MBB1->begin() || I2 == MBB2->begin()))
577  return true;
578 
579  return false;
580 }
581 
582 /// ComputeSameTails - Look through all the blocks in MergePotentials that have
583 /// hash CurHash (guaranteed to match the last element). Build the vector
584 /// SameTails of all those that have the (same) largest number of instructions
585 /// in common of any pair of these blocks. SameTails entries contain an
586 /// iterator into MergePotentials (from which the MachineBasicBlock can be
587 /// found) and a MachineBasicBlock::iterator into that MBB indicating the
588 /// instruction where the matching code sequence begins.
589 /// Order of elements in SameTails is the reverse of the order in which
590 /// those blocks appear in MergePotentials (where they are not necessarily
591 /// consecutive).
592 unsigned BranchFolder::ComputeSameTails(unsigned CurHash,
593  unsigned minCommonTailLength,
594  MachineBasicBlock *SuccBB,
595  MachineBasicBlock *PredBB) {
596  unsigned maxCommonTailLength = 0U;
597  SameTails.clear();
598  MachineBasicBlock::iterator TrialBBI1, TrialBBI2;
599  MPIterator HighestMPIter = prior(MergePotentials.end());
600  for (MPIterator CurMPIter = prior(MergePotentials.end()),
601  B = MergePotentials.begin();
602  CurMPIter != B && CurMPIter->getHash() == CurHash;
603  --CurMPIter) {
604  for (MPIterator I = prior(CurMPIter); I->getHash() == CurHash ; --I) {
605  unsigned CommonTailLen;
606  if (ProfitableToMerge(CurMPIter->getBlock(), I->getBlock(),
607  minCommonTailLength,
608  CommonTailLen, TrialBBI1, TrialBBI2,
609  SuccBB, PredBB)) {
610  if (CommonTailLen > maxCommonTailLength) {
611  SameTails.clear();
612  maxCommonTailLength = CommonTailLen;
613  HighestMPIter = CurMPIter;
614  SameTails.push_back(SameTailElt(CurMPIter, TrialBBI1));
615  }
616  if (HighestMPIter == CurMPIter &&
617  CommonTailLen == maxCommonTailLength)
618  SameTails.push_back(SameTailElt(I, TrialBBI2));
619  }
620  if (I == B)
621  break;
622  }
623  }
624  return maxCommonTailLength;
625 }
626 
627 /// RemoveBlocksWithHash - Remove all blocks with hash CurHash from
628 /// MergePotentials, restoring branches at ends of blocks as appropriate.
629 void BranchFolder::RemoveBlocksWithHash(unsigned CurHash,
630  MachineBasicBlock *SuccBB,
631  MachineBasicBlock *PredBB) {
632  MPIterator CurMPIter, B;
633  for (CurMPIter = prior(MergePotentials.end()), B = MergePotentials.begin();
634  CurMPIter->getHash() == CurHash;
635  --CurMPIter) {
636  // Put the unconditional branch back, if we need one.
637  MachineBasicBlock *CurMBB = CurMPIter->getBlock();
638  if (SuccBB && CurMBB != PredBB)
639  FixTail(CurMBB, SuccBB, TII);
640  if (CurMPIter == B)
641  break;
642  }
643  if (CurMPIter->getHash() != CurHash)
644  CurMPIter++;
645  MergePotentials.erase(CurMPIter, MergePotentials.end());
646 }
647 
648 /// CreateCommonTailOnlyBlock - None of the blocks to be tail-merged consist
649 /// only of the common tail. Create a block that does by splitting one.
650 bool BranchFolder::CreateCommonTailOnlyBlock(MachineBasicBlock *&PredBB,
651  MachineBasicBlock *SuccBB,
652  unsigned maxCommonTailLength,
653  unsigned &commonTailIndex) {
654  commonTailIndex = 0;
655  unsigned TimeEstimate = ~0U;
656  for (unsigned i = 0, e = SameTails.size(); i != e; ++i) {
657  // Use PredBB if possible; that doesn't require a new branch.
658  if (SameTails[i].getBlock() == PredBB) {
659  commonTailIndex = i;
660  break;
661  }
662  // Otherwise, make a (fairly bogus) choice based on estimate of
663  // how long it will take the various blocks to execute.
664  unsigned t = EstimateRuntime(SameTails[i].getBlock()->begin(),
665  SameTails[i].getTailStartPos());
666  if (t <= TimeEstimate) {
667  TimeEstimate = t;
668  commonTailIndex = i;
669  }
670  }
671 
673  SameTails[commonTailIndex].getTailStartPos();
674  MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock();
675 
676  // If the common tail includes any debug info we will take it pretty
677  // randomly from one of the inputs. Might be better to remove it?
678  DEBUG(dbgs() << "\nSplitting BB#" << MBB->getNumber() << ", size "
679  << maxCommonTailLength);
680 
681  // If the split block unconditionally falls-thru to SuccBB, it will be
682  // merged. In control flow terms it should then take SuccBB's name. e.g. If
683  // SuccBB is an inner loop, the common tail is still part of the inner loop.
684  const BasicBlock *BB = (SuccBB && MBB->succ_size() == 1) ?
685  SuccBB->getBasicBlock() : MBB->getBasicBlock();
686  MachineBasicBlock *newMBB = SplitMBBAt(*MBB, BBI, BB);
687  if (!newMBB) {
688  DEBUG(dbgs() << "... failed!");
689  return false;
690  }
691 
692  SameTails[commonTailIndex].setBlock(newMBB);
693  SameTails[commonTailIndex].setTailStartPos(newMBB->begin());
694 
695  // If we split PredBB, newMBB is the new predecessor.
696  if (PredBB == MBB)
697  PredBB = newMBB;
698 
699  return true;
700 }
701 
702 // See if any of the blocks in MergePotentials (which all have a common single
703 // successor, or all have no successor) can be tail-merged. If there is a
704 // successor, any blocks in MergePotentials that are not tail-merged and
705 // are not immediately before Succ must have an unconditional branch to
706 // Succ added (but the predecessor/successor lists need no adjustment).
707 // The lone predecessor of Succ that falls through into Succ,
708 // if any, is given in PredBB.
709 
710 bool BranchFolder::TryTailMergeBlocks(MachineBasicBlock *SuccBB,
711  MachineBasicBlock *PredBB) {
712  bool MadeChange = false;
713 
714  // Except for the special cases below, tail-merge if there are at least
715  // this many instructions in common.
716  unsigned minCommonTailLength = TailMergeSize;
717 
718  DEBUG(dbgs() << "\nTryTailMergeBlocks: ";
719  for (unsigned i = 0, e = MergePotentials.size(); i != e; ++i)
720  dbgs() << "BB#" << MergePotentials[i].getBlock()->getNumber()
721  << (i == e-1 ? "" : ", ");
722  dbgs() << "\n";
723  if (SuccBB) {
724  dbgs() << " with successor BB#" << SuccBB->getNumber() << '\n';
725  if (PredBB)
726  dbgs() << " which has fall-through from BB#"
727  << PredBB->getNumber() << "\n";
728  }
729  dbgs() << "Looking for common tails of at least "
730  << minCommonTailLength << " instruction"
731  << (minCommonTailLength == 1 ? "" : "s") << '\n';
732  );
733 
734  // Sort by hash value so that blocks with identical end sequences sort
735  // together.
736  std::stable_sort(MergePotentials.begin(), MergePotentials.end());
737 
738  // Walk through equivalence sets looking for actual exact matches.
739  while (MergePotentials.size() > 1) {
740  unsigned CurHash = MergePotentials.back().getHash();
741 
742  // Build SameTails, identifying the set of blocks with this hash code
743  // and with the maximum number of instructions in common.
744  unsigned maxCommonTailLength = ComputeSameTails(CurHash,
745  minCommonTailLength,
746  SuccBB, PredBB);
747 
748  // If we didn't find any pair that has at least minCommonTailLength
749  // instructions in common, remove all blocks with this hash code and retry.
750  if (SameTails.empty()) {
751  RemoveBlocksWithHash(CurHash, SuccBB, PredBB);
752  continue;
753  }
754 
755  // If one of the blocks is the entire common tail (and not the entry
756  // block, which we can't jump to), we can treat all blocks with this same
757  // tail at once. Use PredBB if that is one of the possibilities, as that
758  // will not introduce any extra branches.
759  MachineBasicBlock *EntryBB = MergePotentials.begin()->getBlock()->
760  getParent()->begin();
761  unsigned commonTailIndex = SameTails.size();
762  // If there are two blocks, check to see if one can be made to fall through
763  // into the other.
764  if (SameTails.size() == 2 &&
765  SameTails[0].getBlock()->isLayoutSuccessor(SameTails[1].getBlock()) &&
766  SameTails[1].tailIsWholeBlock())
767  commonTailIndex = 1;
768  else if (SameTails.size() == 2 &&
769  SameTails[1].getBlock()->isLayoutSuccessor(
770  SameTails[0].getBlock()) &&
771  SameTails[0].tailIsWholeBlock())
772  commonTailIndex = 0;
773  else {
774  // Otherwise just pick one, favoring the fall-through predecessor if
775  // there is one.
776  for (unsigned i = 0, e = SameTails.size(); i != e; ++i) {
777  MachineBasicBlock *MBB = SameTails[i].getBlock();
778  if (MBB == EntryBB && SameTails[i].tailIsWholeBlock())
779  continue;
780  if (MBB == PredBB) {
781  commonTailIndex = i;
782  break;
783  }
784  if (SameTails[i].tailIsWholeBlock())
785  commonTailIndex = i;
786  }
787  }
788 
789  if (commonTailIndex == SameTails.size() ||
790  (SameTails[commonTailIndex].getBlock() == PredBB &&
791  !SameTails[commonTailIndex].tailIsWholeBlock())) {
792  // None of the blocks consist entirely of the common tail.
793  // Split a block so that one does.
794  if (!CreateCommonTailOnlyBlock(PredBB, SuccBB,
795  maxCommonTailLength, commonTailIndex)) {
796  RemoveBlocksWithHash(CurHash, SuccBB, PredBB);
797  continue;
798  }
799  }
800 
801  MachineBasicBlock *MBB = SameTails[commonTailIndex].getBlock();
802  // MBB is common tail. Adjust all other BB's to jump to this one.
803  // Traversal must be forwards so erases work.
804  DEBUG(dbgs() << "\nUsing common tail in BB#" << MBB->getNumber()
805  << " for ");
806  for (unsigned int i=0, e = SameTails.size(); i != e; ++i) {
807  if (commonTailIndex == i)
808  continue;
809  DEBUG(dbgs() << "BB#" << SameTails[i].getBlock()->getNumber()
810  << (i == e-1 ? "" : ", "));
811  // Hack the end off BB i, making it jump to BB commonTailIndex instead.
812  ReplaceTailWithBranchTo(SameTails[i].getTailStartPos(), MBB);
813  // BB i is no longer a predecessor of SuccBB; remove it from the worklist.
814  MergePotentials.erase(SameTails[i].getMPIter());
815  }
816  DEBUG(dbgs() << "\n");
817  // We leave commonTailIndex in the worklist in case there are other blocks
818  // that match it with a smaller number of instructions.
819  MadeChange = true;
820  }
821  return MadeChange;
822 }
823 
824 bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
825  bool MadeChange = false;
826  if (!EnableTailMerge) return MadeChange;
827 
828  // First find blocks with no successors.
829  MergePotentials.clear();
830  for (MachineFunction::iterator I = MF.begin(), E = MF.end();
831  I != E && MergePotentials.size() < TailMergeThreshold; ++I) {
832  if (TriedMerging.count(I))
833  continue;
834  if (I->succ_empty())
835  MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(I), I));
836  }
837 
838  // If this is a large problem, avoid visiting the same basic blocks
839  // multiple times.
840  if (MergePotentials.size() == TailMergeThreshold)
841  for (unsigned i = 0, e = MergePotentials.size(); i != e; ++i)
842  TriedMerging.insert(MergePotentials[i].getBlock());
843 
844  // See if we can do any tail merging on those.
845  if (MergePotentials.size() >= 2)
846  MadeChange |= TryTailMergeBlocks(NULL, NULL);
847 
848  // Look at blocks (IBB) with multiple predecessors (PBB).
849  // We change each predecessor to a canonical form, by
850  // (1) temporarily removing any unconditional branch from the predecessor
851  // to IBB, and
852  // (2) alter conditional branches so they branch to the other block
853  // not IBB; this may require adding back an unconditional branch to IBB
854  // later, where there wasn't one coming in. E.g.
855  // Bcc IBB
856  // fallthrough to QBB
857  // here becomes
858  // Bncc QBB
859  // with a conceptual B to IBB after that, which never actually exists.
860  // With those changes, we see whether the predecessors' tails match,
861  // and merge them if so. We change things out of canonical form and
862  // back to the way they were later in the process. (OptimizeBranches
863  // would undo some of this, but we can't use it, because we'd get into
864  // a compile-time infinite loop repeatedly doing and undoing the same
865  // transformations.)
866 
867  for (MachineFunction::iterator I = llvm::next(MF.begin()), E = MF.end();
868  I != E; ++I) {
869  if (I->pred_size() < 2) continue;
871  MachineBasicBlock *IBB = I;
872  MachineBasicBlock *PredBB = prior(I);
873  MergePotentials.clear();
874  for (MachineBasicBlock::pred_iterator P = I->pred_begin(),
875  E2 = I->pred_end();
876  P != E2 && MergePotentials.size() < TailMergeThreshold; ++P) {
877  MachineBasicBlock *PBB = *P;
878  if (TriedMerging.count(PBB))
879  continue;
880 
881  // Skip blocks that loop to themselves, can't tail merge these.
882  if (PBB == IBB)
883  continue;
884 
885  // Visit each predecessor only once.
886  if (!UniquePreds.insert(PBB))
887  continue;
888 
889  // Skip blocks which may jump to a landing pad. Can't tail merge these.
890  if (PBB->getLandingPadSuccessor())
891  continue;
892 
893  MachineBasicBlock *TBB = 0, *FBB = 0;
895  if (!TII->AnalyzeBranch(*PBB, TBB, FBB, Cond, true)) {
896  // Failing case: IBB is the target of a cbr, and we cannot reverse the
897  // branch.
898  SmallVector<MachineOperand, 4> NewCond(Cond);
899  if (!Cond.empty() && TBB == IBB) {
900  if (TII->ReverseBranchCondition(NewCond))
901  continue;
902  // This is the QBB case described above
903  if (!FBB)
905  }
906 
907  // Failing case: the only way IBB can be reached from PBB is via
908  // exception handling. Happens for landing pads. Would be nice to have
909  // a bit in the edge so we didn't have to do all this.
910  if (IBB->isLandingPad()) {
911  MachineFunction::iterator IP = PBB; IP++;
912  MachineBasicBlock *PredNextBB = NULL;
913  if (IP != MF.end())
914  PredNextBB = IP;
915  if (TBB == NULL) {
916  if (IBB != PredNextBB) // fallthrough
917  continue;
918  } else if (FBB) {
919  if (TBB != IBB && FBB != IBB) // cbr then ubr
920  continue;
921  } else if (Cond.empty()) {
922  if (TBB != IBB) // ubr
923  continue;
924  } else {
925  if (TBB != IBB && IBB != PredNextBB) // cbr
926  continue;
927  }
928  }
929 
930  // Remove the unconditional branch at the end, if any.
931  if (TBB && (Cond.empty() || FBB)) {
932  DebugLoc dl; // FIXME: this is nowhere
933  TII->RemoveBranch(*PBB);
934  if (!Cond.empty())
935  // reinsert conditional branch only, for now
936  TII->InsertBranch(*PBB, (TBB == IBB) ? FBB : TBB, 0, NewCond, dl);
937  }
938 
939  MergePotentials.push_back(MergePotentialsElt(HashEndOfMBB(PBB), *P));
940  }
941  }
942 
943  // If this is a large problem, avoid visiting the same basic blocks multiple
944  // times.
945  if (MergePotentials.size() == TailMergeThreshold)
946  for (unsigned i = 0, e = MergePotentials.size(); i != e; ++i)
947  TriedMerging.insert(MergePotentials[i].getBlock());
948 
949  if (MergePotentials.size() >= 2)
950  MadeChange |= TryTailMergeBlocks(IBB, PredBB);
951 
952  // Reinsert an unconditional branch if needed. The 1 below can occur as a
953  // result of removing blocks in TryTailMergeBlocks.
954  PredBB = prior(I); // this may have been changed in TryTailMergeBlocks
955  if (MergePotentials.size() == 1 &&
956  MergePotentials.begin()->getBlock() != PredBB)
957  FixTail(MergePotentials.begin()->getBlock(), IBB, TII);
958  }
959 
960  return MadeChange;
961 }
962 
963 //===----------------------------------------------------------------------===//
964 // Branch Optimization
965 //===----------------------------------------------------------------------===//
966 
967 bool BranchFolder::OptimizeBranches(MachineFunction &MF) {
968  bool MadeChange = false;
969 
970  // Make sure blocks are numbered in order
971  MF.RenumberBlocks();
972 
973  for (MachineFunction::iterator I = llvm::next(MF.begin()), E = MF.end();
974  I != E; ) {
975  MachineBasicBlock *MBB = I++;
976  MadeChange |= OptimizeBlock(MBB);
977 
978  // If it is dead, remove it.
979  if (MBB->pred_empty()) {
980  RemoveDeadBlock(MBB);
981  MadeChange = true;
982  ++NumDeadBlocks;
983  }
984  }
985  return MadeChange;
986 }
987 
988 // Blocks should be considered empty if they contain only debug info;
989 // else the debug info would affect codegen.
990 static bool IsEmptyBlock(MachineBasicBlock *MBB) {
991  if (MBB->empty())
992  return true;
993  for (MachineBasicBlock::iterator MBBI = MBB->begin(), MBBE = MBB->end();
994  MBBI!=MBBE; ++MBBI) {
995  if (!MBBI->isDebugValue())
996  return false;
997  }
998  return true;
999 }
1000 
1001 // Blocks with only debug info and branches should be considered the same
1002 // as blocks with only branches.
1004  MachineBasicBlock::iterator MBBI, MBBE;
1005  for (MBBI = MBB->begin(), MBBE = MBB->end(); MBBI!=MBBE; ++MBBI) {
1006  if (!MBBI->isDebugValue())
1007  break;
1008  }
1009  return (MBBI->isBranch());
1010 }
1011 
1012 /// IsBetterFallthrough - Return true if it would be clearly better to
1013 /// fall-through to MBB1 than to fall through into MBB2. This has to return
1014 /// a strict ordering, returning true for both (MBB1,MBB2) and (MBB2,MBB1) will
1015 /// result in infinite loops.
1017  MachineBasicBlock *MBB2) {
1018  // Right now, we use a simple heuristic. If MBB2 ends with a call, and
1019  // MBB1 doesn't, we prefer to fall through into MBB1. This allows us to
1020  // optimize branches that branch to either a return block or an assert block
1021  // into a fallthrough to the return.
1022  if (IsEmptyBlock(MBB1) || IsEmptyBlock(MBB2)) return false;
1023 
1024  // If there is a clear successor ordering we make sure that one block
1025  // will fall through to the next
1026  if (MBB1->isSuccessor(MBB2)) return true;
1027  if (MBB2->isSuccessor(MBB1)) return false;
1028 
1029  // Neither block consists entirely of debug info (per IsEmptyBlock check),
1030  // so we needn't test for falling off the beginning here.
1031  MachineBasicBlock::iterator MBB1I = --MBB1->end();
1032  while (MBB1I->isDebugValue())
1033  --MBB1I;
1034  MachineBasicBlock::iterator MBB2I = --MBB2->end();
1035  while (MBB2I->isDebugValue())
1036  --MBB2I;
1037  return MBB2I->isCall() && !MBB1I->isCall();
1038 }
1039 
1040 /// getBranchDebugLoc - Find and return, if any, the DebugLoc of the branch
1041 /// instructions on the block. Always use the DebugLoc of the first
1042 /// branching instruction found unless its absent, in which case use the
1043 /// DebugLoc of the second if present.
1045  MachineBasicBlock::iterator I = MBB.end();
1046  if (I == MBB.begin())
1047  return DebugLoc();
1048  --I;
1049  while (I->isDebugValue() && I != MBB.begin())
1050  --I;
1051  if (I->isBranch())
1052  return I->getDebugLoc();
1053  return DebugLoc();
1054 }
1055 
1056 /// OptimizeBlock - Analyze and optimize control flow related to the specified
1057 /// block. This is never called on the entry block.
1058 bool BranchFolder::OptimizeBlock(MachineBasicBlock *MBB) {
1059  bool MadeChange = false;
1060  MachineFunction &MF = *MBB->getParent();
1061 ReoptimizeBlock:
1062 
1063  MachineFunction::iterator FallThrough = MBB;
1064  ++FallThrough;
1065 
1066  // If this block is empty, make everyone use its fall-through, not the block
1067  // explicitly. Landing pads should not do this since the landing-pad table
1068  // points to this block. Blocks with their addresses taken shouldn't be
1069  // optimized away.
1070  if (IsEmptyBlock(MBB) && !MBB->isLandingPad() && !MBB->hasAddressTaken()) {
1071  // Dead block? Leave for cleanup later.
1072  if (MBB->pred_empty()) return MadeChange;
1073 
1074  if (FallThrough == MF.end()) {
1075  // TODO: Simplify preds to not branch here if possible!
1076  } else {
1077  // Rewrite all predecessors of the old block to go to the fallthrough
1078  // instead.
1079  while (!MBB->pred_empty()) {
1080  MachineBasicBlock *Pred = *(MBB->pred_end()-1);
1081  Pred->ReplaceUsesOfBlockWith(MBB, FallThrough);
1082  }
1083  // If MBB was the target of a jump table, update jump tables to go to the
1084  // fallthrough instead.
1085  if (MachineJumpTableInfo *MJTI = MF.getJumpTableInfo())
1086  MJTI->ReplaceMBBInJumpTables(MBB, FallThrough);
1087  MadeChange = true;
1088  }
1089  return MadeChange;
1090  }
1091 
1092  // Check to see if we can simplify the terminator of the block before this
1093  // one.
1095 
1096  MachineBasicBlock *PriorTBB = 0, *PriorFBB = 0;
1098  bool PriorUnAnalyzable =
1099  TII->AnalyzeBranch(PrevBB, PriorTBB, PriorFBB, PriorCond, true);
1100  if (!PriorUnAnalyzable) {
1101  // If the CFG for the prior block has extra edges, remove them.
1102  MadeChange |= PrevBB.CorrectExtraCFGEdges(PriorTBB, PriorFBB,
1103  !PriorCond.empty());
1104 
1105  // If the previous branch is conditional and both conditions go to the same
1106  // destination, remove the branch, replacing it with an unconditional one or
1107  // a fall-through.
1108  if (PriorTBB && PriorTBB == PriorFBB) {
1109  DebugLoc dl = getBranchDebugLoc(PrevBB);
1110  TII->RemoveBranch(PrevBB);
1111  PriorCond.clear();
1112  if (PriorTBB != MBB)
1113  TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond, dl);
1114  MadeChange = true;
1115  ++NumBranchOpts;
1116  goto ReoptimizeBlock;
1117  }
1118 
1119  // If the previous block unconditionally falls through to this block and
1120  // this block has no other predecessors, move the contents of this block
1121  // into the prior block. This doesn't usually happen when SimplifyCFG
1122  // has been used, but it can happen if tail merging splits a fall-through
1123  // predecessor of a block.
1124  // This has to check PrevBB->succ_size() because EH edges are ignored by
1125  // AnalyzeBranch.
1126  if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 &&
1127  PrevBB.succ_size() == 1 &&
1128  !MBB->hasAddressTaken() && !MBB->isLandingPad()) {
1129  DEBUG(dbgs() << "\nMerging into block: " << PrevBB
1130  << "From MBB: " << *MBB);
1131  // Remove redundant DBG_VALUEs first.
1132  if (PrevBB.begin() != PrevBB.end()) {
1133  MachineBasicBlock::iterator PrevBBIter = PrevBB.end();
1134  --PrevBBIter;
1135  MachineBasicBlock::iterator MBBIter = MBB->begin();
1136  // Check if DBG_VALUE at the end of PrevBB is identical to the
1137  // DBG_VALUE at the beginning of MBB.
1138  while (PrevBBIter != PrevBB.begin() && MBBIter != MBB->end()
1139  && PrevBBIter->isDebugValue() && MBBIter->isDebugValue()) {
1140  if (!MBBIter->isIdenticalTo(PrevBBIter))
1141  break;
1142  MachineInstr *DuplicateDbg = MBBIter;
1143  ++MBBIter; -- PrevBBIter;
1144  DuplicateDbg->eraseFromParent();
1145  }
1146  }
1147  PrevBB.splice(PrevBB.end(), MBB, MBB->begin(), MBB->end());
1148  PrevBB.removeSuccessor(PrevBB.succ_begin());
1149  assert(PrevBB.succ_empty());
1150  PrevBB.transferSuccessors(MBB);
1151  MadeChange = true;
1152  return MadeChange;
1153  }
1154 
1155  // If the previous branch *only* branches to *this* block (conditional or
1156  // not) remove the branch.
1157  if (PriorTBB == MBB && PriorFBB == 0) {
1158  TII->RemoveBranch(PrevBB);
1159  MadeChange = true;
1160  ++NumBranchOpts;
1161  goto ReoptimizeBlock;
1162  }
1163 
1164  // If the prior block branches somewhere else on the condition and here if
1165  // the condition is false, remove the uncond second branch.
1166  if (PriorFBB == MBB) {
1167  DebugLoc dl = getBranchDebugLoc(PrevBB);
1168  TII->RemoveBranch(PrevBB);
1169  TII->InsertBranch(PrevBB, PriorTBB, 0, PriorCond, dl);
1170  MadeChange = true;
1171  ++NumBranchOpts;
1172  goto ReoptimizeBlock;
1173  }
1174 
1175  // If the prior block branches here on true and somewhere else on false, and
1176  // if the branch condition is reversible, reverse the branch to create a
1177  // fall-through.
1178  if (PriorTBB == MBB) {
1179  SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
1180  if (!TII->ReverseBranchCondition(NewPriorCond)) {
1181  DebugLoc dl = getBranchDebugLoc(PrevBB);
1182  TII->RemoveBranch(PrevBB);
1183  TII->InsertBranch(PrevBB, PriorFBB, 0, NewPriorCond, dl);
1184  MadeChange = true;
1185  ++NumBranchOpts;
1186  goto ReoptimizeBlock;
1187  }
1188  }
1189 
1190  // If this block has no successors (e.g. it is a return block or ends with
1191  // a call to a no-return function like abort or __cxa_throw) and if the pred
1192  // falls through into this block, and if it would otherwise fall through
1193  // into the block after this, move this block to the end of the function.
1194  //
1195  // We consider it more likely that execution will stay in the function (e.g.
1196  // due to loops) than it is to exit it. This asserts in loops etc, moving
1197  // the assert condition out of the loop body.
1198  if (MBB->succ_empty() && !PriorCond.empty() && PriorFBB == 0 &&
1199  MachineFunction::iterator(PriorTBB) == FallThrough &&
1200  !MBB->canFallThrough()) {
1201  bool DoTransform = true;
1202 
1203  // We have to be careful that the succs of PredBB aren't both no-successor
1204  // blocks. If neither have successors and if PredBB is the second from
1205  // last block in the function, we'd just keep swapping the two blocks for
1206  // last. Only do the swap if one is clearly better to fall through than
1207  // the other.
1208  if (FallThrough == --MF.end() &&
1209  !IsBetterFallthrough(PriorTBB, MBB))
1210  DoTransform = false;
1211 
1212  if (DoTransform) {
1213  // Reverse the branch so we will fall through on the previous true cond.
1214  SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
1215  if (!TII->ReverseBranchCondition(NewPriorCond)) {
1216  DEBUG(dbgs() << "\nMoving MBB: " << *MBB
1217  << "To make fallthrough to: " << *PriorTBB << "\n");
1218 
1219  DebugLoc dl = getBranchDebugLoc(PrevBB);
1220  TII->RemoveBranch(PrevBB);
1221  TII->InsertBranch(PrevBB, MBB, 0, NewPriorCond, dl);
1222 
1223  // Move this block to the end of the function.
1224  MBB->moveAfter(--MF.end());
1225  MadeChange = true;
1226  ++NumBranchOpts;
1227  return MadeChange;
1228  }
1229  }
1230  }
1231  }
1232 
1233  // Analyze the branch in the current block.
1234  MachineBasicBlock *CurTBB = 0, *CurFBB = 0;
1236  bool CurUnAnalyzable= TII->AnalyzeBranch(*MBB, CurTBB, CurFBB, CurCond, true);
1237  if (!CurUnAnalyzable) {
1238  // If the CFG for the prior block has extra edges, remove them.
1239  MadeChange |= MBB->CorrectExtraCFGEdges(CurTBB, CurFBB, !CurCond.empty());
1240 
1241  // If this is a two-way branch, and the FBB branches to this block, reverse
1242  // the condition so the single-basic-block loop is faster. Instead of:
1243  // Loop: xxx; jcc Out; jmp Loop
1244  // we want:
1245  // Loop: xxx; jncc Loop; jmp Out
1246  if (CurTBB && CurFBB && CurFBB == MBB && CurTBB != MBB) {
1247  SmallVector<MachineOperand, 4> NewCond(CurCond);
1248  if (!TII->ReverseBranchCondition(NewCond)) {
1249  DebugLoc dl = getBranchDebugLoc(*MBB);
1250  TII->RemoveBranch(*MBB);
1251  TII->InsertBranch(*MBB, CurFBB, CurTBB, NewCond, dl);
1252  MadeChange = true;
1253  ++NumBranchOpts;
1254  goto ReoptimizeBlock;
1255  }
1256  }
1257 
1258  // If this branch is the only thing in its block, see if we can forward
1259  // other blocks across it.
1260  if (CurTBB && CurCond.empty() && CurFBB == 0 &&
1261  IsBranchOnlyBlock(MBB) && CurTBB != MBB &&
1262  !MBB->hasAddressTaken()) {
1263  DebugLoc dl = getBranchDebugLoc(*MBB);
1264  // This block may contain just an unconditional branch. Because there can
1265  // be 'non-branch terminators' in the block, try removing the branch and
1266  // then seeing if the block is empty.
1267  TII->RemoveBranch(*MBB);
1268  // If the only things remaining in the block are debug info, remove these
1269  // as well, so this will behave the same as an empty block in non-debug
1270  // mode.
1271  if (!MBB->empty()) {
1272  bool NonDebugInfoFound = false;
1273  for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
1274  I != E; ++I) {
1275  if (!I->isDebugValue()) {
1276  NonDebugInfoFound = true;
1277  break;
1278  }
1279  }
1280  if (!NonDebugInfoFound)
1281  // Make the block empty, losing the debug info (we could probably
1282  // improve this in some cases.)
1283  MBB->erase(MBB->begin(), MBB->end());
1284  }
1285  // If this block is just an unconditional branch to CurTBB, we can
1286  // usually completely eliminate the block. The only case we cannot
1287  // completely eliminate the block is when the block before this one
1288  // falls through into MBB and we can't understand the prior block's branch
1289  // condition.
1290  if (MBB->empty()) {
1291  bool PredHasNoFallThrough = !PrevBB.canFallThrough();
1292  if (PredHasNoFallThrough || !PriorUnAnalyzable ||
1293  !PrevBB.isSuccessor(MBB)) {
1294  // If the prior block falls through into us, turn it into an
1295  // explicit branch to us to make updates simpler.
1296  if (!PredHasNoFallThrough && PrevBB.isSuccessor(MBB) &&
1297  PriorTBB != MBB && PriorFBB != MBB) {
1298  if (PriorTBB == 0) {
1299  assert(PriorCond.empty() && PriorFBB == 0 &&
1300  "Bad branch analysis");
1301  PriorTBB = MBB;
1302  } else {
1303  assert(PriorFBB == 0 && "Machine CFG out of date!");
1304  PriorFBB = MBB;
1305  }
1306  DebugLoc pdl = getBranchDebugLoc(PrevBB);
1307  TII->RemoveBranch(PrevBB);
1308  TII->InsertBranch(PrevBB, PriorTBB, PriorFBB, PriorCond, pdl);
1309  }
1310 
1311  // Iterate through all the predecessors, revectoring each in-turn.
1312  size_t PI = 0;
1313  bool DidChange = false;
1314  bool HasBranchToSelf = false;
1315  while(PI != MBB->pred_size()) {
1316  MachineBasicBlock *PMBB = *(MBB->pred_begin() + PI);
1317  if (PMBB == MBB) {
1318  // If this block has an uncond branch to itself, leave it.
1319  ++PI;
1320  HasBranchToSelf = true;
1321  } else {
1322  DidChange = true;
1323  PMBB->ReplaceUsesOfBlockWith(MBB, CurTBB);
1324  // If this change resulted in PMBB ending in a conditional
1325  // branch where both conditions go to the same destination,
1326  // change this to an unconditional branch (and fix the CFG).
1327  MachineBasicBlock *NewCurTBB = 0, *NewCurFBB = 0;
1328  SmallVector<MachineOperand, 4> NewCurCond;
1329  bool NewCurUnAnalyzable = TII->AnalyzeBranch(*PMBB, NewCurTBB,
1330  NewCurFBB, NewCurCond, true);
1331  if (!NewCurUnAnalyzable && NewCurTBB && NewCurTBB == NewCurFBB) {
1332  DebugLoc pdl = getBranchDebugLoc(*PMBB);
1333  TII->RemoveBranch(*PMBB);
1334  NewCurCond.clear();
1335  TII->InsertBranch(*PMBB, NewCurTBB, 0, NewCurCond, pdl);
1336  MadeChange = true;
1337  ++NumBranchOpts;
1338  PMBB->CorrectExtraCFGEdges(NewCurTBB, 0, false);
1339  }
1340  }
1341  }
1342 
1343  // Change any jumptables to go to the new MBB.
1344  if (MachineJumpTableInfo *MJTI = MF.getJumpTableInfo())
1345  MJTI->ReplaceMBBInJumpTables(MBB, CurTBB);
1346  if (DidChange) {
1347  ++NumBranchOpts;
1348  MadeChange = true;
1349  if (!HasBranchToSelf) return MadeChange;
1350  }
1351  }
1352  }
1353 
1354  // Add the branch back if the block is more than just an uncond branch.
1355  TII->InsertBranch(*MBB, CurTBB, 0, CurCond, dl);
1356  }
1357  }
1358 
1359  // If the prior block doesn't fall through into this block, and if this
1360  // block doesn't fall through into some other block, see if we can find a
1361  // place to move this block where a fall-through will happen.
1362  if (!PrevBB.canFallThrough()) {
1363 
1364  // Now we know that there was no fall-through into this block, check to
1365  // see if it has a fall-through into its successor.
1366  bool CurFallsThru = MBB->canFallThrough();
1367 
1368  if (!MBB->isLandingPad()) {
1369  // Check all the predecessors of this block. If one of them has no fall
1370  // throughs, move this block right after it.
1372  E = MBB->pred_end(); PI != E; ++PI) {
1373  // Analyze the branch at the end of the pred.
1374  MachineBasicBlock *PredBB = *PI;
1375  MachineFunction::iterator PredFallthrough = PredBB; ++PredFallthrough;
1376  MachineBasicBlock *PredTBB = 0, *PredFBB = 0;
1378  if (PredBB != MBB && !PredBB->canFallThrough() &&
1379  !TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true)
1380  && (!CurFallsThru || !CurTBB || !CurFBB)
1381  && (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) {
1382  // If the current block doesn't fall through, just move it.
1383  // If the current block can fall through and does not end with a
1384  // conditional branch, we need to append an unconditional jump to
1385  // the (current) next block. To avoid a possible compile-time
1386  // infinite loop, move blocks only backward in this case.
1387  // Also, if there are already 2 branches here, we cannot add a third;
1388  // this means we have the case
1389  // Bcc next
1390  // B elsewhere
1391  // next:
1392  if (CurFallsThru) {
1394  CurCond.clear();
1395  TII->InsertBranch(*MBB, NextBB, 0, CurCond, DebugLoc());
1396  }
1397  MBB->moveAfter(PredBB);
1398  MadeChange = true;
1399  goto ReoptimizeBlock;
1400  }
1401  }
1402  }
1403 
1404  if (!CurFallsThru) {
1405  // Check all successors to see if we can move this block before it.
1407  E = MBB->succ_end(); SI != E; ++SI) {
1408  // Analyze the branch at the end of the block before the succ.
1409  MachineBasicBlock *SuccBB = *SI;
1410  MachineFunction::iterator SuccPrev = SuccBB; --SuccPrev;
1411 
1412  // If this block doesn't already fall-through to that successor, and if
1413  // the succ doesn't already have a block that can fall through into it,
1414  // and if the successor isn't an EH destination, we can arrange for the
1415  // fallthrough to happen.
1416  if (SuccBB != MBB && &*SuccPrev != MBB &&
1417  !SuccPrev->canFallThrough() && !CurUnAnalyzable &&
1418  !SuccBB->isLandingPad()) {
1419  MBB->moveBefore(SuccBB);
1420  MadeChange = true;
1421  goto ReoptimizeBlock;
1422  }
1423  }
1424 
1425  // Okay, there is no really great place to put this block. If, however,
1426  // the block before this one would be a fall-through if this block were
1427  // removed, move this block to the end of the function.
1428  MachineBasicBlock *PrevTBB = 0, *PrevFBB = 0;
1430  if (FallThrough != MF.end() &&
1431  !TII->AnalyzeBranch(PrevBB, PrevTBB, PrevFBB, PrevCond, true) &&
1432  PrevBB.isSuccessor(FallThrough)) {
1433  MBB->moveAfter(--MF.end());
1434  MadeChange = true;
1435  return MadeChange;
1436  }
1437  }
1438  }
1439 
1440  return MadeChange;
1441 }
1442 
1443 //===----------------------------------------------------------------------===//
1444 // Hoist Common Code
1445 //===----------------------------------------------------------------------===//
1446 
1447 /// HoistCommonCode - Hoist common instruction sequences at the start of basic
1448 /// blocks to their common predecessor.
1449 bool BranchFolder::HoistCommonCode(MachineFunction &MF) {
1450  bool MadeChange = false;
1451  for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ) {
1452  MachineBasicBlock *MBB = I++;
1453  MadeChange |= HoistCommonCodeInSuccs(MBB);
1454  }
1455 
1456  return MadeChange;
1457 }
1458 
1459 /// findFalseBlock - BB has a fallthrough. Find its 'false' successor given
1460 /// its 'true' successor.
1462  MachineBasicBlock *TrueBB) {
1464  E = BB->succ_end(); SI != E; ++SI) {
1465  MachineBasicBlock *SuccBB = *SI;
1466  if (SuccBB != TrueBB)
1467  return SuccBB;
1468  }
1469  return NULL;
1470 }
1471 
1472 /// findHoistingInsertPosAndDeps - Find the location to move common instructions
1473 /// in successors to. The location is usually just before the terminator,
1474 /// however if the terminator is a conditional branch and its previous
1475 /// instruction is the flag setting instruction, the previous instruction is
1476 /// the preferred location. This function also gathers uses and defs of the
1477 /// instructions from the insertion point to the end of the block. The data is
1478 /// used by HoistCommonCodeInSuccs to ensure safety.
1479 static
1481  const TargetInstrInfo *TII,
1482  const TargetRegisterInfo *TRI,
1483  SmallSet<unsigned,4> &Uses,
1484  SmallSet<unsigned,4> &Defs) {
1486  if (!TII->isUnpredicatedTerminator(Loc))
1487  return MBB->end();
1488 
1489  for (unsigned i = 0, e = Loc->getNumOperands(); i != e; ++i) {
1490  const MachineOperand &MO = Loc->getOperand(i);
1491  if (!MO.isReg())
1492  continue;
1493  unsigned Reg = MO.getReg();
1494  if (!Reg)
1495  continue;
1496  if (MO.isUse()) {
1497  for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
1498  Uses.insert(*AI);
1499  } else if (!MO.isDead())
1500  // Don't try to hoist code in the rare case the terminator defines a
1501  // register that is later used.
1502  return MBB->end();
1503  }
1504 
1505  if (Uses.empty())
1506  return Loc;
1507  if (Loc == MBB->begin())
1508  return MBB->end();
1509 
1510  // The terminator is probably a conditional branch, try not to separate the
1511  // branch from condition setting instruction.
1512  MachineBasicBlock::iterator PI = Loc;
1513  --PI;
1514  while (PI != MBB->begin() && Loc->isDebugValue())
1515  --PI;
1516 
1517  bool IsDef = false;
1518  for (unsigned i = 0, e = PI->getNumOperands(); !IsDef && i != e; ++i) {
1519  const MachineOperand &MO = PI->getOperand(i);
1520  // If PI has a regmask operand, it is probably a call. Separate away.
1521  if (MO.isRegMask())
1522  return Loc;
1523  if (!MO.isReg() || MO.isUse())
1524  continue;
1525  unsigned Reg = MO.getReg();
1526  if (!Reg)
1527  continue;
1528  if (Uses.count(Reg))
1529  IsDef = true;
1530  }
1531  if (!IsDef)
1532  // The condition setting instruction is not just before the conditional
1533  // branch.
1534  return Loc;
1535 
1536  // Be conservative, don't insert instruction above something that may have
1537  // side-effects. And since it's potentially bad to separate flag setting
1538  // instruction from the conditional branch, just abort the optimization
1539  // completely.
1540  // Also avoid moving code above predicated instruction since it's hard to
1541  // reason about register liveness with predicated instruction.
1542  bool DontMoveAcrossStore = true;
1543  if (!PI->isSafeToMove(TII, 0, DontMoveAcrossStore) ||
1544  TII->isPredicated(PI))
1545  return MBB->end();
1546 
1547 
1548  // Find out what registers are live. Note this routine is ignoring other live
1549  // registers which are only used by instructions in successor blocks.
1550  for (unsigned i = 0, e = PI->getNumOperands(); i != e; ++i) {
1551  const MachineOperand &MO = PI->getOperand(i);
1552  if (!MO.isReg())
1553  continue;
1554  unsigned Reg = MO.getReg();
1555  if (!Reg)
1556  continue;
1557  if (MO.isUse()) {
1558  for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
1559  Uses.insert(*AI);
1560  } else {
1561  if (Uses.erase(Reg)) {
1562  for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs)
1563  Uses.erase(*SubRegs); // Use sub-registers to be conservative
1564  }
1565  for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
1566  Defs.insert(*AI);
1567  }
1568  }
1569 
1570  return PI;
1571 }
1572 
1573 /// HoistCommonCodeInSuccs - If the successors of MBB has common instruction
1574 /// sequence at the start of the function, move the instructions before MBB
1575 /// terminator if it's legal.
1576 bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) {
1577  MachineBasicBlock *TBB = 0, *FBB = 0;
1579  if (TII->AnalyzeBranch(*MBB, TBB, FBB, Cond, true) || !TBB || Cond.empty())
1580  return false;
1581 
1582  if (!FBB) FBB = findFalseBlock(MBB, TBB);
1583  if (!FBB)
1584  // Malformed bcc? True and false blocks are the same?
1585  return false;
1586 
1587  // Restrict the optimization to cases where MBB is the only predecessor,
1588  // it is an obvious win.
1589  if (TBB->pred_size() > 1 || FBB->pred_size() > 1)
1590  return false;
1591 
1592  // Find a suitable position to hoist the common instructions to. Also figure
1593  // out which registers are used or defined by instructions from the insertion
1594  // point to the end of the block.
1595  SmallSet<unsigned, 4> Uses, Defs;
1597  findHoistingInsertPosAndDeps(MBB, TII, TRI, Uses, Defs);
1598  if (Loc == MBB->end())
1599  return false;
1600 
1601  bool HasDups = false;
1602  SmallVector<unsigned, 4> LocalDefs;
1603  SmallSet<unsigned, 4> LocalDefsSet;
1604  MachineBasicBlock::iterator TIB = TBB->begin();
1605  MachineBasicBlock::iterator FIB = FBB->begin();
1606  MachineBasicBlock::iterator TIE = TBB->end();
1607  MachineBasicBlock::iterator FIE = FBB->end();
1608  while (TIB != TIE && FIB != FIE) {
1609  // Skip dbg_value instructions. These do not count.
1610  if (TIB->isDebugValue()) {
1611  while (TIB != TIE && TIB->isDebugValue())
1612  ++TIB;
1613  if (TIB == TIE)
1614  break;
1615  }
1616  if (FIB->isDebugValue()) {
1617  while (FIB != FIE && FIB->isDebugValue())
1618  ++FIB;
1619  if (FIB == FIE)
1620  break;
1621  }
1622  if (!TIB->isIdenticalTo(FIB, MachineInstr::CheckKillDead))
1623  break;
1624 
1625  if (TII->isPredicated(TIB))
1626  // Hard to reason about register liveness with predicated instruction.
1627  break;
1628 
1629  bool IsSafe = true;
1630  for (unsigned i = 0, e = TIB->getNumOperands(); i != e; ++i) {
1631  MachineOperand &MO = TIB->getOperand(i);
1632  // Don't attempt to hoist instructions with register masks.
1633  if (MO.isRegMask()) {
1634  IsSafe = false;
1635  break;
1636  }
1637  if (!MO.isReg())
1638  continue;
1639  unsigned Reg = MO.getReg();
1640  if (!Reg)
1641  continue;
1642  if (MO.isDef()) {
1643  if (Uses.count(Reg)) {
1644  // Avoid clobbering a register that's used by the instruction at
1645  // the point of insertion.
1646  IsSafe = false;
1647  break;
1648  }
1649 
1650  if (Defs.count(Reg) && !MO.isDead()) {
1651  // Don't hoist the instruction if the def would be clobber by the
1652  // instruction at the point insertion. FIXME: This is overly
1653  // conservative. It should be possible to hoist the instructions
1654  // in BB2 in the following example:
1655  // BB1:
1656  // r1, eflag = op1 r2, r3
1657  // brcc eflag
1658  //
1659  // BB2:
1660  // r1 = op2, ...
1661  // = op3, r1<kill>
1662  IsSafe = false;
1663  break;
1664  }
1665  } else if (!LocalDefsSet.count(Reg)) {
1666  if (Defs.count(Reg)) {
1667  // Use is defined by the instruction at the point of insertion.
1668  IsSafe = false;
1669  break;
1670  }
1671 
1672  if (MO.isKill() && Uses.count(Reg))
1673  // Kills a register that's read by the instruction at the point of
1674  // insertion. Remove the kill marker.
1675  MO.setIsKill(false);
1676  }
1677  }
1678  if (!IsSafe)
1679  break;
1680 
1681  bool DontMoveAcrossStore = true;
1682  if (!TIB->isSafeToMove(TII, 0, DontMoveAcrossStore))
1683  break;
1684 
1685  // Remove kills from LocalDefsSet, these registers had short live ranges.
1686  for (unsigned i = 0, e = TIB->getNumOperands(); i != e; ++i) {
1687  MachineOperand &MO = TIB->getOperand(i);
1688  if (!MO.isReg() || !MO.isUse() || !MO.isKill())
1689  continue;
1690  unsigned Reg = MO.getReg();
1691  if (!Reg || !LocalDefsSet.count(Reg))
1692  continue;
1693  for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
1694  LocalDefsSet.erase(*AI);
1695  }
1696 
1697  // Track local defs so we can update liveins.
1698  for (unsigned i = 0, e = TIB->getNumOperands(); i != e; ++i) {
1699  MachineOperand &MO = TIB->getOperand(i);
1700  if (!MO.isReg() || !MO.isDef() || MO.isDead())
1701  continue;
1702  unsigned Reg = MO.getReg();
1703  if (!Reg)
1704  continue;
1705  LocalDefs.push_back(Reg);
1706  for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI)
1707  LocalDefsSet.insert(*AI);
1708  }
1709 
1710  HasDups = true;
1711  ++TIB;
1712  ++FIB;
1713  }
1714 
1715  if (!HasDups)
1716  return false;
1717 
1718  MBB->splice(Loc, TBB, TBB->begin(), TIB);
1719  FBB->erase(FBB->begin(), FIB);
1720 
1721  // Update livein's.
1722  for (unsigned i = 0, e = LocalDefs.size(); i != e; ++i) {
1723  unsigned Def = LocalDefs[i];
1724  if (LocalDefsSet.count(Def)) {
1725  TBB->addLiveIn(Def);
1726  FBB->addLiveIn(Def);
1727  }
1728  }
1729 
1730  ++NumHoist;
1731  return true;
1732 }
unsigned succ_size() const
static unsigned EstimateRuntime(MachineBasicBlock::iterator I, MachineBasicBlock::iterator E)
void push_back(const T &Elt)
Definition: SmallVector.h:236
const MachineFunction * getParent() const
instr_iterator erase(instr_iterator I)
static cl::opt< unsigned > TailMergeThreshold("tail-merge-threshold", cl::desc("Max number of predecessors to consider tail merging"), cl::init(150), cl::Hidden)
bool isValid() const
isValid - returns true if this iterator is not yet at the end.
MachineBasicBlock * getMBB() const
bool isDead() const
virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify=false) const
bool insert(PtrType Ptr)
Definition: SmallPtrSet.h:253
void RemoveJumpTable(unsigned Idx)
void addLiveIn(unsigned Reg)
void operator<(const Optional< T > &X, const Optional< U > &Y)
Poison comparison between two Optional objects. Clients needs to explicitly compare the underlying va...
const_iterator begin(StringRef path)
Get begin iterator over path.
Definition: Path.cpp:173
void moveAfter(MachineBasicBlock *NewBefore)
const Function * getFunction() const
BranchFolder(bool defaultEnableTailMerge, bool CommonHoist)
virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const
static DebugLoc getBranchDebugLoc(MachineBasicBlock &MBB)
bool erase(const T &V)
Definition: SmallSet.h:86
Address of indexed Jump Table for switch.
const std::vector< MachineJumpTableEntry > & getJumpTables() const
bool isJTI() const
isJTI - Tests if this is a MO_JumpTableIndex operand.
AnalysisUsage & addRequired()
void ReplaceUsesOfBlockWith(MachineBasicBlock *Old, MachineBasicBlock *New)
const HexagonInstrInfo * TII
#define llvm_unreachable(msg)
bool isReg() const
isReg - Tests if this is a MO_Register operand.
std::vector< MachineBasicBlock * >::iterator succ_iterator
static bool IsEmptyBlock(MachineBasicBlock *MBB)
INITIALIZE_PASS(BranchFolderPass,"branch-folder","Control Flow Optimizer", false, false) bool BranchFolderPass
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
unsigned getNumOperands() const
Definition: MachineInstr.h:265
void forward()
forward - Move the internal MBB iterator and update register states.
unsigned getNumRegs() const
Return the number of registers this target has (useful for sizing arrays holding per register informa...
bool isKill() const
void transferSuccessors(MachineBasicBlock *fromMBB)
static cl::opt< cl::boolOrDefault > FlagEnableTailMerge("enable-tail-merge", cl::init(cl::BOU_UNSET), cl::Hidden)
static void FixTail(MachineBasicBlock *CurMBB, MachineBasicBlock *SuccBB, const TargetInstrInfo *TII)
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
Definition: SmallVector.h:56
int getOpcode() const
Definition: MachineInstr.h:261
void RenumberBlocks(MachineBasicBlock *MBBFrom=0)
const MachineJumpTableInfo * getJumpTableInfo() const
bool insert(const T &V)
Definition: SmallSet.h:59
void enterBasicBlock(MachineBasicBlock *mbb)
virtual bool ReverseBranchCondition(SmallVectorImpl< MachineOperand > &Cond) const
std::vector< MachineBasicBlock * >::iterator pred_iterator
static MachineBasicBlock::iterator findHoistingInsertPosAndDeps(MachineBasicBlock *MBB, const TargetInstrInfo *TII, const TargetRegisterInfo *TRI, SmallSet< unsigned, 4 > &Uses, SmallSet< unsigned, 4 > &Defs)
int64_t getImm() const
iterator begin()
Definition: Function.h:395
Address of indexed Constant in Constant Pool.
const BasicBlock * getBasicBlock() const
bundle_iterator< MachineInstr, instr_iterator > iterator
#define P(N)
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:314
MachineBasicBlock * CreateMachineBasicBlock(const BasicBlock *bb=0)
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
STATISTIC(NumDeadBlocks,"Number of dead blocks removed")
const MachineOperand & getOperand(unsigned i) const
Definition: MachineInstr.h:267
Abstract Stack Frame Index.
ItTy next(ItTy it, Dist n)
Definition: STLExtras.h:154
bool getEnableTailMerge() const
const MachineBasicBlock * getLandingPadSuccessor() const
int64_t getOffset() const
static bool IsBetterFallthrough(MachineBasicBlock *MBB1, MachineBasicBlock *MBB2)
static unsigned getHash(const void *V)
Definition: EarlyCSE.cpp:38
void removeSuccessor(MachineBasicBlock *succ)
void moveBefore(MachineBasicBlock *NewAfter)
void getRegsUsed(BitVector &used, bool includeReserved)
getRegsUsed - return all registers currently in use in used.
static unsigned CountTerminators(MachineBasicBlock *MBB, MachineBasicBlock::iterator &I)
static cl::opt< unsigned > TailMergeSize("tail-merge-size", cl::desc("Min number of instructions to consider tail merging"), cl::init(3), cl::Hidden)
void setIsKill(bool Val=true)
bool isRegMask() const
isRegMask - Tests if this is a MO_RegisterMask operand.
static bool ProfitableToMerge(MachineBasicBlock *MBB1, MachineBasicBlock *MBB2, unsigned minCommonTailLength, unsigned &CommonTailLen, MachineBasicBlock::iterator &I1, MachineBasicBlock::iterator &I2, MachineBasicBlock *SuccBB, MachineBasicBlock *PredBB)
bool isSuccessor(const MachineBasicBlock *MBB) const
virtual bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const
virtual bool isUnpredicatedTerminator(const MachineInstr *MI) const
virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, const SmallVectorImpl< MachineOperand > &Cond, DebugLoc DL) const
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
Definition: Debug.cpp:101
AttributeSet getAttributes() const
Return the attribute list for this Function.
Definition: Function.h:170
bool count(const T &V) const
count - Return true if the element is in the set.
Definition: SmallSet.h:48
virtual bool isLegalToSplitMBBAt(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) const
MachineOperandType getType() const
bundle_iterator< const MachineInstr, const_instr_iterator > const_iterator
void splice(iterator Where, MachineBasicBlock *Other, iterator From)
MachineRegisterInfo & getRegInfo()
virtual void getAnalysisUsage(AnalysisUsage &AU) const
#define I(x, y, z)
Definition: MD5.cpp:54
static bool IsBranchOnlyBlock(MachineBasicBlock *MBB)
static MachineBasicBlock * findFalseBlock(MachineBasicBlock *BB, MachineBasicBlock *TrueBB)
unsigned getReg() const
getReg - Returns the register number.
void erase(iterator MBBI)
void insert(iterator MBBI, MachineBasicBlock *MBB)
static const Function * getParent(const Value *V)
BasicBlockListType::iterator iterator
ItTy prior(ItTy it, Dist n)
Definition: STLExtras.h:167
char & BranchFolderPassID
#define DEBUG(X)
Definition: Debug.h:97
static unsigned HashMachineInstr(const MachineInstr *MI)
HashMachineInstr - Compute a hash value for MI and its operands.
virtual bool isPredicated(const MachineInstr *MI) const
const MCRegisterInfo & MRI
bool OptimizeFunction(MachineFunction &MF, const TargetInstrInfo *tii, const TargetRegisterInfo *tri, MachineModuleInfo *mmi)
static unsigned HashEndOfMBB(const MachineBasicBlock *MBB)
HashEndOfMBB - Hash the last instruction in the MBB.
bool empty() const
Definition: SmallSet.h:42
virtual void ReplaceTailWithBranchTo(MachineBasicBlock::iterator Tail, MachineBasicBlock *NewDest) const
bool isLayoutSuccessor(const MachineBasicBlock *MBB) const
void addSuccessor(MachineBasicBlock *succ, uint32_t weight=0)
unsigned pred_size() const
bool CorrectExtraCFGEdges(MachineBasicBlock *DestA, MachineBasicBlock *DestB, bool isCond)
bool isBarrier(QueryType Type=AnyInBundle) const
Definition: MachineInstr.h:356
MachineBasicBlock reference.
static unsigned ComputeCommonTailLength(MachineBasicBlock *MBB1, MachineBasicBlock *MBB2, MachineBasicBlock::iterator &I1, MachineBasicBlock::iterator &I2)
Address of a global value.
Name of external global symbol.