| //===-- MachineFunctionAnalysis.cpp ---------------------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains the definitions of the MachineFunctionAnalysis members. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/CodeGen/MachineFunctionAnalysis.h" |
| #include "llvm/CodeGen/MachineFunction.h" |
| #include "llvm/CodeGen/MachineModuleInfo.h" |
| using namespace llvm; |
| |
| // Register this pass with PassInfo directly to avoid having to define |
| // a default constructor. |
| static PassInfo |
| X("Machine Function Analysis", "machine-function-analysis", |
| intptr_t(&MachineFunctionAnalysis::ID), 0, |
| /*CFGOnly=*/false, /*is_analysis=*/true); |
| |
| char MachineFunctionAnalysis::ID = 0; |
| |
| MachineFunctionAnalysis::MachineFunctionAnalysis(const TargetMachine &tm, |
| CodeGenOpt::Level OL) : |
| FunctionPass(&ID), TM(tm), OptLevel(OL), MF(0) { |
| } |
| |
| MachineFunctionAnalysis::~MachineFunctionAnalysis() { |
| releaseMemory(); |
| assert(!MF && "MachineFunctionAnalysis left initialized!"); |
| } |
| |
| void MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { |
| AU.setPreservesAll(); |
| AU.addRequired<MachineModuleInfo>(); |
| } |
| |
| bool MachineFunctionAnalysis::doInitialization(Module &M) { |
| MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>(); |
| assert(MMI && "MMI not around yet??"); |
| MMI->setModule(&M); |
| NextFnNum = 0; |
| return false; |
| } |
| |
| |
| bool MachineFunctionAnalysis::runOnFunction(Function &F) { |
| assert(!MF && "MachineFunctionAnalysis already initialized!"); |
| MF = new MachineFunction(&F, TM, NextFnNum++, |
| getAnalysis<MachineModuleInfo>()); |
| return false; |
| } |
| |
| void MachineFunctionAnalysis::releaseMemory() { |
| delete MF; |
| MF = 0; |
| } |