Give MachineModuleInfo an actual Module*.
authorChris Lattner <sabre@nondot.org>
Tue, 6 Apr 2010 00:51:52 +0000 (00:51 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 6 Apr 2010 00:51:52 +0000 (00:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100508 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineFunctionAnalysis.h
include/llvm/CodeGen/MachineModuleInfo.h
lib/CodeGen/MachineFunctionAnalysis.cpp
lib/CodeGen/MachineModuleInfo.cpp

index ee2c6ddc81f3994c612919b0b818946530af7136..75dbaab973d8701f6ff9940420c5a5493495f823 100644 (file)
@@ -39,7 +39,7 @@ public:
   CodeGenOpt::Level getOptLevel() const { return OptLevel; }
 
 private:
-  virtual bool doInitialization(Module &) { NextFnNum = 1; return false; }
+  virtual bool doInitialization(Module &M);
   virtual bool runOnFunction(Function &F);
   virtual void releaseMemory();
   virtual void getAnalysisUsage(AnalysisUsage &AU) const;
index d610390b6357556492e950e46fe4cd00fc102d2d..17da43b7d6216e6728daf2c96d5fc231d1a45849 100644 (file)
@@ -100,6 +100,9 @@ class MachineModuleInfo : public ImmutablePass {
   /// Context - This is the MCContext used for the entire code generator.
   MCContext Context;
   
+  /// TheModule - This is the LLVM Module being worked on.
+  Module *TheModule;
+  
   /// ObjFileMMI - This is the object-file-format-specific implementation of
   /// MachineModuleInfoImpl, which lets targets accumulate whatever info they
   /// want.
@@ -176,6 +179,9 @@ public:
   const MCContext &getContext() const { return Context; }
   MCContext &getContext() { return Context; }
 
+  void setModule(Module *M) { TheModule = M; }
+  Module *getModule() const { return TheModule; }
+  
   /// getInfo - Keep track of various per-function pieces of information for
   /// backends that would like to do so.
   ///
index faddcb2920145568216a0555a1045ee10deac392..3b2eb6d388b498aa39b14b7d79f00d2df9014537 100644 (file)
@@ -35,6 +35,19 @@ MachineFunctionAnalysis::~MachineFunctionAnalysis() {
   assert(!MF && "MachineFunctionAnalysis left initialized!");
 }
 
+void MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
+  AU.setPreservesAll();
+  AU.addRequired<MachineModuleInfo>();
+}
+
+bool MachineFunctionAnalysis::doInitialization(Module &M) {
+  MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>();
+  assert(MMI && "MMI not around yet??");
+  MMI->setModule(&M);
+  NextFnNum = 1; return false;
+}
+
+
 bool MachineFunctionAnalysis::runOnFunction(Function &F) {
   assert(!MF && "MachineFunctionAnalysis already initialized!");
   MF = new MachineFunction(&F, TM, NextFnNum++,
@@ -46,8 +59,3 @@ void MachineFunctionAnalysis::releaseMemory() {
   delete MF;
   MF = 0;
 }
-
-void MachineFunctionAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
-  AU.setPreservesAll();
-  AU.addRequired<MachineModuleInfo>();
-}
index ad4f01b7a9ad87eb193427faf28281d0f6b454b8..f813a553670bf4cbafcc835f325a0af039cf7911 100644 (file)
@@ -262,6 +262,7 @@ MachineModuleInfo::MachineModuleInfo(const MCAsmInfo &MAI)
   // Always emit some info, by default "no personality" info.
   Personalities.push_back(NULL);
   AddrLabelSymbols = 0;
+  TheModule = 0;
 }
 
 MachineModuleInfo::MachineModuleInfo()