<br><br><div class="gmail_quote">On Mon, Nov 7, 2011 at 3:55 AM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Sun, Nov 6, 2011 at 4:38 AM, Nicolas Geoffray<br>
<<a href="mailto:nicolas.geoffray@gmail.com">nicolas.geoffray@gmail.com</a>> wrote:<br>
> On Sun, Nov 6, 2011 at 8:32 AM, Will Dietz <<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>> wrote:<br>
>><br>
>> On Fri, Nov 4, 2011 at 4:57 PM, Nicolas Geoffray<br>
>> <<a href="mailto:nicolas.geoffray@gmail.com">nicolas.geoffray@gmail.com</a>> wrote:<br>
>> > Don't you need to fix java.lang.String also?<br>
>> ><br>
>><br>
>> Hmm, I'd imagine so-- good call.  Strange this didn't break anything<br>
>> terribly :).<br>
><br>
> I think they are used for debugging and logging in MMTk, so as long as you<br>
> weren't printing things, you may not use the generated strings at all.<br>
>><br>
>> > There is a problem if we don't add the extra fields in LLVM's struct:<br>
>> > the<br>
>> > object will be emitted in the executable, and won't be big enough to<br>
>> > contain<br>
>> > the two extra fields.<br>
>><br>
>> Bah, okay.  That sort of thing was why my previous (otherwise hacky)<br>
>> patch for adding extra fields was useful--LLVMInfo would do the right<br>
>> thing.<br>
><br>
> Indeed. Sorry about not liking this solution :)<br>
><br>
<br>
</div>No need to be sorry :).<br>
<div class="im"><br>
>><br>
>> However, I like your idea below of trying to ditch emitting Class in<br>
>> AOT entirely, I'll give it a go.<br>
><br>
> Thanks!<br>
> Nicolas<br>
><br>
<br>
</div>Gave it a go, and the corresponding patch is inlined below.<br>
<br>
However, in order for it to work, it also needs the "Don't emit<br>
methods for primitive classes' VT" patch, which I'm sending in a<br>
separate thread.<br>
<br>
~Will<br>
<br>
>From e8eda306e44c270545fdb31b3ba954cfd016c511 Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Sun, 6 Nov 2011 20:17:02 -0600<br>
Subject: [PATCH 7/8] Emit NULL for j.l.Class in AOT.<br>
<br>
---<br>
 include/j3/JavaAOTCompiler.h        |    1 -<br>
 lib/J3/Compiler/JavaAOTCompiler.cpp |   64 +----------------------------------<br>
 2 files changed, 1 insertions(+), 64 deletions(-)<br>
<br>
diff --git a/include/j3/JavaAOTCompiler.h b/include/j3/JavaAOTCompiler.h<br>
index b278a41..483bffb 100644<br>
--- a/include/j3/JavaAOTCompiler.h<br>
+++ b/include/j3/JavaAOTCompiler.h<br>
@@ -94,7 +94,6 @@ private:<br>
   llvm::Constant* CreateConstantFromJavaMethod(JavaMethod& method);<br>
   llvm::Constant* CreateConstantFromStaticInstance(Class* cl);<br>
   llvm::Constant* CreateConstantFromJavaString(JavaString* str);<br>
-  llvm::Constant* CreateConstantFromJavaClass(CommonClass* cl);<br>
   llvm::Constant* CreateConstantForBaseObject(CommonClass* cl);<br>
   llvm::Constant* CreateConstantFromJavaObject(JavaObject* obj);<br>
   llvm::Constant* CreateConstantFromClassBytes(ClassBytes* bytes);<br>
diff --git a/lib/J3/Compiler/JavaAOTCompiler.cpp<br>
b/lib/J3/Compiler/JavaAOTCompiler.cpp<br>
index 1a4d2e4..2ae8973 100644<br>
--- a/lib/J3/Compiler/JavaAOTCompiler.cpp<br>
+++ b/lib/J3/Compiler/JavaAOTCompiler.cpp<br>
@@ -295,39 +295,7 @@ Constant* JavaAOTCompiler::getStringPtr(JavaString** str) {<br>
 }<br>
<br>
 Constant* JavaAOTCompiler::getJavaClass(CommonClass* cl) {<br>
<div class="im">-  Class* javaClass = cl->classLoader->bootstrapLoader->upcalls->newClass;<br>
-  LLVMClassInfo* LCI = getClassInfo(javaClass);<br>
</div>-  llvm::Type* Ty = LCI->getVirtualType();<br>
-<br>
-  if (useCooperativeGC()) {<br>
-    return Constant::getNullValue(JavaIntrinsics.JavaObjectType);<br>
-  } else {<br>
-    java_class_iterator End = javaClasses.end();<br>
-    java_class_iterator I = javaClasses.find(cl);<br>
-    if (I == End) {<br>
-      final_object_iterator End = finalObjects.end();<br>
-      final_object_iterator I = finalObjects.find(cl->delegatee[0]);<br>
-      if (I == End) {<br>
-<br>
-        Module& Mod = *getLLVMModule();<br>
-<br>
-        GlobalVariable* varGV =<br>
-          new GlobalVariable(Mod, Ty->getContainedType(0), false,<br>
-                             GlobalValue::InternalLinkage, 0, "");<br>
-<br>
-        Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV,<br>
-                                              JavaIntrinsics.JavaObjectType);<br>
-<br>
-        javaClasses.insert(std::make_pair(cl, res));<br>
-        varGV->setInitializer(CreateConstantFromJavaClass(cl));<br>
-        return res;<br>
-      } else {<br>
-        return I->second;<br>
-      }<br>
-    } else {<br>
-      return I->second;<br>
-    }<br>
-  }<br>
+  return Constant::getNullValue(JavaIntrinsics.JavaObjectType);<br></blockquote><div><br></div><div>Did you make sure this works with the current setup (mmtk + gnu classpath)? If you did, then please apply!</div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
 }<br>
<br>
 Constant* JavaAOTCompiler::getJavaClassPtr(CommonClass* cl) {<br>
@@ -688,36 +656,6 @@ Constant*<br>
<div class="HOEnZb"><div class="h5">JavaAOTCompiler::CreateConstantForBaseObject(CommonClass* cl) {<br>
   return ConstantStruct::get(STy, Elmts);<br>
 }<br>
<br>
-Constant* JavaAOTCompiler::CreateConstantFromJavaClass(CommonClass* cl) {<br>
-  assert(!useCooperativeGC());<br>
-  Class* javaClass = cl->classLoader->bootstrapLoader->upcalls->newClass;<br>
-  LLVMClassInfo* LCI = getClassInfo(javaClass);<br>
-  StructType* STy =<br>
-    dyn_cast<StructType>(LCI->getVirtualType()->getContainedType(0));<br>
-<br>
-  std::vector<Constant*> Elmts;<br>
-<br>
-  // JavaObject<br>
-  Elmts.push_back(CreateConstantForBaseObject(javaClass));<br>
-<br>
-  // signers<br>
-  Elmts.push_back(Constant::getNullValue(JavaIntrinsics.JavaObjectType));<br>
-<br>
-  // pd<br>
-  Elmts.push_back(Constant::getNullValue(JavaIntrinsics.JavaObjectType));<br>
-<br>
-  // vmdata<br>
-  Constant* Cl = getNativeClass(cl);<br>
-  Cl = ConstantExpr::getCast(Instruction::BitCast, Cl,<br>
-                             JavaIntrinsics.JavaObjectType);<br>
-  Elmts.push_back(Cl);<br>
-<br>
-  // constructor<br>
-  Elmts.push_back(Constant::getNullValue(JavaIntrinsics.JavaObjectType));<br>
-<br>
-  return ConstantStruct::get(STy, Elmts);<br>
-}<br>
-<br>
 Constant* JavaAOTCompiler::CreateConstantFromJavaObject(JavaObject* obj) {<br>
   assert(!useCooperativeGC());<br>
   CommonClass* cl = JavaObject::getClass(obj);<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
1.7.5.1<br>
</font></span></blockquote></div><br>