[LLVMdev] Alias analysis interface

Dan Gohman dan433584 at gmail.com
Mon Nov 12 09:53:49 PST 2012


On Fri, Nov 9, 2012 at 5:16 PM, Shuxin Yang <shuxin.llvm at gmail.com> wrote:

>  >what specifically you would like alias analysis to do?
>
> Quite honestly, I don't know what interface is convenient for optimizer. I
> once implemented a flow-sensitive alias-analysis as a hobby project,
> which was able to disambiguate the subscripted variables like a[i] and
> a[i-1]. Unfortunately, the interface is pretty messy, that
> is why I solicit your insight on this issue.
>
> The problem is: in what situations, Alias(a[i], a[i-1]) is desirable to
> return "alias", and in what situations,
> it is desirable to return "no alias".
>

LLVM defines "AliasAnalysis" to be an API which never looks across loop
iterations, so "no alias" is correct here.


>
> Example 1:
> ===========
>
>
>   for (i = 0; i < N; i++) {
>         a[i] = ... /* s1 */
>        sum += a[i-1];
>    }
>
>   In DCE, Alias(a[i], a[i-1]) is desirable to return "alias". S1 would
> otherwise be mistakenly deleted.
>

LLVM's dead store elimination pass isn't smart enough to delete this kind
of dead store, so its use of the AliasAnalysis API is fine. A more
aggressive dead store elimination pass would need to use a higher-level API.


>
> Example 2:
> =========
>  In following contrived example, Alias(a[i], a[i-1]) is desirable to
> return "no alias" in order to enable the propagation between S1 and S3.
>
>    for (i ...) {
>           a[i] =    /* S1 */
>           a[i-1]  = /* S2 */
>                 = a[i] /* S3*/
>    }
>
>   As you can see from the above two examples, both answers ("alias" and
> "not alias") are correct, but in different context.
>
> Is passing both mem access to Alias() sufficient, or should we also need
> to pass
>     1) the common loop that tightly enclose two memory access, and
>     2) boolean value indicate if the optimization is across loop or not.
>
>  We likely should, but it the the interface clunky to use. What is your
> insight into this problem?
>

One of LLVM's insights is that simple optimizations which don't look across
loop boundaries, or which only do so in limited and careful ways, are "good
enough" in many real-world situations. The AliasAnalysis API is designed to
support this kind of use, and it benefits from this simplicity. The
AliasAnalysis API can also serve as a base on which higher-level analyses
can be built.

Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121112/678edc18/attachment.html>


More information about the llvm-dev mailing list