On 02/23/2017 01:57 AM, Richard Biener wrote:
On Wed, Feb 22, 2017 at 6:19 PM, Jeff Law <l...@redhat.com> wrote:
On 02/16/2017 12:41 PM, Bernd Schmidt wrote:
We have two registers being assigned to each other:
(set (reg 213) (reg 209))
(set (reg 209) (reg 213))
These being the only definitions, we are happy to forward propagate reg
209 for reg 213 into a third insn, making a new use for reg 209. We are
then happy to forward propagate reg 213 for it in the same insn...
ending up in an infinite loop.
I don't really see an elegant way to prevent this, so the following just
tries to detect the situation (and more general ones) by brute force.
Bootstrapped and tested on x86_64-linux, verified that the test passes
with a ppc cross, ok?
Bernd
79405.diff
PR rtl-optimization/79405
* fwprop.c (forward_propagate_into): Detect potentially cyclic
replacements and bail out for them.
PR rtl-optimization/79405
* gcc.dg/torture/pr79405.c: New test.
OK.
Err - this looks quite costly done for each fwprop. And placing it before
less costly bailouts even...
See my discussion with Bernd anyway.
I read your last message as being OK with Bernd's approach? Did I
mis-understand?
jeff