[clang] d1bc6f9 - [Clang][CMake] Remove GCC option override in BOLT.cmake
Author: Amir Aupov Date: 2023-08-29T19:41:03-07:00 New Revision: d1bc6f9953ccc351df835a40146569084ba5754d URL: https://github.com/llvm/llvm-project/commit/d1bc6f9953ccc351df835a40146569084ba5754d DIFF: https://github.com/llvm/llvm-project/commit/d1bc6f9953ccc351df835a40146569084ba5754d.diff LOG: [Clang][CMake] Remove GCC option override in BOLT.cmake Added: Modified: clang/cmake/caches/BOLT.cmake Removed: diff --git a/clang/cmake/caches/BOLT.cmake b/clang/cmake/caches/BOLT.cmake index 7c75d60320f7ee..0442f73e5426ac 100644 --- a/clang/cmake/caches/BOLT.cmake +++ b/clang/cmake/caches/BOLT.cmake @@ -11,9 +11,3 @@ set(LLVM_DISTRIBUTION_COMPONENTS clang clang-resource-headers CACHE STRING "") - -# Disable function splitting enabled by default in GCC8+ -if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-reorder-blocks-and-partition") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-reorder-blocks-and-partition") -endif() ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 76b2915 - [Clang][CMake] Use perf-training for Clang-BOLT
Author: Amir Ayupov Date: 2023-05-13T10:36:29-07:00 New Revision: 76b2915fdbbba18693c9aabda419768f41106f31 URL: https://github.com/llvm/llvm-project/commit/76b2915fdbbba18693c9aabda419768f41106f31 DIFF: https://github.com/llvm/llvm-project/commit/76b2915fdbbba18693c9aabda419768f41106f31.diff LOG: [Clang][CMake] Use perf-training for Clang-BOLT Leverage perf-training flow for BOLT profile collection, enabling reproducible BOLT optimization. Remove the use of bootstrapped build for profile collection. Test Plan: - Regular (single-stage) build ``` $ cmake ... -C .../clang/cmake/caches/BOLT.cmake $ ninja clang-bolt ... [21/24] Instrumenting clang binary with BOLT [21/24] Generating BOLT profile for Clang [23/24] Merging BOLT fdata Profile from 2 files merged. [24/24] Optimizing Clang with BOLT ... 1291202496 : executed instructions (-1.1%) 27005133 : taken branches (-71.5%) ... ``` - Two stage build (ThinLTO+InstPGO) ``` $ cmake ... -C .../clang/cmake/caches/BOLT.cmake -C .../clang/cmake/caches/BOLT-PGO.cmake $ ninja clang-bolt $ ninja stage2-clang-bolt ... [2756/2759] Instrumenting clang binary with BOLT [2756/2759] Generating BOLT profile for Clang [2758/2759] Merging BOLT fdata [2759/2759] Optimizing Clang with BOLT ... BOLT-INFO: 7092 out of 184104 functions in the binary (3.9%) have non-empty execution profile 756531927 : executed instructions (-0.5%) 15399400 : taken branches (-40.3%) ... ``` Reviewed By: beanz Differential Revision: https://reviews.llvm.org/D143553 Added: clang/utils/perf-training/bolt.lit.cfg clang/utils/perf-training/bolt.lit.site.cfg.in Modified: clang/CMakeLists.txt clang/cmake/caches/BOLT.cmake clang/utils/perf-training/CMakeLists.txt Removed: diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index ef69a68e460a0..bd2ac69c1455e 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -851,9 +851,8 @@ endif() if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED) set(CLANG_PATH ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang) - set(CLANGXX_PATH ${CLANG_PATH}++) set(CLANG_INSTRUMENTED ${CLANG_PATH}-bolt.inst) - set(CLANGXX_INSTRUMENTED ${CLANGXX_PATH}-bolt.inst) + set(BOLT_FDATA ${CMAKE_CURRENT_BINARY_DIR}/utils/perf-training/prof.fdata) # Instrument clang with BOLT add_custom_target(clang-instrumented @@ -863,73 +862,11 @@ if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED) DEPENDS clang llvm-bolt COMMAND llvm-bolt ${CLANG_PATH} -o ${CLANG_INSTRUMENTED} -instrument --instrumentation-file-append-pid - --instrumentation-file=${CMAKE_CURRENT_BINARY_DIR}/prof.fdata + --instrumentation-file=${BOLT_FDATA} COMMENT "Instrumenting clang binary with BOLT" VERBATIM ) - # Make a symlink from clang-bolt.inst to clang++-bolt.inst - add_custom_target(clang++-instrumented -DEPENDS ${CLANGXX_INSTRUMENTED} - ) - add_custom_command(OUTPUT ${CLANGXX_INSTRUMENTED} -DEPENDS clang-instrumented -COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CLANG_INSTRUMENTED} - ${CLANGXX_INSTRUMENTED} -COMMENT "Creating symlink from BOLT instrumented clang to clang++" -VERBATIM - ) - - # Build specified targets with instrumented Clang to collect the profile - set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/bolt-instrumented-clang-stamps/) - set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bolt-instrumented-clang-bins/) - set(build_configuration "$") - include(ExternalProject) - ExternalProject_Add(bolt-instrumentation-profile -DEPENDS clang++-instrumented -PREFIX bolt-instrumentation-profile -SOURCE_DIR ${CMAKE_SOURCE_DIR} -STAMP_DIR ${STAMP_DIR} -BINARY_DIR ${BINARY_DIR} -EXCLUDE_FROM_ALL 1 -CMAKE_ARGS -${CLANG_BOLT_INSTRUMENT_EXTRA_CMAKE_FLAGS} -# We shouldn't need to set this here, but INSTALL_DIR doesn't -# seem to work, so instead I'm passing this through --DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} --DCMAKE_C_COMPILER=${CLANG_INSTRUMENTED} --DCMAKE_CXX_COMPILER=${CLANGXX_INSTRUMENTED} --DCMAKE_ASM_COMPILER=${CLANG_INSTRUMENTED} --DCMAKE_ASM_COMPILER_ID=Clang --DCMAKE_BUILD_TYPE=Release --DLLVM_ENABLE_PROJECTS=${CLANG_BOLT_INSTRUMENT_PROJECTS} --DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD} -BUILD_COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} - --config ${build_configuration} - --target ${CLANG_BOLT_INSTRUMENT_TARGETS} -INSTALL_COMMAND "" -STEP_TARGETS configure build -USES_TERMINAL_CONFIGURE 1 -USES_TERMINAL_BUILD 1 -USES_TERMINAL_INSTALL 1 - ) - - # Merge profiles into one using merge-fdata - add_custom_target(clang-bolt-profile -DEPENDS
[clang] e67f849 - [CMake] Replace clang binary if using clang-bolt target
Author: Amir Ayupov Date: 2023-01-28T11:54:09-08:00 New Revision: e67f849001bb890f86831ab31c1bb25e0882e711 URL: https://github.com/llvm/llvm-project/commit/e67f849001bb890f86831ab31c1bb25e0882e711 DIFF: https://github.com/llvm/llvm-project/commit/e67f849001bb890f86831ab31c1bb25e0882e711.diff LOG: [CMake] Replace clang binary if using clang-bolt target Instead of creating an extra clang-bolt binary and clang++-bolt symlink, replace the original clang binary with BOLT-optimized one. This fixes the issue with installing optimized binary as `install-clang` target now copies the new version. Reviewed By: phosek Differential Revision: https://reviews.llvm.org/D139454 Added: Modified: clang/CMakeLists.txt clang/cmake/caches/BOLT-PGO.cmake llvm/docs/AdvancedBuilds.rst Removed: diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 090cfa3520789..b2cd30b9c7884 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -856,8 +856,6 @@ if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED) set(CLANGXX_PATH ${CLANG_PATH}++) set(CLANG_INSTRUMENTED ${CLANG_PATH}-bolt.inst) set(CLANGXX_INSTRUMENTED ${CLANGXX_PATH}-bolt.inst) - set(CLANG_OPTIMIZED ${CLANG_PATH}-bolt) - set(CLANGXX_OPTIMIZED ${CLANGXX_PATH}-bolt) # Instrument clang with BOLT add_custom_target(clang-instrumented @@ -935,6 +933,7 @@ if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED) ) # Optimize original (pre-bolt) Clang using the collected profile + set(CLANG_OPTIMIZED ${CMAKE_CURRENT_BINARY_DIR}/clang.bolt) add_custom_target(clang-bolt DEPENDS ${CLANG_OPTIMIZED} ) @@ -945,22 +944,10 @@ if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED) -data ${CMAKE_CURRENT_BINARY_DIR}/prof.fdata -reorder-blocks=ext-tsp -reorder-functions=hfsort+ -split-functions -split-all-cold -split-eh -dyno-stats -icf=1 -use-gnu-stack +COMMAND ${CMAKE_COMMAND} -E rename ${CLANG_OPTIMIZED} $ COMMENT "Optimizing Clang with BOLT" VERBATIM ) - - # Make a symlink from clang-bolt to clang++-bolt - add_custom_target(clang++-bolt -DEPENDS ${CLANGXX_OPTIMIZED} - ) - add_custom_command(OUTPUT ${CLANGXX_OPTIMIZED} -DEPENDS clang-bolt -COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CLANG_OPTIMIZED} - ${CLANGXX_OPTIMIZED} -COMMENT "Creating symlink from BOLT optimized clang to clang++" -VERBATIM - ) endif() if (LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION) diff --git a/clang/cmake/caches/BOLT-PGO.cmake b/clang/cmake/caches/BOLT-PGO.cmake index c329415465c94..616e632d1531b 100644 --- a/clang/cmake/caches/BOLT-PGO.cmake +++ b/clang/cmake/caches/BOLT-PGO.cmake @@ -2,11 +2,9 @@ set(LLVM_ENABLE_PROJECTS "bolt;clang;lld" CACHE STRING "") set(CLANG_BOOTSTRAP_TARGETS stage2-clang-bolt - stage2-clang++-bolt CACHE STRING "") set(BOOTSTRAP_CLANG_BOOTSTRAP_TARGETS clang-bolt - clang++-bolt CACHE STRING "") set(PGO_BUILD_CONFIGURATION ${CMAKE_CURRENT_LIST_DIR}/BOLT.cmake CACHE STRING "") diff --git a/llvm/docs/AdvancedBuilds.rst b/llvm/docs/AdvancedBuilds.rst index b3e9f85d7fe95..ba3f3c3e498f4 100644 --- a/llvm/docs/AdvancedBuilds.rst +++ b/llvm/docs/AdvancedBuilds.rst @@ -224,7 +224,7 @@ Then, build the BOLT-optimized binary by running the following ninja command: .. code-block:: console - $ ninja clang++-bolt + $ ninja clang-bolt If you're seeing errors in the build process, try building with a recent version of Clang/LLVM by setting the CMAKE_C_COMPILER and @@ -243,12 +243,11 @@ configuration command: -DBOOTSTRAP_BOOTSTRAP_LLVM_ENABLE_LLD=ON \ -DPGO_INSTRUMENT_LTO=Thin -Then, to build the final optimized binary, build the stage2-clang++-bolt -target: +Then, to build the final optimized binary, build the stage2-clang-bolt target: .. code-block:: console - $ ninja stage2-clang++-bolt + $ ninja stage2-clang-bolt 3-Stage Non-Determinism === ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] b597992 - Revert "[perf-training] Check extension in findFilesWithExtension"
Author: Amir Aupov Date: 2023-01-10T14:22:36-08:00 New Revision: b59799241b3902a460c3b1156477af369934a13e URL: https://github.com/llvm/llvm-project/commit/b59799241b3902a460c3b1156477af369934a13e DIFF: https://github.com/llvm/llvm-project/commit/b59799241b3902a460c3b1156477af369934a13e.diff LOG: Revert "[perf-training] Check extension in findFilesWithExtension" This reverts commit 1fbbf92e4fda3c7a3be1c02e1f7240135557846d. Added: Modified: clang/utils/perf-training/perf-helper.py Removed: diff --git a/clang/utils/perf-training/perf-helper.py b/clang/utils/perf-training/perf-helper.py index d68ab3c72806e..c6a815e654736 100644 --- a/clang/utils/perf-training/perf-helper.py +++ b/clang/utils/perf-training/perf-helper.py @@ -23,7 +23,7 @@ def findFilesWithExtension(path, extension): filenames = [] for root, dirs, files in os.walk(path): for filename in files: - if os.path.splitext(filename)[1] == extension: + if filename.endswith(extension): filenames.append(os.path.join(root, filename)) return filenames ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits