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 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" 19 using namespace llvm; 20 createPrinterPass(raw_ostream & O,const std::string & Banner) const21Pass *MachineFunctionPass::createPrinterPass(raw_ostream &O, 22 const std::string &Banner) const { 23 return createMachineFunctionPrinterPass(O, Banner); 24 } 25 runOnFunction(Function & F)26bool 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()) 30 return false; 31 32 MachineFunction &MF = getAnalysis<MachineFunctionAnalysis>().getMF(); 33 return runOnMachineFunction(MF); 34 } 35 getAnalysisUsage(AnalysisUsage & AU) const36void MachineFunctionPass::getAnalysisUsage(AnalysisUsage &AU) const { 37 AU.addRequired<MachineFunctionAnalysis>(); 38 AU.addPreserved<MachineFunctionAnalysis>(); 39 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"); 54 55 FunctionPass::getAnalysisUsage(AU); 56 } 57