Description
Hi!
LLVM right now supports PGO only for Clang. I want to share PGO results for other LLVM-based projects.
Here I want to share my results with applying PGO on clangd
(version - current main
branch). According to my local tests on AMD 5900x/48 Gib RAM/Fedora 38/Clang 16 (for building clangd
), clangd
in Release mode without PGO finishes indexing llvm-project
sources in ~10 minutes (9m55s), and clangd
in Release mode with PGO (fprofile-instr-generate
/-fprofile-instr-use
) finishes indexing llvm-project
in ~8 minutes (7m50s - 7m55s). Tests were performed multiple times, with clangd
cache reset between runs, on the latest main
branch. Compilation options: CC=clang CXX=clang++ cmake -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/zamazan4ik/open_source/install_clangd -DLLVM_INCLUDE_BENCHMARKS=1 -DCMAKE_POSITION_INDEPENDENT_CODE=1 -DLLVM_USE_LINKER=lld -G "Ninja" ../llvm-project/llvm
(PGO mode just additionally sets -fprofile-instr-generate/-fprofile-instr-use
options).
I think the results are quite good to add PGO support to clangd
to the repository (as it's already done with clang
itself). Another article about applying PGO on clangd
you can find here: JetBrains blog.
Additionally want to note that Clangd in Instrumentation mode works toooo slow, so I just waited for indexing ~200 files from the LLVM repo. I think that's enough (and the benchmark confirms it).