summaryrefslogtreecommitdiff
path: root/gcc/ira.c
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-01 16:34:26 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-01 16:34:26 +0000
commite1d0b6550d67a0d00ef31c2c9b7fcd80c13f854c (patch)
treefac3de40d168869175a365542774f52d8b14f3d9 /gcc/ira.c
parent6db1d2ca83f9327020b75f6c1610649bb18e71db (diff)
downloadgcc-e1d0b6550d67a0d00ef31c2c9b7fcd80c13f854c.tar.gz
* ira.c (allocated_reg_info_size): New static variable.
(expand_reg_info): Manage it. Call setup_preferred_alternate_classes_for_new_pseudos. (ira): Don't do it here. Remove local allocated_reg_info_size, set the global before calling find_moveable_pseudos. (find_moveable_pseudos): Call expand_reg_info rather than resize_reg_info. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187019 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ira.c')
-rw-r--r--gcc/ira.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/gcc/ira.c b/gcc/ira.c
index 49ecfaaba86..456c5f0bcb3 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -2238,18 +2238,22 @@ setup_preferred_alternate_classes_for_new_pseudos (int start)
}
+/* The number of entries allocated in teg_info. */
+static int allocated_reg_info_size;
/* Regional allocation can create new pseudo-registers. This function
expands some arrays for pseudo-registers. */
static void
-expand_reg_info (int old_size)
+expand_reg_info (void)
{
int i;
int size = max_reg_num ();
resize_reg_info ();
- for (i = old_size; i < size; i++)
+ for (i = allocated_reg_info_size; i < size; i++)
setup_reg_classes (i, GENERAL_REGS, ALL_REGS, GENERAL_REGS);
+ setup_preferred_alternate_classes_for_new_pseudos (allocated_reg_info_size);
+ allocated_reg_info_size = size;
}
/* Return TRUE if there is too high register pressure in the function.
@@ -3984,7 +3988,7 @@ find_moveable_pseudos (void)
last_moveable_pseudo = max_reg_num ();
fix_reg_equiv_init ();
- resize_reg_info ();
+ expand_reg_info ();
regstat_free_n_sets_and_refs ();
regstat_free_ri ();
regstat_init_n_sets_and_refs ();
@@ -4044,7 +4048,6 @@ static int saved_flag_ira_share_spill_slots;
static void
ira (FILE *f)
{
- int allocated_reg_info_size;
bool loops_p;
int max_regno_before_ira, ira_max_point_before_emit;
int rebuild_p;
@@ -4121,9 +4124,10 @@ ira (FILE *f)
}
}
+ allocated_reg_info_size = max_reg_num ();
find_moveable_pseudos ();
- max_regno_before_ira = allocated_reg_info_size = max_reg_num ();
+ max_regno_before_ira = max_reg_num ();
ira_setup_eliminable_regset ();
ira_overall_cost = ira_reg_cost = ira_mem_cost = 0;
@@ -4169,10 +4173,7 @@ ira (FILE *f)
ira_initiate_assign ();
else
{
- expand_reg_info (allocated_reg_info_size);
- setup_preferred_alternate_classes_for_new_pseudos
- (allocated_reg_info_size);
- allocated_reg_info_size = max_regno;
+ expand_reg_info ();
if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
fprintf (ira_dump_file, "Flattening IR\n");