[vmkit-commits] [vmkit] r96163 - in /vmkit/trunk: include/j3/JnjvmModule.h include/j3/LLVMMaterializer.h lib/J3/Compiler/JavaAOTCompiler.cpp lib/J3/Compiler/JavaJITCompiler.cpp lib/J3/Compiler/JnjvmModule.cpp lib/J3/Compiler/LLVMMaterializer.cpp lib/Mvm/Compiler/JIT.cpp tools/j3/Main.cpp tools/vmkit/Launcher.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Feb 14 02:16:39 PST 2010


Author: geoffray
Date: Sun Feb 14 04:16:38 2010
New Revision: 96163

URL: http://llvm.org/viewvc/llvm-project?rev=96163&view=rev
Log:
Use J3 lazy compilation mechanism by default instead of LLVM's.


Modified:
    vmkit/trunk/include/j3/JnjvmModule.h
    vmkit/trunk/include/j3/LLVMMaterializer.h
    vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp
    vmkit/trunk/lib/J3/Compiler/JnjvmModule.cpp
    vmkit/trunk/lib/J3/Compiler/LLVMMaterializer.cpp
    vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
    vmkit/trunk/tools/j3/Main.cpp
    vmkit/trunk/tools/vmkit/Launcher.cpp

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

==============================================================================
--- vmkit/trunk/include/j3/JnjvmModule.h (original)
+++ vmkit/trunk/include/j3/JnjvmModule.h Sun Feb 14 04:16:38 2010
@@ -397,7 +397,6 @@
 
 protected:
   llvm::Module* TheModule;
-  llvm::GVMaterializer* TheModuleProvider;
   JnjvmModule JavaIntrinsics;
 
   void addJavaPasses();
@@ -578,10 +577,6 @@
   virtual void makeVT(Class* cl);
   virtual void makeIMT(Class* cl);
   
-  virtual JavaCompiler* Create(const std::string& ModuleID) {
-    return new JavaJITCompiler(ModuleID);
-  }
-  
   virtual void* materializeFunction(JavaMethod* meth);
   
   virtual llvm::Constant* getFinalObject(JavaObject* obj, CommonClass* cl);
@@ -604,12 +599,10 @@
 #ifdef SERVICE
   virtual llvm::Value* getIsolate(Jnjvm* vm, llvm::Value* Where);
 #endif
-
-  virtual ~JavaJITCompiler() {}
-  
+ 
   virtual llvm::Value* addCallback(Class* cl, uint16 index, Signdef* sign,
-                                   bool stat, llvm::BasicBlock* insert);
-  virtual uintptr_t getPointerOrStub(JavaMethod& meth, int type);
+                                   bool stat, llvm::BasicBlock* insert) = 0;
+  virtual uintptr_t getPointerOrStub(JavaMethod& meth, int type) = 0;
 
 #ifdef WITH_LLVM_GCC
   virtual mvm::StackScanner* createStackScanner() {
@@ -621,6 +614,8 @@
 #endif
   
   virtual void* loadMethod(void* handle, const char* symbol);
+  
+  static  JavaJITCompiler* CreateCompiler(const std::string& ModuleID);
 
 };
 
@@ -635,8 +630,24 @@
     return new JavaJ3LazyJITCompiler(ModuleID);
   }
 
-  JavaJ3LazyJITCompiler(const std::string& ModuleID)
-    : JavaJITCompiler(ModuleID) {}
+  JavaJ3LazyJITCompiler(const std::string& ModuleID);
+};
+
+class JavaLLVMLazyJITCompiler : public JavaJITCompiler {
+public:
+  llvm::GVMaterializer* TheMaterializer;
+  
+  virtual llvm::Value* addCallback(Class* cl, uint16 index, Signdef* sign,
+                                   bool stat, llvm::BasicBlock* insert);
+  virtual uintptr_t getPointerOrStub(JavaMethod& meth, int side);
+  
+  virtual JavaCompiler* Create(const std::string& ModuleID) {
+    return new JavaLLVMLazyJITCompiler(ModuleID);
+  }
+
+  JavaLLVMLazyJITCompiler(const std::string& ModuleID);
+  
+  virtual ~JavaLLVMLazyJITCompiler();
 };
 
 class JavaAOTCompiler : public JavaLLVMCompiler {

Modified: vmkit/trunk/include/j3/LLVMMaterializer.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/LLVMMaterializer.h?rev=96163&r1=96162&r2=96163&view=diff

==============================================================================
--- vmkit/trunk/include/j3/LLVMMaterializer.h (original)
+++ vmkit/trunk/include/j3/LLVMMaterializer.h Sun Feb 14 04:16:38 2010
@@ -7,22 +7,22 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef JNJVM_MODULE_PROVIDER_H
-#define JNJVM_MODULE_PROVIDER_H
+#ifndef J3_LLVM_MATERIALIZER_H
+#define J3_LLVM_MATERIALIZER_H
 
 #include <llvm/GVMaterializer.h>
 
 namespace j3 {
 
-class JavaJITCompiler;
+class JavaLLVMLazyJITCompiler;
 
 class LLVMMaterializer : public llvm::GVMaterializer {
 public:
  
-  JavaJITCompiler* Comp;
+  JavaLLVMLazyJITCompiler* Comp;
   llvm::Module* TheModule;
 
-  LLVMMaterializer(llvm::Module* M, JavaJITCompiler* C);
+  LLVMMaterializer(llvm::Module* M, JavaLLVMLazyJITCompiler* C);
 
   virtual bool Materialize(llvm::GlobalValue *GV, std::string *ErrInfo = 0);
   virtual bool isMaterializable(const llvm::GlobalValue*) const;

Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=96163&r1=96162&r2=96163&view=diff

==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Sun Feb 14 04:16:38 2010
@@ -1926,7 +1926,7 @@
   try {
     
     if (!M->clinits->empty()) {
-      Comp = new JavaJITCompiler("JIT");
+      Comp = JavaJITCompiler::CreateCompiler("JIT");
       Comp->EmitFunctionName = true;
       bootstrapLoader->setCompiler(Comp);
       bootstrapLoader->analyseClasspathEnv(vm->classpath);

Modified: vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp?rev=96163&r1=96162&r2=96163&view=diff

==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp Sun Feb 14 04:16:38 2010
@@ -18,6 +18,7 @@
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/ExecutionEngine/ExecutionEngine.h"
 #include "llvm/ExecutionEngine/JITEventListener.h"
+#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
@@ -214,7 +215,6 @@
 #else
   EmitFunctionName = false;
 #endif
-  TheModuleProvider = new LLVMMaterializer(TheModule, this);
   
   JnjvmModule::protectEngine.lock();
   JnjvmModule::executionEngine->addModule(TheModule);
@@ -398,7 +398,7 @@
   newArgv[0] = newArgv[1];
   newArgv[1] = mainClass;
 
-  JavaJITCompiler* Comp = new JavaJITCompiler("JITModule");
+  JavaJITCompiler* Comp = JavaJITCompiler::CreateCompiler("JITModule");
   mvm::MvmModule::AddStandardCompilePasses();
   JnjvmClassLoader* JCL = mvm::VirtualMachine::initialiseJVM(Comp);
   mvm::VirtualMachine* vm = mvm::VirtualMachine::createJVM(JCL);
@@ -412,15 +412,15 @@
 void* JavaJITCompiler::loadMethod(void* handle, const char* symbol) {
   Function* F = mvm::MvmModule::globalModule->getFunction(symbol);
   if (F) {
-    void* res = mvm::MvmModule::executionEngine->getPointerToFunctionOrStub(F);
+    void* res = mvm::MvmModule::executionEngine->getPointerToFunction(F);
     return res;
   }
 
   return JavaCompiler::loadMethod(handle, symbol);
 }
 
-uintptr_t JavaJITCompiler::getPointerOrStub(JavaMethod& meth,
-                                            int side) {
+uintptr_t JavaLLVMLazyJITCompiler::getPointerOrStub(JavaMethod& meth,
+                                                    int side) {
   ExecutionEngine* EE = mvm::MvmModule::executionEngine;
   LLVMMethodInfo* LMI = getMethodInfo(&meth);
   Function* func = LMI->getMethod();
@@ -458,3 +458,27 @@
   *needsInit = true;
   return (meth == NULL || meth->code == NULL);
 }
+
+JavaJ3LazyJITCompiler::JavaJ3LazyJITCompiler(const std::string& ModuleID)
+    : JavaJITCompiler(ModuleID) {}
+
+JavaLLVMLazyJITCompiler::JavaLLVMLazyJITCompiler(const std::string& ModuleID)
+    : JavaJITCompiler(ModuleID) {
+  TheMaterializer = new LLVMMaterializer(TheModule, this);      
+}
+
+JavaLLVMLazyJITCompiler::~JavaLLVMLazyJITCompiler() {
+  delete TheMaterializer;
+}
+
+static llvm::cl::opt<bool> LLVMLazy("llvm-lazy", 
+                     cl::desc("Use LLVM lazy stubs"),
+                     cl::init(false));
+
+JavaJITCompiler* JavaJITCompiler::CreateCompiler(const std::string& ModuleID) {
+  if (LLVMLazy) {
+    JnjvmModule::executionEngine->DisableLazyCompilation(false); 
+    return new JavaLLVMLazyJITCompiler(ModuleID);
+  }
+  return new JavaJ3LazyJITCompiler(ModuleID);
+}

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

==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JnjvmModule.cpp Sun Feb 14 04:16:38 2010
@@ -398,7 +398,6 @@
 JavaLLVMCompiler::~JavaLLVMCompiler() {
   delete JavaFunctionPasses;
   delete JavaNativeFunctionPasses;
-  delete TheModuleProvider;
 }
 
 namespace mvm {

Modified: vmkit/trunk/lib/J3/Compiler/LLVMMaterializer.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/LLVMMaterializer.cpp?rev=96163&r1=96162&r2=96163&view=diff

==============================================================================
--- vmkit/trunk/lib/J3/Compiler/LLVMMaterializer.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/LLVMMaterializer.cpp Sun Feb 14 04:16:38 2010
@@ -48,9 +48,9 @@
 }
 
 
-Value* JavaJITCompiler::addCallback(Class* cl, uint16 index,
-                                    Signdef* sign, bool stat,
-                                    BasicBlock* insert) {
+Value* JavaLLVMLazyJITCompiler::addCallback(Class* cl, uint16 index,
+                                            Signdef* sign, bool stat,
+                                            BasicBlock* insert) {
   
   Function* F = 0;
   LLVMSignatureInfo* LSI = getSignatureInfo(sign);
@@ -147,7 +147,8 @@
 }
 
 
-LLVMMaterializer::LLVMMaterializer(llvm::Module* m, JavaJITCompiler* C) {
+LLVMMaterializer::LLVMMaterializer(
+    llvm::Module* m, JavaLLVMLazyJITCompiler* C) {
   Comp = C;
   TheModule = m;
   m->setMaterializer(this);

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

==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Sun Feb 14 04:16:38 2010
@@ -133,7 +133,6 @@
 
     Allocator = new BumpPtrAllocator();
     executionEngine->RegisterJITEventListener(&JITListener);    
-    executionEngine->DisableLazyCompilation(false); 
     std::string str = 
       executionEngine->getTargetData()->getStringRepresentation();
     globalModule->setDataLayout(str);

Modified: vmkit/trunk/tools/j3/Main.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/j3/Main.cpp?rev=96163&r1=96162&r2=96163&view=diff

==============================================================================
--- vmkit/trunk/tools/j3/Main.cpp (original)
+++ vmkit/trunk/tools/j3/Main.cpp Sun Feb 14 04:16:38 2010
@@ -28,7 +28,7 @@
   MvmModule::initialise();
   Collector::initialise();
  
-  JavaJITCompiler* Comp = new JavaJITCompiler("JITModule");
+  JavaJITCompiler* Comp = JavaJITCompiler::CreateCompiler("JITModule");
   mvm::MvmModule::AddStandardCompilePasses();
   JnjvmClassLoader* JCL = VirtualMachine::initialiseJVM(Comp);
   VirtualMachine* vm = VirtualMachine::createJVM(JCL);

Modified: vmkit/trunk/tools/vmkit/Launcher.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmkit/Launcher.cpp?rev=96163&r1=96162&r2=96163&view=diff

==============================================================================
--- vmkit/trunk/tools/vmkit/Launcher.cpp (original)
+++ vmkit/trunk/tools/vmkit/Launcher.cpp Sun Feb 14 04:16:38 2010
@@ -56,7 +56,6 @@
                               "potentially sacrificing code quality"),
                      cl::init(false));
 
-
 static cl::opt<bool> 
 DisableOptimizations("disable-opt", 
                      cl::desc("Do not run any optimization passes"));
@@ -140,7 +139,7 @@
 
   if (VMToRun == RunJava) {
 #if WITH_J3
-    JavaJITCompiler* Comp = new JavaJITCompiler("JITModule");
+    JavaJITCompiler* Comp = JavaJITCompiler::CreateCompiler("JITModule");
     JnjvmClassLoader* JCL = mvm::VirtualMachine::initialiseJVM(Comp);
     addCommandLinePass(argv);
     mvm::VirtualMachine* vm = mvm::VirtualMachine::createJVM(JCL);
@@ -157,7 +156,7 @@
   } else {
     mvm::CommandLine MyCl;
 #if WITH_J3
-    JavaJITCompiler* Comp = new JavaJITCompiler("JITModule");
+    JavaJITCompiler* Comp = JavaJITCompiler::CreateCompiler("JITModule");
     JnjvmClassLoader* JCL = mvm::VirtualMachine::initialiseJVM(Comp);
     addCommandLinePass(argv);
     MyCl.vmlets["java"] = (create_vm_t)(mvm::VirtualMachine::createJVM);





More information about the vmkit-commits mailing list