[LLVMdev] counting branch frequencies
alastairmurray42 at gmail.com
Wed Sep 19 09:27:16 PDT 2012
On 19/09/12 11:58, apala guha wrote:
> Another issue is with ProfileInfo::getExecutionCount(Function* F).
> Looking at the source code and results, I am seeing that it always
> returns the execution count of the entry basic block of the function. If
> the entry basic block is part of a loop, its execution count does not
> match the function invocation count.
> Is my assumption wrong, that ProfileInfo::getExecutionCount(Function* F)
> is supposed to return the function invocation count?
> If my assumption is not wrong, is there any way to fix the results?
Your assumption is correct. It should be returning the execution count
of the 0->entry edge (it is edges that are being profiled, but obviously
the counters have to exist in basic blocks).
If entry is also part of a loop then that edge should be getting split.
It is possible that you have found a bug. I will look into it, but
not until the weekend at the earliest. (Note: I'm not especially
interested in fixing -profile-loader, but -profile-metadata-loader works
is a similar manner, so it could also be affected.)
It is also possible this is still just a pass order issue. I.e. the CFG
has the same number of basic blocks so no issue is warned about, but the
block layout is different so the counters do not match. The profiling
code is extremely fragile with respect to the CFG shape.
More information about the llvm-dev