In the following testcase: subroutine sub(aa,bb,n,m) implicit none integer, intent(in) :: n,m real, intent(inout) :: aa(n,m) real, intent(in) :: bb(n,m) integer :: i,j do i = 1,m do j= 2,n aa(i,j)= aa(i,j-1)+bb(i,j-1) enddo enddo end subroutine end
The stride of the accesses in the inner-loop is a parameter (m is not a compile-time known constant). As a result the data dataref analyzer reports: " failed: evolution of offset is not affine ... base_address: offset from base address: constant offset from base address: step: aligned to: base_object: (*aa_54(D))[0] symbol tag: SMT.25 " Any chance that the dataref analysis can return an (invariant) expression in "step", so that further analysis could continue? (for example, the access in the outer-loop is consecutive, so if we had an expression to represent the inner-loop stride, we could vectorize the outer-loop). -- Summary: Failing to represent the stride of a dataref when it is not a constant Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dorit at gcc dot gnu dot org GCC build triplet: powerpc64-linux GCC host triplet: powerpc64-linux GCC target triplet: powerpc64-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33113