<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Brian,<div class=""><br class=""></div><div class="">It’s great to hear that you find the opt-viewer useful. To your questions, specifically:</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jun 9, 2017, at 9:02 AM, Brian Gesiak <<a href="mailto:modocache@gmail.com" class="">modocache@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hello!<div class="">(+cc Adam Nemet, since he presented on optimization remarks at LLVM Dev Mtg 2016)</div><div class=""><br class=""></div><div class="">I have a large C++ program, which I am compiling using a sampling profile generated via perf and AutoFDO. I'd like to use this profile in order to show the hotness of each code path that is displayed in the new optimization remarks viewer tool (<a href="https://www.youtube.com/watch?v=qq0q1hfzidg" class="">https://www.youtube.com/watch?v=qq0q1hfzidg</a>).</div><div class=""><br class=""></div><div class="">It seems, however, that the '-fdiagnostics-show-hotness' option emits a warning when used with '-fprofile-sample-use': "warning: argument '-fdiagnostics-show-hotness' requires profile-guided optimization information”.</div></div></div></blockquote><div><br class=""></div><div>I think this is probably an oversight and we should accept -fprofile-sample-use as well. I think that simply no one has tried to use the opt-viewer with sample-based profiling so far. (We don’t have this support on macOS, so I’ve only been using PGO.)</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Looking at the code in Clang that generates the warning, it appears that the warning is emitted unless instrumentation profile data is provided. Am I correct in understanding that sampling profile data cannot be used to determine the hotness of the code paths displayed via opt-viewer?</div><div class=""><br class=""></div><div class="">If this is correct, I am curious if this is a hard limitation, or whether I can do some work on CodeGen or ORE to make it possible to use a sampling profile. I ask because, while I'm excited to use optimization remarks, getting an instrumentation profile of my program would be difficult -- it's performance-critical and I can't release an instrumented build.</div></div></div></blockquote><div><br class=""></div><div>I don’t think there is any hard limitation. The information from instrumentation- and sample-based profiling are exposed through the same interface/analysis (BlockFrequencyInfo) within the compiler which is what the optimization remark facility uses.</div><div><br class=""></div><div>So I’d say that this should just work modulo some differences in accuracy due the sampling vs instrumentation. Despite the warning, do we already get hotness in the remarks? It seems we should since we still set DiagnosticsWithHotness in CodeGenOpts [1] and in turn would call setDiagnosticHotnessRequested with true in the LLVM Context [2]. This is what then controls whether we emit hotness in the remark in LLVM [3].</div><div><br class=""></div><div>If this does not work, you probably wan to debug through this path of execution and see where we fail. Let me know if I can help further.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Sorry if this is a dumb question -- I don't have much experience using PGO -- and thanks for all the work on opt-viewer! It's really fun to use.</div></div></div></blockquote><div><br class=""></div><div>Not dumb at all, thanks for bringing this up.</div><div><br class=""></div><div>Adam</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">- Brian Gesiak</div></div>
</div></blockquote></div><br class=""></div><div class="">[1] <a href="https://github.com/llvm-mirror/clang/blob/master/lib/Frontend/CompilerInvocation.cpp#L887" class="">https://github.com/llvm-mirror/clang/blob/master/lib/Frontend/CompilerInvocation.cpp#L887</a></div><div class="">[2] <a href="https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CodeGenAction.cpp#L231" class="">https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CodeGenAction.cpp#L231</a></div><div class="">[3] <a href="https://github.com/llvm-mirror/llvm/blob/master/lib/Analysis/OptimizationDiagnosticInfo.cpp#L179" class="">https://github.com/llvm-mirror/llvm/blob/master/lib/Analysis/OptimizationDiagnosticInfo.cpp#L179</a></div><div class=""><br class=""></div></body></html>