https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90578
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |rguenth at gcc dot gnu.org
Resolution|--- |INVALID
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
left-shift by negative value is undefined. arithmetic left-shift _of_ a
negative value is undefined as well.
I see lshift translates to a logical shift so the 2nd issue is moot. But we
have in .gimple:
_1 = (unsigned int) D.3899;
_2 = _1 << -30;
note that constant folding treats _1 << -30 as _1 >> 30 but at -O0 we
ask the CPU to perform this shift via
sall %cl, %edx
which simply truncates -30 by & 255.