[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