Skip to content

Commit 9aaaeb3

Browse files
committedSep 20, 2017
[cmake] Add an option to build llvm with IR PGO
This adds an LLVM_ENABLE_IR_PGO option to enable building llvm and its tools with IR PGO instrumentation. Usage: -DLLVM_BUILD_INSTRUMENTED=On -DLLVM_ENABLE_IR_PGO=On (both options must be enabled) Differential Revision: https://reviews.llvm.org/D38066 llvm-svn: 313770
1 parent 0b7cb32 commit 9aaaeb3

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed
 

‎llvm/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -548,18 +548,18 @@ else()
548548
set(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION FALSE CACHE INTERNAL "For Visual Studio 2013, manually copy natvis files to Documents\\Visual Studio 2013\\Visualizers" FORCE)
549549
endif()
550550

551-
if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE)
551+
if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE OR
552+
LLVM_ENABLE_IR_PGO)
552553
if(NOT LLVM_PROFILE_MERGE_POOL_SIZE)
553554
# A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine
554555
# for spining disks. Anything higher may only help on slower mediums.
555556
set(LLVM_PROFILE_MERGE_POOL_SIZE "4")
556557
endif()
557558
if(NOT LLVM_PROFILE_FILE_PATTERN)
558559
if(NOT LLVM_PROFILE_DATA_DIR)
559-
file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
560-
else()
561-
file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
560+
file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles" LLVM_PROFILE_DATA_DIR)
562561
endif()
562+
file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
563563
endif()
564564
endif()
565565

‎llvm/cmake/modules/HandleLLVMOptions.cmake

+19-5
Original file line numberDiff line numberDiff line change
@@ -730,13 +730,27 @@ if(LLVM_ENABLE_EH AND NOT LLVM_ENABLE_RTTI)
730730
message(FATAL_ERROR "Exception handling requires RTTI. You must set LLVM_ENABLE_RTTI to ON")
731731
endif()
732732

733+
option(LLVM_ENABLE_IR_PGO "Build LLVM and tools with IR PGO instrumentation (experimental)" Off)
734+
mark_as_advanced(LLVM_ENABLE_IR_PGO)
735+
733736
option(LLVM_BUILD_INSTRUMENTED "Build LLVM and tools with PGO instrumentation" Off)
734737
mark_as_advanced(LLVM_BUILD_INSTRUMENTED)
735-
append_if(LLVM_BUILD_INSTRUMENTED "-fprofile-instr-generate='${LLVM_PROFILE_FILE_PATTERN}'"
736-
CMAKE_CXX_FLAGS
737-
CMAKE_C_FLAGS
738-
CMAKE_EXE_LINKER_FLAGS
739-
CMAKE_SHARED_LINKER_FLAGS)
738+
739+
if (LLVM_BUILD_INSTRUMENTED)
740+
if (LLVM_ENABLE_IR_PGO)
741+
append("-fprofile-generate='${LLVM_PROFILE_DATA_DIR}'"
742+
CMAKE_CXX_FLAGS
743+
CMAKE_C_FLAGS
744+
CMAKE_EXE_LINKER_FLAGS
745+
CMAKE_SHARED_LINKER_FLAGS)
746+
else()
747+
append("-fprofile-instr-generate='${LLVM_PROFILE_FILE_PATTERN}'"
748+
CMAKE_CXX_FLAGS
749+
CMAKE_C_FLAGS
750+
CMAKE_EXE_LINKER_FLAGS
751+
CMAKE_SHARED_LINKER_FLAGS)
752+
endif()
753+
endif()
740754

741755
option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off)
742756
mark_as_advanced(LLVM_BUILD_INSTRUMENTED_COVERAGE)

0 commit comments

Comments
 (0)
Please sign in to comment.