aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-uninit.c
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2016-11-10 23:45:39 +0100
committerSegher Boessenkool <segher@gcc.gnu.org>2016-11-10 23:45:39 +0100
commit071af74db674f3dc462ab8a25e091b74830fda2d (patch)
treef4dd580ff3206cc32f7ebf4f180b9306bacfe206 /gcc/tree-ssa-uninit.c
parent94903212646d0b90a92afc0ca47a348ab92719c1 (diff)
downloadgcc-071af74db674f3dc462ab8a25e091b74830fda2d.zip
gcc-071af74db674f3dc462ab8a25e091b74830fda2d.tar.gz
gcc-071af74db674f3dc462ab8a25e091b74830fda2d.tar.bz2
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. From-SVN: r242059
Diffstat (limited to 'gcc/tree-ssa-uninit.c')
0 files changed, 0 insertions, 0 deletions