[vmkit-commits] [vmkit] r63399 - in /vmkit/trunk/lib/JnJVM: LLVMRuntime/runtime-default.ll VMCore/JavaJIT.cpp VMCore/JnjvmModule.cpp VMCore/JnjvmModule.h VMCore/LowerConstantCalls.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Fri Jan 30 10:03:28 PST 2009
Author: geoffray
Date: Fri Jan 30 12:03:28 2009
New Revision: 63399
URL: http://llvm.org/viewvc/llvm-project?rev=63399&view=rev
Log:
We don't want to call Java methods when materializing a function because
of the call trace. Therefore make sure the class is loaded before calling
an invokeSpecial.
Modified:
vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll
vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
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=63399&r1=63398&r2=63399&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-default.ll Fri Jan 30 12:03:28 2009
@@ -122,6 +122,12 @@
;;; implementation.
declare void @forceInitialisationCheck(%JavaClass*)
+;;; forceLoadedCheck - Force to check if the class was loaded. Since we do
+;;; not want to run Java code in a callback, we have to make sure the class
+;;; of the method that we want to compile is loaded. This is used for
+;;; the invokespecial bytecode.
+declare void @forceLoadedCheck(%JavaCommonClass*)
+
;;; getConstantPoolAt - Get the value in the constant pool of this class.
;;; This function is removed by Jnjvm after the GVn pass, therefore it does
;;; not have an actual implementation.
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=63399&r1=63398&r2=63399&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Fri Jan 30 12:03:28 2009
@@ -1585,6 +1585,16 @@
(Function*)ctpInfo->infoOfStaticOrSpecialMethod(index, ACC_VIRTUAL,
signature, meth);
+ if (!meth) {
+ // Make sure the class is loaded before materializing the method.
+ uint32 clIndex = ctpInfo->getClassIndexFromMethod(index);
+ UserCommonClass* cl = 0;
+ Value* Cl = getResolvedCommonClass(clIndex, false, &cl);
+ if (!cl) {
+ CallInst::Create(module->ForceLoadedCheckFunction, Cl, "", currentBlock);
+ }
+ }
+
if (meth && canBeInlined(meth)) {
val = invokeInline(meth, args);
} else {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=63399&r1=63398&r2=63399&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Fri Jan 30 12:03:28 2009
@@ -2147,6 +2147,7 @@
InterfaceLookupFunction = module->getFunction("jnjvmVirtualLookup");
MultiCallNewFunction = module->getFunction("multiCallNew");
+ ForceLoadedCheckFunction = module->getFunction("forceLoadedCheck");
InitialisationCheckFunction = module->getFunction("initialisationCheck");
ForceInitialisationCheckFunction =
module->getFunction("forceInitialisationCheck");
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=63399&r1=63398&r2=63399&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Fri Jan 30 12:03:28 2009
@@ -310,6 +310,7 @@
llvm::Function* InitialiseClassFunction;
llvm::Function* InitialisationCheckFunction;
llvm::Function* ForceInitialisationCheckFunction;
+ llvm::Function* ForceLoadedCheckFunction;
llvm::Function* ClassLookupFunction;
#ifndef WITHOUT_VTABLE
llvm::Function* VirtualLookupFunction;
Modified: vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp?rev=63399&r1=63398&r2=63399&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LowerConstantCalls.cpp Fri Jan 30 12:03:28 2009
@@ -459,7 +459,8 @@
BranchInst::Create(NBB, OKBlock);
break;
}
- } else if (V == module->ForceInitialisationCheckFunction) {
+ } else if (V == module->ForceInitialisationCheckFunction ||
+ V == module->ForceLoadedCheckFunction ) {
Changed = true;
CI->eraseFromParent();
}
More information about the vmkit-commits
mailing list