[vmkit-commits] [vmkit] r198298 - better spli block

Gael Thomas gael.thomas at lip6.fr
Thu Jan 2 03:47:11 PST 2014


Author: gthomas
Date: Thu Jan  2 05:47:11 2014
New Revision: 198298

URL: http://llvm.org/viewvc/llvm-project?rev=198298&view=rev
Log:
better spli block

Modified:
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc

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=198298&r1=198297&r2=198298&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Thu Jan  2 05:47:11 2014
@@ -363,10 +363,11 @@ llvm::Value* J3CodeGen::nullCheck(llvm::
 		llvm::BasicBlock* succeed = newBB("nullcheck-succeed");
 
 		if(!bbNullCheckFailed) {
+			llvm::BasicBlock* prev = builder->GetInsertBlock();
 			bbNullCheckFailed = newBB("nullcheck-failed");
 			builder->SetInsertPoint(bbNullCheckFailed);
 			builder->CreateInvoke(funcNullPointerException, bbRet, exceptions.nodes[curExceptionNode]->landingPad);
-			builder->SetInsertPoint(bb);
+			builder->SetInsertPoint(prev);
 		}
 
 		builder->CreateCondBr(builder->CreateIsNotNull(obj), succeed, bbNullCheckFailed);
@@ -729,12 +730,27 @@ llvm::BasicBlock* J3CodeGen::forwardBran
 		//fprintf(stderr, "--- instruction ---\n");
 		//insn->dump();
 		llvm::BasicBlock* before = insn->getParent();
-		//fprintf(stderr, "--- basic block ---\n");
+		llvm::BranchInst* fakeTerminator = 0;
+		bool isSelf = builder->GetInsertBlock() == before;
+
+		//fprintf(stderr, "--- before split ---\n");
 		//before->dump();
+		if(!before->getTerminator())
+			fakeTerminator = llvm::BranchInst::Create(bbRet, before);
+
 		llvm::BasicBlock* after = before->splitBasicBlock(insn);
+
+		if(fakeTerminator)
+			fakeTerminator->eraseFromParent();
+
+		if(isSelf) {
+			bb = after;
+			builder->SetInsertPoint(after);
+		}
 		//fprintf(stderr, "--- after split ---\n");
 		//before->dump();
 		//after->dump();
+
 		opInfos[pc].bb = after;
 		return after;
 	} else {
@@ -1571,9 +1587,11 @@ void J3CodeGen::generateJava() {
 	stack.init(this, maxStack, allocator->allocate(J3CodeGenVar::reservedSize(maxStack)));
 	ret.init(this, 1, allocator->allocate(J3CodeGenVar::reservedSize(1)));
 
-	uint32_t n=0;
+	uint32_t n=0, pos=0;
 	for(llvm::Function::arg_iterator cur=llvmFunction->arg_begin(); cur!=llvmFunction->arg_end(); cur++, n++) {
-		locals.setAt(flatten(cur, methodType->ins(n)), n);
+		J3Type* type = methodType->ins(n);
+		locals.setAt(flatten(cur, type), pos);
+		pos += (type == vm->typeLong || type == vm->typeDouble) ? 2 : 1;
 	}
 
 	//builder->CreateCall(ziTry);





More information about the vmkit-commits mailing list