MachineFunctionAnalysis.cpp revision b95fc31aa2e5a0a0b9ee1909d1cb949577c5aa16
1//===-- MachineFunctionAnalysis.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 MachineFunctionAnalysis members. 11// 12//===----------------------------------------------------------------------===// 13 14#include "llvm/CodeGen/MachineFunctionAnalysis.h" 15#include "llvm/CodeGen/GCMetadata.h" 16#include "llvm/CodeGen/MachineFunction.h" 17#include "llvm/CodeGen/MachineModuleInfo.h" 18using namespace llvm; 19 20char MachineFunctionAnalysis::ID = 0; 21 22MachineFunctionAnalysis::MachineFunctionAnalysis(const TargetMachine &tm) : 23 FunctionPass(ID), TM(tm), MF(0) { 24 initializeMachineModuleInfoPass(*PassRegistry::getPassRegistry()); 25} 26 27MachineFunctionAnalysis::~MachineFunctionAnalysis() { 28 releaseMemory(); 29 assert(!MF && "MachineFunctionAnalysis left initialized!"); 30} 31 32void MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { 33 AU.setPreservesAll(); 34 AU.addRequired<MachineModuleInfo>(); 35} 36 37bool MachineFunctionAnalysis::doInitialization(Module &M) { 38 MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>(); 39 assert(MMI && "MMI not around yet??"); 40 MMI->setModule(&M); 41 NextFnNum = 0; 42 return false; 43} 44 45 46bool MachineFunctionAnalysis::runOnFunction(Function &F) { 47 assert(!MF && "MachineFunctionAnalysis already initialized!"); 48 MF = new MachineFunction(&F, TM, NextFnNum++, 49 getAnalysis<MachineModuleInfo>(), 50 getAnalysisIfAvailable<GCModuleInfo>()); 51 return false; 52} 53 54void MachineFunctionAnalysis::releaseMemory() { 55 delete MF; 56 MF = 0; 57} 58