https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89253
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Priority|P3 |P2 Status|UNCONFIRMED |ASSIGNED Keywords|ice-on-invalid-code |ice-on-valid-code Last reconfirmed| |2019-02-08 CC| |matz at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Ever confirmed|0 |1 Target Milestone|--- |8.3 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed on x86_64-linux. loop_version can (and does) fail here, possibly because there's abnormal edges (computed goto) inside. (gdb) p can_duplicate_loop_p (loop1) $2 = false but this isn't checked. I am testing Index: gcc/tree-ssa-loop-split.c =================================================================== --- gcc/tree-ssa-loop-split.c (revision 268679) +++ gcc/tree-ssa-loop-split.c (working copy) @@ -649,7 +649,8 @@ tree_ssa_split_loops (void) false, true) && niter.cmp != ERROR_MARK /* We can't yet handle loops controlled by a != predicate. */ - && niter.cmp != NE_EXPR) + && niter.cmp != NE_EXPR + && can_duplicate_loop_p (loop)) { if (split_loop (loop, &niter)) {