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>