[Bug rtl-optimization/85072] g++ -O1 consumes all memory
vmakarov at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Mar 27 02:08:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85072
--- Comment #4 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #3)
> Doing a more "correct" patch like below shows that nearly all possible
> "starts" are covered:
>
> (gdb) p bitmap_count_bits(starts)
> $2 = 500039
> (gdb) p max_regno - lra_constraint_new_regno_start
> $4 = 505207
>
> so preserving semantics that way doesn't end up helping memory use :/
>
> Index: gcc/lra-assigns.c
> ===================================================================
> --- gcc/lra-assigns.c (revision 258678)
> +++ gcc/lra-assigns.c (working copy)
> @@ -429,12 +429,25 @@ init_live_reload_and_inheritance_pseudos
> for (p = 0; p < lra_live_max_point; p++)
> bitmap_initialize (&live_reload_and_inheritance_pseudos[p],
> &live_reload_and_inheritance_pseudos_bitmap_obstack);
> + bitmap starts = BITMAP_ALLOC (NULL);
> + for (i = lra_constraint_new_regno_start; i < max_regno; i++)
> + for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
> + bitmap_set_bit (starts, r->start);
> for (i = lra_constraint_new_regno_start; i < max_regno; i++)
> {
> for (r = lra_reg_info[i].live_ranges; r != NULL; r = r->next)
> - for (p = r->start; p <= r->finish; p++)
> - bitmap_set_bit (&live_reload_and_inheritance_pseudos[p], i);
> + {
> + bitmap_iterator bi;
> + unsigned p;
> + EXECUTE_IF_SET_IN_BITMAP (starts, r->start, p, bi)
> + {
> + if (p > (unsigned)r->finish)
> + break;
> + bitmap_set_bit (&live_reload_and_inheritance_pseudos[p], i);
> + }
> + }
> }
> + BITMAP_FREE (starts);
> }
>
> /* Finalize data about living reload pseudos at any given program
The patch looks ok to me. Thank you, Richard. You can commit it into the
trunk.
More information about the Gcc-bugs
mailing list