<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 18, 2016 at 5:33 PM, Adrian Prantl <span dir="ltr"><<a href="mailto:aprantl@apple.com" target="_blank">aprantl@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">aprantl added a comment.<br>
<span class=""><br>
In <a href="http://reviews.llvm.org/D20178#431100" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20178#431100</a>, @dberlin wrote:<br>
<br>
> Note: If the time bound on the version with N^2 inner loops is beyond what<br>
>  you want to do, happy to review the patch as-is and get it in, and we can<br>
>  just drop a comment about further improvement<br>
<br>
<br>
</span>Thanks, I think it would be a good idea to make a cut here and land this revision in trunk as an intermediate step so we can use it as a basis for further improvements!<br>
<br></blockquote><div>Sounds good to me!</div><div>I'll do a second review just to make sure there is nothing obviously wrong.</div><div> </div><div>Thanks for working so hard on this.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'll keep working on it, but doing so takes time, and I keep getting distracted by other things.<br>
<br></blockquote><div><br></div><div>That's my life! </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
As for my progress: I'm done with my first iteration of rewriting transferRegisterDef() and it had almost no effect on my benchmark. This is because in my benchmark none of the variables survive the first basic block, which explains why I couldn't measure any improvements. I'll need to find a better benchmark to profile my bitvectorized transferRegisterDef() implementation.<br></blockquote><div><br></div><div>interesting :)</div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
So where are the remaining 2 minutes spent? With some more profiling I figured that most of the time is spent in transferDebugValue(). In my benchmark OpenRanges has >5000 elements (mostly from inlined C++ one-liners) so linearly iterating over all of them for every DEBUG_VALUE is very expensive. My idea is to exploit the sorted-ness of the map in the UniqueVector to only iterate over only over the elements that share the same DebugVariable.<br></blockquote><div><br></div><div>Yeah.  equal_range is your friend.</div><div>You could also ilist the datastructure so they were all linked together naturally.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
I'll post a separate review once I've got something presentable.<br>
<br>
<br></blockquote><div>Sounds good.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<a href="http://reviews.llvm.org/D20178" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20178</a><br>
<br>
<br>
<br>
</blockquote></div><br></div></div>