https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70359
--- Comment #25 from Richard Biener <rguenth at gcc dot gnu.org> --- So we indeed have p_20 and p_9 live as p_9 is used after the loop. Originally this wasn't the case but fold_stmt in the first forwprop pass does this by means of following use-def chains. As I usually say the user could have written the loop that way so a real fix is to try undoing this somewhere. Sprinkling single_use checks in match.pd (or simple_iv_increment_p-like checks) doesn't look like a sustainable approach to me.