@@ -851,9 +851,8 @@ endif()
851
851
852
852
if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED )
853
853
set (CLANG_PATH ${LLVM_RUNTIME_OUTPUT_INTDIR} /clang )
854
- set (CLANGXX_PATH ${CLANG_PATH} ++ )
855
854
set (CLANG_INSTRUMENTED ${CLANG_PATH} -bolt.inst )
856
- set (CLANGXX_INSTRUMENTED ${CLANGXX_PATH} -bolt.inst )
855
+ set (BOLT_FDATA ${CMAKE_CURRENT_BINARY_DIR} /utils/perf-training/prof.fdata )
857
856
858
857
# Instrument clang with BOLT
859
858
add_custom_target (clang-instrumented
@@ -863,73 +862,11 @@ if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED)
863
862
DEPENDS clang llvm-bolt
864
863
COMMAND llvm-bolt ${CLANG_PATH} -o ${CLANG_INSTRUMENTED}
865
864
-instrument --instrumentation-file-append-pid
866
- --instrumentation-file=${CMAKE_CURRENT_BINARY_DIR}/prof.fdata
865
+ --instrumentation-file=${BOLT_FDATA}
867
866
COMMENT "Instrumenting clang binary with BOLT"
868
867
VERBATIM
869
868
)
870
869
871
- # Make a symlink from clang-bolt.inst to clang++-bolt.inst
872
- add_custom_target (clang++-instrumented
873
- DEPENDS ${CLANGXX_INSTRUMENTED}
874
- )
875
- add_custom_command (OUTPUT ${CLANGXX_INSTRUMENTED}
876
- DEPENDS clang-instrumented
877
- COMMAND ${CMAKE_COMMAND} -E create_symlink
878
- ${CLANG_INSTRUMENTED}
879
- ${CLANGXX_INSTRUMENTED}
880
- COMMENT "Creating symlink from BOLT instrumented clang to clang++"
881
- VERBATIM
882
- )
883
-
884
- # Build specified targets with instrumented Clang to collect the profile
885
- set (STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR} /bolt-instrumented-clang-stamps/ )
886
- set (BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /bolt-instrumented-clang-bins/ )
887
- set (build_configuration "$<CONFIG>" )
888
- include (ExternalProject )
889
- ExternalProject_Add (bolt-instrumentation-profile
890
- DEPENDS clang++-instrumented
891
- PREFIX bolt-instrumentation-profile
892
- SOURCE_DIR ${CMAKE_SOURCE_DIR}
893
- STAMP_DIR ${STAMP_DIR}
894
- BINARY_DIR ${BINARY_DIR}
895
- EXCLUDE_FROM_ALL 1
896
- CMAKE_ARGS
897
- ${CLANG_BOLT_INSTRUMENT_EXTRA_CMAKE_FLAGS}
898
- # We shouldn't need to set this here, but INSTALL_DIR doesn't
899
- # seem to work, so instead I'm passing this through
900
- -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
901
- -DCMAKE_C_COMPILER=${CLANG_INSTRUMENTED}
902
- -DCMAKE_CXX_COMPILER=${CLANGXX_INSTRUMENTED}
903
- -DCMAKE_ASM_COMPILER=${CLANG_INSTRUMENTED}
904
- -DCMAKE_ASM_COMPILER_ID=Clang
905
- -DCMAKE_BUILD_TYPE=Release
906
- -DLLVM_ENABLE_PROJECTS=${CLANG_BOLT_INSTRUMENT_PROJECTS}
907
- -DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD}
908
- BUILD_COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR}
909
- --config ${build_configuration}
910
- --target ${CLANG_BOLT_INSTRUMENT_TARGETS}
911
- INSTALL_COMMAND ""
912
- STEP_TARGETS configure build
913
- USES_TERMINAL_CONFIGURE 1
914
- USES_TERMINAL_BUILD 1
915
- USES_TERMINAL_INSTALL 1
916
- )
917
-
918
- # Merge profiles into one using merge-fdata
919
- add_custom_target (clang-bolt-profile
920
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /prof.fdata
921
- )
922
- add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /prof.fdata
923
- DEPENDS merge-fdata bolt-instrumentation-profile-build
924
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
925
- COMMAND ${Python3_EXECUTABLE}
926
- ${CMAKE_CURRENT_SOURCE_DIR} /utils/perf-training/perf-helper.py merge-fdata
927
- $< TARGET_FILE:merge-fdata> ${CMAKE_CURRENT_BINARY_DIR} /prof.fdata
928
- ${CMAKE_CURRENT_BINARY_DIR}
929
- COMMENT "Preparing BOLT profile"
930
- VERBATIM
931
- )
932
-
933
870
# Optimize original (pre-bolt) Clang using the collected profile
934
871
set (CLANG_OPTIMIZED ${CMAKE_CURRENT_BINARY_DIR} /clang.bolt )
935
872
add_custom_target (clang-bolt
@@ -939,7 +876,7 @@ if (CLANG_BOLT_INSTRUMENT AND NOT LLVM_BUILD_INSTRUMENTED)
939
876
DEPENDS clang-bolt-profile
940
877
COMMAND llvm-bolt ${CLANG_PATH}
941
878
-o ${CLANG_OPTIMIZED}
942
- -data ${CMAKE_CURRENT_BINARY_DIR} /prof.fdata
879
+ -data ${BOLT_FDATA}
943
880
-reorder-blocks=ext-tsp -reorder-functions=hfsort+ -split-functions
944
881
-split-all-cold -split-eh -dyno-stats -icf=1 -use-gnu-stack
945
882
COMMAND ${CMAKE_COMMAND} -E rename ${CLANG_OPTIMIZED} $< TARGET_FILE:clang>
0 commit comments