[llvm] r313770 - [cmake] Add an option to build llvm with IR PGO
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 8 10:46:02 PST 2017
Vedant Kumar <vsk at apple.com> writes:
>> On Nov 7, 2017, at 5:22 PM, Justin Bogner <mail at justinbogner.com> wrote:
>>
>> Vedant Kumar via llvm-commits <llvm-commits at lists.llvm.org> writes:
>>> Author: vedantk
>>> Date: Wed Sep 20 10:16:01 2017
>>> New Revision: 313770
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=313770&view=rev
>>> Log:
>>> [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)
>>
>> Why not make LLVM_BUILD_INSTRUMENTED a string like "FE" or "IR" instead
>> of a bool?
>
> I didn't want to break setups which set LLVM_BUILD_INSTRUMENTED:BOOL.
See how LLVM_ENABLE_LTO handled that - it treats bools in that spot as
the old way and then handles the explicit options the new way. If you
think that overloads the flag too much that's fine though.
>> There's some prior art for that approach with how the
>> LLVM_ENABLE_LTO flag works. Having to specify two parameters for this
>> (and the fact that LLVM_ENABLE_IR_PGO is meaningless without the other)
>> is awkward.
>
> It makes sense to make LLVM_ENABLE_IR_PGO meaningful by itself. We
> just need to update the PGO cmake cache accordingly.
>
> vedant
>
>>
>>> Differential Revision: https://reviews.llvm.org/D38066
>>>
>>> Modified:
>>> llvm/trunk/CMakeLists.txt
>>> llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
>>>
>>> Modified: llvm/trunk/CMakeLists.txt
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=313770&r1=313769&r2=313770&view=diff
>>> ==============================================================================
>>>
>>> --- llvm/trunk/CMakeLists.txt (original)
>>> +++ llvm/trunk/CMakeLists.txt Wed Sep 20 10:16:01 2017
>>> @@ -548,7 +548,8 @@ else()
>>> 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)
>>> endif()
>>>
>>> -if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE)
>>> +if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE OR
>>> + LLVM_ENABLE_IR_PGO)
>>> if(NOT LLVM_PROFILE_MERGE_POOL_SIZE)
>>> # A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine
>>> # for spining disks. Anything higher may only help on slower mediums.
>>> @@ -556,10 +557,9 @@ if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUIL
>>> endif()
>>> if(NOT LLVM_PROFILE_FILE_PATTERN)
>>> if(NOT LLVM_PROFILE_DATA_DIR)
>>> - file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
>>> - else()
>>> - file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
>>> + file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles" LLVM_PROFILE_DATA_DIR)
>>> endif()
>>> + file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN)
>>> endif()
>>> endif()
>>>
>>>
>>> Modified: llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=313770&r1=313769&r2=313770&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/cmake/modules/HandleLLVMOptions.cmake (original)
>>> +++ llvm/trunk/cmake/modules/HandleLLVMOptions.cmake Wed Sep 20 10:16:01 2017
>>> @@ -730,13 +730,27 @@ if(LLVM_ENABLE_EH AND NOT LLVM_ENABLE_RT
>>> message(FATAL_ERROR "Exception handling requires RTTI. You must set LLVM_ENABLE_RTTI to ON")
>>> endif()
>>>
>>> +option(LLVM_ENABLE_IR_PGO "Build LLVM and tools with IR PGO instrumentation (experimental)" Off)
>>> +mark_as_advanced(LLVM_ENABLE_IR_PGO)
>>> +
>>> option(LLVM_BUILD_INSTRUMENTED "Build LLVM and tools with PGO instrumentation" Off)
>>> mark_as_advanced(LLVM_BUILD_INSTRUMENTED)
>>> -append_if(LLVM_BUILD_INSTRUMENTED "-fprofile-instr-generate='${LLVM_PROFILE_FILE_PATTERN}'"
>>> - CMAKE_CXX_FLAGS
>>> - CMAKE_C_FLAGS
>>> - CMAKE_EXE_LINKER_FLAGS
>>> - CMAKE_SHARED_LINKER_FLAGS)
>>> +
>>> +if (LLVM_BUILD_INSTRUMENTED)
>>> + if (LLVM_ENABLE_IR_PGO)
>>> + append("-fprofile-generate='${LLVM_PROFILE_DATA_DIR}'"
>>> + CMAKE_CXX_FLAGS
>>> + CMAKE_C_FLAGS
>>> + CMAKE_EXE_LINKER_FLAGS
>>> + CMAKE_SHARED_LINKER_FLAGS)
>>> + else()
>>> + append("-fprofile-instr-generate='${LLVM_PROFILE_FILE_PATTERN}'"
>>> + CMAKE_CXX_FLAGS
>>> + CMAKE_C_FLAGS
>>> + CMAKE_EXE_LINKER_FLAGS
>>> + CMAKE_SHARED_LINKER_FLAGS)
>>> + endif()
>>> +endif()
>>>
>>> option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off)
>>> mark_as_advanced(LLVM_BUILD_INSTRUMENTED_COVERAGE)
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list