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



Jakub Jelinek <jakub at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|UNCONFIRMED                 |RESOLVED

                 CC|                            |jakub at gcc dot gnu.org

         Resolution|                            |FIXED

   Target Milestone|---                         |4.8.0



--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-10-19 
09:10:02 UTC ---

That is due to the overaligned type.  For GCC 4.7 and above, just use

__builtin_assume_aligned instead to hint the compiler about alignment.

void

foo (int n, int * __restrict px, int * __restrict qx)

{

  int *__restrict p = __builtin_assume_aligned (px, 16);

  int *__restrict q = __builtin_assume_aligned (qx, 16);

  while (n--)

    *p++ = *q++;

}



BTW, GCC 4.8 turns the testcase into memcpy (and with *q++ + 1 or similar to

avoid the memcpy it is vectorized since PR54894).



I don't think we want to change anything here for gcc 4.7.

Reply via email to