1
//===-- MachineFunctionPass.cpp -------------------------------------------===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file contains the definitions of the MachineFunctionPass members.
12
//===----------------------------------------------------------------------===//
14
#include "llvm/Function.h"
15
#include "llvm/Analysis/AliasAnalysis.h"
16
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
17
#include "llvm/CodeGen/MachineFunctionPass.h"
18
#include "llvm/CodeGen/Passes.h"
21
Pass *MachineFunctionPass::createPrinterPass(raw_ostream &O,
22
const std::string &Banner) const {
23
return createMachineFunctionPrinterPass(O, Banner);
26
bool MachineFunctionPass::runOnFunction(Function &F) {
27
// Do not codegen any 'available_externally' functions at all, they have
28
// definitions outside the translation unit.
29
if (F.hasAvailableExternallyLinkage())
32
MachineFunction &MF = getAnalysis<MachineFunctionAnalysis>().getMF();
33
return runOnMachineFunction(MF);
36
void MachineFunctionPass::getAnalysisUsage(AnalysisUsage &AU) const {
37
AU.addRequired<MachineFunctionAnalysis>();
38
AU.addPreserved<MachineFunctionAnalysis>();
40
// MachineFunctionPass preserves all LLVM IR passes, but there's no
41
// high-level way to express this. Instead, just list a bunch of
42
// passes explicitly. This does not include setPreservesCFG,
43
// because CodeGen overloads that to mean preserving the MachineBasicBlock
44
// CFG in addition to the LLVM IR CFG.
45
AU.addPreserved<AliasAnalysis>();
46
AU.addPreserved("scalar-evolution");
47
AU.addPreserved("iv-users");
48
AU.addPreserved("memdep");
49
AU.addPreserved("live-values");
50
AU.addPreserved("domtree");
51
AU.addPreserved("domfrontier");
52
AU.addPreserved("loops");
53
AU.addPreserved("lda");
55
FunctionPass::getAnalysisUsage(AU);