/* PR rtl-optimization/89679 */
/* { dg-do run } */
/* { dg-options "-Og -frerun-cse-after-loop -fno-tree-fre" } */

unsigned short g;

void
foo (unsigned long long x)
{
  if (x != 0xffff)
    __builtin_abort ();
}

int
main ()
{
#if __SIZEOF_SHORT__ == 2 && __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8
  unsigned short d = 0;
  unsigned long long x, c = ~0;
  c = c >> d;
  __builtin_memset (&d, c, 2);
  x = d + g;
  foo (x);
#endif
  return 0;
}