1*9880d681SAndroid Build Coastguard Worker //===-- MachineFunctionAnalysis.cpp ---------------------------------------===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This file contains the definitions of the MachineFunctionAnalysis members. 11*9880d681SAndroid Build Coastguard Worker // 12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineFunctionAnalysis.h" 15*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/GCMetadata.h" 16*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineFunction.h" 17*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineModuleInfo.h" 18*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineFunctionInitializer.h" 19*9880d681SAndroid Build Coastguard Worker using namespace llvm; 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker char MachineFunctionAnalysis::ID = 0; 22*9880d681SAndroid Build Coastguard Worker MachineFunctionAnalysis(const TargetMachine & tm,MachineFunctionInitializer * MFInitializer)23*9880d681SAndroid Build Coastguard WorkerMachineFunctionAnalysis::MachineFunctionAnalysis( 24*9880d681SAndroid Build Coastguard Worker const TargetMachine &tm, MachineFunctionInitializer *MFInitializer) 25*9880d681SAndroid Build Coastguard Worker : FunctionPass(ID), TM(tm), MF(nullptr), MFInitializer(MFInitializer) { 26*9880d681SAndroid Build Coastguard Worker initializeMachineModuleInfoPass(*PassRegistry::getPassRegistry()); 27*9880d681SAndroid Build Coastguard Worker } 28*9880d681SAndroid Build Coastguard Worker ~MachineFunctionAnalysis()29*9880d681SAndroid Build Coastguard WorkerMachineFunctionAnalysis::~MachineFunctionAnalysis() { 30*9880d681SAndroid Build Coastguard Worker releaseMemory(); 31*9880d681SAndroid Build Coastguard Worker assert(!MF && "MachineFunctionAnalysis left initialized!"); 32*9880d681SAndroid Build Coastguard Worker } 33*9880d681SAndroid Build Coastguard Worker getAnalysisUsage(AnalysisUsage & AU) const34*9880d681SAndroid Build Coastguard Workervoid MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { 35*9880d681SAndroid Build Coastguard Worker AU.setPreservesAll(); 36*9880d681SAndroid Build Coastguard Worker AU.addRequired<MachineModuleInfo>(); 37*9880d681SAndroid Build Coastguard Worker } 38*9880d681SAndroid Build Coastguard Worker doInitialization(Module & M)39*9880d681SAndroid Build Coastguard Workerbool MachineFunctionAnalysis::doInitialization(Module &M) { 40*9880d681SAndroid Build Coastguard Worker MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>(); 41*9880d681SAndroid Build Coastguard Worker assert(MMI && "MMI not around yet??"); 42*9880d681SAndroid Build Coastguard Worker MMI->setModule(&M); 43*9880d681SAndroid Build Coastguard Worker NextFnNum = 0; 44*9880d681SAndroid Build Coastguard Worker return false; 45*9880d681SAndroid Build Coastguard Worker } 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker runOnFunction(Function & F)48*9880d681SAndroid Build Coastguard Workerbool MachineFunctionAnalysis::runOnFunction(Function &F) { 49*9880d681SAndroid Build Coastguard Worker assert(!MF && "MachineFunctionAnalysis already initialized!"); 50*9880d681SAndroid Build Coastguard Worker MF = new MachineFunction(&F, TM, NextFnNum++, 51*9880d681SAndroid Build Coastguard Worker getAnalysis<MachineModuleInfo>()); 52*9880d681SAndroid Build Coastguard Worker if (MFInitializer) 53*9880d681SAndroid Build Coastguard Worker MFInitializer->initializeMachineFunction(*MF); 54*9880d681SAndroid Build Coastguard Worker return false; 55*9880d681SAndroid Build Coastguard Worker } 56*9880d681SAndroid Build Coastguard Worker releaseMemory()57*9880d681SAndroid Build Coastguard Workervoid MachineFunctionAnalysis::releaseMemory() { 58*9880d681SAndroid Build Coastguard Worker delete MF; 59*9880d681SAndroid Build Coastguard Worker MF = nullptr; 60*9880d681SAndroid Build Coastguard Worker } 61