[vmkit-commits] [vmkit] r63520 - in /vmkit/trunk/lib/JnJVM: LLVMRuntime/runtime-default.ll VMCore/JavaJIT.cpp VMCore/JavaRuntimeJIT.cpp VMCore/JavaThread.cpp VMCore/JavaThread.h VMCore/JnjvmModule.cpp VMCore/JnjvmModule.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Feb 2 08:09:41 PST 2009
Author: geoffray
Date: Mon Feb 2 10:09:41 2009
New Revision: 63520
URL: http://llvm.org/viewvc/llvm-project?rev=63520&view=rev
Log:
Code cleanup: inline some exception functions in the LLVM code.
Modified:
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Mon Feb 2 10:09:41 2009
@@ -199,12 +199,7 @@
declare void @indexOutOfBoundsException(%JavaObject*, i32)
declare void @negativeArraySizeException(i32)
declare void @outOfMemoryError(i32)
-
-declare void @JavaThreadThrowException(%JavaObject*)
-declare void @JavaThreadClearException()
-declare i8* @JavaThreadGetException()
-declare %JavaObject* @JavaThreadGetJavaException()
-declare i1 @JavaThreadCompareException(%JavaClass*)
+declare void @JavaThreadThrowException(%JavaObject*)
declare void @jniProceedPendingException()
declare i8* @getSJLJBuffer()
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Mon Feb 2 10:09:41 2009
@@ -836,16 +836,23 @@
ReturnInst::Create(currentBlock);
}
+ currentBlock = endExceptionBlock;
PI = pred_begin(endExceptionBlock);
PE = pred_end(endExceptionBlock);
if (PI == PE) {
endExceptionBlock->eraseFromParent();
} else {
- CallInst* ptr_eh_ptr = CallInst::Create(module->GetExceptionFunction,
- "eh_ptr", endExceptionBlock);
- llvm::CallInst::Create(module->unwindResume, ptr_eh_ptr, "",
- endExceptionBlock);
- new UnreachableInst(endExceptionBlock);
+ Value* threadId = getCurrentThread();
+ Value* geps2[2] = { module->constantZero,
+ module->OffsetCXXExceptionInThreadConstant };
+
+ Value* cxxExceptionPtr = GetElementPtrInst::Create(threadId, geps2,
+ geps2 + 2, "",
+ currentBlock);
+ cxxExceptionPtr = new LoadInst(cxxExceptionPtr, "", currentBlock);
+ llvm::CallInst::Create(module->unwindResume, cxxExceptionPtr, "",
+ currentBlock);
+ new UnreachableInst(currentBlock);
}
PI = pred_begin(unifiedUnreachable);
@@ -1133,20 +1140,7 @@
cur->exceptionPHI->addIncoming(ptr_eh_ptr, cur->catcher);
}
- // We now implement the tester of the handler.
- Value* cl = 0;
currentBlock = cur->tester;
-#ifdef ISOLATE_SHARING
- // We're dealing with exceptions, don't catch the exception if the class can
- // not be found.
- if (cur->catche) cl = getResolvedClass(cur->catche, false, false, 0);
- else cl = CallInst::Create(module->GetJnjvmExceptionClassFunction,
- isolateLocal, "", currentBlock);
-#else
- // We know catchClass exists because we have loaded all exceptions catched
- // by the method when we loaded the class that defined this method.
- cl = module->getNativeClass(cur->catchClass);
-#endif
#ifdef SERVICE
// Verifies that the current isolate is not stopped. If it is, we don't
@@ -1178,10 +1172,28 @@
}
#endif
- // Compare the exception with the exception class we catch.
- Value* cmp = CallInst::Create(module->CompareExceptionFunction, cl, "",
- currentBlock);
+ Value* threadId = getCurrentThread();
+ Value* geps[2] = { module->constantZero,
+ module->OffsetJavaExceptionInThreadConstant };
+
+ Value* javaExceptionPtr = GetElementPtrInst::Create(threadId, geps,
+ geps + 2, "",
+ currentBlock);
+
+ // Get the Java exception.
+ Value* obj = new LoadInst(javaExceptionPtr, "", currentBlock);
+
+ Value* objCl = CallInst::Create(module->GetClassFunction, obj, "",
+ currentBlock);
+
+ Value* depthCl = ConstantInt::get(Type::Int32Ty, cur->catchClass->depth);
+ Value* depthClObj = CallInst::Create(module->GetDepthFunction, objCl, "",
+ currentBlock);
+ // Compare the exception with the exception class we catch.
+ Value* cmp = new ICmpInst(ICmpInst::ICMP_ULE, depthCl, depthClObj, "",
+ currentBlock);
+
// If we are catching this exception, then jump to the nativeHandler,
// otherwise jump to our next handler.
BranchInst::Create(cur->nativeHandler, bbNext, cmp, currentBlock);
@@ -1190,11 +1202,27 @@
// just catched.
if (nodeNext)
nodeNext->addIncoming(cur->exceptionPHI, currentBlock);
-
- // Get the Java exception and clear it from the execution context.
- Value* exc = CallInst::Create(module->GetJavaExceptionFunction,
- "", cur->nativeHandler);
- CallInst::Create(module->ClearExceptionFunction, "", cur->nativeHandler);
+
+ currentBlock = cur->nativeHandler;
+
+ threadId = getCurrentThread();
+ javaExceptionPtr = GetElementPtrInst::Create(threadId, geps, geps + 2, "",
+ currentBlock);
+
+ // Get the Java exception.
+ Value* exc = new LoadInst(javaExceptionPtr, "", currentBlock);
+
+ Value* geps2[2] = { module->constantZero,
+ module->OffsetCXXExceptionInThreadConstant };
+
+ Value* cxxExceptionPtr = GetElementPtrInst::Create(threadId, geps2,
+ geps2 + 2, "",
+ currentBlock);
+
+ // Clear exceptions.
+ new StoreInst(module->constantPtrNull, cxxExceptionPtr, currentBlock);
+ new StoreInst(module->JavaObjectNullConstant, javaExceptionPtr,
+ currentBlock);
// Call the CXX begin and end catcher.
CallInst::Create(module->exceptionBeginCatch, cur->exceptionPHI,
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Mon Feb 2 10:09:41 2009
@@ -390,32 +390,12 @@
return cl1->isAssignableFrom(cl2);
}
-// Never throws.
-extern "C" void* JavaThreadGetException() {
- return JavaThread::get()->getException();
-}
-
-// Never throws.
-extern "C" JavaObject* JavaThreadGetJavaException() {
- return JavaThread::get()->getJavaException();
-}
-
// Does not call any Java code.
extern "C" void JavaThreadThrowException(JavaObject* obj) {
return JavaThread::get()->throwException(obj);
}
// Never throws.
-extern "C" bool JavaThreadCompareException(UserClass* cl) {
- return JavaThread::get()->compareException(cl);
-}
-
-// Never throws.
-extern "C" void JavaThreadClearException() {
- return JavaThread::get()->clearException();
-}
-
-// Never throws.
extern "C" void overflowThinLock(JavaObject* obj) {
obj->overflowThinLock();
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Mon Feb 2 10:09:41 2009
@@ -59,7 +59,8 @@
assert(th->pendingException == 0 && "pending exception already there?");
th->pendingException = obj;
void* exc = __cxa_allocate_exception(0);
- th->internalPendingException = exc;
+ // 32 = sizeof(_Unwind_Exception) in libgcc...
+ th->internalPendingException = (void*)((uintptr_t)exc - 32);
__cxa_throw(exc, 0, 0);
}
@@ -67,7 +68,7 @@
JavaThread* th = JavaThread::get();
assert(th->pendingException);
void* exc = __cxa_allocate_exception(0);
- th->internalPendingException = exc;
+ th->internalPendingException = (void*)((uintptr_t)exc - 32);
__cxa_throw(exc, 0, 0);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Mon Feb 2 10:09:41 2009
@@ -154,14 +154,6 @@
return 0;
}
- /// getException - Return the C++ specific exception object.
- ///
- void* getException() {
- // 32 = sizeof(_Unwind_Exception) in libgcc...
- return (void*)
- ((uintptr_t)JavaThread::get()->internalPendingException - 32);
- }
-
/// throwException - Throw the given exception in the current thread.
///
void throwException(JavaObject* obj);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Mon Feb 2 10:09:41 2009
@@ -92,6 +92,8 @@
llvm::ConstantInt* JnjvmModule::OffsetTaskClassMirrorInClassConstant;
llvm::ConstantInt* JnjvmModule::OffsetStaticInstanceInTaskClassMirrorConstant;
llvm::ConstantInt* JnjvmModule::OffsetStatusInTaskClassMirrorConstant;
+llvm::ConstantInt* JnjvmModule::OffsetJavaExceptionInThreadConstant;
+llvm::ConstantInt* JnjvmModule::OffsetCXXExceptionInThreadConstant;
llvm::ConstantInt* JnjvmModule::ClassReadyConstant;
const llvm::Type* JnjvmModule::JavaClassType;
const llvm::Type* JnjvmModule::JavaClassPrimitiveType;
@@ -2020,6 +2022,9 @@
OffsetStaticInstanceInTaskClassMirrorConstant = mvm::MvmModule::constantOne;
OffsetStatusInTaskClassMirrorConstant = mvm::MvmModule::constantZero;
+ OffsetJavaExceptionInThreadConstant = ConstantInt::get(Type::Int32Ty, 9);
+ OffsetCXXExceptionInThreadConstant = ConstantInt::get(Type::Int32Ty, 10);
+
ClassReadyConstant = ConstantInt::get(Type::Int32Ty, ready);
@@ -2179,9 +2184,6 @@
VirtualFieldLookupFunction = module->getFunction("virtualFieldLookup");
StaticFieldLookupFunction = module->getFunction("staticFieldLookup");
- GetExceptionFunction = module->getFunction("JavaThreadGetException");
- GetJavaExceptionFunction = module->getFunction("JavaThreadGetJavaException");
- CompareExceptionFunction = module->getFunction("JavaThreadCompareException");
JniProceedPendingExceptionFunction =
module->getFunction("jniProceedPendingException");
GetSJLJBufferFunction = module->getFunction("getSJLJBuffer");
@@ -2203,8 +2205,6 @@
ThrowExceptionFunction = module->getFunction("JavaThreadThrowException");
- ClearExceptionFunction = module->getFunction("JavaThreadClearException");
-
GetArrayClassFunction = module->getFunction("getArrayClass");
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=63520&r1=63519&r2=63520&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Mon Feb 2 10:09:41 2009
@@ -367,17 +367,16 @@
static llvm::ConstantInt* OffsetStaticInstanceInTaskClassMirrorConstant;
static llvm::ConstantInt* OffsetStatusInTaskClassMirrorConstant;
+ static llvm::ConstantInt* OffsetJavaExceptionInThreadConstant;
+ static llvm::ConstantInt* OffsetCXXExceptionInThreadConstant;
+
static llvm::ConstantInt* ClassReadyConstant;
static llvm::Constant* JavaObjectNullConstant;
static llvm::Constant* MaxArraySizeConstant;
static llvm::Constant* JavaArraySizeConstant;
- llvm::Function* GetExceptionFunction;
- llvm::Function* GetJavaExceptionFunction;
llvm::Function* ThrowExceptionFunction;
- llvm::Function* ClearExceptionFunction;
- llvm::Function* CompareExceptionFunction;
llvm::Function* NullPointerExceptionFunction;
llvm::Function* IndexOutOfBoundsExceptionFunction;
llvm::Function* ClassCastExceptionFunction;
More information about the vmkit-commits
mailing list