[Bug tree-optimization/96167] fails to detect ROL pattern in simple case, but succeeds when operand goes through memcpy

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jul 15 14:04:05 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96167

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Like:
unsigned long long
foo (unsigned long long x)
{
  union U { unsigned long long x; char y[8]; } u, v;
  u.x = x;
  v.y[0] = u.y[7];
  v.y[1] = u.y[0];
  v.y[2] = u.y[1];
  v.y[3] = u.y[2];
  v.y[4] = u.y[3];
  v.y[5] = u.y[4];
  v.y[6] = u.y[5];
  v.y[7] = u.y[6];
  return v.x;
}

unsigned long long
bar (unsigned long long x)
{
  union U { unsigned long long x; char y[8]; } u;
  u.x = x;
  char t = u.y[7];
  u.y[7] = u.y[6];
  u.y[6] = u.y[5];
  u.y[5] = u.y[4];
  u.y[4] = u.y[3];
  u.y[3] = u.y[2];
  u.y[2] = u.y[1];
  u.y[1] = u.y[0];
  u.y[0] = t;
  return u.x;
}


More information about the Gcc-bugs mailing list