When I compile qt334 with the actual snapshot of gcc41 I get an ICE when I enable autovectorisation. Michael Cieslinski g++41f -c -O2 -ftree-vectorize -o qimage.o qimage.ii kernel/qimage.cpp: In function 'bool convert_32_to_8(const QImage*, QImage*, int, QRgb*, int)': kernel/qimage.cpp:1489: internal compiler error: in convert_move, at expr.c:390 Please submit a full bug report, with preprocessed source if appropriate. g++41f -v Using built-in specs. Target: x86_64-unknown-linux-gnu Configured with: ../gcc-4.1-20050709/configure --prefix=/usr/local/gcc41f --program-suffix=41f --with-arch=opteron --enable-languages=c,c++ --enable-checking Thread model: posix gcc version 4.1.0 20050709 (experimental)
Created attachment 9266 [details] preprocessed source
This ICE occurs first with snapshot 20050417, snapshot 20050410 does not ICE
This is most likely a type mismatch.
Confirmed, reduced testcase: void convert_32_to_8(void) { static unsigned bm[16]; int j; for (j=0; j<16;j++) bm[j]<<=8; }
This is even reproducible on x86 with -O1 -msse2
Nope the types are correct. The bug is in the middle-end when expanding VECTOR << VECTOR.
No, the bug is in the vectorizer that produces a LSHIFT_EXPR rather than a VEC_LSHIFT_EXPR. There must have been problems committing the patch. :-( Paolo
Not even that... the backend for i386 accepts an SI, not a V4SI, as the shift count. This upsets the expander noticeably.
*** Bug 21234 has been marked as a duplicate of this bug. ***
This ICE is still present with the actual snapshot (20050819)
*** Bug 23595 has been marked as a duplicate of this bug. ***
*** Bug 23808 has been marked as a duplicate of this bug. ***
This causes a build failure if you turn on -ftree-vectorize when building the target libraries.
Subject: Bug 22480 CVSROOT: /cvs/gcc Module name: gcc Changes by: dorit@gcc.gnu.org 2005-09-14 09:27:02 Modified files: gcc : ChangeLog Makefile.in tree-vect-transform.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/gcc.dg/vect: pr22480.c Log message: 2005-09-14 Uros Bizjak <uros@kss-loka.si> PR middle-end/22480 * tree-vect-transform.c (vectorizable_operation): Return false for scalar shift operations and for vector shift operations with non-invariant shift arguments. Use scalar tree operand op1 as a shift operand when vector shift insn pattern uses scalar shift operand. * Makefile.in (tree-vect-transform.o): Depend on recog.h. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.9953&r2=2.9954 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/Makefile.in.diff?cvsroot=gcc&r1=1.1540&r2=1.1541 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-vect-transform.c.diff?cvsroot=gcc&r1=2.43&r2=2.44 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6063&r2=1.6064 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/vect/pr22480.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
Fixed.
Subject: Bug 22480 Author: rth Date: Fri Dec 2 17:45:02 2005 New Revision: 107910 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=107910 Log: 2005-09-14 Uros Bizjak <uros@kss-loka.si> PR middle-end/22480 * tree-vect-transform.c (vectorizable_operation): Return false for scalar shift operations and for vector shift operations with non-invariant shift arguments. Use scalar tree operand op1 as a shift operand when vector shift insn pattern uses scalar shift operand. * Makefile.in (tree-vect-transform.o): Depend on recog.h. Modified: branches/autovect-branch/gcc/ChangeLog branches/autovect-branch/gcc/Makefile.in branches/autovect-branch/gcc/tree-vect-transform.c