[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