> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93084 > > --- Comment #6 from fxue at gcc dot gnu.org --- > Could you share how you build clang with PGO, and train workload? It needs a lot of patience. If you have patch I can try it since I still have the train data and corresponding gcc tree.
I do the following. Pretty much imitating what utils/collect_and_build_with_pgo.py does. First I build instrumented compiler and train it on testsuite (it takes a long time and probably could be omitted) cmake -G Ninja /aux/hubicka/llvm \ -DCLANG_TABLEGEN=/aux/hubicka/llvm/out/stage1/bin/clang-tblgen \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=/aux/hubicka/trunk-install/bin/g++ \ -DCMAKE_C_COMPILER=/aux/hubicka/trunk-install/bin/gcc \ -DCMAKE_INSTALL_PREFIX=/aux/hubicka/llvm10-install-gccfdolto \ -DLLVM_BINUTILS_INCDIR=/aux/hubicka/binutils-install/include/ \ -DLLVM_BUILD_RUNTIME=No \ -DLLVM_TABLEGEN=/aux/hubicka/llvm/out/stage1/bin/llvm-tblgen \ -DLLVM_TARGETS_TO_BUILD=X86 \ -DCMAKE_RANLIB=/aux/hubicka/trunk-install/bin/gcc-ranlib \ -DCMAKE_AR=/aux/hubicka/trunk-install/bin/gcc-ar \ -DCMAKE_C_FLAGS="-O2 -flto=auto -flifetime-dse=1 -fno-semantic-interposition -fprofile-generate" \ -DCMAKE_CXX_FLAGS="-O2 -flto=auto -flifetime-dse=1 -fno-semantic-interposition -fprofile-generate" \ -DLLVM_PARALLEL_LINK_JOBS=1 ninja clang lld ninja check-llvm check-clang next I do train build in new directory. cmake -G Ninja /aux/hubicka/llvm \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER=/aux/hubicka/llvm/out/instrumented-gcc/bin/clang++ \ -DCMAKE_C_COMPILER=/aux/hubicka/llvm/out/instrumented-gcc/bin/clang ninja all then I tar gcda files collected in the first build directory cd /aux/hubicka/llvm/instrumented-gcc/ tar czvf ../clang-profile.tgz `find . -name "*.gcda"` and do final build supplying the gcda files. tar xzvf ../clang-profile.tgz cmake -G Ninja /aux/hubicka/llvm \ -DCLANG_TABLEGEN=/aux/hubicka/llvm/out/stage1/bin/clang-tblgen \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-Wno-backend-plugin \ -DLLVM_TABLEGEN=/aux/hubicka/llvm/out/stage1/bin/llvm-tblgen \ -DCMAKE_RANLIB=/aux/hubicka/trunk-install/bin/gcc-ranlib \ -DCMAKE_AR=/aux/hubicka/trunk-install/bin/gcc-ar \ -DCMAKE_C_FLAGS="-O2 -fno-semantic-interposition -fprofile-use -Wno-missing-profile -flto=auto -flifetime-dse=1 -fprofile-correction -Wno-error" \ -DCMAKE_CXX_FLAGS="-O2 -fno-semantic-interposition -fprofile-use -Wno-missing-profile -flifetime-dse=1 -flto=auto -fprofile-correction -Wno-error" \ -DLLVM_TARGETS_TO_BUILD=X86 \ -DCMAKE_CXX_COMPILER=/aux/hubicka/trunk-install/bin/g++ \ -DCMAKE_C_COMPILER=/aux/hubicka/trunk-install/bin/gcc \ -DLLVM_BINUTILS_INCDIR=/aux/hubicka/binutils-install/include/ \ -DLLVM_PARALLEL_LINK_JOBS=1 ninja all