[vmkit-commits] [vmkit] r137015 - in /vmkit/trunk: Makefile.rules lib/J3/Compiler/JavaAOTCompiler.cpp lib/Mvm/StaticGCPass/Makefile mmtk/magic/LowerJavaRT.cpp mmtk/mmtk-j3/Makefile
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Aug 6 01:28:57 PDT 2011
Author: geoffray
Date: Sat Aug 6 03:28:57 2011
New Revision: 137015
URL: http://llvm.org/viewvc/llvm-project?rev=137015&view=rev
Log:
Make some changes to how we AOT compile MMTk to prepare cleanup:
- Remove dependency on a lazy jit compiler by making sure the magic methods are compiled before runnin LowerMagic on JITted methods
- Remove dependency on -load-bc by compiling MMTKRuntime to both a shared library and a bytecode library
Modified:
vmkit/trunk/Makefile.rules
vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/Mvm/StaticGCPass/Makefile
vmkit/trunk/mmtk/magic/LowerJavaRT.cpp
vmkit/trunk/mmtk/mmtk-j3/Makefile
Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=137015&r1=137014&r2=137015&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Sat Aug 6 03:28:57 2011
@@ -67,13 +67,11 @@
endif
ifeq ($(COMPILE_MMTK), 1)
- ADDITIONAL_ARGS := -load-bc=$(LibDir)/MMTKRuntime.bc
-
all::
$(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml
$(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@)
$(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) -std-compile-opts -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc
- $(Verb) $(VMJC) -std-compile-opts $(ADDITIONAL_ARGS) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled -llvm-lazy
+ $(Verb) $(VMJC) -std-compile-opts -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled
$(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -std-compile-opts -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc
$(Verb) $(LLVMLD) -r -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
$(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) -std-compile-opts -StaticGCPass -o $(LibDir)/FinalMMTk.bc
Modified: vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=137015&r1=137014&r2=137015&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaAOTCompiler.cpp Sat Aug 6 03:28:57 2011
@@ -2098,13 +2098,17 @@
static const char* name;
+extern "C" void UnreachableMagicMMTk() {
+ UNREACHABLE();
+}
+
void mainCompilerStart(JavaThread* th) {
Jnjvm* vm = th->getJVM();
JnjvmBootstrapLoader* bootstrapLoader = vm->bootstrapLoader;
JavaAOTCompiler* M = (JavaAOTCompiler*)bootstrapLoader->getCompiler();
- JavaJITCompiler* Comp = 0;
- mvm::ThreadAllocator allocator;
+ M->addJavaPasses();
+
bootstrapLoader->analyseClasspathEnv(vm->bootstrapLoader->bootClasspathEnv);
uint32 size = strlen(name);
if (size > 4 &&
@@ -2112,6 +2116,7 @@
bootstrapLoader->analyseClasspathEnv(name);
}
+ JavaJITCompiler* Comp = NULL;
if (!M->clinits->empty()) {
Comp = JavaJITCompiler::CreateCompiler("JIT");
Comp->EmitFunctionName = true;
@@ -2138,9 +2143,6 @@
}
extractFiles(bytes, M, bootstrapLoader, classes);
- // Now that we know if we can trust this compiler, add the Java passes.
- M->addJavaPasses();
-
// First resolve everyone so that there can not be unknown references in
// constant pools.
@@ -2157,65 +2159,90 @@
for (uint32 i = 0; i < cl->nbStaticMethods; ++i) {
M->getMethod(&cl->staticMethods[i]);
}
-
}
if (!M->clinits->empty()) {
vm->loadBootstrap();
+
+ // First, if we have the magic classes available, make sure we
+ // compile them so that we can call them directly and let
+ // LowerMagic lower them later on.
+ for (std::vector<Class*>::iterator ii = classes.begin(),
+ ee = classes.end(); ii != ee; ++ii) {
+ Class* cl = *ii;
+ static const std::string magic = "org/vmmagic";
+ static void* ptr = (void*)(uintptr_t)UnreachableMagicMMTk;
+ if (!strncmp(UTF8Buffer(cl->name).cString(),
+ magic.c_str(),
+ magic.length() - 1)) {
+ for (uint32 i = 0; i < cl->nbVirtualMethods; ++i) {
+ if (!isAbstract(cl->virtualMethods[i].access)) {
+ Function* F = M->getMethod(&cl->virtualMethods[i]);
+ M->setMethod(F, ptr, F->getName().data());
+ cl->virtualMethods[i].compiledPtr();
+ }
+ }
- for (std::vector<std::string>::iterator i = M->clinits->begin(),
- e = M->clinits->end(); i != e; ++i) {
-
- if (i->at(i->length() - 1) == '*') {
- for (std::vector<Class*>::iterator ii = classes.begin(),
- ee = classes.end(); ii != ee; ++ii) {
- Class* cl = *ii;
- if (!strncmp(UTF8Buffer(cl->name).cString(), i->c_str(),
- i->length() - 1)) {
- TRY {
- cl->asClass()->initialiseClass(vm);
- } CATCH {
- fprintf(stderr, "Error when initializing %s\n",
- UTF8Buffer(cl->name).cString());
- abort();
- } END_CATCH;
+ for (uint32 i = 0; i < cl->nbStaticMethods; ++i) {
+ if (!isAbstract(cl->staticMethods[i].access)) {
+ Function* F = M->getMethod(&cl->staticMethods[i]);
+ M->setMethod(F, ptr, F->getName().data());
+ cl->staticMethods[i].compiledPtr();
}
}
- } else {
+ }
+ }
- const UTF8* name = bootstrapLoader->asciizConstructUTF8(i->c_str());
- CommonClass* cl = bootstrapLoader->lookupClass(name);
- if (cl && cl->isClass()) {
- TRY {
- cl->asClass()->initialiseClass(vm);
- } CATCH {
- fprintf(stderr, "Error when initializing %s\n",
- UTF8Buffer(cl->name).cString());
- abort();
- } END_CATCH;
+ // Initialize all classes given with with the -with-clinit
+ // command line argument.
+ for (std::vector<std::string>::iterator i = M->clinits->begin(),
+ e = M->clinits->end(); i != e; ++i) {
+ Class* cl = NULL;
+ TRY {
+ if (i->at(i->length() - 1) == '*') {
+ for (std::vector<Class*>::iterator ii = classes.begin(),
+ ee = classes.end(); ii != ee; ++ii) {
+ cl = *ii;
+ if (!strncmp(UTF8Buffer(cl->name).cString(), i->c_str(),
+ i->length() - 1)) {
+ cl->initialiseClass(vm);
+ }
+ }
} else {
- fprintf(stderr, "Class %s does not exist or is an array class.\n",
- i->c_str());
+ const UTF8* name = bootstrapLoader->asciizConstructUTF8(i->c_str());
+ CommonClass* cls = bootstrapLoader->lookupClass(name);
+ if (cls && cls->isClass()) {
+ cl = cls->asClass();
+ cl->initialiseClass(vm);
+ } else {
+ fprintf(stderr, "Class %s does not exist or is an array class.\n",
+ i->c_str());
+ }
}
- }
+ } CATCH {
+ fprintf(stderr, "Error when initializing %s\n",
+ UTF8Buffer(cl->name).cString());
+ abort();
+ } END_CATCH;
}
bootstrapLoader->setCompiler(M);
}
-
+
+ // Set the thread as the owner of the classes, so that it knows it
+ // has to compile them.
for (std::vector<Class*>::iterator i = classes.begin(), e = classes.end();
i != e; ++i) {
- Class* cl = *i;
- cl->setOwnerClass(JavaThread::get());
+ (*i)->setOwnerClass(JavaThread::get());
}
+ // Finally, compile all classes.
for (std::vector<Class*>::iterator i = classes.begin(), e = classes.end();
i != e; ++i) {
- Class* cl = *i;
- M->compileClass(cl);
+ M->compileClass(*i);
}
} else {
- M->addJavaPasses();
+ mvm::ThreadAllocator allocator;
char* realName = (char*)allocator.Allocate(size + 1);
if (size > 6 && !strcmp(&name[size - 6], ".class")) {
memcpy(realName, name, size - 6);
Modified: vmkit/trunk/lib/Mvm/StaticGCPass/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/StaticGCPass/Makefile?rev=137015&r1=137014&r2=137015&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/StaticGCPass/Makefile (original)
+++ vmkit/trunk/lib/Mvm/StaticGCPass/Makefile Sat Aug 6 03:28:57 2011
@@ -10,7 +10,6 @@
LEVEL = ../../..
LIBRARYNAME = StaticGCPass
LOADABLE_MODULE = 1
-USEDLIBS =
include $(LEVEL)/Makefile.common
Modified: vmkit/trunk/mmtk/magic/LowerJavaRT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerJavaRT.cpp?rev=137015&r1=137014&r2=137015&view=diff
==============================================================================
--- vmkit/trunk/mmtk/magic/LowerJavaRT.cpp (original)
+++ vmkit/trunk/mmtk/magic/LowerJavaRT.cpp Sat Aug 6 03:28:57 2011
@@ -62,6 +62,16 @@
}
}
+ // Remove all references to magic methods.
+ for (Module::iterator I = M.begin(), E = M.end(); I != E;) {
+ Function& GV = *I;
+ ++I;
+ if (!strncmp(GV.getName().data(), "JnJVM_org_vmmagic", 17)) {
+ GV.replaceAllUsesWith(Constant::getNullValue(GV.getType()));
+ GV.eraseFromParent();
+ }
+ }
+
for (Module::global_iterator I = M.global_begin(), E = M.global_end();
I != E;) {
GlobalValue& GV = *I;
@@ -69,7 +79,7 @@
if (!strncmp(GV.getName().data(), "JnJVM_java", 10) ||
!strncmp(GV.getName().data(), "java", 4) ||
!strncmp(GV.getName().data(), "JnJVM_gnu", 9) ||
- !strncmp(GV.getName().data(), "_3", 2) ||
+ !strncmp(GV.getName().data(), "_3", 2) || // Arrays
!strncmp(GV.getName().data(), "gnu", 3)) {
GV.replaceAllUsesWith(Constant::getNullValue(GV.getType()));
GV.eraseFromParent();
Modified: vmkit/trunk/mmtk/mmtk-j3/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/Makefile?rev=137015&r1=137014&r2=137015&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/Makefile (original)
+++ vmkit/trunk/mmtk/mmtk-j3/Makefile Sat Aug 6 03:28:57 2011
@@ -12,8 +12,8 @@
include $(LEVEL)/Makefile.config
MODULE_NAME = MMTKRuntime
+LIBRARYNAME = MMTKRuntime
LOADABLE_MODULE = 1
-USEDLIBS =
CXX.Flags += -I$(PROJ_SRC_DIR)/../../lib/J3/VMCore
More information about the vmkit-commits
mailing list