This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Another patch to fix performance degradation on SPECFP2000


On Sat, Sep 06, 2008 at 04:40:34PM -0700, H.J. Lu wrote:
> On Sat, Sep 6, 2008 at 9:40 AM, Vladimir Makarov <vmakarov@redhat.com> wrote:
> >
> > The patch has been successfully bootstrapped on x86_64.
> >
> > 2008-09-06  Vladimir Makarov  <vmakarov@redhat.com>
> >
> >   * ira-color.c (allocno_live_range_length): New function.
> >   (allocno_spill_priority_compare): Use it.
> >   (push_allocnos_to_stack): Ditto.  Use double for priority
> >   calculations.
> >
> >
> 
> I got comparison failure on Linux/ia32.:
> 
> make[5]: Leaving directory `/export/build/gnu/gcc-ira/build-i686-linux'
> Comparing stages 2 and 3
> warning: ./cc1plus-checksum.o differs
> warning: ./cc1-checksum.o differs
> warning: ./cc1obj-checksum.o differs
> Bootstrap comparison failure!
> ./tree-vect-transform.o differs
> ./var-tracking.o differs
> ./tree-ssa-loop-ivopts.o differs
> ./loop-unroll.o differs
> ./combine.o differs
> ./insn-emit.o differs
> ./print-tree.o differs
> ./gcse.o differs
> ./tree-tailcall.o differs
> ./haifa-sched.o differs
> ./cfgbuild.o differs
> ./i386.o differs
> ./tree-ssa-alias.o differs
> ./tree-ssa-ccp.o differs
> ./insn-attrtab.o differs
> ....
> 
> It may have something to do with using "double".
> 

Hi Vladimir,

This patch on top of yours allows gcc to bootstrap on Linux/ia32.

H.J.
---
2008-09-07  H.J. Lu  <hongjiu.lu@intel.com>

	* ira-color.c (allocno_spill_priority_compare): Use HOST_WIDEST_INT
	for priority calculations.
	(push_allocnos_to_stack): Likewise.

--- gcc/ira-color.c.double	2008-09-07 11:59:40.000000000 -0700
+++ gcc/ira-color.c	2008-09-07 12:05:40.000000000 -0700
@@ -950,15 +950,15 @@ allocno_live_range_length (ira_allocno_t
 static int
 allocno_spill_priority_compare (splay_tree_key k1, splay_tree_key k2)
 {
-  double pri1, pri2;
+  HOST_WIDEST_INT pri1, pri2;
   int diff;
   ira_allocno_t a1 = (ira_allocno_t) k1, a2 = (ira_allocno_t) k2;
   
-  pri1 = ((double) IRA_ALLOCNO_TEMP (a1)
+  pri1 = ((HOST_WIDEST_INT) IRA_ALLOCNO_TEMP (a1)
 	  / (ALLOCNO_LEFT_CONFLICTS_NUM (a1)
 	     * ira_reg_class_nregs[ALLOCNO_COVER_CLASS (a1)][ALLOCNO_MODE (a1)]
 	     + 1));
-  pri2 = ((double) IRA_ALLOCNO_TEMP (a2)
+  pri2 = ((HOST_WIDEST_INT) IRA_ALLOCNO_TEMP (a2)
 	  / (ALLOCNO_LEFT_CONFLICTS_NUM (a2)
 	     * ira_reg_class_nregs[ALLOCNO_COVER_CLASS (a2)][ALLOCNO_MODE (a2)]
 	     + 1));
@@ -1011,7 +1011,7 @@ push_allocnos_to_stack (void)
 {
   ira_allocno_t allocno, a, i_allocno, *allocno_vec;
   enum reg_class cover_class, rclass;
-  double allocno_pri, i_allocno_pri;
+  HOST_WIDEST_INT allocno_pri, i_allocno_pri;
   int allocno_cost, i_allocno_cost, allocno_lr, i_allocno_lr;
   int i, j, num, cover_class_allocnos_num[N_REG_CLASSES];
   ira_allocno_t *cover_class_allocnos[N_REG_CLASSES];
@@ -1120,7 +1120,7 @@ push_allocnos_to_stack (void)
 	  ira_assert (num > 0);
 	  allocno_vec = cover_class_allocnos[cover_class];
 	  allocno = NULL;
-	  allocno_pri = 0.0; allocno_cost = 0; allocno_lr = -1;
+	  allocno_pri = 0; allocno_cost = 0; allocno_lr = -1;
 	  /* Sort uncolorable allocno to find the one with the lowest
 	     spill cost.  */
 	  for (i = 0, j = num - 1; i <= j;)
@@ -1154,7 +1154,7 @@ push_allocnos_to_stack (void)
 		    }
 		  i_allocno_cost = IRA_ALLOCNO_TEMP (i_allocno);
 		  i_allocno_pri
-		    = ((double) i_allocno_cost
+		    = ((HOST_WIDEST_INT) i_allocno_cost
 		       / (ALLOCNO_LEFT_CONFLICTS_NUM (i_allocno)
 			  * ira_reg_class_nregs[ALLOCNO_COVER_CLASS
 						(i_allocno)]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]