[clang] d1bc6f9 - [Clang][CMake] Remove GCC option override in BOLT.cmake

2023-08-29 Thread Amir Aupov via cfe-commits

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

2023-05-13 Thread Amir Aupov via cfe-commits

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

2023-01-28 Thread Amir Aupov via cfe-commits

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"

2023-01-10 Thread Amir Aupov via cfe-commits

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