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