<div dir="ltr">We could drop TBAA (I guess we can keep Scope and NoAlias AAMD), and have the degraded AST recompute the sets based on GetUnderlyingObject. That is, partition based on the UO if it isIdentifiedObject, and have a catch-all set for everything else. This will still catch noalias function parameters and a few other cases.<div><br></div><div>But I'm also not sure it's worth the effort, given the eventual move to MemorySSA(?)<br></div><div><br></div><div>Hal, do you think we can live with full degradation?</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 12, 2016 at 3:50 PM, Daniel Berlin <span dir="ltr"><<a href="mailto:dberlin@dberlin.org" target="_blank">dberlin@dberlin.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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><div class="h5"><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" target="_blank">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/<wbr>D23432</a><br>
<br>
<br>
<br>
</blockquote></div></div></div></div></div>
</blockquote></div><br></div>