http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14741

--- Comment #21 from Sebastian Pop <spop at gcc dot gnu.org> ---
Scop detection does not detect this loop because we now require the scev of the
data references to be analyzable in all the loops around:

commit e97c4b0daa932558eae4d9b9794cdd549e6d40bd
Author: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Tue Jan 10 09:14:51 2012 +0000

    2012-01-10  Richard Guenther  <rguent...@suse.de>

        PR tree-optimization/50913
        * graphite-scop-detection.c (stmt_has_simple_data_refs_p):
        Require data-refs to be representable by Graphite with respect
        to any loop nest.

        * gcc.dg/graphite/interchange-16.c: New testcase.
        * gcc.dg/graphite/scop-20.c: XFAIL.
        * gfortran.dg/graphite/interchange-1.f: Likewise.
        * gfortran.dg/graphite/block-1.f90: Likewise.
        * gfortran.dg/graphite/block-2.f: Likewise.

So for this gimple stmt:
# VUSE <.MEM_6>
_29 = *a_28(D)[_27];

the data reference when analyzed in the innermost loop is:
{(stride.12_14 + offset.13_15) + _19, +, stride.12_14}_3
and that cannot be represented in graphite as it has a non constant
(parametric) stride.

Note that this data reference can be represented in an outer loop, as the
stride is then a multidimensional access with constant strides.

Reply via email to