[llvm] r313770 - [cmake] Add an option to build llvm with IR PGO

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 7 17:47:48 PST 2017


> 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.

> 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