[compiler-rt] r253508 - [PGO] Minor cleanups (formating, comments etc) (NFC)

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 18 21:24:18 PST 2015


On Wed, Nov 18, 2015 at 1:54 PM, Xinliang David Li via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: davidxl
> Date: Wed Nov 18 15:54:40 2015
> New Revision: 253508
>
> URL: http://llvm.org/viewvc/llvm-project?rev=253508&view=rev
> Log:
> [PGO] Minor cleanups (formating, comments etc) (NFC)
> 1. Added missing public API decl in InstrProfiling.h
> 2. Clang formatting fix
> 3. Added more comments for new VP code
> 4. refactor the VP allocation code to make it more readable.
>

Please break these out into separate commits in the future.

-- Sean Silva


>
> Modified:
>     compiler-rt/trunk/lib/profile/InstrProfiling.c
>     compiler-rt/trunk/lib/profile/InstrProfiling.h
>
> Modified: compiler-rt/trunk/lib/profile/InstrProfiling.c
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfiling.c?rev=253508&r1=253507&r2=253508&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/InstrProfiling.c (original)
> +++ compiler-rt/trunk/lib/profile/InstrProfiling.c Wed Nov 18 15:54:40 2015
> @@ -12,8 +12,7 @@
>  #include <stdlib.h>
>  #include <string.h>
>
> -__attribute__((visibility("hidden")))
> -uint64_t __llvm_profile_get_magic(void) {
> +__attribute__((visibility("hidden"))) uint64_t
> __llvm_profile_get_magic(void) {
>    /* Magic number to detect file format and endianness.
>     *
>     * Use 255 at one end, since no UTF-8 file can use that character.
> Avoid 0,
> @@ -24,34 +23,29 @@ uint64_t __llvm_profile_get_magic(void)
>     * for 32-bit platforms.
>     */
>    unsigned char R = sizeof(void *) == sizeof(uint64_t) ? 'r' : 'R';
> -  return
> -    (uint64_t)255 << 56 |
> -    (uint64_t)'l' << 48 |
> -    (uint64_t)'p' << 40 |
> -    (uint64_t)'r' << 32 |
> -    (uint64_t)'o' << 24 |
> -    (uint64_t)'f' << 16 |
> -    (uint64_t) R  <<  8 |
> -    (uint64_t)129;
> +  return (uint64_t)255 << 56 | (uint64_t)'l' << 48 | (uint64_t)'p' << 40 |
> +         (uint64_t)'r' << 32 | (uint64_t)'o' << 24 | (uint64_t)'f' << 16 |
> +         (uint64_t)R << 8 | (uint64_t)129;
>  }
>
> -__attribute__((visibility("hidden")))
> -uint8_t __llvm_profile_get_num_padding_bytes(uint64_t SizeInBytes) {
> +/* Return the number of bytes needed to add to SizeInBytes to make it
> +   the result a multiple of 8.  */
> +__attribute__((visibility("hidden"))) uint8_t
> +__llvm_profile_get_num_padding_bytes(uint64_t SizeInBytes) {
>    return 7 & (sizeof(uint64_t) - SizeInBytes % sizeof(uint64_t));
>  }
>
> -__attribute__((visibility("hidden")))
> -uint64_t __llvm_profile_get_version(void) {
> +__attribute__((visibility("hidden"))) uint64_t
> +__llvm_profile_get_version(void) {
>    /* This should be bumped any time the output format changes. */
>    return 2;
>  }
>
> -__attribute__((visibility("hidden")))
> -void __llvm_profile_reset_counters(void) {
> +__attribute__((visibility("hidden"))) void
> __llvm_profile_reset_counters(void) {
>    uint64_t *I = __llvm_profile_begin_counters();
>    uint64_t *E = __llvm_profile_end_counters();
>
> -  memset(I, 0, sizeof(uint64_t)*(E - I));
> +  memset(I, 0, sizeof(uint64_t) * (E - I));
>
>    const __llvm_profile_data *DataBegin = __llvm_profile_begin_data();
>    const __llvm_profile_data *DataEnd = __llvm_profile_end_data();
> @@ -76,33 +70,48 @@ void __llvm_profile_reset_counters(void)
>    }
>  }
>
> +// Total number of value profile data in bytes.
>  static uint64_t TotalValueDataSize = 0;
>
> -__attribute__((visibility("hidden")))
> -void __llvm_profile_instrument_target(uint64_t TargetValue, void *Data_,
> -  uint32_t CounterIndex) {
> +/* Allocate an array that holds the pointers to the linked lists of
> +   value profile counter nodes. The number of element of the array
> +   is the total number of value profile sites instrumented. Returns
> +   0 if allocation fails.  */
> +
> +static int allocateValueProfileCounters(__llvm_profile_data *Data) {
> +  uint64_t NumVSites = 0;
> +  uint32_t VKI;
> +  for (VKI = VK_FIRST; VKI <= VK_LAST; ++VKI)
> +    NumVSites += Data->NumValueSites[VKI];
> +
> +  __llvm_profile_value_node **Mem = (__llvm_profile_value_node **)calloc(
> +      NumVSites, sizeof(__llvm_profile_value_node *));
> +  if (!Mem)
> +    return 0;
> +  if (!__sync_bool_compare_and_swap(&Data->ValueCounters, 0, Mem)) {
> +    free(Mem);
> +    return 0;
> +  }
> +  /* In the raw format, there will be an value count array preceding
> +     the value profile data. The element type of the array is uint8_t,
> +   and there is one element in array per value site. The element
> +   stores the number of values profiled for the corresponding site. */
> +  uint8_t Padding = __llvm_profile_get_num_padding_bytes(NumVSites);
> +  __sync_fetch_and_add(&TotalValueDataSize, NumVSites + Padding);
> +  return 1;
> +}
> +
> +__attribute__((visibility("hidden"))) void
> +__llvm_profile_instrument_target(uint64_t TargetValue, void *Data_,
> +                                 uint32_t CounterIndex) {
>
> -  __llvm_profile_data *Data = (__llvm_profile_data*)Data_;
> +  __llvm_profile_data *Data = (__llvm_profile_data *)Data_;
>    if (!Data)
>      return;
>
>    if (!Data->ValueCounters) {
> -    uint64_t NumVSites = 0;
> -    uint32_t VKI;
> -    for (VKI = VK_FIRST; VKI <= VK_LAST; ++VKI)
> -      NumVSites += Data->NumValueSites[VKI];
> -
> -    __llvm_profile_value_node** Mem = (__llvm_profile_value_node**)
> -        calloc(NumVSites, sizeof(__llvm_profile_value_node*));
> -    if (!Mem)
> -      return;
> -    if (!__sync_bool_compare_and_swap(&Data->ValueCounters, 0, Mem)) {
> -      free(Mem);
> +    if (!allocateValueProfileCounters(Data))
>        return;
> -    }
> -    // Acccount for padding during write out.
> -    uint8_t Padding = __llvm_profile_get_num_padding_bytes(NumVSites);
> -    __sync_fetch_and_add(&TotalValueDataSize, NumVSites + Padding);
>    }
>
>    __llvm_profile_value_node *PrevVNode = NULL;
> @@ -122,8 +131,8 @@ void __llvm_profile_instrument_target(ui
>    if (VDataCount >= UCHAR_MAX)
>      return;
>
> -  CurrentVNode = (__llvm_profile_value_node*)
> -    calloc(1, sizeof(__llvm_profile_value_node));
> +  CurrentVNode =
> +      (__llvm_profile_value_node *)calloc(1,
> sizeof(__llvm_profile_value_node));
>    if (!CurrentVNode)
>      return;
>
> @@ -132,8 +141,8 @@ void __llvm_profile_instrument_target(ui
>
>    uint32_t Success = 0;
>    if (!Data->ValueCounters[CounterIndex])
> -   Success = __sync_bool_compare_and_swap(
> -      &(Data->ValueCounters[CounterIndex]), 0, CurrentVNode);
> +    Success =
> __sync_bool_compare_and_swap(&(Data->ValueCounters[CounterIndex]),
> +                                           0, CurrentVNode);
>    else if (PrevVNode && !PrevVNode->Next)
>      Success = __sync_bool_compare_and_swap(&(PrevVNode->Next), 0,
> CurrentVNode);
>
> @@ -145,14 +154,14 @@ void __llvm_profile_instrument_target(ui
>                         Success * sizeof(__llvm_profile_value_data));
>  }
>
> -__attribute__((visibility("hidden")))
> -uint64_t __llvm_profile_gather_value_data(uint8_t **VDataArray) {
> +__attribute__((visibility("hidden"))) uint64_t
> +__llvm_profile_gather_value_data(uint8_t **VDataArray) {
>
>    if (!VDataArray || 0 == TotalValueDataSize)
>      return 0;
>
>    uint64_t NumData = TotalValueDataSize;
> -  *VDataArray = (uint8_t*) calloc(NumData, sizeof(uint8_t));
> +  *VDataArray = (uint8_t *)calloc(NumData, sizeof(uint8_t));
>    if (!*VDataArray)
>      return 0;
>
> @@ -161,8 +170,7 @@ uint64_t __llvm_profile_gather_value_dat
>    const __llvm_profile_data *DataEnd = __llvm_profile_end_data();
>    const __llvm_profile_data *DataBegin = __llvm_profile_begin_data();
>    __llvm_profile_data *I;
> -  for (I = (__llvm_profile_data *)DataBegin;
> -       I != DataEnd; ++I) {
> +  for (I = (__llvm_profile_data *)DataBegin; I != DataEnd; ++I) {
>
>      uint64_t NumVSites = 0;
>      uint32_t VKI, i;
> @@ -183,7 +191,7 @@ uint64_t __llvm_profile_gather_value_dat
>        __llvm_profile_value_node *VNode = I->ValueCounters[i];
>
>        uint8_t VDataCount = 0;
> -      while (VNode && ((uint8_t*)(VDataPtr + 1) <= VDataEnd)) {
> +      while (VNode && ((uint8_t *)(VDataPtr + 1) <= VDataEnd)) {
>          *VDataPtr = VNode->VData;
>          VNode = VNode->Next;
>          ++VDataPtr;
>
> Modified: compiler-rt/trunk/lib/profile/InstrProfiling.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfiling.h?rev=253508&r1=253507&r2=253508&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/InstrProfiling.h (original)
> +++ compiler-rt/trunk/lib/profile/InstrProfiling.h Wed Nov 18 15:54:40 2015
> @@ -100,6 +100,12 @@ uint64_t *__llvm_profile_begin_counters(
>  uint64_t *__llvm_profile_end_counters(void);
>
>  /*!
> + * \brief Clear profile counters to zero.
> + *
> + */
> +void __llvm_profile_reset_counters(void);
> +
> +/*!
>   * \brief Counts the number of times a target value is seen.
>   *
>   * Records the target value for the CounterIndex if not seen before.
> Otherwise,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151118/a630e367/attachment.html>


More information about the llvm-commits mailing list