stormy16: limit SI reload regs

DJ Delorie dj@redhat.com
Wed Apr 30 19:28:00 GMT 2003


> I'm trying a variant now where we set the reload preference to
> SEVEN_REGS but the constraint to EIGHT_REGS.

Ok, this patch works with some tests now passing and no regressions:

2003-04-30  DJ Delorie  <dj@redhat.com>

	* config/stormy16/stormy16.h: Add SEVEN_REGS class.
	* config/stormy16/stormy16.c (xstormy16_secondary_reload_class): Use it.
	(xstormy16_preferred_reload_class): Use it.

Index: stormy16.c
===================================================================
RCS file: /cvs/uberbaum/gcc/config/stormy16/stormy16.c,v
retrieving revision 1.38
diff -p -2 -r1.38  stormy16.c
*** stormy16.c	17 Apr 2003 10:35:08 -0000	1.38
--- stormy16.c	30 Apr 2003 19:26:57 -0000
*************** xstormy16_secondary_reload_class (class,
*** 524,528 ****
  	       || true_regnum (x) >= FIRST_PSEUDO_REGISTER)))
        && ! reg_class_subset_p (class, EIGHT_REGS))
!     return EIGHT_REGS;
  
    /* When reloading a PLUS, the carry register will be required
--- 524,528 ----
  	       || true_regnum (x) >= FIRST_PSEUDO_REGISTER)))
        && ! reg_class_subset_p (class, EIGHT_REGS))
!     return GET_MODE (x) == SImode ? SEVEN_REGS : EIGHT_REGS;
  
    /* When reloading a PLUS, the carry register will be required
*************** xstormy16_preferred_reload_class (x, cla
*** 576,580 ****
    if (class == GENERAL_REGS
        && GET_CODE (x) == MEM)
!     return EIGHT_REGS;
  
    return class;
--- 576,580 ----
    if (class == GENERAL_REGS
        && GET_CODE (x) == MEM)
!     return GET_MODE (x) == SImode ? SEVEN_REGS : EIGHT_REGS;
  
    return class;
Index: stormy16.h
===================================================================
RCS file: /cvs/uberbaum/gcc/config/stormy16/stormy16.h,v
retrieving revision 1.73
diff -p -2 -r1.73  stormy16.h
*** stormy16.h	17 Apr 2003 10:35:08 -0000	1.73
--- stormy16.h	30 Apr 2003 19:26:58 -0000
*************** enum reg_class
*** 405,408 ****
--- 405,409 ----
    TWO_REGS,
    R2_REGS,
+   SEVEN_REGS,
    EIGHT_REGS,
    R8_REGS,
*************** enum reg_class
*** 428,431 ****
--- 429,433 ----
    "TWO_REGS",					\
    "R2_REGS",					\
+   "SEVEN_REGS",					\
    "EIGHT_REGS",					\
    "R8_REGS",					\
*************** enum reg_class
*** 453,456 ****
--- 455,459 ----
    { 0x00003 },					\
    { 0x00004 },					\
+   { 0x0007F },					\
    { 0x000FF },					\
    { 0x00100 },					\
*************** enum reg_class
*** 468,471 ****
--- 471,475 ----
     : (REGNO) == 1 ? R1_REGS			\
     : (REGNO) == 2 ? R2_REGS			\
+    : (REGNO) < 7  ? SEVEN_REGS			\
     : (REGNO) < 8  ? EIGHT_REGS			\
     : (REGNO) == 8 ? R8_REGS			\



More information about the Gcc-patches mailing list