/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/lib/Analysis/DominanceFrontier.cpp
Line | Count | Source (jump to first uncovered line) |
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 | | #include "llvm/IR/Dominators.h" |
13 | | #include "llvm/IR/Function.h" |
14 | | #include "llvm/IR/PassManager.h" |
15 | | #include "llvm/Pass.h" |
16 | | #include "llvm/Support/Compiler.h" |
17 | | #include "llvm/Support/Debug.h" |
18 | | #include "llvm/Support/raw_ostream.h" |
19 | | |
20 | | using namespace llvm; |
21 | | |
22 | | namespace llvm { |
23 | | |
24 | | template class DominanceFrontierBase<BasicBlock, false>; |
25 | | template class DominanceFrontierBase<BasicBlock, true>; |
26 | | template class ForwardDominanceFrontierBase<BasicBlock>; |
27 | | |
28 | | } // end namespace llvm |
29 | | |
30 | | char DominanceFrontierWrapperPass::ID = 0; |
31 | | |
32 | 58.4k | INITIALIZE_PASS_BEGIN58.4k (DominanceFrontierWrapperPass, "domfrontier",
|
33 | 58.4k | "Dominance Frontier Construction", true, true) |
34 | 58.4k | INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) |
35 | 58.4k | INITIALIZE_PASS_END(DominanceFrontierWrapperPass, "domfrontier", |
36 | | "Dominance Frontier Construction", true, true) |
37 | | |
38 | | DominanceFrontierWrapperPass::DominanceFrontierWrapperPass() |
39 | 2.97k | : FunctionPass(ID), DF() { |
40 | 2.97k | initializeDominanceFrontierWrapperPassPass(*PassRegistry::getPassRegistry()); |
41 | 2.97k | } |
42 | | |
43 | 36.6k | void DominanceFrontierWrapperPass::releaseMemory() { |
44 | 36.6k | DF.releaseMemory(); |
45 | 36.6k | } |
46 | | |
47 | 18.3k | bool DominanceFrontierWrapperPass::runOnFunction(Function &) { |
48 | 18.3k | releaseMemory(); |
49 | 18.3k | DF.analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree()); |
50 | 18.3k | return false; |
51 | 18.3k | } |
52 | | |
53 | 2.97k | void DominanceFrontierWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { |
54 | 2.97k | AU.setPreservesAll(); |
55 | 2.97k | AU.addRequired<DominatorTreeWrapperPass>(); |
56 | 2.97k | } |
57 | | |
58 | 2 | void DominanceFrontierWrapperPass::print(raw_ostream &OS, const Module *) const { |
59 | 2 | DF.print(OS); |
60 | 2 | } |
61 | | |
62 | | #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) |
63 | | LLVM_DUMP_METHOD void DominanceFrontierWrapperPass::dump() const { |
64 | | print(dbgs()); |
65 | | } |
66 | | #endif |
67 | | |
68 | | /// Handle invalidation explicitly. |
69 | | bool DominanceFrontier::invalidate(Function &F, const PreservedAnalyses &PA, |
70 | 0 | FunctionAnalysisManager::Invalidator &) { |
71 | 0 | // Check whether the analysis, all analyses on functions, or the function's |
72 | 0 | // CFG have been preserved. |
73 | 0 | auto PAC = PA.getChecker<DominanceFrontierAnalysis>(); |
74 | 0 | return !(PAC.preserved() || PAC.preservedSet<AllAnalysesOn<Function>>() || |
75 | 0 | PAC.preservedSet<CFGAnalyses>()); |
76 | 0 | } |
77 | | |
78 | | AnalysisKey DominanceFrontierAnalysis::Key; |
79 | | |
80 | | DominanceFrontier DominanceFrontierAnalysis::run(Function &F, |
81 | 4 | FunctionAnalysisManager &AM) { |
82 | 4 | DominanceFrontier DF; |
83 | 4 | DF.analyze(AM.getResult<DominatorTreeAnalysis>(F)); |
84 | 4 | return DF; |
85 | 4 | } |
86 | | |
87 | | DominanceFrontierPrinterPass::DominanceFrontierPrinterPass(raw_ostream &OS) |
88 | 0 | : OS(OS) {} |
89 | | |
90 | | PreservedAnalyses |
91 | 0 | DominanceFrontierPrinterPass::run(Function &F, FunctionAnalysisManager &AM) { |
92 | 0 | OS << "DominanceFrontier for function: " << F.getName() << "\n"; |
93 | 0 | AM.getResult<DominanceFrontierAnalysis>(F).print(OS); |
94 | 0 |
|
95 | 0 | return PreservedAnalyses::all(); |
96 | 0 | } |