Hi all,
I now committed this, with changelog
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.
and the patch
On Wed, Nov 09, 2016 at 10:28:37AM +0100, Eric Botcazou wrote:
> > You need more than that, e.g. reg_nonzero_bits_for_combine looks at the
> > nonzero_bits field no matter what else.
>
> Right, this one is sticky, although you can invalidate it globally by means
> of
> nonzero_sign_valid AFAICS.
> You need more than that, e.g. reg_nonzero_bits_for_combine looks at the
> nonzero_bits field no matter what else.
Right, this one is sticky, although you can invalidate it globally by means of
nonzero_sign_valid AFAICS.
> I didn't have the heart to look into this testcase breakage; the
> save/
On Wed, Nov 09, 2016 at 09:30:59AM +0100, Eric Botcazou wrote:
> > 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.
>
> Cou
> 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.
Could you elaborate? Did you try to temporarily invalidate it, e.g. by mean
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-