[vmkit-commits] [vmkit] r66155 - in /vmkit/trunk: include/jnjvm/JnjvmModule.h include/jnjvm/JnjvmModuleProvider.h lib/JnJVM/Compiler/JnjvmModule.cpp lib/JnJVM/Compiler/JnjvmModuleJIT.cpp lib/JnJVM/Compiler/JnjvmModuleProvider.cpp lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/Jnjvm.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Mar 5 00:14:15 PST 2009
Author: geoffray
Date: Thu Mar 5 02:14:15 2009
New Revision: 66155
URL: http://llvm.org/viewvc/llvm-project?rev=66155&view=rev
Log:
Move materializing functions to the module, not the module provider.
Modified:
vmkit/trunk/include/jnjvm/JnjvmModule.h
vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h
vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp
vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Thu Mar 5 02:14:15 2009
@@ -21,6 +21,7 @@
class Constant;
class ConstantInt;
class Function;
+ class FunctionPassManager;
class FunctionType;
class GlobalVariable;
class Module;
@@ -373,7 +374,7 @@
virtual JnjvmModule* Create(std::string ModuleID) = 0;
- virtual ~JnjvmModule() {}
+ virtual ~JnjvmModule();
llvm::Constant* getReferenceArrayVT();
llvm::Constant* getPrimitiveArrayVT();
@@ -408,6 +409,13 @@
#ifdef SERVICE
virtual llvm::Value* getIsolate(Jnjvm* vm, llvm::Value* Where) = 0;
#endif
+
+ virtual void* materializeFunction(JavaMethod* meth) = 0;
+ llvm::Function* parseFunction(JavaMethod* meth);
+
+ llvm::FunctionPassManager* JavaFunctionPasses;
+ llvm::FunctionPassManager* JavaNativeFunctionPasses;
+
};
@@ -425,6 +433,8 @@
return new JnjvmModuleJIT(ModuleID);
}
+ virtual void* materializeFunction(JavaMethod* meth);
+
virtual llvm::Constant* getFinalObject(JavaObject* obj);
virtual JavaObject* getFinalObject(llvm::Value* C);
virtual llvm::Constant* getNativeClass(CommonClass* cl);
@@ -462,6 +472,11 @@
return new JnjvmModuleAOT(ModuleID);
}
+ virtual void* materializeFunction(JavaMethod* meth) {
+ fprintf(stderr, "Can not materiale a function in AOT mode.");
+ abort();
+ }
+
virtual void makeVT(Class* cl);
virtual llvm::Constant* getFinalObject(JavaObject* obj);
Modified: vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModuleProvider.h Thu Mar 5 02:14:15 2009
@@ -26,9 +26,6 @@
private:
JavaMethod* staticLookup(Class* caller, uint32 index);
- llvm::FunctionPassManager* JavaFunctionPasses;
- llvm::FunctionPassManager* JavaNativeFunctionPasses;
-
uint32 nbCallbacks;
public:
@@ -40,8 +37,6 @@
bool stat);
bool materializeFunction(Function *F, std::string *ErrInfo = 0);
- void* materializeFunction(JavaMethod* meth);
- llvm::Function* parseFunction(JavaMethod* meth);
Module* materializeModule(std::string *ErrInfo = 0) { return TheModule; }
Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModule.cpp Thu Mar 5 02:14:15 2009
@@ -12,11 +12,13 @@
#include "llvm/Constants.h"
#include "llvm/Instructions.h"
#include "llvm/Module.h"
+#include "llvm/PassManager.h"
#include "mvm/JIT.h"
#include "JavaArray.h"
#include "JavaClass.h"
+#include "JavaJIT.h"
#include "JavaTypes.h"
#include "jnjvm/JnjvmModule.h"
@@ -496,3 +498,28 @@
GetLockFunction = module->getFunction("getLock");
}
+
+Function* JnjvmModule::parseFunction(JavaMethod* meth) {
+ LLVMMethodInfo* LMI = getMethodInfo(meth);
+ Function* func = LMI->getMethod();
+ if (func->hasNotBeenReadFromBitcode()) {
+ // We are jitting. Take the lock.
+ protectIR();
+ JavaJIT jit(meth, func);
+ if (isNative(meth->access)) {
+ jit.nativeCompile();
+ runPasses(func, JavaNativeFunctionPasses);
+ } else {
+ jit.javaCompile();
+ runPasses(func, globalFunctionPasses);
+ runPasses(func, JavaFunctionPasses);
+ }
+ unprotectIR();
+ }
+ return func;
+}
+
+JnjvmModule::~JnjvmModule() {
+ delete JavaFunctionPasses;
+ delete JavaNativeFunctionPasses;
+}
Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleJIT.cpp Thu Mar 5 02:14:15 2009
@@ -156,7 +156,7 @@
((void**)VT)[0] = 0;
#else
JnjvmClassLoader* loader = cl->classLoader;
- Function* func = loader->getModuleProvider()->parseFunction(&meth);
+ Function* func = loader->getModule()->parseFunction(&meth);
if (!cl->super) {
meth.canBeInlined = true;
((void**)VT)[0] = 0;
@@ -199,3 +199,12 @@
executionEngine->addGlobalMapping(func, ptr);
func->setLinkage(GlobalValue::ExternalLinkage);
}
+
+void* JnjvmModuleJIT::materializeFunction(JavaMethod* meth) {
+ Function* func = parseFunction(meth);
+
+ void* res = mvm::MvmModule::executionEngine->getPointerToGlobal(func);
+ func->deleteBody();
+
+ return res;
+}
Modified: vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JnjvmModuleProvider.cpp Thu Mar 5 02:14:15 2009
@@ -9,6 +9,7 @@
#include "llvm/LinkAllPasses.h"
#include "llvm/PassManager.h"
+#include "llvm/Module.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/Support/MutexGuard.h"
#include "llvm/Target/TargetData.h"
@@ -109,36 +110,6 @@
return false;
}
-void* JnjvmModuleProvider::materializeFunction(JavaMethod* meth) {
- Function* func = parseFunction(meth);
-
- void* res = mvm::MvmModule::executionEngine->getPointerToGlobal(func);
- func->deleteBody();
-
- return res;
-}
-
-Function* JnjvmModuleProvider::parseFunction(JavaMethod* meth) {
- JnjvmModule* M = (JnjvmModule*)TheModule;
- LLVMMethodInfo* LMI = M->getMethodInfo(meth);
- Function* func = LMI->getMethod();
- if (func->hasNotBeenReadFromBitcode()) {
- // We are jitting. Take the lock.
- M->protectIR();
- JavaJIT jit(meth, func);
- if (isNative(meth->access)) {
- jit.nativeCompile();
- mvm::MvmModule::runPasses(func, JavaNativeFunctionPasses);
- } else {
- jit.javaCompile();
- mvm::MvmModule::runPasses(func, M->globalFunctionPasses);
- mvm::MvmModule::runPasses(func, JavaFunctionPasses);
- }
- M->unprotectIR();
- }
- return func;
-}
-
llvm::Function* JnjvmModuleProvider::addCallback(Class* cl, uint32 index,
Signdef* sign, bool stat) {
@@ -189,17 +160,17 @@
m->protectEngine.unlock();
}
- JavaNativeFunctionPasses = new llvm::FunctionPassManager(this);
- JavaNativeFunctionPasses->add(new llvm::TargetData(TheModule));
+ m->JavaNativeFunctionPasses = new llvm::FunctionPassManager(this);
+ m->JavaNativeFunctionPasses->add(new llvm::TargetData(TheModule));
// Lower constant calls to lower things like getClass used
// on synchronized methods.
- JavaNativeFunctionPasses->add(createLowerConstantCallsPass());
+ m->JavaNativeFunctionPasses->add(createLowerConstantCallsPass());
- JavaFunctionPasses = new llvm::FunctionPassManager(this);
- JavaFunctionPasses->add(new llvm::TargetData(TheModule));
+ m->JavaFunctionPasses = new llvm::FunctionPassManager(this);
+ m->JavaFunctionPasses->add(new llvm::TargetData(TheModule));
Function* func = m->JavaObjectAllocateFunction;
- JavaFunctionPasses->add(mvm::createEscapeAnalysisPass(func));
- JavaFunctionPasses->add(createLowerConstantCallsPass());
+ m->JavaFunctionPasses->add(mvm::createEscapeAnalysisPass(func));
+ m->JavaFunctionPasses->add(createLowerConstantCallsPass());
nbCallbacks = 0;
}
@@ -210,8 +181,6 @@
mvm::MvmModule::protectEngine.unlock();
}
delete TheModule;
- delete JavaNativeFunctionPasses;
- delete JavaFunctionPasses;
}
void JnjvmModuleProvider::printStats() {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Thu Mar 5 02:14:15 2009
@@ -366,8 +366,7 @@
#endif
classDef->acquire();
if (code == 0) {
- code =
- classDef->classLoader->getModuleProvider()->materializeFunction(this);
+ code = classDef->classLoader->getModule()->materializeFunction(this);
Jnjvm* vm = JavaThread::get()->getJVM();
vm->addMethodInFunctionMap(this, code);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=66155&r1=66154&r2=66155&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Thu Mar 5 02:14:15 2009
@@ -1110,14 +1110,14 @@
for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
JavaMethod& meth = cl->virtualMethods[i];
if (!isAbstract(meth.access))
- cl->classLoader->getModuleProvider()->parseFunction(&meth);
+ cl->classLoader->getModule()->parseFunction(&meth);
if (Mod->generateStubs) meth.getSignature()->compileAllStubs();
}
for (uint32 i = 0; i < cl->nbStaticMethods; ++i) {
JavaMethod& meth = cl->staticMethods[i];
if (!isAbstract(meth.access))
- cl->classLoader->getModuleProvider()->parseFunction(&meth);
+ cl->classLoader->getModule()->parseFunction(&meth);
if (Mod->generateStubs) meth.getSignature()->compileAllStubs();
}
}
More information about the vmkit-commits
mailing list