1//===- DominanceFrontier.cpp - Dominance Frontier Calculation -------------===// 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#include "llvm/Analysis/DominanceFrontier.h" 11#include "llvm/Analysis/DominanceFrontierImpl.h" 12 13using namespace llvm; 14 15namespace llvm { 16template class DominanceFrontierBase<BasicBlock>; 17template class ForwardDominanceFrontierBase<BasicBlock>; 18} 19 20char DominanceFrontier::ID = 0; 21 22INITIALIZE_PASS_BEGIN(DominanceFrontier, "domfrontier", 23 "Dominance Frontier Construction", true, true) 24INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) 25INITIALIZE_PASS_END(DominanceFrontier, "domfrontier", 26 "Dominance Frontier Construction", true, true) 27 28DominanceFrontier::DominanceFrontier() 29 : FunctionPass(ID), 30 Base() { 31 initializeDominanceFrontierPass(*PassRegistry::getPassRegistry()); 32} 33 34void DominanceFrontier::releaseMemory() { 35 Base.releaseMemory(); 36} 37 38bool DominanceFrontier::runOnFunction(Function &) { 39 releaseMemory(); 40 Base.analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree()); 41 return false; 42} 43 44void DominanceFrontier::getAnalysisUsage(AnalysisUsage &AU) const { 45 AU.setPreservesAll(); 46 AU.addRequired<DominatorTreeWrapperPass>(); 47} 48 49void DominanceFrontier::print(raw_ostream &OS, const Module *) const { 50 Base.print(OS); 51} 52 53#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) 54void DominanceFrontier::dump() const { 55 print(dbgs()); 56} 57#endif 58