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.