https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89768
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I can reproduce even with --param max-unroll-times=70000 --param max-unrolled-insns=280000 -funroll-loops -Ofast --param max-average-unrolled-insns=280000 -fno-tree-dominator-opts pr80565.c --- gcc/loop-unroll.c.jj 2019-03-19 09:09:32.686006683 +0100 +++ gcc/loop-unroll.c 2019-03-19 10:15:50.319343904 +0100 @@ -652,7 +652,7 @@ unroll_loop_constant_iterations (struct if (loop->any_likely_upper_bound) loop->nb_iterations_likely_upper_bound = wi::udiv_trunc (loop->nb_iterations_likely_upper_bound, max_unroll + 1); - desc->niter_expr = GEN_INT (desc->niter); + desc->niter_expr = gen_int_mode (desc->niter, desc->mode); /* Remove the edges. */ FOR_EACH_VEC_ELT (remove_edges, i, e) @@ -1020,9 +1020,9 @@ unroll_loop_runtime_iterations (struct l preheader = split_edge (loop_preheader_edge (loop)); /* Add in count of edge from switch block. */ preheader->count += iter_count; - branch_code = compare_and_jump_seq (copy_rtx (niter), GEN_INT (j), EQ, - block_label (preheader), p, - NULL); + branch_code = compare_and_jump_seq (copy_rtx (niter), + gen_int_mode (j, desc->mode), EQ, + block_label (preheader), p, NULL); /* We rely on the fact that the compare and jump cannot be optimized out, and hence the cfg we create is correct. */ fixes the ICE, still the testcase is not usable for the testsuite, seems it has 481318 basic blocks in the function and seems to spent like forever in #0 0x0000000000bbf031 in et_splay (occ=0x2f8b4c8) at ../../gcc/et-forest.c:319 #1 0x0000000000bbfc2d in et_below (down=0x301e8f8, up=0x301eaa8) at ../../gcc/et-forest.c:718 #2 0x0000000000b181be in dominated_by_p (dir=CDI_DOMINATORS, bb1=0x7fffea96e138, bb2=0x7fffea97f208) at ../../gcc/dominance.c:1126 #3 0x0000000000b1865a in prune_bbs_to_update_dominators (bbs=..., conservative=true) at ../../gcc/dominance.c:1257 #4 0x0000000000b18c94 in iterate_fix_dominators (dir=CDI_DOMINATORS, bbs=..., conservative=true) at ../../gcc/dominance.c:1464 #5 0x0000000000a7f150 in remove_path (e=<error reading variable: Cannot access memory at address 0xa5a5a5a5a5a5a5f9>, irred_invalidated=0x7fffffffce4f, loop_closed_ssa_invalidated=0x0) at ../../gcc/cfgloopmanip.c:412 #6 0x0000000000eab54e in unroll_loop_runtime_iterations (loop=0x7fffea953000) at ../../gcc/loop-unroll.c:1110 #7 0x0000000000ea91f8 in unroll_loops (flags=1) at ../../gcc/loop-unroll.c:299