diff mbox

[mips] delete bit-rotten ADJUST_REG_ALLOC_ORDER definition

Message ID 53727C74.2070502@codesourcery.com
State New
Headers show

Commit Message

Sandra Loosemore May 13, 2014, 8:11 p.m. UTC
This patch is a follow-up to this thread from a few years ago:

https://gcc.gnu.org/ml/gcc/2011-01/msg00093.html
https://gcc.gnu.org/ml/gcc/2011-01/msg00158.html

As noted there, the current definition of ADJUST_REG_ALLOC_ORDER is 
obsolete:

(1) This hook is a holdover from the old pre-IRA register allocator and 
it's not clear it does anything useful with IRA.

(2) It's inconsistent with the current REG_ALLOC_ORDER definition which 
is not just {0, 1, 2, ...} any more.

I considered re-working the hook to jiggle the $24 ordering for MIPS16 
relative to the current REG_ALLOC_ORDER definition, but it wasn't clear 
to me either where in the ordering it should go, or that it would be 
worthwhile to try to tune this.  Indeed, the CSiBE results for removing 
it entirely are pretty much in the noise range, except that removing the 
hack that is supposed to benefit MIPS16 resulted in more improvement for 
that case than any of the others tested!  Here are some numbers 
comparing geomean for old and new with -Os for various combinations:

default: 1062.3,1062.28
-EL -mips16 -msoft-float: 758.624,758.551
-EL -mips16: 763.398,763.321
-EL -msoft-float: 1115.11,1115.09
-EL: 1062.22,1062.2
-EL -mabi=64: 1181.8,1181.81
-mabi=64: 1181.93,1181.94
-mips16 -msoft-float: 758.337,758.236
-mips16: 763.11,763.011
-EL -mabi=64 -msoft-float: 1218.11,1218.11
-mabi=64 -msoft-float: 1218.24,1218.25
-msoft-float: 1115.73,1115.71
-EL -mmicromips -msoft-float: 792.314,792.32
-EL -mnan=2008: 1062.22,1062.2
-mnan=2008: 1062.3,1062.28

As for the invalid JALR patch I posted just now
https://gcc.gnu.org/ml/gcc-patches/2014-05/msg01015.html
I had trouble regression-testing this patch on trunk due to various 
other breakage in the past week, and ended up doing it on a 4.9.0 
checkout modified to support Mentor's extended set of mips-sde-elf 
multilibs instead.  That's also the source of the CSiBE numbers above. 
Also, those numbers do include the JALR patch in the baseline.

This patch did fix some of the dspr2-MULT.c and dspr2-MULTU.c test 
failures that were reported in the original discussion, but I believe 
the current XFAILs for those tests are still valid for the same reasons 
listed in PR target/51729.

So, this patch should be considered more of a code cleanup thing, than 
either an optimization improvement or a test regression fix.  OK to commit?

-Sandra


2014-05-13  Catherine Moore  <clm@codesourcery.com>
	    Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* config/mips/mips.c (mips_order_regs_for_local_alloc): Delete.
	* config/mips/mips.h (ADJUST_REG_ALLOC_ORDER): Delete.
	* config/mips/mips-protos.h (mips_order_regs_for_local_alloc): Delete.

Comments

Jeff Law May 14, 2014, 6 p.m. UTC | #1
On 05/13/14 14:11, Sandra Loosemore wrote:
> This patch is a follow-up to this thread from a few years ago:
>
> https://gcc.gnu.org/ml/gcc/2011-01/msg00093.html
> https://gcc.gnu.org/ml/gcc/2011-01/msg00158.html
>
> As noted there, the current definition of ADJUST_REG_ALLOC_ORDER is
> obsolete:
>
> (1) This hook is a holdover from the old pre-IRA register allocator and
> it's not clear it does anything useful with IRA.
>
> (2) It's inconsistent with the current REG_ALLOC_ORDER definition which
> is not just {0, 1, 2, ...} any more.
>
> I considered re-working the hook to jiggle the $24 ordering for MIPS16
> relative to the current REG_ALLOC_ORDER definition, but it wasn't clear
> to me either where in the ordering it should go, or that it would be
> worthwhile to try to tune this.  Indeed, the CSiBE results for removing
> it entirely are pretty much in the noise range, except that removing the
> hack that is supposed to benefit MIPS16 resulted in more improvement for
> that case than any of the others tested!  Here are some numbers
> comparing geomean for old and new with -Os for various combinations:
>
> default: 1062.3,1062.28
> -EL -mips16 -msoft-float: 758.624,758.551
> -EL -mips16: 763.398,763.321
> -EL -msoft-float: 1115.11,1115.09
> -EL: 1062.22,1062.2
> -EL -mabi=64: 1181.8,1181.81
> -mabi=64: 1181.93,1181.94
> -mips16 -msoft-float: 758.337,758.236
> -mips16: 763.11,763.011
> -EL -mabi=64 -msoft-float: 1218.11,1218.11
> -mabi=64 -msoft-float: 1218.24,1218.25
> -msoft-float: 1115.73,1115.71
> -EL -mmicromips -msoft-float: 792.314,792.32
> -EL -mnan=2008: 1062.22,1062.2
> -mnan=2008: 1062.3,1062.28
>
> As for the invalid JALR patch I posted just now
> https://gcc.gnu.org/ml/gcc-patches/2014-05/msg01015.html
> I had trouble regression-testing this patch on trunk due to various
> other breakage in the past week, and ended up doing it on a 4.9.0
> checkout modified to support Mentor's extended set of mips-sde-elf
> multilibs instead.  That's also the source of the CSiBE numbers above.
> Also, those numbers do include the JALR patch in the baseline.
>
> This patch did fix some of the dspr2-MULT.c and dspr2-MULTU.c test
> failures that were reported in the original discussion, but I believe
> the current XFAILs for those tests are still valid for the same reasons
> listed in PR target/51729.
>
> So, this patch should be considered more of a code cleanup thing, than
> either an optimization improvement or a test regression fix.  OK to commit?
>
> -Sandra
>
>
> 2014-05-13  Catherine Moore  <clm@codesourcery.com>
>          Sandra Loosemore  <sandra@codesourcery.com>
>
>      gcc/
>      * config/mips/mips.c (mips_order_regs_for_local_alloc): Delete.
>      * config/mips/mips.h (ADJUST_REG_ALLOC_ORDER): Delete.
>      * config/mips/mips-protos.h (mips_order_regs_for_local_alloc): Delete.
OK for the trunk.

jeff
diff mbox

Patch

Index: gcc/config/mips/mips.c
===================================================================
--- gcc/config/mips/mips.c	(revision 210372)
+++ gcc/config/mips/mips.c	(working copy)
@@ -17509,28 +17509,6 @@  mips_conditional_register_usage (void)
     }
 }
 
-/* When generating MIPS16 code, we want to allocate $24 (T_REG) before
-   other registers for instructions for which it is possible.  This
-   encourages the compiler to use CMP in cases where an XOR would
-   require some register shuffling.  */
-
-void
-mips_order_regs_for_local_alloc (void)
-{
-  int i;
-
-  for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-    reg_alloc_order[i] = i;
-
-  if (TARGET_MIPS16)
-    {
-      /* It really doesn't matter where we put register 0, since it is
-         a fixed register anyhow.  */
-      reg_alloc_order[0] = 24;
-      reg_alloc_order[24] = 0;
-    }
-}
-
 /* Implement EH_USES.  */
 
 bool
Index: gcc/config/mips/mips.h
===================================================================
--- gcc/config/mips/mips.h	(revision 210372)
+++ gcc/config/mips/mips.h	(working copy)
@@ -2006,13 +2009,6 @@  enum reg_class
   182,183,184,185,186,187						\
 }
 
-/* ADJUST_REG_ALLOC_ORDER is a macro which permits reg_alloc_order
-   to be rearranged based on a particular function.  On the mips16, we
-   want to allocate $24 (T_REG) before other registers for
-   instructions for which it is possible.  */
-
-#define ADJUST_REG_ALLOC_ORDER mips_order_regs_for_local_alloc ()
-
 /* True if VALUE is an unsigned 6-bit number.  */
 
 #define UIMM6_OPERAND(VALUE) \
Index: gcc/config/mips/mips-protos.h
===================================================================
--- gcc/config/mips/mips-protos.h	(revision 210372)
+++ gcc/config/mips/mips-protos.h	(working copy)
@@ -248,7 +248,6 @@  extern bool mips_expand_ext_as_unaligned
 extern bool mips_expand_ins_as_unaligned_store (rtx, rtx, HOST_WIDE_INT,
 						HOST_WIDE_INT);
 extern bool mips_mem_fits_mode_p (enum machine_mode mode, rtx x);
-extern void mips_order_regs_for_local_alloc (void);
 extern HOST_WIDE_INT mips_debugger_offset (rtx, HOST_WIDE_INT);
 
 extern void mips_push_asm_switch (struct mips_asm_switch *);