[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