Introduce a loop block rotation optimization to the new block placement
[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.
589   SmallVector<MachineOperand, 4> Cond;
590   MachineBasicBlock *TBB = 0, *FBB = 0;
591   if (TII->AnalyzeBranch(*Latch, TBB, FBB, Cond) || !TBB || FBB || !Cond.empty())
592     return;
593   assert(TBB == Header && "Found backedge that doesn't go to the header!");
594
595   // Next we need to find a split point. This rotate algorithm is *very*
596   // narrow, and it only tries to do the rotate when it can find a split point
597   // which is an analyzable branch that exits the loop. Splitting there allows
598   // us to form a fallthrough out of the loop and a conditional jump to the top
599   // of the loop after rotation.
600   MachineBasicBlock *NewBottom = 0, *NewTop = 0;
601   BlockChain::iterator SplitIt = LoopChain.end();
602   for (BlockChain::reverse_iterator I = llvm::next(LoopChain.rbegin()),
603                                     E = LoopChain.rend();
604        I != E; ++I) {
605     Cond.clear();
606     TBB = FBB = 0;
607     if (TII->AnalyzeBranch(**I, TBB, FBB, Cond) || !TBB || Cond.empty())
608       continue;
609     // Swap things so that the in-loop successor is always in FBB or is an
610     // implicit fallthrough.
611     if (FBB && !LoopBlockSet.count(FBB))
612       std::swap(TBB, FBB);
613     // Check that we actually have a loop exit branch.
614     // FIXME: We should probably just use the LoopInfo for this.
615     if (!LoopBlockSet.count(TBB) && (!FBB || !LoopBlockSet.count(FBB))) {
616       // This is a very arbitrary restriction, but it ensures we don't disrupt
617       // the existing chain layout. We insist that the in-loop successor is
618       // chained as a fallthrough successor (even if the branch hasn't been
619       // updated to reflect that yet).
620       if (FBB && FBB != *llvm::prior(I))
621         continue;
622
623       NewBottom = *I;
624       NewTop = *llvm::prior(I);
625       SplitIt = I.base();
626       break;
627     }
628   }
629   if (!NewBottom || !NewTop ||
630       SplitIt == LoopChain.end() || SplitIt == LoopChain.begin())
631     return;
632   assert(BlockToChain[NewBottom] == &LoopChain);
633   assert(BlockToChain[NewTop] == &LoopChain);
634   assert(*SplitIt == NewTop);
635
636   // Rotate the chain and we're done.
637   DEBUG(dbgs() << "Rotating loop headed by: " << getBlockName(Header) << "\n"
638                << "  new top:    " << getBlockName(NewTop) << "\n"
639                << "  new bottom: " << getBlockName(NewBottom) << "\n");
640   std::rotate(LoopChain.begin(), SplitIt, LoopChain.end());
641 }
642
643 /// \brief Forms basic block chains from the natural loop structures.
644 ///
645 /// These chains are designed to preserve the existing *structure* of the code
646 /// as much as possible. We can then stitch the chains together in a way which
647 /// both preserves the topological structure and minimizes taken conditional
648 /// branches.
649 void MachineBlockPlacement::buildLoopChains(MachineFunction &F,
650                                             MachineLoop &L) {
651   // First recurse through any nested loops, building chains for those inner
652   // loops.
653   for (MachineLoop::iterator LI = L.begin(), LE = L.end(); LI != LE; ++LI)
654     buildLoopChains(F, **LI);
655
656   SmallVector<MachineBasicBlock *, 16> BlockWorkList;
657   BlockFilterSet LoopBlockSet(L.block_begin(), L.block_end());
658   BlockChain &LoopChain = *BlockToChain[L.getHeader()];
659
660   // FIXME: This is a really lame way of walking the chains in the loop: we
661   // walk the blocks, and use a set to prevent visiting a particular chain
662   // twice.
663   SmallPtrSet<BlockChain *, 4> UpdatedPreds;
664   for (MachineLoop::block_iterator BI = L.block_begin(),
665                                    BE = L.block_end();
666        BI != BE; ++BI) {
667     BlockChain &Chain = *BlockToChain[*BI];
668     if (!UpdatedPreds.insert(&Chain) || BI == L.block_begin())
669       continue;
670
671     assert(Chain.LoopPredecessors == 0);
672     for (BlockChain::iterator BCI = Chain.begin(), BCE = Chain.end();
673          BCI != BCE; ++BCI) {
674       assert(BlockToChain[*BCI] == &Chain);
675       for (MachineBasicBlock::pred_iterator PI = (*BCI)->pred_begin(),
676                                             PE = (*BCI)->pred_end();
677            PI != PE; ++PI) {
678         if (BlockToChain[*PI] == &Chain || !LoopBlockSet.count(*PI))
679           continue;
680         ++Chain.LoopPredecessors;
681       }
682     }
683
684     if (Chain.LoopPredecessors == 0)
685       BlockWorkList.push_back(*Chain.begin());
686   }
687
688   buildChain(*L.block_begin(), LoopChain, BlockWorkList, &LoopBlockSet);
689   rotateLoop(L, LoopChain, LoopBlockSet);
690
691   DEBUG({
692     // Crash at the end so we get all of the debugging output first.
693     bool BadLoop = false;
694     if (LoopChain.LoopPredecessors) {
695       BadLoop = true;
696       dbgs() << "Loop chain contains a block without its preds placed!\n"
697              << "  Loop header:  " << getBlockName(*L.block_begin()) << "\n"
698              << "  Chain header: " << getBlockName(*LoopChain.begin()) << "\n";
699     }
700     for (BlockChain::iterator BCI = LoopChain.begin(), BCE = LoopChain.end();
701          BCI != BCE; ++BCI)
702       if (!LoopBlockSet.erase(*BCI)) {
703         // We don't mark the loop as bad here because there are real situations
704         // where this can occur. For example, with an unanalyzable fallthrough
705         // from a loop block to a non-loop block or vice versa.
706         dbgs() << "Loop chain contains a block not contained by the loop!\n"
707                << "  Loop header:  " << getBlockName(*L.block_begin()) << "\n"
708                << "  Chain header: " << getBlockName(*LoopChain.begin()) << "\n"
709                << "  Bad block:    " << getBlockName(*BCI) << "\n";
710       }
711
712     if (!LoopBlockSet.empty()) {
713       BadLoop = true;
714       for (BlockFilterSet::iterator LBI = LoopBlockSet.begin(),
715                                     LBE = LoopBlockSet.end();
716            LBI != LBE; ++LBI)
717         dbgs() << "Loop contains blocks never placed into a chain!\n"
718                << "  Loop header:  " << getBlockName(*L.block_begin()) << "\n"
719                << "  Chain header: " << getBlockName(*LoopChain.begin()) << "\n"
720                << "  Bad block:    " << getBlockName(*LBI) << "\n";
721     }
722     assert(!BadLoop && "Detected problems with the placement of this loop.");
723   });
724 }
725
726 void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
727   // Ensure that every BB in the function has an associated chain to simplify
728   // the assumptions of the remaining algorithm.
729   SmallVector<MachineOperand, 4> Cond; // For AnalyzeBranch.
730   for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
731     MachineBasicBlock *BB = FI;
732     BlockChain *Chain
733       = new (ChainAllocator.Allocate()) BlockChain(BlockToChain, BB);
734     // Also, merge any blocks which we cannot reason about and must preserve
735     // the exact fallthrough behavior for.
736     for (;;) {
737       Cond.clear();
738       MachineBasicBlock *TBB = 0, *FBB = 0; // For AnalyzeBranch.
739       if (!TII->AnalyzeBranch(*BB, TBB, FBB, Cond) || !FI->canFallThrough())
740         break;
741
742       MachineFunction::iterator NextFI(llvm::next(FI));
743       MachineBasicBlock *NextBB = NextFI;
744       // Ensure that the layout successor is a viable block, as we know that
745       // fallthrough is a possibility.
746       assert(NextFI != FE && "Can't fallthrough past the last block.");
747       DEBUG(dbgs() << "Pre-merging due to unanalyzable fallthrough: "
748                    << getBlockName(BB) << " -> " << getBlockName(NextBB)
749                    << "\n");
750       Chain->merge(NextBB, 0);
751       FI = NextFI;
752       BB = NextBB;
753     }
754   }
755
756   // Build any loop-based chains.
757   for (MachineLoopInfo::iterator LI = MLI->begin(), LE = MLI->end(); LI != LE;
758        ++LI)
759     buildLoopChains(F, **LI);
760
761   SmallVector<MachineBasicBlock *, 16> BlockWorkList;
762
763   SmallPtrSet<BlockChain *, 4> UpdatedPreds;
764   for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
765     MachineBasicBlock *BB = &*FI;
766     BlockChain &Chain = *BlockToChain[BB];
767     if (!UpdatedPreds.insert(&Chain))
768       continue;
769
770     assert(Chain.LoopPredecessors == 0);
771     for (BlockChain::iterator BCI = Chain.begin(), BCE = Chain.end();
772          BCI != BCE; ++BCI) {
773       assert(BlockToChain[*BCI] == &Chain);
774       for (MachineBasicBlock::pred_iterator PI = (*BCI)->pred_begin(),
775                                             PE = (*BCI)->pred_end();
776            PI != PE; ++PI) {
777         if (BlockToChain[*PI] == &Chain)
778           continue;
779         ++Chain.LoopPredecessors;
780       }
781     }
782
783     if (Chain.LoopPredecessors == 0)
784       BlockWorkList.push_back(*Chain.begin());
785   }
786
787   BlockChain &FunctionChain = *BlockToChain[&F.front()];
788   buildChain(&F.front(), FunctionChain, BlockWorkList);
789
790   typedef SmallPtrSet<MachineBasicBlock *, 16> FunctionBlockSetType;
791   DEBUG({
792     // Crash at the end so we get all of the debugging output first.
793     bool BadFunc = false;
794     FunctionBlockSetType FunctionBlockSet;
795     for (MachineFunction::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI)
796       FunctionBlockSet.insert(FI);
797
798     for (BlockChain::iterator BCI = FunctionChain.begin(),
799                               BCE = FunctionChain.end();
800          BCI != BCE; ++BCI)
801       if (!FunctionBlockSet.erase(*BCI)) {
802         BadFunc = true;
803         dbgs() << "Function chain contains a block not in the function!\n"
804                << "  Bad block:    " << getBlockName(*BCI) << "\n";
805       }
806
807     if (!FunctionBlockSet.empty()) {
808       BadFunc = true;
809       for (FunctionBlockSetType::iterator FBI = FunctionBlockSet.begin(),
810                                           FBE = FunctionBlockSet.end();
811            FBI != FBE; ++FBI)
812         dbgs() << "Function contains blocks never placed into a chain!\n"
813                << "  Bad block:    " << getBlockName(*FBI) << "\n";
814     }
815     assert(!BadFunc && "Detected problems with the block placement.");
816   });
817
818   // Splice the blocks into place.
819   MachineFunction::iterator InsertPos = F.begin();
820   for (BlockChain::iterator BI = FunctionChain.begin(),
821                             BE = FunctionChain.end();
822        BI != BE; ++BI) {
823     DEBUG(dbgs() << (BI == FunctionChain.begin() ? "Placing chain "
824                                                   : "          ... ")
825           << getBlockName(*BI) << "\n");
826     if (InsertPos != MachineFunction::iterator(*BI))
827       F.splice(InsertPos, *BI);
828     else
829       ++InsertPos;
830
831     // Update the terminator of the previous block.
832     if (BI == FunctionChain.begin())
833       continue;
834     MachineBasicBlock *PrevBB = llvm::prior(MachineFunction::iterator(*BI));
835
836     // FIXME: It would be awesome of updateTerminator would just return rather
837     // than assert when the branch cannot be analyzed in order to remove this
838     // boiler plate.
839     Cond.clear();
840     MachineBasicBlock *TBB = 0, *FBB = 0; // For AnalyzeBranch.
841     if (!TII->AnalyzeBranch(*PrevBB, TBB, FBB, Cond))
842       PrevBB->updateTerminator();
843   }
844
845   // Fixup the last block.
846   Cond.clear();
847   MachineBasicBlock *TBB = 0, *FBB = 0; // For AnalyzeBranch.
848   if (!TII->AnalyzeBranch(F.back(), TBB, FBB, Cond))
849     F.back().updateTerminator();
850 }
851
852 /// \brief Recursive helper to align a loop and any nested loops.
853 static void AlignLoop(MachineFunction &F, MachineLoop *L, unsigned Align) {
854   // Recurse through nested loops.
855   for (MachineLoop::iterator I = L->begin(), E = L->end(); I != E; ++I)
856     AlignLoop(F, *I, Align);
857
858   L->getTopBlock()->setAlignment(Align);
859 }
860
861 /// \brief Align loop headers to target preferred alignments.
862 void MachineBlockPlacement::AlignLoops(MachineFunction &F) {
863   if (F.getFunction()->hasFnAttr(Attribute::OptimizeForSize))
864     return;
865
866   unsigned Align = TLI->getPrefLoopAlignment();
867   if (!Align)
868     return;  // Don't care about loop alignment.
869
870   for (MachineLoopInfo::iterator I = MLI->begin(), E = MLI->end(); I != E; ++I)
871     AlignLoop(F, *I, Align);
872 }
873
874 bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &F) {
875   // Check for single-block functions and skip them.
876   if (llvm::next(F.begin()) == F.end())
877     return false;
878
879   MBPI = &getAnalysis<MachineBranchProbabilityInfo>();
880   MBFI = &getAnalysis<MachineBlockFrequencyInfo>();
881   MLI = &getAnalysis<MachineLoopInfo>();
882   TII = F.getTarget().getInstrInfo();
883   TLI = F.getTarget().getTargetLowering();
884   assert(BlockToChain.empty());
885
886   buildCFGChains(F);
887   AlignLoops(F);
888
889   BlockToChain.clear();
890   ChainAllocator.DestroyAll();
891
892   // We always return true as we have no way to track whether the final order
893   // differs from the original order.
894   return true;
895 }
896
897 namespace {
898 /// \brief A pass to compute block placement statistics.
899 ///
900 /// A separate pass to compute interesting statistics for evaluating block
901 /// placement. This is separate from the actual placement pass so that they can
902 /// be computed in the absense of any placement transformations or when using
903 /// alternative placement strategies.
904 class MachineBlockPlacementStats : public MachineFunctionPass {
905   /// \brief A handle to the branch probability pass.
906   const MachineBranchProbabilityInfo *MBPI;
907
908   /// \brief A handle to the function-wide block frequency pass.
909   const MachineBlockFrequencyInfo *MBFI;
910
911 public:
912   static char ID; // Pass identification, replacement for typeid
913   MachineBlockPlacementStats() : MachineFunctionPass(ID) {
914     initializeMachineBlockPlacementStatsPass(*PassRegistry::getPassRegistry());
915   }
916
917   bool runOnMachineFunction(MachineFunction &F);
918
919   void getAnalysisUsage(AnalysisUsage &AU) const {
920     AU.addRequired<MachineBranchProbabilityInfo>();
921     AU.addRequired<MachineBlockFrequencyInfo>();
922     AU.setPreservesAll();
923     MachineFunctionPass::getAnalysisUsage(AU);
924   }
925
926   const char *getPassName() const { return "Block Placement Stats"; }
927 };
928 }
929
930 char MachineBlockPlacementStats::ID = 0;
931 INITIALIZE_PASS_BEGIN(MachineBlockPlacementStats, "block-placement-stats",
932                       "Basic Block Placement Stats", false, false)
933 INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo)
934 INITIALIZE_PASS_DEPENDENCY(MachineBlockFrequencyInfo)
935 INITIALIZE_PASS_END(MachineBlockPlacementStats, "block-placement-stats",
936                     "Basic Block Placement Stats", false, false)
937
938 FunctionPass *llvm::createMachineBlockPlacementStatsPass() {
939   return new MachineBlockPlacementStats();
940 }
941
942 bool MachineBlockPlacementStats::runOnMachineFunction(MachineFunction &F) {
943   // Check for single-block functions and skip them.
944   if (llvm::next(F.begin()) == F.end())
945     return false;
946
947   MBPI = &getAnalysis<MachineBranchProbabilityInfo>();
948   MBFI = &getAnalysis<MachineBlockFrequencyInfo>();
949
950   for (MachineFunction::iterator I = F.begin(), E = F.end(); I != E; ++I) {
951     BlockFrequency BlockFreq = MBFI->getBlockFreq(I);
952     Statistic &NumBranches = (I->succ_size() > 1) ? NumCondBranches
953                                                   : NumUncondBranches;
954     Statistic &BranchTakenFreq = (I->succ_size() > 1) ? CondBranchTakenFreq
955                                                       : UncondBranchTakenFreq;
956     for (MachineBasicBlock::succ_iterator SI = I->succ_begin(),
957                                           SE = I->succ_end();
958          SI != SE; ++SI) {
959       // Skip if this successor is a fallthrough.
960       if (I->isLayoutSuccessor(*SI))
961         continue;
962
963       BlockFrequency EdgeFreq = BlockFreq * MBPI->getEdgeProbability(I, *SI);
964       ++NumBranches;
965       BranchTakenFreq += EdgeFreq.getFrequency();
966     }
967   }
968
969   return false;
970 }
971