<div dir="ltr"><div dir="ltr" class="gmail_msg">Hello,<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I've implemented my idea; a patch is attached. My code computes block weights as follows:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_msg">    w = f[bb] / sum(f[b] for b in func) * sum(s[b] for b in func)</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Where `f` is the frequency of a basic block (as computed by BlockFrequencyInfo), `func` is the function that contains `bb`, and `s` is the number of profiling samples in a block.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Previously, the computation was done as follows:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">    w = f[bb] / f[entry] * s[entry]</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Where `entry` is the entry block of the function containing `bb`.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">At first glance, block weights look more stable. There are fewer cases where weights are zero, because there is a sufficient number of samples in all functions of interest. There are also fewer cases where block weights are unrealistically high, because the weight of a block is now limited to the total number of samples in the function.</div><div class="gmail_msg"><br class="gmail_msg"></div></div><div class="gmail_msg">Questions to the community:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">- What do you think about this method of computing block weights?</div><div class="gmail_msg">- There are some cases where I'm unsure how this method behaves, e.g., with inlining. Thoughts about this are welcome.</div><div class="gmail_msg">- (since this is the first time I'm upstreaming a change to LLVM) What would it take to get this into LLVM?</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Best,</div><div class="gmail_msg">Jonas</div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Fri, Dec 2, 2016 at 10:43 AM Jonas Wagner <<a href="mailto:jonas.wagner@epfl.ch" class="gmail_msg" target="_blank">jonas.wagner@epfl.ch</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">An addendum to fix a mistake in terminology:<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_quote gmail_msg"></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">2) Compute a block's weight as `function_samples * block_weight / sum_of_block_weights_in_function`</div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">This should be `function_samples * block_frequency / sum_of_block_frequencies_in_function`</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Cheers,</div><div class="gmail_msg">Jonas</div></div></div></div></blockquote></div></div></div></div>