[vmkit-commits] [vmkit] r61615 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaJIT.cpp JnjvmModule.cpp JnjvmModule.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Jan 3 15:16:16 PST 2009
Author: geoffray
Date: Sat Jan 3 17:16:15 2009
New Revision: 61615
URL: http://llvm.org/viewvc/llvm-project?rev=61615&view=rev
Log:
Still static initialize array classes and Java class objects for classes
that we are compiling.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=61615&r1=61614&r2=61615&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Sat Jan 3 17:16:15 2009
@@ -1192,7 +1192,8 @@
Value* res = getResolvedCommonClass(index, false, &cl);
#ifndef ISOLATE
- if (cl && !module->isStaticCompiling()) res = module->getJavaClass(cl);
+ if (cl || (module->isStaticCompiling() && module->isCompiling(cl)))
+ res = module->getJavaClass(cl);
else
#endif
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61615&r1=61614&r2=61615&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Sat Jan 3 17:16:15 2009
@@ -88,22 +88,33 @@
llvm::ConstantInt* JnjvmModule::JavaObjectClassOffsetConstant;
-static bool isCompiling(Class* cl) {
- // A class is being static compiled if owner class is not null.
- return (cl->getOwnerClass() != 0);
+bool JnjvmModule::isCompiling(CommonClass* cl) {
+ if (cl->isClass()) {
+ // A class is being static compiled if owner class is not null.
+ return (cl->asClass()->getOwnerClass() != 0);
+ } else if (cl->isArray()) {
+ return isCompiling(cl->asArrayClass()->baseClass());
+ } else {
+ return false;
+ }
}
Constant* JnjvmModule::getNativeClass(CommonClass* classDef) {
if (staticCompilation) {
- if (classDef->isClass()) {
+ if (classDef->isClass() ||
+ (classDef->isArray() && isCompiling(classDef))) {
native_class_iterator End = nativeClasses.end();
- native_class_iterator I = nativeClasses.find((Class*)classDef);
+ native_class_iterator I = nativeClasses.find(classDef);
if (I == End) {
const llvm::Type* Ty = 0;
-
- Ty = JavaClassType->getContainedType(0);
+
+ if (classDef->isArray()) {
+ Ty = JavaClassArrayType->getContainedType(0);
+ } else {
+ Ty = JavaClassType->getContainedType(0);
+ }
GlobalVariable* varGV =
new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
@@ -111,9 +122,12 @@
nativeClasses.insert(std::make_pair((Class*)classDef, varGV));
- if (isCompiling(classDef->asClass())) {
+ if (classDef->isClass() && isCompiling(classDef->asClass())) {
Constant* C = CreateConstantFromClass((Class*)classDef);
varGV->setInitializer(C);
+ } else if (classDef->isArray()) {
+ Constant* C = CreateConstantFromClassArray((ClassArray*)classDef);
+ varGV->setInitializer(C);
}
return varGV;
@@ -1895,23 +1909,23 @@
void JnjvmModule::printStats() {
fprintf(stderr, "----------------- Info from the module -----------------\n");
- fprintf(stderr, "Number of native classes : %llu\n",
+ fprintf(stderr, "Number of native classes : %llu\n",
(unsigned long long int) nativeClasses.size());
- fprintf(stderr, "Number of Java classes : %llu\n",
+ fprintf(stderr, "Number of Java classes : %llu\n",
(unsigned long long int) javaClasses.size());
- fprintf(stderr, "Number of array classes : %llu\n",
+ fprintf(stderr, "Number of external array classes : %llu\n",
(unsigned long long int) arrayClasses.size());
- fprintf(stderr, "Number of virtual tables : %llu\n",
+ fprintf(stderr, "Number of virtual tables : %llu\n",
(unsigned long long int) virtualTables.size());
- fprintf(stderr, "Number of static instances : %llu\n",
+ fprintf(stderr, "Number of static instances : %llu\n",
(unsigned long long int) staticInstances.size());
- fprintf(stderr, "Number of constant pools : %llu\n",
+ fprintf(stderr, "Number of constant pools : %llu\n",
(unsigned long long int) constantPools.size());
- fprintf(stderr, "Number of strings : %llu\n",
+ fprintf(stderr, "Number of strings : %llu\n",
(unsigned long long int) strings.size());
- fprintf(stderr, "Number of enveloppes : %llu\n",
+ fprintf(stderr, "Number of enveloppes : %llu\n",
(unsigned long long int) enveloppes.size());
- fprintf(stderr, "Number of native functions : %llu\n",
+ fprintf(stderr, "Number of native functions : %llu\n",
(unsigned long long int) nativeFunctions.size());
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=61615&r1=61614&r2=61615&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Sat Jan 3 17:16:15 2009
@@ -181,7 +181,7 @@
class JnjvmModule : public mvm::MvmModule {
friend class LLVMClassInfo;
private:
- std::map<const Class*, llvm::Constant*> nativeClasses;
+ std::map<const CommonClass*, llvm::Constant*> nativeClasses;
std::map<const ClassArray*, llvm::GlobalVariable*> arrayClasses;
std::map<const CommonClass*, llvm::Constant*> javaClasses;
std::map<const CommonClass*, llvm::Constant*> virtualTables;
@@ -192,7 +192,7 @@
std::map<const JavaMethod*, llvm::Constant*> nativeFunctions;
std::map<const UTF8*, llvm::Constant*> utf8s;
- typedef std::map<const Class*, llvm::Constant*>::iterator
+ typedef std::map<const CommonClass*, llvm::Constant*>::iterator
native_class_iterator;
typedef std::map<const ClassArray*, llvm::GlobalVariable*>::iterator
@@ -421,7 +421,7 @@
#endif
- void cleanupStaticCompiler(JnjvmClassLoader* loader);
+ bool isCompiling(CommonClass* cl);
private:
static llvm::Module* initialModule;
More information about the vmkit-commits
mailing list