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