[vmkit-commits] [vmkit] r75052 - /vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Jul 8 14:43:11 PDT 2009


Author: geoffray
Date: Wed Jul  8 16:43:11 2009
New Revision: 75052

URL: http://llvm.org/viewvc/llvm-project?rev=75052&view=rev
Log:
Emission of statically initialized fields.


Modified:
    vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Wed Jul  8 16:43:11 2009
@@ -210,11 +210,21 @@
 
 
 Constant* JavaAOTCompiler::getFinalObject(JavaObject* obj) {
+  llvm::Constant* varGV = 0;
   final_object_iterator End = finalObjects.end();
   final_object_iterator I = finalObjects.find(obj);
   if (I == End) {
-    abort();
-    return 0;
+    Constant* CO = CreateConstantFromJavaObject(obj);
+    
+    varGV = new GlobalVariable(CO->getType(), true,
+                               GlobalValue::InternalLinkage,
+                               CO, "", getLLVMModule());
+
+    varGV = ConstantExpr::getCast(Instruction::BitCast, varGV,
+                                  JnjvmModule::JavaObjectType);
+  
+    finalObjects.insert(std::make_pair(obj, varGV));
+    return varGV;
   } else {
     return I->second;
   }
@@ -236,7 +246,49 @@
     Attribut* attribut = field.lookupAttribut(Attribut::constantAttribut);
 
     if (!attribut) {
-      Elts.push_back(Constant::getNullValue(Ty));
+      void* obj = cl->getStaticInstance();
+      if (obj) {
+        if (type->isPrimitive()) {
+          const PrimitiveTypedef* prim = (PrimitiveTypedef*)type;
+          if (prim->isBool() || prim->isByte()) {
+            ConstantInt* CI = ConstantInt::get(Type::Int8Ty,
+                                               field.getInt8Field(obj));
+            Elts.push_back(CI);
+          } else if (prim->isShort() || prim->isChar()) {
+            ConstantInt* CI = ConstantInt::get(Type::Int16Ty,
+                                               field.getInt16Field(obj));
+            Elts.push_back(CI);
+          } else if (prim->isInt()) {
+            ConstantInt* CI = ConstantInt::get(Type::Int32Ty,
+                                               field.getInt32Field(obj));
+            Elts.push_back(CI);
+          } else if (prim->isLong()) {
+            ConstantInt* CI = ConstantInt::get(Type::Int64Ty,
+                                               field.getLongField(obj));
+            Elts.push_back(CI);
+          } else if (prim->isFloat()) {
+            Constant* CF = ConstantFP::get(Type::FloatTy,
+                                           field.getFloatField(obj));
+            Elts.push_back(CF);
+          } else if (prim->isDouble()) {
+            Constant* CF = ConstantFP::get(Type::DoubleTy,
+                                           field.getDoubleField(obj));
+            Elts.push_back(CF);
+          } else {
+            abort();
+          }
+        } else {
+          JavaObject* val = field.getObjectField(obj);
+          if (val) {
+            Constant* CO = getFinalObject(val);
+            Elts.push_back(CO);
+          } else {
+            Elts.push_back(Constant::getNullValue(Ty));
+          }
+        }
+      } else {
+        Elts.push_back(Constant::getNullValue(Ty));
+      }
     } else {
       Reader reader(attribut, cl->bytes);
       JavaConstantPool * ctpInfo = cl->ctpInfo;
@@ -453,7 +505,7 @@
     // JavaObject
     Constant* CurConstant = CreateConstantForBaseObject(obj->getClass());
 
-    for (uint32 j = 0; j <= cl->virtualVT->depth; ++j) {
+    for (uint32 j = 0; j < cl->virtualVT->depth; ++j) {
       std::vector<Constant*> TempElts;
       Elmts.push_back(CurConstant);
       TempElts.push_back(CurConstant);





More information about the vmkit-commits mailing list