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:vmaka...@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).

Reply via email to