[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