[Bug rtl-optimization/78232] [7 Regression] FAIL: gcc.dg/torture/pr48124-4.c
segher at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Nov 10 22:46:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78232
--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Author: segher
Date: Thu Nov 10 22:45:39 2016
New Revision: 242059
URL: https://gcc.gnu.org/viewcvs?rev=242059&root=gcc&view=rev
Log:
combine: Do not call simplify from inside change_zero_ext (PR78232)
When combine splits a three-insn combination into two instructions it
can reuse i2dest for the temporary result of the first new instruction.
However all information it has in reg_stat about that register will be
stale. This results in the simplify_gen_binary calls in change_zero_ext
using out-of-date information, which makes it think one of the ANDs
generated there always results in 0, and it doesn't get better from there.
This can also happen if a splitter in the MD uses nonzero_bits (for
example). I tried to make the splitting code in combine save and restore
the i2dest reg_stat info, but that causes one of the acats tests to fail.
This whole reg_stat thing needs an overhaul, and/or we shouldn't reuse
i2dest for unrelated purposes when splitting.
This patch changes change_zero_ext to do the expected simplifications
itself and not call simplify_gen_*.
PR rtl-optimization/78232
* combine.c (try_combine): Add a big comment about why reusing i2dest
is undesirable.
(change_zero_ext): Do not call simplify_gen_binary, do the
simplifications manually.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/combine.c
More information about the Gcc-bugs
mailing list