public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6989] cris: Remove CRIS v32 ACR artefacts
@ 2022-02-02  0:20 Hans-Peter Nilsson
  0 siblings, 0 replies; only message in thread
From: Hans-Peter Nilsson @ 2022-02-02  0:20 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:27e35bc4910e291d8676c69b08fb88fa51ba528e

commit r12-6989-g27e35bc4910e291d8676c69b08fb88fa51ba528e
Author: Hans-Peter Nilsson <hp@axis.com>
Date:   Wed Feb 2 00:00:10 2022 +0100

    cris: Remove CRIS v32 ACR artefacts
    
    This is the change to which I alluded to this in r11-220 /
    d0780379c1b6 as "causes extra register moves in libgcc".  It has
    unfortunate side-effects due to the change in register-class topology.
    There's a slight improvement in coremark numbers (< 0.07%) though also
    increase in code size total (< 0.7%) but looking at the individual
    changes in functions, it's all-over (-7..+7%).  Looking specifically
    at functions that improved in speed, it's also both plus and minus in
    code sizes.  It's unworkable to separate improvements from regressions
    for this case.  I'll follow up with patches to restore the previous
    code quality, in both size and speed.
    
    gcc:
            * config/cris/constraints.md (define_register_constraint "b"): Now
            GENERAL_REGS.
            * config/cris/cris.md (CRIS_ACR_REGNUM): Remove.
            * config/cris/cris.h: (reg_class, REG_CLASS_NAMES)
            (REG_CLASS_CONTENTS): Remove ACR_REGS, SPEC_ACR_REGS, GENNONACR_REGS,
            and SPEC_GENNONACR_REGS.
            * config/cris/cris.cc (cris_preferred_reload_class): Don't mention
            ACR_REGS and return GENERAL_REGS instead of GENNONACR_REGS.

Diff:
---
 gcc/config/cris/constraints.md |  7 ++++++-
 gcc/config/cris/cris.cc        |  5 ++---
 gcc/config/cris/cris.h         | 27 +++++----------------------
 gcc/config/cris/cris.md        |  1 -
 4 files changed, 13 insertions(+), 27 deletions(-)

diff --git a/gcc/config/cris/constraints.md b/gcc/config/cris/constraints.md
index 01ec12c4cf2..83fab622717 100644
--- a/gcc/config/cris/constraints.md
+++ b/gcc/config/cris/constraints.md
@@ -18,7 +18,12 @@
 ;; <http://www.gnu.org/licenses/>.
 
 ;; Register constraints.
-(define_register_constraint "b" "GENNONACR_REGS"
+
+;; Kept for compatibility.  It used to exclude the CRIS v32
+;; register "ACR", which was like GENERAL_REGS except it
+;; couldn't be used for autoincrement, and intended mainly
+;; for use in user asm statements.
+(define_register_constraint "b" "GENERAL_REGS"
   "@internal")
 
 (define_register_constraint "h" "MOF_REGS"
diff --git a/gcc/config/cris/cris.cc b/gcc/config/cris/cris.cc
index a7807b3cc25..264439c7654 100644
--- a/gcc/config/cris/cris.cc
+++ b/gcc/config/cris/cris.cc
@@ -1663,13 +1663,12 @@ cris_reload_address_legitimized (rtx x,
 static reg_class_t
 cris_preferred_reload_class (rtx x ATTRIBUTE_UNUSED, reg_class_t rclass)
 {
-  if (rclass != ACR_REGS
-      && rclass != MOF_REGS
+  if (rclass != MOF_REGS
       && rclass != MOF_SRP_REGS
       && rclass != SRP_REGS
       && rclass != CC0_REGS
       && rclass != SPECIAL_REGS)
-    return GENNONACR_REGS;
+    return GENERAL_REGS;
 
   return rclass;
 }
diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
index 9245d788692..6edfe13d92c 100644
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -436,19 +436,15 @@ extern int cris_cpu_version;
 
 /* Node: Register Classes */
 
-/* We need a separate register class to handle register allocation for
-   ACR, since it can't be used for post-increment.
-
-   It's not obvious, but having subunions of all movable-between
+/* It's not obvious, but having subunions of all movable-between
    register classes does really help register allocation (pre-IRA
    comment).  */
 enum reg_class
   {
     NO_REGS,
-    ACR_REGS, MOF_REGS, SRP_REGS, CC0_REGS,
+    MOF_REGS, SRP_REGS, CC0_REGS,
     MOF_SRP_REGS, SPECIAL_REGS,
-    SPEC_ACR_REGS, GENNONACR_REGS,
-    SPEC_GENNONACR_REGS, GENERAL_REGS,
+    GENERAL_REGS,
     ALL_REGS,
     LIM_REG_CLASSES
   };
@@ -457,9 +453,8 @@ enum reg_class
 
 #define REG_CLASS_NAMES						\
   {"NO_REGS",							\
-   "ACR_REGS", "MOF_REGS", "SRP_REGS", "CC0_REGS",		\
+   "MOF_REGS", "SRP_REGS", "CC0_REGS",				\
    "MOF_SRP_REGS", "SPECIAL_REGS",				\
-   "SPEC_ACR_REGS", "GENNONACR_REGS", "SPEC_GENNONACR_REGS",	\
    "GENERAL_REGS", "ALL_REGS"}
 
 #define CRIS_SPECIAL_REGS_CONTENTS					\
@@ -472,37 +467,25 @@ enum reg_class
 #define REG_CLASS_CONTENTS			\
   {						\
    {0},						\
-   {1 << CRIS_ACR_REGNUM},			\
    {1 << CRIS_MOF_REGNUM},			\
    {1 << CRIS_SRP_REGNUM},			\
    {1 << CRIS_CC0_REGNUM},			\
    {(1 << CRIS_MOF_REGNUM)			\
     | (1 << CRIS_SRP_REGNUM)},			\
    {CRIS_SPECIAL_REGS_CONTENTS},		\
-   {CRIS_SPECIAL_REGS_CONTENTS			\
-    | (1 << CRIS_ACR_REGNUM)},			\
-   {(0xffff | CRIS_FAKED_REGS_CONTENTS)		\
-    & ~(1 << CRIS_ACR_REGNUM)},			\
-   {(0xffff | CRIS_FAKED_REGS_CONTENTS		\
-    | CRIS_SPECIAL_REGS_CONTENTS)		\
-    & ~(1 << CRIS_ACR_REGNUM)},			\
    {0xffff | CRIS_FAKED_REGS_CONTENTS},		\
    {0xffff | CRIS_FAKED_REGS_CONTENTS		\
     | CRIS_SPECIAL_REGS_CONTENTS}		\
   }
 
 #define REGNO_REG_CLASS(REGNO)			\
-  ((REGNO) == CRIS_ACR_REGNUM ? ACR_REGS :	\
-   (REGNO) == CRIS_MOF_REGNUM ? MOF_REGS :	\
+  ((REGNO) == CRIS_MOF_REGNUM ? MOF_REGS :	\
    (REGNO) == CRIS_SRP_REGNUM ? SRP_REGS :	\
    (REGNO) == CRIS_CC0_REGNUM ? CC0_REGS :	\
    GENERAL_REGS)
 
 #define BASE_REG_CLASS GENERAL_REGS
 
-#define MODE_CODE_BASE_REG_CLASS(MODE, AS, OCODE, ICODE)	\
-  ((OCODE) != POST_INC ? BASE_REG_CLASS : GENNONACR_REGS)
-
 #define INDEX_REG_CLASS GENERAL_REGS
 
 /* Since it uses reg_renumber, it is safe only once reg_renumber
diff --git a/gcc/config/cris/cris.md b/gcc/config/cris/cris.md
index 9d1c179d521..9d9eb8b7dbb 100644
--- a/gcc/config/cris/cris.md
+++ b/gcc/config/cris/cris.md
@@ -60,7 +60,6 @@
   [(CRIS_STATIC_CHAIN_REGNUM 7)
    (CRIS_REAL_FP_REGNUM 8)
    (CRIS_SP_REGNUM 14)
-   (CRIS_ACR_REGNUM 15)
    (CRIS_SRP_REGNUM 16)
    (CRIS_MOF_REGNUM 17)
    (CRIS_AP_REGNUM 18)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-02-02  0:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-02  0:20 [gcc r12-6989] cris: Remove CRIS v32 ACR artefacts Hans-Peter Nilsson

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