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

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
On i386 we expand

  _1 = (long long unsigned int) n_2(D);
  _3 = _1 * 4294967297;

using a multiplication but eventually this still ends up as

        movl    8(%ebp), %eax
        movl    %eax, %edx

it seems that fwprop1 manages to clean this up.  So I wonder what the
difference
is between AVR and i386

unsigned long long foo (unsigned int n)
{
  return n | ((unsigned long long)n << 32);
}

Reply via email to