[vmkit-commits] [vmkit] r65572 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/mvm/JIT.h lib/JnJVM/Compiler/JnjvmModule.cpp lib/JnJVM/Compiler/JnjvmModuleAOT.cpp lib/JnJVM/Compiler/JnjvmModuleJIT.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/Mvm/Runtime/JIT.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Feb 26 13:04:51 PST 2009


Author: geoffray
Date: Thu Feb 26 15:04:51 2009
New Revision: 65572

URL: http://llvm.org/viewvc/llvm-project?rev=65572&view=rev
Log:
One step further to run the verifier in JIT mode. The globalModule
llvm::Module object holds all external functions. The other llvm::Module
created on demand will just copy the declared functions.


Modified:
    vmkit/trunk/include/jnjvm/JnjvmModule.h
    vmkit/trunk/include/mvm/JIT.h
    vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleAOT.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/Mvm/Runtime/JIT.cpp

Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=65572&r1=65571&r2=65572&view=diff

==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Thu Feb 26 15:04:51 2009
@@ -341,7 +341,7 @@
 
 private: 
   
-  void initialise();
+  static void initialise();
   
   bool enabledException;
   
@@ -356,7 +356,7 @@
   
 public:
   
-  JnjvmModule(const std::string &ModuleID, JnjvmModule* Father = 0);
+  JnjvmModule(const std::string &ModuleID);
   
 
   virtual bool isStaticCompiling() = 0;
@@ -409,7 +409,7 @@
 
 class JnjvmModuleJIT : public JnjvmModule {
 public:
-  JnjvmModuleJIT(const std::string &ModuleID, JnjvmModule* Father = 0);
+  JnjvmModuleJIT(const std::string &ModuleID);
   
   virtual bool isStaticCompiling() {
     return false;
@@ -444,7 +444,7 @@
 class JnjvmModuleAOT : public JnjvmModule {
 
 public:
-  JnjvmModuleAOT(const std::string &ModuleID, JnjvmModule* Father = 0);
+  JnjvmModuleAOT(const std::string &ModuleID);
   
   virtual bool isStaticCompiling() {
     return true;

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

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Thu Feb 26 15:04:51 2009
@@ -184,6 +184,7 @@
   static void protectIR();
   static void unprotectIR();
 
+  static void copyDefinitions(llvm::Module* Dst, llvm::Module* Src);
 
 };
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Thu Feb 26 15:04:51 2009
@@ -259,8 +259,8 @@
 }
 
 void JnjvmModule::initialise() {
-  jnjvm::llvm_runtime::makeLLVMModuleContents(getLLVMModule());
-  Module* module = getLLVMModule();
+  Module* module = globalModule;
+  jnjvm::llvm_runtime::makeLLVMModuleContents(module);
 
   VTType = PointerType::getUnqual(module->getTypeByName("VT"));
 
@@ -369,37 +369,33 @@
   return getMethodInfo(meth)->getMethod();
 }
 
-JnjvmModule::JnjvmModule(const std::string &ModuleID, JnjvmModule* Father) :
+JnjvmModule::JnjvmModule(const std::string &ModuleID) :
   MvmModule(ModuleID) {
   
-  Module* module = 0;
-  if (!Father) {
-    assert(!VTType && "Attempting to create a new initial JnjvmModule");
-    enabledException = true;
+  Module* module = getLLVMModule();
+  enabledException = true;
+  if (!VTType) {
     initialise();
-    module = getLLVMModule();
-  } else {
-    enabledException = Father->enabledException;
-    module = getLLVMModule();
-    module->addTypeName("JavaObject", JavaObjectType);
-    module->addTypeName("JavaArray", JavaArrayType);
-    module->addTypeName("JavaCommonClass", JavaCommonClassType);
-    module->addTypeName("JavaClass", JavaClassType);
-    module->addTypeName("JavaClassPrimitive", JavaClassPrimitiveType);
-    module->addTypeName("JavaClassArray", JavaClassArrayType);
-    module->addTypeName("ArrayUInt8", JavaArrayUInt8Type);
-    module->addTypeName("ArraySInt8", JavaArraySInt8Type);
-    module->addTypeName("ArrayUInt16", JavaArrayUInt16Type);
-    module->addTypeName("ArraySInt16", JavaArraySInt16Type);
-    module->addTypeName("ArraySInt32", JavaArraySInt32Type);
-    module->addTypeName("ArrayLong", JavaArrayLongType);
-    module->addTypeName("ArrayFloat", JavaArrayFloatType);
-    module->addTypeName("ArrayDouble", JavaArrayDoubleType);
-    module->addTypeName("ArrayObject", JavaArrayObjectType);
-    module->addTypeName("CacheNode", CacheNodeType); 
-    module->addTypeName("Enveloppe", EnveloppeType);
-    module = Father->getLLVMModule();
+    copyDefinitions(module, globalModule);
   }
+  
+  module->addTypeName("JavaObject", JavaObjectType);
+  module->addTypeName("JavaArray", JavaArrayType);
+  module->addTypeName("JavaCommonClass", JavaCommonClassType);
+  module->addTypeName("JavaClass", JavaClassType);
+  module->addTypeName("JavaClassPrimitive", JavaClassPrimitiveType);
+  module->addTypeName("JavaClassArray", JavaClassArrayType);
+  module->addTypeName("ArrayUInt8", JavaArrayUInt8Type);
+  module->addTypeName("ArraySInt8", JavaArraySInt8Type);
+  module->addTypeName("ArrayUInt16", JavaArrayUInt16Type);
+  module->addTypeName("ArraySInt16", JavaArraySInt16Type);
+  module->addTypeName("ArraySInt32", JavaArraySInt32Type);
+  module->addTypeName("ArrayLong", JavaArrayLongType);
+  module->addTypeName("ArrayFloat", JavaArrayFloatType);
+  module->addTypeName("ArrayDouble", JavaArrayDoubleType);
+  module->addTypeName("ArrayObject", JavaArrayObjectType);
+  module->addTypeName("CacheNode", CacheNodeType); 
+  module->addTypeName("Enveloppe", EnveloppeType);
    
   InterfaceLookupFunction = module->getFunction("jnjvmVirtualLookup");
   MultiCallNewFunction = module->getFunction("multiCallNew");

Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleAOT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleAOT.cpp?rev=65572&r1=65571&r2=65572&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleAOT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleAOT.cpp Thu Feb 26 15:04:51 2009
@@ -1194,9 +1194,8 @@
 }
 #endif
 
-JnjvmModuleAOT::JnjvmModuleAOT(const std::string& ModuleID,
-                               JnjvmModule* Father) :
-  JnjvmModule(ModuleID, Father) {
+JnjvmModuleAOT::JnjvmModuleAOT(const std::string& ModuleID) :
+  JnjvmModule(ModuleID) {
  
   generateTracers = true;
   generateStubs = true;

Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp?rev=65572&r1=65571&r2=65572&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp Thu Feb 26 15:04:51 2009
@@ -118,9 +118,8 @@
   return ConstantExpr::getIntToPtr(CI, valPtrType);
 }
 
-JnjvmModuleJIT::JnjvmModuleJIT(const std::string &ModuleID,
-                               JnjvmModule* Father) :
-  JnjvmModule(ModuleID, Father) {
+JnjvmModuleJIT::JnjvmModuleJIT(const std::string &ModuleID) :
+  JnjvmModule(ModuleID) {
    
   ConstantInt* CI = ConstantInt::get(Type::Int64Ty, uint64(JavaArrayVT));
   PrimitiveArrayVT = ConstantExpr::getIntToPtr(CI, VTType);

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Thu Feb 26 15:04:51 2009
@@ -274,7 +274,7 @@
 
 JnjvmClassLoader::JnjvmClassLoader(JnjvmClassLoader& JCL, JavaObject* loader,
                                    Jnjvm* I) {
-  TheModule = new JnjvmModuleJIT("Applicative loader", JCL.getModule());
+  TheModule = new JnjvmModuleJIT("Applicative loader");
   TheModuleProvider = new JnjvmModuleProvider(getModule());
   bootstrapLoader = JCL.bootstrapLoader;
   

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

==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/JIT.cpp Thu Feb 26 15:04:51 2009
@@ -68,6 +68,7 @@
 
   globalFunctionPasses = new FunctionPassManager(globalModuleProvider);
 
+  mvm::llvm_runtime::makeLLVMModuleContents(globalModule);
   
   // Type declaration
   ptrType = PointerType::getUnqual(Type::Int8Ty);
@@ -133,8 +134,8 @@
   TheModule->setDataLayout(globalModule->getDataLayout());
   TheModule->setTargetTriple(globalModule->getTargetTriple());
   
-  mvm::llvm_runtime::makeLLVMModuleContents(module);
-  
+  copyDefinitions(module, globalModule); 
+    
   printFloatLLVM = module->getFunction("printFloat");
   printDoubleLLVM = module->getFunction("printDouble");
   printLongLLVM = module->getFunction("printLong");
@@ -254,7 +255,7 @@
   return TheTargetData->getTypePaddedSize(type);
 }
 
-void MvmModule::runPasses(llvm::Function* func,  
+void MvmModule::runPasses(llvm::Function* func,
                           llvm::FunctionPassManager* pm) {
   pm->run(*func);
 }
@@ -273,9 +274,6 @@
 //
 void CompilationUnit::AddStandardCompilePasses() {
   // TODO: enable this when
-  // - we can call multiple times the makeLLVMModuleContents function generated 
-  //   by llc -march=cpp -cppgen=contents
-  // - intrinsics won't be in the .ll files
   // - each module will have its declaration of external functions
   // 
   //PM->add(llvm::createVerifierPass());        // Verify that input is correct
@@ -327,3 +325,15 @@
 void MvmModule::unprotectIR() {
   if (executionEngine) executionEngine->lock.release();
 }
+
+
+void MvmModule::copyDefinitions(Module* Dst, Module* Src) {
+  // Loop over all of the functions in the src module, mapping them over
+  for (Module::const_iterator I = Src->begin(), E = Src->end(); I != E; ++I) {
+    const Function *SF = I;   // SrcFunction
+    assert(SF->isDeclaration() && 
+           "Don't know how top copy functions with body");
+    Function::Create(SF->getFunctionType(), GlobalValue::ExternalLinkage,
+                     SF->getName(), Dst);
+  }
+}





More information about the vmkit-commits mailing list