Index: llvm/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/cmake/modules/HandleLLVMOptions.cmake +++ llvm/cmake/modules/HandleLLVMOptions.cmake @@ -1037,18 +1037,36 @@ CMAKE_SHARED_LINKER_FLAGS) endif() +set(LLVM_PROFDATA_TYPE OFF CACHE STRING "The type of PGO profile used to build LLVM and tools. May be specified as IR or Frontend") +mark_as_advanced(LLVM_PROFDATA_TYPE) +string(TOUPPER "${LLVM_PROFDATA_TYPE}" uppercase_LLVM_PROFDATA_TYPE) if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE}) - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) - append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" - CMAKE_CXX_FLAGS - CMAKE_C_FLAGS) - if(NOT LINKER_IS_LLD_LINK) - append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" - CMAKE_EXE_LINKER_FLAGS - CMAKE_SHARED_LINKER_FLAGS) + if (uppercase_LLVM_PROFDATA_TYPE STREQUAL "IR") + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) + append("-fprofile-use=\"${LLVM_PROFDATA_FILE}\"" + CMAKE_CXX_FLAGS + CMAKE_C_FLAGS) + if(NOT LINKER_IS_LLD_LINK) + append("-fprofile-use=\"${LLVM_PROFDATA_FILE}\"" + CMAKE_EXE_LINKER_FLAGS + CMAKE_SHARED_LINKER_FLAGS) + endif() + else() + message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang") endif() else() - message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang") + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) + append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" + CMAKE_CXX_FLAGS + CMAKE_C_FLAGS) + if(NOT LINKER_IS_LLD_LINK) + append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" + CMAKE_EXE_LINKER_FLAGS + CMAKE_SHARED_LINKER_FLAGS) + endif() + else() + message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang") + endif() endif() endif()