Fix an impressive type-o / spell-o Duncan noticed.
[oota-llvm.git] / lib / CodeGen / MachineBlockPlacement.cpp
1 //===-- MachineBlockPlacement.cpp - Basic Block Code Layout optimization --===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements basic block placement transformations using the CFG
11 // structure and branch probability estimates.
12 //
13 // The pass strives to preserve the structure of the CFG (that is, retain
14 // a topological ordering of basic blocks) in the absense of a *strong* signal
15 // to the contrary from probabilities. However, within the CFG structure, it
16 // attempts to choose an ordering which favors placing more likely sequences of
17 // blocks adjacent to each other.
18 //
19 // The algorithm works from the inner-most loop within a function outward, and
20 // at each stage walks through the basic blocks, trying to coalesce them into
21 // sequential chains where allowed by the CFG (or demanded by heavy
22 // probabilities). Finally, it walks the blocks in topological order, and the
23 // first time it reaches a chain of basic blocks, it schedules them in the
24 // function in-order.
25 //
26 //===----------------------------------------------------------------------===//
27
28 #define DEBUG_TYPE "block-placement2"
29 #include "llvm/CodeGen/MachineBasicBlock.h"
30 #include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
31 #include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
32 #include "llvm/CodeGen/MachineFunction.h"
33 #include "llvm/CodeGen/MachineFunctionPass.h"
34 #include "llvm/CodeGen/MachineLoopInfo.h"
35 #include "llvm/CodeGen/MachineModuleInfo.h"
36 #include "llvm/CodeGen/Passes.h"
37 #include "llvm/Support/Allocator.h"
38 #include "llvm/Support/Debug.h"
39 #include "llvm/Support/ErrorHandling.h"
40 #include "llvm/ADT/DenseMap.h"
41 #include "llvm/ADT/PostOrderIterator.h"
42 #include "llvm/ADT/SCCIterator.h"
43 #include "llvm/ADT/SmallPtrSet.h"
44 #include "llvm/ADT/SmallVector.h"
45 #include "llvm/ADT/Statistic.h"
46 #include "llvm/Target/TargetInstrInfo.h"
47 #include "llvm/Target/TargetLowering.h"
48 #include <algorithm>
49 using namespace llvm;
50
51 STATISTIC(NumCondBranches, "Number of conditional branches");
52 STATISTIC(NumUncondBranches, "Number of uncondittional branches");
53 STATISTIC(CondBranchTakenFreq,
54           "Potential frequency of taking conditional branches");
55 STATISTIC(UncondBranchTakenFreq,
56           "Potential frequency of taking unconditional branches");
57
58 namespace {
59 /// \brief A structure for storing a weighted edge.
60 ///
61 /// This stores an edge and its weight, computed as the product of the
62 /// frequency that the starting block is entered with the probability of
63 /// a particular exit block.
64 struct WeightedEdge {
65   BlockFrequency EdgeFrequency;
66   MachineBasicBlock *From, *To;
67
68   bool operator<(const WeightedEdge &RHS) const {
69     return EdgeFrequency < RHS.EdgeFrequency;
70   }
71 };
72 }
73
74 namespace {
75 class BlockChain;
76 /// \brief Type for our function-wide basic block -> block chain mapping.
77 typedef DenseMap<MachineBasicBlock *, BlockChain *> BlockToChainMapType;
78 }
79
80 namespace {
81 /// \brief A chain of blocks which will be laid out contiguously.
82 ///
83 /// This is the datastructure representing a chain of consecutive blocks that
84 /// are profitable to layout together in order to maximize fallthrough
85 /// probabilities. We also can use a block chain to represent a sequence of
86 /// basic blocks which have some external (correctness) requirement for
87 /// sequential layout.
88 ///
89 /// Eventually, the block chains will form a directed graph over the function.
90 /// We provide an SCC-supporting-iterator in order to quicky build and walk the
91 /// SCCs of block chains within a function.
92 ///
93 /// The block chains also have support for calculating and caching probability
94 /// information related to the chain itself versus other chains. This is used
95 /// for ranking during the final layout of block chains.
96 class BlockChain {
97   /// \brief The sequence of blocks belonging to this chain.
98   ///
99   /// This is the sequence of blocks for a particular chain. These will be laid
100   /// out in-order within the function.
101   SmallVector<MachineBasicBlock *, 4> Blocks;
102
103   /// \brief A handle to the function-wide basic block to block chain mapping.
104   ///
105   /// This is retained in each block chain to simplify the computation of child
106   /// block chains for SCC-formation and iteration. We store the edges to child
107   /// basic blocks, and map them back to their associated chains using this
108   /// structure.
109   BlockToChainMapType &BlockToChain;
110
111 public:
112   /// \brief Construct a new BlockChain.
113   ///
114   /// This builds a new block chain representing a single basic block in the
115   /// function. It also registers itself as the chain that block participates
116   /// in with the BlockToChain mapping.
117   BlockChain(BlockToChainMapType &BlockToChain, MachineBasicBlock *BB)
118     : Blocks(1, BB), BlockToChain(BlockToChain), LoopPredecessors(0) {
119     assert(BB && "Cannot create a chain with a null basic block");
120     BlockToChain[BB] = this;
121   }
122
123   /// \brief Iterator over blocks within the chain.
124   typedef SmallVectorImpl<MachineBasicBlock *>::iterator iterator;
125   typedef SmallVectorImpl<MachineBasicBlock *>::reverse_iterator
126       reverse_iterator;
127
128   /// \brief Beginning of blocks within the chain.
129   iterator begin() { return Blocks.begin(); }
130   reverse_iterator rbegin() { return Blocks.rbegin(); }
131
132   /// \brief End of blocks within the chain.
133   iterator end() { return Blocks.end(); }
134   reverse_iterator rend() { return Blocks.rend(); }
135
136   /// \brief Merge a block chain into this one.
137   ///
138   /// This routine merges a block chain into this one. It takes care of forming
139   /// a contiguous sequence of basic blocks, updating the edge list, and
140   /// updating the block -> chain mapping. It does not free or tear down the
141   /// old chain, but the old chain's block list is no longer valid.
142   void merge(MachineBasicBlock *BB, BlockChain *Chain) {
143     assert(BB);
144     assert(!Blocks.empty());
145
146     // Fast path in case we don't have a chain already.
147     if (!Chain) {
148       assert(!BlockToChain[BB]);
149       Blocks.push_back(BB);
150       BlockToChain[BB] = this;
151       return;
152     }
153
154     assert(BB == *Chain->begin());
155     assert(Chain->begin() != Chain->end());
156
157     // Update the incoming blocks to point to this chain, and add them to the
158     // chain structure.
159     for (BlockChain::iterator BI = Chain->begin(), BE = Chain->end();
160          BI != BE; ++BI) {
161       Blocks.push_back(*BI);
162       assert(BlockToChain[*BI] == Chain && "Incoming blocks not in chain");
163       BlockToChain[*BI] = this;
164     }
165   }
166
167   /// \brief Count of predecessors within the loop currently being processed.
168   ///
169   /// This count is updated at each loop we process to represent the number of
170   /// in-loop predecessors of this chain.
171   unsigned LoopPredecessors;
172 };
173 }
174
175 namespace {
176 class MachineBlockPlacement : public MachineFunctionPass {
177   /// \brief A typedef for a block filter set.
178   typedef SmallPtrSet<MachineBasicBlock *, 16> BlockFilterSet;
179
180   /// \brief A handle to the branch probability pass.
181   const MachineBranchProbabilityInfo *MBPI;
182
183   /// \brief A handle to the function-wide block frequency pass.
184   const MachineBlockFrequencyInfo *MBFI;
185
186   /// \brief A handle to the loop info.
187   const MachineLoopInfo *MLI;
188
189   /// \brief A handle to the target's instruction info.
190   const TargetInstrInfo *TII;
191
192   /// \brief A handle to the target's lowering info.
193   const TargetLowering *TLI;
194
195   /// \brief Allocator and owner of BlockChain structures.
196   ///
197   /// We build BlockChains lazily by merging together high probability BB
198   /// sequences acording to the "Algo2" in the paper mentioned at the top of
199   /// the file. To reduce malloc traffic, we allocate them using this slab-like
200   /// allocator, and destroy them after the pass completes.
201   SpecificBumpPtrAllocator<BlockChain> ChainAllocator;
202
203   /// \brief Function wide BasicBlock to BlockChain mapping.
204   ///
205   /// This mapping allows efficiently moving from any given basic block to the
206   /// BlockChain it participates in, if any. We use it to, among other things,
207   /// allow implicitly defining edges between chains as the existing edges
208   /// between basic blocks.
209   DenseMap<MachineBasicBlock *, BlockChain *> BlockToChain;
210
211   void markChainSuccessors(BlockChain &Chain,
212                            MachineBasicBlock *LoopHeaderBB,
213                            SmallVectorImpl<MachineBasicBlock *> &BlockWorkList,
214                            const BlockFilterSet *BlockFilter = 0);
215   MachineBasicBlock *selectBestSuccessor(MachineBasicBlock *BB,
216                                          BlockChain &Chain,
217                                          const BlockFilterSet *BlockFilter);
218   MachineBasicBlock *selectBestCandidateBlock(
219       BlockChain &Chain, SmallVectorImpl<MachineBasicBlock *> &WorkList,
220       const BlockFilterSet *BlockFilter);
221   MachineBasicBlock *getFirstUnplacedBlock(
222       MachineFunction &F,
223       const BlockChain &PlacedChain,
224       MachineFunction::iterator &PrevUnplacedBlockIt,
225       const BlockFilterSet *BlockFilter);
226   void buildChain(MachineBasicBlock *BB, BlockChain &Chain,
227                   SmallVectorImpl<MachineBasicBlock *> &BlockWorkList,
228                   const BlockFilterSet *BlockFilter = 0);
229   void rotateLoop(MachineLoop &L, BlockChain &LoopChain,
230                   const BlockFilterSet &LoopBlockSet);
231   void buildLoopChains(MachineFunction &F, MachineLoop &L);
232   void buildCFGChains(MachineFunction &F);
233   void AlignLoops(MachineFunction &F);
234
235 public:
236   static char ID; // Pass identification, replacement for typeid
237   MachineBlockPlacement() : MachineFunctionPass(ID) {
238     initializeMachineBlockPlacementPass(*PassRegistry::getPassRegistry());
239   }
240
241   bool runOnMachineFunction(MachineFunction &F);
242
243   void getAnalysisUsage(AnalysisUsage &AU) const {
244     AU.addRequired<MachineBranchProbabilityInfo>();
245     AU.addRequired<MachineBlockFrequencyInfo>();
246     AU.addRequired<MachineLoopInfo>();
247     MachineFunctionPass::getAnalysisUsage(AU);
248   }
249
250   const char *getPassName() const { return "Block Placement"; }
251 };
252 }
253
254 char MachineBlockPlacement::ID = 0;
255 INITIALIZE_PASS_BEGIN(MachineBlockPlacement, "block-placement2",
256                       "Branch Probability Basic Block Placement", false, false)
257 INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo)
258 INITIALIZE_PASS_DEPENDENCY(MachineBlockFrequencyInfo)
259 INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
260 INITIALIZE_PASS_END(MachineBlockPlacement, "block-placement2",
261                     "Branch Probability Basic Block Placement", false, false)
262
263 FunctionPass *llvm::createMachineBlockPlacementPass() {
264   return new MachineBlockPlacement();
265 }
266
267 #ifndef NDEBUG
268 /// \brief Helper to print the name of a MBB.
269 ///
270 /// Only used by debug logging.
271 static std::string getBlockName(MachineBasicBlock *BB) {
272   std::string Result;
273   raw_string_ostream OS(Result);
274   OS << "BB#" << BB->getNumber()
275      << " (derived from LLVM BB '" << BB->getName() << "')";
276   OS.flush();
277   return Result;
278 }
279
280 /// \brief Helper to print the number of a MBB.
281 ///
282 /// Only used by debug logging.
283 static std::string getBlockNum(MachineBasicBlock *BB) {
284   std::string Result;
285   raw_string_ostream OS(Result);
286   OS << "BB#" << BB->getNumber();
287   OS.flush();
288   return Result;
289 }
290 #endif
291
292 /// \brief Mark a chain's successors as having one fewer preds.
293 ///
294 /// When a chain is being merged into the "placed" chain, this routine will
295 /// quickly walk the successors of each block in the chain and mark them as
296 /// having one fewer active predecessor. It also adds any successors of this
297 /// chain which reach the zero-predecessor state to the worklist passed in.
298 void MachineBlockPlacement::markChainSuccessors(
299     BlockChain &Chain,
300     MachineBasicBlock *LoopHeaderBB,
301     SmallVectorImpl<MachineBasicBlock *> &BlockWorkList,
302     const BlockFilterSet *BlockFilter) {
303   // Walk all the blocks in this chain, marking their successors as having
304   // a predecessor placed.
305   for (BlockChain::iterator CBI = Chain.begin(), CBE = Chain.end();
306        CBI != CBE; ++CBI) {
307     // Add any successors for which this is the only un-placed in-loop
308     // predecessor to the worklist as a viable candidate for CFG-neutral
309     // placement. No subsequent placement of this block will violate the CFG
310     // shape, so we get to use heuristics to choose a favorable placement.
311     for (MachineBasicBlock::succ_iterator SI = (*CBI)->succ_begin(),
312                                           SE = (*CBI)->succ_end();
313          SI != SE; ++SI) {
314       if (BlockFilter && !BlockFilter->count(*SI))
315         continue;
316       BlockChain &SuccChain = *BlockToChain[*SI];
317       // Disregard edges within a fixed chain, or edges to the loop header.
318       if (&Chain == &SuccChain || *SI == LoopHeaderBB)
319         continue;
320
321       // This is a cross-chain edge that is within the loop, so decrement the
322       // loop predecessor count of the destination chain.
323       if (SuccChain.LoopPredecessors > 0 && --SuccChain.LoopPredecessors == 0)
324         BlockWorkList.push_back(*SuccChain.begin());
325     }
326   }
327 }
328
329 /// \brief Select the best successor for a block.
330 ///
331 /// This looks across all successors of a particular block and attempts to
332 /// select the "best" one to be the layout successor. It only considers direct
333 /// successors which also pass the block filter. It will attempt to avoid
334 /// breaking CFG structure, but cave and break such structures in the case of
335 /// very hot successor edges.
336 ///
337 /// \returns The best successor block found, or null if none are viable.
338 MachineBasicBlock *MachineBlockPlacement::selectBestSuccessor(
339     MachineBasicBlock *BB, BlockChain &Chain,
340     const BlockFilterSet *BlockFilter) {
341   const BranchProbability HotProb(4, 5); // 80%
342
343   MachineBasicBlock *BestSucc = 0;
344   // FIXME: Due to the performance of the probability and weight routines in
345   // the MBPI analysis, we manually compute probabilities using the edge
346   // weights. This is suboptimal as it means that the somewhat subtle
347   // definition of edge weight semantics is encoded here as well. We should
348   // improve the MBPI interface to effeciently support query patterns such as
349   // this.
350   uint32_t BestWeight = 0;
351   uint32_t WeightScale = 0;
352   uint32_t SumWeight = MBPI->getSumForBlock(BB, WeightScale);
353   DEBUG(dbgs() << "Attempting merge from: " << getBlockName(BB) << "\n");
354   for (MachineBasicBlock::succ_iterator SI = BB->succ_begin(),
355                                         SE = BB->succ_end();
356        SI != SE; ++SI) {
357     if (BlockFilter && !BlockFilter->count(*SI))
358       continue;
359     BlockChain &SuccChain = *BlockToChain[*SI];
360     if (&SuccChain == &Chain) {
361       DEBUG(dbgs() << "    " << getBlockName(*SI) << " -> Already merged!\n");
362       continue;
363     }
364     if (*SI != *SuccChain.begin()) {
365       DEBUG(dbgs() << "    " << getBlockName(*SI) << " -> Mid chain!\n");
366       continue;
367     }
368
369     uint32_t SuccWeight = MBPI->getEdgeWeight(BB, *SI);
370     BranchProbability SuccProb(SuccWeight / WeightScale, SumWeight);
371
372     // Only consider successors which are either "hot", or wouldn't violate
373     // any CFG constraints.
374     if (SuccChain.LoopPredecessors != 0) {
375       if (SuccProb < HotProb) {
376         DEBUG(dbgs() << "    " << getBlockName(*SI) << " -> CFG conflict\n");
377         continue;
378       }
379
380       // Make sure that a hot successor doesn't have a globally more important
381       // predecessor.
382       BlockFrequency CandidateEdgeFreq
383         = MBFI->getBlockFreq(BB) * SuccProb * HotProb.getCompl();
384       bool BadCFGConflict = false;
385       for (MachineBasicBlock::pred_iterator PI = (*SI)->pred_begin(),
386                                             PE = (*SI)->pred_end();
387            PI != PE; ++PI) {
388         if (*PI == *SI || (BlockFilter && !BlockFilter->count(*PI)) ||
389             BlockToChain[*PI] == &Chain)
390           continue;
391         BlockFrequency PredEdgeFreq
392           = MBFI->getBlockFreq(*PI) * MBPI->getEdgeProbability(*PI, *SI);
393         if (PredEdgeFreq >= CandidateEdgeFreq) {
394           BadCFGConflict = true;
395           break;
396         }
397       }
398       if (BadCFGConflict) {
399         DEBUG(dbgs() << "    " << getBlockName(*SI)
400                                << " -> non-cold CFG conflict\n");
401         continue;
402       }
403     }
404
405     DEBUG(dbgs() << "    " << getBlockName(*SI) << " -> " << SuccProb
406                  << " (prob)"
407                  << (SuccChain.LoopPredecessors != 0 ? " (CFG break)" : "")
408                  << "\n");
409     if (BestSucc && BestWeight >= SuccWeight)
410       continue;
411     BestSucc = *SI;
412     BestWeight = SuccWeight;
413   }
414   return BestSucc;
415 }
416
417 namespace {
418 /// \brief Predicate struct to detect blocks already placed.
419 class IsBlockPlaced {
420   const BlockChain &PlacedChain;
421   const BlockToChainMapType &BlockToChain;
422
423 public:
424   IsBlockPlaced(const BlockChain &PlacedChain,
425                 const BlockToChainMapType &BlockToChain)
426       : PlacedChain(PlacedChain), BlockToChain(BlockToChain) {}
427
428   bool operator()(MachineBasicBlock *BB) const {
429     return BlockToChain.lookup(BB) == &PlacedChain;
430   }
431 };
432 }
433
434 /// \brief Select the best block from a worklist.
435 ///
436 /// This looks through the provided worklist as a list of candidate basic
437 /// blocks and select the most profitable one to place. The definition of
438 /// profitable only really makes sense in the context of a loop. This returns
439 /// the most frequently visited block in the worklist, which in the case of
440 /// a loop, is the one most desirable to be physically close to the rest of the
441 /// loop body in order to improve icache behavior.
442 ///
443 /// \returns The best block found, or null if none are viable.
444 MachineBasicBlock *MachineBlockPlacement::selectBestCandidateBlock(
445     BlockChain &Chain, SmallVectorImpl<MachineBasicBlock *> &WorkList,
446     const BlockFilterSet *BlockFilter) {
447   // Once we need to walk the worklist looking for a candidate, cleanup the
448   // worklist of already placed entries.
449   // FIXME: If this shows up on profiles, it could be folded (at the cost of
450   // some code complexity) into the loop below.
451   WorkList.erase(std::remove_if(WorkList.begin(), WorkList.end(),
452                                 IsBlockPlaced(Chain, BlockToChain)),
453                  WorkList.end());
454
455   MachineBasicBlock *BestBlock = 0;
456   BlockFrequency BestFreq;
457   for (SmallVectorImpl<MachineBasicBlock *>::iterator WBI = WorkList.begin(),
458                                                       WBE = WorkList.end();
459        WBI != WBE; ++WBI) {
460     assert(!BlockFilter || BlockFilter->count(*WBI));
461     BlockChain &SuccChain = *BlockToChain[*WBI];
462     if (&SuccChain == &Chain) {
463       DEBUG(dbgs() << "    " << getBlockName(*WBI)
464                    << " -> Already merged!\n");
465       continue;
466     }
467     assert(SuccChain.LoopPredecessors == 0 && "Found CFG-violating block");
468
469     BlockFrequency CandidateFreq = MBFI->getBlockFreq(*WBI);
470     DEBUG(dbgs() << "    " << getBlockName(*WBI) << " -> " << CandidateFreq
471                  << " (freq)\n");
472     if (BestBlock && BestFreq >= CandidateFreq)
473       continue;
474     BestBlock = *WBI;
475     BestFreq = CandidateFreq;
476   }
477   return BestBlock;
478 }
479
480 /// \brief Retrieve the first unplaced basic block.
481 ///
482 /// This routine is called when we are unable to use the CFG to walk through
483 /// all of the basic blocks and form a chain due to unnatural loops in the CFG.
484 /// We walk through the function's blocks in order, starting from the
485 /// LastUnplacedBlockIt. We update this iterator on each call to avoid
486 /// re-scanning the entire sequence on repeated calls to this routine.
487 MachineBasicBlock *MachineBlockPlacement::getFirstUnplacedBlock(
488     MachineFunction &F, const BlockChain &PlacedChain,
489     MachineFunction::iterator &PrevUnplacedBlockIt,
490     const BlockFilterSet *BlockFilter) {
491   for (MachineFunction::iterator I = PrevUnplacedBlockIt, E = F.end(); I != E;
492        ++I) {
493     if (BlockFilter && !BlockFilter->count(I))
494       continue;
495     if (BlockToChain[I] != &PlacedChain) {
496       PrevUnplacedBlockIt = I;
497       // Now select the head of the chain to which the unplaced block belongs
498       // as the block to place. This will force the entire chain to be placed,
499       // and satisfies the requirements of merging chains.
500       return *BlockToChain[I]->begin();
501     }
502   }
503   return 0;
504 }
505
506 void MachineBlockPlacement::buildChain(
507     MachineBasicBlock *BB,
508     BlockChain &Chain,
509     SmallVectorImpl<MachineBasicBlock *> &BlockWorkList,
510     const BlockFilterSet *BlockFilter) {
511   assert(BB);
512   assert(BlockToChain[BB] == &Chain);
513   MachineFunction &F = *BB->getParent();
514   MachineFunction::iterator PrevUnplacedBlockIt = F.begin();
515
516   MachineBasicBlock *LoopHeaderBB = BB;
517   markChainSuccessors(Chain, LoopHeaderBB, BlockWorkList, BlockFilter);
518   BB = *llvm::prior(Chain.end());
519   for (;;) {
520     assert(BB);
521     assert(BlockToChain[BB] == &Chain);
522     assert(*llvm::prior(Chain.end()) == BB);
523     MachineBasicBlock *BestSucc = 0;
524
525     // Look for the best viable successor if there is one to place immediately
526     // after this block.
527     BestSucc = selectBestSuccessor(BB, Chain, BlockFilter);
528
529     // If an immediate successor isn't available, look for the best viable
530     // block among those we've identified as not violating the loop's CFG at
531     // this point. This won't be a fallthrough, but it will increase locality.
532     if (!BestSucc)
533       BestSucc = selectBestCandidateBlock(Chain, BlockWorkList, BlockFilter);
534
535     if (!BestSucc) {
536       BestSucc = getFirstUnplacedBlock(F, Chain, PrevUnplacedBlockIt,
537                                        BlockFilter);
538       if (!BestSucc)
539         break;
540
541       DEBUG(dbgs() << "Unnatural loop CFG detected, forcibly merging the "
542                       "layout successor until the CFG reduces\n");
543     }
544
545     // Place this block, updating the datastructures to reflect its placement.
546     BlockChain &SuccChain = *BlockToChain[BestSucc];
547     // Zero out LoopPredecessors for the successor we're about to merge in case
548     // we selected a successor that didn't fit naturally into the CFG.
549     SuccChain.LoopPredecessors = 0;
550     DEBUG(dbgs() << "Merging from " << getBlockNum(BB)
551                  << " to " << getBlockNum(BestSucc) << "\n");
552     markChainSuccessors(SuccChain, LoopHeaderBB, BlockWorkList, BlockFilter);
553     Chain.merge(BestSucc, &SuccChain);
554     BB = *llvm::prior(Chain.end());
555   };
556
557   DEBUG(dbgs() << "Finished forming chain for header block "
558                << getBlockNum(*Chain.begin()) << "\n");
559 }
560
561 /// \brief Attempt to rotate loop chains ending in an unconditional backedge.
562 ///
563 /// This is a very conservative attempt to rotate unconditional backedge jumps
564 /// into fallthrough opportunities. It only attempts to perform the rotation
565 /// when it is trivial to find a block within the loop which has a conditional
566 /// loop exit. This block is then made the bottom of the chain, and the in-loop
567 /// fallthrough block the top. That turns a conditional branch out of the loop
568 /// into a conditional branch to the top of the loop while completely
569 /// eliminitating an unconditional branch within the loop.
570 void MachineBlockPlacement::rotateLoop(MachineLoop &L,
571                                        BlockChain &LoopChain,
572                                        const BlockFilterSet &LoopBlockSet) {
573   MachineBasicBlock *Header = *L.block_begin();
574   // Ensure that we have a chain of blocks which starts with the loop header.
575   // Otherwise, rotating the blocks might break an analyzable branch.
576   if (Header != *LoopChain.begin())
577     return;
578
579   // We only support rotating the loop chain as a unit, so look directly at the
580   // back of the chain and check that it has a backedge.
581   MachineBasicBlock *Latch = *llvm::prior(LoopChain.end());
582   if (Latch == Header ||
583       !Latch->isSuccessor(Header))
584     return;
585
586   // We need to analyze the branch and determine if rotating the loop will
587   // completely remove a branch. We bail if the analysis fails or we don't find
588   // an unconditional backedge. Note that this has to handle cases where the
589   // original order was rotated, and the chain has un-done it. As a result,
590   // there may not (yet) be the unconditional branch, but we can tell whether
591   // one will be added when updating the terminators.
592   SmallVector<MachineOperand, 4> Cond;
593   MachineBasicBlock *TBB = 0, *FBB = 0;
594   if (TII->AnalyzeBranch(*Latch, TBB, FBB, Cond) || !Cond.empty())
595     return;
596
597   // Next we need to find a split point. This rotate algorithm is *very*
598   // narrow, and it only tries to do the rotate when it can find a split point
599   // which is an analyzable branch that exits the loop. Splitting there allows
600   // us to form a fallthrough out of the loop and a conditional jump to the top
601   // of the loop after rotation.
602   MachineBasicBlock *NewBottom = 0, *NewTop = 0;
603   BlockChain::iterator SplitIt = LoopChain.end();
604   for (BlockChain::reverse_iterator I = llvm::next(LoopChain.rbegin()),
605                                     E = LoopChain.rend();
606        I != E; ++I) {
607     Cond.clear();
608     TBB = FBB = 0;
609     // Ensure that this is a block with a conditional branch which we can
610     // analyze and re-form after rotating the loop. While it might be tempting
611     // to use the TBB or FBB output parameters from this, they will often be
612     // lies as they are only correct after the terminators have been updated,
613     // and we are mid-chain formation.
614     if (TII->AnalyzeBranch(**I, TBB, FBB, Cond) || Cond.empty())
615       continue;
616
617     // See if this block is an exiting block from the loop. LoopInfo provides
618     // a nice API for this, but it's actuall N*M runtime where N is the number
619     // of blocks in the loop and M is the number of successors. We can
620     // eliminate the N by doing this ourselves.
621     // FIXME: The LoopInfo datastructure should be improved for these types of
622     // queries.
623     MachineBasicBlock *ExitB = 0;
624     for (MachineBasicBlock::succ_iterator SI = (*I)->succ_begin(), SE = (*I)->succ_end();
625          SI != SE; ++SI) {
626       if (!(*SI)->isLandingPad() && *SI != *I && !LoopBlockSet.count(*SI)) {
627         ExitB = *SI;
628         break;
629       }
630     }
631     if (!ExitB)
632       continue;
633
634     NewBottom = *I;
635     NewTop = *llvm::prior(I);
636     SplitIt = I.base();
637     break;
638   }
639   if (!NewBottom || !NewTop ||
640       SplitIt == LoopChain.end() || SplitIt == LoopChain.begin())
641     return;
642   assert(BlockToChain[NewBottom] == &LoopChain);
643   assert(BlockToChain[NewTop] == &LoopChain);
644   assert(*SplitIt == NewTop);
645
646   // Rotate the chain and we're done.
647   DEBUG(dbgs() << "Rotating loop headed by: " << getBlockName(Header) << "\n"
648                << "  new top:    " << getBlockName(NewTop) << "\n"
649                << "  new bottom: " << getBlockName(NewBottom) << "\n");
650   std::rotate(LoopChain.begin(), SplitIt, LoopChain.end());
651 }
652
653 /// \brief Forms basic block chains from the natural loop structures.
654 ///
655 /// These chains are designed to preserve the existing *structure* of the code
656 /// as much as possible. We can then stitch the chains together in a way which
657 /// both preserves the topological structure and minimizes taken conditional
658 /// branches.
659 void MachineBlockPlacement::buildLoopChains(MachineFunction &F,
660                                             MachineLoop &L) {
661   // First recurse through any nested loops, building chains for those inner
662   // loops.
663   for (MachineLoop::iterator LI = L.begin(), LE = L.end(); LI != LE; ++LI)
664     buildLoopChains(F, **LI);
665
666   SmallVector<MachineBasicBlock *, 16> BlockWorkList;
667   BlockFilterSet LoopBlockSet(L.block_begin(), L.block_end());
668   BlockChain &LoopChain = *BlockToChain[L.getHeader()];
669
670   // FIXME: This is a really lame way of walking the chains in the loop: we
671   // walk the blocks, and use a set to prevent visiting a particular chain
672   // twice.
673   SmallPtrSet<BlockChain *, 4> UpdatedPreds;
674   for (MachineLoop::block_iterator BI = L.block_begin(),
675                                    BE = L.block_end();
676        BI != BE; ++BI) {
677     BlockChain &Chain = *BlockToChain[*BI];
678     if (!UpdatedPreds.insert(&Chain) || BI == L.block_begin())
679       continue;
680
681     assert(Chain.LoopPredecessors == 0);
682     for (BlockChain::iterator BCI = Chain.begin(), BCE = Chain.end();
683          BCI != BCE; ++BCI) {
684       assert(BlockToChain[*BCI] == &Chain);
685       for (MachineBasicBlock::pred_iterator PI = (*BCI)->pred_begin(),
686                                             PE = (*BCI)->pred_end();
687            PI != PE; ++PI) {
688         if (BlockToChain[*PI] == &Chain || !LoopBlockSet.count(*PI))
689           continue;
690         ++Chain.LoopPredecessors;
691       }
692     }
693
694     if (Chain.LoopPredecessors == 0)
695       BlockWorkList.push_back(*Chain.begin());
696   }
697
698   buildChain(*L.block_begin(), LoopChain, BlockWorkList, &LoopBlockSet);
699   rotateLoop(L, LoopChain, LoopBlockSet);
700
701   DEBUG({
702     // Crash at the end so we get all of the debugging output first.
703     bool BadLoop = false;
704     if (LoopChain.LoopPredecessors) {
705       BadLoop = true;
706       dbgs() << "Loop chain contains a block without its preds placed!\n"
707              << "  Loop header:  " << getBlockName(*L.block_begin()) << "\n"
708              << "  Chain header: " << getBlockName(*LoopChain.begin()) << "\n";
709     }
710     for (BlockChain::iterator BCI = LoopChain.begin(), BCE = LoopChain.end();
711          BCI != BCE; ++BCI)
712       if (!LoopBlockSet.erase(*BCI)) {
713         // We don't mark the loop as bad here because there are real situations
714         // where this can occur. For example, with an unanalyzable fallthrough
715         // from a loop block to a non-loop block or vice versa.
716         dbgs() << "Loop chain contains a block not contained by the loop!\n"
717                << "  Loop header:  " << getBlockName(*L.block_begin()) << "\n"
718                << "  Chain header: " << getBlockName(*LoopChain.begin()) << "\n"
719                << "  Bad block:    " << getBlockName(*BCI) << "\n";
720       }
721
722     if (!LoopBlockSet.empty()) {
723       BadLoop = true;
724       for (BlockFilterSet::iterator LBI = LoopBlockSet.begin(),
725                                     LBE = LoopBlockSet.end();
726            LBI != LBE; ++LBI)
727         dbgs() << "Loop contains blocks never placed into a chain!\n"
728                << "  Loop header:  " << getBlockName(*L.block_begin()) << "\n"
729                << "  Chain header: " << getBlockName(*LoopChain.begin()) << "\n"
730                << "  Bad block:    " << getBlockName(*LBI) << "\n";
731     }
732     assert(!BadLoop && "Detected problems with the placement of this loop.");
733   });
734 }
735
736 void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
737   // Ensure that every BB in the function has an associated chain to simplify
738   // the assumptions of the remaining algorithm.
739   SmallVector<MachineOperand, 4> Cond; // For AnalyzeBranch.
740   for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
741     MachineBasicBlock *BB = FI;
742     BlockChain *Chain
743       = new (ChainAllocator.Allocate()) BlockChain(BlockToChain, BB);
744     // Also, merge any blocks which we cannot reason about and must preserve
745     // the exact fallthrough behavior for.
746     for (;;) {
747       Cond.clear();
748       MachineBasicBlock *TBB = 0, *FBB = 0; // For AnalyzeBranch.
749       if (!TII->AnalyzeBranch(*BB, TBB, FBB, Cond) || !FI->canFallThrough())
750         break;
751
752       MachineFunction::iterator NextFI(llvm::next(FI));
753       MachineBasicBlock *NextBB = NextFI;
754       // Ensure that the layout successor is a viable block, as we know that
755       // fallthrough is a possibility.
756       assert(NextFI != FE && "Can't fallthrough past the last block.");
757       DEBUG(dbgs() << "Pre-merging due to unanalyzable fallthrough: "
758                    << getBlockName(BB) << " -> " << getBlockName(NextBB)
759                    << "\n");
760       Chain->merge(NextBB, 0);
761       FI = NextFI;
762       BB = NextBB;
763     }
764   }
765
766   // Build any loop-based chains.
767   for (MachineLoopInfo::iterator LI = MLI->begin(), LE = MLI->end(); LI != LE;
768        ++LI)
769     buildLoopChains(F, **LI);
770
771   SmallVector<MachineBasicBlock *, 16> BlockWorkList;
772
773   SmallPtrSet<BlockChain *, 4> UpdatedPreds;
774   for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
775     MachineBasicBlock *BB = &*FI;
776     BlockChain &Chain = *BlockToChain[BB];
777     if (!UpdatedPreds.insert(&Chain))
778       continue;
779
780     assert(Chain.LoopPredecessors == 0);
781     for (BlockChain::iterator BCI = Chain.begin(), BCE = Chain.end();
782          BCI != BCE; ++BCI) {
783       assert(BlockToChain[*BCI] == &Chain);
784       for (MachineBasicBlock::pred_iterator PI = (*BCI)->pred_begin(),
785                                             PE = (*BCI)->pred_end();
786            PI != PE; ++PI) {
787         if (BlockToChain[*PI] == &Chain)
788           continue;
789         ++Chain.LoopPredecessors;
790       }
791     }
792
793     if (Chain.LoopPredecessors == 0)
794       BlockWorkList.push_back(*Chain.begin());
795   }
796
797   BlockChain &FunctionChain = *BlockToChain[&F.front()];
798   buildChain(&F.front(), FunctionChain, BlockWorkList);
799
800   typedef SmallPtrSet<MachineBasicBlock *, 16> FunctionBlockSetType;
801   DEBUG({
802     // Crash at the end so we get all of the debugging output first.
803     bool BadFunc = false;
804     FunctionBlockSetType FunctionBlockSet;
805     for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI)
806       FunctionBlockSet.insert(FI);
807
808     for (BlockChain::iterator BCI = FunctionChain.begin(),
809                               BCE = FunctionChain.end();
810          BCI != BCE; ++BCI)
811       if (!FunctionBlockSet.erase(*BCI)) {
812         BadFunc = true;
813         dbgs() << "Function chain contains a block not in the function!\n"
814                << "  Bad block:    " << getBlockName(*BCI) << "\n";
815       }
816
817     if (!FunctionBlockSet.empty()) {
818       BadFunc = true;
819       for (FunctionBlockSetType::iterator FBI = FunctionBlockSet.begin(),
820                                           FBE = FunctionBlockSet.end();
821            FBI != FBE; ++FBI)
822         dbgs() << "Function contains blocks never placed into a chain!\n"
823                << "  Bad block:    " << getBlockName(*FBI) << "\n";
824     }
825     assert(!BadFunc && "Detected problems with the block placement.");
826   });
827
828   // Splice the blocks into place.
829   MachineFunction::iterator InsertPos = F.begin();
830   for (BlockChain::iterator BI = FunctionChain.begin(),
831                             BE = FunctionChain.end();
832        BI != BE; ++BI) {
833     DEBUG(dbgs() << (BI == FunctionChain.begin() ? "Placing chain "
834                                                   : "          ... ")
835           << getBlockName(*BI) << "\n");
836     if (InsertPos != MachineFunction::iterator(*BI))
837       F.splice(InsertPos, *BI);
838     else
839       ++InsertPos;
840
841     // Update the terminator of the previous block.
842     if (BI == FunctionChain.begin())
843       continue;
844     MachineBasicBlock *PrevBB = llvm::prior(MachineFunction::iterator(*BI));
845
846     // FIXME: It would be awesome of updateTerminator would just return rather
847     // than assert when the branch cannot be analyzed in order to remove this
848     // boiler plate.
849     Cond.clear();
850     MachineBasicBlock *TBB = 0, *FBB = 0; // For AnalyzeBranch.
851     if (!TII->AnalyzeBranch(*PrevBB, TBB, FBB, Cond))
852       PrevBB->updateTerminator();
853   }
854
855   // Fixup the last block.
856   Cond.clear();
857   MachineBasicBlock *TBB = 0, *FBB = 0; // For AnalyzeBranch.
858   if (!TII->AnalyzeBranch(F.back(), TBB, FBB, Cond))
859     F.back().updateTerminator();
860 }
861
862 /// \brief Recursive helper to align a loop and any nested loops.
863 static void AlignLoop(MachineFunction &F, MachineLoop *L, unsigned Align) {
864   // Recurse through nested loops.
865   for (MachineLoop::iterator I = L->begin(), E = L->end(); I != E; ++I)
866     AlignLoop(F, *I, Align);
867
868   L->getTopBlock()->setAlignment(Align);
869 }
870
871 /// \brief Align loop headers to target preferred alignments.
872 void MachineBlockPlacement::AlignLoops(MachineFunction &F) {
873   if (F.getFunction()->hasFnAttr(Attribute::OptimizeForSize))
874     return;
875
876   unsigned Align = TLI->getPrefLoopAlignment();
877   if (!Align)
878     return;  // Don't care about loop alignment.
879
880   for (MachineLoopInfo::iterator I = MLI->begin(), E = MLI->end(); I != E; ++I)
881     AlignLoop(F, *I, Align);
882 }
883
884 bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &F) {
885   // Check for single-block functions and skip them.
886   if (llvm::next(F.begin()) == F.end())
887     return false;
888
889   MBPI = &getAnalysis<MachineBranchProbabilityInfo>();
890   MBFI = &getAnalysis<MachineBlockFrequencyInfo>();
891   MLI = &getAnalysis<MachineLoopInfo>();
892   TII = F.getTarget().getInstrInfo();
893   TLI = F.getTarget().getTargetLowering();
894   assert(BlockToChain.empty());
895
896   buildCFGChains(F);
897   AlignLoops(F);
898
899   BlockToChain.clear();
900   ChainAllocator.DestroyAll();
901
902   // We always return true as we have no way to track whether the final order
903   // differs from the original order.
904   return true;
905 }
906
907 namespace {
908 /// \brief A pass to compute block placement statistics.
909 ///
910 /// A separate pass to compute interesting statistics for evaluating block
911 /// placement. This is separate from the actual placement pass so that they can
912 /// be computed in the absense of any placement transformations or when using
913 /// alternative placement strategies.
914 class MachineBlockPlacementStats : public MachineFunctionPass {
915   /// \brief A handle to the branch probability pass.
916   const MachineBranchProbabilityInfo *MBPI;
917
918   /// \brief A handle to the function-wide block frequency pass.
919   const MachineBlockFrequencyInfo *MBFI;
920
921 public:
922   static char ID; // Pass identification, replacement for typeid
923   MachineBlockPlacementStats() : MachineFunctionPass(ID) {
924     initializeMachineBlockPlacementStatsPass(*PassRegistry::getPassRegistry());
925   }
926
927   bool runOnMachineFunction(MachineFunction &F);
928
929   void getAnalysisUsage(AnalysisUsage &AU) const {
930     AU.addRequired<MachineBranchProbabilityInfo>();
931     AU.addRequired<MachineBlockFrequencyInfo>();
932     AU.setPreservesAll();
933     MachineFunctionPass::getAnalysisUsage(AU);
934   }
935
936   const char *getPassName() const { return "Block Placement Stats"; }
937 };
938 }
939
940 char MachineBlockPlacementStats::ID = 0;
941 INITIALIZE_PASS_BEGIN(MachineBlockPlacementStats, "block-placement-stats",
942                       "Basic Block Placement Stats", false, false)
943 INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo)
944 INITIALIZE_PASS_DEPENDENCY(MachineBlockFrequencyInfo)
945 INITIALIZE_PASS_END(MachineBlockPlacementStats, "block-placement-stats",
946                     "Basic Block Placement Stats", false, false)
947
948 FunctionPass *llvm::createMachineBlockPlacementStatsPass() {
949   return new MachineBlockPlacementStats();
950 }
951
952 bool MachineBlockPlacementStats::runOnMachineFunction(MachineFunction &F) {
953   // Check for single-block functions and skip them.
954   if (llvm::next(F.begin()) == F.end())
955     return false;
956
957   MBPI = &getAnalysis<MachineBranchProbabilityInfo>();
958   MBFI = &getAnalysis<MachineBlockFrequencyInfo>();
959
960   for (MachineFunction::iterator I = F.begin(), E = F.end(); I != E; ++I) {
961     BlockFrequency BlockFreq = MBFI->getBlockFreq(I);
962     Statistic &NumBranches = (I->succ_size() > 1) ? NumCondBranches
963                                                   : NumUncondBranches;
964     Statistic &BranchTakenFreq = (I->succ_size() > 1) ? CondBranchTakenFreq
965                                                       : UncondBranchTakenFreq;
966     for (MachineBasicBlock::succ_iterator SI = I->succ_begin(),
967                                           SE = I->succ_end();
968          SI != SE; ++SI) {
969       // Skip if this successor is a fallthrough.
970       if (I->isLayoutSuccessor(*SI))
971         continue;
972
973       BlockFrequency EdgeFreq = BlockFreq * MBPI->getEdgeProbability(I, *SI);
974       ++NumBranches;
975       BranchTakenFreq += EdgeFreq.getFrequency();
976     }
977   }
978
979   return false;
980 }
981