[vmkit-commits] [vmkit] r54916 - in /vmkit/trunk/lib/JnJVM: Classpath/ClasspathVMClassLoader.cpp.inc VMCore/JavaClass.cpp VMCore/JavaJIT.cpp VMCore/Jnjvm.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModuleProvider.cpp VMCore/LowerConstantCalls.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Aug 18 03:55:46 PDT 2008
Author: geoffray
Date: Mon Aug 18 05:55:46 2008
New Revision: 54916
URL: http://llvm.org/viewvc/llvm-project?rev=54916&view=rev
Log:
Compilation and bugfixes for a multi-vm environment.
Removing the ForceInitializationCheck function call in LLVM IR
is done by a separate pass and should be the last pass to run
on the IR.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp.inc Mon Aug 18 05:55:46 2008
@@ -102,7 +102,7 @@
#ifndef MULTIPLE_VM
cl->delegatee = (JavaObject*)pd;
#else
- vm->delegatees->hash(cl, (JavaObject*)pd);
+ JavaThread::get()->isolate->delegatees->hash(cl, (JavaObject*)pd);
#endif
}
cl->release();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Mon Aug 18 05:55:46 2008
@@ -545,9 +545,10 @@
}
void Class::createStaticInstance() {
+ JavaAllocator* allocator = &(JavaThread::get()->isolate->allocator);
JavaObject* val =
- (JavaObject*)JavaThread::get()->isolate->allocateObject(staticSize,
- staticVT);
+ (JavaObject*)allocator->allocateObject(staticSize, staticVT);
+
val->initialise(this);
for (field_iterator i = this->staticFields.begin(),
e = this->staticFields.end(); i!= e; ++i) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon Aug 18 05:55:46 2008
@@ -1559,14 +1559,17 @@
uint32 clIndex = ctpInfo->getClassIndexFromMethod(index);
Class* mycl = (Class*)(ctpInfo->getMethodClassIfLoaded(clIndex));
- if (mycl && mycl->status >= resolved) {
+ Value* arg = 0;
+ if (mycl && mycl->isResolved()) {
LLVMCommonClassInfo* LCI = module->getClassInfo(mycl);
- Value* arg = LCI->getVar(this);
+ arg = LCI->getVar(this);
arg = invoke(JnjvmModule::InitialisationCheckFunction, arg, "",
currentBlock);
- CallInst::Create(JnjvmModule::ForceInitialisationCheckFunction, arg, "",
- currentBlock);
+ } else {
+ arg = getResolvedClass(clIndex, true);
}
+ CallInst::Create(JnjvmModule::ForceInitialisationCheckFunction, arg, "",
+ currentBlock);
#endif
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Mon Aug 18 05:55:46 2008
@@ -674,6 +674,7 @@
LOAD_CLASS(Classpath::newMethod);
LOAD_CLASS(Classpath::newField);
LOAD_CLASS(Classpath::newStackTraceElement);
+ LOAD_CLASS(Classpath::newVMThrowable);
LOAD_CLASS(ClasspathException::InvocationTargetException);
LOAD_CLASS(ClasspathException::ArrayStoreException);
LOAD_CLASS(ClasspathException::ClassCastException);
@@ -815,7 +816,7 @@
isolate->classpath = ".";
}
- isolate->bootstrapThread = gc_new(JavaThread)();
+ isolate->bootstrapThread = allocator_new(&isolate->allocator, JavaThread)();
isolate->bootstrapThread->initialise(0, isolate);
void* baseSP = mvm::Thread::get()->baseSP;
isolate->bootstrapThread->threadID = (mvm::Thread::self() << 8) & 0x7FFFFF00;
@@ -836,8 +837,8 @@
isolate->hashStr = new StringMap();
isolate->globalRefsLock = mvm::Lock::allocNormal();
#ifdef MULTIPLE_VM
- isolate->statics = vm_new(isolate, StaticInstanceMap)();
- isolate->delegatees = vm_new(isolate, DelegateeMap)();
+ isolate->statics = allocator_new(&isolate->allocator, StaticInstanceMap)();
+ isolate->delegatees = allocator_new(&isolate->allocator, DelegateeMap)();
#endif
return isolate;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon Aug 18 05:55:46 2008
@@ -131,10 +131,10 @@
Value* LLVMCommonClassInfo::getVar(JavaJIT* jit) {
if (!varGV) {
#ifdef MULTIPLE_VM
- if (jit->compilingClass->isolate->TheModule == Jnjvm::bootstrapVM->TheModule &&
- classDef->isArray && classDef->isolate != Jnjvm::bootstrapVM) {
+ if (jit->compilingClass->classLoader->TheModule == JnjvmClassLoader::bootstrapLoader->TheModule &&
+ classDef->isArray && classDef->classLoader != JnjvmClassLoader::bootstrapLoader) {
// We know the array class can belong to bootstrap
- CommonClass* cl = Jnjvm::bootstrapVM->constructArray(classDef->name, 0);
+ CommonClass* cl = JnjvmClassLoader::bootstrapLoader->constructArray(classDef->name);
return cl->classLoader->TheModule->getClassInfo(cl)->getVar(jit);
}
#endif
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModuleProvider.cpp Mon Aug 18 05:55:46 2008
@@ -181,6 +181,7 @@
namespace mvm {
llvm::FunctionPass* createEscapeAnalysisPass(llvm::Function*);
llvm::FunctionPass* createLowerConstantCallsPass();
+ llvm::FunctionPass* createLowerForcedCallsPass();
}
static void addPass(FunctionPassManager *PM, Pass *P) {
@@ -228,8 +229,6 @@
addPass(PM, mvm::createEscapeAnalysisPass(JnjvmModule::JavaObjectAllocateFunction));
addPass(PM, mvm::createLowerConstantCallsPass());
- addPass(PM, createGVNPass()); // Remove redundancies
-
// Run instcombine after redundancy elimination to exploit opportunities
// opened up by them.
addPass(PM, createInstructionCombiningPass());
@@ -239,6 +238,8 @@
addPass(PM, createAggressiveDCEPass()); // Delete dead instructions
addPass(PM, createCFGSimplificationPass()); // Merge & remove BBs
+ addPass(PM, mvm::createLowerForcedCallsPass());
+
}
JnjvmModuleProvider::JnjvmModuleProvider(JnjvmModule *m) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=54916&r1=54915&r2=54916&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Mon Aug 18 05:55:46 2008
@@ -102,9 +102,6 @@
Value* Size = new LoadInst(SizePtr, "", CI);
CI->replaceAllUsesWith(Size);
CI->eraseFromParent();
- } else if (V == jnjvm::JnjvmModule::ForceInitialisationCheckFunction) {
- Changed = true;
- CI->eraseFromParent();
} else if (V == jnjvm::JnjvmModule::GetDepthFunction) {
Changed = true;
Value* val = CI->getOperand(1);
@@ -253,4 +250,40 @@
FunctionPass* createLowerConstantCallsPass() {
return new LowerConstantCalls();
}
+
+class VISIBILITY_HIDDEN LowerForcedCalls : public FunctionPass {
+ public:
+ static char ID;
+ LowerForcedCalls() : FunctionPass((intptr_t)&ID) { }
+
+ virtual bool runOnFunction(Function &F);
+ private:
+ };
+ char LowerForcedCalls::ID = 0;
+ static RegisterPass<LowerForcedCalls> Y("LowerForcedCalls",
+ "Lower Forced calls");
+
+bool LowerForcedCalls::runOnFunction(Function& F) {
+ bool Changed = false;
+ for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; BI++) {
+ BasicBlock *Cur = BI;
+ for (BasicBlock::iterator II = Cur->begin(), IE = Cur->end(); II != IE;) {
+ Instruction *I = II;
+ II++;
+ if (CallInst *CI = dyn_cast<CallInst>(I)) {
+ Value* V = CI->getOperand(0);
+ if (V == jnjvm::JnjvmModule::ForceInitialisationCheckFunction) {
+ Changed = true;
+ CI->eraseFromParent();
+ }
+ }
+ }
+ }
+ return Changed;
+}
+
+FunctionPass* createLowerForcedCallsPass() {
+ return new LowerForcedCalls();
+}
+
}
More information about the vmkit-commits
mailing list