| //===-- 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/GCMetadata.h" | |
| #include "llvm/CodeGen/MachineFunction.h" | |
| #include "llvm/CodeGen/MachineModuleInfo.h" | |
| using namespace llvm; | |
| char MachineFunctionAnalysis::ID = 0; | |
| MachineFunctionAnalysis::MachineFunctionAnalysis(const TargetMachine &tm, | |
| CodeGenOpt::Level OL) : | |
| FunctionPass(ID), TM(tm), OptLevel(OL), MF(0) { | |
| initializeMachineModuleInfoPass(*PassRegistry::getPassRegistry()); | |
| } | |
| 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>(), | |
| getAnalysisIfAvailable<GCModuleInfo>()); | |
| return false; | |
| } | |
| void MachineFunctionAnalysis::releaseMemory() { | |
| delete MF; | |
| MF = 0; | |
| } |