Commit f7fed538 authored by Kevin Modzelewski's avatar Kevin Modzelewski

Merge pull request #727

parents b8b126e3 b4a9fa1b
...@@ -24,6 +24,8 @@ pyston_grwl_dbg ...@@ -24,6 +24,8 @@ pyston_grwl_dbg
pyston_nosync pyston_nosync
pyston_gcc pyston_gcc
pyston_release_gcc pyston_release_gcc
pyston_release_gcc_pgo
pyston_release_gcc_pgo_instrumented
pystontmp*/ pystontmp*/
/*_unittest /*_unittest
......
...@@ -29,8 +29,11 @@ option(ENABLE_OPROFILE "enable oprofile support" OFF) ...@@ -29,8 +29,11 @@ option(ENABLE_OPROFILE "enable oprofile support" OFF)
option(ENABLE_SELF_HOST "use pyston to test pyston" OFF) option(ENABLE_SELF_HOST "use pyston to test pyston" OFF)
option(ENABLE_VALGRIND "pyston valgrind support" OFF) option(ENABLE_VALGRIND "pyston valgrind support" OFF)
option(ENABLE_PGO "enable -fprofile-generate/-fprofile-use" OFF)
option(ENABLE_LTO "enable -flto" OFF)
# automatically use ccache if found # automatically use ccache if found
if(ENABLE_CCACHE) if(ENABLE_CCACHE AND NOT ENABLE_PGO)
find_program(CCACHE ccache) find_program(CCACHE ccache)
if(CCACHE) if(CCACHE)
message(STATUS "found ccache ${CCACHE}") message(STATUS "found ccache ${CCACHE}")
...@@ -46,8 +49,11 @@ if(ENABLE_GOLD) ...@@ -46,8 +49,11 @@ if(ENABLE_GOLD)
message(STATUS "found the gold linker ${GOLD_LINKER}") message(STATUS "found the gold linker ${GOLD_LINKER}")
set(CMAKE_LINKER "${GOLD_LINKER}") set(CMAKE_LINKER "${GOLD_LINKER}")
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -B${CMAKE_SOURCE_DIR}/tools/build_system") set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -B${CMAKE_SOURCE_DIR}/tools/build_system")
if(NOT ENABLE_PGO)
# let pgo determine the ordering
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,--section-ordering-file,${CMAKE_CURRENT_SOURCE_DIR}/section_ordering.txt") set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,--section-ordering-file,${CMAKE_CURRENT_SOURCE_DIR}/section_ordering.txt")
endif() endif()
endif()
endif() endif()
...@@ -59,7 +65,7 @@ else() ...@@ -59,7 +65,7 @@ else()
endif() endif()
# initial clang flags (set here so they're used when building llvm) # initial clang flags (set here so they're used when building llvm)
set(CLANG_FLAGS "-Qunused-arguments -fcolor-diagnostics" CACHE STRING "Clang specific C and CXX flags") set(CLANG_FLAGS "-Qunused-arguments -fcolor-diagnostics -Wno-profile-instr-unprofiled" CACHE STRING "Clang specific C and CXX flags")
if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CLANG_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CLANG_FLAGS}")
endif() endif()
...@@ -67,6 +73,31 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ...@@ -67,6 +73,31 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CLANG_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CLANG_FLAGS}")
endif() endif()
if(ENABLE_LTO)
set(LTO_FLAGS "-flto")
endif()
if(ENABLE_PGO)
if(NOT "${PROFILE_DIR}" STREQUAL "")
set(PROFILE_STATE "${PROFILE_STATE}=${PROFILE_DIR}")
endif()
set(PGO_FLAGS "-fprofile-${PROFILE_STATE} -fprofile-correction")
endif()
macro(ADD_PROFILE_FLAGS)
set(PROFILE_FLAGS "${PGO_FLAGS} ${LTO_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}")
endmacro()
# used in src/runtime/inline/CMakeLists.txt to remove the flags we added above
macro(REMOVE_PROFILE_FLAGS)
string(REPLACE "${PROFILE_FLAGS}" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REPLACE "${PROFILE_FLAGS}" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "${PROFILE_FLAGS}" " " CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "${PROFILE_FLAGS}" " " CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
string(REPLACE "${PROFILE_FLAGS}" " " CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
endmacro()
# llvm disable debug info unless ENABLE_LLVM_DEBUG is ON # llvm disable debug info unless ENABLE_LLVM_DEBUG is ON
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" AND NOT ENABLE_LLVM_DEBUG) if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" AND NOT ENABLE_LLVM_DEBUG)
set(CMAKE_CXX_FLAGS_DEBUG "-O3" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_DEBUG "-O3" CACHE STRING "" FORCE)
...@@ -200,6 +231,7 @@ endif() ...@@ -200,6 +231,7 @@ endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-long-long -Wno-aggregate-return -Wno-inline -Wno-redundant-decls -Wno-strict-overflow") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-long-long -Wno-aggregate-return -Wno-inline -Wno-redundant-decls -Wno-strict-overflow")
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,--no-as-needed") # without this, we don't seem to get jemalloc on gcc builds
endif() endif()
add_definitions(${LLVM_DEFINITIONS}) add_definitions(${LLVM_DEFINITIONS})
...@@ -213,6 +245,8 @@ find_package(LibLZMA REQUIRED) ...@@ -213,6 +245,8 @@ find_package(LibLZMA REQUIRED)
link_directories(${CMAKE_BINARY_DIR}/libunwind/lib) link_directories(${CMAKE_BINARY_DIR}/libunwind/lib)
link_directories(${LLVM_LIBRARY_DIRS}) link_directories(${LLVM_LIBRARY_DIRS})
ADD_PROFILE_FLAGS()
add_subdirectory(lib_pyston) add_subdirectory(lib_pyston)
add_subdirectory(from_cpython) add_subdirectory(from_cpython)
add_subdirectory(src) add_subdirectory(src)
......
...@@ -65,6 +65,8 @@ CMAKE_DIR_DBG := $(BUILD_DIR)/Debug ...@@ -65,6 +65,8 @@ CMAKE_DIR_DBG := $(BUILD_DIR)/Debug
CMAKE_DIR_RELEASE := $(BUILD_DIR)/Release CMAKE_DIR_RELEASE := $(BUILD_DIR)/Release
CMAKE_DIR_GCC := $(BUILD_DIR)/Debug-gcc CMAKE_DIR_GCC := $(BUILD_DIR)/Debug-gcc
CMAKE_DIR_RELEASE_GCC := $(BUILD_DIR)/Release-gcc CMAKE_DIR_RELEASE_GCC := $(BUILD_DIR)/Release-gcc
CMAKE_DIR_RELEASE_GCC_PGO := $(BUILD_DIR)/Release-gcc-pgo
CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED := $(BUILD_DIR)/Release-gcc-pgo-instrumented
CMAKE_SETUP_DBG := $(CMAKE_DIR_DBG)/build.ninja CMAKE_SETUP_DBG := $(CMAKE_DIR_DBG)/build.ninja
CMAKE_SETUP_RELEASE := $(CMAKE_DIR_RELEASE)/build.ninja CMAKE_SETUP_RELEASE := $(CMAKE_DIR_RELEASE)/build.ninja
...@@ -893,10 +895,10 @@ CMAKE_SHAREDMODS := sharedmods ext_pyston ...@@ -893,10 +895,10 @@ CMAKE_SHAREDMODS := sharedmods ext_pyston
.PHONY: pyston_dbg pyston_release .PHONY: pyston_dbg pyston_release
pyston_dbg: $(CMAKE_SETUP_DBG) pyston_dbg: $(CMAKE_SETUP_DBG)
$(NINJA) -C $(CMAKE_DIR_DBG) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS) $(NINJA) -C $(CMAKE_DIR_DBG) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS)
ln -sf $(CMAKE_DIR_DBG)/pyston pyston_dbg ln -sf $(CMAKE_DIR_DBG)/pyston $@
pyston_release: $(CMAKE_SETUP_RELEASE) pyston_release: $(CMAKE_SETUP_RELEASE)
$(NINJA) -C $(CMAKE_DIR_RELEASE) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS) $(NINJA) -C $(CMAKE_DIR_RELEASE) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS)
ln -sf $(CMAKE_DIR_RELEASE)/pyston pyston_release ln -sf $(CMAKE_DIR_RELEASE)/pyston $@
CMAKE_SETUP_GCC := $(CMAKE_DIR_GCC)/build.ninja CMAKE_SETUP_GCC := $(CMAKE_DIR_GCC)/build.ninja
$(CMAKE_SETUP_GCC): $(CMAKE_SETUP_GCC):
...@@ -906,7 +908,7 @@ $(CMAKE_SETUP_GCC): ...@@ -906,7 +908,7 @@ $(CMAKE_SETUP_GCC):
.PHONY: pyston_gcc .PHONY: pyston_gcc
pyston_gcc: $(CMAKE_SETUP_GCC) pyston_gcc: $(CMAKE_SETUP_GCC)
$(NINJA) -C $(CMAKE_DIR_GCC) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS) $(NINJA) -C $(CMAKE_DIR_GCC) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS)
ln -sf $(CMAKE_DIR_GCC)/pyston pyston_gcc ln -sf $(CMAKE_DIR_GCC)/pyston $@
CMAKE_SETUP_RELEASE_GCC := $(CMAKE_DIR_RELEASE_GCC)/build.ninja CMAKE_SETUP_RELEASE_GCC := $(CMAKE_DIR_RELEASE_GCC)/build.ninja
$(CMAKE_SETUP_RELEASE_GCC): $(CMAKE_SETUP_RELEASE_GCC):
...@@ -916,7 +918,35 @@ $(CMAKE_SETUP_RELEASE_GCC): ...@@ -916,7 +918,35 @@ $(CMAKE_SETUP_RELEASE_GCC):
.PHONY: pyston_release_gcc .PHONY: pyston_release_gcc
pyston_release_gcc: $(CMAKE_SETUP_RELEASE_GCC) pyston_release_gcc: $(CMAKE_SETUP_RELEASE_GCC)
$(NINJA) -C $(CMAKE_DIR_RELEASE_GCC) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS) $(NINJA) -C $(CMAKE_DIR_RELEASE_GCC) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS)
ln -sf $(CMAKE_DIR_RELEASE_GCC)/pyston pyston_release_gcc ln -sf $(CMAKE_DIR_RELEASE_GCC)/pyston $@
# GCC PGO build
CMAKE_SETUP_RELEASE_GCC_PGO := $(CMAKE_DIR_RELEASE_GCC_PGO)/build.ninja
$(CMAKE_SETUP_RELEASE_GCC_PGO):
@$(MAKE) cmake_check
@mkdir -p $(CMAKE_DIR_RELEASE_GCC_PGO)
cd $(CMAKE_DIR_RELEASE_GCC_PGO); CC='$(GCC)' CXX='$(GPP)' cmake -GNinja $(SRC_DIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_VALGRIND) -DENABLE_PGO=ON -DPROFILE_STATE=use
.PHONY: pyston_release_gcc_pgo
pyston_release_gcc_pgo: $(CMAKE_SETUP_RELEASE_GCC_PGO) $(CMAKE_DIR_RELEASE_GCC_PGO)/.trained
$(NINJA) -C $(CMAKE_DIR_RELEASE_GCC_PGO) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS)
ln -sf $(CMAKE_DIR_RELEASE_GCC_PGO)/pyston $@
CMAKE_SETUP_RELEASE_GCC_PGO_INSTRUMENTED := $(CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED)/build.ninja
$(CMAKE_SETUP_RELEASE_GCC_PGO_INSTRUMENTED):
@$(MAKE) cmake_check
@mkdir -p $(CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED)
cd $(CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED); CC='$(GCC)' CXX='$(GPP)' cmake -GNinja $(SRC_DIR) -DCMAKE_BUILD_TYPE=Release $(CMAKE_VALGRIND) -DENABLE_PGO=ON -DPROFILE_STATE=generate -DPROFILE_DIR=$(CMAKE_DIR_RELEASE_GCC_PGO)
.PHONY: pyston_release_gcc_pgo_instrumented
pyston_release_gcc_pgo_instrumented: $(CMAKE_SETUP_RELEASE_GCC_PGO_INSTRUMENTED)
$(NINJA) -C $(CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED) -f $(CMAKE_SETUP_RELEASE_GCC_PGO_INSTRUMENTED) pyston copy_stdlib copy_libpyston $(CMAKE_SHAREDMODS) ext_cpython $(NINJAFLAGS)
ln -sf $(CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED)/pyston $@
$(CMAKE_DIR_RELEASE_GCC_PGO)/.trained: pyston_release_gcc_pgo_instrumented
@echo "Training pgo"
mkdir -p $(CMAKE_DIR_RELEASE_GCC_PGO)
(cd $(CMAKE_DIR_RELEASE_GCC_PGO_INSTRUMENTED) && ./pyston $(SRC_DIR)/minibenchmarks/combined.py && ./pyston $(SRC_DIR)/minibenchmarks/combined.py ) && touch $(CMAKE_DIR_RELEASE_GCC_PGO)/.trained
.PHONY: format check_format .PHONY: format check_format
format: $(CMAKE_SETUP_RELEASE) format: $(CMAKE_SETUP_RELEASE)
......
...@@ -36,6 +36,10 @@ ...@@ -36,6 +36,10 @@
# adapted from https://github.com/shadow/shadow/blob/master/cmake/LLVMTools.cmake # adapted from https://github.com/shadow/shadow/blob/master/cmake/LLVMTools.cmake
# don't do pgo here, as our gcc command line flags are incompatible with clang, and we
# don't want to bake the instrumentation into the resulting bitcode anyway.
REMOVE_PROFILE_FLAGS()
set(BC_INLINE_SRCS boxing.cpp dict.cpp link_forcer.cpp list.cpp tuple.cpp xrange.cpp) set(BC_INLINE_SRCS boxing.cpp dict.cpp link_forcer.cpp list.cpp tuple.cpp xrange.cpp)
include_directories(${CMAKE_SOURCE_DIR}/src) include_directories(${CMAKE_SOURCE_DIR}/src)
......
...@@ -3968,7 +3968,7 @@ Box* runtimeCallInternal(Box* obj, CallRewriteArgs* rewrite_args, ArgPassSpec ar ...@@ -3968,7 +3968,7 @@ Box* runtimeCallInternal(Box* obj, CallRewriteArgs* rewrite_args, ArgPassSpec ar
} else if (obj->cls == instancemethod_cls) { } else if (obj->cls == instancemethod_cls) {
BoxedInstanceMethod* im = static_cast<BoxedInstanceMethod*>(obj); BoxedInstanceMethod* im = static_cast<BoxedInstanceMethod*>(obj);
RewriterVar* r_im_func; RewriterVar* r_im_func = NULL;
if (rewrite_args) { if (rewrite_args) {
r_im_func = rewrite_args->obj->getAttr(offsetof(BoxedInstanceMethod, func), Location::any()); r_im_func = rewrite_args->obj->getAttr(offsetof(BoxedInstanceMethod, func), Location::any());
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment