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. Richard. > jeff >