diff options
Diffstat (limited to 'gcc/ira.c')
-rw-r--r-- | gcc/ira.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/gcc/ira.c b/gcc/ira.c index b6524895efe..b960f769534 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -1422,8 +1422,8 @@ compute_regs_asm_clobbered (char *regs_asm_clobbered) /* Set up ELIMINABLE_REGSET, IRA_NO_ALLOC_REGS, and REGS_EVER_LIVE. */ -static void -setup_eliminable_regset (void) +void +ira_setup_eliminable_regset (void) { /* Like regs_ever_live, but 1 if a reg is set or clobbered from an asm. Unlike regs_ever_live, elements of this array corresponding @@ -1827,7 +1827,8 @@ setup_preferred_alternate_classes_for_new_pseudos (int start) old_regno = ORIGINAL_REGNO (regno_reg_rtx[i]); ira_assert (i != old_regno); setup_reg_classes (i, reg_preferred_class (old_regno), - reg_alternate_class (old_regno)); + reg_alternate_class (old_regno), + reg_cover_class (old_regno)); if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL) fprintf (ira_dump_file, " New r%d: setting preferred %s, alternative %s\n", @@ -1848,10 +1849,7 @@ expand_reg_info (int old_size) resize_reg_info (); for (i = old_size; i < size; i++) - { - reg_renumber[i] = -1; - setup_reg_classes (i, GENERAL_REGS, ALL_REGS); - } + setup_reg_classes (i, GENERAL_REGS, ALL_REGS, GENERAL_REGS); } /* Return TRUE if there is too high register pressure in the function. @@ -3160,8 +3158,8 @@ ira (FILE *f) } max_regno_before_ira = allocated_reg_info_size = max_reg_num (); - allocate_reg_info (); - setup_eliminable_regset (); + resize_reg_info (); + ira_setup_eliminable_regset (); ira_overall_cost = ira_reg_cost = ira_mem_cost = 0; ira_load_cost = ira_store_cost = ira_shuffle_cost = 0; |