https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98334
--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:4615cde5d7ef281d4b554df411f82ad707f0a54d commit r11-6456-g4615cde5d7ef281d4b554df411f82ad707f0a54d Author: Jakub Jelinek <ja...@redhat.com> Date: Tue Jan 5 10:57:52 2021 +0100 simplify-rtx: Optimize (x - 1) * y + y [PR98334] We don't try to optimize for signed x, y (int) (x - 1U) * y + y into x * y, we can't do that with signed x * y, because the former is well defined for INT_MIN and -1, while the latter is not. We could perhaps optimize it during isel or some very late optimization where we'd turn magically flag_wrapv, but we don't do that yet. This patch optimizes it in simplify-rtx.c, such that we can optimize it during combine. 2021-01-05 Jakub Jelinek <ja...@redhat.com> PR rtl-optimization/98334 * simplify-rtx.c (simplify_context::simplify_binary_operation_1): Optimize (X - 1) * Y + Y to X * Y or (X + 1) * Y - Y to X * Y. * gcc.target/i386/pr98334.c: New test.