[vmkit-commits] [vmkit] r86546 - in /vmkit/trunk: include/jnjvm/JavaCompiler.h include/jnjvm/JnjvmModule.h lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJIT.cpp lib/Mvm/MMTk/MvmGC.cpp mmtk/java/src/org/j3/config/Selected.java mmtk/mmtk-fake/Selected.cpp mmtk/mmtk-j3/VM.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Nov 9 07:23:08 PST 2009


Author: geoffray
Date: Mon Nov  9 09:23:07 2009
New Revision: 86546

URL: http://llvm.org/viewvc/llvm-project?rev=86546&view=rev
Log:
Inline all MMTk functions called by gcmalloc.


Modified:
    vmkit/trunk/include/jnjvm/JavaCompiler.h
    vmkit/trunk/include/jnjvm/JnjvmModule.h
    vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
    vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp
    vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
    vmkit/trunk/mmtk/java/src/org/j3/config/Selected.java
    vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
    vmkit/trunk/mmtk/mmtk-j3/VM.cpp

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

==============================================================================
--- vmkit/trunk/include/jnjvm/JavaCompiler.h (original)
+++ vmkit/trunk/include/jnjvm/JavaCompiler.h Mon Nov  9 09:23:07 2009
@@ -24,6 +24,7 @@
 namespace jnjvm {
 
 class Class;
+class CommonClass;
 class JavaMethod;
 class JavaVirtualTable;
 class Signdef;
@@ -95,6 +96,10 @@
 
   static const mvm::UTF8* InlinePragma;
   static const mvm::UTF8* NoInlinePragma;
+
+  virtual CommonClass* getUniqueBaseClass(CommonClass* cl) {
+    return 0;
+  }
 };
 
 }

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

==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Mon Nov  9 09:23:07 2009
@@ -637,6 +637,8 @@
   
   virtual void* loadMethod(void* handle, const char* symbol);
 
+  virtual CommonClass* getUniqueBaseClass(CommonClass* cl);
+
 private:
 
   //--------------- Static compiler specific functions -----------------------//

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Mon Nov  9 09:23:07 2009
@@ -2070,3 +2070,33 @@
   return JavaCompiler::loadMethod(handle, symbol);
 }
 
+#ifdef WITH_MMTK
+
+#include <set>
+extern std::set<gc*> __InternalSet__;
+
+CommonClass* JavaAOTCompiler::getUniqueBaseClass(CommonClass* cl) {
+  std::set<gc*>::iterator I = __InternalSet__.begin();
+  std::set<gc*>::iterator E = __InternalSet__.end();
+  CommonClass* currentClass = 0;
+
+  for (; I != E; ++I) {
+    JavaObject* obj = (JavaObject*)(*I);
+    if (obj->instanceOf(cl)) {
+      if (currentClass) {
+        if (obj->getClass() != currentClass) {
+          return 0;
+        }
+      } else {
+        currentClass = obj->getClass();
+      }
+    }
+  }
+  return currentClass;
+}
+
+#else
+CommonClass* JavaAOTCompiler::getUniqueBaseClass(CommonClass* cl) {
+  return 0;
+}
+#endif

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJIT.cpp Mon Nov  9 09:23:07 2009
@@ -99,6 +99,11 @@
   if (source) {
     return invokeSpecial(index, source->getClass());
   }
+  
+  if (TheCompiler->isStaticCompiling()) {
+    CommonClass* unique = TheCompiler->getUniqueBaseClass(cl);
+    if (unique) return invokeSpecial(index, unique);
+  }
  
 #if !defined(WITHOUT_VTABLE)
   Typedef* retTypedef = signature->getReturnType();

Modified: vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp?rev=86546&r1=86545&r2=86546&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp (original)
+++ vmkit/trunk/lib/Mvm/MMTk/MvmGC.cpp Mon Nov  9 09:23:07 2009
@@ -33,9 +33,21 @@
 uintptr_t Collector::TraceLocal = 0;
 
   
-static std::set<gc*> Set;
 static mvm::SpinLock lock;
 
+
+std::set<gc*> __InternalSet__;
+
+extern "C" int internalCheckAllocator(uintptr_t Mutator, int32_t sz,
+                                      int32_t align, int32_t alloc) {
+  return 0;
+}
+
+extern "C" void internalPostMalloc(uintptr_t Mutator, uintptr_t ref,
+                                   uintptr_t typeref, int32_t bytes,
+                                   int32_t allocator) {
+}
+
 extern "C" gc* internalMalloc(uintptr_t Mutator, int32_t sz, int32_t align,
                               int32_t offset, int32_t allocator,
                               int32_t site) {
@@ -45,27 +57,18 @@
   memset(res, 0, sz);
   
   lock.acquire();
-  Set.insert(res);
+  __InternalSet__.insert(res);
   lock.release();
   
   return res;
 }
 
-extern "C" int internalCheckAllocator(uintptr_t Mutator, int32_t sz,
-                                      int32_t align, int32_t alloc) {
-  return 0;
-}
-
-extern "C" void internalPostMalloc(uintptr_t Mutator, uintptr_t ref,
-                                   uintptr_t typeref, int32_t bytes,
-                                   int32_t allocator) {
-}
 
 void* Collector::begOf(gc* obj) {
   if (gc::MMTkGCAllocator == internalMalloc) {
     lock.acquire();
-    std::set<gc*>::iterator I = Set.find(obj);
-    std::set<gc*>::iterator E = Set.end();
+    std::set<gc*>::iterator I = __InternalSet__.find(obj);
+    std::set<gc*>::iterator E = __InternalSet__.end();
     lock.release();
     
     if (I != E) return obj;

Modified: vmkit/trunk/mmtk/java/src/org/j3/config/Selected.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/config/Selected.java?rev=86546&r1=86545&r2=86546&view=diff

==============================================================================
--- vmkit/trunk/mmtk/java/src/org/j3/config/Selected.java (original)
+++ vmkit/trunk/mmtk/java/src/org/j3/config/Selected.java Mon Nov  9 09:23:07 2009
@@ -52,6 +52,12 @@
   @Uninterruptible
   public static class Mutator extends org.mmtk.plan.marksweep.MSMutator
   {
+   
+    // Unused mutator used by the AOT compiler to know what instances
+    // will be alive during MMTk execution. This allows to inline
+    // virtual calls of singleton objects.
+    private static final Mutator unusedMutator = new Mutator();
+    
     public Mutator() {}
 
     @Inline

Modified: vmkit/trunk/mmtk/mmtk-fake/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-fake/Selected.cpp?rev=86546&r1=86545&r2=86546&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-fake/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-fake/Selected.cpp Mon Nov  9 09:23:07 2009
@@ -13,12 +13,13 @@
 #include "JavaThread.h"
 #include "MutatorThread.h"
 
+#include <set>
+
 using namespace jnjvm;
 
 extern "C" gc* internalMalloc(uintptr_t Mutator, int32_t sz, int32_t align,
                               int32_t offset, int32_t allocator,
                               int32_t site);
-  
 
 
 extern "C" void* gcmalloc(size_t sz, void* _VT) {

Modified: vmkit/trunk/mmtk/mmtk-j3/VM.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/VM.cpp?rev=86546&r1=86545&r2=86546&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/VM.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/VM.cpp Mon Nov  9 09:23:07 2009
@@ -37,5 +37,9 @@
 }
 
 extern "C" bool Java_org_j3_runtime_VM_verifyAssertions__ () {
+#ifdef DEBUG
   return true;
+#else
+  return false;
+#endif
 }





More information about the vmkit-commits mailing list