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. Cheers, Ian