[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