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).