[Bug tree-optimization/17165] New: [lno] pass by reference inhibits vectorization

stefaandr at hotmail dot com gcc-bugzilla@gcc.gnu.org
Tue Aug 24 08:53:00 GMT 2004


The following code doesn't get vectorized:

typedef int T; T a[4], c[4];

T & input(int x) { return a[x]; };
T & result(int x) { return c[x]; };

int main() {
        for (int x=0; x<4; ++x)
                result(x) = input(x);
};

which is just c[x] = a[x], but with wrapper functions.  

It gives:
Access function of ptr: {(T &)&a, +, 4}_1
loop at test23.cpp:4: not vectorized: non constant init/step for pointer access.
loop at test23.cpp:4: bad data references.

The step is constant, so I guess &a is considered "non-constant".  And why does
it say &a (incorrect in my opinion), instead of &a[0]?

Reading specs from
/esat/olympia/install/lib/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/specs
Configured with: /esat/alexandria1/stefaan/src/gcc/lno/configure
--prefix=/esat/olympia/install --program-suffix=-lno --enable-languages=c,c++ :
(reconfigured) /esat/alexandria1/stefaan/src/gcc/lno/configure
--prefix=/esat/olympia/install --program-suffix=-lno
--with-gcc-version-trigger=/esat/alexandria1/stefaan/src/gcc/lno/gcc/version.c
--enable-languages=c,c++ --no-create --no-recursion : (reconfigured)
/esat/alexandria1/stefaan/src/gcc/lno/configure --prefix=/esat/olympia/install
--program-suffix=-lno
--with-gcc-version-trigger=/esat/alexandria1/stefaan/src/gcc/lno/gcc/version.c
--enable-languages=c,c++ --no-create --no-recursion
Thread model: posix
gcc version 3.5-tree-ssa-lno 20040824 (merged 20040718)
 /esat/olympia/install/libexec/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/cc1plus
-quiet -v -D_GNU_SOURCE test23.cpp -quiet -dumpbase test23.cpp -march=pentium4
-auxbase-strip test23.o -O9 -version -ftree-vectorize -fdump-tree-vect-stats
-fdump-tree-vect-details -funroll-all-loops -finline-limit=1000000
-finline-functions -o /tmp/ccsL4r8X.s
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory
"/esat/olympia/install/lib/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /esat/olympia/install/lib/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/../../../../include/c++/3.5-tree-ssa-lno
 /esat/olympia/install/lib/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/../../../../include/c++/3.5-tree-ssa-lno/i686-pc-linux-gnu
 /esat/olympia/install/lib/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/../../../../include/c++/3.5-tree-ssa-lno/backward
 /esat/olympia/install/include
 /esat/olympia/install/lib/gcc/i686-pc-linux-gnu/3.5-tree-ssa-lno/include
 /usr/include
End of search list.
GNU C++ version 3.5-tree-ssa-lno 20040824 (merged 20040718) (i686-pc-linux-gnu)
        compiled by GNU C version 3.4.1.
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
 as -V -Qy -o test23.o /tmp/ccsL4r8X.s
GNU assembler version 2.15 (i686-pc-linux-gnu) using BFD version 2.15

-- 
           Summary: [lno] pass by reference inhibits vectorization
           Product: gcc
           Version: lno
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: stefaandr at hotmail dot com
                CC: gcc-bugs at gcc dot gnu dot org


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



More information about the Gcc-bugs mailing list