[vmkit-commits] [vmkit] r199691 - Remove simple call backs to the runtime from mmtk.
Gael Thomas
gael.thomas at lip6.fr
Mon Jan 20 14:11:54 PST 2014
Author: gthomas
Date: Mon Jan 20 16:11:53 2014
New Revision: 199691
URL: http://llvm.org/viewvc/llvm-project?rev=199691&view=rev
Log:
Remove simple call backs to the runtime from mmtk.
Modified:
vmkit/branches/mcjit/include/j3/j3codegen.h
vmkit/branches/mcjit/include/j3/j3meta.def
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
vmkit/branches/mcjit/lib/mmtk/magic/lower-java-runtime.cc
vmkit/branches/mcjit/lib/mmtk/magic/lower-magic.cc
Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=199691&r1=199690&r2=199691&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Mon Jan 20 16:11:53 2014
@@ -42,7 +42,9 @@ namespace j3 {
WithCaller = 2,
OnlyTranslate = 4,
NotUseStub = 8,
- NotNeedGC = 16
+ NotNeedGC = 16,
+ SupposeClinited = 32,
+ NoRuntimeCheck = 64
};
bool withMethod() { return mode & WithMethod; }
@@ -50,6 +52,8 @@ namespace j3 {
bool onlyTranslate() { return mode & OnlyTranslate; }
bool useStub() { return !(mode & NotUseStub); }
bool needGC() { return !(mode & NotNeedGC); }
+ bool supposeClinited() { return mode & SupposeClinited; }
+ bool noRuntimeCheck() { return mode & NoRuntimeCheck; }
private:
friend class J3CodeGenVar;
Modified: vmkit/branches/mcjit/include/j3/j3meta.def
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3meta.def?rev=199691&r1=199690&r2=199691&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3meta.def (original)
+++ vmkit/branches/mcjit/include/j3/j3meta.def Mon Jan 20 16:11:53 2014
@@ -1,8 +1,6 @@
-_x(funcJ3MethodIndex, "j3::J3Method::index()")
_x(funcJ3TypeVT, "j3::J3Type::vt()")
_x(funcJ3TypeVTAndResolve, "j3::J3Type::vtAndResolve()")
_x(funcJ3TypeInitialise, "j3::J3Type::initialise()")
-_x(funcJ3LayoutStructSize, "j3::J3Layout::structSize()")
_x(funcJ3ClassStaticInstance, "j3::J3Class::staticInstance()")
_x(funcJ3ClassStringAt, "j3::J3Class::stringAt(unsigned short, bool)")
_x(funcJ3TypeJavaClass, "j3::J3Type::javaClass(bool, j3::J3ObjectHandle*)")
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=199691&r1=199690&r2=199691&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Mon Jan 20 16:11:53 2014
@@ -194,7 +194,11 @@ void J3::compileApplication() {
names()->get("()Ljava/lang/ClassLoader;"))->invokeStatic().valObject);
- loader->setCompilationMode(J3CodeGen::OnlyTranslate | J3CodeGen::NotUseStub | J3CodeGen::NotNeedGC);
+ loader->setCompilationMode(J3CodeGen::OnlyTranslate |
+ J3CodeGen::NotUseStub |
+ J3CodeGen::NotNeedGC |
+ J3CodeGen::SupposeClinited |
+ J3CodeGen::NoRuntimeCheck);
if(options()->mainClass)
J3::internalError("compiling a single class is not yet supported");
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=199691&r1=199690&r2=199691&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Mon Jan 20 16:11:53 2014
@@ -326,7 +326,7 @@ void J3CodeGen::monitorExit(llvm::Value*
}
void J3CodeGen::initialiseJ3ObjectType(J3ObjectType* cl) {
- if(!cl->isInitialised())
+ if(!supposeClinited() && !cl->isInitialised())
builder.CreateCall(funcJ3TypeInitialise, typeDescriptor(cl, vm->typeJ3TypePtr));
}
@@ -358,12 +358,12 @@ llvm::Value* J3CodeGen::vt(llvm::Value*
}
llvm::Value* J3CodeGen::vt(J3ObjectType* type, bool doResolve) {
- llvm::Value* func = doResolve && !type->isResolved() ? funcJ3TypeVTAndResolve : funcJ3TypeVT;
+ llvm::Value* func = !supposeClinited() && doResolve && !type->isResolved() ? funcJ3TypeVTAndResolve : funcJ3TypeVT;
return builder.CreateCall(func, typeDescriptor(type, vm->typeJ3TypePtr));
}
llvm::Value* J3CodeGen::nullCheck(llvm::Value* obj) {
- if(exceptions.nodes[curExceptionNode]->landingPad) {
+ if(!noRuntimeCheck() && exceptions.nodes[curExceptionNode]->landingPad) {
llvm::BasicBlock* succeed = newBB("nullcheck-succeed");
if(!bbNullCheckFailed) {
@@ -431,17 +431,22 @@ void J3CodeGen::invokeInterface(uint32_t
void J3CodeGen::invokeVirtual(uint32_t idx) {
J3Method* target = cl->methodAt(idx, 0);
- J3Signature* type = target->signature();
- llvm::Value* funcEntry = funcEntry = builder.getInt32(target->index());
- llvm::Value* obj = nullCheck(stack.top(type->nbIns()));
- llvm::Value* gepFunc[] = { builder.getInt32(0),
- builder.getInt32(J3VirtualTable::gepVirtualMethods),
- funcEntry };
- llvm::Value* func = builder.CreateBitCast(builder.CreateLoad(builder.CreateGEP(vt(obj), gepFunc)),
- target->signature()->functionType(target->access())->getPointerTo());
+ if(J3Cst::isFinal(target->cl()->access()) || J3Cst::isFinal(target->cl()->access()))
+ invoke(0, target, buildFunction(target)); /* do not remove this optimization */
+ else {
+ J3Signature* type = target->signature();
+ llvm::Value* funcEntry = funcEntry = builder.getInt32(target->index());
+
+ llvm::Value* obj = nullCheck(stack.top(type->nbIns()));
+ llvm::Value* gepFunc[] = { builder.getInt32(0),
+ builder.getInt32(J3VirtualTable::gepVirtualMethods),
+ funcEntry };
+ llvm::Value* func = builder.CreateBitCast(builder.CreateLoad(builder.CreateGEP(vt(obj), gepFunc)),
+ target->signature()->functionType(target->access())->getPointerTo());
- invoke(0, target, func);
+ invoke(0, target, func);
+ }
}
void J3CodeGen::invokeStatic(uint32_t idx) {
@@ -493,6 +498,9 @@ void J3CodeGen::putField(uint32_t idx) {
}
void J3CodeGen::arrayBoundCheck(llvm::Value* obj, llvm::Value* idx) {
+ if(!noRuntimeCheck()) {
+ /* implement me */
+ }
}
llvm::Value* J3CodeGen::arrayContent(J3Type* cType, llvm::Value* array, llvm::Value* idx) {
@@ -581,11 +589,8 @@ void J3CodeGen::newObject(J3Class* cl) {
llvm::Value* size;
- if(!cl->isResolved()) {
- size = builder.CreateCall(funcJ3LayoutStructSize, typeDescriptor(cl, vm->typeJ3LayoutPtr));
- } else {
- size = builder.getInt64(cl->structSize());
- }
+ cl->resolve();
+ size = builder.getInt64(cl->structSize());
llvm::Value* res = builder.CreateCall2(funcJ3ObjectAllocate, vt(cl), size);
@@ -627,23 +632,25 @@ void J3CodeGen::instanceof(llvm::Value*
}
void J3CodeGen::checkCast(llvm::Value* obj, J3ObjectType* type) {
- llvm::BasicBlock* succeed = forwardBranch("checkcast-succeed", codeReader->tell(), 0, 0);
- llvm::BasicBlock* test = newBB("checkcast");
-
- builder.CreateCondBr(builder.CreateIsNull(obj), succeed, test);
-
- if(!bbCheckCastFailed) {
- bbCheckCastFailed = newBB("checkcast-failed");
- builder.SetInsertPoint(bbCheckCastFailed);
- builder.CreateCall(funcClassCastException);
- builder.CreateBr(bbRet);
- }
+ if(!noRuntimeCheck()) {
+ llvm::BasicBlock* succeed = forwardBranch("checkcast-succeed", codeReader->tell(), 0, 0);
+ llvm::BasicBlock* test = newBB("checkcast");
+
+ builder.CreateCondBr(builder.CreateIsNull(obj), succeed, test);
+
+ if(!bbCheckCastFailed) {
+ bbCheckCastFailed = newBB("checkcast-failed");
+ builder.SetInsertPoint(bbCheckCastFailed);
+ builder.CreateCall(funcClassCastException);
+ builder.CreateBr(bbRet);
+ }
- builder.SetInsertPoint(test);
+ builder.SetInsertPoint(test);
- llvm::Value* res = isAssignableTo(obj, type);
+ llvm::Value* res = isAssignableTo(obj, type);
- builder.CreateCondBr(res, succeed, bbCheckCastFailed);
+ builder.CreateCondBr(res, succeed, bbCheckCastFailed);
+ }
}
void J3CodeGen::floatToInteger(J3Type* ftype, J3Type* itype) {
Modified: vmkit/branches/mcjit/lib/mmtk/magic/lower-java-runtime.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/mmtk/magic/lower-java-runtime.cc?rev=199691&r1=199690&r2=199691&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/mmtk/magic/lower-java-runtime.cc (original)
+++ vmkit/branches/mcjit/lib/mmtk/magic/lower-java-runtime.cc Mon Jan 20 16:11:53 2014
@@ -18,27 +18,36 @@
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
-using namespace llvm;
-
namespace {
-
- class LowerJavaRT : public ModulePass {
+ class LowerJavaRT : public llvm::ModulePass {
public:
static char ID;
- LowerJavaRT() : ModulePass(ID) { }
+ LowerJavaRT() : llvm::ModulePass(ID) { }
- virtual bool runOnModule(Module &M);
+ virtual bool runOnModule(llvm::Module &M);
private:
};
+
char LowerJavaRT::ID = 0;
- static RegisterPass<LowerJavaRT> X("LowerJavaRT",
- "Remove references to RT");
+ static llvm::RegisterPass<LowerJavaRT> X("LowerJavaRT",
+ "Remove references to RT");
-bool LowerJavaRT::runOnModule(Module& M) {
- bool Changed = true;
+ bool LowerJavaRT::runOnModule(llvm::Module& module) {
+ bool Changed = true;
- fprintf(stderr, "Lowering java runtime in %s\n", M.getModuleIdentifier().data());
+ for(llvm::Module::global_iterator it = module.global_begin(); it!=module.global_end(); it++) {
+ llvm::GlobalValue* gv = it;
+
+ fprintf(stderr, "Global: %s\n", gv->getName().data());
+ }
+
+ for(llvm::Module::iterator it = module.begin(); it!=module.end(); it++) {
+ llvm::Function* function = it;
+
+ if(!strncmp(function->getName().data(), "j3_java", 7))
+ fprintf(stderr, "processing %s\n", function->getName().data());
+ }
return Changed;
}
Modified: vmkit/branches/mcjit/lib/mmtk/magic/lower-magic.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/mmtk/magic/lower-magic.cc?rev=199691&r1=199690&r2=199691&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/mmtk/magic/lower-magic.cc (original)
+++ vmkit/branches/mcjit/lib/mmtk/magic/lower-magic.cc Mon Jan 20 16:11:53 2014
@@ -44,7 +44,7 @@ typedef SmallPtrSet<Instruction*,128> In
bool LowerMagic::runOnFunction(Function& F) {
bool Changed = false;
- fprintf(stderr, "Lowering magic of %s\n", F.getName().data());
+ //fprintf(stderr, "Lowering magic of %s\n", F.getName().data());
return Changed;
}
}
More information about the vmkit-commits
mailing list