2
0

MachineFunctionAnalysis.cpp 1.9 KB

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