This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
RE: Possible IRA bug in assign_hard_reg
Thanks for the detailed answer.
While we're on the subject of assign_hard_reg, I notice the costs and
min_cost variable are set but never used (decisions are being made with
the full_costs array and min_full_cost). Should they be referenced
somehow or are they just redundant?
Cheers,
Ian
> -----Original Message-----
> From: Vladimir Makarov [mailto:vmakarov@redhat.com]
> Sent: 21 January 2010 21:08
> To: Ian Bolton
> Cc: gcc@gcc.gnu.org
> Subject: Re: Possible IRA bug in assign_hard_reg
>
> Ian Bolton wrote:
> > Near the end of assign_hard_reg in ira-color.c, there is this code:
> >
> >
> > if (min_full_cost > mem_cost)
> > {
> > if (! retry_p && internal_flag_ira_verbose > 3 && ira_dump_file
> !=
> > NULL)
> > fprintf (ira_dump_file, "(memory is more profitable %d vs %d) ",
> > mem_cost, min_full_cost);
> > best_hard_regno = -1;
> > }
> >
> >
> > If retry_p is true then we are in reload, so I wouldn't expect us to
> > override best_hard_regno in this case. I think the code should
read:
> >
> >
> > if (min_full_cost > mem_cost && ! retry_p)
> > {
> > if (internal_flag_ira_verbose > 3 && ira_dump_file != NULL)
> > fprintf (ira_dump_file, "(memory is more profitable %d vs %d) ",
> > mem_cost, min_full_cost);
> > best_hard_regno = -1;
> > }
> >
> >
> > I'm probably wrong, but I wanted to check.
> >
> >
> The original code is ok, I think.
>
> First, retry_p is true not only from reload. It is true when we are
> trying to assign hard register after IR flattening during which new
> allocnos can be created to resolve cycles for register shuffling on
> region borders.
>
> If memory is more profitable we should use independently from where we
> call assign_hard_reg.
>
> Retry_p is used as guard for dump printing because it is a part of
dump
> when allocno is popped from coloring stack (in this case retry_p is
> false).