<div dir="ltr">Thanks for taking on this work!<div><br></div><div>I'm curious:<br>Does your new patch + correctness fixes take > 2 iterations to converge on the .ll file?</div><div>(If so, something is still wrong :P)<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 11, 2016 at 11:58 AM, 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 updated this revision to Diff 56947.<br>
aprantl added a comment.<br>
<br>
This fixes the remaining bugs in the original patch and adds some cleanups.<br>
<br>
- [Correctness] The VarLoc::operator<() implementation now takes semantic equality between two VarLocs (that have different MI pointers in them) into account.<br>
- [Correctness] Both operator<() implementations now check for equality of the first pointer before comparing the second pointer.<br>
- In join(), I'm using an in-place llvm::set_intersect().<br>
- [Debuggability] printVarLocInMBB() now sorts the output in BB order<br>
- The order of the DEBUG_VALUEs is different when they come from a set, so I needed to update two of our testcases.<br>
<br>
Before this patch, a particularly nasty ASANified testcase that I had took<br>
<br>
  user  9m20.248s<br>
<br>
After this patch, the same testcase compiles in<br>
<br>
  user  3m12.294s<br>
<br>
Definitely a big win! I'll look into the Bitvectors next, but I think we can also land this version of the patch meanwhile.<br>
<br>
<br>
<a href="http://reviews.llvm.org/D20178" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20178</a><br>
<br>
Files:<br>
  lib/CodeGen/LiveDebugValues.cpp<br>
  test/DebugInfo/COFF/register-variables.ll<br>
  test/DebugInfo/MIR/X86/live-debug-values-3preds.mir<br>
<br>
</blockquote></div><br></div>