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.