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

Reply via email to