public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* patch to fix PR 48435
@ 2011-04-07 19:41 Vladimir Makarov
  2011-04-08 15:18 ` Jeff Law
  0 siblings, 1 reply; 4+ messages in thread
From: Vladimir Makarov @ 2011-04-07 19:41 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jeffrey Law

[-- Attachment #1: Type: text/plain, Size: 1428 bytes --]

The following patch should solve problem 
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48435.  It might solve other 
latest IRA problems too including performance related ones.  The patch 
is for targets which require some values to be placed in hard registers 
starting with an even (odd) hard registers.

I already addressed an analogous problem recently and the patch I sent 
that time although solved some problems it created even more new 
problems.  I should acknowledge this.

The problem was in that profitable hard regs were used for colorability 
criterion and finding hard registers where allocno values can be resided 
but *also* as starting allocno hard registers.  It resulted in spilling 
allocnos which should be placed in multi-registers starting on a 
specific border because profitable hard registers were only starting 
registers and when we calculated number of available hard registers 
multi-register allocnos can not fit only in their starting hard registers.

The following patch was successfully bootstrapped on x86/x86-64 and on 
i686 with H.J.'s autotester options.

OK to commit?

2011-04-07  Vladimir Makarov <vmakarov@redhat.com>

     PR 4435
     * ira-color.c (setup_profitable_hard_regs): Add comments.
     Don't take prohibited hard regs into account.
     (setup_conflict_profitable_regs): Rename to
     get_conflict_profitable_regs.
     (check_hard_reg_p): Check prohibited hard regs.




[-- Attachment #2: p48435.patch --]
[-- Type: text/plain, Size: 3801 bytes --]

Index: ira-color.c
===================================================================
--- ira-color.c	(revision 172107)
+++ ira-color.c	(working copy)
@@ -1057,6 +1057,8 @@ setup_profitable_hard_regs (void)
   enum reg_class aclass;
   enum machine_mode mode;
 
+  /* Initial set up from allocno classes and explicitly conflicting
+     hard regs.  */
   EXECUTE_IF_SET_IN_BITMAP (coloring_allocno_bitmap, 0, i, bi)
     {
       a = ira_allocnos[i];
@@ -1076,9 +1078,6 @@ setup_profitable_hard_regs (void)
 	    {
 	      COPY_HARD_REG_SET (obj_data->profitable_hard_regs,
 				 reg_class_contents[aclass]);
-	      AND_COMPL_HARD_REG_SET
-		(obj_data->profitable_hard_regs,
-		 ira_prohibited_class_mode_regs[aclass][mode]);
 	      AND_COMPL_HARD_REG_SET (obj_data->profitable_hard_regs,
 				      ira_no_alloc_regs);
 	      AND_COMPL_HARD_REG_SET (obj_data->profitable_hard_regs,
@@ -1086,6 +1085,7 @@ setup_profitable_hard_regs (void)
 	    }
 	}
     }
+  /* Exclude hard regs already assigned for conflicting objects.  */
   EXECUTE_IF_SET_IN_BITMAP (consideration_allocno_bitmap, 0, i, bi)
     {
       a = ira_allocnos[i];
@@ -1124,6 +1124,7 @@ setup_profitable_hard_regs (void)
 	    }
 	}
     }
+  /* Exclude too costly hard regs.  */
   EXECUTE_IF_SET_IN_BITMAP (coloring_allocno_bitmap, 0, i, bi)
     {
       int min_cost = INT_MAX;
@@ -1451,9 +1452,9 @@ update_conflict_hard_regno_costs (int *c
    profitable regs exclude hard regs which can not hold value of mode
    of allocno A.  */
 static inline void
-setup_conflict_profitable_regs (ira_allocno_t a, bool retry_p,
-				HARD_REG_SET *conflict_regs,
-				HARD_REG_SET *profitable_regs)
+get_conflict_profitable_regs (ira_allocno_t a, bool retry_p,
+			      HARD_REG_SET *conflict_regs,
+			      HARD_REG_SET *profitable_regs)
 {
   int i, nwords;
   ira_object_t obj;
@@ -1485,8 +1486,15 @@ check_hard_reg_p (ira_allocno_t a, int h
 		  HARD_REG_SET *conflict_regs, HARD_REG_SET *profitable_regs)
 {
   int j, nwords, nregs;
+  enum reg_class aclass;
+  enum machine_mode mode;
 
-  nregs = hard_regno_nregs[hard_regno][ALLOCNO_MODE (a)];
+  aclass = ALLOCNO_CLASS (a);
+  mode = ALLOCNO_MODE (a);
+  if (TEST_HARD_REG_BIT (ira_prohibited_class_mode_regs[aclass][mode],
+			 hard_regno))
+    return false;
+  nregs = hard_regno_nregs[hard_regno][mode];
   nwords = ALLOCNO_NUM_OBJECTS (a);
   for (j = 0; j < nregs; j++)
     {
@@ -1554,8 +1562,8 @@ assign_hard_reg (ira_allocno_t a, bool r
 #endif
 
   ira_assert (! ALLOCNO_ASSIGNED_P (a));
-  setup_conflict_profitable_regs (a, retry_p,
-				  conflicting_regs, profitable_hard_regs);
+  get_conflict_profitable_regs (a, retry_p,
+				conflicting_regs, profitable_hard_regs);
   aclass = ALLOCNO_CLASS (a);
   class_size = ira_class_hard_regs_num[aclass];
   best_hard_regno = -1;
@@ -2233,7 +2241,8 @@ setup_allocno_available_regs_num (ira_al
 	      ira_object_t obj = ALLOCNO_OBJECT (a, k);
 	      object_color_data_t obj_data = OBJECT_COLOR_DATA (obj);
 
-	      /* Checking only profitable hard regs.  */
+	      /* Checking only profitable hard regs which exclude
+		 object's conflict hard regs.  */
 	      if (TEST_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj),
 				     hard_regno + j)
 		  || ! TEST_HARD_REG_BIT (obj_data->profitable_hard_regs,
@@ -2403,8 +2412,8 @@ improve_allocation (void)
       else
 	base_cost = allocno_costs[ira_class_hard_reg_index[aclass][hregno]];
       try_p = false;
-      setup_conflict_profitable_regs (a, false,
-				      conflicting_regs, profitable_hard_regs);
+      get_conflict_profitable_regs (a, false,
+				    conflicting_regs, profitable_hard_regs);
       class_size = ira_class_hard_regs_num[aclass];
       /* Set up cost improvement for usage of each profitable hard
 	 register for allocno A.  */

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: patch to fix PR 48435
  2011-04-07 19:41 patch to fix PR 48435 Vladimir Makarov
@ 2011-04-08 15:18 ` Jeff Law
  2011-04-08 17:28   ` Graham Stott
  0 siblings, 1 reply; 4+ messages in thread
From: Jeff Law @ 2011-04-08 15:18 UTC (permalink / raw)
  To: Vladimir Makarov; +Cc: gcc-patches

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/07/11 13:41, Vladimir Makarov wrote:
> The following patch should solve problem
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48435.  It might solve other
> latest IRA problems too including performance related ones.  The patch
> is for targets which require some values to be placed in hard registers
> starting with an even (odd) hard registers.
> 
> I already addressed an analogous problem recently and the patch I sent
> that time although solved some problems it created even more new
> problems.  I should acknowledge this.
> 
> The problem was in that profitable hard regs were used for colorability
> criterion and finding hard registers where allocno values can be resided
> but *also* as starting allocno hard registers.  It resulted in spilling
> allocnos which should be placed in multi-registers starting on a
> specific border because profitable hard registers were only starting
> registers and when we calculated number of available hard registers
> multi-register allocnos can not fit only in their starting hard registers.
> 
> The following patch was successfully bootstrapped on x86/x86-64 and on
> i686 with H.J.'s autotester options.
> 
> OK to commit?
> 
> 2011-04-07  Vladimir Makarov <vmakarov@redhat.com>
> 
>     PR 4435
>     * ira-color.c (setup_profitable_hard_regs): Add comments.
>     Don't take prohibited hard regs into account.
>     (setup_conflict_profitable_regs): Rename to
>     get_conflict_profitable_regs.
>     (check_hard_reg_p): Check prohibited hard regs.
OK.
jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJNnycrAAoJEBRtltQi2kC70DsH/A7fnYlawxDvYPeULGb1ctQD
6LYWBWhJY4UDTiUNjLEzwALpq2XccVzubz1KEMI3wOndIHHYM2ykbsgTqCKmXqhf
ZthBjzNUtE/i7jSxK8JK3SEShqs2j7vaAvlkUKbdF7O61rhQap8MRnD2umHfrbet
PFea7MedpaC96mazzoyUWlzwWCt2CQhOlMFGlC44bxB1FrKy0nUjeIM7kWqjqG5W
Y9lV8RlC4O2cLST5qHpqtssLSO4omPlKsEUBEKW4E/87UCoFAxP0n8NOZ1EFgMsc
3SlhSv+Dpinfh79gjHXt5+CH33bXTecf8Jfyd89Rn6huzL9OhAXJy+MjMi6cBm0=
=KSaH
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: patch to fix PR 48435
  2011-04-08 15:18 ` Jeff Law
@ 2011-04-08 17:28   ` Graham Stott
  2011-04-08 17:50     ` Vladimir Makarov
  0 siblings, 1 reply; 4+ messages in thread
From: Graham Stott @ 2011-04-08 17:28 UTC (permalink / raw)
  To: Vladimir Makarov, Jeff Law; +Cc: gcc-patches

Vladimir,

The wrong PR 4435 was in referrenced the commit 

--- On Fri, 8/4/11, Jeff Law <law@redhat.com> wrote:

> From: Jeff Law <law@redhat.com>
> Subject: Re: patch to fix PR 48435
> To: "Vladimir Makarov" <vmakarov@redhat.com>
> Cc: "gcc-patches" <gcc-patches@gcc.gnu.org>
> Date: Friday, 8 April, 2011, 16:18
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On 04/07/11 13:41, Vladimir Makarov wrote:
> > The following patch should solve problem
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48435. 
> It might solve other
> > latest IRA problems too including performance related
> ones.  The patch
> > is for targets which require some values to be placed
> in hard registers
> > starting with an even (odd) hard registers.
> > 
> > I already addressed an analogous problem recently and
> the patch I sent
> > that time although solved some problems it created
> even more new
> > problems.  I should acknowledge this.
> > 
> > The problem was in that profitable hard regs were used
> for colorability
> > criterion and finding hard registers where allocno
> values can be resided
> > but *also* as starting allocno hard registers. 
> It resulted in spilling
> > allocnos which should be placed in multi-registers
> starting on a
> > specific border because profitable hard registers were
> only starting
> > registers and when we calculated number of available
> hard registers
> > multi-register allocnos can not fit only in their
> starting hard registers.
> > 
> > The following patch was successfully bootstrapped on
> x86/x86-64 and on
> > i686 with H.J.'s autotester options.
> > 
> > OK to commit?
> > 
> > 2011-04-07  Vladimir Makarov <vmakarov@redhat.com>
> > 
> >     PR 4435
> >     * ira-color.c
> (setup_profitable_hard_regs): Add comments.
> >     Don't take prohibited hard
> regs into account.
> > 
>    (setup_conflict_profitable_regs): Rename
> to
> >     get_conflict_profitable_regs.
> >     (check_hard_reg_p): Check
> prohibited hard regs.
> OK.
> jeff
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
> 
> iQEcBAEBAgAGBQJNnycrAAoJEBRtltQi2kC70DsH/A7fnYlawxDvYPeULGb1ctQD
> 6LYWBWhJY4UDTiUNjLEzwALpq2XccVzubz1KEMI3wOndIHHYM2ykbsgTqCKmXqhf
> ZthBjzNUtE/i7jSxK8JK3SEShqs2j7vaAvlkUKbdF7O61rhQap8MRnD2umHfrbet
> PFea7MedpaC96mazzoyUWlzwWCt2CQhOlMFGlC44bxB1FrKy0nUjeIM7kWqjqG5W
> Y9lV8RlC4O2cLST5qHpqtssLSO4omPlKsEUBEKW4E/87UCoFAxP0n8NOZ1EFgMsc
> 3SlhSv+Dpinfh79gjHXt5+CH33bXTecf8Jfyd89Rn6huzL9OhAXJy+MjMi6cBm0=
> =KSaH
> -----END PGP SIGNATURE-----
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: patch to fix PR 48435
  2011-04-08 17:28   ` Graham Stott
@ 2011-04-08 17:50     ` Vladimir Makarov
  0 siblings, 0 replies; 4+ messages in thread
From: Vladimir Makarov @ 2011-04-08 17:50 UTC (permalink / raw)
  To: Graham Stott; +Cc: Jeff Law, gcc-patches

On 04/08/2011 01:28 PM, Graham Stott wrote:
> Vladimir,
>
> The wrong PR 4435 was in referrenced the commit
>
Thanks, Graham.  I've just fixed it.  I should change my keyboard.  This 
is not the first time when some symbols are missed.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-04-08 17:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-07 19:41 patch to fix PR 48435 Vladimir Makarov
2011-04-08 15:18 ` Jeff Law
2011-04-08 17:28   ` Graham Stott
2011-04-08 17:50     ` Vladimir Makarov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).