[llvm-commits] [PATCH] Multidimensional Array Index Delinearization Analysis
Tobias Grosser
tobias at grosser.es
Thu Sep 27 03:11:32 PDT 2012
On 09/27/2012 11:29 AM, Sameer Sahasrabuddhe wrote:
>
> Hi Hal,
>
> I tried the version from Delinearization-20120926.patch on a Fortran
> loopnest, with -O3 before invoking delinearization. See attached file
> "m.pre.ll".
>
> The delinearizer misses out on the negation expression implemented as
> an XOR (the value "%not"):
>
> ~n = -n - 1
>
> As a result, the "n" above is not available as a possible term in a GCD.
> It worked when I manually substituted that negation with its expansion.
> I am not sure if this should be handled as an additional method
> "addPolysForXor()", or the IR itself should be modified as a precursor
> to delinearization. This expansion is similar to what happens in
> ScalarEvolution::getNotSCEV().
It seems we would need to mirror a lot of pattern matching from
ScalarEvolution. Working directly on SCEVs could avoid this.
Another remark comping from a similar angle. The current analysis is not
on demand, but always iterates over all instructions. I have the feeling
within LLVM, people try to perform analysis on demand (e.g. Prestons
Dependency Analysis, but also ScalarEvolution). Working directly on
SCEVs would make it easy to do an on-demand analysis that is only called
for the scevs used by memory access instructions.
@Andrew: I remember you mentioned that ScalarEvolution has some design
problems. Could you elaborate on them and if they would cause issues in
this context?
Cheers
Tobi
More information about the llvm-commits
mailing list