[vmkit-commits] [vmkit] r75009 - in /vmkit/trunk: include/jnjvm/JavaCompiler.h include/jnjvm/JnjvmModule.h lib/JnJVM/Compiler/JITInfo.cpp lib/JnJVM/Compiler/JavaAOTCompiler.cpp lib/JnJVM/Compiler/JavaJITCompiler.cpp lib/JnJVM/VMCore/JavaClass.cpp tools/vmjc/vmjc.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed Jul 8 08:34:06 PDT 2009
Author: geoffray
Date: Wed Jul 8 10:33:07 2009
New Revision: 75009
URL: http://llvm.org/viewvc/llvm-project?rev=75009&view=rev
Log:
Preliminary support for clinit'ing before AOT.
Modified:
vmkit/trunk/include/jnjvm/JavaCompiler.h
vmkit/trunk/include/jnjvm/JnjvmModule.h
vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp
vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/tools/vmjc/vmjc.cpp
Modified: vmkit/trunk/include/jnjvm/JavaCompiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JavaCompiler.h?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JavaCompiler.h (original)
+++ vmkit/trunk/include/jnjvm/JavaCompiler.h Wed Jul 8 10:33:07 2009
@@ -37,15 +37,6 @@
virtual void setMethod(JavaMethod* meth, void* ptr, const char* name) {
}
- virtual void setTracer(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) {
- }
-
- virtual void setDestructor(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) {
- }
-
-
virtual bool isStaticCompiling() {
return false;
}
Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Wed Jul 8 10:33:07 2009
@@ -428,10 +428,6 @@
virtual llvm::Constant* getNativeFunction(JavaMethod* meth, void* natPtr) = 0;
virtual void setMethod(JavaMethod* meth, void* ptr, const char* name) = 0;
- virtual void setTracer(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) = 0;
- virtual void setDestructor(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) = 0;
#ifdef SERVICE
virtual llvm::Value* getIsolate(Jnjvm* vm, llvm::Value* Where) = 0;
@@ -496,10 +492,6 @@
virtual llvm::Constant* getNativeFunction(JavaMethod* meth, void* natPtr);
virtual void setMethod(JavaMethod* meth, void* ptr, const char* name);
- virtual void setTracer(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name);
- virtual void setDestructor(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name);
#ifdef SERVICE
@@ -550,10 +542,6 @@
virtual llvm::Constant* getNativeFunction(JavaMethod* meth, void* natPtr);
virtual void setMethod(JavaMethod* meth, void* ptr, const char* name);
- virtual void setTracer(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name);
- virtual void setDestructor(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name);
#ifdef SERVICE
Modified: vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JITInfo.cpp Wed Jul 8 10:33:07 2009
@@ -40,10 +40,15 @@
if (!virtualType) {
std::vector<const llvm::Type*> fields;
- if (classDef->super && classDef->super->super) {
- LLVMClassInfo* CLI =
- JavaLLVMCompiler::getClassInfo((Class*)classDef->super);
- fields.push_back(CLI->getVirtualType()->getContainedType(0));
+ if (classDef->super) {
+ LLVMClassInfo* CLI = JavaLLVMCompiler::getClassInfo(classDef->super);
+ const llvm::Type* Ty = CLI->getVirtualType()->getContainedType(0);
+
+ if (classDef->super->super) {
+ fields.push_back(Ty);
+ } else {
+ fields.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
+ }
} else {
fields.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
}
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Wed Jul 8 10:33:07 2009
@@ -381,7 +381,7 @@
Constant* JavaAOTCompiler::CreateConstantFromJavaClass(CommonClass* cl) {
Class* javaClass = cl->classLoader->bootstrapLoader->upcalls->newClass;
- LLVMClassInfo* LCI = (LLVMClassInfo*)getClassInfo(javaClass);
+ LLVMClassInfo* LCI = getClassInfo(javaClass);
const StructType* STy =
dyn_cast<StructType>(LCI->getVirtualType()->getContainedType(0));
@@ -1131,19 +1131,12 @@
// Destructor
Function* Finalizer = 0;
- if (RealVT->operatorDelete) {
- char* name = (char*)(RealVT->destructor);
- std::vector<const Type*> Args;
- const FunctionType* Ty = FunctionType::get(Type::VoidTy, Args, false);
- Finalizer = Function::Create(Ty, GlobalValue::ExternalLinkage, name,
- getLLVMModule());
- } else {
- JavaMethod* meth = (JavaMethod*)(RealVT->destructor);
- if (meth) {
- LLVMMethodInfo* LMI = getMethodInfo(meth);
- Finalizer = LMI->getMethod();
- }
+ JavaMethod* meth = (JavaMethod*)(RealVT->destructor);
+ if (meth) {
+ LLVMMethodInfo* LMI = getMethodInfo(meth);
+ Finalizer = LMI->getMethod();
}
+
Elemts.push_back(Finalizer ?
ConstantExpr::getCast(Instruction::BitCast, Finalizer, PTy) : N);
@@ -1479,19 +1472,6 @@
func->setLinkage(GlobalValue::ExternalLinkage);
}
-void JavaAOTCompiler::setTracer(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) {
- VT->tracer = (uintptr_t)name;
-}
-
-void JavaAOTCompiler::setDestructor(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) {
- // Set the name info into the operatorDelete directly, the compiler
- // will use the name to create a LLVM function.
- VT->destructor = (uintptr_t)name;
- VT->operatorDelete = (uintptr_t)name;
-}
-
Function* JavaAOTCompiler::addCallback(Class* cl, uint16 index,
Signdef* sign, bool stat) {
@@ -1544,9 +1524,15 @@
JnjvmBootstrapLoader* bootstrapLoader = vm->bootstrapLoader;
JavaAOTCompiler* M = (JavaAOTCompiler*)bootstrapLoader->getCompiler();
try {
-
- bootstrapLoader->analyseClasspathEnv(vm->classpath);
- bootstrapLoader->upcalls->initialiseClasspath(bootstrapLoader);
+
+ if (M->runClinit) {
+ JavaJITCompiler* Comp = new JavaJITCompiler("JIT");
+ bootstrapLoader->setCompiler(Comp);
+ bootstrapLoader->analyseClasspathEnv(vm->classpath);
+ } else {
+ bootstrapLoader->analyseClasspathEnv(vm->classpath);
+ bootstrapLoader->upcalls->initialiseClasspath(bootstrapLoader);
+ }
uint32 size = strlen(name);
@@ -1607,6 +1593,18 @@
}
}
+
+ if (M->runClinit) {
+ JavaJITCompiler* Comp = new JavaJITCompiler("JIT");
+ bootstrapLoader->setCompiler(Comp);
+
+ for (std::vector<Class*>::iterator i = classes.begin(), e = classes.end();
+ i != e; ++i) {
+ Class* cl = *i;
+ cl->initialiseClass(vm);
+ }
+ bootstrapLoader->setCompiler(M);
+ }
for (std::vector<Class*>::iterator i = classes.begin(), e = classes.end();
i != e; ++i) {
@@ -1622,9 +1620,16 @@
} else {
memcpy(realName, name, size + 1);
}
-
+
const UTF8* utf8 = bootstrapLoader->asciizConstructUTF8(realName);
UserClass* cl = bootstrapLoader->loadName(utf8, true, true);
+
+ if (M->runClinit) {
+ vm->loadBootstrap();
+ cl->initialiseClass(vm);
+ bootstrapLoader->setCompiler(M);
+ }
+
cl->setOwnerClass(JavaThread::get());
M->compileClass(cl);
}
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaJITCompiler.cpp Wed Jul 8 10:33:07 2009
@@ -185,17 +185,6 @@
func->setLinkage(GlobalValue::ExternalLinkage);
}
-void JavaJITCompiler::setTracer(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) {
- VT->tracer = ptr;
-}
-
-void JavaJITCompiler::setDestructor(JavaVirtualTable* VT, uintptr_t ptr,
- const char* name) {
- VT->destructor = ptr;
- VT->operatorDelete = ptr;
-}
-
void* JavaJITCompiler::materializeFunction(JavaMethod* meth) {
Function* func = parseFunction(meth);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Wed Jul 8 10:33:07 2009
@@ -334,11 +334,12 @@
}
void JavaVirtualTable::setNativeTracer(uintptr_t ptr, const char* name) {
- cl->classLoader->getCompiler()->setTracer(this, ptr, name);
+ tracer = ptr;
}
void JavaVirtualTable::setNativeDestructor(uintptr_t ptr, const char* name) {
- cl->classLoader->getCompiler()->setDestructor(this, ptr, name);
+ destructor = ptr;
+ operatorDelete = ptr;
}
JavaMethod* Class::lookupInterfaceMethodDontThrow(const UTF8* name,
Modified: vmkit/trunk/tools/vmjc/vmjc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=75009&r1=75008&r2=75009&view=diff
==============================================================================
--- vmkit/trunk/tools/vmjc/vmjc.cpp (original)
+++ vmkit/trunk/tools/vmjc/vmjc.cpp Wed Jul 8 10:33:07 2009
@@ -106,7 +106,7 @@
AssumeCompiled("assume-compiled",
cl::desc("Assume external Java classes are compiled"));
-static cl::opt<std::string>
+static cl::opt<bool>
WithClinit("with-clinit", cl::desc("Clinit the given file"));
static cl::opt<bool>
@@ -175,8 +175,7 @@
return 0;
}
- JavaCompiler* Comp = 0;
- if (WithClinit.empty()) {
+ if (!WithClinit) {
Module* TheModule = new Module("bootstrap module",
*(new llvm::LLVMContext()));
if (!TargetTriple.empty())
@@ -203,36 +202,30 @@
mvm::MvmModule::initialise(CodeGenOpt::Default, TheModule, TheTarget);
- Comp = new JavaAOTCompiler("AOT");
} else {
mvm::MvmModule::initialise();
- Comp = new JavaJITCompiler("JIT");
}
+ JavaAOTCompiler* Comp = new JavaAOTCompiler("AOT");
+
mvm::Collector::initialise();
mvm::Collector::enable(0);
JnjvmClassLoader* JCL = mvm::VirtualMachine::initialiseJVM(Comp, false);
addCommandLinePass(argv);
- if (!WithClinit.empty()) {
- // TODO
- Comp = new JavaAOTCompiler("AOT");
- JCL->setCompiler(Comp);
- }
-
- JavaAOTCompiler* MAOT = (JavaAOTCompiler*)Comp;
- if (DisableExceptions) MAOT->disableExceptions();
- if (DisableStubs) MAOT->generateStubs = false;
- if (AssumeCompiled) MAOT->assumeCompiled = true;
- MAOT->compileFile(JCL, InputFilename.c_str());
+ if (DisableExceptions) Comp->disableExceptions();
+ if (DisableStubs) Comp->generateStubs = false;
+ if (AssumeCompiled) Comp->assumeCompiled = true;
+ if (WithClinit) Comp->runClinit = true;
+ Comp->compileFile(JCL, InputFilename.c_str());
if (!MainClass.empty()) {
- MAOT->generateMain(MainClass.c_str(), WithJIT);
+ Comp->generateMain(MainClass.c_str(), WithJIT);
}
if (PrintStats)
- MAOT->printStats();
+ Comp->printStats();
if (DontPrint) {
// Just use stdout. We won't actually print anything on it.
@@ -280,7 +273,7 @@
}
if (Force || !CheckBitcodeOutputToConsole(Out,true))
- WriteBitcodeToFile(MAOT->getLLVMModule(), *Out);
+ WriteBitcodeToFile(Comp->getLLVMModule(), *Out);
if (Out != &std::cout) {
((std::ofstream*)Out)->close();
More information about the vmkit-commits
mailing list