[vmkit-commits] [vmkit] r180444 - Split prepare-code into two directories. Required for linux x86 because 'opt' does not embedded the GCMetaData printer class.

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


Author: peter.senna
Date: Thu Apr 25 12:10:19 2013
New Revision: 180444

URL: http://llvm.org/viewvc/llvm-project?rev=180444&view=rev
Log:
Split prepare-code into two directories. Required for linux x86 because 'opt' does not embedded the GCMetaData printer class.
(cherry picked from commit a233c83a66dded47700af1a6f11ac255828e0b72)

Added:
    vmkit/trunk/lib/static-gc-pass/
    vmkit/trunk/lib/static-gc-pass/Makefile
      - copied, changed from r180443, vmkit/trunk/lib/prepare-code/Makefile
    vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp
      - copied, changed from r180443, vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
    vmkit/trunk/lib/static-gc-printer/
    vmkit/trunk/lib/static-gc-printer/Makefile
      - copied, changed from r180443, vmkit/trunk/lib/prepare-code/Makefile
    vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp
      - copied, changed from r180443, vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
Removed:
    vmkit/trunk/lib/prepare-code/Makefile
    vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
    vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
Modified:
    vmkit/trunk/Makefile
    vmkit/trunk/Makefile.common.in
    vmkit/trunk/Makefile.rules
    vmkit/trunk/tools/trainer/Makefile

Modified: vmkit/trunk/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/Makefile (original)
+++ vmkit/trunk/Makefile Thu Apr 25 12:10:19 2013
@@ -9,6 +9,6 @@
 
 LEVEL := .
 
-DIRS := lib/prepare-code lib tools/vmjc mmtk tools/precompiler tools/trainer tools
+DIRS := lib/static-gc-pass lib/static-gc-printer lib tools/vmjc mmtk tools/precompiler tools/trainer tools
 
 include $(LEVEL)/Makefile.common

Modified: vmkit/trunk/Makefile.common.in
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.common.in?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/Makefile.common.in (original)
+++ vmkit/trunk/Makefile.common.in Thu Apr 25 12:10:19 2013
@@ -77,7 +77,7 @@ Archive=@AR@ cru
 Ranlib=@RANLIB@
 NM=@NM@
 LD=@LD@
-MKDIR=mkdir -p @MKDIR@
+MKDIR=@MKDIR_P@
 TOUCH=@TOUCH@
 GREP=@GREP@
 

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:10:19 2013
@@ -1,177 +1,327 @@
-VMJC      := $(ToolDir)/vmjc$(EXEEXT)
 
+.PHONY: all tidy clean distclean confclean
+.SECONDARY:
+.SUFFIXES:
+#.SUFFIXES: .c .cpp .cxx .cc .h .hpp .o .a .bc .ll .jar $(SHLIBEXT) $(EXEEXT)
+
+all::
+
+###############################################################################
+#   Main options
+###############################################################################
+ifeq ($(OPTIMIZED),1)
+  BUILD_NAME:=Release
+  ifeq ($(DEBUG),1)
+    BUILD_NAME:=$(BUILD_NAME)+Debug
+  endif
+else
+	$(warning "Non-optimized mode compile but the executable is broken")
+  ifeq ($(DEBUG),1)
+    BUILD_NAME:=Debug
+  else
+    BUILD_NAME:=Unoptimized
+  endif
+endif
 
-# Set the LLVM build file location 
-LLVMBuildTool   := $(LLVM_SRC_ROOT)/utils/llvm-build/llvm-build
+ifeq ($(ASSERT),1)
+  BUILD_NAME:=$(BUILD_NAME)+Asserts
+else
+  COMMON_CFLAGS+=-DNDEBUG
+endif
 
-###############################################################################
-# VMKIT_RUNTIME: Provide rules to build a .cpp file with LLVM instructions
-#                generating code matching the .ll files.
-###############################################################################
+ifeq ($(DEBUG),1)
+  COMMON_CFLAGS+=-g
+endif
 
-ifdef VMKIT_RUNTIME
+ifeq ($(OPTIMIZED),1)
+  LLC_FLAGS+= -O=3
+  OPT_FLAGS+= -disable-opt
+  COMMON_CFLAGS+= -O3
+else
+  LLC_FLAGS+= -O=0 
+  OPT_FLAGS+= -inline # unable to find which function I have to mark as always_inline... We have to investigate...
+  COMMON_CFLAGS+= -O0
+endif
 
-.PRECIOUS: LLVMRuntime.inc
+LLC_FLAGS+=-disable-cfi -disable-fp-elim -relocation-model=pic 
+OPT_FLAGS+=-disable-cfi -disable-fp-elim 
 
-LLVMRuntime.inc : $(LLVMAS) $(LLC) $(VMKIT_RUNTIME)
-	$(Echo) "Building LLVM runtime with $(VMKIT_RUNTIME)"
-	$(Verb) cat $(VMKIT_RUNTIME) | $(LLVMAS) -o - | $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=contents -o $@
+INCLUDES+=-I$(PROJ_SRC_CWD) -I$(PROJ_SRC_ROOT)/include -I$(PROJ_SRC_ROOT)/lib/vmkit/MMTk -I$(BUILD_DIR) \
+					-I$(shell $(LLVM_CONFIG) --includedir)
 
-all-local:: LLVMRuntime.inc
+WARN_CFLAGS=  -Wall -Wno-long-long -Wno-variadic-macros -Wno-unused-private-field -Wno-unused-variable
+COMMON_CFLAGS+= $(INCLUDES) -ansi -pedantic $(WARN_CFLAGS) -fPIC \
+								-D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \
+								-fno-strict-aliasing -fno-omit-frame-pointer -fvisibility-inlines-hidden 
 
-clean-local::
-	$(Verb) $(RM) -f LLVMRuntime.inc
+CFLAGS+=$(COMMON_CFLAGS) 
+CXXFLAGS+=$(COMMON_CFLAGS) -Woverloaded-virtual -Wcast-qual -fno-rtti -fno-exceptions
+LDFLAGS+=$(shell $(LLVM_CONFIG) --ldflags) $(LDOPT)
+LIBS+=$(shell $(LLVM_CONFIG) --libs) -lz
 
-endif
+DEPEND_OPTIONS=-MMD -MP -MF "$(BUILD_DIR)/$$*.d.tmp" -MT "$(BUILD_DIR)/$$*.bc" -MT "$(BUILD_DIR)/$$*.d"
+DOM=then mv -f "$(BUILD_DIR)/$$*.d.tmp" "$(BUILD_DIR)/$$*.d"; else rm -f "$(BUILD_DIR)/$$*.d.tmp"; exit 1; fi
 
 ###############################################################################
-# VMJC_ASSEMBLY: Provide rules to build glibj.zip.s.
+#   Nice printing
 ###############################################################################
+ifndef PROF
+PROF=.
+all::
+	$(Echo) "Entering compilation process"
+endif
 
-ifdef VMJC_ASSEMBLY
+EchoMsg="[$(PROJECT_NAME) $(PROF)]:"
+Echo=@echo $(EchoMsg)
 
-.PRECIOUS: glibj.zip.s
+ifndef VERBOSE
+	SUB_OPT=--no-print-directory
+  Verb:=@
+endif
 
-glibj.zip.s : $(LOPT) $(LLC) $(VMJC)
+###############################################################################
+#   Recursive target managment
+###############################################################################
+RECURSIVE_TARGETS=all clean distclean
 
-glibj.zip.bc :
-	$(Echo) "Compiling glibj.zip to llvm"
-	$(Verb) if test -d $(GLIBJ); then \
-	  $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ)/glibj.zip -o glibj.zip.bc; \
-	else \
-	  $(VMJC) -f $(VMJC_GLIBJ_FLAGS) $(GLIBJ) -o glibj.zip.bc; \
-	fi
-	
-glibj-optimized.zip.bc : glibj.zip.bc
-	$(Echo) "Optimizing glibj.zip"
-	$(Verb) $(LOPT) $(OPT_VMJC_FLAGS) -f glibj.zip.bc -o glibj-optimized.zip.bc
+$(RECURSIVE_TARGETS)::
+	$(Verb) for f in $(DIRS); do \
+		$(MAKE) $(SUB_OPT) -C $$f $@ PROF=$(PROF)/$$f; \
+		if [ $$? != 0 ]; then echo "$(EchoMsg) abort with error in $(PROF)/$$f"; exit 1; fi \
+	done; exit 0;
 
-glibj.zip.s : glibj-optimized.zip.bc
-	$(Echo) "Compiling glibj.zip.bc to native"
-	$(Verb) $(LLC) $(LLC_GLIBJ_FLAGS) -disable-cfi -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o glibj.zip.s
+tidy:
+	$(Echo) Cleaning temporary files
+	$(Verb) find $(PROJ_OBJ_ROOT) -iname "*~" -exec rm -f {} \;
 
-$(ObjDir)/%.o: %.s $(ObjDir)/.dir $(BUILT_SOURCES)
-	$(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
-	$(Verb) $(Compile.C) $< -o $(ObjDir)/$*.o
+clean::
+	$(Echo) "Cleaning compilation files"
+	$(Verb) rm -Rf $(BUILD_NAME)
 
-clean-local::
-	$(Verb) $(RM) -f glibj.zip.s glibj.zip.bc glibj-optimized.zip.bc
-endif
+distclean::
+	$(Echo) "Cleaning all compilation files"
+	$(Verb) rm -Rf Release* Debug* Unoptimized*
+
+confclean: clean
+	$(Echo) Cleaning configuration
+	$(Verb) rm -Rf $(PROJ_OBJ_ROOT)/Makefile.common
+	$(Verb) rm -Rf $(PROJ_OBJ_ROOT)/config.status $(PROJ_OBJ_ROOT)/config.log
+	$(Verb) rm -Rf $(PROJ_OBJ_ROOT)/autoconf/autom4te.cache $(PROJ_OBJ_ROOT)/autoconf/configure.bak
+
+%/.dir:
+	$(Verb) $(MKDIR) $(dir $@) && $(TOUCH) $@
 
 ###############################################################################
-# RUN_ANT: Provide rules to build MMTk into a .o file and inlining facilities.
+#   Build system managment
 ###############################################################################
+#SELF=$(PROJ_SRC_ROOT)/Makefile.rules $(PROJ_OBJ_ROOT)/Makefile.common Makefile
 
-ifdef RUN_ANT
+$(LEVEL)/Makefile.common: $(PROJ_OBJ_ROOT)/Makefile.common
 
-MMTkLib = $(LibDir)/libFinalMMTk.a
-
-ifeq ($(shell [ ! -e $(MMTkLib) ] && echo "1"), 1)
-  COMPILE_MMTK = 1
-endif
+define define_config_rule
+$$(PROJ_OBJ_ROOT)/$1: $$(PROJ_SRC_ROOT)/$1.in $$(PROJ_SRC_ROOT)/configure
+	$(Echo) "Regenerating project files $$1"
+	$(Verb) cd $(PROJ_OBJ_ROOT) && ./config.status -q --$2=$1
+	$(Verb) touch $$@
+endef
 
-ifeq ($(COMPILE_MMTK), 1)
-  all::
-	$(Verb) $(ANT) -buildfile $(PROJ_OBJ_ROOT)/mmtk/java/build.xml
-	$(Echo) Building $(BuildMode) $(JARNAME).jar $(notdir $@)
-	$(Verb) $(LOPT) -load=$(LibDir)/JITGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -JITGCPass -f $(LibDir)/MMTKAlloc.bc -o $(LibDir)/MMTKAlloc.bc
-	$(Verb) $(VMJC) $(VMJC_MMTK_FLAGS) -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) $(OPT_MMTK_FLAGS) -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc
-	$(Verb) $(LLVMLINK) -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
-	$(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc
-	$(Verb) $(MKDIR) $(ObjDir)
-	$(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s
-	$(Verb) $(GREP) -v '\.loc[^0-9]\+[0-9]\+ 0' $(ObjDir)/FinalMMTk.s > $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc
-	$(Verb) $(MV) -f $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc $(ObjDir)/FinalMMTk.s
-	$(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o
-	$(Verb) $(Archive) $(LibDir)/libFinalMMTk.a $(ObjDir)/FinalMMTk.o
-	$(Verb) $(Ranlib) $(LibDir)/libFinalMMTk.a
-	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=VTgcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkVTMallocInline.inc
-	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=vmkitgcmalloc $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkVMKitMallocInline.inc
-	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=fieldWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkFieldWriteInline.inc
-	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=arrayWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkArrayWriteInline.inc
-	$(Verb) $(LLC) $(LLC_CPP_FLAGS) -march=cpp -cppgen=function -cppfor=nonHeapWriteBarrier $(LibDir)/FinalMMTk.bc -o $(PROJ_SRC_ROOT)/mmtk/inline/MMTkNonHeapWriteInline.inc
-endif
+$(foreach cur,$(CONFIG_FILES),$(eval $(call define_config_rule,$(cur),file)))
+$(foreach cur,$(CONFIG_HEADERS),$(eval $(call define_config_rule,$(cur),header)))
 
-clean-local::
-	$(Verb) $(RM) -rf classes $(JARNAME).jar $(JARNAME).bc $(JARNAME)-optimized.bc $(ObjDir)
-endif
+$(PROJ_OBJ_ROOT)/configure: $(PROJ_SRC_ROOT)/autoconf/configure.ac $(PROJ_SRC_ROOT)/autoconf/AutoRegen.sh 
+	$(Echo) "Rebootstraping project"
+	$(Verb) cd $(PROJ_SRC_ROOT)/autoconf && ./AutoRegen.sh
+	$(Verb) cd $(PROJ_OBJ_ROOT) && ./config.status --recheck
 
 ###############################################################################
-# MODULE_WITH_GC: Provide rules for building .cpp files into an archive with
-#                 GC symbol information.
+#   Build directories and generated binaries
 ###############################################################################
+BIN_DIR=$(PROJ_OBJ_ROOT)/$(BUILD_NAME)/bin
+LIB_DIR=$(PROJ_OBJ_ROOT)/$(BUILD_NAME)/lib
+BUILD_DIR=$(PROJ_OBJ_CWD)/$(BUILD_NAME)
 
-ifdef MODULE_WITH_GC
+STATIC_GC_PASS_LIB=$(LIB_DIR)/static-gc-pass$(SHLIBEXT)
+STATIC_GC_PRINTER_LIB=$(LIB_DIR)/static-gc-printer$(SHLIBEXT)
+VMJC=$(BIN_DIR)/vmjc$(EXEEXT)
+PRECOMPILER=$(BIN_DIR)/precompiler
 
-ObjectsBCWithGC   := $(BaseNameSources:%=$(ObjDir)/%_gc.bc)
-ObjectsSWithGC    := $(BaseNameSources:%=$(ObjDir)/%_gc.s)
-ObjectsWithGC     := $(BaseNameSources:%=$(ObjDir)/%_gc.o)
-AModule           := $(LibDir)/lib$(MODULE_WITH_GC).a
-
-$(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.ll $(LOPT)
-	$(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
-	$(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) $(OPT_BC_WITH_GC_FLAGS) -StaticGCPass -o $@
-
-$(ObjectsSWithGC): $(ObjDir)/%_gc.s: $(ObjDir)/%_gc.bc $(LLC)
-	$(Echo) "Compiling $*.bc to $*.s for $(BuildMode) build"
-	$(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@
-
-$(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.s $(ObjDir)/.dir
-	$(Echo) "Compiling $*.s for $(BuildMode) build" $(PIC_FLAG)
-	$(Verb) $(Compile.C) $< -o $@
+###############################################################################
+#   Main targets
+###############################################################################
+ifdef TOOL
+MODULE=$(TOOL)
 
-$(AModule): $(ObjectsWithGC) $(LibDir)/.dir
-	$(Echo) Building $(BuildMode) Archive Library $(notdir $@)
-	-$(Verb) $(RM) -f $@
-	$(Verb) $(Archive) $@ $(ObjectsWithGC)
-	$(Verb) $(Ranlib) $@
+all:: $(BIN_DIR)/$(TOOL)$(EXEEXT)
+endif
 
-all-local:: $(AModule)
+ifdef LIBRARY
+MODULE=$(LIBRARY)
 
-clean-local::
-	-$(Verb) $(RM) -f $(AModule) $(ObjectsBCWithGC) $(ObjectsSWithGC) $(ObjectsWithGC)
+all:: $(LIB_DIR)/$(LIBRARY)$(SHLIBEXT)
+endif
 
+ifdef MODULE_WITH_GC
+MODULE=$(MODULE_WITH_GC)
+NEED_GC=1
 endif
 
 ###############################################################################
-# BUILD_FRAMETABLE: Generate files for easy access of frametables at runtime.
+#   GC passes
 ###############################################################################
+ifdef NEED_GC
+LLC_GC_FLAGS+=-load=$(STATIC_GC_PRINTER_LIB)
+GC_ID=-gc
+
+%$(GC_ID).bc: %.bc
+	$(Echo) "Preparing GC '$(notdir $<)'"
+	$(Verb) $(LOPT) -load=$(STATIC_GC_PASS_LIB) -StaticGCPass $(OPT_FLAGS) $< -o $@
 
-ifdef BUILD_FRAMETABLE
+endif
 
-FrametablesExterns.inc: $(ProjLibsPaths)
-	$(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/' > $@
+###############################################################################
+#   Module
+###############################################################################
+ifdef MODULE
 
-FrametablesSymbols.inc: $(ProjLibsPaths)
-	$(Verb) nm $(ProjLibsPaths) | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/' > $@
+MODULE_A=$(LIB_DIR)/lib$(MODULE).a
 
-all-local:: FrametablesExterns.inc FrametablesSymbols.inc
+all:: $(MODULE_A)
 
-clean-local::
-	-$(Verb) $(RM) -f FrametablesExterns.inc FrametablesSymbols.inc
-	
+ifdef EXTRACT_FUNCTIONS
+all:: $(LIB_DIR)/$(MODULE)-inliner.o
+MODULE_A_DEP=$(LIB_DIR)/$(MODULE)-inliner.o
+NEED_BC=1
 endif
 
-###############################################################################
-# COMPILE_OPENJDK_ZIP: Build the specified java sources and zip them up
-###############################################################################
-ifeq ($(COMPILE_OPENJDK_ZIP), 1)
+define all-suffixes
+	$(wildcard *$1) $(filter %$1, $(GEN))
+endef
+
+CLANG_FILES=$(patsubst %.c,$(BUILD_DIR)/%,$(call all-suffixes,.c)) \
+            $(patsubst %.cc,$(BUILD_DIR)/%,$(call all-suffixes,.cc)) \
+            $(patsubst %.cpp,$(BUILD_DIR)/%,$(call all-suffixes,.cpp))
+
+BC_FILES=$(addsuffix .bc,$(CLANG_FILES)) $(addprefix $(BUILD_DIR)/,$(filter %.bc, $(GEN)))
+
+ifdef NEED_BC
+# if we need bytecode, we link a module with all the bc in the build_dir directory, optimize this module
+# assemble this module and finally create the archive
+all:: $(LIB_DIR)/$(MODULE).bc
+
+$(LIB_DIR)/$(MODULE).bc $(LIB_DIR)/$(MODULE)-inliner.bc: $(LIB_DIR)/%.bc: $(BUILD_DIR)/%$(GC_ID).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)$(GC_ID).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
+# each .o is optimized and assembled
+MODULE_A_DEP=$(patsubst %.bc,%$(GC_ID).o,$(BC_FILES)) $(patsubst %, $(LIB_DIR)/lib%.a,$(MODULE_USE))
+endif
 
-# Some variables
-VMKIT_OPENJDK_ZIP=$(PROJ_OBJ_DIR)/vmkit-openjdk.zip
-CLASSES_DIR=$(PROJ_OBJ_DIR)/classes
+$(MODULE_A): $(MODULE_A_DEP) $(LIB_DIR)/.dir
+	$(Echo) "Building archive '$(notdir $@)'"
+	-$(Verb) $(RM) -f $@
+	$(Verb) $(Archive) $@ $(MODULE_A_DEP)
+	$(Verb) $(Ranlib) $@
 
-all-local:: $(VMKIT_OPENJDK_ZIP)
-clean-local::
-	-$(Verb) $(RM) -f $(CLASSES_DIR) $(VMKIT_OPENJDK_ZIP)
+endif
 
+###############################################################################
+#   Inliner
+###############################################################################
+$(BUILD_DIR)/$(MODULE)-inliner.cc: $(BUILD_DIR)/$(MODULE)$(GC_ID).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))
+
+$(BIN_DIR)/$(TOOL)$(EXEEXT): $(MODULE_A) $(DEP_LIBS) $(BUILD_DIR)/frametables.o $(SELF) $(BIN_DIR)/.dir
+	$(Echo) "Linking executable '$(notdir $@)'"
+	$(Verb) $(CLANGXX) -o $@  $(LDFLAGS) $(MODULE_A) $(BUILD_DIR)/frametables.o $(DEP_LIBS) $(DEP_LIBS) $(LIBS)
+
+$(LIB_DIR)/$(LIBRARY)$(SHLIBEXT): $(MODULE_A) $(DEP_LIBS) $(SELF) $(LIB_DIR)/.dir
+	$(Echo) "Linking shared library '$(notdir $@)'"
+	$(Verb) $(CLANGXX) -O0 -o $@ $(SHOPT) -shared -Wl,--whole-archive $(MODULE_A) -Wl,--no-whole-archive $(DEP_LIBS)
+
+###############################################################################
+#   Frametables
+###############################################################################
+$(BUILD_DIR)/frametables.cc: $(MODULE_A) $(DEP_LIBS) $(SELF) $(BUILD_DIR)/.dir 
+	$(Echo) "Generating frametables of $(notdir $(TOOL))" #$(notdir $(DEP_LIBS))"
+	$(Verb) doit() { \
+						F="$(MODULE_A) $(DEP_LIBS)"; \
+	          echo '#include "vmkit/MethodInfo.h"'; \
+						echo 'using namespace vmkit;'; \
+						$(NM) $$F | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/extern "C" CompiledFrames \3;/'; \
+						echo 'CompiledFrames* vmkit::initialFrametables[] = {'; \
+						$(NM) $$F | grep __frametable | sed 's/\([a-f0-9]*\) \([a-zA-Z]*\) _*\([a-zA-Z0-9_]*\)/\&\3,/'; \
+						echo "0"; \
+						echo "};"; \
+					}; doit > $@
+
+###############################################################################
+# vmkit runtime generated files
+###############################################################################
+ifdef VMKIT_RUNTIME_OUT
+all:: $(BUILD_DIR)/$(VMKIT_RUNTIME_OUT)
+
+BUILT_INC+=$(BUILD_DIR)/$(VMKIT_RUNTIME_OUT)
+
+$(BUILD_DIR)/$(VMKIT_RUNTIME_OUT): $(VMKIT_RUNTIME_IN) $(SELF) $(BUILD_DIR)/.dir
+	$(Echo) "Generating '$(notdir $@)'"
+	$(Verb) cat $(VMKIT_RUNTIME_IN) | $(LLVMAS) -o - | $(LLC) $(LLC_FLAGS) -march=cpp -cppgen=contents -o $@
 
-$(VMKIT_OPENJDK_ZIP): $(addprefix $(PROJ_SRC_DIR)/,$(OPENJDK_JAVA_SOURCES))
-	$(Echo) "Building OpenJDK java sources into zip"
-	-$(Verb) $(RM) -rf $@ $(CLASSES_DIR)
-	$(Verb) $(MKDIR) $(CLASSES_DIR)
-	$(Verb) $(JAVAC) $^ -d $(CLASSES_DIR)
-	cd $(CLASSES_DIR) && $(ZIP) -qr $(VMKIT_OPENJDK_ZIP) .
+endif
 
+###############################################################################
+# object rules
+###############################################################################
+%.o: %.bc
+	$(Echo) "Assembling '$(notdir $<)'"
+	$(Verb) $(LLC) $(LLC_FLAGS) $(LLC_GC_FLAGS) -filetype=obj $< -o $@
+
+define define_compile_rule
+$(BUILD_DIR)/%.bc: %$1 $(BUILT_INC) $(SELF) $(BUILD_DIR)/.dir
+	$(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 $$<)'"
+	$(Verb) if $2 $3 $(DEPEND_OPTIONS) -emit-llvm -c "$$<" -o $$@; $(DOM)
+endef
+
+$(eval $(call define_compile_rule,.cpp,$(CLANGXX),$(CXXFLAGS)))
+$(eval $(call define_compile_rule,.cc,$(CLANGXX),$(CXXFLAGS)))
+$(eval $(call define_compile_rule,.c,$(CLANG),$(CFLAGS)))
+
+ifneq ($(MAKECMDGOALS),tidy)
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(MAKECMDGOALS),distclean)
+-include $(addsuffix .d,$(CLANG_FILES))
+endif
+endif
 endif

Removed: vmkit/trunk/lib/prepare-code/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/Makefile?rev=180443&view=auto
==============================================================================
--- vmkit/trunk/lib/prepare-code/Makefile (original)
+++ vmkit/trunk/lib/prepare-code/Makefile (removed)
@@ -1,16 +0,0 @@
-##===- lib/vmkit/StaticGCPass/Makefile -----------------------*- Makefile -*-===##
-#
-#                            The VMKit project
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===----------------------------------------------------------------------===##
-
-LEVEL = ../..
-
-LIBRARY=prepare-code
-LOADABLE_MODULE = 1
-
-include $(LEVEL)/Makefile.common
-

Removed: vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/StaticGCPass.cpp?rev=180443&view=auto
==============================================================================
--- vmkit/trunk/lib/prepare-code/StaticGCPass.cpp (original)
+++ vmkit/trunk/lib/prepare-code/StaticGCPass.cpp (removed)
@@ -1,77 +0,0 @@
-//===---- StaticGCPass.cpp - Put GC information in functions compiled --------//
-//===----------------------- with llvm-gcc --------------------------------===//
-//
-//                     The VMKit project
-//
-// This file is distributed under the University of Illinois Open Source 
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-
-#include "llvm/Intrinsics.h"
-#include "llvm/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <cstdio>
-
-using namespace llvm;
-
-namespace {
-
-  class StaticGCPass : public ModulePass {
-  public:
-    static char ID;
-    
-    StaticGCPass() : ModulePass(ID) {}
-
-    virtual bool runOnModule(Module& M);
-
-    /// getAnalysisUsage - We do not modify anything.
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.setPreservesAll();
-    } 
-
-  };
-
-  char StaticGCPass::ID = 0;
-  RegisterPass<StaticGCPass> X("StaticGCPass",
-                      "Add GC information in files compiled with llvm-gcc");
-
-bool StaticGCPass::runOnModule(Module& M) {
-
-  Function* F = M.getFunction("__llvm_gcroot");
-  Function *gcrootFun = Intrinsic::getDeclaration(&M, Intrinsic::gcroot);
-
-  if (F) {
-    F->replaceAllUsesWith(gcrootFun);
-    F->eraseFromParent();
-  }
-
-  bool error = false;
-  for (Value::use_iterator I = gcrootFun->use_begin(),
-       E = gcrootFun->use_end(); I != E; ++I) {
-    if (Instruction* II = dyn_cast<Instruction>(*I)) {
-      Function* F = II->getParent()->getParent();
-      if (!F->hasGC()) {
-        F->setGC("vmkit");
-      }
-    }
-  }
-
-  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
-    if (I->hasGC() && I->hasInternalLinkage()) {
-      error = true;
-      fprintf(stderr, "Method %s has static linkage but uses gc_root. "
-                      "Functions using gc_root should not have static linkage.\n",
-                      I->getName().data());
-    }
-  }
-
-  if (error) abort();
-
-  return true;
-}
-
-}

Removed: vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp?rev=180443&view=auto
==============================================================================
--- vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp (original)
+++ vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp (removed)
@@ -1,382 +0,0 @@
-//===----- VmkitAOTGC.cpp - Support for Ahead of Time Compiler GC -------===//
-//
-//                            The Vmkit project
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Type.h"
-#include "llvm/CodeGen/GCs.h"
-#include "llvm/CodeGen/GCStrategy.h"
-#include "llvm/CodeGen/AsmPrinter.h"
-#include "llvm/CodeGen/GCMetadataPrinter.h"
-#include "llvm/CodeGen/MachineFunction.h"
-#include "llvm/CodeGen/MachineInstrBuilder.h"
-#include "llvm/Module.h"
-#include "llvm/MC/MCAsmInfo.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCSymbol.h"
-#include "llvm/MC/MCStreamer.h"
-#include "llvm/Target/Mangler.h"
-#include "llvm/DataLayout.h"
-#include "llvm/Target/TargetInstrInfo.h"
-#include "llvm/Target/TargetLoweringObjectFile.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/Compiler.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/FormattedStream.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cctype>
-#include <cstdio>
-
-using namespace llvm;
-
-namespace {
-  class VmkitAOTGC : public GCStrategy {
-  public:
-    VmkitAOTGC();
-    virtual bool findCustomSafePoints(GCFunctionInfo& FI, MachineFunction& MF);
-  };
-}
-
-static GCRegistry::Add<VmkitAOTGC>
-X("vmkit", "Vmkit GC for AOT-generated functions");
-
-VmkitAOTGC::VmkitAOTGC() {
-  CustomSafePoints = true;
-  UsesMetadata = true;
-}
-
-
-static MCSymbol *InsertLabel(MachineBasicBlock &MBB, 
-                             MachineBasicBlock::iterator MI,
-                             DebugLoc DL) {
-  const TargetInstrInfo* TII = MBB.getParent()->getTarget().getInstrInfo();
-  MCSymbol *Label = MBB.getParent()->getContext().CreateTempSymbol();
-  BuildMI(MBB, MI, DL, TII->get(TargetOpcode::GC_LABEL)).addSym(Label);
-  return Label;
-}
-
-
-bool VmkitAOTGC::findCustomSafePoints(GCFunctionInfo& FI, MachineFunction &MF) {
-  for (MachineFunction::iterator BBI = MF.begin(),
-                                 BBE = MF.end(); BBI != BBE; ++BBI) {
-    for (MachineBasicBlock::iterator MI = BBI->begin(),
-                                     ME = BBI->end(); MI != ME; ++MI) {
-      if (MI->getDesc().isCall()) {
-        MachineBasicBlock::iterator RAI = MI; ++RAI;                                
-        MCSymbol* Label = InsertLabel(*MI->getParent(), RAI, MI->getDebugLoc());
-        FI.addSafePoint(GC::PostCall, Label, MI->getDebugLoc());
-      } else if (MI->getDebugLoc().getCol() == 1) {
-        MCSymbol* Label = InsertLabel(*MI->getParent(), MI, MI->getDebugLoc());
-        FI.addSafePoint(GC::Loop, Label, MI->getDebugLoc());
-      }
-    }
-  }
-  return false;
-}
-
-
-namespace {
-
-  class VmkitAOTGCMetadataPrinter : public GCMetadataPrinter {
-  public:
-    void beginAssembly(AsmPrinter &AP);
-    void finishAssembly(AsmPrinter &AP);
-  };
-
-}
-
-static GCMetadataPrinterRegistry::Add<VmkitAOTGCMetadataPrinter>
-Y("vmkit", "Vmkit GC for AOT-generated functions");
-
-void VmkitAOTGCMetadataPrinter::beginAssembly(AsmPrinter &AP) {
-}
-
-static bool isAcceptableChar(char C) {
-  if ((C < 'a' || C > 'z') &&
-      (C < 'A' || C > 'Z') &&
-      (C < '0' || C > '9') &&
-      C != '_' && C != '$' && C != '@') {
-    return false;
-  }
-  return true;
-}
-
-static char HexDigit(int V) {
-  return V < 10 ? V+'0' : V+'A'-10;
-}
-
-static void MangleLetter(SmallVectorImpl<char> &OutName, unsigned char C) {
-  OutName.push_back('_');
-  OutName.push_back(HexDigit(C >> 4));
-  OutName.push_back(HexDigit(C & 15));
-  OutName.push_back('_');
-}
-
-
-static void EmitVmkitGlobal(const Module &M, AsmPrinter &AP, const char *Id) {
-  const std::string &MId = M.getModuleIdentifier();
-
-  std::string SymName;
-  SymName += "vmkit";
-  size_t Letter = SymName.size();
-  SymName += MId;
-  SymName += "__";
-  SymName += Id;
-
-  // Capitalize the first letter of the module name.
-  SymName[Letter] = toupper(SymName[Letter]);
-
-  SmallString<128> TmpStr;
-  AP.Mang->getNameWithPrefix(TmpStr, SymName);
-
-  SmallString<128> FinalStr;
-  for (unsigned i = 0, e = TmpStr.size(); i != e; ++i) {
-    if (!isAcceptableChar(TmpStr[i])) {
-      MangleLetter(FinalStr, TmpStr[i]);
-    } else {
-      FinalStr.push_back(TmpStr[i]);
-    }
-  }
-
-  MCSymbol *Sym = AP.OutContext.GetOrCreateSymbol(FinalStr);
-
-  AP.OutStreamer.EmitSymbolAttribute(Sym, MCSA_Global);
-  AP.OutStreamer.EmitLabel(Sym);
-}
-
-static bool methodNameMatches(StringRef compiledName,
-                              ConstantDataArray* name,
-                              ConstantDataArray* type) {
-  uint32_t size = compiledName.size();
-  std::string str;
-
-  for (uint32_t i = 0; i < name->getNumElements(); ++i) {
-    ConstantInt* charInt = cast<ConstantInt>(name->getElementAsConstant(i));
-    int16_t cur = charInt->getZExtValue();
-    if (cur == '/') {
-      str += '_';
-    } else if (cur == '_') {
-      str += "_1";
-    } else if (cur == '<') {
-      str += "_0003C";
-    } else if (cur == '>') {
-      str += "_0003E";
-    } else {
-      str += (char)cur;
-    }
-  }
-
-  for (uint32_t i = 0; i < type->getNumElements(); ++i) {
-    ConstantInt* charInt = cast<ConstantInt>(type->getElementAsConstant(i));
-    int16_t cur = charInt->getZExtValue();
-    if (cur == '(') {
-      str += "__";
-    } else if (cur == '/') {
-      str += '_';
-    } else if (cur == '_') {
-      str += "_1";
-    } else if (cur == '$') {
-      str += "_00024";
-    } else if (cur == ';') {
-      str += "_2";
-    } else if (cur == '[') {
-      str += "_3";
-    } else if (cur == ')') {
-      break;
-    } else {
-      str += (char)cur;
-    }
-  }
-
-  if (str.length() > size) return false;
-  if (str.compare(compiledName) == 0) return true;
-
-  str += 'S';
-
-  if (str.compare(compiledName) == 0) return true;
-
-  return false;
-}
-
-Constant* FindMetadata(const Function& F) {
-  LLVMContext& context = F.getParent()->getContext();
-  for (Value::const_use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
-    if (const Constant* C = dyn_cast<Constant>(*I)) {
-      if (PointerType* PTy = dyn_cast<PointerType>(C->getType())) {
-        if (isa<IntegerType>(PTy->getContainedType(0))) {
-          // We have found the bitcast constant that casts the method in a i8*
-          for (Value::const_use_iterator CI = C->use_begin(), CE = C->use_end(); CI != CE; ++CI) {
-            if (StructType* STy = dyn_cast<StructType>((*CI)->getType())) {
-              if (STy->getName().equals("JavaMethod")) {
-                const Constant* Method = dyn_cast<Constant>(*CI);
-                const Constant* Array = dyn_cast<Constant>(*((*CI)->use_begin()));
-                Constant* VirtualMethods = dyn_cast<Constant>(const_cast<User*>((*(Array->use_begin()))));
-                uint32_t index = 0;
-                for (; index < Array->getNumOperands(); index++) {
-                  if (Array->getOperand(index) == Method) break;
-                }
-                assert(index != Array->getNumOperands());
-                Constant* GEPs[2] = { ConstantInt::get(Type::getInt32Ty(context), 0),
-                                      ConstantInt::get(Type::getInt32Ty(context), index) };
-                return ConstantExpr::getGetElementPtr(VirtualMethods, GEPs, 2);
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-
-  StringRef name = F.getName();
-  if (name.startswith("JnJVM")) {
-    // Metadata for customized methods.
-    std::string methods = name.substr(0, name.find("__"));
-    std::string methodName = name.substr(methods.rfind('_') + 1);
-    methodName = methodName.substr(0, methodName.rfind("__"));
-    methods = methods.substr(6, methods.rfind('_') - 5);
-    methods = methods + "VirtualMethods";
-    Constant* VirtualMethods = cast<Constant>(F.getParent()->getNamedValue(methods));
-    assert(VirtualMethods);
-    Constant* MethodsArray = cast<Constant>(VirtualMethods->getOperand(0));
-    for (uint32_t index = 0; index < MethodsArray->getNumOperands(); index++) {
-      Constant* method = cast<Constant>(MethodsArray->getOperand(index));
-
-      Constant* namePtr = cast<ConstantExpr>(method->getOperand(5));
-      namePtr = cast<Constant>(namePtr->getOperand(0));
-      namePtr = cast<Constant>(namePtr->getOperand(0));
-      ConstantDataArray* name = cast<ConstantDataArray>(namePtr->getOperand(1));
-
-      Constant* typePtr = cast<ConstantExpr>(method->getOperand(6));
-      typePtr = cast<Constant>(typePtr->getOperand(0));
-      typePtr = cast<Constant>(typePtr->getOperand(0));
-      ConstantDataArray* type = cast<ConstantDataArray>(typePtr->getOperand(1));
-
-      if (methodNameMatches(methodName, name, type)) {
-        Constant* GEPs[2] = { ConstantInt::get(Type::getInt32Ty(context), 0),
-                              ConstantInt::get(Type::getInt32Ty(context), index) };
-        return ConstantExpr::getGetElementPtr(VirtualMethods, GEPs, 2);
-      }
-    }
-    assert(0 && "Should have found a JavaMethod");
-  }
-  return NULL;
-}
-
-/// emitAssembly - Print the frametable. The ocaml frametable format is thus:
-///
-///   extern "C" struct align(sizeof(word_t)) {
-///     uint32_t NumDescriptors;
-///     struct align(sizeof(word_t)) {
-///       void *ReturnAddress;
-///       void *Metadata;
-///       uint16_t BytecodeIndex; 
-///       uint16_t FrameSize;
-///       uint16_t NumLiveOffsets;
-///       uint16_t LiveOffsets[NumLiveOffsets];
-///     } Descriptors[NumDescriptors];
-///   } vmkit${module}__frametable;
-///
-/// Note that this precludes programs from stack frames larger than 64K
-/// (FrameSize and LiveOffsets would overflow). FrameTablePrinter will abort if
-/// either condition is detected in a function which uses the GC.
-///
-void VmkitAOTGCMetadataPrinter::finishAssembly(AsmPrinter &AP) {
-  unsigned IntPtrSize = AP.TM.getDataLayout()->getPointerSize(0);
-
-  AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
-
-  AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-  EmitVmkitGlobal(getModule(), AP, "frametable");
-  int NumMethodFrames = 0;
-  for (iterator I = begin(), IE = end(); I != IE; ++I) {
-    NumMethodFrames++;
-  }
-  AP.EmitInt32(NumMethodFrames);
-  AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-
-  for (iterator I = begin(), IE = end(); I != IE; ++I) {
-    GCFunctionInfo &FI = **I;
-
-    Constant* Metadata = FindMetadata(FI.getFunction());
-
-    int NumDescriptors = 0;
-    for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
-      NumDescriptors++;
-    }
-    if (NumDescriptors >= 1<<16) {
-      // Very rude!
-      report_fatal_error(" Too much descriptor for J3 AOT GC");
-    }
-    AP.EmitInt32(NumDescriptors);
-    AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-
-    uint64_t FrameSize = FI.getFrameSize();
-    if (FrameSize >= 1<<16) {
-      // Very rude!
-      report_fatal_error("Function '" + FI.getFunction().getName() +
-                         "' is too large for the Vmkit AOT GC! "
-                         "Frame size " + Twine(FrameSize) + ">= 65536.\n"
-                         "(" + Twine(uintptr_t(&FI)) + ")");
-    }
-
-    AP.OutStreamer.AddComment("live roots for " +
-                              Twine(FI.getFunction().getName()));
-    AP.OutStreamer.AddBlankLine();
-
-    for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
-      size_t LiveCount = FI.live_size(J);
-      if (LiveCount >= 1<<16) {
-        // Very rude!
-        report_fatal_error("Function '" + FI.getFunction().getName() +
-                           "' is too large for the Vmkit AOT GC! "
-                           "Live root count "+Twine(LiveCount)+" >= 65536.");
-      }
-
-      DebugLoc DL = J->Loc;
-      uint32_t sourceIndex = DL.getLine();
-
-      // Metadata
-      if (Metadata != NULL) {
-        AP.EmitGlobalConstant(Metadata);
-      } else {
-        AP.EmitInt32(0);
-        if (IntPtrSize == 8) {
-          AP.EmitInt32(0);
-        }
-      }
-
-      // Return address
-      const MCExpr* address = MCSymbolRefExpr::Create(J->Label, AP.OutStreamer.getContext());
-      if (DL.getCol() == 1) {
-        const MCExpr* one = MCConstantExpr::Create(1, AP.OutStreamer.getContext());
-        address = MCBinaryExpr::CreateAdd(address, one, AP.OutStreamer.getContext());
-      }
-
-      AP.OutStreamer.EmitValue(address, IntPtrSize, 0);
-      AP.EmitInt16(sourceIndex);
-      AP.EmitInt16(FrameSize);
-      AP.EmitInt16(LiveCount);
-
-      for (GCFunctionInfo::live_iterator K = FI.live_begin(J),
-                                         KE = FI.live_end(J); K != KE; ++K) {
-        if (K->StackOffset >= 1<<16) {
-          // Very rude!
-          report_fatal_error(
-                 "GC root stack offset is outside of fixed stack frame and out "
-                 "of range for ocaml GC!");
-        }
-        AP.EmitInt16(K->StackOffset);
-      }
-
-      AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-    }
-  }
-}

Copied: vmkit/trunk/lib/static-gc-pass/Makefile (from r180443, vmkit/trunk/lib/prepare-code/Makefile)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-pass/Makefile?p2=vmkit/trunk/lib/static-gc-pass/Makefile&p1=vmkit/trunk/lib/prepare-code/Makefile&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
--- vmkit/trunk/lib/prepare-code/Makefile (original)
+++ vmkit/trunk/lib/static-gc-pass/Makefile Thu Apr 25 12:10:19 2013
@@ -9,7 +9,7 @@
 
 LEVEL = ../..
 
-LIBRARY=prepare-code
+LIBRARY=static-gc-pass
 LOADABLE_MODULE = 1
 
 include $(LEVEL)/Makefile.common

Copied: vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp (from r180443, vmkit/trunk/lib/prepare-code/StaticGCPass.cpp)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp?p2=vmkit/trunk/lib/static-gc-pass/StaticGCPass.cpp&p1=vmkit/trunk/lib/prepare-code/StaticGCPass.cpp&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
    (empty)

Copied: vmkit/trunk/lib/static-gc-printer/Makefile (from r180443, vmkit/trunk/lib/prepare-code/Makefile)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-printer/Makefile?p2=vmkit/trunk/lib/static-gc-printer/Makefile&p1=vmkit/trunk/lib/prepare-code/Makefile&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
--- vmkit/trunk/lib/prepare-code/Makefile (original)
+++ vmkit/trunk/lib/static-gc-printer/Makefile Thu Apr 25 12:10:19 2013
@@ -9,7 +9,7 @@
 
 LEVEL = ../..
 
-LIBRARY=prepare-code
+LIBRARY=static-gc-printer
 LOADABLE_MODULE = 1
 
 include $(LEVEL)/Makefile.common

Copied: vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp (from r180443, vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp?p2=vmkit/trunk/lib/static-gc-printer/VmkitGCPrinter.cpp&p1=vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp&r1=180443&r2=180444&rev=180444&view=diff
==============================================================================
    (empty)

Modified: vmkit/trunk/tools/trainer/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/trainer/Makefile?rev=180444&r1=180443&r2=180444&view=diff
==============================================================================
--- vmkit/trunk/tools/trainer/Makefile (original)
+++ vmkit/trunk/tools/trainer/Makefile Thu Apr 25 12:10:19 2013
@@ -21,7 +21,7 @@ ifndef VERBOSE
   PRECOMPILER_OPT := > /dev/null
 endif
 
-$(BUILD_DIR)/Precompiled.bc: $(BUILD_DIR)/HelloWorld.class $(LIB_DIR)/prepare-code$(SHLIBEXT) $(PRECOMPILER)
+$(BUILD_DIR)/Precompiled.bc: $(BUILD_DIR)/HelloWorld.class $(PRECOMPILER)
 	$(Echo) "Pre-compiling bootstrap code"
 	$(Verb) $(PRECOMPILER) -cp $(dir $<) $(basename $(notdir $<)) $(PRECOMPILER_OPT) && mv generated.bc $@
 





More information about the vmkit-commits mailing list