[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