[Bug rtl-optimization/89794] combine incorrectly forwards register value through auto-inc operation

2019-08-31 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89794

Segher Boessenkool  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #9 from Segher Boessenkool  ---
Fixed on 9 and trunk.  Closing.

[Bug rtl-optimization/89794] combine incorrectly forwards register value through auto-inc operation

2019-04-15 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89794

--- Comment #8 from Segher Boessenkool  ---
Author: segher
Date: Mon Apr 15 11:33:29 2019
New Revision: 270368

URL: https://gcc.gnu.org/viewcvs?rev=270368=gcc=rev
Log:
combine: Count auto_inc properly (PR89794)

The code that checks if an auto-increment from i0 or i1 is not lost is
a bit shaky.  The code to check the same for i2 is non-existent, and
cannot be implemented in a similar way at all.  So, this patch counts
all auto-increments, and makes sure we end up with the same number as
we started with.  This works because we still have a check that we
will not duplicate any.

We should do this some better way, but not while we are in stage 4.


PR rtl-optimization/89794
* combine.c (count_auto_inc): New function.
(try_combine): Count how many auto_inc expressions there were in the
original instructions.  Ensure we have the same number in the new
instructions.  Remove the code that tried to ensure auto_inc side
effects on i1 and i0 are not lost.

gcc/testsuite/
PR rtl-optimization/89794
* gcc.dg/torture/pr89794.c: New testcase.

Added:
trunk/gcc/testsuite/gcc.dg/torture/pr89794.c
Modified:
trunk/ChangeLog
trunk/gcc/combine.c
trunk/gcc/testsuite/ChangeLog