Author: lattner
Date: Wed Dec  5 19:08:09 2007
New Revision: 44646

URL: http://llvm.org/viewvc/llvm-project?rev=44646&view=rev
Log:
simplify creation of the interpreter, make ExecutionEngine ctor protected,
delete one ExecutionEngine ctor, minor cleanup.

Modified:
    llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h
    llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp
    llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.cpp
    llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h
    llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp
    llvm/trunk/lib/ExecutionEngine/JIT/JIT.h
    llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp

Modified: llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/ExecutionEngine.h Wed Dec  5 
19:08:09 2007
@@ -12,8 +12,8 @@
 //
 
//===----------------------------------------------------------------------===//
 
-#ifndef EXECUTION_ENGINE_H
-#define EXECUTION_ENGINE_H
+#ifndef LLVM_EXECUTION_ENGINE_H
+#define LLVM_EXECUTION_ENGINE_H
 
 #include <vector>
 #include <map>
@@ -34,6 +34,7 @@
 class TargetData;
 class Type;
 class MutexGuard;
+class JITMemoryManager;
 
 class ExecutionEngineState {
 private:
@@ -90,18 +91,36 @@
   /// any of those classes.
   sys::Mutex lock; // Used to make this class and subclasses thread-safe
 
-  ExecutionEngine(ModuleProvider *P);
-  ExecutionEngine(Module *M);
-  virtual ~ExecutionEngine();
+  
//===----------------------------------------------------------------------===//
+  //  ExecutionEngine Startup
+  
//===----------------------------------------------------------------------===//
 
-  const TargetData *getTargetData() const { return TD; }
+  virtual ~ExecutionEngine();
 
+  /// create - This is the factory method for creating an execution engine 
which
+  /// is appropriate for the current machine.  This takes ownership of the
+  /// module provider.
+  static ExecutionEngine *create(ModuleProvider *MP,
+                                 bool ForceInterpreter = false,
+                                 std::string *ErrorStr = 0);
+  
+  /// create - This is the factory method for creating an execution engine 
which
+  /// is appropriate for the current machine.  This takes ownership of the
+  /// module.
+  static ExecutionEngine *create(Module *M);
+  
+  
   /// addModuleProvider - Add a ModuleProvider to the list of modules that we
   /// can JIT from.  Note that this takes ownership of the ModuleProvider: when
   /// the ExecutionEngine is destroyed, it destroys the MP as well.
   void addModuleProvider(ModuleProvider *P) {
     Modules.push_back(P);
   }
+  
+  
//===----------------------------------------------------------------------===//
+
+  const TargetData *getTargetData() const { return TD; }
+
 
   /// removeModuleProvider - Remove a ModuleProvider from the list of modules.
   /// Release module from ModuleProvider.
@@ -112,18 +131,6 @@
   /// general code.
   Function *FindFunctionNamed(const char *FnName);
   
-  /// create - This is the factory method for creating an execution engine 
which
-  /// is appropriate for the current machine.  This takes ownership of the
-  /// module provider.
-  static ExecutionEngine *create(ModuleProvider *MP,
-                                 bool ForceInterpreter = false,
-                                 std::string *ErrorStr = 0);
-
-  /// create - This is the factory method for creating an execution engine 
which
-  /// is appropriate for the current machine.  This takes ownership of the
-  /// module.
-  static ExecutionEngine *create(Module *M);
-  
   /// runFunction - Execute the specified function with the specified 
arguments,
   /// and return the result.
   ///
@@ -233,6 +240,8 @@
   }
 
 protected:
+  ExecutionEngine(ModuleProvider *P);
+
   void emitGlobals();
 
   // EmitGlobalVariable - This method emits the specified global variable to 
the

Modified: llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp Wed Dec  5 19:08:09 2007
@@ -39,12 +39,6 @@
   assert(P && "ModuleProvider is null?");
 }
 
-ExecutionEngine::ExecutionEngine(Module *M) : LazyFunctionCreator(0) {
-  LazyCompilationDisabled = false;
-  assert(M && "Module is null?");
-  Modules.push_back(new ExistingModuleProvider(M));
-}
-
 ExecutionEngine::~ExecutionEngine() {
   clearAllGlobalMappings();
   for (unsigned i = 0, e = Modules.size(); i != e; ++i)

Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.cpp?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.cpp Wed Dec  5 
19:08:09 2007
@@ -33,26 +33,18 @@
 ///
 ExecutionEngine *Interpreter::create(ModuleProvider *MP, std::string* ErrStr) {
   // Tell this ModuleProvide to materialize and release the module
-  Module *M = MP->releaseModule(ErrStr);
-  if (!M)
+  if (!MP->materializeModule(ErrStr))
     // We got an error, just return 0
     return 0;
 
-  // This is a bit nasty, but the ExecutionEngine won't be able to delete the
-  // module due to use/def issues if we don't delete this MP here. Below we
-  // construct a new Interpreter with the Module we just got. This creates a
-  // new ExistingModuleProvider in the EE instance. Consequently, MP is left
-  // dangling and it contains references into the module which cause problems
-  // when the module is deleted via the ExistingModuleProvide via EE.
-  delete MP;
-  
-  return new Interpreter(M);
+  return new Interpreter(MP);
 }
 
 
//===----------------------------------------------------------------------===//
 // Interpreter ctor - Initialize stuff
 //
-Interpreter::Interpreter(Module *M) : ExecutionEngine(M), TD(M) {
+Interpreter::Interpreter(ModuleProvider *M)
+  : ExecutionEngine(M), TD(M->getModule()) {
       
   memset(&ExitValue.Untyped, 0, sizeof(ExitValue.Untyped));
   setTargetData(&TD);

Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h (original)
+++ llvm/trunk/lib/ExecutionEngine/Interpreter/Interpreter.h Wed Dec  5 
19:08:09 2007
@@ -94,7 +94,7 @@
   std::vector<Function*> AtExitHandlers;
 
 public:
-  explicit Interpreter(Module *M);
+  explicit Interpreter(ModuleProvider *M);
   ~Interpreter();
 
   /// runAtExitHandlers - Run any functions registered by the program's calls 
to

Modified: llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JIT/JIT.cpp Wed Dec  5 19:08:09 2007
@@ -66,7 +66,7 @@
   setTargetData(TM.getTargetData());
 
   // Initialize MCE
-  MCE = createEmitter(*this);
+  MCE = createEmitter(*this, 0);
 
   // Add target data
   MutexGuard locked(lock);

Modified: llvm/trunk/lib/ExecutionEngine/JIT/JIT.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JIT.h?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JIT/JIT.h (original)
+++ llvm/trunk/lib/ExecutionEngine/JIT/JIT.h Wed Dec  5 19:08:09 2007
@@ -121,7 +121,7 @@
   /// getCodeEmitter - Return the code emitter this JIT is emitting into.
   MachineCodeEmitter *getCodeEmitter() const { return MCE; }
 private:
-  static MachineCodeEmitter *createEmitter(JIT &J);
+  static MachineCodeEmitter *createEmitter(JIT &J, JITMemoryManager *JMM);
   void runJITOnFunction (Function *F);
 };
 

Modified: llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp?rev=44646&r1=44645&r2=44646&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JIT/JITEmitter.cpp Wed Dec  5 19:08:09 2007
@@ -312,8 +312,8 @@
     /// Resolver - This contains info about the currently resolved functions.
     JITResolver Resolver;
   public:
-    JITEmitter(JIT &jit) : Resolver(jit) {
-      MemMgr = JITMemoryManager::CreateDefaultMemManager();
+    JITEmitter(JIT &jit, JITMemoryManager *JMM) : Resolver(jit) {
+      MemMgr = JMM ? JMM : JITMemoryManager::CreateDefaultMemManager();
       if (jit.getJITInfo().needsGOT()) {
         MemMgr->AllocateGOT();
         DOUT << "JIT is managing a GOT\n";
@@ -637,8 +637,8 @@
 //  Public interface to this file
 
//===----------------------------------------------------------------------===//
 
-MachineCodeEmitter *JIT::createEmitter(JIT &jit) {
-  return new JITEmitter(jit);
+MachineCodeEmitter *JIT::createEmitter(JIT &jit, JITMemoryManager *JMM) {
+  return new JITEmitter(jit, JMM);
 }
 
 // getPointerToNamedFunction - This function is used as a global wrapper to


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to