1198090Srdivacky//===-- MachineFunctionAnalysis.cpp ---------------------------------------===// 2198090Srdivacky// 3198090Srdivacky// The LLVM Compiler Infrastructure 4198090Srdivacky// 5198090Srdivacky// This file is distributed under the University of Illinois Open Source 6198090Srdivacky// License. See LICENSE.TXT for details. 7198090Srdivacky// 8198090Srdivacky//===----------------------------------------------------------------------===// 9198090Srdivacky// 10198090Srdivacky// This file contains the definitions of the MachineFunctionAnalysis members. 11198090Srdivacky// 12198090Srdivacky//===----------------------------------------------------------------------===// 13198090Srdivacky 14198090Srdivacky#include "llvm/CodeGen/MachineFunctionAnalysis.h" 15218893Sdim#include "llvm/CodeGen/GCMetadata.h" 16198090Srdivacky#include "llvm/CodeGen/MachineFunction.h" 17205218Srdivacky#include "llvm/CodeGen/MachineModuleInfo.h" 18198090Srdivackyusing namespace llvm; 19198090Srdivacky 20198090Srdivackychar MachineFunctionAnalysis::ID = 0; 21198090Srdivacky 22235633SdimMachineFunctionAnalysis::MachineFunctionAnalysis(const TargetMachine &tm) : 23235633Sdim FunctionPass(ID), TM(tm), MF(0) { 24218893Sdim initializeMachineModuleInfoPass(*PassRegistry::getPassRegistry()); 25198090Srdivacky} 26198090Srdivacky 27198090SrdivackyMachineFunctionAnalysis::~MachineFunctionAnalysis() { 28198090Srdivacky releaseMemory(); 29198090Srdivacky assert(!MF && "MachineFunctionAnalysis left initialized!"); 30198090Srdivacky} 31198090Srdivacky 32206274Srdivackyvoid MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { 33206274Srdivacky AU.setPreservesAll(); 34206274Srdivacky AU.addRequired<MachineModuleInfo>(); 35206274Srdivacky} 36206274Srdivacky 37206274Srdivackybool MachineFunctionAnalysis::doInitialization(Module &M) { 38206274Srdivacky MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>(); 39206274Srdivacky assert(MMI && "MMI not around yet??"); 40206274Srdivacky MMI->setModule(&M); 41207618Srdivacky NextFnNum = 0; 42207618Srdivacky return false; 43206274Srdivacky} 44206274Srdivacky 45206274Srdivacky 46198090Srdivackybool MachineFunctionAnalysis::runOnFunction(Function &F) { 47198090Srdivacky assert(!MF && "MachineFunctionAnalysis already initialized!"); 48205218Srdivacky MF = new MachineFunction(&F, TM, NextFnNum++, 49218893Sdim getAnalysis<MachineModuleInfo>(), 50218893Sdim getAnalysisIfAvailable<GCModuleInfo>()); 51198090Srdivacky return false; 52198090Srdivacky} 53198090Srdivacky 54198090Srdivackyvoid MachineFunctionAnalysis::releaseMemory() { 55198090Srdivacky delete MF; 56198090Srdivacky MF = 0; 57198090Srdivacky} 58