forked from OSchip/llvm-project
[profile] Add early checking to bypass node pointer update
llvm-svn: 270766
This commit is contained in:
parent
fad596aa81
commit
65971297a0
|
@ -103,16 +103,21 @@ static ValueProfNode *allocateOneNode(__llvm_profile_data *Data, uint32_t Index,
|
|||
if (!hasStaticCounters)
|
||||
return (ValueProfNode *)calloc(1, sizeof(ValueProfNode));
|
||||
|
||||
Node = COMPILER_RT_PTR_FETCH_ADD(ValueProfNode, CurrentVNode, 1);
|
||||
if (Node >= EndVNode) {
|
||||
/* Early check to avoid value wrapping around. */
|
||||
if (CurrentVNode >= EndVNode) {
|
||||
if (OutOfNodesWarnings++ < MAX_VP_WARNS) {
|
||||
PROF_WARN("Unable to track new values: %s. "
|
||||
" Consider using option -mllvm -vp-counters-per-site=<n> to allocate more"
|
||||
" Consider using option -mllvm -vp-counters-per-site=<n> to "
|
||||
"allocate more"
|
||||
" value profile counters at compile time. \n",
|
||||
"Running out of static counters");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Node = COMPILER_RT_PTR_FETCH_ADD(ValueProfNode, CurrentVNode, 1);
|
||||
if (Node >= EndVNode)
|
||||
return 0;
|
||||
|
||||
return Node;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
// RUN: llvm-profdata merge -text %t.ir.profdata -o %t.ir.proftxt
|
||||
// RUN: FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.proftxt
|
||||
|
||||
// RUN: %clang_profgen -O2 -mllvm -disable-vp=false -Xclang -fprofile-instrument=llvm -mllvm -vp-static-alloc=true -o %t.ir.warn %S/Inputs/instrprof-value-prof-real.c
|
||||
// RUN: env LLVM_PROFILE_FILE=%t.ir.profraw %run %t.ir.warn 2>&1 |FileCheck --check-prefix=WARNING %s
|
||||
|
||||
// IR level instrumentation with dynamic memory allocation
|
||||
// RUN: %clang_profgen -O2 -mllvm -disable-vp=false -Xclang -fprofile-instrument=llvm -mllvm -vp-static-alloc=false -mllvm -vp-counters-per-site=256 -o %t.ir.dyn %S/Inputs/instrprof-value-prof-real.c
|
||||
// RUN: env LLVM_PROFILE_FILE=%t.ir.dyn.profraw %run %t.ir.dyn
|
||||
|
@ -18,3 +21,5 @@
|
|||
// RUN: llvm-profdata show --all-functions -ic-targets %t.ir.dyn.profdata | FileCheck %S/Inputs/instrprof-value-prof-real.c
|
||||
// RUN: llvm-profdata merge -text %t.ir.dyn.profdata -o %t.ir.dyn.proftxt
|
||||
// RUN: FileCheck %S/Inputs/instrprof-value-prof-real.c --check-prefix=IR < %t.ir.dyn.proftxt
|
||||
|
||||
// WARNING: LLVM Profile Warning:
|
||||
|
|
Loading…
Reference in New Issue