Enabling incremental bytecode loading in the JIT:
authorMisha Brukman <brukman+llvm@gmail.com>
Tue, 14 Oct 2003 21:38:42 +0000 (21:38 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Tue, 14 Oct 2003 21:38:42 +0000 (21:38 +0000)
* FunctionPassManager ctor now takes in a ModuleProvider
* run() materializes function before running passes on it

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9126 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Pass.cpp

index c9b97c879a600633a2af2fce0ec69a5bd953ffc8..ddee390e50938fc894cae897859c46c49044ab81 100644 (file)
@@ -9,6 +9,7 @@
 #include "llvm/PassManager.h"
 #include "PassManagerT.h"         // PassManagerT implementation
 #include "llvm/Module.h"
+#include "llvm/ModuleProvider.h"
 #include "Support/STLExtras.h"
 #include "Support/TypeInfo.h"
 #include <set>
@@ -76,11 +77,17 @@ bool PassManager::run(Module &M) { return PM->run(M); }
 // is a simple Pimpl class that wraps the PassManagerT template. It
 // is like PassManager, but only deals in FunctionPasses.
 //
-FunctionPassManager::FunctionPassManager() : PM(new PassManagerT<Function>()) {}
+FunctionPassManager::FunctionPassManager(ModuleProvider *P) : 
+  PM(new PassManagerT<Function>()), MP(P) {}
 FunctionPassManager::~FunctionPassManager() { delete PM; }
 void FunctionPassManager::add(FunctionPass *P) { PM->add(P); }
 void FunctionPassManager::add(ImmutablePass *IP) { PM->add(IP); }
-bool FunctionPassManager::run(Function &F) { return PM->run(F); }
+bool FunctionPassManager::run(Function &F) { 
+  Function *mF = MP->getModule()->getNamedFunction(F.getName());
+  assert((&F == mF) && "ModuleProvider does not contain this function!");
+  MP->materializeFunction(&F);
+  return PM->run(F); 
+}
 
 
 //===----------------------------------------------------------------------===//
@@ -177,7 +184,7 @@ const char *Pass::getPassName() const {
   return typeid(*this).name();
 }
 
-// print - Print out the internal state of the pass.  This is called by Analyse
+// print - Print out the internal state of the pass.  This is called by Analyze
 // to print out the contents of an analysis.  Otherwise it is not necessary to
 // implement this method.
 //