diff options
| author | Xinliang David Li <davidxl@google.com> | 2016-05-18 22:34:05 +0000 |
|---|---|---|
| committer | Xinliang David Li <davidxl@google.com> | 2016-05-18 22:34:05 +0000 |
| commit | 4617aa78279f6f862cf775f293d8238b77bacdd1 (patch) | |
| tree | 91bbb7c0d35fffc079db102ac55cbaddd4306caa /compiler-rt | |
| parent | 61b41e07378b78cb004cd8830573d0c1e17a0d21 (diff) | |
| download | bcm5719-llvm-4617aa78279f6f862cf775f293d8238b77bacdd1.tar.gz bcm5719-llvm-4617aa78279f6f862cf775f293d8238b77bacdd1.zip | |
[profile] Allow max vals per site to be controllable at runtime
llvm-svn: 269993
Diffstat (limited to 'compiler-rt')
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingFile.c | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingInternal.h | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingValue.c | 14 |
3 files changed, 18 insertions, 1 deletions
diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index 1e754017c53..f18a48507f8 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -254,6 +254,8 @@ int __llvm_profile_register_write_file_atexit(void) { if (HasBeenRegistered) return 0; + lprofSetupValueProfiler(); + HasBeenRegistered = 1; return atexit(writeFileWithoutReturn); } diff --git a/compiler-rt/lib/profile/InstrProfilingInternal.h b/compiler-rt/lib/profile/InstrProfilingInternal.h index 56d825101dc..306b2bd94eb 100644 --- a/compiler-rt/lib/profile/InstrProfilingInternal.h +++ b/compiler-rt/lib/profile/InstrProfilingInternal.h @@ -150,10 +150,13 @@ void lprofMergeValueProfData(struct ValueProfData *SrcValueProfData, VPDataReaderType *lprofGetVPDataReader(); +void lprofSetupValueProfiler(); + COMPILER_RT_VISIBILITY extern char *(*GetEnvHook)(const char *); COMPILER_RT_VISIBILITY extern void (*FreeHook)(void *); COMPILER_RT_VISIBILITY extern uint8_t *DynamicBufferIOBuffer; COMPILER_RT_VISIBILITY extern uint32_t VPBufferSize; +COMPILER_RT_VISIBILITY extern uint32_t VPMaxNumValsPerSite; extern void (*VPMergeHook)(struct ValueProfData *, __llvm_profile_data *); #endif diff --git a/compiler-rt/lib/profile/InstrProfilingValue.c b/compiler-rt/lib/profile/InstrProfilingValue.c index 1a443819500..f51e6729204 100644 --- a/compiler-rt/lib/profile/InstrProfilingValue.c +++ b/compiler-rt/lib/profile/InstrProfilingValue.c @@ -24,6 +24,18 @@ return NULL; \ } +COMPILER_RT_VISIBILITY uint32_t VPMaxNumValsPerSite = + INSTR_PROF_MAX_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]) + VPMaxNumValsPerSite = atoi(Str); + if (VPMaxNumValsPerSite > INSTR_PROF_MAX_NUM_VAL_PER_SITE) + VPMaxNumValsPerSite = INSTR_PROF_MAX_NUM_VAL_PER_SITE; +} + /* This method is only used in value profiler mock testing. */ COMPILER_RT_VISIBILITY void __llvm_profile_set_num_value_sites(__llvm_profile_data *Data, @@ -94,7 +106,7 @@ __llvm_profile_instrument_target(uint64_t TargetValue, void *Data, ++VDataCount; } - if (VDataCount >= INSTR_PROF_MAX_NUM_VAL_PER_SITE) + if (VDataCount >= VPMaxNumValsPerSite) return; CurrentVNode = (ValueProfNode *)calloc(1, sizeof(ValueProfNode)); |

