[vmkit-commits] [vmkit] r61543 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaClass.cpp JavaClass.h JavaJIT.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Jan 1 09:50:52 PST 2009
Author: geoffray
Date: Thu Jan 1 11:50:51 2009
New Revision: 61543
URL: http://llvm.org/viewvc/llvm-project?rev=61543&view=rev
Log:
Initialization optimisation when a class does not have a clinit method and
static fields.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=61543&r1=61542&r2=61543&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Jan 1 11:50:51 2009
@@ -896,6 +896,9 @@
Mod->resolveVirtualClass(this);
Mod->resolveStaticClass(this);
setResolved();
+ if (!needsInitialisationCheck()) {
+ setInitializationState(ready);
+ }
broadcastClass();
release();
} else {
@@ -1228,3 +1231,24 @@
return false;
}
+
+bool UserClass::needsInitialisationCheck() {
+
+ if (!isClassRead()) return true;
+
+ if (isReady()) return false;
+
+ if (super && super->needsInitialisationCheck())
+ return true;
+
+ if (nbStaticFields) return true;
+
+ JavaMethod* meth =
+ lookupMethodDontThrow(classLoader->bootstrapLoader->clinitName,
+ classLoader->bootstrapLoader->clinitType,
+ true, false, 0);
+
+ if (meth) return true;
+
+ return false;
+}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=61543&r1=61542&r2=61543&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Thu Jan 1 11:50:51 2009
@@ -806,11 +806,15 @@
IsolateInfo[0].status = classRead;
}
- /// isResolving - IS the class currently being resolved?
+ /// isResolving - Is the class currently being resolved?
///
bool isResolving() {
return IsolateInfo[0].status == classRead;
}
+
+ bool isClassRead() {
+ return IsolateInfo[0].status >= classRead;
+ }
#else
TaskClassMirror& getCurrentTaskClassMirror();
@@ -831,6 +835,10 @@
getCurrentTaskClassMirror().status = st;
}
+ bool isClassRead() {
+ return getCurrentTaskClassMirror().status >= classRead;
+ }
+
bool isReady() {
return getCurrentTaskClassMirror().status == ready;
}
@@ -874,7 +882,13 @@
}
#endif
+ /// isNativeOverloaded - Is the method overloaded with a native function?
+ ///
bool isNativeOverloaded(JavaMethod* meth);
+
+ /// needsInitialisationCheck - Does the method need an initialisation check?
+ ///
+ bool needsInitialisationCheck();
};
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=61543&r1=61542&r2=61543&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Thu Jan 1 11:50:51 2009
@@ -48,7 +48,19 @@
#ifdef SERVICE
return true;
#else
- return !(cl->isReadyForCompilation() || compilingClass->subclassOf(cl));
+
+ if (cl->isReadyForCompilation() || compilingClass->subclassOf(cl)) {
+ return false;
+ }
+
+ if (!cl->needsInitialisationCheck()) {
+ if (!cl->isReady()) {
+ cl->setInitializationState(ready);
+ }
+ return false;
+ }
+
+ return true;
#endif
}
More information about the vmkit-commits
mailing list