<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 12, 2013 at 2:55 PM, Jakob Stoklund Olesen <span dir="ltr"><<a href="mailto:stoklund@2pi.dk" target="_blank" class="cremed">stoklund@2pi.dk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":i6j" style="overflow:hidden">That sounds plausible to me. It seems like we might need a way of representing call graph profiling in addition to the existing branch probabilities?<br>
</div></blockquote><div><br></div><div>Agreed. An important consideration here is WPO vs. LTO vs. TU-at-a-time call graphs.</div><div>Â </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div id=":i6j" style="overflow:hidden">FWIW, the greedy register allocator’s live range splitting algorithm is designed to consume profile information so it can push spill code into cold blocks. The primary interface is SpillPlacement::getBlockFrequency() which currently returns an estimate based on loop depth only.</div>
</blockquote></div><br>It doesn't use MachineBlockFrequency? If it does, it will get a lot more than loop depth: __builtin_expect, cold function attribute, and static branch heuristics. If it doesn't it should, and then it will immediately benefit from this.</div>
</div>