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



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



           What    |Removed                     |Added

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

             Status|UNCONFIRMED                 |NEW

   Last reconfirmed|                            |2012-12-07

                 CC|                            |ebotcazou at gcc dot

                   |                            |gnu.org, jakub at gcc dot

                   |                            |gnu.org, jamborm at gcc dot

                   |                            |gnu.org

   Target Milestone|---                         |4.6.4

            Summary|vector extensions cause     |[4.6/4.7 Regression] vector

                   |movdqa to be generated for  |extensions cause movdqa to

                   |memcpy on unaligned buffer  |be generated for memcpy on

                   |                            |unaligned buffer

     Ever Confirmed|0                           |1



--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-07 
14:05:29 UTC ---

Reduced testcase:



typedef unsigned int T __attribute__ ((vector_size (16)));

extern int rand ();



void

foo (unsigned char *x, unsigned long y)

{

  union { T v; } r;

  T e = { 0, rand (), 0, 0 };

  r.v = e;

  while (y >= 16)

    {

      __builtin_memcpy (x, &r, 16);

      x += 16;

      y -= 16;

    }

}



int

main ()

{

  unsigned char b[32];

  foo (b + 1, 16);

  return b[16];

}



Works on trunk, likely (haven't bisected it to the last few revs, so it is

range r161958 (last known good) and r161976 (first broken)) introduced by

http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=161974

and fixed by

http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=186501

(or just made latent?).

CCing authors of corresponding changes.

Reply via email to