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