[vmkit-commits] [vmkit] r61608 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaJIT.cpp JnjvmModule.cpp JnjvmModule.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Jan 3 05:49:37 PST 2009


Author: geoffray
Date: Sat Jan  3 07:49:35 2009
New Revision: 61608

URL: http://llvm.org/viewvc/llvm-project?rev=61608&view=rev
Log:
Add an array class map for array classes. There are no good places to
allocate them, so we leave the matter of allocation to the to-be-provided
vmjc static initializer.


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=61608&r1=61607&r2=61608&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Sat Jan  3 07:49:35 2009
@@ -1192,7 +1192,7 @@
     Value* res = getResolvedCommonClass(index, false, &cl);
 
 #ifndef ISOLATE
-    if (cl) res = module->getJavaClass(cl);
+    if (cl && !module->isStaticCompiling()) res = module->getJavaClass(cl);
     else
 #endif
     
@@ -1688,6 +1688,9 @@
   if (cl && (!cl->isClass() || cl->asClass()->isResolved())) {
     if (alreadyResolved) *alreadyResolved = cl;
     node = module->getNativeClass(cl);
+    if (module->isStaticCompiling() && cl->isArray()) {
+      node = new LoadInst(node, "", currentBlock);
+    }
     if (node->getType() != module->JavaCommonClassType) {
       node = new BitCastInst(node, module->JavaCommonClassType, "",
                              currentBlock);

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61608&r1=61607&r2=61608&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Sat Jan  3 07:49:35 2009
@@ -96,44 +96,50 @@
 Constant* JnjvmModule::getNativeClass(CommonClass* classDef) {
 
   if (staticCompilation) {
-    native_class_iterator End = nativeClasses.end();
-    native_class_iterator I = nativeClasses.find(classDef);
-    if (I == End) {
-      const llvm::Type* Ty = 0;
+
+    if (classDef->isClass()) {
+      native_class_iterator End = nativeClasses.end();
+      native_class_iterator I = nativeClasses.find((Class*)classDef);
+      if (I == End) {
+        const llvm::Type* Ty = 0;
       
-      if (classDef->isClass()) {
         Ty = JavaClassType->getContainedType(0); 
-      } else if (classDef->isPrimitive()) {
-        Ty = JavaClassPrimitiveType->getContainedType(0);
-      } else { 
-        Ty = JavaClassArrayType->getContainedType(0); 
-      }
       
-      GlobalVariable* varGV = 
-        new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
-                           classDef->printString(), this);
+        GlobalVariable* varGV = 
+          new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
+                             classDef->printString(), this);
       
-      nativeClasses.insert(std::make_pair(classDef, varGV));
+        nativeClasses.insert(std::make_pair((Class*)classDef, varGV));
 
-      if (classDef->isClass() && isCompiling(classDef->asClass())) {
-        Constant* C = 0;
-        if (classDef->isClass()) {
-          C = CreateConstantFromClass((Class*)classDef);
-        } else if (classDef->isPrimitive()) {
-          C = CreateConstantFromClassPrimitive((ClassPrimitive*)classDef);
-        } else {
-          C = CreateConstantFromClassArray((ClassArray*)classDef);
+        if (isCompiling(classDef->asClass())) {
+          Constant* C = CreateConstantFromClass((Class*)classDef);
+          varGV->setInitializer(C);
         }
 
-        varGV->setInitializer(C);
-      }
-
-      return varGV;
+        return varGV;
 
-    } else {
-      return I->second;
+      } else {
+        return I->second;
+      }
+    } else if (classDef->isArray()) {
+      array_class_iterator End = arrayClasses.end();
+      array_class_iterator I = arrayClasses.find((ClassArray*)classDef);
+      if (I == End) {
+        const llvm::Type* Ty = JavaClassArrayType; 
+      
+        GlobalVariable* varGV = 
+          new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
+                             "", this);
+      
+        arrayClasses.insert(std::make_pair((ClassArray*)classDef, varGV));
+        return varGV;
+      } else {
+        return I->second;
+      }
+    } else if (classDef->isPrimitive()) {
+      assert(0 && "implement me");
     }
-
+    return 0;
   } else {
     const llvm::Type* Ty = classDef->isClass() ? JavaClassType : 
                                                  JavaCommonClassType;
@@ -1893,6 +1899,8 @@
           (unsigned long long int) nativeClasses.size());
   fprintf(stderr, "Number of Java classes     : %llu\n",
           (unsigned long long int) javaClasses.size());
+  fprintf(stderr, "Number of array classes    : %llu\n",
+          (unsigned long long int) arrayClasses.size());
   fprintf(stderr, "Number of virtual tables   : %llu\n", 
           (unsigned long long int) virtualTables.size());
   fprintf(stderr, "Number of static instances : %llu\n", 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=61608&r1=61607&r2=61608&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Sat Jan  3 07:49:35 2009
@@ -181,7 +181,8 @@
 class JnjvmModule : public mvm::MvmModule {
   friend class LLVMClassInfo;
 private:
-  std::map<const CommonClass*, llvm::Constant*> nativeClasses;
+  std::map<const Class*, llvm::Constant*> nativeClasses;
+  std::map<const ClassArray*, llvm::GlobalVariable*> arrayClasses;
   std::map<const CommonClass*, llvm::Constant*> javaClasses;
   std::map<const CommonClass*, llvm::Constant*> virtualTables;
   std::map<const Class*, llvm::Constant*> staticInstances;
@@ -191,9 +192,12 @@
   std::map<const JavaMethod*, llvm::Constant*> nativeFunctions;
   std::map<const UTF8*, llvm::Constant*> utf8s;
   
-  typedef std::map<const CommonClass*, llvm::Constant*>::iterator
+  typedef std::map<const Class*, llvm::Constant*>::iterator
     native_class_iterator;  
   
+  typedef std::map<const ClassArray*, llvm::GlobalVariable*>::iterator
+    array_class_iterator;  
+  
   typedef std::map<const CommonClass*, llvm::Constant*>::iterator
     java_class_iterator;
   





More information about the vmkit-commits mailing list