[vmkit-commits] [vmkit] r198285 - I forgot to handle the case where a J3ObjectHandle is null in the caller gate
Gael Thomas
gael.thomas at lip6.fr
Wed Jan 1 13:52:59 PST 2014
Author: gthomas
Date: Wed Jan 1 15:52:59 2014
New Revision: 198285
URL: http://llvm.org/viewvc/llvm-project?rev=198285&view=rev
Log:
I forgot to handle the case where a J3ObjectHandle is null in the caller gate
Modified:
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198285&r1=198284&r2=198285&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Wed Jan 1 15:52:59 2014
@@ -387,7 +387,6 @@ jbyteArray JNICALL JVM_GetClassTypeAnnot
jobjectArray JNICALL JVM_GetClassDeclaredMethods(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) {
- NYI();
jobjectArray res;
enterJVM();
Modified: vmkit/branches/mcjit/lib/j3/vm/j3signature.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3signature.cc?rev=198285&r1=198284&r2=198285&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3signature.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3signature.cc Wed Jan 1 15:52:59 2014
@@ -34,10 +34,28 @@ void J3LLVMSignature::generateCallerIR(J
llvm::Type* t = *it;
llvm::Value* arg;
- if(t->isPointerTy())
- arg = builder.CreateLoad(builder.CreateGEP(builder.CreateIntToPtr(builder.CreateLoad(ins),
- codeGen->vm->typeJ3ObjectHandlePtr), gepHandle));
- else {
+ if(t->isPointerTy()) {
+ llvm::BasicBlock* ifnull = llvm::BasicBlock::Create(caller->getContext(), "if-arg-null", caller);
+ llvm::BasicBlock* ifnotnull = llvm::BasicBlock::Create(caller->getContext(), "if-arg-notnull", caller);
+ llvm::BasicBlock* after = llvm::BasicBlock::Create(caller->getContext(), "if-arg-after", caller);
+ llvm::Value* alloca = builder.CreateAlloca(codeGen->vm->typeJ3ObjectPtr);
+ llvm::Value* obj = builder.CreateLoad(ins);
+
+ builder.CreateCondBr(builder.CreateIsNull(obj), ifnull, ifnotnull);
+
+ builder.SetInsertPoint(ifnull);
+ builder.CreateStore(codeGen->nullValue, alloca);
+ builder.CreateBr(after);
+
+ builder.SetInsertPoint(ifnotnull);
+ builder.CreateStore(builder.CreateLoad(builder.CreateGEP(builder.CreateIntToPtr(obj,
+ codeGen->vm->typeJ3ObjectHandlePtr), gepHandle)),
+ alloca);
+ builder.CreateBr(after);
+
+ builder.SetInsertPoint(after);
+ arg = builder.CreateLoad(alloca);
+ } else {
arg = builder.CreateLoad(builder.CreateTruncOrBitCast(ins, t->getPointerTo()));
}
@@ -75,4 +93,6 @@ void J3LLVMSignature::generateCallerIR(J
res = builder.getInt64(0);
builder.CreateRet(res);
+
+ // caller->dump();
}
More information about the vmkit-commits
mailing list