https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98404
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Compiler emits unexpected |ldist might punt on too
|function call that may |large expressions for
|cause security problems |detected patterns with -Os
Ever confirmed|0 |1
CC| |rguenth at gcc dot gnu.org
Last reconfirmed| |2020-12-21
Status|RESOLVED |REOPENED
Resolution|INVALID |---
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Well, for -Os I guess we should reopen this for the case where the expressions
needed for the detected patterns look too big.
ldist in this case turns the loop into:
_34 = _3 + -1;
_33 = (unsigned int) _34;
_32 = (sizetype) _33;
_35 = _32 * 8;
_36 = _3 > 0 ? _35 : 0;
_37 = (long unsigned int) nm_25;
_38 = _37 * 8;
_39 = (sizetype) _33;
_40 = 1 - _39;
_41 = _40 * 8;
_42 = _3 > 0 ? _41 : 8;
_43 = _38 + _42;
_44 = p_20 + _43;
_45 = (long unsigned int) nm_25;
_46 = _45 * 8;
_47 = (unsigned int) _34;
_48 = (sizetype) _47;
_49 = 1 - _48;
_50 = _49 * 8;
_51 = _3 > 0 ? _50 : 8;
_52 = _46 + _51;
_53 = _52 + 18446744073709551608;
_54 = p_20 + _53;
__builtin_memmove (_44, _54, _36);
and while some of it is optimized later, we still have:
_4 = (long unsigned int) nm_25;
_5 = _4 * 8;
_6 = p_20 + _5;
_33 = (unsigned int) nm_25;
_32 = (sizetype) _33;
_35 = _32 * 8;
_36 = _3 > 0 ? _35 : 0;
_40 = 1 - _32;
_41 = _40 * 8;
_42 = _3 > 0 ? _41 : 8;
_43 = _5 + _42;
_44 = p_20 + _43;
_9 = _5 + 18446744073709551608;
_53 = _9 + _42;
_54 = p_20 + _53;
in *.optimized.