<div dir="ltr">Hi Diego,<div><br></div><div>thanks for clarifying the difference between the two formats. I have noticed the new note in the "Sample Profile Format" section of the Clang guide clarifying that it is different from the coverage format.<br></div><div><br></div><div>So, my further question is... Am I right in understanding that both formats can be used for PGO purposes then?</div><div>I have tried the following, as in the Clang user guide:<br></div><div><br></div><div><div>$ clang++ -O2 -fprofile-instr-generate code.cc -o code</div><div>$ LLVM_PROFILE_FILE="code-%p.profraw" ./code<br></div><div>$ llvm-profdata merge -output=code.profdata code-*.profraw<br></div><div>$ clang++ -O2 -fprofile-instr-use=code.profdata code.cc -o code<br></div></div><div><br></div><div>This produces a PGOptimized executable which performs differently (in fact, better!) than a normal O2 build, so I think the "code.profdata" file produced by the commands above is valid.</div><div><br></div><div>If I look inside "code.profdata" with a text editor, the file is most definitely not the ASCII-based sampling profile file format. Now I know that this is to be expected because I have used the infrastructure designed for coverage to generate the file.</div><div><br></div><div>So, if I understand correctly:</div><div>- If you want to do PGO with a sampling profile file that you have somehow generated from data collected by an external profiler, then the format must be the ASCII text one described in the Clang guide.</div><div>- However you can also use the infrastructure for coverage, and the file produced by such infrastructure, as an input to PGO (without caring too much about the format at this point, as you don't need to look inside the file).</div><div><br></div><div>Is my understanding correct?</div><div>In which case I would recommend to add a note to the "Profiling with Instrumentation" section as well, to state that the format produced by "llvm-profdata merge" is not the same as the one detailed just above that section.</div><div>I now understand the difference, but I believe a reader who is approaching this for the first time could be misinterpreting the guide and they could assume the instrumentation approach also produces a sampling profile file in the ASCII format.<br></div><div><br></div><div>Cheers,</div><div>    Dario Domizioli</div><div>    SN Systems - Sony Computer Entertainment Group</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 22 May 2015 at 16:57, Diego Novillo <span dir="ltr"><<a href="mailto:dnovillo@google.com" target="_blank">dnovillo@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri, May 22, 2015 at 11:16 AM, Dario Domizioli<br>
<<a href="mailto:dario.domizioli@gmail.com">dario.domizioli@gmail.com</a>> wrote:<br>
> Hi all,<br>
><br>
> I am a bit confused about the documentation of the format of the profile<br>
> data file.<br>
><br>
> The Clang user guide here describes it as an ASCII text file:<br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_docs_UsersManual.html-23sample-2Dprofile-2Dformat&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=II2eAuMvPLbRmx-MyYfXRTLXbk-jlBFCEAuR1KGj5Do&s=H7z3HTYP1KwBggtvim3SIoRVIniTTSFTjrJ-cjSdmMU&e=" target="_blank">http://clang.llvm.org/docs/UsersManual.html#sample-profile-format</a><br>
><br>
> Whereas the posts above and the referenced link describe it as a stream of<br>
> bytes containing LEB128s:<br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.llvm.org_docs_CoverageMappingFormat.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=II2eAuMvPLbRmx-MyYfXRTLXbk-jlBFCEAuR1KGj5Do&s=OVSdwbFE8fr0lqp02BY2kNVLszDiyi4gg5ncPshp_0s&e=" target="_blank">http://www.llvm.org/docs/CoverageMappingFormat.html</a><br>
><br>
> From experimenting with the latest trunk I can see the latter is correct<br>
> (well, at least the file I get is not ASCII text).<br>
> Should we update the Clang user guide documentation?<br>
> Or am I just getting confused? Are there two formats, one used for coverage<br>
> and one used for PGO?<br>
<br>
</span>You are looking at two unrelated formats. The first URL describes the<br>
sampling profiling format. That is not used for coverage, only<br>
optimization.<br>
<br>
There are two main profilers in LLVM. The sampling profiler uses<br>
external profilers (e.g., Linux Perf) to produce sample information<br>
that is then matched to the user code.  There is no option to use the<br>
sampling profiler for coverage (it would be a very poor match).<br>
<br>
The instrumentation profiler causes Clang to inject tracking code into<br>
the user program. This is the one used for coverage. If you are<br>
interested in coverage, you should read the second URL.<br>
<br>
I will clarify the documentation for sampling profiles.<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
Diego.<br>
</font></span></blockquote></div><br></div>