I suggested this offline on the internal bug as an approach.<div>Unioning (literally generating a fake union that has all the original members pointers) works sanely in all languages but is tricky and ugly in practice (and llvm has no unions anymore).</div><div>You can't pick representatives sanely any other way if you keep tbaa because it is not transitive. Same with other types of info other than uo.  if you keep those, discovering valid subsets requires querying every pair.</div><div><br></div><div>If you drop tbaa, etc, you can partition.</div><div><br><div dir="auto">However consensus was long term to use memssa or something else, rather than try to devise partitioning for a fundamentally n^2 representation</div><div dir="auto"><br><br><div class="gmail_quote"><div dir="ltr">On Fri, Aug 12, 2016, 3:25 PM Hal Finkel <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">hfinkel added a subscriber: hfinkel.<br>
hfinkel added a comment.<br>
<br>
There might not be anything we can do in general that is better than this, but could we degrade to using summaries of some kind instead of N^2 queries. For example, imagine that, in the degraded mode, we represented each set using the result of GetUnderlyingObject and the merged AA metadata. Then we queried using <Ptr, Size, AAMD> vs <UO, UnknownSize, MergedAAMD>, but only once per set, not once per pointer in each set? I'm trying to think of a way to keep getting the easy cases, such as noalias function parameters, even if we degrade on the hard things.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D23432" rel="noreferrer" target="_blank">https://reviews.llvm.org/D23432</a><br>
<br>
<br>
<br>
</blockquote></div></div></div>