[vmkit-commits] [vmkit] r61608 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaJIT.cpp JnjvmModule.cpp JnjvmModule.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Jan 3 05:49:37 PST 2009
Author: geoffray
Date: Sat Jan 3 07:49:35 2009
New Revision: 61608
URL: http://llvm.org/viewvc/llvm-project?rev=61608&view=rev
Log:
Add an array class map for array classes. There are no good places to
allocate them, so we leave the matter of allocation to the to-be-provided
vmjc static initializer.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=61608&r1=61607&r2=61608&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Sat Jan 3 07:49:35 2009
@@ -1192,7 +1192,7 @@
Value* res = getResolvedCommonClass(index, false, &cl);
#ifndef ISOLATE
- if (cl) res = module->getJavaClass(cl);
+ if (cl && !module->isStaticCompiling()) res = module->getJavaClass(cl);
else
#endif
@@ -1688,6 +1688,9 @@
if (cl && (!cl->isClass() || cl->asClass()->isResolved())) {
if (alreadyResolved) *alreadyResolved = cl;
node = module->getNativeClass(cl);
+ if (module->isStaticCompiling() && cl->isArray()) {
+ node = new LoadInst(node, "", currentBlock);
+ }
if (node->getType() != module->JavaCommonClassType) {
node = new BitCastInst(node, module->JavaCommonClassType, "",
currentBlock);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61608&r1=61607&r2=61608&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Sat Jan 3 07:49:35 2009
@@ -96,44 +96,50 @@
Constant* JnjvmModule::getNativeClass(CommonClass* classDef) {
if (staticCompilation) {
- native_class_iterator End = nativeClasses.end();
- native_class_iterator I = nativeClasses.find(classDef);
- if (I == End) {
- const llvm::Type* Ty = 0;
+
+ if (classDef->isClass()) {
+ native_class_iterator End = nativeClasses.end();
+ native_class_iterator I = nativeClasses.find((Class*)classDef);
+ if (I == End) {
+ const llvm::Type* Ty = 0;
- if (classDef->isClass()) {
Ty = JavaClassType->getContainedType(0);
- } else if (classDef->isPrimitive()) {
- Ty = JavaClassPrimitiveType->getContainedType(0);
- } else {
- Ty = JavaClassArrayType->getContainedType(0);
- }
- GlobalVariable* varGV =
- new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
- classDef->printString(), this);
+ GlobalVariable* varGV =
+ new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
+ classDef->printString(), this);
- nativeClasses.insert(std::make_pair(classDef, varGV));
+ nativeClasses.insert(std::make_pair((Class*)classDef, varGV));
- if (classDef->isClass() && isCompiling(classDef->asClass())) {
- Constant* C = 0;
- if (classDef->isClass()) {
- C = CreateConstantFromClass((Class*)classDef);
- } else if (classDef->isPrimitive()) {
- C = CreateConstantFromClassPrimitive((ClassPrimitive*)classDef);
- } else {
- C = CreateConstantFromClassArray((ClassArray*)classDef);
+ if (isCompiling(classDef->asClass())) {
+ Constant* C = CreateConstantFromClass((Class*)classDef);
+ varGV->setInitializer(C);
}
- varGV->setInitializer(C);
- }
-
- return varGV;
+ return varGV;
- } else {
- return I->second;
+ } else {
+ return I->second;
+ }
+ } else if (classDef->isArray()) {
+ array_class_iterator End = arrayClasses.end();
+ array_class_iterator I = arrayClasses.find((ClassArray*)classDef);
+ if (I == End) {
+ const llvm::Type* Ty = JavaClassArrayType;
+
+ GlobalVariable* varGV =
+ new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage, 0,
+ "", this);
+
+ arrayClasses.insert(std::make_pair((ClassArray*)classDef, varGV));
+ return varGV;
+ } else {
+ return I->second;
+ }
+ } else if (classDef->isPrimitive()) {
+ assert(0 && "implement me");
}
-
+ return 0;
} else {
const llvm::Type* Ty = classDef->isClass() ? JavaClassType :
JavaCommonClassType;
@@ -1893,6 +1899,8 @@
(unsigned long long int) nativeClasses.size());
fprintf(stderr, "Number of Java classes : %llu\n",
(unsigned long long int) javaClasses.size());
+ fprintf(stderr, "Number of array classes : %llu\n",
+ (unsigned long long int) arrayClasses.size());
fprintf(stderr, "Number of virtual tables : %llu\n",
(unsigned long long int) virtualTables.size());
fprintf(stderr, "Number of static instances : %llu\n",
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=61608&r1=61607&r2=61608&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Sat Jan 3 07:49:35 2009
@@ -181,7 +181,8 @@
class JnjvmModule : public mvm::MvmModule {
friend class LLVMClassInfo;
private:
- std::map<const CommonClass*, llvm::Constant*> nativeClasses;
+ std::map<const Class*, llvm::Constant*> nativeClasses;
+ std::map<const ClassArray*, llvm::GlobalVariable*> arrayClasses;
std::map<const CommonClass*, llvm::Constant*> javaClasses;
std::map<const CommonClass*, llvm::Constant*> virtualTables;
std::map<const Class*, llvm::Constant*> staticInstances;
@@ -191,9 +192,12 @@
std::map<const JavaMethod*, llvm::Constant*> nativeFunctions;
std::map<const UTF8*, llvm::Constant*> utf8s;
- typedef std::map<const CommonClass*, llvm::Constant*>::iterator
+ typedef std::map<const Class*, llvm::Constant*>::iterator
native_class_iterator;
+ typedef std::map<const ClassArray*, llvm::GlobalVariable*>::iterator
+ array_class_iterator;
+
typedef std::map<const CommonClass*, llvm::Constant*>::iterator
java_class_iterator;
More information about the vmkit-commits
mailing list