[LLVMdev] counting branch frequencies
Dibyendu.Das at amd.com
Wed Sep 19 00:26:35 PDT 2012
At which stage are you doing -insert-edge-profiling or similar ? My guess is if you do that early the opts/inline coming later at -O3 will mutate the cfg(s) causing errors. You should use -insert-edge-profiling without opts and call opt -O3 during the -profile-metadata-loader step.
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of apala guha
Sent: Wednesday, September 19, 2012 12:34 AM
To: Alastair Murray
Cc: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] counting branch frequencies
I tried getting profile data from LLVM 3.1, using the method mentioned below. I tried it out on a simple matrix multiplication program.
However, I noticed the following problems:
1. There is a warning message: "WARNING: profile information is inconsistent with the current program!"
2. The basic block counts (obtained from ProfileInfo::getExecutionCount(const BasicBlock*)) are correct only if I have compiled with "-disable-opt" or "-O0". When compiled with "-O3", the basic block counts are bogus values.
3. Some of the function counts (obtained from ProfileInfo::getExecutionCount(const Function*)) are incorrect i.e. they do not equal the number of times the function was invoked.
Can someone please explain why I am experiencing the above problems?
Thanks in advance!
On 09/12/2012 09:20 PM, Alastair Murray wrote:
> Hi Apala,
> On 11/09/12 11:20, apala guha wrote:
>> Is it possible to associate the branch frequency counts with the
>> basic blocks in the intermediate representation? (e.g. Can I access
>> basic block frequencies in runOnFunction()?)
> Profile data really needs to be loaded at a module level, but once
> this has been done it can be accessed at any level (including function).
> In LLVM 3.1 ProfileInfo stores block execution frequencies (use
> For LLVM svn you can look at BlockFrequencyInfo, which I generates its
> data from BranchFrequencyInfo, which in turn uses the branch weight
> metadata (set by -profile-metadata-loader). I haven't actually tried
> this though, so I'm not sure how accurately the block frequencies are
>> Also, I was able to produce a 'llvmprof.out' file. What is the format
>> of this file? How can I parse it?
> Very roughy the format of the file is lots of unsigned integers.
> -profile-loader or -preofile-metadata-loader will parse it for you.
> Parsing outside of LLVM is tricky as it relies on exact ordering of
> basic blocks.
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev