[vmkit-commits] [vmkit] r62233 - in /vmkit/trunk: include/mvm/JIT.h lib/JnJVM/VMCore/JnjvmModule.cpp lib/JnJVM/VMCore/JnjvmModuleProvider.cpp lib/Mvm/Runtime/JIT.cpp tools/vmjc/vmjc.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Jan 14 09:15:23 PST 2009


Author: geoffray
Date: Wed Jan 14 11:15:22 2009
New Revision: 62233

URL: http://llvm.org/viewvc/llvm-project?rev=62233&view=rev
Log:
Don't reference the executionEngine when static compiling.


Modified:
    vmkit/trunk/include/mvm/JIT.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
    vmkit/trunk/lib/Mvm/Runtime/JIT.cpp
    vmkit/trunk/tools/vmjc/vmjc.cpp

Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=62233&r1=62232&r2=62233&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Wed Jan 14 11:15:22 2009
@@ -27,6 +27,7 @@
   class FunctionPassManager;
   class PointerType;
   class TargetData;
+  class TargetMachine;
   class Type;
 }
 
@@ -167,7 +168,8 @@
   
   static uint64 getTypeSize(const llvm::Type* type);
   static void runPasses(llvm::Function* func, llvm::FunctionPassManager*);
-  static void initialise(bool Fast = false);
+  static void initialise(bool Fast = false, llvm::Module* TheModule = 0,
+                         llvm::TargetMachine* TheTarget = 0);
 
   static int disassemble(unsigned int* addr);
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=62233&r1=62232&r2=62233&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Wed Jan 14 11:15:22 2009
@@ -2128,10 +2128,6 @@
 JnjvmModule::JnjvmModule(const std::string &ModuleID, bool sc) : 
   MvmModule(ModuleID) {
   
-  if (!sc) {
-    std::string str = TheTargetData->getStringRepresentation();
-    setDataLayout(str);
-  }
   staticCompilation = sc;
   if (!VTType) initialise();
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=62233&r1=62232&r2=62233&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Wed Jan 14 11:15:22 2009
@@ -65,12 +65,13 @@
 bool JnjvmModuleProvider::materializeFunction(Function *F, 
                                               std::string *ErrInfo) {
   
+  if (!(F->hasNotBeenReadFromBitcode())) 
+    return false;
+ 
+  assert(mvm::MvmModule::executionEngine && "No execution engine");
   if (mvm::MvmModule::executionEngine->getPointerToGlobalIfAvailable(F))
     return false;
 
-  if (!(F->hasNotBeenReadFromBitcode())) 
-    return false;
-  
   JavaMethod* meth = LLVMMethodInfo::get(F);
   
   if (!meth) {

Modified: vmkit/trunk/lib/Mvm/Runtime/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/JIT.cpp?rev=62233&r1=62232&r2=62233&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/JIT.cpp Wed Jan 14 11:15:22 2009
@@ -19,6 +19,7 @@
 #include <llvm/ExecutionEngine/ExecutionEngine.h>
 #include <llvm/Support/MutexGuard.h>
 #include <llvm/Target/TargetData.h>
+#include <llvm/Target/TargetMachine.h>
 #include <llvm/Target/TargetOptions.h>
 
 
@@ -38,25 +39,29 @@
   }
 }
 
-void MvmModule::initialise(bool Fast) {
+void MvmModule::initialise(bool Fast, Module* M, TargetMachine* T) {
   llvm::NoFramePointerElim = true;
   llvm::ExceptionHandling = true;
-  globalModule = new llvm::Module("bootstrap module");
-  globalModuleProvider = new ExistingModuleProvider (globalModule);
-  
-
-  executionEngine = ExecutionEngine::createJIT(globalModuleProvider, 0,
-                                               0, Fast);
-  
-  std::string str = 
-    executionEngine->getTargetData()->getStringRepresentation();
-  globalModule->setDataLayout(str);
-  
-  TheTargetData = executionEngine->getTargetData();
+  if (!M) {
+    globalModule = new llvm::Module("bootstrap module");
+    globalModuleProvider = new ExistingModuleProvider (globalModule);
+
+    executionEngine = ExecutionEngine::createJIT(globalModuleProvider, 0,
+                                                 0, Fast);
+  
+    std::string str = 
+      executionEngine->getTargetData()->getStringRepresentation();
+    globalModule->setDataLayout(str);
+  
+    TheTargetData = executionEngine->getTargetData();
+  } else {
+    globalModule = M;
+    TheTargetData = T->getTargetData();
+  }
 
   
   Module module("unused");
-  module.setDataLayout(str);
+  module.setDataLayout(globalModule->getDataLayout());
   mvm::llvm_runtime::makeLLVMModuleContents(&module);
   
   // Type declaration
@@ -118,8 +123,8 @@
 
 MvmModule::MvmModule(const std::string& ModuleID) : llvm::Module(ModuleID) {
   Module* module = this;
-  std::string str = executionEngine->getTargetData()->getStringRepresentation();
-  module->setDataLayout(str);
+  module->setDataLayout(globalModule->getDataLayout());
+  module->setTargetTriple(globalModule->getTargetTriple());
   
   mvm::llvm_runtime::makeLLVMModuleContents(module);
   

Modified: vmkit/trunk/tools/vmjc/vmjc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=62233&r1=62232&r2=62233&view=diff

==============================================================================
--- vmkit/trunk/tools/vmjc/vmjc.cpp (original)
+++ vmkit/trunk/tools/vmjc/vmjc.cpp Wed Jan 14 11:15:22 2009
@@ -28,6 +28,9 @@
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Signals.h"
+#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetMachineRegistry.h"
+#include "llvm/Target/TargetMachine.h"
 
 #include "MvmGC.h"
 #include "mvm/JIT.h"
@@ -133,21 +136,38 @@
       cl::PrintHelpMessage();
       return 0;
     }
+    
+    Module* TheModule = new Module("bootstrap module");
+    if (!TargetTriple.empty())
+      TheModule->setTargetTriple(TargetTriple);
+    else
+      TheModule->setTargetTriple(LLVM_HOSTTRIPLE);
+    
+    // Create the TargetMachine we will be generating code with.
+    std::string Err; 
+    const TargetMachineRegistry::entry *TME = 
+      TargetMachineRegistry::getClosestStaticTargetForModule(*TheModule, Err);
+    if (!TME) {
+      cerr << "Did not get a target machine!\n";
+      exit(1);
+    }
+
+    std::string FeatureStr;
+    TargetMachine* TheTarget = TME->CtorFn(*TheModule, FeatureStr);
+
+    // Install information about target datalayout stuff into the module for
+    // optimizer use.
+    TheModule->setDataLayout(TheTarget->getTargetData()->
+                             getStringRepresentation());
 
-    mvm::MvmModule::initialise();
+
+    mvm::MvmModule::initialise(false, TheModule, TheTarget);
     mvm::Object::initialise();
     Collector::initialise(0);
     Collector::enable(0);
 
     mvm::CompilationUnit* CU = mvm::VirtualMachine::initialiseJVM(true);
-
-    if (!TargetTriple.empty())
-      CU->TheModule->setTargetTriple(TargetTriple);
-    else
-      CU->TheModule->setTargetTriple(LLVM_HOSTTRIPLE);
-
-
-    addCommandLinePass(CU, argv);    
+    addCommandLinePass(CU, argv); 
     mvm::VirtualMachine* vm = mvm::VirtualMachine::createJVM(CU);
     vm->compile(InputFilename.c_str());
     vm->waitForExit();





More information about the vmkit-commits mailing list