[PATCH] D13329: [PGO]: Eliminate __llvm_profile_register calls for Linux (compiler_rt)

Xinliang David Li via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 12 10:03:25 PDT 2015


Ping.

David

On Tue, Oct 6, 2015 at 11:34 AM, Xinliang David Li <davidxl at google.com> wrote:
> updated patch. PTAL.
>
> David
>
> On Tue, Oct 6, 2015 at 12:04 AM, Justin Bogner <mail at justinbogner.com> wrote:
>> David Li <davidxl at google.com> writes:
>>> davidxl updated this revision to Diff 36319.
>>> davidxl added a comment.
>>>
>>> This is the latest version that does not rely on linker script.
>>>
>>>
>>> http://reviews.llvm.org/D13329
>>>
>>> Files:
>>>   lib/profile/CMakeLists.txt
>>>   lib/profile/InstrProfilingPlatformLinux.c
>>>
>>> Index: lib/profile/InstrProfilingPlatformLinux.c
>>> ===================================================================
>>> --- /dev/null
>>> +++ lib/profile/InstrProfilingPlatformLinux.c
>>> @@ -0,0 +1,48 @@
>>> +/*===- InstrProfilingPlatformLinux.c - Profile data Linux platform ------===*\
>>> +|*
>>> +|*                     The LLVM Compiler Infrastructure
>>> +|*
>>> +|* This file is distributed under the University of Illinois Open Source
>>> +|* License. See LICENSE.TXT for details.
>>> +|*
>>> +\*===----------------------------------------------------------------------===*/
>>> +
>>> +#include "InstrProfiling.h"
>>> +
>>> +#if !defined(__APPLE__)
>>> +#include <stdlib.h>
>>> +
>>> +extern __llvm_profile_data __start___llvm_prf_data
>>> +    __attribute__((visibility("hidden")));
>>> +extern __llvm_profile_data __stop___llvm_prf_data
>>> +    __attribute__((visibility("hidden")));
>>> +extern uint64_t __start___llvm_prf_cnts __attribute__((visibility("hidden")));
>>> +extern uint64_t __stop___llvm_prf_cnts __attribute__((visibility("hidden")));
>>> +extern char __start___llvm_prf_names __attribute__((visibility("hidden")));
>>> +extern char __stop___llvm_prf_names __attribute__((visibility("hidden")));
>>> +
>>> +__attribute__((visibility("hidden"))) const __llvm_profile_data *
>>> +__llvm_profile_begin_data(void) {
>>> +  return &__start___llvm_prf_data;
>>> +}
>>> +__attribute__((visibility("hidden"))) const __llvm_profile_data *
>>> +__llvm_profile_end_data(void) {
>>> +  return &__stop___llvm_prf_data;
>>> +}
>>> +__attribute__((visibility("hidden"))) const char *__llvm_profile_begin_names(
>>> +    void) {
>>> +  return &__start___llvm_prf_names;
>>> +}
>>> +__attribute__((visibility("hidden"))) const char *__llvm_profile_end_names(
>>> +    void) {
>>> +  return &__stop___llvm_prf_names;
>>> +}
>>> +__attribute__((visibility("hidden"))) uint64_t *__llvm_profile_begin_counters(
>>> +    void) {
>>> +  return &__start___llvm_prf_cnts;
>>> +}
>>> +__attribute__((visibility("hidden"))) uint64_t *__llvm_profile_end_counters(
>>> +    void) {
>>> +  return &__stop___llvm_prf_cnts;
>>> +}
>>> +#endif
>>> Index: lib/profile/CMakeLists.txt
>>> ===================================================================
>>> --- lib/profile/CMakeLists.txt
>>> +++ lib/profile/CMakeLists.txt
>>> @@ -1,23 +1,35 @@
>>>  add_custom_target(profile)
>>>
>>> -set(PROFILE_SOURCES
>>> +set(COMMON_SOURCES
>>>    GCDAProfiling.c
>>>    InstrProfiling.c
>>>    InstrProfilingBuffer.c
>>>    InstrProfilingFile.c
>>> -  InstrProfilingPlatformDarwin.c
>>> -  InstrProfilingPlatformOther.c
>>>    InstrProfilingRuntime.cc
>>>    InstrProfilingUtil.c)
>>>
>>>  if(APPLE)
>>> +  set(PROFILE_SOURCES
>>> +      ${COMMON_SOURCES}
>>> +      InstrProfilingPlatformDarwin.c)
>>> +
>>>    add_compiler_rt_runtime(clang_rt.profile
>>>      STATIC
>>>      OS osx
>>>      ARCHS ${PROFILE_SUPPORTED_ARCH}
>>>      SOURCES ${PROFILE_SOURCES}
>>>      PARENT_TARGET profile)
>>>  else()
>>> +  if(UNIX)
>>> +    # Assume Linux
>>
>> I don't think that's a reasonable assumption. What is the actual
>> commonality where this works? ELF? GNU tools? Notably, if this works on
>> the various BSDs this comment is confusing, and if it doesn't the check
>> is wrong.
>>
>>> +    set(PROFILE_SOURCES
>>> +        ${COMMON_SOURCES}
>>> +        InstrProfilingPlatformLinux.c)
>>
>> If this does generalize to ELF or GNU we should call it PlatformELF or
>> PlatformGNU or whatever, so as not to confuse people.
>>
>>> +  else()
>>> +    set(PROFILE_SOURCES
>>> +        ${COMMON_SOURCES}
>>> +        InstrProfilingPlatformOther.c)
>>> +  endif()
>>>    add_compiler_rt_runtime(clang_rt.profile
>>>      STATIC
>>>      ARCHS ${PROFILE_SUPPORTED_ARCH}
>>>
>>>


More information about the llvm-commits mailing list