]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | //===-- MachineFunctionPass.cpp -------------------------------------------===// |
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 contains the definitions of the MachineFunctionPass members. | |
11 | // | |
12 | //===----------------------------------------------------------------------===// | |
13 | ||
85aaf69f | 14 | #include "llvm/CodeGen/MachineFunctionPass.h" |
223e47cc | 15 | #include "llvm/Analysis/AliasAnalysis.h" |
85aaf69f SL |
16 | #include "llvm/Analysis/DominanceFrontier.h" |
17 | #include "llvm/Analysis/IVUsers.h" | |
18 | #include "llvm/Analysis/LoopInfo.h" | |
19 | #include "llvm/Analysis/LoopInfo.h" | |
20 | #include "llvm/Analysis/MemoryDependenceAnalysis.h" | |
21 | #include "llvm/Analysis/ScalarEvolution.h" | |
223e47cc | 22 | #include "llvm/CodeGen/MachineFunctionAnalysis.h" |
223e47cc | 23 | #include "llvm/CodeGen/Passes.h" |
85aaf69f SL |
24 | #include "llvm/CodeGen/StackProtector.h" |
25 | #include "llvm/IR/Dominators.h" | |
26 | #include "llvm/IR/Function.h" | |
223e47cc LB |
27 | using namespace llvm; |
28 | ||
29 | Pass *MachineFunctionPass::createPrinterPass(raw_ostream &O, | |
30 | const std::string &Banner) const { | |
31 | return createMachineFunctionPrinterPass(O, Banner); | |
32 | } | |
33 | ||
34 | bool MachineFunctionPass::runOnFunction(Function &F) { | |
35 | // Do not codegen any 'available_externally' functions at all, they have | |
36 | // definitions outside the translation unit. | |
37 | if (F.hasAvailableExternallyLinkage()) | |
38 | return false; | |
39 | ||
40 | MachineFunction &MF = getAnalysis<MachineFunctionAnalysis>().getMF(); | |
41 | return runOnMachineFunction(MF); | |
42 | } | |
43 | ||
44 | void MachineFunctionPass::getAnalysisUsage(AnalysisUsage &AU) const { | |
45 | AU.addRequired<MachineFunctionAnalysis>(); | |
46 | AU.addPreserved<MachineFunctionAnalysis>(); | |
47 | ||
48 | // MachineFunctionPass preserves all LLVM IR passes, but there's no | |
49 | // high-level way to express this. Instead, just list a bunch of | |
50 | // passes explicitly. This does not include setPreservesCFG, | |
51 | // because CodeGen overloads that to mean preserving the MachineBasicBlock | |
52 | // CFG in addition to the LLVM IR CFG. | |
53 | AU.addPreserved<AliasAnalysis>(); | |
85aaf69f SL |
54 | AU.addPreserved<DominanceFrontier>(); |
55 | AU.addPreserved<DominatorTreeWrapperPass>(); | |
56 | AU.addPreserved<IVUsers>(); | |
57 | AU.addPreserved<LoopInfo>(); | |
58 | AU.addPreserved<MemoryDependenceAnalysis>(); | |
59 | AU.addPreserved<ScalarEvolution>(); | |
60 | AU.addPreserved<StackProtector>(); | |
223e47cc LB |
61 | |
62 | FunctionPass::getAnalysisUsage(AU); | |
63 | } |