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

Xinliang David Li via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 18 21:22:00 PDT 2015


On Mon, Oct 12, 2015 at 10:52 AM, Xinliang David Li <davidxl at google.com>
wrote:

> On Mon, Oct 12, 2015 at 10:51 AM, Justin Bogner <mail at justinbogner.com>
> wrote:
> > David Li <davidxl at google.com> writes:
> >> davidxl updated this revision to Diff 36641.
> >> davidxl added a comment.
> >>
> >> Make new change strictly limited to linux platform.
> >
> > LGTM, please clang-format InstrProfilingPlatformLinux.c though.
>
> ok. I assume the one liner change in LLVM is also ok (skipping
> register function call when target is linux).
>
> >
> > Would you mind reaching out to some BSD folks so they're aware of this
> > change? Ian Taylor's explanation made it sound like this might work for
> > them too, so they might be interested.
>
> yes -- will do this as a follow up.
>

The change is now enabled for FreeBSD after verifying __start/__stop
section symbol works on the platform. Note that InstrProfilePlatformLinux.c
file is not yet changed as there is no good name for it yet (it covers more
platforms than Linux but not yet for all ELF platforms).

David



>
> thanks,
>
> David
>
> >
> >>
> >> http://reviews.llvm.org/D13329
> >>
> >> Files:
> >>   lib/profile/CMakeLists.txt
> >>   lib/profile/InstrProfilingPlatformLinux.c
> >>   lib/profile/InstrProfilingPlatformOther.c
> >>
> >> Index: lib/profile/InstrProfilingPlatformOther.c
> >> ===================================================================
> >> --- lib/profile/InstrProfilingPlatformOther.c
> >> +++ lib/profile/InstrProfilingPlatformOther.c
> >> @@ -9,7 +9,7 @@
> >>
> >>  #include "InstrProfiling.h"
> >>
> >> -#if !defined(__APPLE__)
> >> +#if !defined(__APPLE__) && !defined(__linux__)
> >>  #include <stdlib.h>
> >>
> >>  static const __llvm_profile_data *DataFirst = NULL;
> >> 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(__linux__)
> >> +#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
> >> @@ -6,6 +6,7 @@
> >>    InstrProfilingBuffer.c
> >>    InstrProfilingFile.c
> >>    InstrProfilingPlatformDarwin.c
> >> +  InstrProfilingPlatformLinux.c
> >>    InstrProfilingPlatformOther.c
> >>    InstrProfilingRuntime.cc
> >>    InstrProfilingUtil.c)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151018/e82bc589/attachment.html>


More information about the llvm-commits mailing list