[compiler-rt] r270862 - [profile] pre-allocate a small counter set in profile runtime

Steven Wu via llvm-commits llvm-commits at lists.llvm.org
Thu May 26 10:04:27 PDT 2016


Hi David

Can you fix Darwin as well? http://lab.llvm.org:8080/green/job/clang-stage1-configure-RA_build/20954/console
On Darwin, you need to do __attribute__((section("segment,section")))

Thanks

Steven

> On May 26, 2016, at 9:06 AM, Xinliang David Li via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: davidxl
> Date: Thu May 26 11:06:36 2016
> New Revision: 270862
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=270862&view=rev
> Log:
> [profile] pre-allocate a small counter set in profile runtime
> 
> Tested with relavant benchmarks in SPEC2006
> 
> Differential Revision: http://reviews.llvm.org/D20651
> 
> 
> Modified:
>    compiler-rt/trunk/lib/profile/InstrProfilingValue.c
> 
> Modified: compiler-rt/trunk/lib/profile/InstrProfilingValue.c
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfilingValue.c?rev=270862&r1=270861&r2=270862&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/InstrProfilingValue.c (original)
> +++ compiler-rt/trunk/lib/profile/InstrProfilingValue.c Thu May 26 11:06:36 2016
> @@ -18,31 +18,36 @@
> #define INSTR_PROF_COMMON_API_IMPL
> #include "InstrProfData.inc"
> 
> +static int hasStaticCounters = 1;
> +static int OutOfNodesWarnings = 0;
> +static int hasNonDefaultValsPerSite = 0;
> +#define INSTR_PROF_MAX_VP_WARNS 10
> +#define INSTR_PROF_DEFAULT_NUM_VAL_PER_SITE 8
> +#define INSTR_PROF_VNODE_POOL_SIZE 1024
> +
> +/* A shared static pool in addition to the vnodes statically
> + * allocated by the compiler.  */
> +COMPILER_RT_VISIBILITY ValueProfNode
> +    lprofValueProfNodes[INSTR_PROF_VNODE_POOL_SIZE] COMPILER_RT_SECTION(
> +        INSTR_PROF_VNODES_SECT_NAME_STR);
> +
> COMPILER_RT_VISIBILITY uint32_t VPMaxNumValsPerSite =
> -    INSTR_PROF_MAX_NUM_VAL_PER_SITE;
> +    INSTR_PROF_DEFAULT_NUM_VAL_PER_SITE;
> 
> COMPILER_RT_VISIBILITY void lprofSetupValueProfiler() {
>   const char *Str = 0;
>   Str = getenv("LLVM_VP_MAX_NUM_VALS_PER_SITE");
> -  if (Str && Str[0])
> +  if (Str && Str[0]) {
>     VPMaxNumValsPerSite = atoi(Str);
> +    hasNonDefaultValsPerSite = 1;
> +  }
>   if (VPMaxNumValsPerSite > INSTR_PROF_MAX_NUM_VAL_PER_SITE)
>     VPMaxNumValsPerSite = INSTR_PROF_MAX_NUM_VAL_PER_SITE;
> -
> -  if (!(EndVNode > CurrentVNode)) {
> -    CurrentVNode = 0;
> -    EndVNode = 0;
> -  }
> -  /* Adjust max vals per site to a smaller value
> -   * when static allocation is in use. */
> -  else {
> -    if (!Str || !Str[0])
> -      VPMaxNumValsPerSite = 8;
> -  }
> }
> 
> COMPILER_RT_VISIBILITY void lprofSetMaxValsPerSite(uint32_t MaxVals) {
>   VPMaxNumValsPerSite = MaxVals;
> +  hasNonDefaultValsPerSite = 1;
> }
> 
> /* This method is only used in value profiler mock testing.  */
> @@ -70,10 +75,6 @@ __llvm_get_function_addr(const __llvm_pr
>  * 0 if allocation fails.
>  */
> 
> -static int hasStaticCounters = 1;
> -static int OutOfNodesWarnings = 0;
> -#define MAX_VP_WARNS 10
> -
> static int allocateValueProfileCounters(__llvm_profile_data *Data) {
>   uint64_t NumVSites = 0;
>   uint32_t VKI;
> @@ -81,6 +82,10 @@ static int allocateValueProfileCounters(
>   /* This function will never be called when value site array is allocated
>      statically at compile time.  */
>   hasStaticCounters = 0;
> +  /* When dynamic allocation is enabled, allow tracking the max number of
> +   * values allowd.  */
> +  if (!hasNonDefaultValsPerSite)
> +    VPMaxNumValsPerSite = INSTR_PROF_MAX_NUM_VAL_PER_SITE;
> 
>   for (VKI = IPVK_First; VKI <= IPVK_Last; ++VKI)
>     NumVSites += Data->NumValueSites[VKI];
> @@ -105,7 +110,7 @@ static ValueProfNode *allocateOneNode(__
> 
>   /* Early check to avoid value wrapping around.  */
>   if (CurrentVNode >= EndVNode) {
> -    if (OutOfNodesWarnings++ < MAX_VP_WARNS) {
> +    if (OutOfNodesWarnings++ < INSTR_PROF_MAX_VP_WARNS) {
>       PROF_WARN("Unable to track new values: %s. "
>                 " Consider using option -mllvm -vp-counters-per-site=<n> to "
>                 "allocate more"
> 
> 
> _______________________________________________
> 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