Hi Sandra,
The attached patch implements delinearization of array accesses in the Fortran front end, something that has been discussed for a long time.
Definitely - among others, this is the subject of PR 14741, which is by now quite historic.
I've been asked to try to get this patch committed on the OG10 branch since it is blocking some further optimization work with Graphite for OpenACC kernels regions. I have a mainline version of this patch as well that I can send to anyone interested in trying it out, but TBH, I don't think this is ready for mainline yet.
That would be indeed interesting. Could you post that to the list as well? The current status is that
there are still two gfortran tests that are regressing (gfortran.dg/graphite/id-9.f and gfortran.dg/vect/fast-math-mgrid-resid.f), and while it's been confirmed that this helps with Graphite optimizations as intended, we haven't yet run any benchmarks to confirm that it doesn't make other things slower.
It is probably too late; this could go in for the next stage 1.
(It might, for instance, be appropriate to only delinearize when Graphite optimizations are also enabled.)
Makes sense. Does the patch actually make loop interchange for matrix multiplication work (done with C for loops or Fortran DO loops), or is there additional work required? Regarding scalarized loops: We still to not collapse loops for subroutine foo(a) real, dimension(:,:), contiguous :: a a = 5. end subroutine foo so an extension to scalarized loops would be quite valuable. It would be interesting to see if subroutine foo(a,n,m) real, dimension(n,m) :: a do j=1,m do i=1,n a(i,j) = 5. end do end do end subroutine foo is collapsed to a single loop with the patch and Graphite. Best regards Thomas