[vmkit-commits] [vmkit] r75457 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h lib/JnJVM/Compiler/JavaAOTCompiler.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Jul 13 01:22:29 PDT 2009


Author: geoffray
Date: Mon Jul 13 03:22:22 2009
New Revision: 75457

URL: http://llvm.org/viewvc/llvm-project?rev=75457&view=rev
Log:
Implement getFinalObject in AOT when emitting static fields.


Modified:
    vmkit/trunk/include/jnjvm/JnjvmModule.h
    vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp

Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=75457&r1=75456&r2=75457&view=diff

==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Mon Jul 13 03:22:22 2009
@@ -588,10 +588,14 @@
   std::map<const UTF8*, llvm::Constant*> utf8s;
   std::map<const Class*, llvm::Constant*> virtualMethods;
   std::map<const JavaObject*, llvm::Constant*> finalObjects;
+  std::map<const llvm::Constant*, JavaObject*> reverseFinalObjects;
   
   typedef std::map<const JavaObject*, llvm::Constant*>::iterator
     final_object_iterator;
   
+  typedef std::map<const llvm::Constant*, JavaObject*>::iterator
+    reverse_final_object_iterator;
+  
   typedef std::map<const Class*, llvm::Constant*>::iterator
     method_iterator;
   

Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=75457&r1=75456&r2=75457&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Mon Jul 13 03:22:22 2009
@@ -204,6 +204,12 @@
 }
 
 JavaObject* JavaAOTCompiler::getFinalObject(llvm::Value* obj) {
+  if (Constant* CI = dyn_cast<Constant>(obj)) {
+    reverse_final_object_iterator End = reverseFinalObjects.end();
+    reverse_final_object_iterator I = reverseFinalObjects.find(CI);
+    if (I != End) return I->second;
+  }
+  
   return 0;
 }
 
@@ -218,11 +224,12 @@
     if (mvm::Collector::begOf(obj)) {
 
       const Type* Ty = JnjvmModule::JavaObjectType->getContainedType(0);
-      varGV = new GlobalVariable(Ty, true, GlobalValue::InternalLinkage,
+      varGV = new GlobalVariable(Ty, false, GlobalValue::InternalLinkage,
                                  0, "", getLLVMModule());
 
   
       finalObjects.insert(std::make_pair(obj, varGV));
+      reverseFinalObjects.insert(std::make_pair(varGV, obj));
     
       Constant* C = ConstantExpr::getBitCast(CreateConstantFromJavaObject(obj),
                                            Ty);





More information about the vmkit-commits mailing list