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);
}
