[vmkit-commits] [vmkit] r196324 - define a llvmContext in vmkit and uses it
Gael Thomas
gael.thomas at lip6.fr
Tue Dec 3 14:23:08 PST 2013
Author: gthomas
Date: Tue Dec 3 16:23:07 2013
New Revision: 196324
URL: http://llvm.org/viewvc/llvm-project?rev=196324&view=rev
Log:
define a llvmContext in vmkit and uses it
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/include/vmkit/vmkit.h
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3class.cc
vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
vmkit/branches/mcjit/lib/vmkit/vmkit.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Tue Dec 3 16:23:07 2013
@@ -101,6 +101,7 @@ namespace j3 {
llvm::Value* nullCheck(llvm::Value* obj);
+ llvm::BasicBlock* newBB(const char* name);
bool onEndPoint();
llvm::BasicBlock* forwardBranch(const char* id, uint32_t pc, bool doAlloc, bool doPush);
void condBr(llvm::Value* op);
Modified: vmkit/branches/mcjit/include/vmkit/vmkit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/vmkit.h?rev=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/vmkit.h (original)
+++ vmkit/branches/mcjit/include/vmkit/vmkit.h Tue Dec 3 16:23:07 2013
@@ -7,6 +7,7 @@
#include "llvm/ExecutionEngine/JITEventListener.h"
namespace llvm {
+ class LLVMContext;
class Module;
class ExecutionEngine;
class DataLayout;
@@ -74,6 +75,7 @@ namespace vmkit {
void vmkitBootstrap(Thread* initialThread, const char* selfBitCodePath);
llvm::DataLayout* dataLayout() { return _dataLayout; }
+ llvm::LLVMContext& llvmContext();
llvm::Module* self() { return _self; }
llvm::ExecutionEngine* ee() { return _ee; }
llvm::FunctionPassManager* preparePM(llvm::Module* mod);
Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Tue Dec 3 16:23:07 2013
@@ -53,8 +53,8 @@ void J3::introspect() {
typeJ3ObjectPtr = llvm::PointerType::getUnqual(typeJ3Object);
typeJ3ObjectHandlePtr = llvm::PointerType::getUnqual(introspectType("class.j3::J3ObjectHandle"));
- typeGXXException = llvm::StructType::get(llvm::Type::getInt8Ty(self()->getContext())->getPointerTo(),
- llvm::Type::getInt32Ty(self()->getContext()), NULL);
+ typeGXXException = llvm::StructType::get(llvm::Type::getInt8Ty(llvmContext())->getPointerTo(),
+ llvm::Type::getInt32Ty(llvmContext()), NULL);
}
void J3::start(int argc, char** argv) {
@@ -72,7 +72,7 @@ void J3::start(int argc, char** argv) {
vmkit::BumpAllocator* a = initialClassLoader->allocator();
#define defPrimitive(name, ctype, llvmtype) \
- type##name = new(a) J3Primitive(initialClassLoader, J3Cst::ID_##name, llvm::Type::get##llvmtype##Ty(self()->getContext()));
+ type##name = new(a) J3Primitive(initialClassLoader, J3Cst::ID_##name, llvm::Type::get##llvmtype##Ty(llvmContext()));
onJavaTypes(defPrimitive)
#undef defPrimitive
Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Tue Dec 3 16:23:07 2013
@@ -730,8 +730,8 @@ void J3Class::createLLVMTypes() {
mangler.mangle("static_")->mangle(name());
staticLayout._llvmType =
- llvm::PointerType::getUnqual(llvm::StructType::create(loader()->module()->getContext(), mangler.cStr()));
- _llvmType = llvm::PointerType::getUnqual(llvm::StructType::create(loader()->module()->getContext(), mangler.cStr()+7));
+ llvm::PointerType::getUnqual(llvm::StructType::create(loader()->vm()->llvmContext(), mangler.cStr()));
+ _llvmType = llvm::PointerType::getUnqual(llvm::StructType::create(loader()->vm()->llvmContext(), mangler.cStr()+7));
mangler.mangle("_2");
@@ -854,7 +854,7 @@ llvm::Type* J3ArrayClass::llvmType() {
memcpy(_nativeName+2, component()->nativeName(), len);
_nativeName[_nativeNameLength] = 0;
- _llvmType = llvm::PointerType::getUnqual(llvm::StructType::create(loader()->module()->getContext(),
+ _llvmType = llvm::PointerType::getUnqual(llvm::StructType::create(loader()->vm()->llvmContext(),
body,
_nativeName));
Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Tue Dec 3 16:23:07 2013
@@ -55,7 +55,7 @@ J3ClassLoader::J3ClassLoader(J3* v, J3Ob
_vm = v;
- _module = new llvm::Module("j3", vm()->self()->getContext());
+ _module = new llvm::Module("j3", vm()->llvmContext());
}
void J3ClassLoader::addSymbol(const char* id, J3Symbol* symbol) {
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=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Tue Dec 3 16:23:07 2013
@@ -90,9 +90,9 @@ J3CodeGen::J3CodeGen(vmkit::BumpAllocato
ziTry =
(llvm::Function*)module->getOrInsertFunction("vmkit.try",
- llvm::FunctionType::get(llvm::Type::getVoidTy(module->getContext()), 0));
+ llvm::FunctionType::get(llvm::Type::getVoidTy(llvmFunction->getContext()), 0));
- bb = llvm::BasicBlock::Create(llvmFunction->getContext(), "entry", llvmFunction);
+ bb = newBB("entry");
llvm::IRBuilder<> _builder(bb);
builder = &_builder;
@@ -202,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 = newBB("nullcheck-succeed");
if(!bbNullCheckFailed) {
- bbNullCheckFailed = llvm::BasicBlock::Create(llvmFunction->getContext(), "nullcheck-failed", llvmFunction);
+ bbNullCheckFailed = newBB("nullcheck-failed");
builder->SetInsertPoint(bbNullCheckFailed);
builder->CreateInvoke(funcNullPointerException, bbRet, exceptionNodes[curExceptionNode]->landingPad);
builder->SetInsertPoint(bb);
@@ -234,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 = newBB("invoke-after");
res = builder->CreateInvoke(func, after, exceptionNodes[curExceptionNode]->landingPad, args);
bb = after;
builder->SetInsertPoint(bb);
@@ -414,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 = newBB("instanceof-ok");
+ llvm::BasicBlock* test = newBB("instanceof");
builder->CreateCondBr(builder->CreateIsNull(obj), ok, test);
@@ -431,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 = newBB("checkcast");
builder->CreateCondBr(builder->CreateIsNull(obj), succeed, test);
if(!bbCheckCastFailed) {
- bbCheckCastFailed = llvm::BasicBlock::Create(llvmFunction->getContext(), "checkcast-failed", llvmFunction);
+ bbCheckCastFailed = newBB("checkcast-failed");
builder->SetInsertPoint(bbCheckCastFailed);
builder->CreateCall(funcClassCastException);
builder->CreateBr(bbRet);
@@ -518,6 +518,10 @@ void J3CodeGen::ldc(uint32_t idx) {
stack.push(res);
}
+llvm::BasicBlock* J3CodeGen::newBB(const char* name) {
+ return llvm::BasicBlock::Create(llvmFunction->getContext(), name, llvmFunction);
+}
+
void J3CodeGen::condBr(llvm::Value* op) {
builder->CreateCondBr(op,
forwardBranch("if-true", javaPC + codeReader->readS2(), 1, 1),
@@ -548,7 +552,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 = newBB(id);
if(doAlloc) {
opInfos[pc].metaStack = (llvm::Type**)allocator->allocate(sizeof(llvm::Type**)*stack.topStack);
@@ -1307,7 +1311,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 = newBB("landing-pad");
node->curCheck = node->landingPad;
builder->SetInsertPoint(node->landingPad);
@@ -1331,7 +1335,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 = newBB("next-exception-check");
if(entry->catchType) {
stack.metaStack[0] = vm->typeJ3ObjectPtr;
@@ -1408,7 +1412,7 @@ void J3CodeGen::generateJava() {
J3Reader codeReaderTmp(cl->bytes(), reader.tell(), codeLength);
codeReader = &codeReaderTmp;
- bbRet = llvm::BasicBlock::Create(llvmFunction->getContext(), "ret", llvmFunction);
+ bbRet = newBB("ret");
builder->SetInsertPoint(bbRet);
if(vm->options()->genDebugExecute) {
char buf[256];
@@ -1557,8 +1561,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 = newBB("ifnull");
+ llvm::BasicBlock* ifnotnull = newBB("ifnotnull");
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=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Tue Dec 3 16:23:07 2013
@@ -58,7 +58,7 @@ void* J3Method::fnPtr() {
J3::noSuchMethodError(L"unable to find method", cl(), name(), sign());
}
- llvm::Module* module = new llvm::Module(llvmFunctionName(), cl()->loader()->vm()->self()->getContext());
+ llvm::Module* module = new llvm::Module(llvmFunctionName(), cl()->loader()->vm()->llvmContext());
_llvmFunction = llvmFunction(0, module);
J3CodeGen::translate(this, _llvmFunction);
Modified: vmkit/branches/mcjit/lib/vmkit/vmkit.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/vmkit.cc?rev=196324&r1=196323&r2=196324&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/vmkit.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/vmkit.cc Tue Dec 3 16:23:07 2013
@@ -43,6 +43,9 @@ void VMKit::destroy(VMKit* vm) {
vmkit::BumpAllocator::destroy(vm->allocator());
}
+llvm::LLVMContext& VMKit::llvmContext() {
+ return self()->getContext();
+}
llvm::Type* VMKit::introspectType(const char* name) {
llvm::Type* res = self()->getTypeByName(name);
More information about the vmkit-commits
mailing list