char a[16] __attribute__((aligned)) = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; char b[16] __attribute__((aligned)) = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; char c[16] __attribute__((aligned));
int i; for(i = 0; i<16; i++) { c[i] = a[i] + b[i]; } for(i = 0; i<16; i++) { printf("%i ", c[i]); } This code is not vectorized anymore in GCC 4.2.0 (svn checkout on Feb, 06 2006). The vectorizer tells that : paddb4bugreport.c:14: note: vect_is_simple_use: operand (unsigned char) D.1872_47 paddb4bugreport.c:14: note: not ssa-name. paddb4bugreport.c:14: note: use not simple. paddb4bugreport.c:14: note: not vectorized: relevant stmt not supported: D.1873_48 = (unsigned char) D.1872_47 paddb4bugreport.c:14: note: bad operation or unsupported loop bound.(get_loop_exit_condition if (ivtmp.52_2 != 0) goto <L13>; else goto <L5>;) Seems to be a problem before the autovectorizer as the (unsigned char) cast should not happen IMHO. -- Summary: Regression vs 4.1.0cvs20051015 - Trivial operation not vectorized Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: regression AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hurbain at cri dot ensmp dot fr http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26128