This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/17165] New: [lno] pass by reference inhibits vectorization
- From: "stefaandr at hotmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Aug 2004 08:53:22 -0000
- Subject: [Bug tree-optimization/17165] New: [lno] pass by reference inhibits vectorization
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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