LoopInfo.cpp revision 193323
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/Constants.h" 19#include "llvm/Instructions.h" 20#include "llvm/Analysis/Dominators.h" 21#include "llvm/Assembly/Writer.h" 22#include "llvm/Support/CFG.h" 23#include "llvm/Support/Streams.h" 24#include "llvm/ADT/DepthFirstIterator.h" 25#include "llvm/ADT/SmallPtrSet.h" 26#include <algorithm> 27#include <ostream> 28using namespace llvm; 29 30char LoopInfo::ID = 0; 31static RegisterPass<LoopInfo> 32X("loops", "Natural Loop Information", true, true); 33 34//===----------------------------------------------------------------------===// 35// Loop implementation 36// 37 38//===----------------------------------------------------------------------===// 39// LoopInfo implementation 40// 41bool LoopInfo::runOnFunction(Function &) { 42 releaseMemory(); 43 LI->Calculate(getAnalysis<DominatorTree>().getBase()); // Update 44 return false; 45} 46 47void LoopInfo::getAnalysisUsage(AnalysisUsage &AU) const { 48 AU.setPreservesAll(); 49 AU.addRequired<DominatorTree>(); 50} 51