[vmkit-commits] [vmkit] r199647 - Generate the llvm bytecode in a file when in aot mode.

Gael Thomas gael.thomas at lip6.fr
Mon Jan 20 03:43:15 PST 2014


Author: gthomas
Date: Mon Jan 20 05:43:14 2014
New Revision: 199647

URL: http://llvm.org/viewvc/llvm-project?rev=199647&view=rev
Log:
Generate the llvm bytecode in a file when in aot mode.

Modified:
    vmkit/branches/mcjit/include/j3/j3classloader.h
    vmkit/branches/mcjit/include/j3/j3codegen.h
    vmkit/branches/mcjit/include/j3/j3options.h
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegenvar.cc
    vmkit/branches/mcjit/lib/j3/vm/j3method.cc
    vmkit/branches/mcjit/lib/j3/vm/j3options.cc
    vmkit/branches/mcjit/lib/mmtk/Makefile

Modified: vmkit/branches/mcjit/include/j3/j3classloader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3classloader.h?rev=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3classloader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3classloader.h Mon Jan 20 05:43:14 2014
@@ -38,7 +38,7 @@ namespace j3 {
 
 		static J3InterfaceMethodLess  j3InterfaceMethodLess;
 
-		uint32_t                             _compileMode;
+		uint32_t                             _compilationMode;
 
 		J3ObjectHandle*                      _javaClassLoader;
 		J3GlobalReferences                   _globalReferences;
@@ -61,8 +61,8 @@ namespace j3 {
 	public:
 		J3ClassLoader(J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator);
 
-		uint32_t                      compileMode() { return _compileMode; }
-		void                          setCompileMode(uint32_t mode) { _compileMode = mode; }
+		uint32_t                      compilationMode() { return _compilationMode; }
+		void                          setCompilationMode(uint32_t mode) { _compilationMode = mode; }
 
 		void                          aotSnapshot(llvm::Linker* linker);
 

Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Mon Jan 20 05:43:14 2014
@@ -41,13 +41,15 @@ namespace j3 {
 			WithMethod = 1,
 			WithCaller = 2,
 			OnlyTranslate = 4,
-			NotUseStub = 8
+			NotUseStub = 8,
+			NotNeedGC = 16
 		};
 
 		bool withMethod() { return mode & WithMethod; }
 		bool withCaller() { return mode & WithCaller; }
 		bool onlyTranslate() { return mode & OnlyTranslate; }
 		bool useStub() { return !(mode & NotUseStub); }
+		bool needGC() { return !(mode & NotNeedGC); }
 
 	private:
 		friend class J3CodeGenVar;

Modified: vmkit/branches/mcjit/include/j3/j3options.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3options.h?rev=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3options.h (original)
+++ vmkit/branches/mcjit/include/j3/j3options.h Mon Jan 20 05:43:14 2014
@@ -52,6 +52,7 @@ namespace j3 {
 		uintptr_t      stackSize;
 
 		bool           isAOT;
+		const char*    aotFile;
 
 		J3Options();
 

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=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Mon Jan 20 05:43:14 2014
@@ -18,6 +18,9 @@
 #include "llvm/IR/DerivedTypes.h"
 #include "llvm/IR/Module.h"
 #include "llvm/Linker.h"
+#include "llvm/Support/ToolOutputFile.h"
+#include "llvm/PassManager.h"
+#include "llvm/Bitcode/ReaderWriter.h"
 
 #include "vmkit/safepoint.h"
 #include "vmkit/system.h"
@@ -191,7 +194,7 @@ void J3::compileApplication() {
 																																		names()->get("()Ljava/lang/ClassLoader;"))->invokeStatic().valObject);
 
 
-	loader->setCompileMode(J3CodeGen::OnlyTranslate | J3CodeGen::NotUseStub);
+	loader->setCompilationMode(J3CodeGen::OnlyTranslate | J3CodeGen::NotUseStub | J3CodeGen::NotNeedGC);
 
 	if(options()->mainClass)
 		J3::internalError("compiling a single class is not yet supported");
@@ -221,7 +224,16 @@ void J3::compileApplication() {
 	llvm::Linker* linker = new llvm::Linker(res);
 	loader->aotSnapshot(linker);
 
-	res->dump();
+  std::string err;
+	llvm::tool_output_file out(options()->aotFile, err, llvm::sys::fs::F_Binary);
+  if(!err.empty())
+    fprintf(stderr, "%s\n", err.c_str());
+  else {
+		llvm::PassManager pm;
+    pm.add(llvm::createBitcodeWriterPass(out.os()));
+		pm.run(*res);
+		out.keep();
+	}
 }
 
 void J3::runApplication() {

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=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Mon Jan 20 05:43:14 2014
@@ -99,7 +99,9 @@ J3CodeGen::J3CodeGen(vmkit::BumpAllocato
 	/* only translate of requested and not already translated */
 	if(withMethod() && !llvmFunction) {
 		llvmFunction = buildFunction(method, 0);
-		llvmFunction->setGC("vmkit");
+
+		if(needGC())
+			llvmFunction->setGC("vmkit");
 
 		if(J3Cst::isNative(access))
 			generateNative();

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegenvar.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegenvar.cc?rev=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegenvar.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegenvar.cc Mon Jan 20 05:43:14 2014
@@ -24,8 +24,10 @@ void J3CodeGenVar::killUnused(llvm::Allo
 			llvm::dyn_cast<llvm::StoreInst>(*(cur->use_begin()))->eraseFromParent();
       cur->eraseFromParent();
     } else if(isObj) {
-			codeGen->builder.SetInsertPoint(cur->getNextNode());
-			codeGen->builder.CreateCall2(codeGen->gcRoot, codeGen->builder.CreateBitCast(refStack[i], i8ptrptr), meta);
+			if(codeGen->needGC()) {
+				codeGen->builder.SetInsertPoint(cur->getNextNode());
+				codeGen->builder.CreateCall2(codeGen->gcRoot, codeGen->builder.CreateBitCast(refStack[i], i8ptrptr), meta);
+			}
 			//codeGen->builder.CreateStore(codeGen->nullValue, cur);
 			//
 		}

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=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Mon Jan 20 05:43:14 2014
@@ -62,7 +62,7 @@ void J3Method::aotSnapshot(llvm::Linker*
 void J3Method::ensureCompiled(uint32_t mode) {
 	if(((mode & J3CodeGen::WithMethod) && !fnPtr()) || ((mode & J3CodeGen::WithCaller) && !cxxCaller())) {
 		//fprintf(stderr, "materializing: %s::%s%s\n", cl()->name()->cStr(), name()->cStr(), signature()->name()->cStr());
-		J3CodeGen::translate(this, mode);
+		J3CodeGen::translate(this, mode | cl()->loader()->compilationMode());
  	}
 }
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Mon Jan 20 05:43:14 2014
@@ -74,9 +74,10 @@ void J3CmdLineParser::process() {
 			nyi("-no-jre-restrict-search");
 		else if(opteq("-?") || opteq("-help"))
 			help();
-		else if(opteq("-Xaot"))
+		else if(opteq("-Xaot")) {
 			options->isAOT = 1;
-		else if(opteq("-Xno-aot"))
+			options->aotFile = argv[++cur];
+		} else if(opteq("-Xno-aot"))
 			options->isAOT = 0;
 		else if(optbeg("-X"))
 			nyi("-X");

Modified: vmkit/branches/mcjit/lib/mmtk/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/mmtk/Makefile?rev=199647&r1=199646&r2=199647&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/mmtk/Makefile (original)
+++ vmkit/branches/mcjit/lib/mmtk/Makefile Mon Jan 20 05:43:14 2014
@@ -14,4 +14,4 @@ J3=$(BIN_DIR)/j3
 
 $(BUILD_DIR)/mmtk-llvm.bc: $(BUILD_DIR)/.dir $(J3) $(SELF)
 	$(Echo) "Generating the llvm bytecode of mmtk"
-	$(Verb) $(J3) -Xaot -cp $(MMTK_PATH)/vmmagic-stub/classes/:$(MMTK_PATH)/options/classes/ -jar $(MMTK_PATH)/mmtk/mmtk.jar 
\ No newline at end of file
+	$(Verb) $(J3) -Xaot $@ -cp $(MMTK_PATH)/vmmagic-stub/classes/:$(MMTK_PATH)/options/classes/ -jar $(MMTK_PATH)/mmtk/mmtk.jar 
\ No newline at end of file





More information about the vmkit-commits mailing list