https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79405
Jeffrey A. Law <law at redhat dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aldyh at gcc dot gnu.org, | |dmalcolm at gcc dot gnu.org --- Comment #10 from Jeffrey A. Law <law at redhat dot com> --- Aldy, David, either of you want to take a shot at this one? So right now we have this loop in fwprop.c: /* Go through all the uses. df_uses_create will create new ones at the end, and we'll go through them as well. Do not forward propagate addresses into loops until after unrolling. CSE did so because it was able to fix its own mess, but we are not. */ for (i = 0; i < DF_USES_TABLE_SIZE (); i++) { if (!propagations_left) break; df_ref use = DF_USES_GET (i); if (use) if (DF_REF_TYPE (use) == DF_REF_REG_USE || DF_REF_BB (use)->loop_father == NULL /* The outer most loop is not really a loop. */ || loop_outer (DF_REF_BB (use)->loop_father) == NULL) forward_propagate_into (use); } The general consensus is that instead of walking the use table do a walk like Richi suggests in c#9. I think the hack we did for gcc-7 is still in the tree. You may need to revert that and/or roll back to a gcc-7 snapshot to get the infinite loop for testing purposes.