1 //===- LoopInfo.cpp - Natural Loop Calculator -----------------------------===//
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 defines the LoopInfo class that is used to identify natural loops
11 // and determine the loop depth of various nodes of the CFG.  Note that the
12 // loops identified may actually be several natural loops that share the same
13 // header node... not just a single natural loop.
14 //
15 //===----------------------------------------------------------------------===//
16 
17 #include "llvm/Analysis/LoopInfo.h"
18 #include "llvm/ADT/DepthFirstIterator.h"
19 #include "llvm/ADT/SmallPtrSet.h"
20 #include "llvm/Analysis/LoopInfoImpl.h"
21 #include "llvm/Analysis/LoopIterator.h"
22 #include "llvm/Analysis/ValueTracking.h"
23 #include "llvm/IR/CFG.h"
24 #include "llvm/IR/Constants.h"
25 #include "llvm/IR/Dominators.h"
26 #include "llvm/IR/Instructions.h"
27 #include "llvm/IR/LLVMContext.h"
28 #include "llvm/IR/Metadata.h"
29 #include "llvm/IR/PassManager.h"
30 #include "llvm/Support/CommandLine.h"
31 #include "llvm/Support/Debug.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include <algorithm>
34 using namespace llvm;
35 
36 // Explicitly instantiate methods in LoopInfoImpl.h for IR-level Loops.
37 template class llvm::LoopBase<BasicBlock, Loop>;
38 template class llvm::LoopInfoBase<BasicBlock, Loop>;
39 
40 // Always verify loopinfo if expensive checking is enabled.
41 #ifdef XDEBUG
42 static bool VerifyLoopInfo = true;
43 #else
44 static bool VerifyLoopInfo = false;
45 #endif
46 static cl::opt<bool,true>
47 VerifyLoopInfoX("verify-loop-info", cl::location(VerifyLoopInfo),
48                 cl::desc("Verify loop info (time consuming)"));
49 
50 // Loop identifier metadata name.
51 static const char *const LoopMDName = "llvm.loop";
52 
53 //===----------------------------------------------------------------------===//
54 // Loop implementation
55 //
56 
57 bool Loop::isLoopInvariant(const Value *V) const {
58   if (const Instruction *I = dyn_cast<Instruction>(V))
59     return !contains(I);
60   return true;  // All non-instructions are loop invariant
61 }
62 
63 bool Loop::hasLoopInvariantOperands(const Instruction *I) const {
64   return all_of(I->operands(), [this](Value *V) { return isLoopInvariant(V); });
65 }
66 
67 bool Loop::makeLoopInvariant(Value *V, bool &Changed,
68                              Instruction *InsertPt) const {
69   if (Instruction *I = dyn_cast<Instruction>(V))
70     return makeLoopInvariant(I, Changed, InsertPt);
71   return true;  // All non-instructions are loop-invariant.
72 }
73 
74 bool Loop::makeLoopInvariant(Instruction *I, bool &Changed,
75                              Instruction *InsertPt) const {
76   // Test if the value is already loop-invariant.
77   if (isLoopInvariant(I))
78     return true;
79   if (!isSafeToSpeculativelyExecute(I))
80     return false;
81   if (I->mayReadFromMemory())
82     return false;
83   // EH block instructions are immobile.
84   if (I->isEHPad())
85     return false;
86   // Determine the insertion point, unless one was given.
87   if (!InsertPt) {
88     BasicBlock *Preheader = getLoopPreheader();
89     // Without a preheader, hoisting is not feasible.
90     if (!Preheader)
91       return false;
92     InsertPt = Preheader->getTerminator();
93   }
94   // Don't hoist instructions with loop-variant operands.
95   for (Value *Operand : I->operands())
96     if (!makeLoopInvariant(Operand, Changed, InsertPt))
97       return false;
98 
99   // Hoist.
100   I->moveBefore(InsertPt);
101 
102   // There is possibility of hoisting this instruction above some arbitrary
103   // condition. Any metadata defined on it can be control dependent on this
104   // condition. Conservatively strip it here so that we don't give any wrong
105   // information to the optimizer.
106   I->dropUnknownNonDebugMetadata();
107 
108   Changed = true;
109   return true;
110 }
111 
112 PHINode *Loop::getCanonicalInductionVariable() const {
113   BasicBlock *H = getHeader();
114 
115   BasicBlock *Incoming = nullptr, *Backedge = nullptr;
116   pred_iterator PI = pred_begin(H);
117   assert(PI != pred_end(H) &&
118          "Loop must have at least one backedge!");
119   Backedge = *PI++;
120   if (PI == pred_end(H)) return nullptr;  // dead loop
121   Incoming = *PI++;
122   if (PI != pred_end(H)) return nullptr;  // multiple backedges?
123 
124   if (contains(Incoming)) {
125     if (contains(Backedge))
126       return nullptr;
127     std::swap(Incoming, Backedge);
128   } else if (!contains(Backedge))
129     return nullptr;
130 
131   // Loop over all of the PHI nodes, looking for a canonical indvar.
132   for (BasicBlock::iterator I = H->begin(); isa<PHINode>(I); ++I) {
133     PHINode *PN = cast<PHINode>(I);
134     if (ConstantInt *CI =
135         dyn_cast<ConstantInt>(PN->getIncomingValueForBlock(Incoming)))
136       if (CI->isNullValue())
137         if (Instruction *Inc =
138             dyn_cast<Instruction>(PN->getIncomingValueForBlock(Backedge)))
139           if (Inc->getOpcode() == Instruction::Add &&
140                 Inc->getOperand(0) == PN)
141             if (ConstantInt *CI = dyn_cast<ConstantInt>(Inc->getOperand(1)))
142               if (CI->equalsInt(1))
143                 return PN;
144   }
145   return nullptr;
146 }
147 
148 bool Loop::isLCSSAForm(DominatorTree &DT) const {
149   for (BasicBlock *BB : this->blocks()) {
150     for (Instruction &I : *BB) {
151       // Tokens can't be used in PHI nodes and live-out tokens prevent loop
152       // optimizations, so for the purposes of considered LCSSA form, we
153       // can ignore them.
154       if (I.getType()->isTokenTy())
155         continue;
156 
157       for (Use &U : I.uses()) {
158         Instruction *UI = cast<Instruction>(U.getUser());
159         BasicBlock *UserBB = UI->getParent();
160         if (PHINode *P = dyn_cast<PHINode>(UI))
161           UserBB = P->getIncomingBlock(U);
162 
163         // Check the current block, as a fast-path, before checking whether
164         // the use is anywhere in the loop.  Most values are used in the same
165         // block they are defined in.  Also, blocks not reachable from the
166         // entry are special; uses in them don't need to go through PHIs.
167         if (UserBB != BB &&
168             !contains(UserBB) &&
169             DT.isReachableFromEntry(UserBB))
170           return false;
171       }
172     }
173   }
174 
175   return true;
176 }
177 
178 bool Loop::isRecursivelyLCSSAForm(DominatorTree &DT) const {
179   if (!isLCSSAForm(DT))
180     return false;
181 
182   return std::all_of(begin(), end(), [&](const Loop *L) {
183     return L->isRecursivelyLCSSAForm(DT);
184   });
185 }
186 
187 bool Loop::isLoopSimplifyForm() const {
188   // Normal-form loops have a preheader, a single backedge, and all of their
189   // exits have all their predecessors inside the loop.
190   return getLoopPreheader() && getLoopLatch() && hasDedicatedExits();
191 }
192 
193 // Routines that reform the loop CFG and split edges often fail on indirectbr.
194 bool Loop::isSafeToClone() const {
195   // Return false if any loop blocks contain indirectbrs, or there are any calls
196   // to noduplicate functions.
197   for (BasicBlock *BB : this->blocks()) {
198     if (isa<IndirectBrInst>(BB->getTerminator()))
199       return false;
200 
201     if (const InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator())) {
202       if (II->cannotDuplicate())
203         return false;
204       // Return false if any loop blocks contain invokes to EH-pads other than
205       // landingpads;  we don't know how to split those edges yet.
206       auto *FirstNonPHI = II->getUnwindDest()->getFirstNonPHI();
207       if (FirstNonPHI->isEHPad() && !isa<LandingPadInst>(FirstNonPHI))
208         return false;
209     }
210     for (Instruction &I : *BB) {
211       if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
212         if (CI->cannotDuplicate())
213           return false;
214       }
215       if (I.getType()->isTokenTy() && I.isUsedOutsideOfBlock(BB))
216         return false;
217     }
218   }
219   return true;
220 }
221 
222 MDNode *Loop::getLoopID() const {
223   MDNode *LoopID = nullptr;
224   if (isLoopSimplifyForm()) {
225     LoopID = getLoopLatch()->getTerminator()->getMetadata(LoopMDName);
226   } else {
227     // Go through each predecessor of the loop header and check the
228     // terminator for the metadata.
229     BasicBlock *H = getHeader();
230     for (BasicBlock *BB : this->blocks()) {
231       TerminatorInst *TI = BB->getTerminator();
232       MDNode *MD = nullptr;
233 
234       // Check if this terminator branches to the loop header.
235       for (BasicBlock *Successor : TI->successors()) {
236         if (Successor == H) {
237           MD = TI->getMetadata(LoopMDName);
238           break;
239         }
240       }
241       if (!MD)
242         return nullptr;
243 
244       if (!LoopID)
245         LoopID = MD;
246       else if (MD != LoopID)
247         return nullptr;
248     }
249   }
250   if (!LoopID || LoopID->getNumOperands() == 0 ||
251       LoopID->getOperand(0) != LoopID)
252     return nullptr;
253   return LoopID;
254 }
255 
256 void Loop::setLoopID(MDNode *LoopID) const {
257   assert(LoopID && "Loop ID should not be null");
258   assert(LoopID->getNumOperands() > 0 && "Loop ID needs at least one operand");
259   assert(LoopID->getOperand(0) == LoopID && "Loop ID should refer to itself");
260 
261   if (isLoopSimplifyForm()) {
262     getLoopLatch()->getTerminator()->setMetadata(LoopMDName, LoopID);
263     return;
264   }
265 
266   BasicBlock *H = getHeader();
267   for (BasicBlock *BB : this->blocks()) {
268     TerminatorInst *TI = BB->getTerminator();
269     for (BasicBlock *Successor : TI->successors()) {
270       if (Successor == H)
271         TI->setMetadata(LoopMDName, LoopID);
272     }
273   }
274 }
275 
276 bool Loop::isAnnotatedParallel() const {
277   MDNode *DesiredLoopIdMetadata = getLoopID();
278 
279   if (!DesiredLoopIdMetadata)
280       return false;
281 
282   // The loop branch contains the parallel loop metadata. In order to ensure
283   // that any parallel-loop-unaware optimization pass hasn't added loop-carried
284   // dependencies (thus converted the loop back to a sequential loop), check
285   // that all the memory instructions in the loop contain parallelism metadata
286   // that point to the same unique "loop id metadata" the loop branch does.
287   for (BasicBlock *BB : this->blocks()) {
288     for (Instruction &I : *BB) {
289       if (!I.mayReadOrWriteMemory())
290         continue;
291 
292       // The memory instruction can refer to the loop identifier metadata
293       // directly or indirectly through another list metadata (in case of
294       // nested parallel loops). The loop identifier metadata refers to
295       // itself so we can check both cases with the same routine.
296       MDNode *LoopIdMD =
297           I.getMetadata(LLVMContext::MD_mem_parallel_loop_access);
298 
299       if (!LoopIdMD)
300         return false;
301 
302       bool LoopIdMDFound = false;
303       for (const MDOperand &MDOp : LoopIdMD->operands()) {
304         if (MDOp == DesiredLoopIdMetadata) {
305           LoopIdMDFound = true;
306           break;
307         }
308       }
309 
310       if (!LoopIdMDFound)
311         return false;
312     }
313   }
314   return true;
315 }
316 
317 bool Loop::hasDedicatedExits() const {
318   // Each predecessor of each exit block of a normal loop is contained
319   // within the loop.
320   SmallVector<BasicBlock *, 4> ExitBlocks;
321   getExitBlocks(ExitBlocks);
322   for (BasicBlock *BB : ExitBlocks)
323     for (BasicBlock *Predecessor : predecessors(BB))
324       if (!contains(Predecessor))
325         return false;
326   // All the requirements are met.
327   return true;
328 }
329 
330 void
331 Loop::getUniqueExitBlocks(SmallVectorImpl<BasicBlock *> &ExitBlocks) const {
332   assert(hasDedicatedExits() &&
333          "getUniqueExitBlocks assumes the loop has canonical form exits!");
334 
335   SmallVector<BasicBlock *, 32> SwitchExitBlocks;
336   for (BasicBlock *BB : this->blocks()) {
337     SwitchExitBlocks.clear();
338     for (BasicBlock *Successor : successors(BB)) {
339       // If block is inside the loop then it is not an exit block.
340       if (contains(Successor))
341         continue;
342 
343       pred_iterator PI = pred_begin(Successor);
344       BasicBlock *FirstPred = *PI;
345 
346       // If current basic block is this exit block's first predecessor
347       // then only insert exit block in to the output ExitBlocks vector.
348       // This ensures that same exit block is not inserted twice into
349       // ExitBlocks vector.
350       if (BB != FirstPred)
351         continue;
352 
353       // If a terminator has more then two successors, for example SwitchInst,
354       // then it is possible that there are multiple edges from current block
355       // to one exit block.
356       if (std::distance(succ_begin(BB), succ_end(BB)) <= 2) {
357         ExitBlocks.push_back(Successor);
358         continue;
359       }
360 
361       // In case of multiple edges from current block to exit block, collect
362       // only one edge in ExitBlocks. Use switchExitBlocks to keep track of
363       // duplicate edges.
364       if (std::find(SwitchExitBlocks.begin(), SwitchExitBlocks.end(), Successor)
365           == SwitchExitBlocks.end()) {
366         SwitchExitBlocks.push_back(Successor);
367         ExitBlocks.push_back(Successor);
368       }
369     }
370   }
371 }
372 
373 BasicBlock *Loop::getUniqueExitBlock() const {
374   SmallVector<BasicBlock *, 8> UniqueExitBlocks;
375   getUniqueExitBlocks(UniqueExitBlocks);
376   if (UniqueExitBlocks.size() == 1)
377     return UniqueExitBlocks[0];
378   return nullptr;
379 }
380 
381 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
382 LLVM_DUMP_METHOD void Loop::dump() const {
383   print(dbgs());
384 }
385 #endif
386 
387 //===----------------------------------------------------------------------===//
388 // UnloopUpdater implementation
389 //
390 
391 namespace {
392 /// Find the new parent loop for all blocks within the "unloop" whose last
393 /// backedges has just been removed.
394 class UnloopUpdater {
395   Loop *Unloop;
396   LoopInfo *LI;
397 
398   LoopBlocksDFS DFS;
399 
400   // Map unloop's immediate subloops to their nearest reachable parents. Nested
401   // loops within these subloops will not change parents. However, an immediate
402   // subloop's new parent will be the nearest loop reachable from either its own
403   // exits *or* any of its nested loop's exits.
404   DenseMap<Loop*, Loop*> SubloopParents;
405 
406   // Flag the presence of an irreducible backedge whose destination is a block
407   // directly contained by the original unloop.
408   bool FoundIB;
409 
410 public:
411   UnloopUpdater(Loop *UL, LoopInfo *LInfo) :
412     Unloop(UL), LI(LInfo), DFS(UL), FoundIB(false) {}
413 
414   void updateBlockParents();
415 
416   void removeBlocksFromAncestors();
417 
418   void updateSubloopParents();
419 
420 protected:
421   Loop *getNearestLoop(BasicBlock *BB, Loop *BBLoop);
422 };
423 } // end anonymous namespace
424 
425 /// Update the parent loop for all blocks that are directly contained within the
426 /// original "unloop".
427 void UnloopUpdater::updateBlockParents() {
428   if (Unloop->getNumBlocks()) {
429     // Perform a post order CFG traversal of all blocks within this loop,
430     // propagating the nearest loop from sucessors to predecessors.
431     LoopBlocksTraversal Traversal(DFS, LI);
432     for (LoopBlocksTraversal::POTIterator POI = Traversal.begin(),
433            POE = Traversal.end(); POI != POE; ++POI) {
434 
435       Loop *L = LI->getLoopFor(*POI);
436       Loop *NL = getNearestLoop(*POI, L);
437 
438       if (NL != L) {
439         // For reducible loops, NL is now an ancestor of Unloop.
440         assert((NL != Unloop && (!NL || NL->contains(Unloop))) &&
441                "uninitialized successor");
442         LI->changeLoopFor(*POI, NL);
443       }
444       else {
445         // Or the current block is part of a subloop, in which case its parent
446         // is unchanged.
447         assert((FoundIB || Unloop->contains(L)) && "uninitialized successor");
448       }
449     }
450   }
451   // Each irreducible loop within the unloop induces a round of iteration using
452   // the DFS result cached by Traversal.
453   bool Changed = FoundIB;
454   for (unsigned NIters = 0; Changed; ++NIters) {
455     assert(NIters < Unloop->getNumBlocks() && "runaway iterative algorithm");
456 
457     // Iterate over the postorder list of blocks, propagating the nearest loop
458     // from successors to predecessors as before.
459     Changed = false;
460     for (LoopBlocksDFS::POIterator POI = DFS.beginPostorder(),
461            POE = DFS.endPostorder(); POI != POE; ++POI) {
462 
463       Loop *L = LI->getLoopFor(*POI);
464       Loop *NL = getNearestLoop(*POI, L);
465       if (NL != L) {
466         assert(NL != Unloop && (!NL || NL->contains(Unloop)) &&
467                "uninitialized successor");
468         LI->changeLoopFor(*POI, NL);
469         Changed = true;
470       }
471     }
472   }
473 }
474 
475 /// Remove unloop's blocks from all ancestors below their new parents.
476 void UnloopUpdater::removeBlocksFromAncestors() {
477   // Remove all unloop's blocks (including those in nested subloops) from
478   // ancestors below the new parent loop.
479   for (Loop::block_iterator BI = Unloop->block_begin(),
480          BE = Unloop->block_end(); BI != BE; ++BI) {
481     Loop *OuterParent = LI->getLoopFor(*BI);
482     if (Unloop->contains(OuterParent)) {
483       while (OuterParent->getParentLoop() != Unloop)
484         OuterParent = OuterParent->getParentLoop();
485       OuterParent = SubloopParents[OuterParent];
486     }
487     // Remove blocks from former Ancestors except Unloop itself which will be
488     // deleted.
489     for (Loop *OldParent = Unloop->getParentLoop(); OldParent != OuterParent;
490          OldParent = OldParent->getParentLoop()) {
491       assert(OldParent && "new loop is not an ancestor of the original");
492       OldParent->removeBlockFromLoop(*BI);
493     }
494   }
495 }
496 
497 /// Update the parent loop for all subloops directly nested within unloop.
498 void UnloopUpdater::updateSubloopParents() {
499   while (!Unloop->empty()) {
500     Loop *Subloop = *std::prev(Unloop->end());
501     Unloop->removeChildLoop(std::prev(Unloop->end()));
502 
503     assert(SubloopParents.count(Subloop) && "DFS failed to visit subloop");
504     if (Loop *Parent = SubloopParents[Subloop])
505       Parent->addChildLoop(Subloop);
506     else
507       LI->addTopLevelLoop(Subloop);
508   }
509 }
510 
511 /// Return the nearest parent loop among this block's successors. If a successor
512 /// is a subloop header, consider its parent to be the nearest parent of the
513 /// subloop's exits.
514 ///
515 /// For subloop blocks, simply update SubloopParents and return NULL.
516 Loop *UnloopUpdater::getNearestLoop(BasicBlock *BB, Loop *BBLoop) {
517 
518   // Initially for blocks directly contained by Unloop, NearLoop == Unloop and
519   // is considered uninitialized.
520   Loop *NearLoop = BBLoop;
521 
522   Loop *Subloop = nullptr;
523   if (NearLoop != Unloop && Unloop->contains(NearLoop)) {
524     Subloop = NearLoop;
525     // Find the subloop ancestor that is directly contained within Unloop.
526     while (Subloop->getParentLoop() != Unloop) {
527       Subloop = Subloop->getParentLoop();
528       assert(Subloop && "subloop is not an ancestor of the original loop");
529     }
530     // Get the current nearest parent of the Subloop exits, initially Unloop.
531     NearLoop =
532       SubloopParents.insert(std::make_pair(Subloop, Unloop)).first->second;
533   }
534 
535   succ_iterator I = succ_begin(BB), E = succ_end(BB);
536   if (I == E) {
537     assert(!Subloop && "subloop blocks must have a successor");
538     NearLoop = nullptr; // unloop blocks may now exit the function.
539   }
540   for (; I != E; ++I) {
541     if (*I == BB)
542       continue; // self loops are uninteresting
543 
544     Loop *L = LI->getLoopFor(*I);
545     if (L == Unloop) {
546       // This successor has not been processed. This path must lead to an
547       // irreducible backedge.
548       assert((FoundIB || !DFS.hasPostorder(*I)) && "should have seen IB");
549       FoundIB = true;
550     }
551     if (L != Unloop && Unloop->contains(L)) {
552       // Successor is in a subloop.
553       if (Subloop)
554         continue; // Branching within subloops. Ignore it.
555 
556       // BB branches from the original into a subloop header.
557       assert(L->getParentLoop() == Unloop && "cannot skip into nested loops");
558 
559       // Get the current nearest parent of the Subloop's exits.
560       L = SubloopParents[L];
561       // L could be Unloop if the only exit was an irreducible backedge.
562     }
563     if (L == Unloop) {
564       continue;
565     }
566     // Handle critical edges from Unloop into a sibling loop.
567     if (L && !L->contains(Unloop)) {
568       L = L->getParentLoop();
569     }
570     // Remember the nearest parent loop among successors or subloop exits.
571     if (NearLoop == Unloop || !NearLoop || NearLoop->contains(L))
572       NearLoop = L;
573   }
574   if (Subloop) {
575     SubloopParents[Subloop] = NearLoop;
576     return BBLoop;
577   }
578   return NearLoop;
579 }
580 
581 LoopInfo::LoopInfo(const DominatorTreeBase<BasicBlock> &DomTree) {
582   analyze(DomTree);
583 }
584 
585 void LoopInfo::markAsRemoved(Loop *Unloop) {
586   assert(!Unloop->isInvalid() && "Loop has already been removed");
587   Unloop->invalidate();
588   RemovedLoops.push_back(Unloop);
589 
590   // First handle the special case of no parent loop to simplify the algorithm.
591   if (!Unloop->getParentLoop()) {
592     // Since BBLoop had no parent, Unloop blocks are no longer in a loop.
593     for (Loop::block_iterator I = Unloop->block_begin(),
594                               E = Unloop->block_end();
595          I != E; ++I) {
596 
597       // Don't reparent blocks in subloops.
598       if (getLoopFor(*I) != Unloop)
599         continue;
600 
601       // Blocks no longer have a parent but are still referenced by Unloop until
602       // the Unloop object is deleted.
603       changeLoopFor(*I, nullptr);
604     }
605 
606     // Remove the loop from the top-level LoopInfo object.
607     for (iterator I = begin();; ++I) {
608       assert(I != end() && "Couldn't find loop");
609       if (*I == Unloop) {
610         removeLoop(I);
611         break;
612       }
613     }
614 
615     // Move all of the subloops to the top-level.
616     while (!Unloop->empty())
617       addTopLevelLoop(Unloop->removeChildLoop(std::prev(Unloop->end())));
618 
619     return;
620   }
621 
622   // Update the parent loop for all blocks within the loop. Blocks within
623   // subloops will not change parents.
624   UnloopUpdater Updater(Unloop, this);
625   Updater.updateBlockParents();
626 
627   // Remove blocks from former ancestor loops.
628   Updater.removeBlocksFromAncestors();
629 
630   // Add direct subloops as children in their new parent loop.
631   Updater.updateSubloopParents();
632 
633   // Remove unloop from its parent loop.
634   Loop *ParentLoop = Unloop->getParentLoop();
635   for (Loop::iterator I = ParentLoop->begin();; ++I) {
636     assert(I != ParentLoop->end() && "Couldn't find loop");
637     if (*I == Unloop) {
638       ParentLoop->removeChildLoop(I);
639       break;
640     }
641   }
642 }
643 
644 char LoopAnalysis::PassID;
645 
646 LoopInfo LoopAnalysis::run(Function &F, AnalysisManager<Function> *AM) {
647   // FIXME: Currently we create a LoopInfo from scratch for every function.
648   // This may prove to be too wasteful due to deallocating and re-allocating
649   // memory each time for the underlying map and vector datastructures. At some
650   // point it may prove worthwhile to use a freelist and recycle LoopInfo
651   // objects. I don't want to add that kind of complexity until the scope of
652   // the problem is better understood.
653   LoopInfo LI;
654   LI.analyze(AM->getResult<DominatorTreeAnalysis>(F));
655   return LI;
656 }
657 
658 PreservedAnalyses LoopPrinterPass::run(Function &F,
659                                        AnalysisManager<Function> *AM) {
660   AM->getResult<LoopAnalysis>(F).print(OS);
661   return PreservedAnalyses::all();
662 }
663 
664 PrintLoopPass::PrintLoopPass() : OS(dbgs()) {}
665 PrintLoopPass::PrintLoopPass(raw_ostream &OS, const std::string &Banner)
666     : OS(OS), Banner(Banner) {}
667 
668 PreservedAnalyses PrintLoopPass::run(Loop &L) {
669   OS << Banner;
670   for (auto *Block : L.blocks())
671     if (Block)
672       Block->print(OS);
673     else
674       OS << "Printing <null> block";
675   return PreservedAnalyses::all();
676 }
677 
678 //===----------------------------------------------------------------------===//
679 // LoopInfo implementation
680 //
681 
682 char LoopInfoWrapperPass::ID = 0;
683 INITIALIZE_PASS_BEGIN(LoopInfoWrapperPass, "loops", "Natural Loop Information",
684                       true, true)
685 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
686 INITIALIZE_PASS_END(LoopInfoWrapperPass, "loops", "Natural Loop Information",
687                     true, true)
688 
689 bool LoopInfoWrapperPass::runOnFunction(Function &) {
690   releaseMemory();
691   LI.analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree());
692   return false;
693 }
694 
695 void LoopInfoWrapperPass::verifyAnalysis() const {
696   // LoopInfoWrapperPass is a FunctionPass, but verifying every loop in the
697   // function each time verifyAnalysis is called is very expensive. The
698   // -verify-loop-info option can enable this. In order to perform some
699   // checking by default, LoopPass has been taught to call verifyLoop manually
700   // during loop pass sequences.
701   if (VerifyLoopInfo)
702     LI.verify();
703 }
704 
705 void LoopInfoWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
706   AU.setPreservesAll();
707   AU.addRequired<DominatorTreeWrapperPass>();
708 }
709 
710 void LoopInfoWrapperPass::print(raw_ostream &OS, const Module *) const {
711   LI.print(OS);
712 }
713 
714 //===----------------------------------------------------------------------===//
715 // LoopBlocksDFS implementation
716 //
717 
718 /// Traverse the loop blocks and store the DFS result.
719 /// Useful for clients that just want the final DFS result and don't need to
720 /// visit blocks during the initial traversal.
721 void LoopBlocksDFS::perform(LoopInfo *LI) {
722   LoopBlocksTraversal Traversal(*this, LI);
723   for (LoopBlocksTraversal::POTIterator POI = Traversal.begin(),
724          POE = Traversal.end(); POI != POE; ++POI) ;
725 }
726