[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