[vmkit-commits] [vmkit] r199745 - Inline isassignable to functions.
Gael Thomas
gael.thomas at lip6.fr
Tue Jan 21 06:29:22 PST 2014
Author: gthomas
Date: Tue Jan 21 08:29:21 2014
New Revision: 199745
URL: http://llvm.org/viewvc/llvm-project?rev=199745&view=rev
Log:
Inline isassignable to functions.
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/include/j3/j3meta.def
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=199745&r1=199744&r2=199745&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Tue Jan 21 08:29:21 2014
@@ -132,7 +132,8 @@ namespace j3 {
void monitorEnter(llvm::Value* obj);
void monitorExit(llvm::Value* obj);
- llvm::Value* isAssignableTo(llvm::Value* obj, J3ObjectType* type);
+ llvm::CallInst* isAssignableTo(llvm::Value* obj, J3ObjectType* type);
+ void inlineCall(llvm::CallInst* call);
void instanceof(llvm::Value* obj, J3ObjectType* type);
void checkCast(llvm::Value* obj, J3ObjectType* type);
Modified: vmkit/branches/mcjit/include/j3/j3meta.def
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3meta.def?rev=199745&r1=199744&r2=199745&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3meta.def (original)
+++ vmkit/branches/mcjit/include/j3/j3meta.def Tue Jan 21 08:29:21 2014
@@ -17,8 +17,8 @@ _x(funcJ3ThreadRestore, "j3:
_x(funcEchoDebugEnter, "j3::J3CodeGen::echoDebugEnter(unsigned int, char const*, ...)", 1)
_x(funcEchoDebugExecute, "j3::J3CodeGen::echoDebugExecute(unsigned int, char const*, ...)", 1)
_x(funcEchoElement, "j3::J3CodeGen::echoElement(unsigned int, unsigned int, unsigned long)", 1)
-_x(funcFastIsAssignableToPrimaryChecker, "j3::J3VirtualTable::fastIsAssignableToPrimaryChecker(j3::J3VirtualTable*, unsigned int)", 1)
-_x(funcFastIsAssignableToNonPrimaryChecker, "j3::J3VirtualTable::fastIsAssignableToNonPrimaryChecker(j3::J3VirtualTable*)", 1)
+_x(funcFastIsAssignableToPrimaryChecker, "j3::J3VirtualTable::fastIsAssignableToPrimaryChecker(j3::J3VirtualTable*, unsigned int)", 0)
+_x(funcFastIsAssignableToNonPrimaryChecker, "j3::J3VirtualTable::fastIsAssignableToNonPrimaryChecker(j3::J3VirtualTable*)", 0)
_x(funcGXXPersonality, "__gxx_personality_v0", 1)
_x(funcCXABeginCatch, "__cxa_begin_catch", 1)
_x(funcCXAEndCatch, "__cxa_end_catch", 1)
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=199745&r1=199744&r2=199745&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Tue Jan 21 08:29:21 2014
@@ -608,41 +608,24 @@ void J3CodeGen::newObject(J3Class* cl) {
stack.push(res);
}
-llvm::Value* J3CodeGen::isAssignableTo(llvm::Value* obj, J3ObjectType* type) {
+llvm::CallInst* J3CodeGen::isAssignableTo(llvm::Value* obj, J3ObjectType* type) {
llvm::Value* vtType = vt(type); /* force the resolution of type */
llvm::Value* vtObj = vt(obj);
- llvm::CallInst* res;
-
-#if 0
- llvm::Function* pc = vm->introspectFunction(0, "j3::J3VirtualTable::fastIsAssignableToPrimaryChecker(j3::J3VirtualTable*, unsigned int)");
- llvm::Function* npc = vm->introspectFunction(0, "j3::J3VirtualTable::fastIsAssignableToNonPrimaryChecker(j3::J3VirtualTable*)");
-#endif
if(type->vt()->isPrimaryChecker())
- res = builder.CreateCall3(funcFastIsAssignableToPrimaryChecker,
- vtObj,
- vtType,
- builder.getInt32(type->vt()->offset()));
+ return builder.CreateCall3(funcFastIsAssignableToPrimaryChecker,
+ vtObj,
+ vtType,
+ builder.getInt32(type->vt()->offset()));
else
- res = builder.CreateCall2(funcFastIsAssignableToNonPrimaryChecker,
- vtObj,
- vtType);
-
-#if 0
- llvmFunction->dump();
- fprintf(stderr, " *** \n");
+ return builder.CreateCall2(funcFastIsAssignableToNonPrimaryChecker,
+ vtObj,
+ vtType);
+}
+void J3CodeGen::inlineCall(llvm::CallInst* call) {
llvm::InlineFunctionInfo ifi;
- llvm::InlineFunction(res, ifi);
-
- llvmFunction->dump();
- fprintf(stderr, " ----- \n");
- //res->dump();
-
- J3::internalError("implement me");
-#endif
-
- return res;
+ llvm::InlineFunction(call, ifi, 0);
}
void J3CodeGen::instanceof(llvm::Value* obj, J3ObjectType* type) {
@@ -658,8 +641,10 @@ void J3CodeGen::instanceof(llvm::Value*
stack.drop(1);
builder.SetInsertPoint(test);
- stack.push(builder.CreateZExt(isAssignableTo(obj, type), builder.getInt32Ty()));
+ llvm::CallInst* is = isAssignableTo(obj, type);
+ stack.push(builder.CreateZExt(is, builder.getInt32Ty()));
builder.CreateBr(after);
+ inlineCall(is);
}
void J3CodeGen::checkCast(llvm::Value* obj, J3ObjectType* type) {
@@ -678,9 +663,9 @@ void J3CodeGen::checkCast(llvm::Value* o
builder.SetInsertPoint(test);
- llvm::Value* res = isAssignableTo(obj, type);
-
- builder.CreateCondBr(res, succeed, bbCheckCastFailed);
+ llvm::CallInst* is = isAssignableTo(obj, type);
+ builder.CreateCondBr(is, succeed, bbCheckCastFailed);
+ inlineCall(is);
}
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc?rev=199745&r1=199744&r2=199745&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegenexception.cc Tue Jan 21 08:29:21 2014
@@ -56,10 +56,10 @@ void J3ExceptionNode::addEntry(J3CodeGen
if(entry->catchType) {
codeGen->stack.metaStack[0] = codeGen->vm->typeJ3ObjectPtr;
codeGen->stack.topStack = 1;
- codeGen->builder.CreateCondBr(codeGen->isAssignableTo(codeGen->stack.top(0),
- codeGen->cl->classAt(entry->catchType)),
- entry->bb,
- curCheck);
+ llvm::CallInst* is = codeGen->isAssignableTo(codeGen->stack.top(0),
+ codeGen->cl->classAt(entry->catchType));
+ codeGen->builder.CreateCondBr(is, entry->bb, curCheck);
+ codeGen->inlineCall(is);
} else {
codeGen->builder.CreateBr(entry->bb);
curCheck = 0;
More information about the vmkit-commits
mailing list