[vmkit-commits] [vmkit] r66155 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/jnjvm/JnjvmModuleProvider.h lib/JnJVM/Compiler/JnjvmModule.cpp lib/JnJVM/Compiler/JnjvmModuleJIT.cpp lib/JnJVM/Compiler/JnjvmModuleProvider.cpp lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/Jnjvm.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Mar 5 00:14:15 PST 2009


Author: geoffray
Date: Thu Mar  5 02:14:15 2009
New Revision: 66155

URL: http://llvm.org/viewvc/llvm-project?rev=66155&view=rev
Log:
Move materializing functions to the module, not the module provider.


Modified:
    vmkit/trunk/include/jnjvm/JnjvmModule.h
    vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h
    vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp

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

==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Thu Mar  5 02:14:15 2009
@@ -21,6 +21,7 @@
   class Constant;
   class ConstantInt;
   class Function;
+  class FunctionPassManager;
   class FunctionType;
   class GlobalVariable;
   class Module;
@@ -373,7 +374,7 @@
   
   virtual JnjvmModule* Create(std::string ModuleID) = 0;
   
-  virtual ~JnjvmModule() {}
+  virtual ~JnjvmModule();
 
   llvm::Constant* getReferenceArrayVT();
   llvm::Constant* getPrimitiveArrayVT();
@@ -408,6 +409,13 @@
 #ifdef SERVICE
   virtual llvm::Value* getIsolate(Jnjvm* vm, llvm::Value* Where) = 0;
 #endif
+  
+  virtual void* materializeFunction(JavaMethod* meth) = 0;
+  llvm::Function* parseFunction(JavaMethod* meth);
+   
+  llvm::FunctionPassManager* JavaFunctionPasses;
+  llvm::FunctionPassManager* JavaNativeFunctionPasses;
+
 
 };
 
@@ -425,6 +433,8 @@
     return new JnjvmModuleJIT(ModuleID);
   }
   
+  virtual void* materializeFunction(JavaMethod* meth);
+  
   virtual llvm::Constant* getFinalObject(JavaObject* obj);
   virtual JavaObject* getFinalObject(llvm::Value* C);
   virtual llvm::Constant* getNativeClass(CommonClass* cl);
@@ -462,6 +472,11 @@
     return new JnjvmModuleAOT(ModuleID);
   }
   
+  virtual void* materializeFunction(JavaMethod* meth) {
+    fprintf(stderr, "Can not materiale a function in AOT mode.");
+    abort();
+  }
+  
   virtual void makeVT(Class* cl);
   
   virtual llvm::Constant* getFinalObject(JavaObject* obj);

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

==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h Thu Mar  5 02:14:15 2009
@@ -26,9 +26,6 @@
 private:
   JavaMethod* staticLookup(Class* caller, uint32 index);
   
-  llvm::FunctionPassManager* JavaFunctionPasses;
-  llvm::FunctionPassManager* JavaNativeFunctionPasses;
-  
   uint32 nbCallbacks;
 
 public:
@@ -40,8 +37,6 @@
                               bool stat);
 
   bool materializeFunction(Function *F, std::string *ErrInfo = 0);
-  void* materializeFunction(JavaMethod* meth);
-  llvm::Function* parseFunction(JavaMethod* meth);
 
   Module* materializeModule(std::string *ErrInfo = 0) { return TheModule; }
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Thu Mar  5 02:14:15 2009
@@ -12,11 +12,13 @@
 #include "llvm/Constants.h"
 #include "llvm/Instructions.h"
 #include "llvm/Module.h"
+#include "llvm/PassManager.h"
 
 #include "mvm/JIT.h"
 
 #include "JavaArray.h"
 #include "JavaClass.h"
+#include "JavaJIT.h"
 #include "JavaTypes.h"
 
 #include "jnjvm/JnjvmModule.h"
@@ -496,3 +498,28 @@
   GetLockFunction = module->getFunction("getLock");
  
 }
+
+Function* JnjvmModule::parseFunction(JavaMethod* meth) {
+  LLVMMethodInfo* LMI = getMethodInfo(meth);
+  Function* func = LMI->getMethod();
+  if (func->hasNotBeenReadFromBitcode()) {
+    // We are jitting. Take the lock.
+    protectIR();
+    JavaJIT jit(meth, func);
+    if (isNative(meth->access)) {
+      jit.nativeCompile();
+      runPasses(func, JavaNativeFunctionPasses);
+    } else {
+      jit.javaCompile();
+      runPasses(func, globalFunctionPasses);
+      runPasses(func, JavaFunctionPasses);
+    }
+    unprotectIR();
+  }
+  return func;
+}
+
+JnjvmModule::~JnjvmModule() {
+  delete JavaFunctionPasses;
+  delete JavaNativeFunctionPasses;
+}

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp Thu Mar  5 02:14:15 2009
@@ -156,7 +156,7 @@
       ((void**)VT)[0] = 0;
 #else
       JnjvmClassLoader* loader = cl->classLoader;
-      Function* func = loader->getModuleProvider()->parseFunction(&meth);
+      Function* func = loader->getModule()->parseFunction(&meth);
       if (!cl->super) {
         meth.canBeInlined = true;
         ((void**)VT)[0] = 0;
@@ -199,3 +199,12 @@
   executionEngine->addGlobalMapping(func, ptr);
   func->setLinkage(GlobalValue::ExternalLinkage);
 }
+
+void* JnjvmModuleJIT::materializeFunction(JavaMethod* meth) {
+  Function* func = parseFunction(meth);
+  
+  void* res = mvm::MvmModule::executionEngine->getPointerToGlobal(func);
+  func->deleteBody();
+
+  return res;
+}

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp Thu Mar  5 02:14:15 2009
@@ -9,6 +9,7 @@
 
 #include "llvm/LinkAllPasses.h"
 #include "llvm/PassManager.h"
+#include "llvm/Module.h"
 #include "llvm/ExecutionEngine/ExecutionEngine.h"
 #include "llvm/Support/MutexGuard.h"
 #include "llvm/Target/TargetData.h"
@@ -109,36 +110,6 @@
   return false;
 }
 
-void* JnjvmModuleProvider::materializeFunction(JavaMethod* meth) {
-  Function* func = parseFunction(meth);
-  
-  void* res = mvm::MvmModule::executionEngine->getPointerToGlobal(func);
-  func->deleteBody();
-
-  return res;
-}
-
-Function* JnjvmModuleProvider::parseFunction(JavaMethod* meth) {
-  JnjvmModule* M = (JnjvmModule*)TheModule;
-  LLVMMethodInfo* LMI = M->getMethodInfo(meth);
-  Function* func = LMI->getMethod();
-  if (func->hasNotBeenReadFromBitcode()) {
-    // We are jitting. Take the lock.
-    M->protectIR();
-    JavaJIT jit(meth, func);
-    if (isNative(meth->access)) {
-      jit.nativeCompile();
-      mvm::MvmModule::runPasses(func, JavaNativeFunctionPasses);
-    } else {
-      jit.javaCompile();
-      mvm::MvmModule::runPasses(func, M->globalFunctionPasses);
-      mvm::MvmModule::runPasses(func, JavaFunctionPasses);
-    }
-    M->unprotectIR();
-  }
-  return func;
-}
-
 llvm::Function* JnjvmModuleProvider::addCallback(Class* cl, uint32 index,
                                                  Signdef* sign, bool stat) {
   
@@ -189,17 +160,17 @@
     m->protectEngine.unlock();
   }
     
-  JavaNativeFunctionPasses = new llvm::FunctionPassManager(this);
-  JavaNativeFunctionPasses->add(new llvm::TargetData(TheModule));
+  m->JavaNativeFunctionPasses = new llvm::FunctionPassManager(this);
+  m->JavaNativeFunctionPasses->add(new llvm::TargetData(TheModule));
   // Lower constant calls to lower things like getClass used
   // on synchronized methods.
-  JavaNativeFunctionPasses->add(createLowerConstantCallsPass());
+  m->JavaNativeFunctionPasses->add(createLowerConstantCallsPass());
   
-  JavaFunctionPasses = new llvm::FunctionPassManager(this);
-  JavaFunctionPasses->add(new llvm::TargetData(TheModule));
+  m->JavaFunctionPasses = new llvm::FunctionPassManager(this);
+  m->JavaFunctionPasses->add(new llvm::TargetData(TheModule));
   Function* func = m->JavaObjectAllocateFunction;
-  JavaFunctionPasses->add(mvm::createEscapeAnalysisPass(func));
-  JavaFunctionPasses->add(createLowerConstantCallsPass());
+  m->JavaFunctionPasses->add(mvm::createEscapeAnalysisPass(func));
+  m->JavaFunctionPasses->add(createLowerConstantCallsPass());
   nbCallbacks = 0;
 }
 
@@ -210,8 +181,6 @@
     mvm::MvmModule::protectEngine.unlock();
   }
   delete TheModule;
-  delete JavaNativeFunctionPasses;
-  delete JavaFunctionPasses;
 }
 
 void JnjvmModuleProvider::printStats() {

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Mar  5 02:14:15 2009
@@ -366,8 +366,7 @@
 #endif
     classDef->acquire();
     if (code == 0) {
-      code = 
-        classDef->classLoader->getModuleProvider()->materializeFunction(this);
+      code = classDef->classLoader->getModule()->materializeFunction(this);
       Jnjvm* vm = JavaThread::get()->getJVM();
       vm->addMethodInFunctionMap(this, code);
     }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Mar  5 02:14:15 2009
@@ -1110,14 +1110,14 @@
   for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
     JavaMethod& meth = cl->virtualMethods[i];
     if (!isAbstract(meth.access))
-      cl->classLoader->getModuleProvider()->parseFunction(&meth);
+      cl->classLoader->getModule()->parseFunction(&meth);
     if (Mod->generateStubs) meth.getSignature()->compileAllStubs();
   }
   
   for (uint32 i = 0; i < cl->nbStaticMethods; ++i) {
     JavaMethod& meth = cl->staticMethods[i];
     if (!isAbstract(meth.access))
-      cl->classLoader->getModuleProvider()->parseFunction(&meth);
+      cl->classLoader->getModule()->parseFunction(&meth);
     if (Mod->generateStubs) meth.getSignature()->compileAllStubs();
   }
 }





More information about the vmkit-commits mailing list