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