[vmkit-commits] [vmkit] r196291 - create the llvmFunction and its module in J3Method::fnPtr.
Gael Thomas
gael.thomas at lip6.fr
Tue Dec 3 08:02:44 PST 2013
Author: gthomas
Date: Tue Dec 3 10:02:44 2013
New Revision: 196291
URL: http://llvm.org/viewvc/llvm-project?rev=196291&view=rev
Log:
create the llvmFunction and its module in J3Method::fnPtr.
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=196291&r1=196290&r2=196291&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Tue Dec 3 10:02:44 2013
@@ -60,7 +60,7 @@ namespace j3 {
llvm::Module* module;
llvm::BasicBlock* bb;
llvm::IRBuilder<>* builder;
- llvm::Function* _llvmFunction;
+ llvm::Function* llvmFunction;
J3* vm;
J3Class* cl;
@@ -193,16 +193,13 @@ namespace j3 {
llvm::Function* ziTry;
llvm::GlobalValue* gvTypeInfo; /* typename void* */
- J3CodeGen(vmkit::BumpAllocator* _allocator, J3Method* method);
+ J3CodeGen(vmkit::BumpAllocator* _allocator, J3Method* method, llvm::Function* _llvmFunction);
~J3CodeGen();
void* operator new(size_t n, vmkit::BumpAllocator* _allocator);
void operator delete(void* ptr);
public:
- static J3CodeGen* create(J3Method* method);
- static void destroy(J3CodeGen* codeGen);
-
- llvm::Function* llvmFunction() { return _llvmFunction; }
+ static void translate(J3Method* method, llvm::Function* llvmFunction);
};
}
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=196291&r1=196290&r2=196291&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Tue Dec 3 10:02:44 2013
@@ -34,18 +34,18 @@ void J3ExceptionEntry::dump() {
fprintf(stderr, " catchType: %u\n", catchType);
}
-J3CodeGen::J3CodeGen(vmkit::BumpAllocator* _allocator, J3Method* m) {
+J3CodeGen::J3CodeGen(vmkit::BumpAllocator* _allocator, J3Method* m, llvm::Function* _llvmFunction) {
allocator = _allocator;
method = m;
cl = method->cl();
methodType = method->methodType();
loader = cl->loader();
- module = loader->module();
vm = loader->vm();
- _llvmFunction = method->llvmFunction(0, module);
- llvmFunction()->setGC("vmkit");
+ llvmFunction = _llvmFunction;
+ llvmFunction->setGC("vmkit");
+ module = llvmFunction->getParent();
bbCheckCastFailed = 0;
bbNullCheckFailed = 0;
@@ -92,7 +92,7 @@ J3CodeGen::J3CodeGen(vmkit::BumpAllocato
(llvm::Function*)module->getOrInsertFunction("vmkit.try",
llvm::FunctionType::get(llvm::Type::getVoidTy(module->getContext()), 0));
- bb = llvm::BasicBlock::Create(llvmFunction()->getContext(), "entry", llvmFunction());
+ bb = llvm::BasicBlock::Create(llvmFunction->getContext(), "entry", llvmFunction);
llvm::IRBuilder<> _builder(bb);
builder = &_builder;
@@ -113,14 +113,9 @@ void* J3CodeGen::operator new(size_t n,
void J3CodeGen::operator delete(void* ptr) {
}
-J3CodeGen* J3CodeGen::create(J3Method* method) {
+void J3CodeGen::translate(J3Method* method, llvm::Function* llvmFunction) {
vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create();
- return new(allocator) J3CodeGen(allocator, method);
-}
-
-void J3CodeGen::destroy(J3CodeGen* codeGen) {
- vmkit::BumpAllocator* allocator = codeGen->allocator;
- delete codeGen;
+ delete new(allocator) J3CodeGen(allocator, method, llvmFunction);
vmkit::BumpAllocator::destroy(allocator);
}
@@ -207,10 +202,10 @@ llvm::Value* J3CodeGen::vt(J3Type* type)
llvm::Value* J3CodeGen::nullCheck(llvm::Value* obj) {
if(exceptionNodes[curExceptionNode]->landingPad) {
- llvm::BasicBlock* succeed = llvm::BasicBlock::Create(llvmFunction()->getContext(), "nullcheck-succeed", llvmFunction());
+ llvm::BasicBlock* succeed = llvm::BasicBlock::Create(llvmFunction->getContext(), "nullcheck-succeed", llvmFunction);
if(!bbNullCheckFailed) {
- bbNullCheckFailed = llvm::BasicBlock::Create(llvmFunction()->getContext(), "nullcheck-failed", llvmFunction());
+ bbNullCheckFailed = llvm::BasicBlock::Create(llvmFunction->getContext(), "nullcheck-failed", llvmFunction);
builder->SetInsertPoint(bbNullCheckFailed);
builder->CreateInvoke(funcNullPointerException, bbRet, exceptionNodes[curExceptionNode]->landingPad);
builder->SetInsertPoint(bb);
@@ -239,7 +234,7 @@ void J3CodeGen::invoke(J3Method* target,
llvm::Value* res;
if(exceptionNodes[curExceptionNode]->landingPad) {
- llvm::BasicBlock* after = llvm::BasicBlock::Create(llvmFunction()->getContext(), "invoke-after", llvmFunction());
+ llvm::BasicBlock* after = llvm::BasicBlock::Create(llvmFunction->getContext(), "invoke-after", llvmFunction);
res = builder->CreateInvoke(func, after, exceptionNodes[curExceptionNode]->landingPad, args);
bb = after;
builder->SetInsertPoint(bb);
@@ -419,8 +414,8 @@ llvm::Value* J3CodeGen::isAssignableTo(l
void J3CodeGen::instanceof(llvm::Value* obj, J3Type* type) {
llvm::BasicBlock* after = forwardBranch("instanceof-after", codeReader->tell(), 0, 0);
- llvm::BasicBlock* ok = llvm::BasicBlock::Create(llvmFunction()->getContext(), "instanceof-ok", llvmFunction());
- llvm::BasicBlock* test = llvm::BasicBlock::Create(llvmFunction()->getContext(), "instanceof", llvmFunction());
+ llvm::BasicBlock* ok = llvm::BasicBlock::Create(llvmFunction->getContext(), "instanceof-ok", llvmFunction);
+ llvm::BasicBlock* test = llvm::BasicBlock::Create(llvmFunction->getContext(), "instanceof", llvmFunction);
builder->CreateCondBr(builder->CreateIsNull(obj), ok, test);
@@ -436,12 +431,12 @@ void J3CodeGen::instanceof(llvm::Value*
void J3CodeGen::checkCast(llvm::Value* obj, J3Type* type) {
llvm::BasicBlock* succeed = forwardBranch("checkcast-succeed", codeReader->tell(), 0, 0);
- llvm::BasicBlock* test = llvm::BasicBlock::Create(llvmFunction()->getContext(), "checkcast", llvmFunction());
+ llvm::BasicBlock* test = llvm::BasicBlock::Create(llvmFunction->getContext(), "checkcast", llvmFunction);
builder->CreateCondBr(builder->CreateIsNull(obj), succeed, test);
if(!bbCheckCastFailed) {
- bbCheckCastFailed = llvm::BasicBlock::Create(llvmFunction()->getContext(), "checkcast-failed", llvmFunction());
+ bbCheckCastFailed = llvm::BasicBlock::Create(llvmFunction->getContext(), "checkcast-failed", llvmFunction);
builder->SetInsertPoint(bbCheckCastFailed);
builder->CreateCall(funcClassCastException);
builder->CreateBr(bbRet);
@@ -553,7 +548,7 @@ llvm::BasicBlock* J3CodeGen::forwardBran
opInfos[pc].bb = after;
return after;
} else {
- llvm::BasicBlock* res = llvm::BasicBlock::Create(llvmFunction()->getContext(), id, llvmFunction());
+ llvm::BasicBlock* res = llvm::BasicBlock::Create(llvmFunction->getContext(), id, llvmFunction);
if(doAlloc) {
opInfos[pc].metaStack = (llvm::Type**)allocator->allocate(sizeof(llvm::Type**)*stack.topStack);
@@ -715,7 +710,7 @@ void J3CodeGen::translate() {
switch(vm->options()->debugTranslate) {
case 4:
fprintf(stderr, "--------------------------------------------\n");
- llvmFunction()->dump();
+ llvmFunction->dump();
case 3:
fprintf(stderr, "stack:\n");
stack.dump();
@@ -1312,7 +1307,7 @@ void J3CodeGen::initExceptionNode(J3Exce
void J3CodeGen::addToExceptionNode(J3ExceptionNode* node, J3ExceptionEntry* entry) {
if(!node->nbEntries) {
- node->landingPad = llvm::BasicBlock::Create(llvmFunction()->getContext(), "landing-pad", llvmFunction());
+ node->landingPad = llvm::BasicBlock::Create(llvmFunction->getContext(), "landing-pad", llvmFunction);
node->curCheck = node->landingPad;
builder->SetInsertPoint(node->landingPad);
@@ -1336,7 +1331,7 @@ void J3CodeGen::addToExceptionNode(J3Exc
if(node->curCheck) { /* = 0 if I already have a finally */
builder->SetInsertPoint(node->curCheck);
- node->curCheck = llvm::BasicBlock::Create(llvmFunction()->getContext(), "next-exception-check", llvmFunction());
+ node->curCheck = llvm::BasicBlock::Create(llvmFunction->getContext(), "next-exception-check", llvmFunction);
if(entry->catchType) {
stack.metaStack[0] = vm->typeJ3ObjectPtr;
@@ -1376,8 +1371,8 @@ void J3CodeGen::generateJava() {
dbgInfo =
loader->dbgBuilder()->createFunction(llvm::DIDescriptor(), // Function scope
- llvmFunction()->getName(), // Function name
- llvmFunction()->getName(), // Mangled name
+ llvmFunction->getName(), // Function name
+ llvmFunction->getName(), // Mangled name
llvm::DIFile(), // File where this variable is defined
0, // Line number
loader->dbgBuilder() // Function type.
@@ -1398,7 +1393,7 @@ void J3CodeGen::generateJava() {
ret.init(this, 1, allocator->allocate(J3CodeGenVar::reservedSize(1)));
uint32_t n=0;
- for(llvm::Function::arg_iterator cur=llvmFunction()->arg_begin(); cur!=llvmFunction()->arg_end(); cur++, n++) {
+ for(llvm::Function::arg_iterator cur=llvmFunction->arg_begin(); cur!=llvmFunction->arg_end(); cur++, n++) {
locals.setAt(flatten(cur, methodType->ins(n)), n);
}
@@ -1411,7 +1406,7 @@ void J3CodeGen::generateJava() {
J3Reader codeReaderTmp(cl->bytes(), reader.tell(), codeLength);
codeReader = &codeReaderTmp;
- bbRet = llvm::BasicBlock::Create(llvmFunction()->getContext(), "ret", llvmFunction());
+ bbRet = llvm::BasicBlock::Create(llvmFunction->getContext(), "ret", llvmFunction);
builder->SetInsertPoint(bbRet);
if(vm->options()->genDebugExecute) {
char buf[256];
@@ -1541,7 +1536,7 @@ void J3CodeGen::generateNative() {
if(methodType->nbIns()) {
uint32_t i = 0;
- for(llvm::Function::arg_iterator cur=llvmFunction()->arg_begin(); cur!=llvmFunction()->arg_end(); cur++, i++) {
+ for(llvm::Function::arg_iterator cur=llvmFunction->arg_begin(); cur!=llvmFunction->arg_end(); cur++, i++) {
llvm::Value* a;
if(methodType->ins(i)->llvmType()->isPointerTy())
a = builder->CreateCall2(funcJ3ThreadPush, thread, flatten(cur, methodType->ins(i)));
@@ -1560,8 +1555,8 @@ void J3CodeGen::generateNative() {
builder->CreateCall2(funcJ3ThreadRestore, thread, frame);
if(methodType->out()->llvmType()->isPointerTy()) {
- llvm::BasicBlock* ifnull = llvm::BasicBlock::Create(llvmFunction()->getContext(), "ifnull", llvmFunction());
- llvm::BasicBlock* ifnotnull = llvm::BasicBlock::Create(llvmFunction()->getContext(), "ifnotnull", llvmFunction());
+ llvm::BasicBlock* ifnull = llvm::BasicBlock::Create(llvmFunction->getContext(), "ifnull", llvmFunction);
+ llvm::BasicBlock* ifnotnull = llvm::BasicBlock::Create(llvmFunction->getContext(), "ifnotnull", llvmFunction);
builder->CreateCondBr(builder->CreateIsNull(res), ifnull, ifnotnull);
builder->SetInsertPoint(bb = ifnull);
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=196291&r1=196290&r2=196291&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Tue Dec 3 10:02:44 2013
@@ -58,9 +58,10 @@ void* J3Method::fnPtr() {
J3::noSuchMethodError(L"unable to find method", cl(), name(), sign());
}
- J3CodeGen* codeGen = J3CodeGen::create(this);
- _llvmFunction = codeGen->llvmFunction();
- J3CodeGen::destroy(codeGen);
+ llvm::Module* module = cl()->loader()->module();
+ _llvmFunction = llvmFunction(0, module);
+
+ J3CodeGen::translate(this, _llvmFunction);
cl()->loader()->pm()->run(*_llvmFunction);
llvm::ExecutionEngine* ee = cl()->loader()->vm()->ee();
More information about the vmkit-commits
mailing list