[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