<div dir="ltr">From what I know about Fortran (which is next to nothing), it provides aliasing guarantees, e.g. that different rows<br>don't alias so yes this is important there.<br><br>A note regarding C/C++ that I was assuming, but only confirmed recently.<br><br>Any serious multi-dimensional performance code (e.g. benchmarks) is not written with indirect pointers. E.g. if you want to do operations<br><div>on a 3-D array, the function won't get a ***A. It will get *A and then index like A[i*n + j*m + k] (this is the same if you<br>take a multi-dim static array, in which indexing is lowered into the same thing - single pointer and GEPs).<br><br>Probably the reason is what we're discussing. Because you get one pointer, that you also mark _restrict_, and you're done.<br><br>I'm (partly) in the middle of investigating DA's role in LLVM, hopefully something good will come out.<br><br>- Stefanos</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Στις Τετ, 15 Ιουλ 2020 στις 10:17 μ.μ., ο/η David Greene <<a href="mailto:david.greene@hpe.com">david.greene@hpe.com</a>> έγραψε:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Stefanos Baziotis via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> writes:<br>
<br>
> Well... I tried that and it doesn't seem to be very useful<br>
> unfortunately.  The C/C++ way that arrays are defined is probably why<br>
> DA is not that useful. Namely that a row can alias with another row in<br>
> 2D arrays. The theory behind DA is quite powerful if we knew that they<br>
> don't alias. Right now, it just gives up.<br>
<br>
Note that the situation is very different in flang, where good<br>
dependence analysis becomes much more critical.<br>
<br>
                      -David<br>
</blockquote></div>