[vmkit-commits] [vmkit] r117365 - in /vmkit/trunk: include/j3/J3Intrinsics.h lib/J3/Compiler/ExceptionsDwarf.inc lib/J3/Compiler/J3Intrinsics.cpp lib/J3/Compiler/JavaJIT.cpp lib/J3/Compiler/JavaJIT.h
Gael Thomas
gael.thomas at lip6.fr
Tue Oct 26 07:23:08 PDT 2010
Author: gthomas
Date: Tue Oct 26 09:23:08 2010
New Revision: 117365
URL: http://llvm.org/viewvc/llvm-project?rev=117365&view=rev
Log:
continue the unification
Modified:
vmkit/trunk/include/j3/J3Intrinsics.h
vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc
vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp
vmkit/trunk/lib/J3/Compiler/JavaJIT.h
Modified: vmkit/trunk/include/j3/J3Intrinsics.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/j3/J3Intrinsics.h?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/include/j3/J3Intrinsics.h (original)
+++ vmkit/trunk/include/j3/J3Intrinsics.h Tue Oct 26 09:23:08 2010
@@ -132,7 +132,8 @@
llvm::Constant* OffsetStatusInTaskClassMirrorConstant;
llvm::Constant* OffsetDoYieldInThreadConstant;
- llvm::Constant* OffsetIsolateInThreadConstant;
+ llvm::Constant* OffsetIsolateIDInThreadConstant;
+ llvm::Constant* OffsetVMInThreadConstant;
llvm::Constant* OffsetCXXExceptionInThreadConstant;
llvm::Constant* OffsetThreadInMutatorThreadConstant;
llvm::Constant* OffsetJNIInJavaThreadConstant;
Modified: vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc (original)
+++ vmkit/trunk/lib/J3/Compiler/ExceptionsDwarf.inc Tue Oct 26 09:23:08 2010
@@ -390,10 +390,7 @@
// catch the exception but resume unwinding.
JnjvmClassLoader* loader = compilingClass->classLoader;;
if (loader != loader->bootstrapLoader) {
- Value* threadId = getCurrentThread(module->MutatorThreadType);
- Value* Isolate = GetElementPtrInst::Create(threadId,
- module->constantFour, "",
- currentBlock);
+ Value* Isolate = genGetVMPtr(genGetMutatorThreadPtr());
Isolate = new LoadInst(Isolate, "", currentBlock);
Isolate = new BitCastInst(Isolate, module->ptrPtrType, "", currentBlock);
@@ -415,13 +412,9 @@
}
#endif
- Value* threadId = getCurrentThread(module->JavaThreadType);
- Value* geps[2] = { module->constantZero,
- module->OffsetJavaExceptionInJavaThreadConstant };
-
- Value* javaExceptionPtr = GetElementPtrInst::Create(threadId, geps,
- geps + 2, "",
- currentBlock);
+ Value* mutatorThreadId = genGetMutatorThreadPtr();
+ Value* javaThreadId = genGetJavaThreadPtr(mutatorThreadId);
+ Value* javaExceptionPtr = getGetJavaExceptionPtr(javaThreadId);
// Get the Java exception.
Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock);
@@ -467,21 +460,13 @@
currentBlock = cur->nativeHandler;
- threadId = getCurrentThread(module->JavaThreadType);
- javaExceptionPtr = GetElementPtrInst::Create(threadId, geps, geps + 2, "",
- currentBlock);
+ mutatorThreadId = genGetMutatorThreadPtr();
+ javaThreadId = genGetJavaThreadPtr(mutatorThreadId);
+ javaExceptionPtr = getGetJavaExceptionPtr(javaThreadId);
// Get the Java exception.
Value* exc = new LoadInst(javaExceptionPtr, "", currentBlock);
-
- Value* geps2[4] = { module->constantZero,
- module->constantZero,
- module->OffsetThreadInMutatorThreadConstant,
- module->OffsetCXXExceptionInThreadConstant };
-
- Value* cxxExceptionPtr = GetElementPtrInst::Create(threadId, geps2,
- geps2 + 4, "",
- currentBlock);
+ Value* cxxExceptionPtr = genGetCXXExceptionPtr(mutatorThreadId);
// Clear exceptions.
new StoreInst(module->constantPtrNull, cxxExceptionPtr, currentBlock);
@@ -517,7 +502,7 @@
// Change the isolate we are currently running, now that we have catched
// the exception: the exception may have been thrown by another isolate.
- Value* threadId = 0;
+ Value* mutatorThreadId = 0;
Value* OldIsolateID = 0;
Value* IsolateIDPtr = 0;
Value* OldIsolate = 0;
@@ -525,10 +510,10 @@
Value* IsolatePtr = 0;
currentBlock = cur->javaHandler;
if (loader != loader->bootstrapLoader) {
- threadId = getCurrentThread(module->MutatorThreadType);
+ mutatorThreadId = genGetMutatorThreadPtr();
- IsolateIDPtr = GetElementPtrInst::Create(threadId, module->constantThree,
- "", cur->javaHandler);
+ IsolateIDPtr = genGetIsolateIDPtr(mutatorThreadId);
+
const Type* realType = PointerType::getUnqual(module->pointerSizeType);
IsolateIDPtr = new BitCastInst(IsolateIDPtr, realType, "",
cur->javaHandler);
@@ -538,8 +523,7 @@
loader->getIsolate()->IsolateID);
new StoreInst(MyID, IsolateIDPtr, cur->javaHandler);
- IsolatePtr = GetElementPtrInst::Create(threadId, module->constantFour, "",
- cur->javaHandler);
+ IsolatePtr = genGetVMPtr(mutatorThreadId);
OldIsolate = new LoadInst(IsolatePtr, "", cur->javaHandler);
NewIsolate = module->getIsolate(loader->getIsolate(), currentBlock);
@@ -562,18 +546,9 @@
if (PI == PE) {
endExceptionBlock->eraseFromParent();
} else {
- Value* threadId = getCurrentThread(module->JavaThreadType);
- Value* geps2[4] = { module->constantZero,
- module->constantZero,
- module->OffsetThreadInMutatorThreadConstant,
- module->OffsetCXXExceptionInThreadConstant };
-
- Value* cxxExceptionPtr = GetElementPtrInst::Create(threadId, geps2,
- geps2 + 4, "",
- currentBlock);
- cxxExceptionPtr = new LoadInst(cxxExceptionPtr, "", currentBlock);
- llvm::CallInst::Create(module->unwindResume, cxxExceptionPtr, "",
- currentBlock);
+ Value* cxxExceptionPtr = genGetCXXExceptionPtr(genGetMutatorThreadPtr());
+ Value* cxxException = new LoadInst(cxxExceptionPtr, "", currentBlock);
+ llvm::CallInst::Create(module->unwindResume, cxxException, "", currentBlock);
new UnreachableInst(currentBlock);
}
Modified: vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/J3Intrinsics.cpp Tue Oct 26 09:23:08 2010
@@ -142,7 +142,8 @@
OffsetStatusInTaskClassMirrorConstant = constantZero;
OffsetInitializedInTaskClassMirrorConstant = constantOne;
- OffsetIsolateInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 1);
+ OffsetIsolateIDInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 1);
+ OffsetVMInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 2);
OffsetDoYieldInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 4);
OffsetCXXExceptionInThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 11);
OffsetThreadInMutatorThreadConstant = ConstantInt::get(Type::getInt32Ty(Context), 0);
Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp Tue Oct 26 09:23:08 2010
@@ -274,6 +274,69 @@
return threadId;
}
+llvm::Value* JavaJIT::genGetMutatorThreadPtr() {
+ Value* FrameAddr = CallInst::Create(intrinsics->llvm_frameaddress,
+ intrinsics->constantZero, "", currentBlock);
+ Value* threadId = new PtrToIntInst(FrameAddr, intrinsics->pointerSizeType, "",
+ currentBlock);
+ threadId = BinaryOperator::CreateAnd(threadId, intrinsics->constantThreadIDMask,
+ "", currentBlock);
+ threadId = new IntToPtrInst(threadId, intrinsics->MutatorThreadType, "", currentBlock);
+
+ return threadId;
+}
+
+llvm::Value* JavaJIT::genGetJavaThreadPtr(llvm::Value* mutatorThreadPtr) {
+ return new BitCastInst(mutatorThreadPtr, intrinsics->JavaThreadType, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetIsolateIDPtr(llvm::Value* mutatorThreadPtr) {
+ Value* GEP[3] = { intrinsics->constantZero,
+ intrinsics->OffsetThreadInMutatorThreadConstant,
+ intrinsics->OffsetIsolateIDInThreadConstant };
+
+ return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetVMPtr(llvm::Value* mutatorThreadPtr) {
+ Value* GEP[3] = { intrinsics->constantZero,
+ intrinsics->OffsetThreadInMutatorThreadConstant,
+ intrinsics->OffsetVMInThreadConstant };
+
+ return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetDoYieldPtr(llvm::Value* mutatorThreadPtr) {
+ Value* GEP[3] = { intrinsics->constantZero,
+ intrinsics->OffsetThreadInMutatorThreadConstant,
+ intrinsics->OffsetDoYieldInThreadConstant };
+
+ return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetCXXExceptionPtr(llvm::Value* mutatorThreadPtr) {
+ Value* GEP[3] = { intrinsics->constantZero,
+ intrinsics->OffsetThreadInMutatorThreadConstant,
+ intrinsics->OffsetCXXExceptionInThreadConstant };
+
+ return GetElementPtrInst::Create(mutatorThreadPtr, GEP, GEP + 3, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetJNIEnvPtr(llvm::Value* javaThreadPtr) {
+ Value* GEP[2] = { intrinsics->constantZero,
+ intrinsics->OffsetJNIInJavaThreadConstant };
+
+ return GetElementPtrInst::Create(javaThreadPtr, GEP, GEP + 2, "", currentBlock);
+}
+
+llvm::Value* JavaJIT::genGetJavaExceptionPtr(llvm::Value* javaThreadPtr) {
+ Value* GEP[2] = { intrinsics->constantZero,
+ intrinsics->OffsetJavaExceptionInJavaThreadConstant };
+
+ return GetElementPtrInst::Create(javaThreadPtr, GEP, GEP + 2, "", currentBlock);
+}
+
+
extern "C" void j3ThrowExceptionFromJIT();
llvm::Function* JavaJIT::nativeCompile(intptr_t natPtr) {
@@ -351,13 +414,7 @@
std::vector<Value*> nativeArgs;
- Value* threadId = getCurrentThread(intrinsics->JavaThreadType);
-
- Value* geps[2] = { intrinsics->constantZero,
- intrinsics->OffsetJNIInJavaThreadConstant };
-
- Value* jniEnv = GetElementPtrInst::Create(threadId, geps, geps + 2, "",
- currentBlock);
+ Value* jniEnv = genGetJNIEnvPtr(genGetJavaThreadPtr(genGetMutatorThreadPtr()));
jniEnv = new BitCastInst(jniEnv, intrinsics->ptrType, "", currentBlock);
@@ -1162,14 +1219,7 @@
}
if (TheCompiler->useCooperativeGC()) {
- Value* threadId = getCurrentThread(intrinsics->MutatorThreadType);
-
- Value* GEP[3] = { intrinsics->constantZero,
- intrinsics->OffsetThreadInMutatorThreadConstant,
- intrinsics->OffsetDoYieldInThreadConstant };
-
- Value* YieldPtr = GetElementPtrInst::Create(threadId, GEP, GEP + 3, "",
- currentBlock);
+ Value* YieldPtr = genGetDoYieldPtr(genGetMutatorThreadPtr());
Value* Yield = new LoadInst(YieldPtr, "", currentBlock);
Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.h?rev=117365&r1=117364&r2=117365&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJIT.h (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJIT.h Tue Oct 26 09:23:08 2010
@@ -154,6 +154,17 @@
/// getCurrentThread - Emit code to get the current thread.
llvm::Value* getCurrentThread(const llvm::Type* Ty);
+ llvm::Value* genGetMutatorThreadPtr();
+ llvm::Value* genGetIsolateIDPtr(llvm::Value* mutatorThreadPtr);
+ llvm::Value* genGetVMPtr(llvm::Value* mutatorThreadPtr);
+ llvm::Value* genGetDoYieldPtr(llvm::Value* mutatorThreadPtr);
+ llvm::Value* genGetCXXExceptionPtr(llvm::Value* mutatorThreadPtr);
+
+ llvm::Value* genGetJavaThreadPtr(llvm::Value* mutatorThreadPtr);
+ llvm::Value* genGetJNIEnvPtr(llvm::Value* javaThreadPtr);
+ llvm::Value* genGetJavaExceptionPtr(llvm::Value* javaThreadPtr);
+
+
//===------------------------- Debugging support --------------------------===//
llvm::MDNode* DbgSubprogram;
More information about the vmkit-commits
mailing list