<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>