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