MachineFunctionAnalysis.cpp revision 1f74590e9d1b9cf0f1f81a156efea73f76546e05
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/MachineFunction.h" 16#include "llvm/CodeGen/MachineModuleInfo.h" 17using namespace llvm; 18 19// Register this pass with PassInfo directly to avoid having to define 20// a default constructor. 21static PassInfo 22X("Machine Function Analysis", "machine-function-analysis", 23 intptr_t(&MachineFunctionAnalysis::ID), 0, 24 /*CFGOnly=*/false, /*is_analysis=*/true); 25 26char MachineFunctionAnalysis::ID = 0; 27 28MachineFunctionAnalysis::MachineFunctionAnalysis(const TargetMachine &tm, 29 CodeGenOpt::Level OL) : 30 FunctionPass(&ID), TM(tm), OptLevel(OL), MF(0) { 31} 32 33MachineFunctionAnalysis::~MachineFunctionAnalysis() { 34 releaseMemory(); 35 assert(!MF && "MachineFunctionAnalysis left initialized!"); 36} 37 38void MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { 39 AU.setPreservesAll(); 40 AU.addRequired<MachineModuleInfo>(); 41} 42 43bool MachineFunctionAnalysis::doInitialization(Module &M) { 44 MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>(); 45 assert(MMI && "MMI not around yet??"); 46 MMI->setModule(&M); 47 NextFnNum = 0; 48 return false; 49} 50 51 52bool MachineFunctionAnalysis::runOnFunction(Function &F) { 53 assert(!MF && "MachineFunctionAnalysis already initialized!"); 54 MF = new MachineFunction(&F, TM, NextFnNum++, 55 getAnalysis<MachineModuleInfo>()); 56 return false; 57} 58 59void MachineFunctionAnalysis::releaseMemory() { 60 delete MF; 61 MF = 0; 62} 63