[vmkit-commits] [vmkit] r197337 - assesor for module in J3CodeGen
Gael Thomas
gael.thomas at lip6.fr
Sun Dec 15 03:08:02 PST 2013
Author: gthomas
Date: Sun Dec 15 05:08:02 2013
New Revision: 197337
URL: http://llvm.org/viewvc/llvm-project?rev=197337&view=rev
Log:
assesor for module in J3CodeGen
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/include/vmkit/compiler.h
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=197337&r1=197336&r2=197337&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Sun Dec 15 05:08:02 2013
@@ -57,7 +57,7 @@ namespace j3 {
friend class J3CodeGenVar;
vmkit::BumpAllocator* allocator;
- llvm::Module* module;
+ llvm::Module* _module;
llvm::BasicBlock* bb;
llvm::IRBuilder<>* builder;
llvm::Function* llvmFunction;
@@ -96,6 +96,8 @@ namespace j3 {
bool isWide;
+ llvm::Module* module();
+
uint32_t wideReadU1();
uint32_t wideReadS1();
Modified: vmkit/branches/mcjit/include/vmkit/compiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/compiler.h?rev=197337&r1=197336&r2=197337&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/compiler.h (original)
+++ vmkit/branches/mcjit/include/vmkit/compiler.h Sun Dec 15 05:08:02 2013
@@ -1,7 +1,15 @@
#ifndef _COMPILER_H_
#define _COMPILER_H_
+#include "llvm/ExecutionEngine/SectionMemoryManager.h"
+
#include "allocator.h"
+#include "util.h"
+
+namespace llvm {
+ class Module;
+ class ExecutionEngine;
+};
namespace vmkit {
class Symbol : public PermanentObject {
@@ -19,15 +27,29 @@ namespace vmkit {
#if 0
class CompilationFragment {
+ BumpAllocator* _allocator;
llvm::Module* _module;
+
public:
- CompilationFragment();
+ CompilationFragment(BumpAllocator* allocator);
+
+ BumpAllocator* allocator() { return _allocator; }
+ llvm::Module* module() { return _module; }
};
+#endif
class CompilationUnit : public llvm::SectionMemoryManager {
- typedef std::map<const char*, Symbol*, vmkit::Util::char_less_t, StdAllocator<std::pair<const char*, Symbol*> > > SymbolMap;
+ typedef std::map<const char*, Symbol*, Util::char_less_t, StdAllocator<std::pair<const char*, Symbol*> > > SymbolMap;
+
+ SymbolMap _symbolTable;
+ pthread_mutex_t _mutexSymbolTable;
+ llvm::ExecutionEngine* _ee;
+ llvm::ExecutionEngine* _oldee;
+
+ public:
+ llvm::ExecutionEngine* ee() { return _ee; }
+ llvm::ExecutionEngine* oldee() { return _oldee; }
};
-#endif
}
#endif
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=197337&r1=197336&r2=197337&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sun Dec 15 05:08:02 2013
@@ -45,52 +45,52 @@ J3CodeGen::J3CodeGen(vmkit::BumpAllocato
llvmFunction = _llvmFunction;
llvmFunction->setGC("vmkit");
- module = llvmFunction->getParent();
+ _module = llvmFunction->getParent();
bbCheckCastFailed = 0;
bbNullCheckFailed = 0;
topPendingBranchs = 0;
isWide = 0;
- funcJ3MethodIndex = vm->introspectFunction(module, "j3::J3Method::index()");
- funcJ3TypeVT = vm->introspectFunction(module, "j3::J3Type::vt()");
- funcJ3TypeInitialise = vm->introspectFunction(module, "j3::J3Type::initialise()");
- funcJ3ClassSize = vm->introspectFunction(module, "j3::J3Class::size()");
- funcJ3ClassStaticInstance = vm->introspectFunction(module, "j3::J3Class::staticInstance()");
- funcJ3ClassStringAt = vm->introspectFunction(module, "j3::J3Class::stringAt(unsigned short)");
- funcJ3ObjectTypeJavaClass = vm->introspectFunction(module, "j3::J3ObjectType::javaClass()");
- funcJniEnv = vm->introspectFunction(module, "j3::J3::jniEnv()");
- funcJ3ObjectAllocate = vm->introspectFunction(module, "j3::J3Object::allocate(j3::J3VirtualTable*, unsigned long)");
+ funcJ3MethodIndex = vm->introspectFunction(module(), "j3::J3Method::index()");
+ funcJ3TypeVT = vm->introspectFunction(module(), "j3::J3Type::vt()");
+ funcJ3TypeInitialise = vm->introspectFunction(module(), "j3::J3Type::initialise()");
+ funcJ3ClassSize = vm->introspectFunction(module(), "j3::J3Class::size()");
+ funcJ3ClassStaticInstance = vm->introspectFunction(module(), "j3::J3Class::staticInstance()");
+ funcJ3ClassStringAt = vm->introspectFunction(module(), "j3::J3Class::stringAt(unsigned short)");
+ funcJ3ObjectTypeJavaClass = vm->introspectFunction(module(), "j3::J3ObjectType::javaClass()");
+ funcJniEnv = vm->introspectFunction(module(), "j3::J3::jniEnv()");
+ funcJ3ObjectAllocate = vm->introspectFunction(module(), "j3::J3Object::allocate(j3::J3VirtualTable*, unsigned long)");
- funcThrowException = vm->introspectFunction(module, "vmkit::VMKit::throwException(void*)");
- funcClassCastException = vm->introspectFunction(module, "j3::J3::classCastException()");
- funcNullPointerException = vm->introspectFunction(module, "j3::J3::nullPointerException()");
-
- funcJ3ThreadPushHandle = vm->introspectFunction(module, "j3::J3Thread::push(j3::J3ObjectHandle*)");
- funcJ3ThreadPush = vm->introspectFunction(module, "j3::J3Thread::push(j3::J3Object*)");
- funcJ3ThreadTell = vm->introspectFunction(module, "j3::J3Thread::tell()");
- funcJ3ThreadRestore = vm->introspectFunction(module, "j3::J3Thread::restore(j3::J3ObjectHandle*)");
- funcJ3ThreadGet = vm->introspectFunction(module, "j3::J3Thread::get()");
- funcEchoDebugEnter = vm->introspectFunction(module, "j3::J3CodeGen::echoDebugEnter(unsigned int, char const*, ...)");
- funcEchoDebugExecute = vm->introspectFunction(module, "j3::J3CodeGen::echoDebugExecute(unsigned int, char const*, ...)");
+ funcThrowException = vm->introspectFunction(module(), "vmkit::VMKit::throwException(void*)");
+ funcClassCastException = vm->introspectFunction(module(), "j3::J3::classCastException()");
+ funcNullPointerException = vm->introspectFunction(module(), "j3::J3::nullPointerException()");
+
+ funcJ3ThreadPushHandle = vm->introspectFunction(module(), "j3::J3Thread::push(j3::J3ObjectHandle*)");
+ funcJ3ThreadPush = vm->introspectFunction(module(), "j3::J3Thread::push(j3::J3Object*)");
+ funcJ3ThreadTell = vm->introspectFunction(module(), "j3::J3Thread::tell()");
+ funcJ3ThreadRestore = vm->introspectFunction(module(), "j3::J3Thread::restore(j3::J3ObjectHandle*)");
+ funcJ3ThreadGet = vm->introspectFunction(module(), "j3::J3Thread::get()");
+ funcEchoDebugEnter = vm->introspectFunction(module(), "j3::J3CodeGen::echoDebugEnter(unsigned int, char const*, ...)");
+ funcEchoDebugExecute = vm->introspectFunction(module(), "j3::J3CodeGen::echoDebugExecute(unsigned int, char const*, ...)");
- funcSlowIsAssignableTo = vm->introspectFunction(module, "j3::J3VirtualTable::slowIsAssignableTo(j3::J3VirtualTable*)");
+ funcSlowIsAssignableTo = vm->introspectFunction(module(), "j3::J3VirtualTable::slowIsAssignableTo(j3::J3VirtualTable*)");
funcFastIsAssignableToPrimaryChecker =
- vm->introspectFunction(module, "j3::J3VirtualTable::fastIsAssignableToPrimaryChecker(j3::J3VirtualTable*, unsigned int)");
+ vm->introspectFunction(module(), "j3::J3VirtualTable::fastIsAssignableToPrimaryChecker(j3::J3VirtualTable*, unsigned int)");
funcFastIsAssignableToNonPrimaryChecker =
- vm->introspectFunction(module, "j3::J3VirtualTable::fastIsAssignableToNonPrimaryChecker(j3::J3VirtualTable*)");
+ vm->introspectFunction(module(), "j3::J3VirtualTable::fastIsAssignableToNonPrimaryChecker(j3::J3VirtualTable*)");
- funcGXXPersonality = vm->introspectFunction(module, "__gxx_personality_v0");
- funcCXABeginCatch = vm->introspectFunction(module, "__cxa_begin_catch");
- funcCXAEndCatch = vm->introspectFunction(module, "__cxa_end_catch");
+ funcGXXPersonality = vm->introspectFunction(module(), "__gxx_personality_v0");
+ funcCXABeginCatch = vm->introspectFunction(module(), "__cxa_begin_catch");
+ funcCXAEndCatch = vm->introspectFunction(module(), "__cxa_end_catch");
- gvTypeInfo = vm->introspectGlobalValue(module, "typeinfo for void*");
+ gvTypeInfo = vm->introspectGlobalValue(module(), "typeinfo for void*");
- gcRoot = vm->getGCRoot(module);
+ gcRoot = vm->getGCRoot(module());
ziTry =
- (llvm::Function*)module->getOrInsertFunction("vmkit.try",
- llvm::FunctionType::get(llvm::Type::getVoidTy(llvmFunction->getContext()), 0));
+ (llvm::Function*)module()->getOrInsertFunction("vmkit.try",
+ llvm::FunctionType::get(llvm::Type::getVoidTy(llvmFunction->getContext()), 0));
bb = newBB("entry");
llvm::IRBuilder<> _builder(bb);
@@ -168,12 +168,12 @@ llvm::Value* J3CodeGen::unflatten(llvm::
void J3CodeGen::initialiseJ3Type(J3Type* cl) {
if(!cl->isInitialised())
- builder->CreateCall(funcJ3TypeInitialise, builder->CreateBitCast(cl->llvmDescriptor(module), vm->typeJ3TypePtr));
+ builder->CreateCall(funcJ3TypeInitialise, builder->CreateBitCast(cl->llvmDescriptor(module()), vm->typeJ3TypePtr));
}
llvm::Value* J3CodeGen::javaClass(J3ObjectType* type) {
return builder->CreateCall(funcJ3ObjectTypeJavaClass,
- builder->CreateBitCast(type->llvmDescriptor(module), vm->typeJ3ObjectTypePtr));
+ builder->CreateBitCast(type->llvmDescriptor(module()), vm->typeJ3ObjectTypePtr));
}
llvm::Value* J3CodeGen::handleToObject(llvm::Value* obj) {
@@ -184,7 +184,7 @@ llvm::Value* J3CodeGen::handleToObject(l
llvm::Value* J3CodeGen::staticInstance(J3Class* cl) {
initialiseJ3Type(cl);
return builder->CreateBitCast(handleToObject(builder->CreateCall(funcJ3ClassStaticInstance,
- cl->llvmDescriptor(module))),
+ cl->llvmDescriptor(module()))),
cl->staticLLVMType());
}
@@ -197,7 +197,7 @@ llvm::Value* J3CodeGen::vt(llvm::Value*
}
llvm::Value* J3CodeGen::vt(J3Type* type) {
- return builder->CreateCall(funcJ3TypeVT, builder->CreateBitCast(type->llvmDescriptor(module), vm->typeJ3TypePtr));
+ return builder->CreateCall(funcJ3TypeVT, builder->CreateBitCast(type->llvmDescriptor(module()), vm->typeJ3TypePtr));
}
llvm::Value* J3CodeGen::nullCheck(llvm::Value* obj) {
@@ -254,7 +254,7 @@ void J3CodeGen::invokeVirtual(uint32_t i
if(target->isResolved())
funcEntry = builder->getInt32(target->index());
else
- funcEntry = builder->CreateCall(funcJ3MethodIndex, target->llvmDescriptor(module));
+ funcEntry = builder->CreateCall(funcJ3MethodIndex, target->llvmDescriptor(module()));
llvm::Value* obj = nullCheck(stack.top(type->nbIns() - 1));
llvm::Value* gepFunc[] = { builder->getInt32(0),
@@ -269,12 +269,12 @@ void J3CodeGen::invokeVirtual(uint32_t i
void J3CodeGen::invokeStatic(uint32_t idx) {
J3Method* target = cl->methodAt(idx, J3Cst::ACC_STATIC);
initialiseJ3Type(target->cl());
- invoke(target, target->llvmFunction(1, module, cl));
+ invoke(target, target->llvmFunction(1, module(), cl));
}
void J3CodeGen::invokeSpecial(uint32_t idx) {
J3Method* target = cl->methodAt(idx, 0);
- invoke(target, target->llvmFunction(1, module, cl));
+ invoke(target, target->llvmFunction(1, module(), cl));
}
void J3CodeGen::get(llvm::Value* src, J3Field* f) {
@@ -387,7 +387,7 @@ void J3CodeGen::newObject(J3Class* cl) {
llvm::Value* size;
if(!cl->isResolved()) {
- size = builder->CreateCall(funcJ3ClassSize, cl->llvmDescriptor(module));
+ size = builder->CreateCall(funcJ3ClassSize, cl->llvmDescriptor(module()));
} else {
size = builder->getInt64(cl->size());
}
@@ -510,7 +510,7 @@ void J3CodeGen::ldc(uint32_t idx) {
case J3Cst::CONSTANT_Double: res = llvm::ConstantFP::get(builder->getDoubleTy(), cl->doubleAt(idx)); break;
case J3Cst::CONSTANT_Class: res = handleToObject(javaClass(cl->classAt(idx))); break;
case J3Cst::CONSTANT_String:
- res = handleToObject(builder->CreateCall2(funcJ3ClassStringAt, cl->llvmDescriptor(module), builder->getInt16(idx)));
+ res = handleToObject(builder->CreateCall2(funcJ3ClassStringAt, cl->llvmDescriptor(module()), builder->getInt16(idx)));
break;
default:
J3::classFormatError(cl, L"wrong ldc type: %d\n", cl->getCtpType(idx));
@@ -590,7 +590,7 @@ llvm::Value* J3CodeGen::buildString(cons
elmts.push_back(builder->getInt8(0));
llvm::Constant* str = llvm::ConstantArray::get(llvm::ArrayType::get(builder->getInt8Ty(), n+1), elmts);
- llvm::Value* var = new llvm::GlobalVariable(*module,
+ llvm::Value* var = new llvm::GlobalVariable(*module(),
str->getType(),
1,
llvm::GlobalVariable::InternalLinkage,
@@ -1371,10 +1371,10 @@ void J3CodeGen::generateJava() {
J3::classFormatError(cl, L"Code attribute of %ls %ls is too large (%d)", method->name()->cStr(), method->sign()->cStr(), length);
nullValue = builder
- ->CreateIntToPtr(llvm::ConstantInt::get(vm->dataLayout()->getIntPtrType(module->getContext()), (uintptr_t)0),
+ ->CreateIntToPtr(llvm::ConstantInt::get(vm->dataLayout()->getIntPtrType(module()->getContext()), (uintptr_t)0),
vm->typeJ3ObjectPtr);
- llvm::DIBuilder* dbgBuilder = new llvm::DIBuilder(*module);
+ llvm::DIBuilder* dbgBuilder = new llvm::DIBuilder(*module());
dbgInfo =
dbgBuilder->createFunction(llvm::DIDescriptor(), // Function scope
@@ -1522,7 +1522,7 @@ void J3CodeGen::generateJava() {
void J3CodeGen::generateNative() {
std::vector<llvm::Value*> args;
- llvm::Function* nat = method->nativeLLVMFunction(module);
+ llvm::Function* nat = method->nativeLLVMFunction(module());
llvm::Value* res;
llvm::Value* thread = builder->CreateCall(funcJ3ThreadGet);
More information about the vmkit-commits
mailing list