diff mbox

Fix find_moveable_pseudos, PR52997

Message ID 4F9C050D.6090800@codesourcery.com
State New
Headers show

Commit Message

Bernd Schmidt April 28, 2012, 2:56 p.m. UTC
On 04/27/2012 06:25 PM, Ulrich Weigand wrote:
> Bernd Schmidt wrote:
>
>> We're creating new pseudos, and while we're resizing some data
>> structures, we aren't doing it for everything.
>
>> @@ -3983,7 +3983,8 @@ find_moveable_pseudos (void)
>>
>>     last_moveable_pseudo = max_reg_num ();
>>
>> -  fix_reg_equiv_init();
>> +  fix_reg_equiv_init ();
>> +  resize_reg_info ();
>>     regstat_free_n_sets_and_refs ();
>>     regstat_free_ri ();
>>     regstat_init_n_sets_and_refs ();
>
> This causes a bootstrap failure on s390 when enabling
> -fsched-pressure -fsched-pressure-algorithm=model by default
> (not sure why this doesn't show up without that change).
>
> The problem is that resize_reg_info only resizes the data
> structure, but leaves it uninitialized.

Argh. Something like this maybe (currently testing on i686-linux, ok if 
it passes?)


Bernd

Comments

Pat Haugen April 30, 2012, 10:01 p.m. UTC | #1
On 04/28/2012 09:56 AM, Bernd Schmidt wrote:
>> The problem is that resize_reg_info only resizes the data
>> structure, but leaves it uninitialized.
>
> Argh. Something like this maybe (currently testing on i686-linux, ok if it passes?)
>

That patch cleans up the SPEC build failures I was seeing and a pile of testsuite failures on PowerPC.

-Pat
Richard Sandiford May 1, 2012, 8:58 a.m. UTC | #2
Bernd Schmidt <bernds@codesourcery.com> writes:
> 	* 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.

OK, thanks.

Richard
diff mbox

Patch

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

Index: gcc/ira.c
===================================================================
--- gcc/ira.c	(revision 186932)
+++ gcc/ira.c	(working copy)
@@ -2238,18 +2238,22 @@  setup_preferred_alternate_classes_for_ne
 }
 
 
+/* 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_sl
 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");