[llvm] 060af26 - Use PGO for x86_64 windows release packaging (#71067)

via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 14 09:45:07 PST 2023


Author: Hans
Date: 2023-11-14T18:45:03+01:00
New Revision: 060af2697b0bab577b0310183c1421f32c3f8dc3

URL: https://github.com/llvm/llvm-project/commit/060af2697b0bab577b0310183c1421f32c3f8dc3
DIFF: https://github.com/llvm/llvm-project/commit/060af2697b0bab577b0310183c1421f32c3f8dc3.diff

LOG: Use PGO for x86_64 windows release packaging (#71067)

Applying this to 17.0.4 makes the toolchain 22% faster (as measured by building clang).

Added: 
    

Modified: 
    llvm/utils/release/build_llvm_release.bat

Removed: 
    


################################################################################
diff  --git a/llvm/utils/release/build_llvm_release.bat b/llvm/utils/release/build_llvm_release.bat
index 3b4f431cee65646..2a1503eef8ae5c9 100755
--- a/llvm/utils/release/build_llvm_release.bat
+++ b/llvm/utils/release/build_llvm_release.bat
@@ -154,6 +154,8 @@ set common_cmake_flags=^
   -DCMAKE_CXX_FLAGS="-DLIBXML_STATIC" ^
   -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;compiler-rt;lldb;openmp"
 
+set cmake_profile_flag=""
+
 REM Preserve original path
 set OLDPATH=%PATH%
 
@@ -261,9 +263,11 @@ set all_cmake_flags=^
   -DCMAKE_RC=%stage0_bin_dir%/llvm-windres.exe
 set cmake_flags=%all_cmake_flags:\=/%
 
+
 mkdir build64
 cd build64
-cmake -GNinja %cmake_flags% ..\llvm-project\llvm || exit /b 1
+call :do_generate_profile || exit /b 1
+cmake -GNinja %cmake_flags% %cmake_profile_flag% ..\llvm-project\llvm || exit /b 1
 ninja || ninja || ninja || exit /b 1
 ninja check-llvm || ninja check-llvm || ninja check-llvm || exit /b 1
 ninja check-clang || ninja check-clang || ninja check-clang || exit /b 1
@@ -388,8 +392,38 @@ ninja install || exit /b 1
 set libxmldir=%cd%\install
 set "libxmldir=%libxmldir:\=/%"
 cd ..
+exit /b 0
 
+::==============================================================================
+:: Generate a PGO profile.
+::==============================================================================
+:do_generate_profile
+REM Build Clang with instrumentation.
+mkdir instrument
+cd instrument
+cmake -GNinja %cmake_flags% -DLLVM_TARGETS_TO_BUILD=Native ^
+  -DLLVM_BUILD_INSTRUMENTED=IR ..\..\llvm-project\llvm || exit /b 1
+ninja clang || ninja clang || ninja clang || exit /b 1
+set instrumented_clang=%cd:\=/%/bin/clang-cl.exe
+cd ..
+REM Use that to build part of llvm to generate a profile.
+mkdir train
+cd train
+cmake -GNinja %cmake_flags% ^
+  -DCMAKE_C_COMPILER=%instrumented_clang% ^
+  -DCMAKE_CXX_COMPILER=%instrumented_clang% ^
+  -DLLVM_ENABLE_PROJECTS=clang ^
+  -DLLVM_TARGETS_TO_BUILD=Native ^
+  ..\..\llvm-project\llvm || exit /b 1
+REM Drop profiles generated from running cmake; those are not representative.
+del ..\instrument\profiles\*.profraw
+ninja tools/clang/lib/Sema/CMakeFiles/obj.clangSema.dir/Sema.cpp.obj
+cd ..
+set profile=%cd:\=/%/profile.profdata
+%stage0_bin_dir%\llvm-profdata merge -output=%profile% instrument\profiles\*.profraw || exit /b 1
+set cmake_profile_flag=-DLLVM_PROFDATA_FILE=%profile%
 exit /b 0
+
 ::=============================================================================
 :: Parse command line arguments.
 :: The format for the arguments is:


        


More information about the llvm-commits mailing list