[vmkit-commits] [vmkit] r180415 - generate the inliners

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:14:50 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:07:51 2013
New Revision: 180415

URL: http://llvm.org/viewvc/llvm-project?rev=180415&view=rev
Log:
generate the inliners
(cherry picked from commit ee6edd91df2619ab6c50e283413951e353d4f793)

Added:
    vmkit/trunk/include/vmkit/InlineCommon.h
Removed:
    vmkit/trunk/mmtk/inline/InlineMethods.cpp
    vmkit/trunk/mmtk/inline/Makefile
Modified:
    vmkit/trunk/Makefile.rules
    vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
    vmkit/trunk/mmtk/Makefile
    vmkit/trunk/mmtk/java/Makefile
    vmkit/trunk/mmtk/mmtk-j3/VM.cpp
    vmkit/trunk/tools/j3/Makefile
    vmkit/trunk/tools/precompiler/Precompiler.cpp
    vmkit/trunk/tools/vmjc/vmjc.cpp

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:07:51 2013
@@ -146,6 +146,12 @@ MODULE_A=$(LIB_DIR)/lib$(MODULE).a
 
 all:: $(MODULE_A)
 
+ifdef EXTRACT_FUNCTIONS
+all:: $(LIB_DIR)/$(MODULE)-inliner.o
+MODULE_A_DEP=$(LIB_DIR)/$(MODULE)-inliner.o
+NEED_BC=1
+endif
+
 define all-suffixes
 	$(wildcard *$1) $(filter %$1, $(GEN))
 endef
@@ -166,14 +172,14 @@ ifdef NEED_BC
 # assemble this module and finally create the archive
 all:: $(LIB_DIR)/$(MODULE).bc
 
-$(LIB_DIR)/$(MODULE).bc: $(BUILD_DIR)/$(MODULE)-opt.bc $(LIB_DIR)/.dir
+$(LIB_DIR)/$(MODULE).bc $(LIB_DIR)/$(MODULE)-inliner.bc: $(LIB_DIR)/%.bc: $(BUILD_DIR)/%-opt.bc $(LIB_DIR)/.dir
 	$(Verb) $(CP) $< $@
 
 $(BUILD_DIR)/$(MODULE).bc: $(BC_FILES) $(patsubst %, $(LIB_DIR)/%.bc,$(MODULE_USE))
 	$(Echo) "Linking module '$(notdir $@)'"
 	$(Verb) $(LLVMLINK) $^ -o $@
 
-MODULE_A_DEP=$(BUILD_DIR)/$(MODULE)-opt.o
+MODULE_A_DEP+=$(BUILD_DIR)/$(MODULE)-opt.o
 else
 # for most of the module, we avoid a full module creation, mainly because I have bugs in llc
 # in this case, we build a set of .o files and archive them together
@@ -198,6 +204,29 @@ $(MODULE_A): $(MODULE_A_DEP) $(LIB_DIR)/
 endif
 
 ###############################################################################
+#   Inliner
+###############################################################################
+$(BUILD_DIR)/$(MODULE)-inliner.cc: $(BUILD_DIR)/$(MODULE)-opt.bc $(SELF)
+  # cppgen doesn't like debug info
+	$(Echo) "Generating inliner $(notdir $@)"
+	$(Verb) doit() { \
+						echo '#include "vmkit/InlineCommon.h"'; \
+			    	echo 'using namespace llvm;'; \
+						echo 'namespace vmkit {'; \
+						for F in $(EXTRACT_FUNCTIONS); do \
+							$(LOPT) -strip-debug $< -o - | $(LLC) $(LLC_FLAGS) -march=cpp -cppgen=function -cppfor=$$F -o - \
+									| sed -e "s/makeLLVMFunction/makeLLVMFunction_$(MODULE)_$$F/"; [ $$? -ne 0 ] && exit 1; \
+						done; \
+						echo "void makeLLVMFunctions_$(MODULE)(Module *mod) {"; \
+						for F in $(EXTRACT_FUNCTIONS); do \
+							echo "  vmkit::makeLLVMFunction_$(MODULE)_$$F(mod);"; \
+						done; \
+						echo "}"; \
+						echo "}"; \
+						exit 0; \
+				 }; doit > $@
+
+###############################################################################
 #   Linking
 ###############################################################################
 DEP_LIBS=$(patsubst %,$(LIB_DIR)/lib%.a,$(LINK_USE))
@@ -259,11 +288,11 @@ DOM=then mv -f "$(BUILD_DIR)/$$*.d.tmp"
 
 define define_compile_rule
 $(BUILD_DIR)/%.bc: %$1 $(SELF) $(BUILT_INC) $(BUILD_DIR)/.dir
-	$(Echo) "Compiling '$(notdir $$<)'"
+	$(Echo) "Compiling '$$(notdir $$<)'"
 	$(Verb) if $2 $3 $(DEPEND_OPTIONS) -emit-llvm -c "$$<" -o $$@; $(DOM)
 
 $(BUILD_DIR)/%.bc: $(BUILD_DIR)/%$1 $(BUILT_INC) $(SELF) $(BUILD_DIR)/.dir
-	$(Echo) "Compiling '$(notdir $$<)'"
+	$(Echo) "Compiling '$$(notdir $$<)'"
 	$(Verb) if $2 $3 $(DEPEND_OPTIONS) -emit-llvm -c "$$<" -o $$@; $(DOM)
 endef
 

Added: vmkit/trunk/include/vmkit/InlineCommon.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/InlineCommon.h?rev=180415&view=auto
==============================================================================
--- vmkit/trunk/include/vmkit/InlineCommon.h (added)
+++ vmkit/trunk/include/vmkit/InlineCommon.h Thu Apr 25 12:07:51 2013
@@ -0,0 +1,16 @@
+#ifndef _INLINE_COMMON_H_
+#define _INLINE_COMMON_H_
+
+#include <llvm/CallingConv.h>
+#include <llvm/Constants.h>
+#include <llvm/DerivedTypes.h>
+#include <llvm/Instructions.h>
+#include <llvm/LLVMContext.h>
+#include <llvm/Module.h>
+#include <llvm/Type.h>
+
+namespace vmkit {
+	extern void makeLLVMFunctions_FinalMMTk(llvm::Module*);
+}
+
+#endif

Modified: vmkit/trunk/lib/vmkit/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/Compiler/JIT.cpp?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/vmkit/Compiler/JIT.cpp Thu Apr 25 12:07:51 2013
@@ -43,6 +43,7 @@
 #include "vmkit/Thread.h"
 #include "vmkit/VirtualMachine.h"
 #include "vmkit/GC.h"
+#include "vmkit/InlineCommon.h"
 #include "MutatorThread.h"
 #include "VmkitGC.h"
 
@@ -252,13 +253,11 @@ void VmkitModule::unprotectIR() {
   protectEngine.unlock();
 }
 
-extern "C" void MMTk_InlineMethods(llvm::Module* module);
-
 void BaseIntrinsics::init(llvm::Module* module) {
 
   LLVMContext& Context = module->getContext();
 
-  MMTk_InlineMethods(module);
+	makeLLVMFunctions_FinalMMTk(module);
   llvm_runtime::makeLLVMModuleContents(module);
 
   // Type declaration

Modified: vmkit/trunk/mmtk/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/Makefile?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/mmtk/Makefile (original)
+++ vmkit/trunk/mmtk/Makefile Thu Apr 25 12:07:51 2013
@@ -8,7 +8,7 @@
 ##===----------------------------------------------------------------------===##
 LEVEL = ..
 
-DIRS = magic mmtk-j3 mmtk-alloc java inline
+DIRS = magic mmtk-j3 mmtk-alloc java
 
 include $(LEVEL)/Makefile.common
 

Removed: vmkit/trunk/mmtk/inline/InlineMethods.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/inline/InlineMethods.cpp?rev=180414&view=auto
==============================================================================
--- vmkit/trunk/mmtk/inline/InlineMethods.cpp (original)
+++ vmkit/trunk/mmtk/inline/InlineMethods.cpp (removed)
@@ -1,45 +0,0 @@
-//===-------- InlineMethods.cpp - Initialize the inline methods -----------===//
-//
-//                      The VMKit project
-//
-// This file is distributed under the University of Illinois Open Source 
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <llvm/CallingConv.h>
-#include <llvm/Constants.h>
-#include <llvm/DerivedTypes.h>
-#include <llvm/Instructions.h>
-#include <llvm/LLVMContext.h>
-#include <llvm/Module.h>
-#include <llvm/Type.h>
-
-using namespace llvm;
-
-namespace mmtk {
-
-namespace mmtk_malloc {
-  #include "MMTkMallocInline.inc"
-}
-
-namespace mmtk_array_write {
-  #include "MMTkArrayWriteInline.inc"
-}
-
-namespace mmtk_field_write {
-  #include "MMTkFieldWriteInline.inc"
-}
-
-namespace mmtk_non_heap_write {
-  #include "MMTkNonHeapWriteInline.inc"
-}
-
-}
-
-extern "C" void MMTk_InlineMethods(llvm::Module* module) {
-  mmtk::mmtk_malloc::makeLLVMFunction(module);
-  mmtk::mmtk_field_write::makeLLVMFunction(module);
-  mmtk::mmtk_array_write::makeLLVMFunction(module);
-  mmtk::mmtk_non_heap_write::makeLLVMFunction(module);
-}

Removed: vmkit/trunk/mmtk/inline/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/inline/Makefile?rev=180414&view=auto
==============================================================================
--- vmkit/trunk/mmtk/inline/Makefile (original)
+++ vmkit/trunk/mmtk/inline/Makefile (removed)
@@ -1,13 +0,0 @@
-##===- lib/vmkit/CommonThread/Makefile -----------------------*- Makefile -*-===##
-# 
-#                     The vmkit project
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-# 
-##===----------------------------------------------------------------------===##
-LEVEL = ../..
-
-MODULE_WITH_GC = InlineMMTk
-
-include $(LEVEL)/Makefile.common

Modified: vmkit/trunk/mmtk/java/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/Makefile?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/mmtk/java/Makefile (original)
+++ vmkit/trunk/mmtk/java/Makefile Thu Apr 25 12:07:51 2013
@@ -11,8 +11,8 @@ LEVEL = ../..
 GEN=mmtk-vmkit.bc
 MODULE=FinalMMTk
 MODULE_USE=MMTKAlloc MMTKRuntime
-NEED_BC=1
 NEED_GC=1
+EXTRACT_FUNCTIONS=VTgcmalloc fieldWriteBarrier arrayWriteBarrier nonHeapWriteBarrier
 
 include $(LEVEL)/Makefile.common
 

Modified: vmkit/trunk/mmtk/mmtk-j3/VM.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/VM.cpp?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/VM.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/VM.cpp Thu Apr 25 12:07:51 2013
@@ -76,6 +76,7 @@ extern "C" bool Java_org_j3_runtime_VM_b
 }
 
 extern "C" bool Java_org_j3_runtime_VM_verifyAssertions__ () {
+	// TODO: MUST UPDATE THIS COMMENT AND TRY TO UNDERSTAND HOW IT WORKS
   // Note that DEBUG is defined in make ENABLE_OPTIMIZED=1.
   // You must provide DISABLE_ASSERTIONS=1 to not have DEBUG defined.
   // To generate MMTkInline.inc, this function returns false.

Modified: vmkit/trunk/tools/j3/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/j3/Makefile?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/tools/j3/Makefile (original)
+++ vmkit/trunk/tools/j3/Makefile Thu Apr 25 12:07:51 2013
@@ -9,6 +9,6 @@
 LEVEL = ../..
 
 TOOL=j3
-LINK_USE=Classpath J3 J3Compiler Vmkit VmkitCompiler CommonThread FinalMMTk InlineMMTk Precompiled BootstrapClasses
+LINK_USE=Classpath J3 J3Compiler Vmkit VmkitCompiler CommonThread FinalMMTk Precompiled BootstrapClasses
 
 include $(LEVEL)/Makefile.common

Modified: vmkit/trunk/tools/precompiler/Precompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/Precompiler.cpp?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/tools/precompiler/Precompiler.cpp (original)
+++ vmkit/trunk/tools/precompiler/Precompiler.cpp Thu Apr 25 12:07:51 2013
@@ -20,6 +20,7 @@
 #include "vmkit/MethodInfo.h"
 #include "vmkit/VirtualMachine.h"
 #include "vmkit/Thread.h"
+#include "vmkit/InlineCommon.h"
 
 #include "j3/JavaAOTCompiler.h"
 #include "j3/JavaJITCompiler.h"
@@ -111,5 +112,5 @@ int main(int argc, char **argv, char **e
 
 // Because we don't want inlined methods to show up in the result
 // precompiled code, provide this method in order to link.
-extern "C" void MMTk_InlineMethods(llvm::Module* module) {
+extern "C" void vmkit::makeLLVMFunctions_FinalMMTk(llvm::Module* module) {
 }

Modified: vmkit/trunk/tools/vmjc/vmjc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/vmjc/vmjc.cpp?rev=180415&r1=180414&r2=180415&view=diff
==============================================================================
--- vmkit/trunk/tools/vmjc/vmjc.cpp (original)
+++ vmkit/trunk/tools/vmjc/vmjc.cpp Thu Apr 25 12:07:51 2013
@@ -42,6 +42,7 @@
 #include "vmkit/JIT.h"
 #include "vmkit/VirtualMachine.h"
 #include "vmkit/Thread.h"
+#include "vmkit/InlineCommon.h"
 
 #include "j3/JavaAOTCompiler.h"
 
@@ -205,5 +206,5 @@ int main(int argc, char **argv) {
 }
 
 // Because MMTk has not been created yet, provide this method in order to link.
-extern "C" void MMTk_InlineMethods(llvm::Module* module) {
+extern "C" void vmkit::makeLLVMFunctions_FinalMMTk(llvm::Module* module) {
 }





More information about the vmkit-commits mailing list