LoopInfo.cpp revision 195340
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> 27using namespace llvm; 28 29char LoopInfo::ID = 0; 30static RegisterPass<LoopInfo> 31X("loops", "Natural Loop Information", true, true); 32 33//===----------------------------------------------------------------------===// 34// Loop implementation 35// 36 37//===----------------------------------------------------------------------===// 38// LoopInfo implementation 39// 40bool LoopInfo::runOnFunction(Function &) { 41 releaseMemory(); 42 LI.Calculate(getAnalysis<DominatorTree>().getBase()); // Update 43 return false; 44} 45 46void LoopInfo::getAnalysisUsage(AnalysisUsage &AU) const { 47 AU.setPreservesAll(); 48 AU.addRequired<DominatorTree>(); 49} 50