<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 27, 2015 at 11:52 AM, 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"><div id=":52b" class="a3s" style="overflow:hidden">I changed it so it uses a scaling factor that puts the frequencies in<br>
[1, UINT32_MAX], but only if the Max frequency is outside that range.<br>
This is causing two failures in the testsuite, which seem to be caused<br>
by RA spilling differently. I believe that in CodeGen/X86/lsr-i386.ll<br>
we are hoisting into the wrong loop now, but I'm not sure.<br>
<br>
The other failure is in CodeGen/Thumb2/v8_IT_5.ll is different block<br>
placement. Which is a bit odd. The frequencies given by my changes are<br>
certainly different, but the body of the loop is given a<br>
disproportionately larger frequency than the others (much like in the<br>
original case).  Though, I think what's going on here is that my<br>
changes are causing the smaller frequencies to be saturated down to 1:<br>
<br>
Original:<br>
float-to-int: min = 0.0000004768367035, max = 2047.994141, factor = 16777232.0<br>
<br>
Printing analysis 'Block Frequency Analysis' for function 't':<br>
  block-frequency-info: t<br>
   - entry: float = 1.0, int = 16777232<br>
   - if.then: float = 0.0000009536743164, int = 16<br>
   - if.else: float = 0.9999990463, int = 16777216<br>
   - if.then15: float = 0.0000009536734069, int = 16<br>
   - if.else18: float = 0.9999980927, int = 16777200<br>
   - if.then102: float = 0.0000009536734069, int = 16<br>
   - cond.true10.i: float = 0.0000004768367035, int = 8<br>
   - t.exit: float = 0.0000009536734069, int = 16<br>
   - if.then115: float = 0.4999985695, int = 8388592<br>
   - if.else145: float = 0.2499992847, int = 4194296<br>
   - if.else163: float = 0.2499992847, int = 4194296<br>
   - while.body172: float = 2047.994141, int = 34359672832<br>
<br>
<br>
                                                           -<br>
if.else173: float = 0.4999985695, int = 8388592<br>
<br>
<br>
<br>
My patch:<br>
float-to-int: min = 0.0000004768367035, max = 9223345648592486401.0,<br>
factor = 0.0000000004656626195<br>
<br>
block-frequency-info: t<br>
 - entry: float = 1.0, int = 1<br>
 - if.then: float = 0.0000009536743164, int = 1<br>
 - if.else: float = 0.9999990463, int = 1<br>
 - if.then15: float = 0.0000009536734069, int = 1<br>
 - if.else18: float = 0.9999980927, int = 1<br>
 - if.then102: float = 0.0000009536734069, int = 1<br>
 - cond.true10.i: float = 0.0000004768367035, int = 1<br>
 - t.exit: float = 0.0000009536734069, int = 1<br>
 - if.then115: float = 0.4999985695, int = 1<br>
 - if.else145: float = 0.2499992847, int = 1<br>
 - if.else163: float = 0.2499992847, int = 1<br>
 - while.body172: float = 9223345648592486401.0, int = 4294967295<br>
 - if.else173: float = 0.4999985695, int = 1<br>
<br>
<br>
<br>
The scaling factor is so minuscule that I end up squashing every "low"<br>
frequency to 1. I think I need to smooth this better. In the meantime,<br>
I wanted to pick your brain. Maybe I'm completely off-base in my<br>
analysis.</div></blockquote></div><br>This all makes sense to me.</div><div class="gmail_extra"><br></div><div class="gmail_extra">I think we should do at least one thing and maybe two things:</div><div class="gmail_extra"><br></div><div class="gmail_extra">1) I wonder if there is a reason that we *need* to scale down to a 32-bit max? Even if we increase the max though, I suspect we'll still see cases where this doesn't work well. It's interesting that we hit 32-bit limits so quickly when using synthetic loop estimates.</div><div class="gmail_extra"><br></div><div class="gmail_extra">2) I think we should use a non-linear scale once the range exceeds [1, MAX]. We were already doing some of this and I think we just need to do more. I could see either a quadratic or exponential scaling technique working well... Or one of the interpolation scaling techniques. I think we'll have to experiment to identify the best one. In particular, I'm imagining we'll want to play with both quadratic and exponential scales in both directions: compressing the high frequencies and compressing the low frequencies. And if neither is good, we may need an interpolation that compresses both the high and low frequencies.</div><div class="gmail_extra"><br></div><div class="gmail_extra">(Naturally, I'm interested in other ideas for how to handle this as well...)</div></div>