<div dir="ltr">Yeah, we definitely don't implement this, and i'm not sure why we would.<div>The best guess i can come up with is that it's really attempting to say something like</div><div><br></div><div>1 = *A+4 (size 4)</div><div>2 = *A (size 8)</div><div><br></div><div>load from 2 PartialAlias 1 (not MustAlias)</div><div><br></div><div>Which is conservative but correct, and meant to ensure alias(1, 2) == alias(2, 1)</div><div><br></div><div>That would match with our definition of MustAlias, which would not allow 2 MustAlias 1 either.</div><div><br></div><div>There isn't really a good set of consistent answers between most compilers when the sizes are different but memory addresses overlap.</div><div><br></div><div>IE it seems reasonable to say that a load of 2 MustAlias 1 but a load of 1 PartialAlias 2. It also seems reasonable to declare these both PartialAlias.</div><div><br></div><div>In any case, our current implementation, from what i remember (i didn't trace *every* path), says:</div><div><br></div><div>if MemoryLocations are same size: </div><div>may if no idea</div><div>must if the same</div><div>partial if we can prove overlap</div><div><br></div><div>If MemoryLocations are different sizes:</div><div>may if no idea</div><div>partial if overlap</div><div>never must</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 14, 2017 at 1:06 PM, Hal Finkel via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
On 07/14/2017 03:00 PM, Davide Italiano via llvm-dev wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Fri, Jul 14, 2017 at 12:50 PM, Nuno Lopes via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I going through the alias analysis documentation<br>
(<a href="http://llvm.org/docs/AliasAnalysis.html" rel="noreferrer" target="_blank">http://llvm.org/docs/AliasAna<wbr>lysis.html</a>) and noticed the following in the<br>
definition of PartialAlias:<br>
"<br>
The PartialAlias response is used when the two memory objects are known to<br>
be overlapping in some way, but *do not start at the same address*.<br>
"<br>
<br>
Is it really required that the objects do no start at the same address?  if<br>
that's the case the AA algorithm would need to prove that.<br>
I'm asking this because:<br>
1) This condition seems very strict and I don't think it's met in a few<br>
places I found by manual inspection<br>
</blockquote>
If I read the definition correctly, at least our Andersens' AA<br>
implementation violates it.<br>
see:<br>
<br>
AliasResult CFLAndersAAResult::alias(const MemoryLocation &LocA,<br>
                                      const MemoryLocation &LocB) {<br>
   if (LocA.Ptr == LocB.Ptr)<br>
     return LocA.Size == LocB.Size ? MustAlias : PartialAlias;<br>
<br>
<br>
(i.e. the two objects are overlapping here *and* start at the same address).<br>
</blockquote>
<br></div></div>
I've never noticed that part of the definition myself. I'm fairly certain that's not what we actually implement.<br>
<br>
 -Hal<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><span class="HOEnZb"><font color="#888888"><br>
</font></span></blockquote><span class="HOEnZb"><font color="#888888">
<br>
-- <br>
Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
<br>
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</font></span></blockquote></div><br></div>