This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/85072] g++ -O1 consumes all memory
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 26 Mar 2018 09:21:56 +0000
- Subject: [Bug rtl-optimization/85072] g++ -O1 consumes all memory
- Auto-submitted: auto-generated
- References: <bug-85072-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85072
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
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