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

Reply via email to