https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78185
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Nope. if (TREE_CODE (lhs) != SSA_NAME || gimple_could_trap_p (stmt)) return MOVE_PRESERVE_EXECUTION; But then LIM fails to check whether the exit of the nested loop is ever taken (it infinitely loops). Thus that LIM logic has a flaw. It marks that block as always executed in the outer loop. Thus the bug is in fill_always_executed_in[_1]. A tiny bit academic as it requires a never terminating inner loop, but well.